summaryrefslogtreecommitdiffstats
path: root/contrib/netbsd-tests
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/netbsd-tests')
-rw-r--r--contrib/netbsd-tests/bin/cat/d_align.in2
-rw-r--r--contrib/netbsd-tests/bin/cat/d_align.out2
-rw-r--r--contrib/netbsd-tests/bin/cat/d_se_output.in3
-rw-r--r--contrib/netbsd-tests/bin/cat/d_se_output.out3
-rwxr-xr-xcontrib/netbsd-tests/bin/cat/t_cat.sh14
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/dotcmd/scoped_command25
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh6
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_arith.sh1035
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_cmdsub.sh783
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_evaltested.sh6
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_exit.sh120
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_expand.sh296
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_fsplit.sh244
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_here.sh536
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_option.sh674
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_redir.sh903
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_redircloexec.sh178
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_set_e.sh42
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_shift.sh181
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_ulimit.sh23
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_varquote.sh95
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_varval.sh251
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_wait.sh152
-rwxr-xr-xcontrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh4
-rwxr-xr-xcontrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh8
-rwxr-xr-xcontrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh10
-rw-r--r--contrib/netbsd-tests/dev/audio/h_pad.c10
-rw-r--r--contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue2032
-rw-r--r--contrib/netbsd-tests/dev/cgd/t_cgd_3des.c913
-rw-r--r--contrib/netbsd-tests/dev/cgd/t_cgd_aes.c3606
-rw-r--r--contrib/netbsd-tests/dev/cgd/t_cgd_blowfish.c2341
-rw-r--r--contrib/netbsd-tests/dev/dm/h_dm.c4
-rwxr-xr-xcontrib/netbsd-tests/dev/fss/t_fss.sh84
-rwxr-xr-xcontrib/netbsd-tests/dev/sysmon/t_swsensor.sh12
-rw-r--r--contrib/netbsd-tests/dev/sysmon/t_swwdog.c3
-rw-r--r--contrib/netbsd-tests/dev/usb/t_hid.c267
-rw-r--r--contrib/netbsd-tests/fs/common/fstest_lfs.c4
-rw-r--r--contrib/netbsd-tests/fs/common/h_fsmacros.h12
-rwxr-xr-xcontrib/netbsd-tests/fs/ffs/ffs_common.sh4
-rw-r--r--contrib/netbsd-tests/fs/fifofs/t_fifo.c3
-rw-r--r--contrib/netbsd-tests/fs/h_funcs.subr12
-rw-r--r--contrib/netbsd-tests/fs/nfs/nfsservice/mountd.c2575
-rw-r--r--contrib/netbsd-tests/fs/nfs/nfsservice/nfsd.c571
-rw-r--r--contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c5
-rwxr-xr-xcontrib/netbsd-tests/fs/nfs/t_rquotad.sh4
-rwxr-xr-xcontrib/netbsd-tests/fs/psshfs/t_psshfs.sh23
-rw-r--r--contrib/netbsd-tests/fs/puffs/t_basic.c6
-rw-r--r--contrib/netbsd-tests/fs/tmpfs/h_funcs.subr19
-rw-r--r--contrib/netbsd-tests/fs/tmpfs/h_tools.c24
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_link.sh15
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_mknod.sh16
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_mount.sh16
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_readdir.sh8
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_remove.sh15
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_sizes.sh8
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_statvfs.sh8
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_vnd.sh33
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh8
-rw-r--r--contrib/netbsd-tests/fs/vfs/t_io.c20
-rw-r--r--contrib/netbsd-tests/fs/vfs/t_renamerace.c4
-rw-r--r--contrib/netbsd-tests/fs/vfs/t_unpriv.c4
-rw-r--r--contrib/netbsd-tests/fs/vfs/t_vnops.c191
-rwxr-xr-xcontrib/netbsd-tests/games/t_factor.sh43
-rw-r--r--contrib/netbsd-tests/h_macros.h8
-rw-r--r--contrib/netbsd-tests/include/sys/t_bitops.c204
-rw-r--r--contrib/netbsd-tests/include/sys/t_cdefs.c116
-rw-r--r--contrib/netbsd-tests/include/sys/t_pslist.c125
-rw-r--r--contrib/netbsd-tests/include/sys/t_socket.c4
-rw-r--r--contrib/netbsd-tests/include/t_paths.c23
-rw-r--r--contrib/netbsd-tests/ipf/expected/n146
-rw-r--r--contrib/netbsd-tests/ipf/expected/n14_66
-rwxr-xr-xcontrib/netbsd-tests/ipf/t_filter_parse.sh3
-rwxr-xr-xcontrib/netbsd-tests/ipf/t_nat_exec.sh6
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c4
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/read/t_file.c4
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c4
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c4
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_ioctl.c7
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_proc1.c13
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_proc2.c10
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_proc3.c9
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_sig.c17
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_vnode.c536
-rw-r--r--contrib/netbsd-tests/kernel/msg.h136
-rw-r--r--contrib/netbsd-tests/kernel/t_mqueue.c3
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace.c208
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait.c5082
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait.h431
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait3.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait4.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait6.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_waitid.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_waitpid.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_rnd.c25
-rw-r--r--contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c818
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S11
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S5
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S4
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c7
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S11
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_faccessat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_fchownat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_fexecve.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_fstatat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_mknodat.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_o_search.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_openat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_utimensat.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/db/h_db.c77
-rw-r--r--contrib/netbsd-tests/lib/libc/db/h_lfsr.c179
-rwxr-xr-xcontrib/netbsd-tests/lib/libc/db/t_db.sh442
-rw-r--r--contrib/netbsd-tests/lib/libc/db/t_db_hash_seq.c343
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c5
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/isqemu.h28
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c4
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c12
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_assert.c17
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_dir.c56
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c5
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c30
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c25
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_ftok.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c3
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_nice.c7
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_randomid.c22
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_siginfo.c25
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_sleep.c24
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_time.c17
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_ttyname.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_vis.c37
-rw-r--r--contrib/netbsd-tests/lib/libc/inet/t_inet_addr.c109
-rw-r--r--contrib/netbsd-tests/lib/libc/inet/t_inet_network.c68
-rwxr-xr-xcontrib/netbsd-tests/lib/libc/net/t_servent.sh4
-rw-r--r--contrib/netbsd-tests/lib/libc/rpc/t_rpc.c296
-rw-r--r--contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c2
-rw-r--r--contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c2
-rwxr-xr-xcontrib/netbsd-tests/lib/libc/ssp/t_ssp.sh3
-rw-r--r--contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c96
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c75
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c14
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_strtoi.c304
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c13
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_memcpy.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_memmem.c7
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_memset.c52
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_strchr.c12
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_strerror.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/sync/cpp_atomic_ops_linkable.cc107
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_access.c19
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_bind.c78
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_chroot.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c63
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_connect.c31
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_getcontext.c12
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_getrusage.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_getsockname.c82
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_kevent.c14
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_mincore.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_mlock.c116
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_mmap.c89
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_mprotect.c17
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_posix_fallocate.c63
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c50
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c155
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_timer_create.c119
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_wait.c323
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c345
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_wait_noproc_wnohang.c30
-rw-r--r--contrib/netbsd-tests/lib/libc/t_cdb.c7
-rw-r--r--contrib/netbsd-tests/lib/libc/time/t_strptime.c257
-rw-r--r--contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y5
-rw-r--r--contrib/netbsd-tests/lib/libm/t_casinh.c81
-rw-r--r--contrib/netbsd-tests/lib/libm/t_exp.c41
-rw-r--r--contrib/netbsd-tests/lib/libm/t_fe_round.c124
-rw-r--r--contrib/netbsd-tests/lib/libm/t_fenv.c220
-rw-r--r--contrib/netbsd-tests/lib/libm/t_fmod.c9
-rw-r--r--contrib/netbsd-tests/lib/libm/t_hypot.c81
-rw-r--r--contrib/netbsd-tests/lib/libm/t_ilogb.c130
-rw-r--r--contrib/netbsd-tests/lib/libm/t_ldexp.c12
-rw-r--r--contrib/netbsd-tests/lib/libm/t_log.c16
-rw-r--r--contrib/netbsd-tests/lib/libm/t_pow.c7
-rw-r--r--contrib/netbsd-tests/lib/libm/t_precision.c8
-rw-r--r--contrib/netbsd-tests/lib/libpthread/h_common.h6
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_cond.c25
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_mutex.c460
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_rwlock.c20
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_swapcontext.c9
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_timedmutex.c30
-rw-r--r--contrib/netbsd-tests/lib/librumpclient/h_execthr.c68
-rwxr-xr-xcontrib/netbsd-tests/lib/librumpclient/t_exec.sh4
-rw-r--r--contrib/netbsd-tests/lib/librumpclient/t_fd.c4
-rwxr-xr-xcontrib/netbsd-tests/lib/librumphijack/t_tcpip.sh19
-rw-r--r--contrib/netbsd-tests/lib/libusbhid/hid_test_data.c137
-rw-r--r--contrib/netbsd-tests/lib/libusbhid/t_usbhid.c452
-rw-r--r--contrib/netbsd-tests/lib/libusbhid/test_usb_hid_usages17
-rw-r--r--contrib/netbsd-tests/lib/libutil/t_parsedate.c473
-rwxr-xr-xcontrib/netbsd-tests/net/arp/t_arp.sh612
-rwxr-xr-xcontrib/netbsd-tests/net/arp/t_dad.sh201
-rw-r--r--contrib/netbsd-tests/net/bpfilter/t_bpfilter.c86
-rw-r--r--contrib/netbsd-tests/net/bpfjit/t_bpfjit.c756
-rw-r--r--contrib/netbsd-tests/net/icmp/t_forward.c6
-rwxr-xr-xcontrib/netbsd-tests/net/icmp/t_icmp6_redirect.sh152
-rwxr-xr-xcontrib/netbsd-tests/net/icmp/t_icmp_redirect.sh285
-rw-r--r--contrib/netbsd-tests/net/icmp/t_ping.c8
-rwxr-xr-xcontrib/netbsd-tests/net/icmp/t_ping2.sh4
-rw-r--r--contrib/netbsd-tests/net/if/ifconf.c134
-rw-r--r--contrib/netbsd-tests/net/if/t_compat.c4
-rwxr-xr-xcontrib/netbsd-tests/net/if/t_ifconf.sh100
-rwxr-xr-xcontrib/netbsd-tests/net/if/t_ifconfig.sh333
-rwxr-xr-xcontrib/netbsd-tests/net/if_bridge/t_bridge.sh409
-rwxr-xr-xcontrib/netbsd-tests/net/if_gif/t_gif.sh763
-rwxr-xr-xcontrib/netbsd-tests/net/if_pppoe/t_pppoe.sh416
-rwxr-xr-xcontrib/netbsd-tests/net/if_tap/t_tap.sh198
-rw-r--r--contrib/netbsd-tests/net/in_cksum/assym.h10
-rw-r--r--contrib/netbsd-tests/net/in_cksum/in_cksum.c270
-rwxr-xr-xcontrib/netbsd-tests/net/in_cksum/t_in_cksum.sh78
-rw-r--r--contrib/netbsd-tests/net/mcast/mcast.c559
-rwxr-xr-xcontrib/netbsd-tests/net/mcast/t_mcast.sh106
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_ldp_regen.sh11
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_mpls_fw.sh6
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_mpls_fw6.sh220
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_mpls_fw64.sh226
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_rfc4182.sh6
-rwxr-xr-xcontrib/netbsd-tests/net/ndp/t_dad.sh276
-rwxr-xr-xcontrib/netbsd-tests/net/ndp/t_ndp.sh406
-rwxr-xr-xcontrib/netbsd-tests/net/ndp/t_ra.sh687
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_forwarding.sh530
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_ipaddress.sh193
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_ipv6_lifetime.sh127
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_ipv6address.sh387
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_mtudisc.sh192
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_mtudisc6.sh179
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_ping6_opts.sh380
-rw-r--r--contrib/netbsd-tests/net/net/t_tcp.c15
-rwxr-xr-xcontrib/netbsd-tests/net/net_common.sh314
-rwxr-xr-xcontrib/netbsd-tests/net/route/t_change.sh255
-rwxr-xr-xcontrib/netbsd-tests/net/route/t_flags.sh334
-rwxr-xr-xcontrib/netbsd-tests/net/route/t_flags6.sh268
-rwxr-xr-xcontrib/netbsd-tests/net/route/t_route.sh406
-rw-r--r--contrib/netbsd-tests/rump/modautoload/t_modautoload.c15
-rw-r--r--contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c3
-rw-r--r--contrib/netbsd-tests/rump/rumpkern/t_lwproc.c4
-rwxr-xr-xcontrib/netbsd-tests/rump/rumpkern/t_sp.sh7
-rwxr-xr-xcontrib/netbsd-tests/rump/rumpnet/t_shmif.sh4
-rw-r--r--contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c3
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.2part.show.label8
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.2part.show.normal8
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.2part.show.uuid8
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.backup1851
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.disklabel27
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.disklabel.show.normal12
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.empty.show.normal7
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.removepart.show.normal8
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.resizedisk.show.normal9
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.resizepart.show.normal8
-rwxr-xr-xcontrib/netbsd-tests/sbin/gpt/t_gpt.sh318
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/common.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_check.sh (renamed from contrib/netbsd-tests/bin/sh/t_compexit.sh)57
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_grow.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/sysctl/t_perm.sh5
-rwxr-xr-xcontrib/netbsd-tests/share/mk/t_lib.sh8
-rwxr-xr-xcontrib/netbsd-tests/share/mk/t_prog.sh8
-rwxr-xr-xcontrib/netbsd-tests/share/mk/t_test.sh4
-rw-r--r--contrib/netbsd-tests/sys/net/t_print.c178
-rw-r--r--contrib/netbsd-tests/sys/netatalk/t_print.c135
-rw-r--r--contrib/netbsd-tests/sys/netinet/t_print.c144
-rw-r--r--contrib/netbsd-tests/sys/netinet6/t_print.c154
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/cc/t_hello.sh4
-rw-r--r--contrib/netbsd-tests/usr.bin/config/d_min6
-rw-r--r--contrib/netbsd-tests/usr.bin/config/support/conf/files15
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/config/t_config.sh203
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/gdb/t_regress.sh77
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/ld/t_script.sh230
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/ld/t_section.sh100
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/make/t_make.sh13
-rw-r--r--contrib/netbsd-tests/usr.bin/netpgpverify/Testspec114
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh15140
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/sed/t_sed.sh19
-rw-r--r--contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txtbin4 -> 1530 bytes
-rw-r--r--contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txtbin4 -> 1530 bytes
-rw-r--r--contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txtbin4 -> 1530 bytes
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_struct.c26
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_union.c16
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c14
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c6
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_nested_struct.c25
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_cast.c18
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_init4.c15
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c9
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_type_question_colon.c14
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_typefun.c22
-rwxr-xr-xcontrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh4
301 files changed, 49812 insertions, 13745 deletions
diff --git a/contrib/netbsd-tests/bin/cat/d_align.in b/contrib/netbsd-tests/bin/cat/d_align.in
index 31bf4a7..37d30c7 100644
--- a/contrib/netbsd-tests/bin/cat/d_align.in
+++ b/contrib/netbsd-tests/bin/cat/d_align.in
@@ -1,3 +1,5 @@
a b c
+
1 2 3
+
x y z
diff --git a/contrib/netbsd-tests/bin/cat/d_align.out b/contrib/netbsd-tests/bin/cat/d_align.out
index fd32469..4f44c00 100644
--- a/contrib/netbsd-tests/bin/cat/d_align.out
+++ b/contrib/netbsd-tests/bin/cat/d_align.out
@@ -1,3 +1,5 @@
1 a b c$
+ $
2 1 2 3$
+ $
3 x y z$
diff --git a/contrib/netbsd-tests/bin/cat/d_se_output.in b/contrib/netbsd-tests/bin/cat/d_se_output.in
new file mode 100644
index 0000000..0d3c8c1
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_se_output.in
@@ -0,0 +1,3 @@
+
+Of course it runs NetBSD
+
diff --git a/contrib/netbsd-tests/bin/cat/d_se_output.out b/contrib/netbsd-tests/bin/cat/d_se_output.out
new file mode 100644
index 0000000..c4767c3
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_se_output.out
@@ -0,0 +1,3 @@
+$
+Of course it runs NetBSD$
+$
diff --git a/contrib/netbsd-tests/bin/cat/t_cat.sh b/contrib/netbsd-tests/bin/cat/t_cat.sh
index 1b7a930..799a748 100755
--- a/contrib/netbsd-tests/bin/cat/t_cat.sh
+++ b/contrib/netbsd-tests/bin/cat/t_cat.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_cat.sh,v 1.2 2012/03/27 17:57:02 jruoho Exp $
+# $NetBSD: t_cat.sh,v 1.3 2016/06/16 01:04:58 sevan Exp $
#
# Copyright (c) 2012 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -52,8 +52,20 @@ nonexistent_body() {
-x "cat /some/name/that/does/not/exist"
}
+atf_test_case se_output
+se_output_head() {
+ atf_set "descr" "Test that cat(1) prints a $ sign " \
+ "on blank lines with options '-se' (PR bin/51250)"
+}
+
+se_output_body() {
+ atf_check -s ignore -o file:$(atf_get_srcdir)/d_se_output.out \
+ -x "cat -se $(atf_get_srcdir)/d_se_output.in"
+}
+
atf_init_test_cases()
{
atf_add_test_case align
atf_add_test_case nonexistent
+ atf_add_test_case se_output
}
diff --git a/contrib/netbsd-tests/bin/sh/dotcmd/scoped_command b/contrib/netbsd-tests/bin/sh/dotcmd/scoped_command
index fda4e53..36e712b 100755
--- a/contrib/netbsd-tests/bin/sh/dotcmd/scoped_command
+++ b/contrib/netbsd-tests/bin/sh/dotcmd/scoped_command
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $NetBSD: scoped_command,v 1.1 2014/05/31 14:29:06 christos Exp $
+# $NetBSD: scoped_command,v 1.2 2016/03/27 14:57:50 christos Exp $
#
# Copyright (c) 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -30,6 +30,27 @@
# POSSIBILITY OF SUCH DAMAGE.
#
+: ${TEST_SH:=/bin/sh}
+
+sane_sh()
+{
+ set -- ${TEST_SH}
+ case "$#" in
+ (0) set /bin/sh;;
+ (1|2) ;;
+ (*) set "$1";; # Just ignore options if we cannot make them work
+ esac
+
+ case "$1" in
+ /*) TEST_SH="$1${2+ }$2";;
+ ./*) TEST_SH="${PWD}${1#.}${2+ }$2";;
+ */*) TEST_SH="${PWD}/$1${2+ }$2";;
+ *) TEST_SH="$( command -v "$1" )${2+ }$2";;
+ esac
+}
+
+sane_sh
+
set -e
# USAGE:
@@ -52,7 +73,7 @@ cmd="echo 'before ${3}'
${2}
echo 'after ${3}, return value:' ${?}"
-echo "#!/bin/sh"
+echo "#!${TEST_SH}"
[ 'func' = "${1}" ] && cat <<EOF
func()
diff --git a/contrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh b/contrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh
index b365b1d..8e9b277 100755
--- a/contrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh
+++ b/contrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_dotcmd.sh,v 1.1 2014/05/31 14:29:06 christos Exp $
+# $NetBSD: t_dotcmd.sh,v 1.2 2016/03/27 14:57:50 christos Exp $
#
# Copyright (c) 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -33,6 +33,10 @@
# in C/C++ so, for example, if the dotcmd is in a loop's body, a break in
# the sourced file can be used to break out of that loop.
+# Note that the standard does not require this, and allows lexically
+# scoped interpretation of break/continue (and permits dynamic scope
+# as an optional extension.)
+
cmds='return break continue'
scopes='case compound file for func subshell until while'
diff --git a/contrib/netbsd-tests/bin/sh/t_arith.sh b/contrib/netbsd-tests/bin/sh/t_arith.sh
new file mode 100755
index 0000000..d7b5083
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_arith.sh
@@ -0,0 +1,1035 @@
+# $NetBSD: t_arith.sh,v 1.5 2016/05/12 14:25:11 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+# Requirement is to support at least "signed long" whatever that means
+# (number of bits in "long" is not specified - but should be at least 32).
+
+# These tests use -o inline:"..." rather than -o match:'...' as we have
+# only digits to examine, and it is good to be sure that 1 + 1 really gives 2
+# and that 42 or 123 don't look like success because there is a 2 in them.
+
+ARITH_BITS='?'
+discover_range()
+{
+ # cannot use arithmetic "test" operators, range of test in
+ # ATF_SHELL (or even TEST_SH) might not be as big as that
+ # supported by $(( )) in TEST_SH
+
+ if ! ${TEST_SH} -c ': $(( 0x10000 ))' 2>/dev/null
+ then
+ # 16 bits or less, or hex unsupported, just give up...
+ return
+ fi
+ test $( ${TEST_SH} -c 'echo $(( 0x1FFFF ))' ) = 131071 || return
+
+ # when attempting to exceed the number of available bits
+ # the shell may react in any of 3 (rational) ways
+ # 1. syntax error (maybe even core dump...) and fail
+ # 2. represent a positive number input as negative value
+ # 3. keep the number positive, but not the value expected
+ # (perhaps pegged at the max possible value)
+ # any of those may be accompanied by a message to stderr
+
+ # Must check all 3 possibilities for each plausible size
+ # Tests do not use 0x8000... because that value can have weird
+ # other side effects that are not relevant to discover here.
+ # But we do want to try and force the sign bit set.
+
+ if ! ${TEST_SH} -c ': $(( 0xC0000000 ))' 2>/dev/null
+ then
+ # proobably shell detected overflow and complained
+ ARITH_BITS=32
+ return
+ fi
+ if ${TEST_SH} 2>/dev/null \
+ -c 'case $(( 0xC0000000 )); in (-*) exit 0;; esac; exit 1'
+ then
+ ARITH_BITS=32
+ return
+ fi
+ if ${TEST_SH} -c '[ $(( 0xC0000000 )) != 3221225472 ]' 2>/dev/null
+ then
+ ARITH_BITS=32
+ return
+ fi
+
+ if ! ${TEST_SH} -c ': $(( 0xC000000000000000 ))' 2>/dev/null
+ then
+ ARITH_BITS=64
+ return
+ fi
+ if ${TEST_SH} 2>/dev/null \
+ -c 'case $(( 0xC000000000000000 )); in (-*) exit 0;; esac; exit 1'
+ then
+ ARITH_BITS=64
+ return
+ fi
+ if ${TEST_SH} 2>/dev/null \
+ -c '[ $((0xC000000000000000)) != 13835058055282163712 ]'
+ then
+ ARITH_BITS=64
+ return
+ fi
+
+ if ${TEST_SH} 2>/dev/null -c \
+ '[ $((0x123456781234567812345678)) = 5634002657842756053938493048 ]'
+ then
+ # just assume... (for now anyway, revisit when it happens...)
+ ARITH_BITS=96
+ return
+ fi
+}
+
+atf_test_case constants
+constants_head()
+{
+ atf_set "descr" "Tests that arithmetic expansion can handle constants"
+}
+constants_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $((0x0))'
+
+ # atf_expect_fail "PR bin/50959"
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $((0X0))'
+ # atf_expect_pass
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $((000))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 000000001 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x000000 ))'
+
+ atf_check -s exit:0 -o inline:'99999\n' -e empty \
+ ${TEST_SH} -c 'echo $((99999))'
+
+ [ ${ARITH_BITS} -gt 44 ] &&
+ atf_check -s exit:0 -o inline:'9191919191919\n' -e empty \
+ ${TEST_SH} -c 'echo $((9191919191919))'
+
+ atf_check -s exit:0 -o inline:'13\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xD ))'
+ atf_check -s exit:0 -o inline:'11\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 013 ))'
+ atf_check -s exit:0 -o inline:'7\n' -e empty ${TEST_SH} -c \
+ 'x=7;echo $(($x))'
+ atf_check -s exit:0 -o inline:'9\n' -e empty ${TEST_SH} -c \
+ 'x=9;echo $((x))'
+
+ atf_check -s exit:0 -o inline:'11\n' -e empty \
+ ${TEST_SH} -c 'x=0xB; echo $(( $x ))'
+ atf_check -s exit:0 -o inline:'27\n' -e empty \
+ ${TEST_SH} -c 'x=0X1B; echo $(( x ))'
+ atf_check -s exit:0 -o inline:'27\n' -e empty \
+ ${TEST_SH} -c 'X=033; echo $(( $X ))'
+ atf_check -s exit:0 -o inline:'219\n' -e empty \
+ ${TEST_SH} -c 'X=0333; echo $(( X ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty \
+ ${TEST_SH} -c 'NULL=; echo $(( NULL ))'
+
+ # Not clear if this is 0, nothing, or an error, so omit for now
+ # atf_check -s exit:0 -o inline:'0\n' -e empty \
+ # ${TEST_SH} -c 'echo $(( ))'
+
+ # not clear whether this should return 0 or an error, so omit for now
+ # atf_check -s exit:0 -o inline:'0\n' -e empty \
+ # ${TEST_SH} -c 'echo $(( UNDEFINED_VAR ))'
+}
+
+
+atf_test_case do_unary_plus
+do_unary_plus_head()
+{
+ atf_set "descr" "Tests that unary plus works as expected"
+}
+do_unary_plus_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( +0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( +1 ))'
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( + 6 ))'
+ atf_check -s exit:0 -o inline:'4321\n' -e empty ${TEST_SH} -c \
+ 'echo $(( + 4321 ))'
+ atf_check -s exit:0 -o inline:'17185\n' -e empty ${TEST_SH} -c \
+ 'echo $(( + 0x4321 ))'
+}
+
+atf_test_case do_unary_minus
+do_unary_minus_head()
+{
+ atf_set "descr" "Tests that unary minus works as expected"
+}
+do_unary_minus_body()
+{
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 0 ))'
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 1 ))'
+ atf_check -s exit:0 -o inline:'-6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 6 ))'
+ atf_check -s exit:0 -o inline:'-4321\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 4321 ))'
+ atf_check -s exit:0 -o inline:'-2257\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 04321 ))'
+ atf_check -s exit:0 -o inline:'-7\n' -e empty ${TEST_SH} -c \
+ 'echo $((-7))'
+}
+
+atf_test_case do_unary_not
+do_unary_not_head()
+{
+ atf_set "descr" "Tests that unary not (boolean) works as expected"
+}
+do_unary_not_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! 0 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( !1234 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( !0xFFFF ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! 000000 ))'
+}
+
+atf_test_case do_unary_tilde
+do_unary_tilde_head()
+{
+ atf_set "descr" "Tests that unary not (bitwise) works as expected"
+}
+do_unary_tilde_body()
+{
+ # definitely 2's complement arithmetic here...
+
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ~ 0 ))'
+ atf_check -s exit:0 -o inline:'-2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ~ 1 ))'
+
+ atf_check -s exit:0 -o inline:'-1235\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ~1234 ))'
+ atf_check -s exit:0 -o inline:'-256\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ~0xFF ))'
+}
+
+atf_test_case elementary_add
+elementary_add_head()
+{
+ atf_set "descr" "Tests that simple addition works as expected"
+}
+elementary_add_body()
+{
+ # some of these tests actually test unary ops & op precedence...
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 + 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 + 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 + 1 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 + 1 ))'
+ atf_check -s exit:0 -o inline:'10\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 4 + 6 ))'
+ atf_check -s exit:0 -o inline:'10\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 6 + 4 ))'
+ atf_check -s exit:0 -o inline:'5555\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1234 + 4321 ))'
+ atf_check -s exit:0 -o inline:'3333\n' -e empty ${TEST_SH} -c \
+ 'echo $((1111+2222))'
+ atf_check -s exit:0 -o inline:'5555\n' -e empty ${TEST_SH} -c \
+ 'echo $((+3333+2222))'
+ atf_check -s exit:0 -o inline:'7777\n' -e empty ${TEST_SH} -c \
+ 'echo $((+3333 + +4444))'
+ atf_check -s exit:0 -o inline:'-7777\n' -e empty ${TEST_SH} -c \
+ 'echo -$((+4125+ +3652))'
+}
+
+atf_test_case elementary_sub
+elementary_sub_head()
+{
+ atf_set "descr" "Tests that simple subtraction works as expected"
+}
+elementary_sub_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 - 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 - 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 - 1 ))'
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 - 1 ))'
+ atf_check -s exit:0 -o inline:'488\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1066 - 578 ))'
+ atf_check -s exit:0 -o inline:'-3662\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2016-5678 ))'
+ atf_check -s exit:0 -o inline:'-3662\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2016+-5678 ))'
+ atf_check -s exit:0 -o inline:'-3662\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2016-+5678 ))'
+ atf_check -s exit:0 -o inline:'-7694\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -2016-5678 ))'
+ atf_check -s exit:0 -o inline:'--1\n' -e empty ${TEST_SH} -c \
+ 'echo -$(( -1018 - -1017 ))'
+}
+
+atf_test_case elementary_mul
+elementary_mul_head()
+{
+ atf_set "descr" "Tests that simple multiplication works as expected"
+}
+elementary_mul_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 * 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 * 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 * 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 * 1 ))'
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 * 1 ))'
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 * -1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 * -1 ))'
+ atf_check -s exit:0 -o inline:'391\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 17 * 23 ))'
+ atf_check -s exit:0 -o inline:'169\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 13*13 ))'
+ atf_check -s exit:0 -o inline:'-11264\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -11 *1024 ))'
+ atf_check -s exit:0 -o inline:'-16983\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 17* -999 ))'
+ atf_check -s exit:0 -o inline:'9309\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -29*-321 ))'
+}
+
+atf_test_case elementary_div
+elementary_div_head()
+{
+ atf_set "descr" "Tests that simple division works as expected"
+}
+elementary_div_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 / 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 / 1 ))'
+ test ${ARITH_BITS} -ge 38 &&
+ atf_check -s exit:0 -o inline:'99999999999\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 99999999999 / 1 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 / 1 ))'
+
+ atf_check -s exit:0 -o inline:'3\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 / 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 / 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 / 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 / 4 ))'
+
+ atf_check -s exit:0 -o inline:'173\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 123456 / 713 ))'
+ atf_check -s exit:0 -o inline:'13\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 169 / 13 ))'
+}
+
+atf_test_case elementary_rem
+elementary_rem_head()
+{
+ atf_set "descr" "Tests that simple modulus works as expected"
+}
+elementary_rem_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 % 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 % 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 % 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9999 % 1 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 % 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 % 2 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 % 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xFFFF % 2 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 % 3 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 % 3 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 % 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 % 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3123 % 3 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9999 % 2 ))'
+
+ atf_check -s exit:0 -o inline:'107\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 123456%173 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $((169%13))'
+}
+
+atf_test_case elementary_shl
+elementary_shl_head()
+{
+ atf_set "descr" "Tests that simple shift left works as expected"
+}
+elementary_shl_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 << 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 << 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 << 17 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 << 0 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 << 1 ))'
+ atf_check -s exit:0 -o inline:'131072\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 << 17 ))'
+
+ atf_check -s exit:0 -o inline:'2021161080\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x3C3C3C3C << 1 ))'
+
+ test "${ARITH_BITS}" -ge 40 &&
+ atf_check -s exit:0 -o inline:'129354309120\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x3C3C3C3C << 7 ))'
+ test "${ARITH_BITS}" -ge 72 &&
+ atf_check -s exit:0 -o inline:'1111145054534149079040\n' \
+ -e empty ${TEST_SH} -c 'echo $(( 0x3C3C3C3C << 40 ))'
+
+ return 0
+}
+
+atf_test_case elementary_shr
+elementary_shr_head()
+{
+ atf_set "descr" "Tests that simple shift right works as expected"
+}
+elementary_shr_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 >> 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 >> 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 >> 17 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 >> 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 >> 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 >> 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 >> 1 ))'
+
+ atf_check -s exit:0 -o inline:'4\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x10 >> 2 ))'
+ atf_check -s exit:0 -o inline:'4\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 022 >> 2 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 131072 >> 17 ))'
+
+ test ${ARITH_BITS} -ge 40 &&
+ atf_check -s exit:0 -o inline:'8\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x4000000000 >> 35 ))'
+ test ${ARITH_BITS} -ge 80 &&
+ atf_check -s exit:0 -o inline:'4464\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x93400FACE005C871000 >> 64 ))'
+
+ return 0
+}
+
+atf_test_case elementary_eq
+elementary_eq_head()
+{
+ atf_set "descr" "Tests that simple equality test works as expected"
+}
+elementary_eq_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0000 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0x00 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 == 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'X=30; Y=0x1E; echo $(( X == Y ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1234 == 4660 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1234 == 011064 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0000000000000001 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0x10000000000000 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 == 2 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'X=3; Y=7; echo $(( X == Y ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1234 == 0x4660 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 01234 == 0x11064 ))'
+}
+atf_test_case elementary_ne
+elementary_ne_head()
+{
+ atf_set "descr" "Tests that simple inequality test works as expected"
+}
+elementary_ne_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 != 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x71 != 17 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1234 != 01234 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1234 != 01234 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'X=3; echo $(( X != 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'X=3; Y=0x11; echo $(( X != Y ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 != 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 != 0x0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xA != 012 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'X=1; echo $(( X != 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'X=0xC; Y=014; echo $(( X != Y ))'
+}
+atf_test_case elementary_lt
+elementary_lt_head()
+{
+ atf_set "descr" "Tests that simple less than test works as expected"
+}
+elementary_lt_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 < 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 < 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 < 10 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 100 < 101 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xA1 < 200 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 < 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 < 0 ))'
+
+ test ${ARITH_BITS} -ge 40 &&
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1BEEFF00D < 0x1FACECAFE ))'
+
+ return 0
+}
+atf_test_case elementary_le
+elementary_le_head()
+{
+ atf_set "descr" "Tests that simple less or equal test works as expected"
+}
+elementary_le_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 <= 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 <= 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 <= 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 <= 10 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 100 <= 101 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xA1 <= 161 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 <= 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -100 <= -200 ))'
+
+ test ${ARITH_BITS} -ge 40 &&
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'cost=; AUD=; echo $(( $cost 0x2FEEDBABE <= $AUD 12866927294 ))'
+
+ return 0
+}
+atf_test_case elementary_gt
+elementary_gt_head()
+{
+ atf_set "descr" "Tests that simple greater than works as expected"
+}
+elementary_gt_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 > 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 > -1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 11 > 012 ))'
+
+ # atf_expect_fail "PR bin/50959"
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2147483647 > 0X7FFFFF0 ))'
+ # atf_expect_pass
+
+ test ${ARITH_BITS} -gt 32 &&
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x80000000 > 0x7FFFFFFF ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 > 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 > 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 > 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 > 10 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2015 > 2016 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xA1 > 200 ))'
+
+ test ${ARITH_BITS} -ge 44 &&
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x7F07F07F0 > 34099628014 ))'
+
+ return 0
+}
+atf_test_case elementary_ge
+elementary_ge_head()
+{
+ atf_set "descr" "Tests that simple greater or equal works as expected"
+}
+elementary_ge_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 >= 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 >= 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -100 >= -101 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 >= 0 ))'
+}
+
+atf_test_case fiddle_bits_and
+fiddle_bits_and_head()
+{
+ atf_set "descr" "Test bitwise and operations in arithmetic expressions"
+}
+fiddle_bits_and_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 & 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 & 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 & 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 & 1 ))'
+
+ atf_check -s exit:0 -o inline:'255\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xFF & 0xFF ))'
+ atf_check -s exit:0 -o inline:'255\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xFFFF & 0377 ))'
+
+ test "${ARITH_BITS}" -ge 48 &&
+ atf_check -s exit:0 -o inline:'70377641607203\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x5432FEDC0123 & 0x42871357BAB3 ))'
+
+ return 0
+}
+atf_test_case fiddle_bits_or
+fiddle_bits_or_head()
+{
+ atf_set "descr" "Test bitwise or operations in arithmetic expressions"
+}
+fiddle_bits_or_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 | 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 | 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 | 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 | 1 ))'
+
+ atf_check -s exit:0 -o inline:'4369\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1111 | 0x1111 ))'
+ atf_check -s exit:0 -o inline:'255\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xAA | 0125 ))'
+
+ test "${ARITH_BITS}" -ge 48 &&
+ atf_check -s exit:0 -o inline:'95348271856563\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x5432FEDC0123 | 0x42871357BAB3 ))'
+
+ return 0
+}
+atf_test_case fiddle_bits_xor
+fiddle_bits_xor_head()
+{
+ atf_set "descr" "Test bitwise xor operations in arithmetic expressions"
+}
+fiddle_bits_xor_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 ^ 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 ^ 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 ^ 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 ^ 1 ))'
+
+ atf_check -s exit:0 -o inline:'255\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xF0 ^ 0x0F ))'
+ atf_check -s exit:0 -o inline:'15\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xF0 ^ 0xFF ))'
+
+ test "${ARITH_BITS}" -ge 48 &&
+ atf_check -s exit:0 -o inline:'24970630249360\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x5432FEDC0123 ^ 0x42871357BAB3 ))'
+
+ return 0
+}
+
+atf_test_case logical_and
+logical_and_head()
+{
+ atf_set "descr" "Test logical and operations in arithmetic expressions"
+}
+logical_and_body()
+{
+ # cannot test short-circuit eval until sh implements side effects...
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 && 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 && 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 && 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 && 1 ))'
+
+ # atf_expect_fail "PR bin/50960"
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1111 && 01234 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xFFFF && 0xF0F0 ))'
+}
+atf_test_case logical_or
+logical_or_head()
+{
+ atf_set "descr" "Test logical or operations in arithmetic expressions"
+}
+logical_or_body()
+{
+ # cannot test short-circuit eval until sh implements side effects...
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 || 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 || 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 || 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 || 1 ))'
+
+ # atf_expect_fail "PR bin/50960"
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1111 || 01234 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x33 || 0xF0F0 ))'
+}
+
+atf_test_case make_selection
+make_selection_head()
+{
+ atf_set "descr" "Test ?: operator in arithmetic expressions"
+}
+make_selection_body()
+{
+ # atf_expect_fail "PR bin/50958"
+
+ atf_check -s exit:0 -o inline:'3\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 ? 2 : 3 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 ? 2 : 3 ))'
+
+ atf_check -s exit:0 -o inline:'111\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1234 ? 111 : 222 ))'
+
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 < 2 ? -1 : 1 > 2 ? 1 : 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 < 1 ? -1 : 1 > 1 ? 1 : 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 < 1 ? -1 : 2 > 1 ? 1 : 0 ))'
+}
+
+atf_test_case operator_precedence
+operator_precedence_head()
+{
+ atf_set "descr" "Test operator precedence without parentheses"
+}
+operator_precedence_body()
+{
+ # NB: apart from $(( )) ** NO ** parentheses in the expressions.
+
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 + 2 + 3 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 - 2 + 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 - 2 - 1 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 - 2 + 1 ))'
+
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 2 + 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 + -1 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! 2 + 1 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 + !1 ))'
+
+ atf_check -s exit:0 -o inline:'8\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 * 2 + 2 ))'
+ atf_check -s exit:0 -o inline:'7\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 + 2 * 2 ))'
+ atf_check -s exit:0 -o inline:'12\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 * 2 * 2 ))'
+
+ atf_check -s exit:0 -o inline:'5\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 / 3 + 2 ))'
+ atf_check -s exit:0 -o inline:'10\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + 3 / 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 / 3 / 2 ))'
+
+ atf_check -s exit:0 -o inline:'72\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 << 1 + 2 ))'
+ atf_check -s exit:0 -o inline:'48\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + 3 << 2 ))'
+ atf_check -s exit:0 -o inline:'288\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 << 3 << 2 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 >> 1 + 2 ))'
+ atf_check -s exit:0 -o inline:'3\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + 3 >> 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 >> 3 >> 1 ))'
+
+ atf_check -s exit:0 -o inline:'4\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 >> 3 << 1 ))'
+ atf_check -s exit:0 -o inline:'76\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 << 3 >> 1 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 + 3 < 3 * 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 << 3 >= 3 << 2 ))'
+
+ # sh inherits C's crazy operator precedence...
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xfD & 0xF == 0xF ))'
+}
+
+parentheses_head()
+{
+ atf_set "descr" "Test use of () to group sub-expressions"
+}
+parentheses_body()
+{
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( (1 + 2) + 3 ))'
+ atf_check -s exit:0 -o inline:'-4\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 - (2 + 3) ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 - (2 - 1) ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 - ( 2 + 1 ) ))'
+
+ atf_check -s exit:0 -o inline:'-3\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - (2 + 1) ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! (2 + 1) ))'
+
+ atf_check -s exit:0 -o inline:'12\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 * (2 + 2) ))'
+ atf_check -s exit:0 -o inline:'10\n' -e empty ${TEST_SH} -c \
+ 'echo $(( (3 + 2) * 2 ))'
+ atf_check -s exit:0 -o inline:'12\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 * (2 * 2) ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 / (3 + 2) ))'
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ( 9 + 3 ) / 2 ))'
+ atf_check -s exit:0 -o inline:'9\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 / ( 3 / 2 ) ))'
+
+ atf_check -s exit:0 -o inline:'20\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ( 9 << 1 ) + 2 ))'
+ atf_check -s exit:0 -o inline:'21\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + (3 << 2) ))'
+ atf_check -s exit:0 -o inline:'36864\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 << (3 << 2) ))'
+
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( (9 >> 1) + 2 ))'
+ atf_check -s exit:0 -o inline:'9\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + (3 >> 2) ))'
+ atf_check -s exit:0 -o inline:'9\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 >> (3 >> 1) ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 >> (3 << 1) ))'
+ atf_check -s exit:0 -o inline:'38\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 << (3 >> 1) ))'
+
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 + (3 < 3) * 2 ))'
+ atf_check -s exit:0 -o inline:'32\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 << ((3 >= 3) << 2) ))'
+
+ # sh inherits C's crazy operator precedence...
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( (0xfD & 0xF) == 0xF ))'
+}
+
+atf_test_case arithmetic_fails
+arithmetic_fails_head()
+{
+ atf_set "descr" "Dummy test to force failure"
+}
+arithmetic_fails_body()
+{
+ atf_fail "Cannot estimate number of bits supported by $(( ))"
+}
+
+atf_init_test_cases() {
+
+ discover_range
+
+ test "${ARITH_BITS}" = '?' && {
+ atf_add_test_case arithmetic_fails
+ return 0
+ }
+
+ # odd names are to get atf's sort order semi-rational
+
+ atf_add_test_case constants
+ atf_add_test_case do_unary_plus
+ atf_add_test_case do_unary_minus
+ atf_add_test_case do_unary_not
+ atf_add_test_case do_unary_tilde
+ atf_add_test_case elementary_add
+ atf_add_test_case elementary_sub
+ atf_add_test_case elementary_mul
+ atf_add_test_case elementary_div
+ atf_add_test_case elementary_rem
+ atf_add_test_case elementary_shl
+ atf_add_test_case elementary_shr
+ atf_add_test_case elementary_eq
+ atf_add_test_case elementary_ne
+ atf_add_test_case elementary_lt
+ atf_add_test_case elementary_le
+ atf_add_test_case elementary_gt
+ atf_add_test_case elementary_ge
+ atf_add_test_case fiddle_bits_and
+ atf_add_test_case fiddle_bits_or
+ atf_add_test_case fiddle_bits_xor
+ atf_add_test_case logical_and
+ atf_add_test_case logical_or
+ atf_add_test_case make_selection
+ atf_add_test_case operator_precedence
+ atf_add_test_case parentheses
+ # atf_add_test_case progressive # build up big expr
+ # atf_add_test_case test_errors # erroneous input
+ # atf_add_test_case torture # hard stuff (if there is any)
+ # atf_add_test_case var_assign # assignment ops
+ # atf_add_test_case vulgarity # truly evil inputs (syntax in vars...)
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_cmdsub.sh b/contrib/netbsd-tests/bin/sh/t_cmdsub.sh
new file mode 100755
index 0000000..f3ee210
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_cmdsub.sh
@@ -0,0 +1,783 @@
+# $NetBSD: t_cmdsub.sh,v 1.4 2016/04/04 12:40:13 christos Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+#
+# This file tests command substitutions ( `...` and $( ... ) )
+#
+# CAUTION:
+# Be careful attempting running these tests outside the ATF environment
+# Some of the tests run "rm *" in the current directory to clean up
+# An ATF test directory should be empty already, outside ATF, anything
+
+atf_test_case a_basic_cmdsub
+a_basic_cmdsub_head() {
+ atf_set "descr" 'Test operation of simple $( ) substitutions'
+}
+a_basic_cmdsub_body() {
+ atf_check -s exit:0 -o match:'Result is true today' -e empty \
+ ${TEST_SH} -c \
+ 'echo Result is $( true && echo true || echo false ) today'
+
+ atf_check -s exit:0 -o match:'Result is false today' -e empty \
+ ${TEST_SH} -c \
+ 'echo Result is $( false && echo true || echo false ) today'
+
+ atf_check -s exit:0 -o match:'aaabbbccc' -e empty \
+ ${TEST_SH} -c 'echo aaa$( echo bbb )ccc'
+ atf_check -s exit:0 -o match:'aaabbb cccddd' -e empty \
+ ${TEST_SH} -c 'echo aaa$( echo bbb ccc )ddd'
+ atf_check -s exit:0 -o inline:'aaabbb cccddd\n' -e empty \
+ ${TEST_SH} -c 'echo aaa$( echo bbb; echo ccc )ddd'
+ atf_check -s exit:0 -o inline:'aaabbb\ncccddd\n' -e empty \
+ ${TEST_SH} -c 'echo "aaa$( echo bbb; echo ccc )ddd"'
+
+ atf_check -s exit:0 -o inline:'some string\n' -e empty \
+ ${TEST_SH} -c 'X=$( echo some string ); echo "$X"'
+ atf_check -s exit:0 -o inline:'weird; string *\n' -e empty \
+ ${TEST_SH} -c 'X=$( echo "weird; string *" ); echo "$X"'
+
+ rm -f * 2>/dev/null || :
+ for f in file-1 file-2
+ do
+ cp /dev/null "$f"
+ done
+
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found $( echo * )'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found "$( echo * )"'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found $('" echo '*' )"
+ atf_check -s exit:0 -o match:'Found \*' -e empty \
+ ${TEST_SH} -c 'echo Found "$('" echo '*' "')"'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found $('" echo \\* )"
+ atf_check -s exit:0 -o match:'Found \*' -e empty \
+ ${TEST_SH} -c 'echo Found "$('" echo \\* )"\"
+}
+
+atf_test_case b_basic_backticks
+b_basic_backticks_head() {
+ atf_set "descr" 'Test operation of old style ` ` substitutions'
+}
+b_basic_backticks_body() {
+ atf_check -s exit:0 -o match:'Result is true today' -e empty \
+ ${TEST_SH} -c \
+ 'echo Result is `true && echo true || echo false` today'
+
+ atf_check -s exit:0 -o match:'Result is false today' -e empty \
+ ${TEST_SH} -c \
+ 'echo Result is `false && echo true || echo false` today'
+
+ atf_check -s exit:0 -o match:'aaabbbccc' -e empty \
+ ${TEST_SH} -c 'echo aaa` echo bbb `ccc'
+ atf_check -s exit:0 -o match:'aaabbb cccddd' -e empty \
+ ${TEST_SH} -c 'echo aaa` echo bbb ccc `ddd'
+ atf_check -s exit:0 -o inline:'aaabbb cccddd\n' -e empty \
+ ${TEST_SH} -c 'echo aaa` echo bbb; echo ccc `ddd'
+ atf_check -s exit:0 -o inline:'aaabbb\ncccddd\n' -e empty \
+ ${TEST_SH} -c 'echo "aaa` echo bbb; echo ccc `ddd"'
+
+ atf_check -s exit:0 -o inline:'some string\n' -e empty \
+ ${TEST_SH} -c 'X=` echo some string `; echo "$X"'
+ atf_check -s exit:0 -o inline:'weird; string *\n' -e empty \
+ ${TEST_SH} -c 'X=` echo "weird; string *" `; echo "$X"'
+
+ rm -f * 2>/dev/null || :
+ for f in file-1 file-2
+ do
+ cp /dev/null "$f"
+ done
+
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found ` echo * `'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found "` echo * `"'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found `'" echo '*' "'`'
+ atf_check -s exit:0 -o match:'Found \*' -e empty \
+ ${TEST_SH} -c 'echo Found "`'" echo '*' "'`"'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found `'" echo \\* "'`'
+ atf_check -s exit:0 -o match:'Found \*' -e empty \
+ ${TEST_SH} -c 'echo Found "`'" echo \\* "'`"'
+}
+
+atf_test_case c_nested_cmdsub
+c_nested_cmdsub_head() {
+ atf_set "descr" "Test that cmd substitutions can be nested"
+}
+c_nested_cmdsub_body() {
+ atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+ ${TEST_SH} -c 'echo __$( echo foo$(echo bar)bletch )__'
+ atf_check -s exit:0 -o match:'_abcde_' -e empty \
+ ${TEST_SH} -c 'echo _$(echo a$(echo $(echo b)c$(echo d))e )_'
+ atf_check -s exit:0 -o match:'123454321' -e empty \
+ ${TEST_SH} -c 'echo 1$(echo 2$(echo 3$(echo 4$(echo 5)4)3)2)1'
+}
+
+atf_test_case d_nested_backticks
+d_nested_backticks_head() {
+ atf_set "descr" "Tests that old style backtick cmd subs can be nested"
+}
+d_nested_backticks_body() {
+ atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+ ${TEST_SH} -c 'echo __` echo foo\`echo bar\`bletch `__'
+ atf_check -s exit:0 -o match:'_abcde_' -e empty \
+ ${TEST_SH} -c \
+ 'echo _`echo a\`echo \\\`echo b\\\`c\\\`echo d\\\`\`e `_'
+ atf_check -s exit:0 -o match:'123454321' -e empty \
+ ${TEST_SH} -c \
+ 'echo 1`echo 2\`echo 3\\\`echo 4\\\\\\\`echo 5\\\\\\\`4\\\`3\`2`1'
+}
+
+atf_test_case e_perverse_mixing
+e_perverse_mixing_head() {
+ atf_set "descr" \
+ "Checks various mixed new and old style cmd substitutions"
+}
+e_perverse_mixing_body() {
+ atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+ ${TEST_SH} -c 'echo __$( echo foo`echo bar`bletch )__'
+ atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+ ${TEST_SH} -c 'echo __` echo foo$(echo bar)bletch `__'
+ atf_check -s exit:0 -o match:'_abcde_' -e empty \
+ ${TEST_SH} -c 'echo _$(echo a`echo $(echo b)c$(echo d)`e )_'
+ atf_check -s exit:0 -o match:'_abcde_' -e empty \
+ ${TEST_SH} -c 'echo _`echo a$(echo \`echo b\`c\`echo d\`)e `_'
+ atf_check -s exit:0 -o match:'12345654321' -e empty \
+ ${TEST_SH} -c \
+ 'echo 1`echo 2$(echo 3\`echo 4\\\`echo 5$(echo 6)5\\\`4\`3)2`1'
+}
+
+atf_test_case f_redirect_in_cmdsub
+f_redirect_in_cmdsub_head() {
+ atf_set "descr" "Checks that redirects work in command substitutions"
+}
+f_redirect_in_cmdsub_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f file 2>/dev/null || :
+ atf_check -s exit:0 -o match:'_aa_' -e empty \
+ ${TEST_SH} -c 'echo _$( echo a$( echo b > file )a)_'
+ atf_check -s exit:0 -o match:b -e empty ${TEST_SH} -c 'cat file'
+ atf_check -s exit:0 -o match:'_aba_' -e empty \
+ ${TEST_SH} -c 'echo _$( echo a$( cat < file )a)_'
+ atf_check -s exit:0 -o match:'_aa_' -e empty \
+ ${TEST_SH} -c 'echo _$( echo a$( echo d >> file )a)_'
+ atf_check -s exit:0 -o inline:'b\nd\n' -e empty ${TEST_SH} -c 'cat file'
+ atf_check -s exit:0 -o match:'_aa_' -e match:'not error' \
+ ${TEST_SH} -c 'echo _$( echo a$( echo not error >&2 )a)_'
+}
+
+atf_test_case g_redirect_in_backticks
+g_redirect_in_backticks_head() {
+ atf_set "descr" "Checks that redirects work in old style cmd sub"
+}
+g_redirect_in_backticks_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f file 2>/dev/null || :
+ atf_check -s exit:0 -o match:'_aa_' -e empty \
+ ${TEST_SH} -c 'echo _` echo a\` echo b > file \`a`_'
+ atf_check -s exit:0 -o match:b -e empty ${TEST_SH} -c 'cat file'
+ atf_check -s exit:0 -o match:'_aba_' -e empty \
+ ${TEST_SH} -c 'echo _` echo a\` cat < file \`a`_'
+ atf_check -s exit:0 -o match:'_aa_' -e empty \
+ ${TEST_SH} -c 'echo _` echo a\` echo d >> file \`a`_'
+ atf_check -s exit:0 -o inline:'b\nd\n' -e empty ${TEST_SH} -c 'cat file'
+ atf_check -s exit:0 -o match:'_aa_' -e match:'not error' \
+ ${TEST_SH} -c 'echo _` echo a\` echo not error >&2 \`a`_'
+}
+
+atf_test_case h_vars_in_cmdsub
+h_vars_in_cmdsub_head() {
+ atf_set "descr" "Check that variables work in command substitutions"
+}
+h_vars_in_cmdsub_body() {
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo __$( echo ${X} )__'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo __$( echo "${X}" )__'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__$( echo ${X} )__"'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__$( echo "${X}" )__"'
+
+ atf_check -s exit:0 -o inline:'a\n\nb\n\nc\n' -e empty \
+ ${TEST_SH} -c "for X in a '' b '' c"'; do echo $( echo "$X" ); done'
+
+ atf_check -s exit:0 -o match:'__acd__' -e empty \
+ ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X-b}${Y-c}d)__"'
+ atf_check -s exit:0 -o match:'__abcd__' -e empty \
+ ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X:-b}${Y:-c}d)__"'
+ atf_check -s exit:0 -o match:'__XYX__' -e empty \
+ ${TEST_SH} -c 'X=X; echo "__${X}$( X=Y; echo ${X} )${X}__"'
+ atf_check -s exit:0 -o match:'__def__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__$(X=def; echo "${X}" )__"'
+ atf_check -s exit:0 -o inline:'abcdef\nabc\n' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "$X$(X=def; echo ${X} )"; echo $X'
+}
+
+atf_test_case i_vars_in_backticks
+i_vars_in_backticks_head() {
+ atf_set "descr" "Checks that variables work in old style cmd sub"
+}
+i_vars_in_backticks_body() {
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo __` echo ${X} `__'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo __` echo "${X}" `__'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__` echo ${X} `__"'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__` echo \"${X}\" `__"'
+
+ atf_check -s exit:0 -o inline:'a\n\nb\n\nc\n' -e empty \
+ ${TEST_SH} -c "for X in a '' b '' c"'; do echo $( echo "$X" ); done'
+
+ atf_check -s exit:0 -o match:'__acd__' -e empty \
+ ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X-b}${Y-c}d)__"'
+ atf_check -s exit:0 -o match:'__abcd__' -e empty \
+ ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X:-b}${Y:-c}d)__"'
+ atf_check -s exit:0 -o match:'__XYX__' -e empty \
+ ${TEST_SH} -c 'X=X; echo "__${X}$( X=Y; echo ${X} )${X}__"'
+ atf_check -s exit:0 -o inline:'abcdef\nabc\n' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "$X`X=def; echo \"${X}\" `";echo $X'
+
+ # The following is nonsense, so is not included ...
+ # atf_check -s exit:0 -o match:'__abc__' -e empty \
+ # oV cV oV cV
+ # ${TEST_SH} -c 'X=abc; echo "__`X=def echo "${X}" `__"'
+ # `start in " ^ " ends, ` not yet
+}
+
+atf_test_case j_cmdsub_in_varexpand
+j_cmdsub_in_varexpand_head() {
+ atf_set "descr" "Checks that command sub can be used in var expansion"
+}
+j_cmdsub_in_varexpand_body() {
+ atf_check -s exit:0 -o match:'foo' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X+$(echo foo)}'
+ atf_check -s exit:0 -o match:'set' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X-$(echo foo)}'
+ rm -f bar 2>/dev/null || :
+ atf_check -s exit:0 -o match:'set' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X-$(echo foo > bar)}'
+ test -f bar && atf_fail "bar should not exist, but does"
+ atf_check -s exit:0 -o inline:'\n' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X+$(echo foo > bar)}'
+ test -f bar || atf_fail "bar should exist, but does not"
+}
+
+atf_test_case k_backticks_in_varexpand
+k_backticks_in_varexpand_head() {
+ atf_set "descr" "Checks that old style cmd sub works in var expansion"
+}
+k_backticks_in_varexpand_body() {
+ atf_check -s exit:0 -o match:'foo' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X+`echo foo`}'
+ atf_check -s exit:0 -o match:'set' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X-`echo foo`}'
+ rm -f bar 2>/dev/null || :
+ atf_check -s exit:0 -o match:'set' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X-`echo foo > bar`}'
+ test -f bar && atf_fail "bar should not exist, but does"
+ atf_check -s exit:0 -o inline:'\n' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X+`echo foo > bar`}'
+ test -f bar || atf_fail "bar should exist, but does not"
+}
+
+atf_test_case l_arithmetic_in_cmdsub
+l_arithmetic_in_cmdsub_head() {
+ atf_set "descr" "Checks that arithmetic works in cmd substitutions"
+}
+l_arithmetic_in_cmdsub_body() {
+ atf_check -s exit:0 -o inline:'1 + 1 = 2\n' -e empty \
+ ${TEST_SH} -c 'echo 1 + 1 = $( echo $(( 1 + 1 )) )'
+ atf_check -s exit:0 -o inline:'X * Y = 6\n' -e empty \
+ ${TEST_SH} -c 'X=2; Y=3; echo X \* Y = $( echo $(( X * Y )) )'
+ atf_check -s exit:0 -o inline:'Y % X = 1\n' -e empty \
+ ${TEST_SH} -c 'X=2; Y=3; echo Y % X = $( echo $(( $Y % $X )) )'
+}
+
+atf_test_case m_arithmetic_in_backticks
+m_arithmetic_in_backticks_head() {
+ atf_set "descr" "Checks that arithmetic works in old style cmd sub"
+}
+m_arithmetic_in_backticks_body() {
+ atf_check -s exit:0 -o inline:'2 + 3 = 5\n' -e empty \
+ ${TEST_SH} -c 'echo 2 + 3 = ` echo $(( 2 + 3 )) `'
+ atf_check -s exit:0 -o inline:'X * Y = 6\n' -e empty \
+ ${TEST_SH} -c 'X=2; Y=3; echo X \* Y = ` echo $(( X * Y )) `'
+ atf_check -s exit:0 -o inline:'Y % X = 1\n' -e empty \
+ ${TEST_SH} -c 'X=2; Y=3; echo Y % X = ` echo $(( $Y % $X )) `'
+}
+
+atf_test_case n_cmdsub_in_arithmetic
+n_cmdsub_in_arithmetic_head() {
+ atf_set "descr" "Tests uses of command substitutions in arithmetic"
+}
+n_cmdsub_in_arithmetic_body() {
+ atf_check -s exit:0 -o inline:'7\n' -e empty \
+ ${TEST_SH} -c 'echo $(( $( echo 3 ) $( echo + ) $( echo 4 ) ))'
+ atf_check -s exit:0 -o inline:'11\n7\n18\n4\n1\n' -e empty \
+ ${TEST_SH} -c \
+ 'for op in + - \* / %
+ do
+ echo $(( $( echo 9 ) $( echo "${op}" ) $( echo 2 ) ))
+ done'
+}
+
+atf_test_case o_backticks_in_arithmetic
+o_backticks_in_arithmetic_head() {
+ atf_set "descr" "Tests old style cmd sub used in arithmetic"
+}
+o_backticks_in_arithmetic_body() {
+ atf_check -s exit:0 -o inline:'33\n' -e empty \
+ ${TEST_SH} -c 'echo $(( `echo 77` `echo -` `echo 44`))'
+ atf_check -s exit:0 -o inline:'14\n8\n33\n3\n2\n' -e empty \
+ ${TEST_SH} -c \
+ 'for op in + - \* / %
+ do
+ echo $((`echo 11``echo "${op}"``echo 3`))
+ done'
+}
+
+atf_test_case p_cmdsub_in_heredoc
+p_cmdsub_in_heredoc_head() {
+ atf_set "descr" "Checks that cmdsubs work inside a here document"
+}
+p_cmdsub_in_heredoc_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'line 1+1\nline 2\nline 3\n' -e empty \
+ ${TEST_SH} -c \
+ 'cat <<- EOF
+ $( echo line 1 )$( echo +1 )
+ $( echo line 2;echo line 3 )
+ EOF'
+}
+
+atf_test_case q_backticks_in_heredoc
+q_backticks_in_heredoc_head() {
+ atf_set "descr" "Checks that old style cmdsubs work in here docs"
+}
+q_backticks_in_heredoc_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a\nlittle\nlamb\n' -e empty \
+ ${TEST_SH} -c \
+ 'cat <<- EOF
+ `echo Mary ` `echo had a `
+ ` echo little; echo lamb `
+ EOF'
+}
+
+atf_test_case r_heredoc_in_cmdsub
+r_heredoc_in_cmdsub_head() {
+ atf_set "descr" "Checks that here docs work inside cmd subs"
+}
+r_heredoc_in_cmdsub_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a\nlittle\nlamb\n' -e empty \
+ ${TEST_SH} -c 'echo "$( cat <<- \EOF
+ Mary had a
+ little
+ lamb
+ EOF
+ )"'
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'Mary had 1\nlittle\nlamb\nMary had 4\nlittle\nlambs\n' \
+ ${TEST_SH} -c 'for N in 1 4; do echo "$( cat <<- EOF
+ Mary had ${N}
+ little
+ lamb$( [ $N -gt 1 ] && echo s )
+ EOF
+ )"; done'
+
+
+ atf_check -s exit:0 -o inline:'A Calculation:\n2 * 7 = 14\n' -e empty \
+ ${TEST_SH} -c 'echo "$( cat <<- EOF
+ A Calculation:
+ 2 * 7 = $(( 2 * 7 ))
+ EOF
+ )"'
+}
+
+atf_test_case s_heredoc_in_backticks
+s_heredoc_in_backticks_head() {
+ atf_set "descr" "Checks that here docs work inside old style cmd subs"
+}
+s_heredoc_in_backticks_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a little lamb\n' -e empty \
+ ${TEST_SH} -c 'echo ` cat <<- \EOF
+ Mary had a
+ little
+ lamb
+ EOF
+ `'
+
+ atf_check -s exit:0 -o inline:'A Calculation:\n17 / 3 = 5\n' -e empty \
+ ${TEST_SH} -c 'echo "` cat <<- EOF
+ A Calculation:
+ 17 / 3 = $(( 17 / 3 ))
+ EOF
+ `"'
+}
+
+atf_test_case t_nested_cmdsubs_in_heredoc
+t_nested_cmdsubs_in_heredoc_head() {
+ atf_set "descr" "Checks nested command substitutions in here docs"
+}
+t_nested_cmdsubs_in_heredoc_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f * 2>/dev/null || :
+ echo "Hello" > File
+
+ atf_check -s exit:0 -o inline:'Hello U\nHelp me!\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ $(cat File) U
+ $( V=$(cat File); echo "${V%lo}p" ) me!
+ EOF'
+
+ rm -f * 2>/dev/null || :
+ echo V>V ; echo A>A; echo R>R
+ echo Value>VAR
+
+ atf_check -s exit:0 -o inline:'$2.50\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ $(Value='\''$2.50'\'';eval echo $(eval $(cat V)$(cat A)$(cat R)=\'\''\$$(cat $(cat V)$(cat A)$(cat R))\'\''; eval echo \$$(set -- *;echo ${3}${1}${2})))
+ EOF'
+}
+
+atf_test_case u_nested_backticks_in_heredoc
+u_nested_backticks_in_heredoc_head() {
+ atf_set "descr" "Checks nested old style cmd subs in here docs"
+}
+u_nested_backticks_in_heredoc_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f * 2>/dev/null || :
+ echo "Hello" > File
+
+ atf_check -s exit:0 -o inline:'Hello U\nHelp me!\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ `cat File` U
+ `V=\`cat File\`; echo "${V%lo}p" ` me!
+ EOF'
+
+ rm -f * 2>/dev/null || :
+ echo V>V ; echo A>A; echo R>R
+ echo Value>VAR
+
+ atf_check -s exit:0 -o inline:'$5.20\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ `Value='\''$5.20'\'';eval echo \`eval \\\`cat V\\\`\\\`cat A\\\`\\\`cat R\\\`=\\\'\''\\\$\\\`cat \\\\\\\`cat V\\\\\\\`\\\\\\\`cat A\\\\\\\`\\\\\\\`cat R\\\\\\\`\\\`\\\'\''; eval echo \\\$\\\`set -- *;echo \\\\\${3}\\\\\${1}\\\\\${2}\\\`\``
+ EOF'
+}
+
+atf_test_case v_cmdsub_paren_tests
+v_cmdsub__paren_tests_head() {
+ atf_set "descr" "tests with cmdsubs containing embedded ')'"
+}
+v_cmdsub_paren_tests_body() {
+
+ # Tests from:
+ # http://www.in-ulm.de/~mascheck/various/cmd-subst/
+ # (slightly modified.)
+
+ atf_check -s exit:0 -o inline:'A.1\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in x) echo A.1;; esac
+ )'
+
+ atf_check -s exit:0 -o inline:'A.2\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in x) echo A.2;; esac # comment
+ )'
+
+ atf_check -s exit:0 -o inline:'A.3\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in (x) echo A.3;; esac
+ )'
+
+ atf_check -s exit:0 -o inline:'A.4\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in (x) echo A.4;; esac # comment
+ )'
+
+ atf_check -s exit:0 -o inline:'A.5\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in (x) echo A.5
+ esac
+ )'
+
+ atf_check -s exit:0 -o inline:'B: quoted )\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ echo '\''B: quoted )'\''
+ )'
+
+ atf_check -s exit:0 -o inline:'C: comment then closing paren\n' \
+ -e empty ${TEST_SH} -c \
+ 'echo $(
+ echo C: comment then closing paren # )
+ )'
+
+ atf_check -s exit:0 -o inline:'D.1: here-doc with )\n' \
+ -e empty ${TEST_SH} -c \
+ 'echo $(
+ cat <<-\eof
+ D.1: here-doc with )
+ eof
+ )'
+
+ # D.2 is a bogus test.
+
+ atf_check -s exit:0 -o inline:'D.3: here-doc with \()\n' \
+ -e empty ${TEST_SH} -c \
+ 'echo $(
+ cat <<-\eof
+ D.3: here-doc with \()
+ eof
+ )'
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'E: here-doc terminated with a parenthesis ("academic")\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ cat <<-\)
+ E: here-doc terminated with a parenthesis ("academic")
+ )
+ )'
+
+ atf_check -s exit:0 -e empty \
+-o inline:'F.1: here-doc embed with unbal single, back- or doublequote '\''\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ cat <<-"eof"
+ F.1: here-doc embed with unbal single, back- or doublequote '\''
+ eof
+ )'
+ atf_check -s exit:0 -e empty \
+ -o inline:'F.2: here-doc embed with unbal single, back- or doublequote "\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ cat <<-"eof"
+ F.2: here-doc embed with unbal single, back- or doublequote "
+ eof
+ )'
+ atf_check -s exit:0 -e empty \
+ -o inline:'F.3: here-doc embed with unbal single, back- or doublequote `\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ cat <<-"eof"
+ F.3: here-doc embed with unbal single, back- or doublequote `
+ eof
+ )'
+
+ atf_check -s exit:0 -e empty -o inline:'G: backslash at end of line\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ echo G: backslash at end of line # \
+ )'
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'H: empty command-substitution\n' \
+ ${TEST_SH} -c 'echo H: empty command-substitution $( )'
+}
+
+atf_test_case w_heredoc_outside_cmdsub
+w_heredoc_outside_cmdsub_head() {
+ atf_set "descr" "Checks that here docs work inside cmd subs"
+}
+w_heredoc_outside_cmdsub_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a\nlittle\nlamb\n' -e empty \
+ ${TEST_SH} -c 'echo "$( cat <<- \EOF )"
+ Mary had a
+ little
+ lamb
+ EOF
+ '
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'Mary had 1\nlittle\nlamb\nMary had 4\nlittle\nlambs\n' \
+ ${TEST_SH} -c 'for N in 1 4; do echo "$( cat <<- EOF )"
+ Mary had ${N}
+ little
+ lamb$( [ $N -gt 1 ] && echo s )
+ EOF
+ done'
+
+
+ atf_check -s exit:0 -o inline:'A Calculation:\n2 * 7 = 14\n' -e empty \
+ ${TEST_SH} -c 'echo "$( cat <<- EOF)"
+ A Calculation:
+ 2 * 7 = $(( 2 * 7 ))
+ EOF
+ '
+}
+
+atf_test_case x_heredoc_outside_backticks
+x_heredoc_outside_backticks_head() {
+ atf_set "descr" "Checks that here docs work inside old style cmd subs"
+}
+x_heredoc_outside_backticks_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a little lamb\n' -e empty \
+ ${TEST_SH} -c 'echo ` cat <<- \EOF `
+ Mary had a
+ little
+ lamb
+ EOF
+ '
+
+ atf_check -s exit:0 -o inline:'A Calculation:\n17 / 3 = 5\n' -e empty \
+ ${TEST_SH} -c 'echo "` cat <<- EOF `"
+ A Calculation:
+ 17 / 3 = $(( 17 / 3 ))
+ EOF
+ '
+}
+
+atf_test_case t_nested_cmdsubs_in_heredoc
+t_nested_cmdsubs_in_heredoc_head() {
+ atf_set "descr" "Checks nested command substitutions in here docs"
+}
+t_nested_cmdsubs_in_heredoc_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f * 2>/dev/null || :
+ echo "Hello" > File
+
+ atf_check -s exit:0 -o inline:'Hello U\nHelp me!\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ $(cat File) U
+ $( V=$(cat File); echo "${V%lo}p" ) me!
+ EOF'
+
+ rm -f * 2>/dev/null || :
+ echo V>V ; echo A>A; echo R>R
+ echo Value>VAR
+
+ atf_check -s exit:0 -o inline:'$2.50\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ $(Value='\''$2.50'\'';eval echo $(eval $(cat V)$(cat A)$(cat R)=\'\''\$$(cat $(cat V)$(cat A)$(cat R))\'\''; eval echo \$$(set -- *;echo ${3}${1}${2})))
+ EOF'
+}
+
+atf_test_case z_absurd_heredoc_cmdsub_combos
+z_absurd_heredoc_cmdsub_combos_head() {
+ atf_set "descr" "perverse and unusual cmd substitutions & more"
+}
+z_absurd_heredoc_cmdsub_combos_body() {
+
+ echo "Help!" > help
+
+ # This version works in NetBSD (& FreeBSD)'s sh (and most others)
+ atf_check -s exit:0 -o inline:'Help!\nMe 2\n' -e empty ${TEST_SH} -c '
+ cat <<- EOF
+ $(
+ cat <<- STOP
+ $(
+ cat `echo help`
+ )
+ STOP
+ )
+ $(
+ cat <<- END 4<<-TRASH
+ Me $(( 1 + 1 ))
+ END
+ This is unused noise!
+ TRASH
+ )
+ EOF
+ '
+
+ # atf_expect_fail "PR bin/50993 - heredoc parsing done incorrectly"
+ atf_check -s exit:0 -o inline:'Help!\nMe 2\n' -e empty ${TEST_SH} -c '
+ cat <<- EOF
+ $(
+ cat << STOP
+ $(
+ cat `echo help`
+ )
+ STOP
+ )
+ $(
+ cat <<- END 4<<TRASH
+ Me $(( 1 + 1 ))
+ END
+ This is unused noise!
+ TRASH
+ )
+ EOF
+ '
+}
+
+atf_init_test_cases() {
+ atf_add_test_case a_basic_cmdsub
+ atf_add_test_case b_basic_backticks
+ atf_add_test_case c_nested_cmdsub
+ atf_add_test_case d_nested_backticks
+ atf_add_test_case e_perverse_mixing
+ atf_add_test_case f_redirect_in_cmdsub
+ atf_add_test_case g_redirect_in_backticks
+ atf_add_test_case h_vars_in_cmdsub
+ atf_add_test_case i_vars_in_backticks
+ atf_add_test_case j_cmdsub_in_varexpand
+ atf_add_test_case k_backticks_in_varexpand
+ atf_add_test_case l_arithmetic_in_cmdsub
+ atf_add_test_case m_arithmetic_in_backticks
+ atf_add_test_case n_cmdsub_in_arithmetic
+ atf_add_test_case o_backticks_in_arithmetic
+ atf_add_test_case p_cmdsub_in_heredoc
+ atf_add_test_case q_backticks_in_heredoc
+ atf_add_test_case r_heredoc_in_cmdsub
+ atf_add_test_case s_heredoc_in_backticks
+ atf_add_test_case t_nested_cmdsubs_in_heredoc
+ atf_add_test_case u_nested_backticks_in_heredoc
+ atf_add_test_case v_cmdsub_paren_tests
+ atf_add_test_case w_heredoc_outside_cmdsub
+ atf_add_test_case x_heredoc_outside_backticks
+ atf_add_test_case z_absurd_heredoc_cmdsub_combos
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_evaltested.sh b/contrib/netbsd-tests/bin/sh/t_evaltested.sh
index e40f8bd..128a55c 100755
--- a/contrib/netbsd-tests/bin/sh/t_evaltested.sh
+++ b/contrib/netbsd-tests/bin/sh/t_evaltested.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_evaltested.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_evaltested.sh,v 1.2 2016/03/27 14:50:01 christos Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,6 +24,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
atf_test_case evaltested
@@ -43,7 +45,7 @@ fi
echo "passed"
exit 0
EOF
- output="$(/bin/sh helper.sh)"
+ output="$($TEST_SH helper.sh)"
[ $? = 0 ] && return
if [ -n "$output" ]
diff --git a/contrib/netbsd-tests/bin/sh/t_exit.sh b/contrib/netbsd-tests/bin/sh/t_exit.sh
index 62c5869..17ed230 100755
--- a/contrib/netbsd-tests/bin/sh/t_exit.sh
+++ b/contrib/netbsd-tests/bin/sh/t_exit.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_exit.sh,v 1.3 2012/04/13 06:12:32 jruoho Exp $
+# $NetBSD: t_exit.sh,v 1.6 2016/05/07 23:51:30 kre Exp $
#
# Copyright (c) 2007 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,74 +24,124 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
-crud() {
- test yes = no
-
- cat <<EOF
-$?
-EOF
-}
atf_test_case background
background_head() {
atf_set "descr" "Tests that sh(1) sets '$?' properly when running " \
- "a command in the background (PR bin/46327)"
+ "a command in the background (PR bin/46327)"
}
background_body() {
- atf_check -s exit:0 -o ignore -e ignore -x "true; true & echo $?"
- atf_check -s exit:0 -o ignore -e ignore -x "false; true & echo $?"
+ atf_check -o match:0 -e empty ${TEST_SH} -c 'true; true & echo $?'
+ # atf_expect_fail "PR bin/46327" (now fixed?)
+ atf_check -o match:0 -e empty ${TEST_SH} -c 'false; true & echo $?'
}
atf_test_case function
function_head() {
- atf_set "descr" "Tests that \$? is correctly updated inside" \
- "a function"
+ atf_set "descr" "Tests that \$? is correctly updated inside " \
+ "a function"
}
function_body() {
- foo=`crud`
- atf_check_equal 'x$foo' 'x1'
+ atf_check -s exit:0 -o match:STATUS=1-0 -e empty \
+ ${TEST_SH} -c '
+ crud() {
+ test yes = no
+
+ cat <<-EOF
+ STATUS=$?
+ EOF
+ }
+ foo=$(crud)
+ echo "${foo}-$?"
+ '
}
atf_test_case readout
readout_head() {
- atf_set "descr" "Tests that \$? is correctly updated in a" \
- "compound expression"
+ atf_set "descr" "Tests that \$? is correctly updated in a " \
+ "compound expression"
}
readout_body() {
- atf_check_equal '$( true && ! true | false; echo $? )' '0'
+ atf_check -s exit:0 -o match:0 -e empty \
+ ${TEST_SH} -c 'true && ! true | false; echo $?'
}
atf_test_case trap_subshell
trap_subshell_head() {
- atf_set "descr" "Tests that the trap statement in a subshell" \
- "works when the subshell exits"
+ atf_set "descr" "Tests that the trap statement in a subshell " \
+ "works when the subshell exits"
}
trap_subshell_body() {
- atf_check -s eq:0 -o inline:'exiting\n' -x \
- '( trap "echo exiting" EXIT; /usr/bin/true )'
+ atf_check -s exit:0 -o inline:'exiting\n' -e empty \
+ ${TEST_SH} -c '( trap "echo exiting" EXIT; /usr/bin/true )'
}
atf_test_case trap_zero__implicit_exit
+trap_zero__implicit_exit_head() {
+ atf_set "descr" "Tests that the trap statement in a subshell in a " \
+ "script works when the subshell simply runs out of commands"
+}
trap_zero__implicit_exit_body() {
- # PR bin/6764: sh works but ksh does not"
+ # PR bin/6764: sh works but ksh does not
echo '( trap "echo exiting" 0 )' >helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh
+ atf_check -s exit:0 -o match:exiting -e empty ${TEST_SH} helper.sh
+ # test ksh by setting TEST_SH to /bin/ksh and run the entire set...
+ # atf_check -s exit:0 -o match:exiting -e empty /bin/ksh helper.sh
}
atf_test_case trap_zero__explicit_exit
+trap_zero__explicit_exit_head() {
+ atf_set "descr" "Tests that the trap statement in a subshell in a " \
+ "script works when the subshell executes an explicit exit"
+}
trap_zero__explicit_exit_body() {
- echo '( trap "echo exiting" 0; exit )' >helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh
+ echo '( trap "echo exiting" 0; exit; echo NO_NO_NO )' >helper.sh
+ atf_check -s exit:0 -o match:exiting -o not-match:NO_NO -e empty \
+ ${TEST_SH} helper.sh
+ # test ksh by setting TEST_SH to /bin/ksh and run the entire set...
+ # atf_check -s exit:0 -o match:exiting -e empty /bin/ksh helper.sh
}
-atf_test_case trap_zero__explicit_return
-trap_zero__explicit_return_body() {
- echo '( trap "echo exiting" 0; return )' >helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh
+atf_test_case simple_exit
+simple_exit_head() {
+ atf_set "descr" "Tests that various values for exit status work"
+}
+# Note: ATF will not allow tests of exit values > 255, even if they would work
+simple_exit_body() {
+ for N in 0 1 2 3 4 5 6 42 99 101 125 126 127 128 129 200 254 255
+ do
+ atf_check -s exit:$N -o empty -e empty \
+ ${TEST_SH} -c "exit $N; echo FOO; echo BAR >&2"
+ done
+}
+
+atf_test_case subshell_exit
+subshell_exit_head() {
+ atf_set "descr" "Tests that subshell exit status works and \$? gets it"
+}
+# Note: ATF will not allow tests of exit values > 255, even if they would work
+subshell_exit_body() {
+ for N in 0 1 2 3 4 5 6 42 99 101 125 126 127 128 129 200 254 255
+ do
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c "(exit $N); test \$? -eq $N"
+ done
+}
+
+atf_test_case subshell_background
+subshell_background_head() {
+ atf_set "descr" "Tests that sh(1) sets '$?' properly when running " \
+ "a subshell in the background"
+}
+subshell_background_body() {
+ atf_check -o match:0 -e empty \
+ ${TEST_SH} -c 'true; (false || true) & echo $?'
+ # atf_expect_fail "PR bin/46327" (now fixed?)
+ atf_check -o match:0 -e empty \
+ ${TEST_SH} -c 'false; (false || true) & echo $?'
}
atf_init_test_cases() {
@@ -101,5 +151,7 @@ atf_init_test_cases() {
atf_add_test_case trap_subshell
atf_add_test_case trap_zero__implicit_exit
atf_add_test_case trap_zero__explicit_exit
- atf_add_test_case trap_zero__explicit_return
+ atf_add_test_case simple_exit
+ atf_add_test_case subshell_exit
+ atf_add_test_case subshell_background
}
diff --git a/contrib/netbsd-tests/bin/sh/t_expand.sh b/contrib/netbsd-tests/bin/sh/t_expand.sh
index eeaad5f..e785e1f 100755
--- a/contrib/netbsd-tests/bin/sh/t_expand.sh
+++ b/contrib/netbsd-tests/bin/sh/t_expand.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_expand.sh,v 1.2 2013/10/06 21:05:50 ast Exp $
+# $NetBSD: t_expand.sh,v 1.8 2016/04/29 18:29:17 christos Exp $
#
# Copyright (c) 2007, 2009 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,6 +24,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
#
# This file tests the functions in expand.c.
@@ -50,19 +52,15 @@ dollar_at_head() {
}
dollar_at_body() {
# This one should work everywhere.
- got=`echo "" "" | sed 's,$,EOL,'`
- atf_check_equal ' EOL' '$got'
+ atf_check -s exit:0 -o inline:' EOL\n' -e empty \
+ ${TEST_SH} -c 'echo "" "" | '" sed 's,\$,EOL,'"
# This code triggered the bug.
- set -- "" ""
- got=`echo "$@" | sed 's,$,EOL,'`
- atf_check_equal ' EOL' '$got'
+ atf_check -s exit:0 -o inline:' EOL\n' -e empty \
+ ${TEST_SH} -c 'set -- "" ""; echo "$@" | '" sed 's,\$,EOL,'"
- set -- -
- shift
- n_arg() { echo $#; }
- n_args=`n_arg "$@"`
- atf_check_equal '0' '$n_args'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'set -- -; shift; n_arg() { echo $#; }; n_arg "$@"'
}
atf_test_case dollar_at_with_text
@@ -71,15 +69,61 @@ dollar_at_with_text_head() {
"within the quotes. PR bin/33956."
}
dollar_at_with_text_body() {
- set --
- atf_check_equal '' "$(delim_argv "$@")"
- atf_check_equal '>foobar<' "$(delim_argv "foo$@bar")"
- atf_check_equal '>foo bar<' "$(delim_argv "foo $@ bar")"
- set -- a b c
- atf_check_equal '>a< >b< >c<' "$(delim_argv "$@")"
- atf_check_equal '>fooa< >b< >cbar<' "$(delim_argv "foo$@bar")"
- atf_check_equal '>foo a< >b< >c bar<' "$(delim_argv "foo $@ bar")"
+ cat <<'EOF' > h-f1
+
+delim_argv() {
+ str=
+ while [ $# -gt 0 ]; do
+ if [ -z "${str}" ]; then
+ str=">$1<"
+ else
+ str="${str} >$1<"
+ fi
+ shift
+ done
+ echo "${str}"
+}
+
+EOF
+ cat <<'EOF' > h-f2
+
+delim_argv() {
+ str=
+ while [ $# -gt 0 ]; do
+
+ str="${str}${str:+ }>$1<"
+ shift
+
+ done
+ echo "${str}"
+}
+
+EOF
+
+ chmod +x h-f1 h-f2
+
+ for f in 1 2
+ do
+ atf_check -s exit:0 -o inline:'\n' -e empty ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- ; delim_argv "$@"'
+ atf_check -s exit:0 -o inline:'>foobar<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- ; delim_argv "foo$@bar"'
+ atf_check -s exit:0 -o inline:'>foo bar<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- ; delim_argv "foo $@ bar"'
+
+ atf_check -s exit:0 -o inline:'>a< >b< >c<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- a b c; delim_argv "$@"'
+ atf_check -s exit:0 -o inline:'>fooa< >b< >cbar<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- a b c; delim_argv "foo$@bar"'
+ atf_check -s exit:0 -o inline:'>foo a< >b< >c bar<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- a b c; delim_argv "foo $@ bar"'
+ done
}
atf_test_case strip
@@ -91,8 +135,25 @@ strip_head() {
strip_body() {
line='#define bindir "/usr/bin" /* comment */'
stripped='#define bindir "/usr/bin" '
- atf_expect_fail "PR bin/43469"
- atf_check_equal '$stripped' '${line%%/\**}'
+
+ # atf_expect_fail "PR bin/43469" -- now fixed
+ for exp in \
+ '${line%%/\**}' \
+ '${line%%"/*"*}' \
+ '${line%%'"'"'/*'"'"'*}' \
+ '"${line%%/\**}"' \
+ '"${line%%"/*"*}"' \
+ '"${line%%'"'"'/*'"'"'*}"' \
+ '${line%/\**}' \
+ '${line%"/*"*}' \
+ '${line%'"'"'/*'"'"'*}' \
+ '"${line%/\**}"' \
+ '"${line%"/*"*}"' \
+ '"${line%'"'"'/*'"'"'*}"'
+ do
+ atf_check -o inline:":$stripped:\n" -e empty ${TEST_SH} -c \
+ "line='${line}'; echo :${exp}:"
+ done
}
atf_test_case varpattern_backslashes
@@ -103,7 +164,8 @@ varpattern_backslashes_head() {
varpattern_backslashes_body() {
line='/foo/bar/*/baz'
stripped='/foo/bar/'
- atf_check_equal $stripped ${line%%\**}
+ atf_check -o inline:'/foo/bar/\n' -e empty ${TEST_SH} -c \
+ 'line="/foo/bar/*/baz"; echo ${line%%\**}'
}
atf_test_case arithmetic
@@ -114,9 +176,13 @@ arithmetic_head() {
"this is true."
}
arithmetic_body() {
- atf_check_equal '3' '$((1 + 2))'
- atf_check_equal '2147483647' '$((0x7fffffff))'
- atf_check_equal '9223372036854775807' '$(((1 << 63) - 1))'
+
+ atf_check -o inline:'3' -e empty ${TEST_SH} -c \
+ 'printf %s $((1 + 2))'
+ atf_check -o inline:'2147483647' -e empty ${TEST_SH} -c \
+ 'printf %s $((0x7fffffff))'
+ atf_check -o inline:'9223372036854775807' -e empty ${TEST_SH} -c \
+ 'printf %s $(((1 << 63) - 1))'
}
atf_test_case iteration_on_null_parameter
@@ -126,10 +192,178 @@ iteration_on_null_parameter_head() {
"PR bin/48202."
}
iteration_on_null_parameter_body() {
- s1=`/bin/sh -uc 'N=; set -- ${N}; for X; do echo "[$X]"; done' 2>&1`
- s2=`/bin/sh -uc 'N=; set -- ${N:-}; for X; do echo "[$X]"; done' 2>&1`
- atf_check_equal '' '$s1'
- atf_check_equal '[]' '$s2'
+ atf_check -o empty -e empty ${TEST_SH} -c \
+ 'N=; set -- ${N}; for X; do echo "[$X]"; done'
+}
+
+atf_test_case iteration_on_quoted_null_parameter
+iteration_on_quoted_null_parameter_head() {
+ atf_set "descr" \
+ 'Check iteration of "$@" in for loop when set to null;'
+}
+iteration_on_quoted_null_parameter_body() {
+ atf_check -o inline:'[]\n' -e empty ${TEST_SH} -c \
+ 'N=; set -- "${N}"; for X; do echo "[$X]"; done'
+}
+
+atf_test_case iteration_on_null_or_null_parameter
+iteration_on_null_or_null_parameter_head() {
+ atf_set "descr" \
+ 'Check expansion of null parameter as default for another null'
+}
+iteration_on_null_or_null_parameter_body() {
+ atf_check -o empty -e empty ${TEST_SH} -c \
+ 'N=; E=; set -- ${N:-${E}}; for X; do echo "[$X]"; done'
+}
+
+atf_test_case iteration_on_null_or_missing_parameter
+iteration_on_null_or_missing_parameter_head() {
+ atf_set "descr" \
+ 'Check expansion of missing parameter as default for another null'
+}
+iteration_on_null_or_missing_parameter_body() {
+ # atf_expect_fail 'PR bin/50834'
+ atf_check -o empty -e empty ${TEST_SH} -c \
+ 'N=; set -- ${N:-}; for X; do echo "[$X]"; done'
+}
+
+nl='
+'
+reset()
+{
+ TEST_NUM=0
+ TEST_FAILURES=''
+ TEST_FAIL_COUNT=0
+ TEST_ID="$1"
+}
+
+check()
+{
+ fail=false
+ TEMP_FILE=$( mktemp OUT.XXXXXX )
+ TEST_NUM=$(( $TEST_NUM + 1 ))
+ MSG=
+
+ # our local shell (ATF_SHELL) better do quoting correctly...
+ # some of the tests expect us to expand $nl internally...
+ CMD="$1"
+
+ result="$( ${TEST_SH} -c "${CMD}" 2>"${TEMP_FILE}" )"
+ STATUS=$?
+
+ if [ "${STATUS}" -ne "$3" ]; then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} expected exit code $3, got ${STATUS}"
+
+ # don't actually fail just because of wrong exit code
+ # unless we either expected, or received "good"
+ case "$3/${STATUS}" in
+ (*/0|0/*) fail=true;;
+ esac
+ fi
+
+ if [ "$3" -eq 0 ]; then
+ if [ -s "${TEMP_FILE}" ]; then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} Messages produced on stderr unexpected..."
+ MSG="${MSG}${nl}$( cat "${TEMP_FILE}" )"
+ fail=true
+ fi
+ else
+ if ! [ -s "${TEMP_FILE}" ]; then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} Expected messages on stderr,"
+ MSG="${MSG} nothing produced"
+ fail=true
+ fi
+ fi
+ rm -f "${TEMP_FILE}"
+
+ # Remove newlines (use local shell for this)
+ oifs="$IFS"
+ IFS="$nl"
+ result="$(echo $result)"
+ IFS="$oifs"
+ if [ "$2" != "$result" ]
+ then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} Expected output '$2', received '$result'"
+ fail=true
+ fi
+
+ if $fail
+ then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} Full command: <<${CMD}>>"
+ fi
+
+ $fail && test -n "$TEST_ID" && {
+ TEST_FAILURES="${TEST_FAILURES}${TEST_FAILURES:+${nl}}"
+ TEST_FAILURES="${TEST_FAILURES}${TEST_ID}[$TEST_NUM]:"
+ TEST_FAILURES="${TEST_FAILURES} Test of '$1' failed.";
+ TEST_FAILURES="${TEST_FAILURES}${nl}${MSG}"
+ TEST_FAIL_COUNT=$(( $TEST_FAIL_COUNT + 1 ))
+ return 0
+ }
+ $fail && atf_fail "Test[$TEST_NUM] of '$1' failed${nl}${MSG}"
+ return 0
+}
+
+results()
+{
+ test -z "${TEST_ID}" && return 0
+ test -z "${TEST_FAILURES}" && return 0
+
+ echo >&2 "=========================================="
+ echo >&2 "While testing '${TEST_ID}'"
+ echo >&2 " - - - - - - - - - - - - - - - - -"
+ echo >&2 "${TEST_FAILURES}"
+ atf_fail \
+ "Test ${TEST_ID}: $TEST_FAIL_COUNT subtests (of $TEST_NUM) failed - see stderr"
+}
+
+atf_test_case shell_params
+shell_params_head() {
+ atf_set "descr" "Test correct operation of the numeric parameters"
+}
+shell_params_body() {
+ atf_require_prog mktemp
+
+ reset shell_params
+
+ check 'set -- a b c; echo "$#: $1 $2 $3"' '3: a b c' 0
+ check 'set -- a b c d e f g h i j k l m; echo "$#: ${1}0 ${10} $10"' \
+ '13: a0 j a0' 0
+ check 'x="$0"; set -- a b; y="$0";
+ [ "x${x}y" = "x${y}y" ] && echo OK || echo x="$x" y="$y"' \
+ 'OK' 0
+ check "${TEST_SH} -c 'echo 0=\$0 1=\$1 2=\$2' a b c" '0=a 1=b 2=c' 0
+
+ echo 'echo 0="$0" 1="$1" 2="$2"' > helper.sh
+ check "${TEST_SH} helper.sh a b c" '0=helper.sh 1=a 2=b' 0
+
+ check 'set -- a bb ccc dddd eeeee ffffff ggggggg hhhhhhhh \
+ iiiiiiiii jjjjjjjjjj kkkkkkkkkkk
+ echo "${#}: ${#1} ${#2} ${#3} ${#4} ... ${#9} ${#10} ${#11}"' \
+ '11: 1 2 3 4 ... 9 10 11' 0
+
+ check 'set -- a b c; echo "$#: ${1-A} ${2-B} ${3-C} ${4-D} ${5-E}"' \
+ '3: a b c D E' 0
+ check 'set -- a "" c "" e
+ echo "$#: ${1:-A} ${2:-B} ${3:-C} ${4:-D} ${5:-E}"' \
+ '5: a B c D e' 0
+ check 'set -- a "" c "" e
+ echo "$#: ${1:+A} ${2:+B} ${3:+C} ${4:+D} ${5:+E}"' \
+ '5: A C E' 0
+ check 'set -- "abab*cbb"
+ echo "${1} ${1#a} ${1%b} ${1##ab} ${1%%b} ${1#*\*} ${1%\**}"' \
+ 'abab*cbb bab*cbb abab*cb ab*cbb abab*cb cbb abab' 0
+ check 'set -- "abab?cbb"
+ echo "${1}:${1#*a}+${1%b*}-${1##*a}_${1%%b*}%${1#[ab]}=${1%?*}/${1%\?*}"' \
+ 'abab?cbb:bab?cbb+abab?cb-b?cbb_a%bab?cbb=abab?cb/abab' 0
+ check 'set -- a "" c "" e; echo "${2:=b}"' '' 1
+
+ results
}
atf_init_test_cases() {
@@ -139,4 +373,8 @@ atf_init_test_cases() {
atf_add_test_case varpattern_backslashes
atf_add_test_case arithmetic
atf_add_test_case iteration_on_null_parameter
+ atf_add_test_case iteration_on_quoted_null_parameter
+ atf_add_test_case iteration_on_null_or_null_parameter
+ atf_add_test_case iteration_on_null_or_missing_parameter
+ atf_add_test_case shell_params
}
diff --git a/contrib/netbsd-tests/bin/sh/t_fsplit.sh b/contrib/netbsd-tests/bin/sh/t_fsplit.sh
index 2c3dbae..a37804b 100755
--- a/contrib/netbsd-tests/bin/sh/t_fsplit.sh
+++ b/contrib/netbsd-tests/bin/sh/t_fsplit.sh
@@ -1,6 +1,6 @@
-# $NetBSD: t_fsplit.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_fsplit.sh,v 1.4 2016/03/27 14:50:01 christos Exp $
#
-# Copyright (c) 2007 The NetBSD Foundation, Inc.
+# Copyright (c) 2007-2016 The NetBSD Foundation, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -33,22 +33,51 @@
# the "${x-" and "}" were absent from the input line.
#
# So: sh -c 'set ${x-a b c}; echo $#' should give 3.
+# and: sh -c 'set -- ${x-}' echo $#' shold give 0
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
nl='
'
check()
{
- result="$(eval $1)"
+ TEST=$((${TEST} + 1))
+
+ case "$#" in
+ (2) ;;
+ (*) atf_fail "Internal test error, $# args to check test ${TEST}";;
+ esac
+
+ result=$( ${TEST_SH} -c "unset x; $1" )
+ STATUS="$?"
+
# Remove newlines
oifs="$IFS"
IFS="$nl"
result="$(echo $result)"
IFS="$oifs"
+
+ # trim the test text in case we use it in a message below
+ case "$1" in
+ ????????????????*)
+ set -- "$(expr "$1" : '\(............\).*')..." "$2" ;;
+ esac
+
if [ "$2" != "$result" ]
then
- atf_fail "expected [$2], found [$result]"
+ if [ "${STATUS}" = "0" ]
+ then
+ atf_fail "Test ${TEST} '$1': expected [$2], found [$result]"
+ else
+ atf_fail \
+ "TEST ${TEST} '$1' failed ($STATUS): expected [$2], found [$result]"
+ fi
+ elif [ "${STATUS}" != 0 ]
+ then
+ atf_fail "TEST ${TEST} '$1' failed ($STATUS)"
fi
}
@@ -59,6 +88,7 @@ for_head() {
for_body() {
unset x
+ TEST=0
# Since I managed to break this, leave the test in
check 'for f in $x; do echo x${f}y; done' ''
}
@@ -68,17 +98,121 @@ default_val_head() {
atf_set "descr" "Checks field splitting in variable default values"
}
default_val_body() {
- unset x
-
+ TEST=0
# Check that IFS is applied to text from ${x-...} unless it is inside
# any set of "..."
- check 'set ${x-a b c}; echo $#' 3
- check 'for i in ${x-a b c}; do echo "z${i}z"; done' 'zaz zbz zcz'
- check 'for i in ${x-"a b" c}; do echo "z${i}z"; done' 'za bz zcz'
- check 'for i in ${x-"a ${x-b c}" d}; do echo "z${i}z"; done' 'za b cz zdz'
- check 'for i in ${x-"a ${x-"b c"}" d}; do echo "z${i}z"; done' 'za b cz zdz'
- check 'for i in ${x-a ${x-"b c"} d}; do echo "z${i}z"; done' 'zaz zb cz zdz'
- check 'for i in ${x-a ${x-b c} d}; do echo "z${i}z"; done' 'zaz zbz zcz zdz'
+ check 'set -- ${x-a b c}; echo $#' 3
+
+ check 'set -- ${x-"a b" c}; echo $#' 2
+ check 'set -- ${x-a "b c"}; echo $#' 2
+ check 'set -- ${x-"a b c"}; echo $#' 1
+
+ check "set -- \${x-'a b' c}; echo \$#" 2
+ check "set -- \${x-a 'b c'}; echo \$#" 2
+ check "set -- \${x-'a b c'}; echo \$#" 1
+
+ check 'set -- ${x-a\ b c}; echo $#' 2
+ check 'set -- ${x-a b\ c}; echo $#' 2
+ check 'set -- ${x-a\ b\ c}; echo $#' 1
+
+ check 'set -- ${x}; echo $#' 0
+ check 'set -- ${x-}; echo $#' 0
+ check 'set -- ${x-""}; echo $#' 1
+ check 'set -- ""${x}; echo $#' 1
+ check 'set -- ""${x-}; echo $#' 1
+ check 'set -- ""${x-""}; echo $#' 1
+ check 'set -- ${x}""; echo $#' 1
+ check 'set -- ${x-}""; echo $#' 1
+ check 'set -- ${x-""}""; echo $#' 1
+ check 'set -- ""${x}""; echo $#' 1
+ check 'set -- ""${x-}""; echo $#' 1
+ check 'set -- ""${x-""}""; echo $#' 1
+
+ check 'for i in ${x-a b c}; do echo "z${i}z"; done' \
+ 'zaz zbz zcz'
+ check 'for i in ${x-"a b" c}; do echo "z${i}z"; done' \
+ 'za bz zcz'
+ check 'for i in ${x-"a ${x-b c}" d}; do echo "z${i}z"; done' \
+ 'za b cz zdz'
+ check 'for i in ${x-a ${x-b c} d}; do echo "z${i}z"; done' \
+ 'zaz zbz zcz zdz'
+
+ # I am not sure these two are correct, the rules on quoting word
+ # in ${var-word} are peculiar, and hard to fathom...
+ # They are what the NetBSD shell does, and bash, not the freebsd shell
+ # (as of Mar 1, 2016)
+
+ check 'for i in ${x-"a ${x-"b c"}" d}; do echo "z${i}z"; done' \
+ 'za b cz zdz'
+ check 'for i in ${x-a ${x-"b c"} d}; do echo "z${i}z"; done' \
+ 'zaz zb cz zdz'
+}
+
+atf_test_case replacement_val
+replacement_val_head() {
+ atf_set "descr" "Checks field splitting in variable replacement values"
+}
+replacement_val_body() {
+ TEST=0
+
+ # Check that IFS is applied to text from ${x+...} unless it is inside
+ # any set of "...", or whole expansion is quoted, or both...
+
+ check 'x=BOGUS; set -- ${x+a b c}; echo $#' 3
+
+ check 'x=BOGUS; set -- ${x+"a b" c}; echo $#' 2
+ check 'x=BOGUS; set -- ${x+a "b c"}; echo $#' 2
+ check 'x=BOGUS; set -- ${x+"a b c"}; echo $#' 1
+
+ check "x=BOGUS; set -- \${x+'a b' c}; echo \$#" 2
+ check "x=BOGUS; set -- \${x+a 'b c'}; echo \$#" 2
+ check "x=BOGUS; set -- \${x+'a b c'}; echo \$#" 1
+
+ check 'x=BOGUS; set -- ${x+a\ b c}; echo $#' 2
+ check 'x=BOGUS; set -- ${x+a b\ c}; echo $#' 2
+ check 'x=BOGUS; set -- ${x+a\ b\ c}; echo $#' 1
+
+ check 'x=BOGUS; set -- ${x+}; echo $#' 0
+ check 'x=BOGUS; set -- ${x+""}; echo $#' 1
+ check 'x=BOGUS; set -- ""${x+}; echo $#' 1
+ check 'x=BOGUS; set -- ""${x+""}; echo $#' 1
+ check 'x=BOGUS; set -- ${x+}""; echo $#' 1
+ check 'x=BOGUS; set -- ${x+""}""; echo $#' 1
+ check 'x=BOGUS; set -- ""${x+}""; echo $#' 1
+ check 'x=BOGUS; set -- ""${x+""}""; echo $#' 1
+
+ # verify that the value of $x does not affecty the value of ${x+...}
+ check 'x=BOGUS; set -- ${x+}; echo X$1' X
+ check 'x=BOGUS; set -- ${x+""}; echo X$1' X
+ check 'x=BOGUS; set -- ""${x+}; echo X$1' X
+ check 'x=BOGUS; set -- ""${x+""}; echo X$1' X
+ check 'x=BOGUS; set -- ${x+}""; echo X$1' X
+ check 'x=BOGUS; set -- ${x+""}""; echo X$1' X
+ check 'x=BOGUS; set -- ""${x+}""; echo X$1' X
+ check 'x=BOGUS; set -- ""${x+""}""; echo X$1' X
+
+ check 'x=BOGUS; set -- ${x+}; echo X${1-:}X' X:X
+ check 'x=BOGUS; set -- ${x+""}; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ""${x+}; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ""${x+""}; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ${x+}""; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ${x+""}""; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ""${x+}""; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ""${x+""}""; echo X${1-:}X' XX
+
+ # and validate that the replacement can be used as expected
+ check 'x=BOGUS; for i in ${x+a b c}; do echo "z${i}z"; done'\
+ 'zaz zbz zcz'
+ check 'x=BOGUS; for i in ${x+"a b" c}; do echo "z${i}z"; done'\
+ 'za bz zcz'
+ check 'x=BOGUS; for i in ${x+"a ${x+b c}" d}; do echo "z${i}z"; done'\
+ 'za b cz zdz'
+ check 'x=BOGUS; for i in ${x+"a ${x+"b c"}" d}; do echo "z${i}z"; done'\
+ 'za b cz zdz'
+ check 'x=BOGUS; for i in ${x+a ${x+"b c"} d}; do echo "z${i}z"; done'\
+ 'zaz zb cz zdz'
+ check 'x=BOGUS; for i in ${x+a ${x+b c} d}; do echo "z${i}z"; done'\
+ 'zaz zbz zcz zdz'
}
atf_test_case ifs_alpha
@@ -89,13 +223,19 @@ ifs_alpha_head() {
ifs_alpha_body() {
unset x
+ TEST=0
# repeat with an alphabetic in IFS
check 'IFS=q; set ${x-aqbqc}; echo $#' 3
- check 'IFS=q; for i in ${x-aqbqc}; do echo "z${i}z"; done' 'zaz zbz zcz'
- check 'IFS=q; for i in ${x-"aqb"qc}; do echo "z${i}z"; done' 'zaqbz zcz'
- check 'IFS=q; for i in ${x-"aq${x-bqc}"qd}; do echo "z${i}z"; done' 'zaqbqcz zdz'
- check 'IFS=q; for i in ${x-"aq${x-"bqc"}"qd}; do echo "z${i}z"; done' 'zaqbqcz zdz'
- check 'IFS=q; for i in ${x-aq${x-"bqc"}qd}; do echo "z${i}z"; done' 'zaz zbqcz zdz'
+ check 'IFS=q; for i in ${x-aqbqc}; do echo "z${i}z"; done' \
+ 'zaz zbz zcz'
+ check 'IFS=q; for i in ${x-"aqb"qc}; do echo "z${i}z"; done' \
+ 'zaqbz zcz'
+ check 'IFS=q; for i in ${x-"aq${x-bqc}"qd}; do echo "z${i}z"; done' \
+ 'zaqbqcz zdz'
+ check 'IFS=q; for i in ${x-"aq${x-"bqc"}"qd}; do echo "z${i}z"; done' \
+ 'zaqbqcz zdz'
+ check 'IFS=q; for i in ${x-aq${x-"bqc"}qd}; do echo "z${i}z"; done' \
+ 'zaz zbqcz zdz'
}
atf_test_case quote
@@ -106,6 +246,7 @@ quote_head() {
quote_body() {
unset x
+ TEST=0
# Some quote propagation checks
check 'set "${x-a b c}"; echo $#' 1
check 'set "${x-"a b" c}"; echo $1' 'a b c'
@@ -120,19 +261,44 @@ dollar_at_head() {
dollar_at_body() {
unset x
+ TEST=0
# Check we get "$@" right
- check 'set ""; for i; do echo "z${i}z"; done' 'zz'
- check 'set ""; for i in "$@"; do echo "z${i}z"; done' 'zz'
- check 'set "" ""; for i; do echo "z${i}z"; done' 'zz zz'
- check 'set "" ""; for i in "$@"; do echo "z${i}z"; done' 'zz zz'
- check 'set "" ""; for i in $@; do echo "z${i}z"; done' ''
- check 'set "a b" c; for i; do echo "z${i}z"; done' 'za bz zcz'
- check 'set "a b" c; for i in "$@"; do echo "z${i}z"; done' 'za bz zcz'
- check 'set "a b" c; for i in $@; do echo "z${i}z"; done' 'zaz zbz zcz'
- check 'set " a b " c; for i in "$@"; do echo "z${i}z"; done' 'z a b z zcz'
- check 'set --; for i in x"$@"x; do echo "z${i}z"; done' 'zxxz'
- check 'set a; for i in x"$@"x; do echo "z${i}z"; done' 'zxaxz'
- check 'set a b; for i in x"$@"x; do echo "z${i}z"; done' 'zxaz zbxz'
+
+ check 'set --; for i in x"$@"x; do echo "z${i}z"; done' 'zxxz'
+ check 'set a; for i in x"$@"x; do echo "z${i}z"; done' 'zxaxz'
+ check 'set a b; for i in x"$@"x; do echo "z${i}z"; done' 'zxaz zbxz'
+
+ check 'set --; for i; do echo "z${i}z"; done' ''
+ check 'set --; for i in $@; do echo "z${i}z"; done' ''
+ check 'set --; for i in "$@"; do echo "z${i}z"; done' ''
+ # atf_expect_fail "PR bin/50834"
+ check 'set --; for i in ""$@; do echo "z${i}z"; done' 'zz'
+ # atf_expect_pass
+ check 'set --; for i in $@""; do echo "z${i}z"; done' 'zz'
+ check 'set --; for i in ""$@""; do echo "z${i}z"; done' 'zz'
+ check 'set --; for i in """$@"; do echo "z${i}z"; done' 'zz'
+ check 'set --; for i in "$@"""; do echo "z${i}z"; done' 'zz'
+ check 'set --; for i in """$@""";do echo "z${i}z"; done' 'zz'
+
+ check 'set ""; for i; do echo "z${i}z"; done' 'zz'
+ check 'set ""; for i in "$@"; do echo "z${i}z"; done' 'zz'
+ check 'set "" ""; for i; do echo "z${i}z"; done' 'zz zz'
+ check 'set "" ""; for i in "$@"; do echo "z${i}z"; done' 'zz zz'
+ check 'set "" ""; for i in $@; do echo "z${i}z"; done' ''
+
+ check 'set "a b" c; for i; do echo "z${i}z"; done' \
+ 'za bz zcz'
+ check 'set "a b" c; for i in "$@"; do echo "z${i}z"; done' \
+ 'za bz zcz'
+ check 'set "a b" c; for i in $@; do echo "z${i}z"; done' \
+ 'zaz zbz zcz'
+ check 'set " a b " c; for i in "$@"; do echo "z${i}z"; done' \
+ 'z a b z zcz'
+
+ check 'set a b c; for i in "$@$@"; do echo "z${i}z"; done' \
+ 'zaz zbz zcaz zbz zcz'
+ check 'set a b c; for i in "$@""$@";do echo "z${i}z"; done' \
+ 'zaz zbz zcaz zbz zcz'
}
atf_test_case ifs
@@ -143,6 +309,7 @@ ifs_head() {
ifs_body() {
unset x
+ TEST=0
# Some IFS tests
check 't="-- "; IFS=" "; set $t; IFS=":"; r="$*"; IFS=; echo $# $r' '0'
check 't=" x"; IFS=" x"; set $t; IFS=":"; r="$*"; IFS=; echo $# $r' '1'
@@ -165,19 +332,26 @@ var_length_head() {
"a variable's length"
}
var_length_body() {
- unset x
+ TEST=0
- # Check that we apply IFS to ${#var}
long=12345678123456781234567812345678
long=$long$long$long$long
- check 'echo ${#long}; IFS=2; echo ${#long}; set 1 ${#long};echo $#' '128 1 8 3'
- check 'IFS=2; set ${x-${#long}}; IFS=" "; echo $* $#' '1 8 2'
- check 'IFS=2; set ${x-"${#long}"}; IFS=" "; echo $* $#' '128 1'
+ export long
+
+ # first test that the test method works...
+ check 'set -u; : ${long}; echo ${#long}' '128'
+
+ # Check that we apply IFS to ${#var}
+ check 'echo ${#long}; IFS=2; echo ${#long}; set 1 ${#long};echo $#' \
+ '128 1 8 3'
+ check 'IFS=2; set ${x-${#long}}; IFS=" "; echo $* $#' '1 8 2'
+ check 'IFS=2; set ${x-"${#long}"}; IFS=" "; echo $* $#' '128 1'
}
atf_init_test_cases() {
atf_add_test_case for
atf_add_test_case default_val
+ atf_add_test_case replacement_val
atf_add_test_case ifs_alpha
atf_add_test_case quote
atf_add_test_case dollar_at
diff --git a/contrib/netbsd-tests/bin/sh/t_here.sh b/contrib/netbsd-tests/bin/sh/t_here.sh
index 250c686..27307f5 100755
--- a/contrib/netbsd-tests/bin/sh/t_here.sh
+++ b/contrib/netbsd-tests/bin/sh/t_here.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_here.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_here.sh,v 1.6 2016/03/31 16:21:52 christos Exp $
#
# Copyright (c) 2007 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,50 +24,542 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
nl='
'
+reset()
+{
+ TEST_NUM=0
+ TEST_FAILURES=''
+ TEST_FAIL_COUNT=0
+ TEST_ID="$1"
+}
+
check()
{
- SVIFS="$IFS"
- result="$(eval $1)"
- # Remove newlines
+ fail=false
+ TEMP_FILE=$( mktemp OUT.XXXXXX )
+ TEST_NUM=$(( $TEST_NUM + 1 ))
+
+ # our local shell (ATF_SHELL) better do quoting correctly...
+ # some of the tests expect us to expand $nl internally...
+ CMD="nl='${nl}'; $1"
+
+ result="$( ${TEST_SH} -c "${CMD}" 2>"${TEMP_FILE}" )"
+ STATUS=$?
+
+ if [ "${STATUS}" -ne "$3" ]; then
+ echo >&2 "[$TEST_NUM] expected exit code $3, got ${STATUS}"
+
+ # don't actually fail just because of wrong exit code
+ # unless we either expected, or received "good"
+ case "$3/${STATUS}" in
+ (*/0|0/*) fail=true;;
+ esac
+ fi
+
+ if [ "$3" -eq 0 ]; then
+ if [ -s "${TEMP_FILE}" ]; then
+ echo >&2 \
+ "[$TEST_NUM] Messages produced on stderr unexpected..."
+ cat "${TEMP_FILE}" >&2
+ fail=true
+ fi
+ else
+ if ! [ -s "${TEMP_FILE}" ]; then
+ echo >&2 \
+ "[$TEST_NUM] Expected messages on stderr, nothing produced"
+ fail=true
+ fi
+ fi
+ rm -f "${TEMP_FILE}"
+
+ # Remove newlines (use local shell for this)
oifs="$IFS"
IFS="$nl"
result="$(echo $result)"
IFS="$oifs"
if [ "$2" != "$result" ]
then
- atf_fail "expected [$2], found [$result]"
+ echo >&2 "[$TEST_NUM] Expected output '$2', received '$result'"
+ fail=true
fi
- IFS="$SVIFS"
+
+ if $fail
+ then
+ echo >&2 "[$TEST_NUM] Full command: <<${CMD}>>"
+ fi
+
+ $fail && test -n "$TEST_ID" && {
+ TEST_FAILURES="${TEST_FAILURES}${TEST_FAILURES:+
+}${TEST_ID}[$TEST_NUM]: test of '$1' failed";
+ TEST_FAIL_COUNT=$(( $TEST_FAIL_COUNT + 1 ))
+ return 0
+ }
+ $fail && atf_fail "Test[$TEST_NUM] of '$1' failed"
+ return 0
}
-atf_test_case all
-all_head() {
+results()
+{
+ test -z "${TEST_ID}" && return 0
+ test -z "${TEST_FAILURES}" && return 0
+
+ echo >&2 "=========================================="
+ echo >&2 "While testing '${TEST_ID}'"
+ echo >&2 " - - - - - - - - - - - - - - - - -"
+ echo >&2 "${TEST_FAILURES}"
+ atf_fail \
+ "Test ${TEST_ID}: $TEST_FAIL_COUNT subtests (of $TEST_NUM) failed - see stderr"
+}
+
+atf_test_case do_simple
+do_simple_head() {
atf_set "descr" "Basic tests for here documents"
}
-all_body() {
+do_simple_body() {
y=x
- IFS=
- check 'x=`cat <<EOF'$nl'text'${nl}EOF$nl'`; echo $x' 'text'
- check 'x=`cat <<\EOF'$nl'text'${nl}EOF$nl'`; echo $x' 'text'
+ reset 'simple'
+ IFS=' '
+ check 'x=`cat <<EOF'$nl'text'${nl}EOF$nl'`; echo $x' 'text' 0
+ check 'x=`cat <<\EOF'$nl'text'${nl}EOF$nl'`; echo $x' 'text' 0
+
+ check "y=${y};"'x=`cat <<EOF'$nl'te${y}t'${nl}EOF$nl'`; echo $x' \
+ 'text' 0
+ check "y=${y};"'x=`cat <<\EOF'$nl'te${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te${y}t' 0
+ check "y=${y};"'x=`cat <<"EOF"'$nl'te${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te${y}t' 0
+ check "y=${y};"'x=`cat <<'"'EOF'"$nl'te${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te${y}t' 0
+
+ # check that quotes in the here doc survive and cause no problems
+ check "cat <<EOF${nl}te'xt${nl}EOF$nl" "te'xt" 0
+ check "cat <<\EOF${nl}te'xt${nl}EOF$nl" "te'xt" 0
+ check "cat <<'EOF'${nl}te'xt${nl}EOF$nl" "te'xt" 0
+ check "cat <<EOF${nl}te\"xt${nl}EOF$nl" 'te"xt' 0
+ check "cat <<\EOF${nl}te\"xt${nl}EOF$nl" 'te"xt' 0
+ check "cat <<'EOF'${nl}te\"xt${nl}EOF$nl" 'te"xt' 0
+ check "cat <<'EO'F${nl}te\"xt${nl}EOF$nl" 'te"xt' 0
+
+ check "y=${y};"'x=`cat <<EOF'$nl'te'"'"'${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te'"'"'xt' 0
+ check "y=${y};"'x=`cat <<EOF'$nl'te'"''"'${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te'"''"'xt' 0
+
+ # note that the blocks of empty space in the following must
+ # be entirely tab characters, no spaces.
+
+ check 'x=`cat <<EOF'"$nl text${nl}EOF$nl"'`; echo "$x"' \
+ ' text' 0
+ check 'x=`cat <<-EOF'"$nl text${nl}EOF$nl"'`; echo $x' \
+ 'text' 0
+ check 'x=`cat <<-EOF'"${nl}text${nl} EOF$nl"'`; echo $x' \
+ 'text' 0
+ check 'x=`cat <<-\EOF'"$nl text${nl} EOF$nl"'`; echo $x' \
+ 'text' 0
+ check 'x=`cat <<- "EOF"'"$nl text${nl}EOF$nl"'`; echo $x' \
+ 'text' 0
+ check 'x=`cat <<- '"'EOF'${nl}text${nl} EOF$nl"'`; echo $x' \
+ 'text' 0
+ results
+}
+
+atf_test_case end_markers
+end_markers_head() {
+ atf_set "descr" "Tests for various end markers of here documents"
+}
+end_markers_body() {
+
+ reset 'end_markers'
+ for end in EOF 1 \! '$$$' "string " a\\\ a\\\ \ '&' '' ' ' ' ' \
+ --STRING-- . '~~~' ')' '(' '#' '()' '(\)' '(\/)' '--' '\' '{' '}' \
+VERYVERYVERYVERYLONGLONGLONGin_fact_absurdly_LONG_LONG_HERE_DOCUMENT_TERMINATING_MARKER_THAT_goes_On_forever_and_ever_and_ever...
+ do
+ # check unquoted end markers
+ case "${end}" in
+ ('' | *[' ()\$&#*~']* ) ;; # skip unquoted endmark test for these
+ (*) check \
+ 'x=$(cat << '"${end}${nl}text${nl}${end}${nl}"'); printf %s "$x"' 'text' 0
+ ;;
+ esac
+
+ # and quoted end markers
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}${nl}"'); printf %s "$x"' 'text' 0
+
+ # and see what happens if we encounter "almost" an end marker
+ case "${#end}" in
+ (0|1) ;; # too short to try truncation tests
+ (*) check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end%?}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end%?}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end#?}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end#?}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end%?}+${nl}${end}${nl}"');printf %s "$x"' \
+ "text ${end%?}+" 0
+ ;;
+ esac
+
+ # or something that is a little longer
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}x${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}x" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}!${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text !${end}" 0
+
+ # or which does not begin at start of line
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl} ${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl} ${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}" 0
+
+ # or end at end of line
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end} ${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end} " 0
+
+ # or something that is correct much of the way, but then...
+
+ case "${#end}" in
+ (0) ;; # cannot test this one
+ (1) check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}${end}" 0
+ ;;
+ (2-7) pfx="${end%?}"
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}${pfx}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}${pfx}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${pfx}${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${pfx}${end}" 0
+ ;;
+ (*) pfx=${end%??????}; sfx=${end#??????}
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}${sfx}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}${sfx}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${pfx}${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${pfx}${end}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${pfx}${sfx}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${pfx}${sfx}" 0
+ ;;
+ esac
+ done
+
+ # Add striptabs tests (in similar way) here one day...
+
+ results
+}
+
+atf_test_case incomplete
+incomplete_head() {
+ atf_set "descr" "Basic tests for incomplete here documents"
+}
+incomplete_body() {
+ reset incomplete
+
+ check 'cat <<EOF' '' 2
+ check 'cat <<- EOF' '' 2
+ check 'cat <<\EOF' '' 2
+ check 'cat <<- \EOF' '' 2
+
+ check 'cat <<EOF'"${nl}" '' 2
+ check 'cat <<- EOF'"${nl}" '' 2
+ check 'cat <<'"'EOF'${nl}" '' 2
+ check 'cat <<- "EOF"'"${nl}" '' 2
+
+ check 'cat << EOF'"${nl}${nl}" '' 2
+ check 'cat <<-EOF'"${nl}${nl}" '' 2
+ check 'cat << '"'EOF'${nl}${nl}" '' 2
+ check 'cat <<-"EOF"'"${nl}${nl}" '' 2
+
+ check 'cat << EOF'"${nl}"'line 1'"${nl}" '' 2
+ check 'cat <<-EOF'"${nl}"' line 1'"${nl}" '' 2
+ check 'cat << EOF'"${nl}"'line 1'"${nl}"' line 2'"${nl}" '' 2
+ check 'cat <<-EOF'"${nl}"' line 1'"${nl}"'line 2'"${nl}" '' 2
+
+ check 'cat << EOF'"${nl}line 1${nl}${nl}line3${nl}${nl}5!${nl}" '' 2
+
+ results
+}
+
+atf_test_case lineends
+lineends_head() {
+ atf_set "descr" "Tests for line endings in here documents"
+}
+lineends_body() {
+ reset lineends
+
+ # note that "check" removes newlines from stdout before comparing.
+ # (they become blanks, provided there is something before & after)
+
+ check 'cat << \echo'"${nl}"'\'"${nl}echo${nl}echo${nl}" '\' 0
+ check 'cat << echo'"${nl}"'\'"${nl}echo${nl}echo${nl}" 'echo' 0
+ check 'cat << echo'"${nl}"'\\'"${nl}echo${nl}echo${nl}" '\' 0
+
+ check 'X=3; cat << ec\ho'"${nl}"'$X\'"${nl}echo${nl}echo${nl}" \
+ '$X\' 0
+ check 'X=3; cat << echo'"${nl}"'$X'"${nl}echo${nl}echo${nl}" \
+ '3' 0
+ check 'X=3; cat << echo'"${nl}"'$X\'"${nl}echo${nl}echo${nl}" \
+ '' 0
+ check 'X=3; cat << echo'"${nl}"'${X}\'"${nl}echo${nl}echo${nl}" \
+ '3echo' 0
+ check 'X=3; cat << echo'"${nl}"'\$X\'"${nl}echo${nl}echo${nl}" \
+ '$Xecho' 0
+ check 'X=3; cat << echo'"${nl}"'\\$X \'"${nl}echo${nl}echo${nl}" \
+ '\3 echo' 0
+
+ check \
+ 'cat << "echo"'"${nl}"'line1\'"${nl}"'line2\'"${nl}echo${nl}echo${nl}" \
+ 'line1\ line2\' 0
+ check \
+ 'cat << echo'"${nl}"'line1\'"${nl}"'line2\'"${nl}echo${nl}echo${nl}" \
+ 'line1line2echo' 0
+
+ results
+}
+
+atf_test_case multiple
+multiple_head() {
+ atf_set "descr" "Tests for multiple here documents on one cmd line"
+}
+multiple_body() {
+ reset multiple
+
+ check \
+ "(cat ; cat <&3) <<EOF0 3<<EOF3${nl}STDIN${nl}EOF0${nl}-3-${nl}EOF3${nl}" \
+ 'STDIN -3-' 0
+
+ check "(read line; echo \"\$line\"; cat <<EOF1; echo \"\$line\") <<EOF2
+The File
+EOF1
+The Line
+EOF2
+" 'The Line The File The Line' 0
+
+ check "(read line; echo \"\$line\"; cat <<EOF; echo \"\$line\") <<EOF
+The File
+EOF
+The Line
+EOF
+" 'The Line The File The Line' 0
+
+ check "V=1; W=2; cat <<-1; cat <<2; cat <<- 3; cat <<'4';"' cat <<\5
+ $V
+ $W
+ 3
+ 4
+ 5
+ 1
+2
+ 5
+ 4*$W+\$V
+ 3
+$W
+1
+2
+3
+4
+7+$V
+$W+6
+5
+' '1 2 3 4 5 5 4*2+$V $W 1 2 3 7+$V $W+6' 0
+
+ results
+}
+
+atf_test_case nested
+nested_head() {
+ atf_set "descr" "Tests for nested here documents for one cmd"
+}
+nested_body() {
+ reset nested
+
+ check \
+'cat << EOF1'"${nl}"'$(cat << EOF2'"${nl}LINE${nl}EOF2${nl}"')'"${nl}EOF1${nl}"\
+ 'LINE' 0
+
+# This next one fails ... and correctly, so we will omit it (bad test)
+# Reasoning is that the correct data "$(cat << EOF2)\nLINE\nEOF2\n" is
+# collected for the outer (EOF1) heredoc, when that is parsed, it looks
+# like
+# $(cat <<EOF2)
+# LINE
+# EOF2
+# which looks like a good command - except it is being parsed in "heredoc"
+# syntax, which means it is enclosed in double quotes, which means that
+# the newline after the ')' in the first line is not a newline token, but
+# just a character. The EOF2 heredoc cannot start until after the next
+# newline token, of which there are none here... LINE and EOF2 are just
+# more data in the outer EOF1 heredoc for its "cat" command to read & write.
+#
+# The previous sub-test works because there the \n comes inside the
+# $( ), and in there, the outside quoting rules are suspended, and it
+# all starts again - so that \n is a newline token, and the EOF2 heredoc
+# is processed.
+#
+# check \
+# 'cat << EOF1'"${nl}"'$(cat << EOF2 )'"${nl}LINE${nl}EOF2${nl}EOF1${nl}" \
+# 'LINE' 0
+
+ L='cat << EOF1'"${nl}"'LINE1$(cat << EOF2'"${nl}"
+ L="${L}"'LINE2$(cat << EOF3'"${nl}"
+ L="${L}"'LINE3$(cat << EOF4'"${nl}"
+ L="${L}"'LINE4$(cat << EOF5'"${nl}"
+ L="${L}LINE5${nl}EOF5${nl})4${nl}EOF4${nl})3${nl}"
+ L="${L}EOF3${nl})2${nl}EOF2${nl})1${nl}EOF1${nl}"
+
+ # That mess is ...
+ #
+ # cat <<EOF1
+ # LINE1$(cat << EOF2
+ # LINE2$(cat << EOF3
+ # LINE3$(cat << EOF4
+ # LINE4$(cat << EOF5
+ # LINE5
+ # EOF5
+ # )4
+ # EOF4
+ # )3
+ # EOF3
+ # )2
+ # EOF2
+ # )1
+ # EOF1
+
+ check "${L}" 'LINE1LINE2LINE3LINE4LINE54321' 0
+
+ results
+}
+
+atf_test_case quoting
+quoting_head() {
+ atf_set "descr" "Tests for use of quotes inside here documents"
+}
+quoting_body() {
+ reset quoting
+
+ check 'X=!; cat <<- E\0F
+ <'\''"'\'' \\$X\$X "'\''" \\>
+ E0F
+ ' '<'\''"'\'' \\$X\$X "'\''" \\>' 0
+
+ check 'X=!; cat <<- E0F
+ <'\''"'\'' \\$X\$X "'\''" \\>
+ E0F
+ ' '<'\''"'\'' \!$X "'\''" \>' 0
+
+ check 'cat <<- END
+ $( echo "'\''" ) $( echo '\''"'\'' ) $( echo \\ )
+ END
+ ' "' \" \\" 0
+
+ check 'X=12345; Y="string1 line1?-line2"; Z=; unset W; cat <<-EOF
+ ${#X}${Z:-${Y}}${W+junk}${Y%%l*}${Y#*\?}
+ "$Z"'\''$W'\'' ${Y%" "*} $(( X + 54321 ))
+ EOF
+ ' '5string1 line1?-line2string1 -line2 ""'\'\'' string1 66666' 0
+
+ results
+}
+
+atf_test_case side_effects
+side_effects_head() {
+ atf_set "descr" "Tests how side effects in here documents are handled"
+}
+side_effects_body() {
+
+ atf_check -s exit:0 -o inline:'2\n1\n' -e empty ${TEST_SH} -c '
+ unset X
+ cat <<-EOF
+ ${X=2}
+ EOF
+ echo "${X-1}"
+ '
+}
+
+atf_test_case vicious
+vicious_head() {
+ atf_set "descr" "Tests for obscure and obnoxious uses of here docs"
+}
+vicious_body() {
+ reset
+
+ cat <<- \END_SCRIPT > script
+ cat <<ONE && cat \
+ <<TWO
+ a
+ ONE
+ b
+ TWO
+ END_SCRIPT
+
+ atf_check -s exit:0 -o inline:'a\nb\n' -e empty ${TEST_SH} script
+
+ # This next one is causing discussion currently (late Feb 2016)
+ # amongst stds writers & implementors. Consequently we
+ # will not check what it produces. The eventual result
+ # seems unlikely to be what we currently output, which
+ # is:
+ # A:echo line 1
+ # B:echo line 2)" && prefix DASH_CODE <<DASH_CODE
+ # B:echo line 3
+ # line 4
+ # line 5
+ #
+ # The likely intended output is ...
+ #
+ # A:echo line 3
+ # B:echo line 1
+ # line 2
+ # DASH_CODE:echo line 4)"
+ # DASH_CODE:echo line 5
+ #
+ # The difference is explained by differing opinions on just
+ # when processing of a here doc should start
+
+ cat <<- \END_SCRIPT > script
+ prefix() { sed -e "s/^/$1:/"; }
+ DASH_CODE() { :; }
- check 'x=`cat <<EOF'$nl'te${y}t'${nl}EOF$nl'`; echo $x' 'text'
- check 'x=`cat <<\EOF'$nl'te${y}t'${nl}EOF$nl'`; echo $x' 'te${y}t'
- check 'x=`cat <<"EOF"'$nl'te${y}t'${nl}EOF$nl'`; echo $x' 'te${y}t'
- check 'x=`cat <<'"'EOF'"$nl'te${y}t'${nl}EOF$nl'`; echo $x' 'te${y}t'
+ prefix A <<XXX && echo "$(prefix B <<XXX
+ echo line 1
+ XXX
+ echo line 2)" && prefix DASH_CODE <<DASH_CODE
+ echo line 3
+ XXX
+ echo line 4)"
+ echo line 5
+ DASH_CODE
+ END_SCRIPT
- check 'x=`cat <<EOF'$nl'te'"'"'xt'${nl}EOF$nl'`; echo $x' 'te'"'"'xt'
- check 'x=`cat <<\EOF'$nl'te'"'"'xt'${nl}EOF$nl'`; echo $x' 'te'"'"'xt'
- check 'x=`cat <<"EOF"'$nl'te'"'"'xt'${nl}EOF$nl'`; echo $x' 'te'"'"'xt'
+ # we will just verify that the shell can parse the
+ # script somehow, and doesn't fall over completely...
- check 'x=`cat <<EOF'$nl'te'"'"'${y}t'${nl}EOF$nl'`; echo $x' 'te'"'"'xt'
- check 'x=`cat <<EOF'$nl'te'"''"'${y}t'${nl}EOF$nl'`; echo $x' 'te'"''"'xt'
+ atf_check -s exit:0 -o ignore -e empty ${TEST_SH} script
}
atf_init_test_cases() {
- atf_add_test_case all
+ atf_add_test_case do_simple # not worthy of a comment
+ atf_add_test_case end_markers # the mundane, the weird, the bizarre
+ atf_add_test_case incomplete # where the end marker isn't...
+ atf_add_test_case lineends # test weird line endings in heredocs
+ atf_add_test_case multiple # multiple << operators on one cmd
+ atf_add_test_case nested # here docs inside here docs
+ atf_add_test_case quoting # stuff quoted inside
+ atf_add_test_case side_effects # here docs that modify environment
+ atf_add_test_case vicious # evil test from the austin-l list...
}
diff --git a/contrib/netbsd-tests/bin/sh/t_option.sh b/contrib/netbsd-tests/bin/sh/t_option.sh
new file mode 100755
index 0000000..eae2110
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_option.sh
@@ -0,0 +1,674 @@
+# $NetBSD: t_option.sh,v 1.3 2016/03/08 14:19:28 christos Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+# The standard
+# http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
+# says:
+# ...[lots]
+
+test_option_on_off()
+{
+ atf_require_prog tr
+
+ for opt
+ do
+ # t is needed, as inside $()` $- appears to lose
+ # the 'e' option if it happened to already be
+ # set. Must check if that is what should
+ # happen, but that is a different issue.
+
+ test -z "${opt}" && continue
+
+ # if we are playing with more that one option at a
+ # time, the code below requires that we start with no
+ # options set, or it will mis-diagnose the situation
+ CLEAR=''
+ test "${#opt}" -gt 1 &&
+ CLEAR='xx="$-" && xx=$(echo "$xx" | tr -d cs) && test -n "$xx" && set +"$xx";'
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ "opt=${opt}"'
+ x() {
+ echo "ERROR: Unable to $1 option $2" >&2
+ exit 1
+ }
+ s() {
+ set -"$1"
+ t="$-"
+ x=$(echo "$t" | tr -d "$1")
+ test "$t" = "$x" && x set "$1"
+ return 0
+ }
+ c() {
+ set +"$1"
+ t="$-"
+ x=$(echo "$t" | tr -d "$1")
+ test "$t" != "$x" && x clear "$1"
+ return 0
+ }
+ '"${CLEAR}"'
+
+ # if we do not do this, -x tracing splatters stderr
+ # for some shells, -v does as well (is that correct?)
+ case "${opt}" in
+ (*[xv]*) exec 2>/dev/null;;
+ esac
+
+ o="$-"
+ x=$(echo "$o" | tr -d "$opt")
+
+ if [ "$o" = "$x" ]; then # option was off
+ s "${opt}"
+ c "${opt}"
+ else
+ c "${opt}"
+ s "${opt}"
+ fi
+ '
+ done
+}
+
+test_optional_on_off()
+{
+ RET=0
+ OPTS=
+ for opt
+ do
+ test "${opt}" = n && continue
+ ${TEST_SH} -c "set -${opt}" 2>/dev/null &&
+ OPTS="${OPTS} ${opt}" || RET=1
+ done
+
+ test -n "${OPTS}" && test_option_on_off ${OPTS}
+
+ return "${RET}"
+}
+
+atf_test_case set_a
+set_a_head() {
+ atf_set "descr" "Tests that 'set -a' turns on all var export " \
+ "and that it behaves as defined by the standard"
+}
+set_a_body() {
+ atf_require_prog env
+ atf_require_prog grep
+
+ test_option_on_off a
+
+ # without -a, new variables should not be exported (so grep "fails")
+ atf_check -s exit:1 -o empty -e empty ${TEST_SH} -ce \
+ 'unset VAR; set +a; VAR=value; env | grep "^VAR="'
+
+ # with -a, they should be
+ atf_check -s exit:0 -o match:VAR=value -e empty ${TEST_SH} -ce \
+ 'unset VAR; set -a; VAR=value; env | grep "^VAR="'
+}
+
+atf_test_case set_C
+set_C_head() {
+ atf_set "descr" "Tests that 'set -C' turns on no clobber mode " \
+ "and that it behaves as defined by the standard"
+}
+set_C_body() {
+ atf_require_prog ls
+
+ test_option_on_off C
+
+ # Check that the environment to use for the tests is sane ...
+ # we assume current dir is a new tempory directory & is empty
+
+ test -z "$(ls)" || atf_skip "Test execution directory not clean"
+ test -c "/dev/null" || atf_skip "Problem with /dev/null"
+
+ echo Dummy_Content > Junk_File
+ echo Precious_Content > Important_File
+
+ # Check that we can redirect onto file when -C is not set
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '
+ D=$(ls -l Junk_File) || exit 1
+ set +C
+ echo "Overwrite it now" > Junk_File
+ A=$(ls -l Junk_File) || exit 1
+ test "${A}" != "${D}"
+ '
+
+ # Check that we cannot redirect onto file when -C is set
+ atf_check -s exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ '
+ D=$(ls -l Important_File) || exit 1
+ set -C
+ echo "Fail to Overwrite it now" > Important_File
+ A=$(ls -l Important_File) || exit 1
+ test "${A}" = "${D}"
+ '
+
+ # Check that we can append to file, even when -C is set
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '
+ D=$(ls -l Junk_File) || exit 1
+ set -C
+ echo "Append to it now" >> Junk_File
+ A=$(ls -l Junk_File) || exit 1
+ test "${A}" != "${D}"
+ '
+
+ # Check that we abort on attempt to redirect onto file when -Ce is set
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ '
+ set -Ce
+ echo "Fail to Overwrite it now" > Important_File
+ echo "Should not reach this point"
+ '
+
+ # Last check that we can override -C for when we really need to
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '
+ D=$(ls -l Junk_File) || exit 1
+ set -C
+ echo "Change the poor bugger again" >| Junk_File
+ A=$(ls -l Junk_File) || exit 1
+ test "${A}" != "${D}"
+ '
+}
+
+atf_test_case set_e
+set_e_head() {
+ atf_set "descr" "Tests that 'set -e' turns on error detection " \
+ "and that a simple case behaves as defined by the standard"
+}
+set_e_body() {
+ test_option_on_off e
+
+ # Check that -e does nothing if no commands fail
+ atf_check -s exit:0 -o match:I_am_OK -e empty \
+ ${TEST_SH} -c \
+ 'false; printf "%s" I_am; set -e; true; printf "%s\n" _OK'
+
+ # and that it (silently, but with exit status) aborts if cmd fails
+ atf_check -s not-exit:0 -o match:I_am -o not-match:Broken -e empty \
+ ${TEST_SH} -c \
+ 'false; printf "%s" I_am; set -e; false; printf "%s\n" _Broken'
+
+ # same, except -e this time is on from the beginning
+ atf_check -s not-exit:0 -o match:I_am -o not-match:Broken -e empty \
+ ${TEST_SH} -ec 'printf "%s" I_am; false; printf "%s\n" _Broken'
+
+ # More checking of -e in other places, there is lots to deal with.
+}
+
+atf_test_case set_f
+set_f_head() {
+ atf_set "descr" "Tests that 'set -f' turns off pathname expansion " \
+ "and that it behaves as defined by the standard"
+}
+set_f_body() {
+ atf_require_prog ls
+
+ test_option_on_off f
+
+ # Check that the environment to use for the tests is sane ...
+ # we assume current dir is a new tempory directory & is empty
+
+ test -z "$(ls)" || atf_skip "Test execution directory not clean"
+
+ # we will assume that atf will clean up this junk directory
+ # when we are done. But for testing pathname expansion
+ # we need files
+
+ for f in a b c d e f aa ab ac ad ae aaa aab aac aad aba abc bbb ccc
+ do
+ echo "$f" > "$f"
+ done
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -ec \
+ 'X=$(echo b*); Y=$(echo b*); test "${X}" != "a*";
+ test "${X}" = "${Y}"'
+
+ # now test expansion is different when -f is set
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -ec \
+ 'X=$(echo b*); Y=$(set -f; echo b*); test "${X}" != "${Y}"'
+}
+
+atf_test_case set_n
+set_n_head() {
+ atf_set "descr" "Tests that 'set -n' supresses command execution " \
+ "and that it behaves as defined by the standard"
+}
+set_n_body() {
+ # pointless to test this, if it turns on, it stays on...
+ # test_option_on_off n
+ # so just allow the tests below to verify it can be turned on
+
+ # nothing should be executed, hence no output...
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -enc 'echo ABANDON HOPE; echo ALL YE; echo ...'
+
+ # this is true even when the "commands" do not exist
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -enc 'ERR; FAIL; ABANDON HOPE'
+
+ # but if there is a syntax error, it should be detected (w or w/o -e)
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -enc 'echo JUMP; for frogs swim; echo in puddles'
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -nc 'echo ABANDON HOPE; echo "ALL YE; echo ...'
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -enc 'echo ABANDON HOPE;; echo ALL YE; echo ...'
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -nc 'do YOU ABANDON HOPE; for all eternity?'
+
+ # now test enabling -n in the middle of a script
+ # note that once turned on, it cannot be turned off again.
+ #
+ # omit more complex cases, as those can send some shells
+ # into infinite loops, and believe it or not, that might be OK!
+
+ atf_check -s exit:0 -o match:first -o not-match:second -e empty \
+ ${TEST_SH} -c 'echo first; set -n; echo second'
+ atf_check -s exit:0 -o match:first -o not-match:third -e empty \
+ ${TEST_SH} -c 'echo first; set -n; echo second; set +n; echo third'
+ atf_check -s exit:0 -o inline:'a\nb\n' -e empty \
+ ${TEST_SH} -c 'for x in a b c d
+ do
+ case "$x" in
+ a);; b);; c) set -n;; d);;
+ esac
+ printf "%s\n" "$x"
+ done'
+
+ # This last one is a bit more complex to explain, so I will not try
+
+ # First, we need to know what signal number is used for SIGUSR1 on
+ # the local (testing) system (signal number is $(( $XIT - 128 )) )
+
+ # this will take slightly over 1 second elapsed time (the sleep 1)
+ # The "10" for the first sleep just needs to be something big enough
+ # that the rest of the commands have time to complete, even on
+ # very slow testing systems. 10 should be enough. Otherwise irrelevant
+
+ # The shell will usually blather to stderr about the sleep 10 being
+ # killed, but it affects nothing, so just allow it to cry.
+
+ (sleep 10 & sleep 1; kill -USR1 $!; wait $!)
+ XIT="$?"
+
+ # The exit value should be an integer > 128 and < 256 (often 158)
+ # If it is not just skip the test
+
+ # If we do run the test, it should take (slightly over) either 1 or 2
+ # seconds to complete, depending upon the shell being tested.
+
+ case "${XIT}" in
+ ( 129 | 1[3-9][0-9] | 2[0-4][0-9] | 25[0-5] )
+
+ # The script below should exit with the same code - no output
+
+ # Or that is the result that seems best explanable.
+ # "set -n" in uses like this is not exactly well defined...
+
+ # This script comes from a member of the austin group
+ # (they author changes to the posix shell spec - and more.)
+ # The author is also an (occasional?) NetBSD user.
+ atf_check -s exit:${XIT} -o empty -e empty ${TEST_SH} -c '
+ trap "set -n" USR1
+ { sleep 1; kill -USR1 $$; sleep 1; } &
+ false
+ wait && echo t || echo f
+ wait
+ echo foo
+ '
+ ;;
+ esac
+}
+
+atf_test_case set_u
+set_u_head() {
+ atf_set "descr" "Tests that 'set -u' turns on unset var detection " \
+ "and that it behaves as defined by the standard"
+}
+set_u_body() {
+ test_option_on_off u
+
+ # first make sure it is OK to unset an unset variable
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -ce \
+ 'unset _UNSET_VARIABLE_; echo OK'
+ # even if -u is set
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -cue \
+ 'unset _UNSET_VARIABLE_; echo OK'
+
+ # and that without -u accessing an unset variable is harmless
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -ce \
+ 'unset X; echo ${X}; echo OK'
+ # and that the unset variable test expansion works properly
+ atf_check -s exit:0 -o match:OKOK -e empty ${TEST_SH} -ce \
+ 'unset X; printf "%s" ${X-OK}; echo OK'
+
+ # Next test that with -u set, the shell aborts on access to unset var
+ # do not use -e, want to make sure it is -u that causes abort
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; set -u; echo ${X}; echo ERR'
+ # quoting should make no difference...
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; set -u; echo "${X}"; echo ERR'
+
+ # Now a bunch of accesses to unset vars, with -u, in ways that are OK
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -ce \
+ 'unset X; set -u; echo ${X-GOOD}; echo OK'
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -ce \
+ 'unset X; set -u; echo ${X-OK}'
+ atf_check -s exit:0 -o not-match:ERR -o match:OK -e empty \
+ ${TEST_SH} -ce 'unset X; set -u; echo ${X+ERR}; echo OK'
+
+ # and some more ways that are not OK
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; set -u; echo ${X#foo}; echo ERR'
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; set -u; echo ${X%%bar}; echo ERR'
+
+ # lastly, just while we are checking unset vars, test aborts w/o -u
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; echo ${X?}; echo ERR'
+ atf_check -s not-exit:0 -o not-match:ERR -e match:X_NOT_SET \
+ ${TEST_SH} -c 'unset X; echo ${X?X_NOT_SET}; echo ERR'
+}
+
+atf_test_case set_v
+set_v_head() {
+ atf_set "descr" "Tests that 'set -v' turns on input read echoing " \
+ "and that it behaves as defined by the standard"
+}
+set_v_body() {
+ test_option_on_off v
+
+ # check that -v does nothing if no later input line is read
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e empty \
+ ${TEST_SH} -ec 'printf "%s" OK; set -v; echo OK; exit 0'
+
+ # but that it does when there are multiple lines
+ cat <<- 'EOF' |
+ set -v
+ printf %s OK
+ echo OK
+ exit 0
+ EOF
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e match:printf -e match:OK -e match:echo \
+ -e not-match:set ${TEST_SH}
+
+ # and that it can be disabled again
+ cat <<- 'EOF' |
+ set -v
+ printf %s OK
+ set +v
+ echo OK
+ exit 0
+ EOF
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e match:printf -e match:OK -e not-match:echo \
+ ${TEST_SH}
+
+ # and lastly, that shell keywords do get output when "read"
+ cat <<- 'EOF' |
+ set -v
+ for i in 111 222 333
+ do
+ printf %s $i
+ done
+ exit 0
+ EOF
+ atf_check -s exit:0 \
+ -o match:111222333 -o not-match:printf \
+ -o not-match:for -o not-match:do -o not-match:done \
+ -e match:printf -e match:111 -e not-match:111222 \
+ -e match:for -e match:do -e match:done \
+ ${TEST_SH}
+}
+
+atf_test_case set_x
+set_x_head() {
+ atf_set "descr" "Tests that 'set -x' turns on command exec logging " \
+ "and that it behaves as defined by the standard"
+}
+set_x_body() {
+ test_option_on_off x
+
+ # check that cmd output appears after -x is enabled
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e not-match:printf -e match:OK -e match:echo \
+ ${TEST_SH} -ec 'printf "%s" OK; set -x; echo OK; exit 0'
+
+ # and that it stops again afer -x is disabled
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e match:printf -e match:OK -e not-match:echo \
+ ${TEST_SH} -ec 'set -x; printf "%s" OK; set +x; echo OK; exit 0'
+
+ # also check that PS4 is output correctly
+ atf_check -s exit:0 \
+ -o match:OK -o not-match:echo \
+ -e match:OK -e match:Run:echo \
+ ${TEST_SH} -ec 'PS4=Run:; set -x; echo OK; exit 0'
+
+ return 0
+
+ # This one seems controversial... I suspect it is NetBSD's sh
+ # that is wrong to not output "for" "while" "if" ... etc
+
+ # and lastly, that shell keywords do not get output when "executed"
+ atf_check -s exit:0 \
+ -o match:111222333 -o not-match:printf \
+ -o not-match:for \
+ -e match:printf -e match:111 -e not-match:111222 \
+ -e not-match:for -e not-match:do -e not-match:done \
+ ${TEST_SH} -ec \
+ 'set -x; for i in 111 222 333; do printf "%s" $i; done; echo; exit 0'
+}
+
+opt_test_setup()
+{
+ test -n "$1" || { echo >&2 "Internal error"; exit 1; }
+
+ cat > "$1" << 'END_OF_FUNCTIONS'
+local_opt_check()
+{
+ local -
+}
+
+instr()
+{
+ expr "$2" : "\(.*$1\)" >/dev/null
+}
+
+save_opts()
+{
+ local -
+
+ set -e
+ set -u
+
+ instr e "$-" && instr u "$-" && return 0
+ echo ERR
+}
+
+fiddle_opts()
+{
+ set -e
+ set -u
+
+ instr e "$-" && instr u "$-" && return 0
+ echo ERR
+}
+
+local_test()
+{
+ set +eu
+
+ save_opts
+ instr '[eu]' "$-" || printf %s "OK"
+
+ fiddle_opts
+ instr e "$-" && instr u "$-" && printf %s "OK"
+
+ set +eu
+}
+END_OF_FUNCTIONS
+}
+
+atf_test_case restore_local_opts
+restore_local_opts_head() {
+ atf_set "descr" "Tests that 'local -' saves and restores options. " \
+ "Note that "local" is a local shell addition"
+}
+restore_local_opts_body() {
+ atf_require_prog cat
+ atf_require_prog expr
+
+ FN="test-funcs.$$"
+ opt_test_setup "${FN}" || atf_skip "Cannot setup test environment"
+
+ ${TEST_SH} -ec ". './${FN}'; local_opt_check" 2>/dev/null ||
+ atf_skip "sh extension 'local -' not supported by ${TEST_SH}"
+
+ atf_check -s exit:0 -o match:OKOK -o not-match:ERR -e empty \
+ ${TEST_SH} -ec ". './${FN}'; local_test"
+}
+
+atf_test_case vi_emacs_VE_toggle
+vi_emacs_VE_toggle_head() {
+ atf_set "descr" "Tests enabling vi disables emacs (and v.v - but why?)"\
+ " Note that -V and -E are local shell additions"
+}
+vi_emacs_VE_toggle_body() {
+
+ test_optional_on_off V E ||
+ atf_skip "One or both V & E opts unsupported by ${TEST_SH}"
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '
+ q() {
+ eval "case \"$-\" in
+ (*${2}*) return 1;;
+ (*${1}*) return 0;;
+ esac"
+ return 1
+ }
+ x() {
+ echo >&2 "Option set or toggle failure:" \
+ " on=$1 off=$2 set=$-"
+ exit 1
+ }
+ set -V; q V E || x V E
+ set -E; q E V || x E V
+ set -V; q V E || x V E
+ set +EV; q "" "[VE]" || x "" VE
+ exit 0
+ '
+}
+
+atf_test_case xx_bogus
+xx_bogus_head() {
+ atf_set "descr" "Tests that attempting to set a nonsense option fails."
+}
+xx_bogus_body() {
+ # Biggest problem here is picking a "nonsense option" that is
+ # not implemented by any shell, anywhere. Hopefully this will do.
+
+ # 'set' is a special builtin, so a conforming shell should exit
+ # on an arg error, and the ERR should not be printed.
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -c 'set -% ; echo ERR'
+}
+
+atf_test_case Option_switching
+Option_switching_head() {
+ atf_set "descr" "options can be enabled and disabled"
+}
+Option_switching_body() {
+
+ # Cannot test -m, setting it causes test shell to fail...
+ # (test shell gets SIGKILL!) Wonder why ... something related to atf
+ # That is, it works if just run as "sh -c 'echo $-; set -m; echo $-'"
+
+ # Don't bother testing toggling -n, once on, it stays on...
+ # (and because the test fn refuses to allow us to try)
+
+ # Cannot test -o or -c here, or the extension -s
+ # they can only be used, not switched
+
+ # these are the posix options, that all shells should implement
+ test_option_on_off a b C e f h u v x # m
+
+ # and these are extensions that might not exist (non-fatal to test)
+ # -i and -s (and -c) are posix options, but are not required to
+ # be accessable via the "set" command, just the command line.
+ # We allow for -i to work with set, as that makes some sense,
+ # -c and -s do not.
+ test_optional_on_off E i I p q V || true
+
+ # Also test (some) option combinations ...
+ # only testing posix options here, because it is easier...
+ test_option_on_off aeu vx Ca aCefux
+}
+
+atf_init_test_cases() {
+ # tests are run in order sort of names produces, so choose names wisely
+
+ # this one tests turning on/off all the mandatory. and extra flags
+ atf_add_test_case Option_switching
+ # and this tests the NetBSD "local -" functionality in functions.
+ atf_add_test_case restore_local_opts
+
+ # no tests for -m (no idea how to do that one)
+ # -I (no easy way to generate the EOF it ignores)
+ # -i (not sure how to test that one at the minute)
+ # -p (because we aren't going to run tests setuid)
+ # -V/-E (too much effort, and a real test would be huge)
+ # -c (because almost all the other tests test it anyway)
+ # -q (because, for now, I am lazy)
+ # -s (coming soon, hopefully)
+ # -o (really +o: again, hopefully soon)
+ # -o longname (again, just laziness, don't wait...)
+ # -h/-b (because NetBSD doesn't implement them)
+ atf_add_test_case set_a
+ atf_add_test_case set_C
+ atf_add_test_case set_e
+ atf_add_test_case set_f
+ atf_add_test_case set_n
+ atf_add_test_case set_u
+ atf_add_test_case set_v
+ atf_add_test_case set_x
+
+ atf_add_test_case vi_emacs_VE_toggle
+ atf_add_test_case xx_bogus
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_redir.sh b/contrib/netbsd-tests/bin/sh/t_redir.sh
new file mode 100755
index 0000000..580de88
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_redir.sh
@@ -0,0 +1,903 @@
+# $NetBSD: t_redir.sh,v 1.9 2016/05/14 00:33:02 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+# Any failures in this first test means it is not worth bothering looking
+# for causes of failures in any other tests, make this one work first.
+
+# Problems with this test usually mean inadequate ATF_SHELL used for testing.
+# (though if all pass but the last, it might be a TEST_SH problem.)
+
+atf_test_case basic_test_method_test
+basic_test_method_test_head()
+{
+ atf_set "descr" "Tests that test method works as expected"
+}
+basic_test_method_test_body()
+{
+ cat <<- 'DONE' |
+ DONE
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+ cat <<- 'DONE' |
+ DONE
+ atf_check -s exit:0 -o match:0 -e empty ${TEST_SH} -c 'wc -l'
+
+ cat <<- 'DONE' |
+ echo hello
+ DONE
+ atf_check -s exit:0 -o match:hello -e empty ${TEST_SH}
+ cat <<- 'DONE' |
+ echo hello
+ DONE
+ atf_check -s exit:0 -o match:1 -e empty ${TEST_SH} -c 'wc -l'
+
+ cat <<- 'DONE' |
+ echo hello\
+ world
+ DONE
+ atf_check -s exit:0 -o match:helloworld -e empty ${TEST_SH}
+ cat <<- 'DONE' |
+ echo hello\
+ world
+ DONE
+ atf_check -s exit:0 -o match:2 -e empty ${TEST_SH} -c 'wc -l'
+
+ printf '%s\n%s\n%s\n' Line1 Line2 Line3 > File
+ atf_check -s exit:0 -o inline:'Line1\nLine2\nLine3\n' -e empty \
+ ${TEST_SH} -c 'cat File'
+
+ cat <<- 'DONE' |
+ set -- X "" '' Y
+ echo ARGS="${#}"
+ echo '' -$1- -$2- -$3- -$4-
+ cat <<EOF
+ X=$1
+ EOF
+ cat <<\EOF
+ Y=$4
+ EOF
+ DONE
+ atf_check -s exit:0 -o match:ARGS=4 -o match:'-X- -- -- -Y-' \
+ -o match:X=X -o match:'Y=\$4' -e empty ${TEST_SH}
+}
+
+atf_test_case do_input_redirections
+do_input_redirections_head()
+{
+ atf_set "descr" "Tests that simple input redirection works"
+}
+do_input_redirections_body()
+{
+ printf '%s\n%s\n%s\nEND\n' 'First Line' 'Second Line' 'Line 3' >File
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c 'cat < File'
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c 'cat <File'
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c 'cat< File'
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c 'cat < "File"'
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c '< File cat'
+
+ ln File wc
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c '< wc cat'
+
+ mv wc cat
+ atf_check -s exit:0 -e empty -o match:4 \
+ ${TEST_SH} -c '< cat wc'
+
+
+ cat <<- 'EOF' |
+ for l in 1 2 3; do
+ read line < File
+ echo "$line"
+ done
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nFirst Line\nFirst Line\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ for l in 1 2 3; do
+ read line
+ echo "$line"
+ done <File
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ for l in 1 2 3; do
+ read line < File
+ echo "$line"
+ done <File
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nFirst Line\nFirst Line\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ line=
+ while [ "$line" != END ]; do
+ read line || exit 1
+ echo "$line"
+ done <File
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ while :; do
+ read line || exit 0
+ echo "$line"
+ done <File
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ l=''
+ while read line < File
+ do
+ echo "$line"
+ l="${l}x"
+ [ ${#l} -ge 3 ] && break
+ done
+ echo DONE
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nFirst Line\nFirst Line\nDONE\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ while read line
+ do
+ echo "$line"
+ done <File
+ echo DONE
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\nDONE\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ l=''
+ while read line
+ do
+ echo "$line"
+ l="${l}x"
+ [ ${#l} -ge 3 ] && break
+ done <File
+ echo DONE
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nDONE\n' ${TEST_SH}
+
+ cat <<- 'EOF' |
+ l=''
+ while read line1 <File
+ do
+ read line2
+ echo "$line1":"$line2"
+ l="${l}x"
+ [ ${#l} -ge 2 ] && break
+ done <File
+ echo DONE
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line:First Line\nFirst Line:Second Line\nDONE\n' \
+ ${TEST_SH}
+}
+
+atf_test_case do_output_redirections
+do_output_redirections_head()
+{
+ atf_set "descr" "Test Output redirections"
+}
+do_output_redirections_body()
+{
+nl='
+'
+ T=0
+ i() { T=$(expr "$T" + 1); }
+
+ rm -f Output 2>/dev/null || :
+ test -f Output && atf_fail "Unable to remove Output file"
+#1
+ i; atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '> Output'
+ test -f Output || atf_fail "#$T: Did not make Output file"
+#2
+ rm -f Output 2>/dev/null || :
+ i; atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '>> Output'
+ test -f Output || atf_fail "#$T: Did not make Output file"
+#3
+ rm -f Output 2>/dev/null || :
+ i; atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '>| Output'
+ test -f Output || atf_fail "#$T: Did not make Output file"
+
+#4
+ rm -f Output 2>/dev/null || :
+ i
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c 'echo Hello >Output'
+ test -s Output || atf_fail "#$T: Did not make non-empty Output file"
+ test "$(cat Output)" = "Hello" ||
+ atf_fail "#$T: Incorrect Output: Should be 'Hello' is '$(cat Output)'"
+#5
+ i
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c 'echo Hello>!Output'
+ test -s Output || atf_fail "#$T: Did not make non-empty Output file"
+ test "$(cat Output)" = "Hello" ||
+ atf_fail "#$T: Incorrect Output: Should be 'Hello' is '$(cat Output)'"
+#6
+ i
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c 'echo Bye >>Output'
+ test -s Output || atf_fail "#$T: Removed Output file"
+ test "$(cat Output)" = "Hello${nl}Bye" || atf_fail \
+ "#$T: Incorrect Output: Should be 'Hello\\nBye' is '$(cat Output)'"
+#7
+ i; atf_check -s exit:0 -o inline:'line 1\nline 2\n' -e empty \
+ ${TEST_SH} -c \
+ 'echo line 1 > Output; echo line 2 >> Output; cat Output'
+ test "$(cat Output)" = "line 1${nl}line 2" || atf_fail \
+ "#$T: Incorrect Output: Should be 'line 1\\nline 2' is '$(cat Output)'"
+#8
+ i; atf_check -s exit:0 -o inline:'line 2\n' -e empty \
+ ${TEST_SH} -c 'echo line 1 > Output; echo line 2'
+ test "$(cat Output)" = "line 1" || atf_fail \
+ "#$T: Incorrect Output: Should be 'line 1' is '$(cat Output)'"
+#9
+ i; atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c '(echo line 1; echo line 2 > Out2) > Out1'
+ test "$(cat Out1)" = "line 1" || atf_fail \
+ "#$T: Incorrect Out1: Should be 'line 1' is '$(cat Out1)'"
+ test "$(cat Out2)" = "line 2" || atf_fail \
+ "#$T: Incorrect Out2: Should be 'line 2' is '$(cat Out2)'"
+#10
+ i; atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c '{ echo line 1; echo line 2 > Out2;} > Out1'
+ test "$(cat Out1)" = "line 1" || atf_fail \
+ "#$T: Incorrect Out1: Should be 'line 1' is '$(cat Out1)'"
+ test "$(cat Out2)" = "line 2" || atf_fail \
+ "#$T: Incorrect Out2: Should be 'line 2' is '$(cat Out2)'"
+#11
+ i; rm -f Out1 Out2 2>/dev/null || :
+ cat <<- 'EOF' |
+ for arg in 'line 1' 'line 2' 'line 3'
+ do
+ echo "$arg"
+ echo "$arg" > Out1
+ done > Out2
+ EOF
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+ test "$(cat Out1)" = "line 3" || atf_fail \
+ "#$T: Incorrect Out1: Should be 'line 3' is '$(cat Out1)'"
+ test "$(cat Out2)" = "line 1${nl}line 2${nl}line 3" || atf_fail \
+ "#$T: Incorrect Out2: Should be 'line 1\\nline 2\\nline 3' is '$(cat Out2)'"
+#12
+ i; rm -f Out1 Out2 2>/dev/null || :
+ cat <<- 'EOF' |
+ for arg in 'line 1' 'line 2' 'line 3'
+ do
+ echo "$arg"
+ echo "$arg" >> Out1
+ done > Out2
+ EOF
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+ test "$(cat Out1)" = "line 1${nl}line 2${nl}line 3" || atf_fail \
+ "#$T: Incorrect Out1: Should be 'line 1\\nline 2\\nline 3' is '$(cat Out1)'"
+ test "$(cat Out2)" = "line 1${nl}line 2${nl}line 3" || atf_fail \
+ "#$T: Incorrect Out2: Should be 'line 1\\nline 2\\nline 3' is '$(cat Out2)'"
+}
+
+atf_test_case fd_redirections
+fd_redirections_head()
+{
+ atf_set "descr" "Tests redirections to/from specific descriptors"
+}
+fd_redirections_body()
+{
+ atf_require_prog /bin/echo
+
+ cat <<- 'DONE' > helper.sh
+ f() {
+ /bin/echo nothing "$1" >& "$1"
+ }
+ for n
+ do
+ eval "f $n $n"'> file-$n'
+ done
+ DONE
+ cat <<- 'DONE' > reread.sh
+ f() {
+ (read -r var; echo "${var}") <&"$1"
+ }
+ for n
+ do
+ x=$( eval "f $n $n"'< file-$n' )
+ test "${x}" = "nothing $n" || echo "$n"
+ done
+ DONE
+
+ validate()
+ {
+ for n
+ do
+ test -e "file-$n" || atf_fail "file-$n not created"
+ C=$(cat file-"$n")
+ test "$C" = "nothing $n" ||
+ atf_fail "file-$n contains '$C' not 'nothing $n'"
+ done
+ }
+
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 1 2 3 4 5 6 7 8 9
+ validate 1 2 3 4 5 6 7 8 9
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 3 4 5 6 7 8 9
+
+ L=$(ulimit -n)
+ if [ "$L" -ge 30 ]
+ then
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 10 15 19 20 25 29
+ validate 10 15 19 20 25 29
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 10 15 19 20 25 29
+ fi
+ if [ "$L" -ge 100 ]
+ then
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 32 33 49 50 51 63 64 65 77 88 99
+ validate 32 33 49 50 51 63 64 65 77 88 99
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 32 33 49 50 51 63 64 65 77 88 99
+ fi
+ if [ "$L" -ge 500 ]
+ then
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 100 101 199 200 222 333 444 499
+ validate 100 101 199 200 222 333 444 499
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 100 101 199 200 222 333 444 499
+ fi
+ if [ "$L" -gt 1005 ]
+ then
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 1000 1001 1002 1003 1004 1005
+ validate 1000 1001 1002 1003 1004 1005
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 1000 1001 1002 1003 1004 1005
+ fi
+}
+
+atf_test_case local_redirections
+local_redirections_head()
+{
+ atf_set "descr" \
+ "Tests that exec can reassign file descriptors in the shell itself"
+}
+local_redirections_body()
+{
+ cat <<- 'DONE' > helper.sh
+ for f
+ do
+ eval "exec $f"'> file-$f'
+ done
+
+ for f
+ do
+ printf '%s\n' "Hello $f" >&"$f"
+ done
+
+ for f
+ do
+ eval "exec $f"'>&-'
+ done
+
+ for f
+ do
+ eval "exec $f"'< file-$f'
+ done
+
+ for f
+ do
+ exec <& "$f"
+ read -r var || echo >&2 "No data in file-$f"
+ read -r x && echo >&2 "Too much data in file-${f}: $x"
+ test "${var}" = "Hello $f" ||
+ echo >&2 "file-$f contains '${var}' not 'Hello $f'"
+ done
+ DONE
+
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 3 4 5 6 7 8 9
+
+ L=$(ulimit -n)
+ if [ "$L" -ge 30 ]
+ then
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 10 11 13 15 16 19 20 28 29
+ fi
+ if [ "$L" -ge 100 ]
+ then
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 30 31 32 63 64 65 77 88 99
+ fi
+ if [ "$L" -ge 500 ]
+ then
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 100 101 111 199 200 201 222 333 499
+ fi
+ if [ "$L" -ge 1005 ]
+ then
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 1000 1001 1002 1003 1004 1005
+ fi
+}
+
+atf_test_case named_fd_redirections
+named_fd_redirections_head()
+{
+ atf_set "descr" "Tests redirections to /dev/stdout (etc)"
+
+}
+named_fd_redirections_body()
+{
+ if test -c /dev/stdout
+ then
+ atf_check -s exit:0 -o inline:'OK\n' -e empty \
+ ${TEST_SH} -c 'echo OK >/dev/stdout'
+ atf_check -s exit:0 -o inline:'OK\n' -e empty \
+ ${TEST_SH} -c '/bin/echo OK >/dev/stdout'
+ fi
+
+ if test -c /dev/stdin
+ then
+ atf_require_prog cat
+
+ echo GOOD | atf_check -s exit:0 -o inline:'GOOD\n' -e empty \
+ ${TEST_SH} -c 'read var </dev/stdin; echo $var'
+ echo GOOD | atf_check -s exit:0 -o inline:'GOOD\n' -e empty \
+ ${TEST_SH} -c 'cat </dev/stdin'
+ fi
+
+ if test -c /dev/stderr
+ then
+ atf_check -s exit:0 -e inline:'OK\n' -o empty \
+ ${TEST_SH} -c 'echo OK 2>/dev/stderr >&2'
+ atf_check -s exit:0 -e inline:'OK\n' -o empty \
+ ${TEST_SH} -c '/bin/echo OK 2>/dev/stderr >&2'
+ fi
+
+ if test -c /dev/fd/8 && test -c /dev/fd/9
+ then
+ atf_check -s exit:0 -o inline:'EIGHT\n' -e empty \
+ ${TEST_SH} -c 'printf "%s\n" EIGHT 8>&1 >/dev/fd/8 |
+ cat 9<&0 </dev/fd/9'
+ fi
+
+ return 0
+}
+
+atf_test_case redir_in_case
+redir_in_case_head()
+{
+ atf_set "descr" "Tests that sh(1) allows just redirections " \
+ "in case statements. (PR bin/48631)"
+}
+redir_in_case_body()
+{
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c 'case x in (whatever) >foo;; esac'
+
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c 'case x in (whatever) >foo 2>&1;; esac'
+
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c 'case x in (whatever) >foo 2>&1 </dev/null;; esac'
+
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c 'case x in (whatever) >${somewhere};; esac'
+}
+
+atf_test_case incorrect_redirections
+incorrect_redirections_head()
+{
+ atf_set "descr" "Tests that sh(1) correctly ignores non-redirections"
+}
+incorrect_redirections_body() {
+
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c 'echo foo>'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c 'read foo<'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c 'echo foo<>'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x > '"$nl"
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'read x < '"$nl"
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x <> '"$nl"
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x >< anything'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x >>< anything'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x >|< anything'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x > ; read x < /dev/null || echo bad'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'read x < & echo y > /dev/null; wait && echo bad'
+
+ rm -f Output 2>/dev/null || :
+ atf_check -s exit:0 -e empty -o inline:'A Line > Output\n' \
+ ${TEST_SH} -c 'echo A Line \> Output'
+ test -f Output && atf_file "File 'Output' appeared and should not have"
+
+ rm -f Output 2>/dev/null || :
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} -c 'echo A Line \>> Output'
+ test -f Output || atf_file "File 'Output' not created when it should"
+ test "$(cat Output)" = 'A Line >' || atf_fail \
+ "Output file contains '$(cat Output)' instead of '"'A Line >'\'
+
+ rm -f Output \> 2>/dev/null || :
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} -c 'echo A Line >\> Output'
+ test -f Output && atf_file "File 'Output' appeared and should not have"
+ test -f '>' || atf_file "File '>' not created when it should"
+ test "$(cat '>')" = 'A Line Output' || atf_fail \
+ "Output file ('>') contains '$(cat '>')' instead of 'A Line Output'"
+}
+
+# Many more tests in t_here, so here we have just rudimentary checks
+atf_test_case redir_here_doc
+redir_here_doc_head()
+{
+ atf_set "descr" "Tests that sh(1) correctly processes 'here' doc " \
+ "input redirections"
+}
+redir_here_doc_body()
+{
+ # nb: the printf is not executed, it is data
+ cat <<- 'DONE' |
+ cat <<EOF
+ printf '%s\n' 'hello\n'
+ EOF
+ DONE
+ atf_check -s exit:0 -o match:printf -o match:'hello\\n' \
+ -e empty ${TEST_SH}
+}
+
+atf_test_case subshell_redirections
+subshell_redirections_head()
+{
+ atf_set "descr" "Tests redirection interactions between shell and " \
+ "its sub-shell(s)"
+}
+subshell_redirections_body()
+{
+ atf_require_prog cat
+
+ LIM=$(ulimit -n)
+
+ cat <<- 'DONE' |
+ exec 6>output-file
+
+ ( printf "hello\n" >&6 )
+
+ exec 8<output-file
+
+ ( read hello <&8 ; test hello = "$hello" || echo >&2 Hello )
+
+ ( printf "bye-bye\n" >&6 )
+
+ ( exec 8<&- )
+ read bye <&8 || echo >&2 "Closed?"
+ echo Bye="$bye"
+ DONE
+ atf_check -s exit:0 -o match:Bye=bye-bye -e empty \
+ ${TEST_SH}
+
+ cat <<- 'DONE' |
+ for arg in one-4 two-24 three-14
+ do
+ fd=${arg#*-}
+ file=${arg%-*}
+ eval "exec ${fd}>${file}"
+ done
+
+ for arg in one-5 two-7 three-19
+ do
+ fd=${arg#*-}
+ file=${arg%-*}
+ eval "exec ${fd}<${file}"
+ done
+
+ (
+ echo line-1 >&4
+ echo line-2 >&24
+ echo line-3 >&14
+ echo go
+ ) | (
+ read go
+ read x <&5
+ read y <&7
+ read z <&19
+
+ printf "%s\n" "${x}" "${y}" "${z}"
+ )
+ DONE
+ atf_check -s exit:0 -o inline:'line-1\nline-2\nline-3\n' \
+ -e empty ${TEST_SH}
+
+ cat <<- 'DONE' |
+ for arg in one-4-5 two-6-7 three-8-9 four-11-10 five-3-12
+ do
+ ofd=${arg##*-}
+ file=${arg%-*}
+ ifd=${file#*-}
+ file=${file%-*}
+ eval "exec ${ofd}>${file}"
+ eval "exec ${ifd}<${file}"
+ done
+
+ ( ( ( echo line-1 >& 13 ) 13>&12 ) 12>&5 ) >stdout 2>errout
+ ( ( ( echo line-2 >& 4) 13>&12 ) 4>&7 ) >>stdout 2>>errout
+ ( ( ( echo line-3 >& 6) 8>&1 6>&11 >&12) 11>&9 >&7 ) >>stdout
+
+ ( ( ( cat <&13 >&12 ) 13<&8 12>&10 ) 10>&1 8<&6 ) 6<&4
+ ( ( ( cat <&4 ) <&4 6<&8 8<&11 )
+ <&4 4<&6 6<&8 8<&11 ) <&4 4<&6 6<&8 8<&11 11<&3
+ ( ( ( cat <&7 >&1 ) 7<&6 >&10 ) 10>&2 6<&8 ) 2>&1
+ DONE
+ atf_check -s exit:0 -o inline:'line-1\nline-2\nline-3\n' \
+ -e empty ${TEST_SH}
+}
+
+atf_test_case ulimit_redirection_interaction
+ulimit_redirection_interaction_head()
+{
+ atf_set "descr" "Tests interactions between redirect and ulimit -n "
+}
+ulimit_redirection_interaction_body()
+{
+ atf_require_prog ls
+
+ cat <<- 'DONE' > helper.sh
+ oLIM=$(ulimit -n)
+ HRD=$(ulimit -H -n)
+ test "${oLIM}" -lt "${HRD}" && ulimit -n "${HRD}"
+ LIM=$(ulimit -n)
+
+ FDs=
+ LFD=-1
+ while [ ${LIM} -gt 16 ]
+ do
+ FD=$(( ${LIM} - 1 ))
+ if [ "${FD}" -eq "${LFD}" ]; then
+ echo >&2 "Infinite loop... (busted $(( )) ??)"
+ exit 1
+ fi
+ LFD="${FD}"
+
+ eval "exec ${FD}"'> /dev/null'
+ FDs="${FD}${FDs:+ }${FDs}"
+
+ (
+ FD=$(( ${LIM} + 1 ))
+ eval "exec ${FD}"'> /dev/null'
+ echo "Reached unreachable command"
+ ) 2>/dev/null && echo >&2 "Opened beyond limit!"
+
+ (eval 'ls 2>&1 3>&1 4>&1 5>&1 '"${FD}"'>&1') >&"${FD}"
+
+ LIM=$(( ${LIM} / 2 ))
+ ulimit -S -n "${LIM}"
+ done
+
+ # Even though ulimit has been reduced, open fds should work
+ for FD in ${FDs}
+ do
+ echo ${FD} in ${FDs} >&"${FD}" || exit 1
+ done
+
+ ulimit -S -n "${oLIM}"
+
+ # maybe more later...
+
+ DONE
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} helper.sh
+}
+
+atf_test_case validate_fn_redirects
+validate_fn_redirects_head()
+{
+ # These test cases inspired by PR bin/48875 and the sh
+ # changes that were required to fix it.
+
+ atf_set "descr" "Tests various redirections applied to functions " \
+ "See PR bin/48875"
+}
+validate_fn_redirects_body()
+{
+ cat <<- 'DONE' > f-def
+ f() {
+ printf '%s\n' In-Func
+ }
+ DONE
+
+ atf_check -s exit:0 -o inline:'In-Func\nsuccess1\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f ; printf '%s\n' success1"
+ atf_check -s exit:0 -o inline:'success2\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f >/dev/null; printf '%s\n' success2"
+ atf_check -s exit:0 -o inline:'success3\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f >&- ; printf '%s\n' success3"
+ atf_check -s exit:0 -o inline:'In-Func\nsuccess4\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f & wait; printf '%s\n' success4"
+ atf_check -s exit:0 -o inline:'success5\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f >&- & wait; printf '%s\n' success5"
+ atf_check -s exit:0 -o inline:'In-Func\nIn-Func\nsuccess6\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f;f; printf '%s\n' success6"
+ atf_check -s exit:0 -o inline:'In-Func\nIn-Func\nsuccess7\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; { f;f;}; printf '%s\n' success7"
+ atf_check -s exit:0 -o inline:'In-Func\nIn-Func\nsuccess8\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; { f;f;}& wait; printf '%s\n' success8"
+ atf_check -s exit:0 -o inline:'In-Func\nsuccess9\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./f-def; { f>/dev/null;f;}& wait; printf '%s\n' success9"
+ atf_check -s exit:0 -o inline:'In-Func\nsuccess10\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./f-def; { f;f>/dev/null;}& wait; printf '%s\n' success10"
+
+ # This one tests the issue etcupdate had with the original 48875 fix
+ atf_check -s exit:0 -o inline:'Func a\nFunc b\nFunc c\n' -e empty \
+ ${TEST_SH} -c '
+ f() {
+ echo Func "$1"
+ }
+ exec 3<&0 4>&1
+ ( echo x-a; echo y-b; echo z-c ) |
+ while read A
+ do
+ B=${A#?-}
+ f "$B" <&3 >&4
+ done >&2'
+
+ # And this tests a similar condition with that same fix
+ cat <<- 'DONE' >Script
+ f() {
+ printf '%s' " hello $1"
+ }
+ exec 3>&1
+ echo $( for i in a b c
+ do printf '%s' @$i; f $i >&3; done >foo
+ )
+ printf '%s\n' foo=$(cat foo)
+ DONE
+ atf_check -s exit:0 -e empty \
+ -o inline:' hello a hello b hello c\nfoo=@a@b@c\n' \
+ ${TEST_SH} Script
+
+ # Tests with sh reading stdin, which is not quite the same internal
+ # mechanism.
+ echo ". ./f-def || echo >&2 FAIL
+ f
+ printf '%s\n' stdin1
+ "| atf_check -s exit:0 -o inline:'In-Func\nstdin1\n' -e empty ${TEST_SH}
+
+ echo '
+ . ./f-def || echo >&2 FAIL
+ f >&-
+ printf "%s\n" stdin2
+ ' | atf_check -s exit:0 -o inline:'stdin2\n' -e empty ${TEST_SH}
+
+ cat <<- 'DONE' > fgh.def
+ f() {
+ echo -n f >&3
+ sleep 4
+ echo -n F >&3
+ }
+ g() {
+ echo -n g >&3
+ sleep 2
+ echo -n G >&3
+ }
+ h() {
+ echo -n h >&3
+ }
+ DONE
+
+ atf_check -s exit:0 -o inline:'fFgGh' -e empty \
+ ${TEST_SH} -c '. ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ f; g; h'
+
+ atf_check -s exit:0 -o inline:'fghGF' -e empty \
+ ${TEST_SH} -c '. ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ f & sleep 1; g & sleep 1; h; wait'
+
+ atf_check -s exit:0 -o inline:'fFgGhX Y\n' -e empty \
+ ${TEST_SH} -c '. ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ echo X $( f ; g ; h ) Y'
+
+ # This one is the real test for PR bin/48875. If the
+ # cmdsub does not complete before f g (and h) exit,
+ # then the 'F' & 'G' will precede 'X Y' in the output.
+ # If the cmdsub finishes while f & g are still running,
+ # then the X Y will appear before the F and G.
+ # The trailing "sleep 3" is just so we catch all the
+ # output (otherwise atf_check will be finished while
+ # f & g are still sleeping).
+
+ atf_check -s exit:0 -o inline:'fghX Y\nGF' -e empty \
+ ${TEST_SH} -c '. ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ echo X $( f >&- & sleep 1; g >&- & sleep 1 ; h ) Y
+ sleep 3
+ exec 4>&1 || echo FD_FAIL
+ '
+
+ # Do the test again to verify it also all works reading stdin
+ # (which is a slightly different path through the shell)
+ echo '
+ . ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ echo X $( f >&- & sleep 1; g >&- & sleep 1 ; h ) Y
+ sleep 3
+ exec 4>&1 || echo FD_FAIL
+ ' | atf_check -s exit:0 -o inline:'fghX Y\nGF' -e empty ${TEST_SH}
+}
+
+atf_init_test_cases() {
+ atf_add_test_case basic_test_method_test
+ atf_add_test_case do_input_redirections
+ atf_add_test_case do_output_redirections
+ atf_add_test_case fd_redirections
+ atf_add_test_case local_redirections
+ atf_add_test_case incorrect_redirections
+ atf_add_test_case named_fd_redirections
+ atf_add_test_case redir_here_doc
+ atf_add_test_case redir_in_case
+ atf_add_test_case subshell_redirections
+ atf_add_test_case ulimit_redirection_interaction
+ atf_add_test_case validate_fn_redirects
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_redircloexec.sh b/contrib/netbsd-tests/bin/sh/t_redircloexec.sh
new file mode 100755
index 0000000..7659606
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_redircloexec.sh
@@ -0,0 +1,178 @@
+# $NetBSD: t_redircloexec.sh,v 1.3 2016/05/15 15:44:43 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Christos Zoulas.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+mkhelper() {
+ name=$1
+ fd=$2
+ shift 2
+
+ echo "$@" > ./"${name}1"
+ echo "echo ${name}2" ">&${fd}" > ./"${name}2"
+}
+
+runhelper() {
+ ${TEST_SH} "./${1}1"
+}
+
+cleanhelper() {
+ # not really needed, atf cleans up...
+ rm -f ./"${1}1" ./"${1}2" out
+}
+
+atf_test_case exec_redir_closed
+exec_redir_closed_head() {
+ atf_set "descr" "Tests that redirections created by exec are closed on exec"
+}
+exec_redir_closed_body() {
+
+ mkhelper exec 6 \
+ "exec 6> out; echo exec1 >&6; ${TEST_SH} exec2; exec 6>&-"
+
+ atf_check -s exit:0 -o empty -e not-empty ${TEST_SH} ./exec1
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -e ./exec1
+
+ mkhelper exec 9 \
+ "exec 9> out; echo exec1 >&9; ${TEST_SH} exec2"
+
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} ./exec1
+
+ mkhelper exec 8 \
+ "exec 8> out; printf OK; echo exec1 >&8;" \
+ "printf OK; ${TEST_SH} exec2; printf ERR"
+
+ atf_check -s not-exit:0 -o match:OKOK -o not-match:ERR -e not-empty \
+ ${TEST_SH} -e ./exec1
+
+ mkhelper exec 7 \
+ "exec 7> out; printf OK; echo exec1 >&7;" \
+ "printf OK; ${TEST_SH} exec2 || printf ERR"
+
+ atf_check -s exit:0 -o match:OKOKERR -e not-empty \
+ ${TEST_SH} ./exec1
+
+ cleanhelper exec
+}
+
+atf_test_case exec_redir_open
+exec_redir_open_head() {
+ atf_set "descr" "Tests that redirections created by exec can remain open"
+}
+exec_redir_open_body() {
+
+ mkhelper exec 6 \
+ "exec 6> out 6>&6; echo exec1 >&6; ${TEST_SH} exec2; exec 6>&-"
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} ./exec1
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -e ./exec1
+
+ mkhelper exec 9 \
+ "exec 9> out ; echo exec1 >&9; ${TEST_SH} exec2 9>&9"
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} ./exec1
+
+ mkhelper exec 8 \
+ "exec 8> out; printf OK; exec 8>&8; echo exec1 >&8;" \
+ "printf OK; ${TEST_SH} exec2; printf OK"
+
+ atf_check -s exit:0 -o match:OKOKOK -e empty \
+ ${TEST_SH} -e ./exec1
+
+ mkhelper exec 7 \
+ "exec 7> out; printf OK; echo exec1 >&7;" \
+ "printf OK; ${TEST_SH} 7>&7 exec2; printf OK"
+
+ atf_check -s exit:0 -o match:OKOKOK -e empty \
+ ${TEST_SH} -e ./exec1
+
+ cleanhelper exec
+}
+
+atf_test_case loop_redir_open
+loop_redir_open_head() {
+ atf_set "descr" "Tests that redirections in loops don't close on exec"
+}
+loop_redir_open_body() {
+ mkhelper for 3 "for x in x; do ${TEST_SH} ./for2; done 3>out"
+ atf_check -s exit:0 \
+ -o empty \
+ -e empty \
+ ${TEST_SH} ./for1
+ cleanhelper for
+}
+
+atf_test_case compound_redir_open
+compound_redir_open_head() {
+ atf_set "descr" "Tests that redirections in compound statements don't close on exec"
+}
+compound_redir_open_body() {
+ mkhelper comp 3 "{ ${TEST_SH} ./comp2; } 3>out"
+ atf_check -s exit:0 \
+ -o empty \
+ -e empty \
+ ${TEST_SH} ./comp1
+ cleanhelper comp
+}
+
+atf_test_case simple_redir_open
+simple_redir_open_head() {
+ atf_set "descr" "Tests that redirections in simple commands don't close on exec"
+}
+simple_redir_open_body() {
+ mkhelper simp 4 "${TEST_SH} ./simp2 4>out"
+ atf_check -s exit:0 \
+ -o empty \
+ -e empty \
+ ${TEST_SH} ./simp1
+ cleanhelper simp
+}
+
+atf_test_case subshell_redir_open
+subshell_redir_open_head() {
+ atf_set "descr" "Tests that redirections on subshells don't close on exec"
+}
+subshell_redir_open_body() {
+ mkhelper comp 5 "( ${TEST_SH} ./comp2; ${TEST_SH} ./comp2 ) 5>out"
+ atf_check -s exit:0 \
+ -o empty \
+ -e empty \
+ ${TEST_SH} ./comp1
+ cleanhelper comp
+}
+
+atf_init_test_cases() {
+ atf_add_test_case exec_redir_closed
+ atf_add_test_case exec_redir_open
+ atf_add_test_case loop_redir_open
+ atf_add_test_case compound_redir_open
+ atf_add_test_case simple_redir_open
+ atf_add_test_case subshell_redir_open
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_set_e.sh b/contrib/netbsd-tests/bin/sh/t_set_e.sh
index 8dfe6e4..b56ab22 100755
--- a/contrib/netbsd-tests/bin/sh/t_set_e.sh
+++ b/contrib/netbsd-tests/bin/sh/t_set_e.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_set_e.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_set_e.sh,v 1.4 2016/03/31 16:22:27 christos Exp $
#
# Copyright (c) 2007 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -30,7 +30,7 @@
# http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
# the implementation of "sh" to test
-: ${TEST_SH:="sh"}
+: ${TEST_SH:="/bin/sh"}
failwith()
{
@@ -63,7 +63,7 @@ dcheck()
# is thus important to test. (PR bin/29861)
echeck()
{
- check1 'eval '"'($1)'" "$2" "eval '($1)'"
+ check1 'eval '"'( $1 )'" "$2" "eval '($1)'"
}
atf_test_case all
@@ -81,8 +81,8 @@ all_body() {
# first, check basic functioning.
# The ERR shouldn't print; the result of the () should be 1.
# Henceforth we'll assume that we don't need to check $?.
- dcheck '(set -e; false; echo ERR$?); echo -n OK$?' 'OK1'
- echeck '(set -e; false; echo ERR$?); echo -n OK$?' 'OK1'
+ dcheck '(set -e; false; echo ERR$?); echo OK$?' 'OK1'
+ echeck '(set -e; false; echo ERR$?); echo OK$?' 'OK1'
# these cases should be equivalent to the preceding.
dcheck '(set -e; /nonexistent; echo ERR); echo OK' 'OK'
@@ -205,6 +205,9 @@ all_body() {
# According to dsl@ in PR bin/32282, () is not defined as a
# subshell, only as a grouping operator [and a scope, I guess]
+
+ # (This is incorrect. () is definitely a sub-shell)
+
# so the nested false ought to cause the whole shell to exit,
# not just the subshell. dholland@ would like to see C&V,
# because that seems like a bad idea. (Among other things, it
@@ -215,8 +218,10 @@ all_body() {
#
# XXX: the second set has been disabled in the name of making
# all tests "pass".
+ #
+ # As they should be, they are utter nonsense.
- # 1. error if the whole shell exits (current behavior)
+ # 1. error if the whole shell exits (current correct behavior)
dcheck 'echo OK; (set -e; false); echo OK' 'OK OK'
echeck 'echo OK; (set -e; false); echo OK' 'OK OK'
# 2. error if the whole shell does not exit (dsl's suggested behavior)
@@ -232,29 +237,32 @@ all_body() {
# backquote expansion (PR bin/17514)
- # correct
+ # (in-)correct
#dcheck '(set -e; echo ERR `false`; echo ERR); echo OK' 'OK'
#dcheck '(set -e; echo ERR $(false); echo ERR); echo OK' 'OK'
#dcheck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'OK'
#dcheck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'OK'
- # wrong current behavior
+ # Not-wrong current behavior
+ # the exit status of ommand substitution is ignored in most cases
+ # None of these should be causing the shell to exit.
dcheck '(set -e; echo ERR `false`; echo ERR); echo OK' 'ERR ERR OK'
dcheck '(set -e; echo ERR $(false); echo ERR); echo OK' 'ERR ERR OK'
dcheck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'ERR ERR OK'
dcheck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'ERR ERR OK'
+ # This is testing one case (the case?) where the exit status is used
dcheck '(set -e; x=`false`; echo ERR); echo OK' 'OK'
dcheck '(set -e; x=$(false); echo ERR); echo OK' 'OK'
dcheck '(set -e; x=`exit 3`; echo ERR); echo OK' 'OK'
dcheck '(set -e; x=$(exit 3); echo ERR); echo OK' 'OK'
- # correct
+ # correct (really just commented out incorrect nonsense)
#echeck '(set -e; echo ERR `false`; echo ERR); echo OK' 'OK'
#echeck '(set -e; echo ERR $(false); echo ERR); echo OK' 'OK'
#echeck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'OK'
#echeck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'OK'
- # wrong current behavior
+ # not-wrong current behavior (as above)
echeck '(set -e; echo ERR `false`; echo ERR); echo OK' 'ERR ERR OK'
echeck '(set -e; echo ERR $(false); echo ERR); echo OK' 'ERR ERR OK'
echeck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'ERR ERR OK'
@@ -267,11 +275,19 @@ all_body() {
# shift (PR bin/37493)
# correct
+ # Actually, both ways are correct, both are permitted
#dcheck '(set -e; shift || true; echo OK); echo OK' 'OK OK'
#echeck '(set -e; shift || true; echo OK); echo OK' 'OK OK'
- # wrong current behavior
- dcheck '(set -e; shift || true; echo OK); echo OK' 'OK'
- echeck '(set -e; shift || true; echo OK); echo OK' 'OK'
+ # (not-) wrong current behavior
+ #dcheck '(set -e; shift || true; echo OK); echo OK' 'OK'
+ #echeck '(set -e; shift || true; echo OK); echo OK' 'OK'
+
+ # what is wrong is this test assuming one behaviour or the other
+ # (and incidentally this has nothing whatever to do with "-e",
+ # the test should really be moved elsewhere...)
+ # But for now, leave it here, and correct it:
+ dcheck '(set -e; shift && echo OK); echo OK' 'OK'
+ echeck '(set -e; shift && echo OK); echo OK' 'OK'
# Done.
diff --git a/contrib/netbsd-tests/bin/sh/t_shift.sh b/contrib/netbsd-tests/bin/sh/t_shift.sh
new file mode 100755
index 0000000..f65c6c2
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_shift.sh
@@ -0,0 +1,181 @@
+# $NetBSD: t_shift.sh,v 1.2 2016/05/17 09:05:14 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+atf_test_case basic_shift_test
+basic_shift_test_head() {
+ atf_set "descr" "Test correct operation of valid shifts"
+}
+basic_shift_test_body() {
+
+ for a in \
+ "one-arg::0:one-arg" \
+ "one-arg:1:0:one-arg" \
+ "one-arg:0:1 one-arg" \
+ "a b c::2 b c:a" \
+ "a b c:1:2 b c:a" \
+ "a b c:2:1 c:a:b" \
+ "a b c:3:0:a:b:c" \
+ "a b c:0:3 a b c" \
+ "a b c d e f g h i j k l m n o p:1:15 b c d e f g h i j k l m n o p"\
+ "a b c d e f g h i j k l m n o p:9:7 j k l m n o p:a:b:c:g:h:i" \
+ "a b c d e f g h i j k l m n o p:13:3 n o p:a:b:c:d:k:l:m" \
+ "a b c d e f g h i j k l m n o p:16:0:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p"
+ do
+ oIFS="${IFS}"
+ IFS=:; set -- $a
+ IFS="${oIFS}"
+
+ init="$1"; n="$2"; res="$3"; shift 3
+
+ not=
+ for b
+ do
+ not="${not} -o not-match:$b"
+ done
+
+ atf_check -s exit:0 -o "match:${res}" ${not} -e empty \
+ ${TEST_SH} -c "set -- ${init}; shift $n;"' echo "$# $*"'
+ done
+
+ atf_check -s exit:0 -o match:complete -o not-match:ERR -e empty \
+ ${TEST_SH} -c \
+ 'set -- a b c d e;while [ $# -gt 0 ];do shift||echo ERR;done;echo complete'
+}
+
+atf_test_case excessive_shift
+excessive_shift_head() {
+ atf_set "descr" "Test acceptable operation of shift too many"
+}
+# In:
+#
+# http://pubs.opengroup.org/onlinepubs/9699919799
+# /utilities/V3_chap02.html#tag_18_26_01
+#
+# (that URL should be one line, with the /util... immediately after ...9799)
+#
+# POSIX says of shift (in the "EXIT STATUS" paragraph):
+#
+# If the n operand is invalid or is greater than "$#", this may be considered
+# a syntax error and a non-interactive shell may exit; if the shell does not
+# exit in this case, a non-zero exit status shall be returned.
+# Otherwise, zero shall be returned.
+#
+# NetBSD's sh treats it as an error and exits (if non-interactive, as here),
+# other shells do not.
+#
+# Either behaviour is acceptable - so the test allows for both
+# (and checks that if the shell does not exit, "shift" returns status != 0)
+
+excessive_shift_body() {
+ for a in \
+ "one-arg:2" \
+ "one-arg:4" \
+ "one-arg:13" \
+ "one two:3" \
+ "one two:7" \
+ "one two three four five:6" \
+ "I II III IV V VI VII VIII IX X XI XII XIII XIV XV:16" \
+ "I II III IV V VI VII VIII IX X XI XII XIII XIV XV:17" \
+ "I II III IV V VI VII VIII IX X XI XII XIII XIV XV:30" \
+ "I II III IV V VI VII VIII IX X XI XII XIII XIV XV:9999"
+ do
+ oIFS="${IFS}"
+ IFS=:; set -- $a
+ IFS="${oIFS}"
+
+ atf_check -s not-exit:0 -o match:OK -o not-match:ERR \
+ -e ignore ${TEST_SH} -c \
+ "set -- $1 ;"'echo OK:$#-'"$2;shift $2 && echo ERR"
+ done
+}
+
+atf_test_case function_shift
+function_shift_head() {
+ atf_set "descr" "Test that shift in a function does not affect outside"
+}
+function_shift_body() {
+ : # later...
+}
+
+atf_test_case non_numeric_shift
+non_numeric_shift_head() {
+ atf_set "descr" "Test that non-numeric args to shift are detected"
+}
+
+# from the DESCRIPTION section at the URL mentioned with the excessive_shift
+# test:
+#
+# The value n shall be an unsigned decimal integer ...
+#
+# That is not hex (octal will be treated as if it were decimal, a leading 0
+# will simply be ignored - we test for this by giving an "octal" value that
+# would be OK if parsed as octal, but not if parsed (correctly) as decimal)
+#
+# Obviously total trash like roman numerals or alphabetic strings are out.
+#
+# Also no signed values (no + or -) and not a string that looks kind of like
+# a number, but only if you're generous
+#
+# But as the EXIT STATUS section quoted above says, with an invalid 'n'
+# the shell has the option of exiting, or returning status != 0, so
+# again this test allows both.
+
+non_numeric_shift_body() {
+
+ # there are 9 args set, 010 is 8 if parsed octal, 10 decimal
+ for a in a I 0x12 010 5V -1 ' ' '' +1 ' 1'
+ do
+ atf_check -s not-exit:0 -o empty -e ignore ${TEST_SH} -c \
+ "set -- a b c d e f g h i; shift '$a' && echo ERROR"
+ done
+}
+
+atf_test_case too_many_args
+too_many_args_head() {
+ # See PR bin/50896
+ atf_set "descr" "Test that sh detects invalid extraneous args to shift"
+}
+# This is a syntax error, a non-interactive shell (us) must exit $? != 0
+too_many_args_body() {
+ # This tests the bug in PR bin/50896 is fixed
+
+ for a in "1 1" "1 0" "1 2 3" "1 foo" "1 --" "-- 1"
+ do
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ " set -- a b c d; shift ${a} ; echo FAILED "
+ done
+}
+
+atf_init_test_cases() {
+ atf_add_test_case basic_shift_test
+ atf_add_test_case excessive_shift
+ atf_add_test_case function_shift
+ atf_add_test_case non_numeric_shift
+ atf_add_test_case too_many_args
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_ulimit.sh b/contrib/netbsd-tests/bin/sh/t_ulimit.sh
index 3e7c0a6..094a2ee 100755
--- a/contrib/netbsd-tests/bin/sh/t_ulimit.sh
+++ b/contrib/netbsd-tests/bin/sh/t_ulimit.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_ulimit.sh,v 1.1 2012/06/11 18:32:59 njoly Exp $
+# $NetBSD: t_ulimit.sh,v 1.3 2016/03/27 14:50:01 christos Exp $
#
# Copyright (c) 2012 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,6 +24,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
# ulimit builtin test.
@@ -31,13 +33,22 @@ atf_test_case limits
limits_head() {
atf_set "descr" "Checks for limits flags"
}
+
+get_ulimits() {
+ local limits=$(${TEST_SH} -c 'ulimit -a' |
+ sed -e 's/.*\(-[A-Za-z0-9]\)[^A-Za-z0-9].*/\1/' | sort -u)
+ if [ -z "$limits" ]; then
+ # grr ksh
+ limits="-a -b -c -d -f -l -m -n -p -r -s -t -v"
+ fi
+ echo "$limits"
+}
+
limits_body() {
- atf_check -s eq:0 -o ignore -e empty \
- /bin/sh -c "ulimit -a"
- for l in $(ulimit -a | sed 's,^.*(,,;s, .*$,,');
+ atf_check -s eq:0 -o ignore -e empty ${TEST_SH} -c "ulimit -a"
+ for l in $(get_ulimits)
do
- atf_check -s eq:0 -o ignore -e empty \
- /bin/sh -c "ulimit $l"
+ atf_check -s eq:0 -o ignore -e empty ${TEST_SH} -c "ulimit $l"
done
}
diff --git a/contrib/netbsd-tests/bin/sh/t_varquote.sh b/contrib/netbsd-tests/bin/sh/t_varquote.sh
index 1768777..3811d85 100755
--- a/contrib/netbsd-tests/bin/sh/t_varquote.sh
+++ b/contrib/netbsd-tests/bin/sh/t_varquote.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_varquote.sh,v 1.2 2012/03/25 18:50:19 christos Exp $
+# $NetBSD: t_varquote.sh,v 1.5 2016/03/27 14:50:01 christos Exp $
#
# Copyright (c) 2007 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,6 +24,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
# Variable quoting test.
@@ -39,30 +41,70 @@ all_head() {
atf_set "descr" "Basic checks for variable quoting"
}
all_body() {
- foo='${a:-foo}'
- check "$foo" '${a:-foo}'
- foo="${a:-foo}"
- check "$foo" "foo"
+ cat <<-'EOF' > script.sh
+ T=0
+ check() {
+ T=$((${T} + 1))
- foo=${a:-"'{}'"}
- check "$foo" "'{}'"
+ if [ "$1" != "$2" ]
+ then
+ printf '%s\n' "T${T}: expected [$2], found [$1]"
+ exit 1
+ fi
+ }
- foo=${a:-${b:-"'{}'"}}
- check "$foo" "'{}'"
+ #1
+ foo='${a:-foo}'
+ check "$foo" '${a:-foo}'
+ #2
+ foo="${a:-foo}"
+ check "$foo" "foo"
+ #3
+ foo=${a:-"'{}'"}
+ check "$foo" "'{}'"
+ #4
+ foo=${a:-${b:-"'{}'"}}
+ check "$foo" "'{}'"
+ #5
+ # ${ } The ' are inside ".." so are literal (not quotes).
+ foo="${a-'}'}"
+ check "$foo" "''}"
+ #6
+ # The rules for quoting in ${var-word} expressions are somewhat
+ # weird, in the following there is not one quoted string being
+ # assigned to foo (with internally quoted sub-strings), rather
+ # it is a mixed quoted/unquoted string, with parts that are
+ # quoted, separated by 2 unquoted sections...
+ # qqqqqqqqqq uuuuuuuuuu qq uuuu qqqq
+ foo="${a:-${b:-"${c:-${d:-"x}"}}y}"}}z}"
+ # " z*"
+ # ${a:- }
+ # ${b:- }
+ # " y*"
+ # ${c:- }
+ # ${d:- }
+ # "x*"
+ check "$foo" "x}y}z}"
+ #7
+ # And believe it or not, this is the one that gives
+ # most problems, with 3 different observed outputs...
+ # qqqqq qq q is one interpretation
+ # qqqqq QQQQ q is another (most common)
+ # (the third is syntax error...)
+ foo="${a:-"'{}'"}"
+ check "$foo" "'{}'"
- foo="${a:-"'{}'"}"
- check "$foo" "'{}'"
+ EOF
- foo="${a:-${b:-"${c:-${d:-"x}"}}y}"}}z}"
- # " z*"
- # ${a:- }
- # ${b:- }
- # " y*"
- # ${c:- }
- # ${d:- }
- # "x*"
- check "$foo" "x}y}z}"
+ OUT=$( ${TEST_SH} script.sh 2>&1 )
+ if [ $? -ne 0 ]
+ then
+ atf_fail "${OUT}"
+ elif [ -n "${OUT}" ]
+ then
+ atf_fail "script.sh unexpectedly said: ${OUT}"
+ fi
}
atf_test_case nested_quotes_multiword
@@ -72,10 +114,21 @@ nested_quotes_multiword_head() {
}
nested_quotes_multiword_body() {
atf_check -s eq:0 -o match:"first-word second-word" -e empty \
- /bin/sh -c 'echo "${foo:="first-word"} second-word"'
+ ${TEST_SH} -c 'echo "${foo:="first-word"} second-word"'
+}
+
+atf_test_case default_assignment_with_arith
+default_assignment_with_arith_head() {
+ atf_set "descr" "Tests default variable assignment with arithmetic" \
+ "string works (PR bin/50827)"
+}
+default_assignment_with_arith_body() {
+ atf_check -s eq:0 -o empty -e empty ${TEST_SH} -c ': "${x=$((1))}"'
+ atf_check -s eq:0 -o match:1 -e empty ${TEST_SH} -c 'echo "${x=$((1))}"'
}
atf_init_test_cases() {
atf_add_test_case all
atf_add_test_case nested_quotes_multiword
+ atf_add_test_case default_assignment_with_arith
}
diff --git a/contrib/netbsd-tests/bin/sh/t_varval.sh b/contrib/netbsd-tests/bin/sh/t_varval.sh
new file mode 100755
index 0000000..94e306b
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_varval.sh
@@ -0,0 +1,251 @@
+# $NetBSD: t_varval.sh,v 1.1 2016/03/16 15:49:19 christos Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+# Test all kinds of weird values in various ways to use shell $... expansions
+
+oneline()
+{
+ q="'"
+ test $# -eq 4 && q=""
+
+ v=$( printf '\\%3.3o' $(( $2 & 0xFF )) )
+ printf "%s" "$1"
+ if [ $2 != 39 ]; then
+ printf "%sprefix${v}suffix%s" "$q" "$q"
+ elif [ $# -ne 4 ]; then
+ printf %s prefix\"\'\"suffix
+ else
+ printf %s prefix\'suffix
+ fi
+ printf "%s\n" "$3"
+}
+
+mkdata() {
+ quote= pfx=
+ while [ $# -gt 0 ]
+ do
+ case "$1" in
+ --) shift; break;;
+ -q) quote=no; shift; continue;;
+ esac
+
+ pfx="${pfx}${pfx:+ }${1}"
+ shift
+ done
+
+ sfx=
+ while [ $# -gt 0 ]
+ do
+ sfx="${sfx}${sfx:+ }${1}"
+ shift
+ done
+
+ i=1 # '\0' is not expected to work, anywhere...
+ while [ $i -lt 256 ]
+ do
+ oneline "${pfx}" "$i" "${sfx}" $quote
+ i=$(( $i + 1 ))
+ done
+}
+
+atf_test_case aaa
+aaa_head() {
+ atf_set "descr" "Check that this test has a hope of working. " \
+ "Just give up on these tests if the aaa test fails".
+}
+aaa_body() {
+ oneline "echo " 9 '' |
+ atf_check -s exit:0 -o inline:'prefix\tsuffix\n' -e empty \
+ ${TEST_SH}
+
+ oneline "VAR=" 65 '; echo "${#VAR}:${VAR}"' |
+ atf_check -s exit:0 -o inline:'13:prefixAsuffix\n' -e empty \
+ ${TEST_SH}
+
+ oneline "VAR=" 1 '; echo "${#VAR}:${VAR}"' |
+ atf_check -s exit:0 -o inline:'13:prefixsuffix\n' -e empty \
+ ${TEST_SH}
+
+ oneline "VAR=" 10 '; echo "${#VAR}:${VAR}"' |
+ atf_check -s exit:0 -o inline:'13:prefix\nsuffix\n' -e empty \
+ ${TEST_SH}
+
+ rm -f prefix* 2>/dev/null || :
+ oneline "echo hello >" 45 "" |
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+ test -f "prefix-suffix" ||
+ atf_fail "failed to create prefix-suffix (45)"
+ test -s "prefix-suffix" ||
+ atf_fail "no data in prefix-suffix (45)"
+ test "$(cat prefix-suffix)" = "hello" ||
+ atf_fail "incorrect data in prefix-suffix (45)"
+
+ return 0
+}
+
+atf_test_case assignment
+assignment_head() {
+ atf_set "descr" "Check that all chars can be assigned to vars"
+}
+assignment_body() {
+ atf_require_prog grep
+ atf_require_prog rm
+
+ rm -f results || :
+ mkdata "VAR=" -- '; echo ${#VAR}' |
+ atf_check -s exit:0 -o save:results -e empty ${TEST_SH}
+ test -z $( grep -v "^13$" results ) ||
+ atf_fail "Incorrect lengths: $(grep -nv '^13$' results)"
+
+ return 0
+}
+
+atf_test_case cmdline
+cmdline_head() {
+ atf_set "descr" "Check vars containing all chars can be used"
+}
+cmdline_body() {
+ atf_require_prog rm
+ atf_require_prog wc
+
+ rm -f results || :
+ mkdata "VAR=" -- '; echo "${VAR}"' |
+ atf_check -s exit:0 -o save:results -e empty ${TEST_SH}
+
+ # 256 because one output line contains a \n ...
+ test $( wc -l < results ) -eq 256 ||
+ atf_fail "incorrect line count in results"
+ test $(wc -c < results) -eq $(( 255 * 14 )) ||
+ atf_fail "incorrect character count in results"
+
+ return 0
+}
+
+atf_test_case redirect
+redirect_head() {
+ atf_set "descr" "Check vars containing all chars can be used"
+}
+redirect_body() {
+ atf_require_prog ls
+ atf_require_prog wc
+ atf_require_prog rm
+ atf_require_prog mkdir
+ atf_require_prog rmdir
+
+ nl='
+'
+
+ rm -f prefix* suffix || :
+
+ mkdir prefix # one of the files will be prefix/suffix
+ mkdata "VAR=" -- '; echo "${VAR}" > "${VAR}"' |
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+
+ test -f "prefix/suffix" ||
+ atf_fail "Failed to create file in subdirectory"
+ test $( wc -l < "prefix/suffix" ) -eq 1 ||
+ atf_fail "Not exactly one line in prefix/suffix file"
+
+ atf_check -s exit:0 -o empty -e empty rm "prefix/suffix"
+ atf_check -s exit:0 -o empty -e empty rmdir "prefix"
+
+ test -f "prefix${nl}suffix" ||
+ atf_fail "Failed to create file with newline in its name"
+ test $( wc -l < "prefix${nl}suffix" ) -eq 2 ||
+ atf_fail "NewLine file did not contain embedded newline"
+
+ atf_check -s exit:0 -o empty -e empty rm "prefix${nl}suffix"
+
+ # Now there should be 253 files left...
+ test $( ls | wc -l ) -eq 253 ||
+ atf_fail \
+ "Did not create all expected files: wanted: 253, found ($( ls | wc -l ))"
+
+ # and each of them should have a name that is 13 chars long (+ \n)
+ test $( ls | wc -c ) -eq $(( 253 * 14 )) ||
+ atf_fail "File names do not appear to be as expected"
+
+ return 0
+}
+
+atf_test_case read
+read_head() {
+ atf_set "descr" "Check vars containing all chars can be used"
+}
+read_body() {
+ atf_require_prog ls
+ atf_require_prog wc
+ atf_require_prog rm
+ atf_require_prog mkdir
+ atf_require_prog rmdir
+
+ nl='
+'
+
+ rm -f prefix* suffix || :
+
+ mkdir prefix # one of the files will be prefix/suffix
+ mkdata -q |
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '
+ while read -r VAR
+ do
+ # skip the mess made by embedded newline
+ case "${VAR}" in
+ (prefix | suffix) continue;;
+ esac
+ echo "${VAR}" > "${VAR}"
+ done'
+
+ test -f "prefix/suffix" ||
+ atf_fail "Failed to create file in subdirectory"
+ test $( wc -l < "prefix/suffix" ) -eq 1 ||
+ atf_fail "Not exactly one line in prefix/suffix file"
+
+ atf_check -s exit:0 -o empty -e empty rm "prefix/suffix"
+ atf_check -s exit:0 -o empty -e empty rmdir "prefix"
+
+ # Now there should be 253 files left...
+ test $( ls | wc -l ) -eq 253 ||
+ atf_fail \
+ "Did not create all expected files: wanted: 253, found ($( ls | wc -l ))"
+
+ # and each of them should have a name that is 13 chars long (+ \n)
+ test $( ls | wc -c ) -eq $(( 253 * 14 )) ||
+ atf_fail "File names do not appear to be as expected"
+
+ return 0
+}
+
+atf_init_test_cases() {
+ atf_add_test_case aaa
+ atf_add_test_case assignment
+ atf_add_test_case cmdline
+ atf_add_test_case redirect
+ atf_add_test_case read
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_wait.sh b/contrib/netbsd-tests/bin/sh/t_wait.sh
index 99b47df..eaad7e0 100755
--- a/contrib/netbsd-tests/bin/sh/t_wait.sh
+++ b/contrib/netbsd-tests/bin/sh/t_wait.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_wait.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_wait.sh,v 1.8 2016/03/31 16:22:54 christos Exp $
#
# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,36 +24,172 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+atf_test_case basic_wait
+basic_wait_head() {
+ atf_set "descr" "Tests simple uses of wait"
+}
+basic_wait_body() {
+ atf_require_prog sleep
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '(echo nothing >/dev/null) & wait'
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '(exit 3) & wait $!; S=$?; test $S -eq 3 || {
+ echo "status: $S"; exit 1; }'
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ 'sleep 3 & sleep 2 & sleep 1 & wait'
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ 'sleep 3 & (exit 2) & sleep 1 & wait'
+}
atf_test_case individual
individual_head() {
- atf_set "descr" "Tests that waiting for individual jobs works"
+ atf_set "descr" "Tests that waiting for individual processes works"
}
individual_body() {
+ atf_require_prog sleep
+
+ cat >individualhelper.sh <<\EOF
+sleep 3 & P1=$!
+sleep 1 & P2=$!
+
+wait ${P1}
+S=$?
+if [ $S -ne 0 ]; then
+ echo "Waiting for first process failed: $S"
+ exit 1
+fi
+
+wait ${P2}
+S=$?
+if [ $? -ne 0 ]; then
+ echo "Waiting for second process failed"
+ exit 1
+fi
+
+exit 0
+EOF
+ output=$(${TEST_SH} individualhelper.sh 2>&1)
+ [ $? -eq 0 ] || atf_fail "${output}"
+}
+
+atf_test_case jobs
+jobs_head() {
+ atf_set "descr" "Tests that waiting for individual jobs works"
+}
+jobs_body() {
# atf-sh confuses wait for some reason; work it around by creating
# a helper script that executes /bin/sh directly.
- cat >helper.sh <<EOF
+
+ if ! ${TEST_SH} -c 'sleep 1 & wait %1' 2>/dev/null
+ then
+ atf_skip "No job control support in this shell"
+ fi
+
+ cat >individualhelper.sh <<\EOF
sleep 3 &
sleep 1 &
wait %1
-if [ \$? -ne 0 ]; then
- echo "Waiting of first job failed"
+if [ $? -ne 0 ]; then
+ echo "Waiting for first job failed"
+ exit 1
+fi
+
+wait %2
+if [ $? -ne 0 ]; then
+ echo "Waiting for second job failed"
+ exit 1
+fi
+
+exit 0
+EOF
+ output=$(${TEST_SH} individualhelper.sh 2>&1)
+ [ $? -eq 0 ] || atf_fail "${output}"
+
+ cat >individualhelper.sh <<\EOF
+{ sleep 3; exit 3; } &
+{ sleep 1; exit 7; } &
+
+wait %1
+S=$?
+if [ $S -ne 3 ]; then
+ echo "Waiting for first job failed - status: $S != 3 (expected)"
exit 1
fi
wait %2
-if [ \$? -ne 0 ]; then
- echo "Waiting of second job failed"
+S=$?
+if [ $S -ne 7 ]; then
+ echo "Waiting for second job failed - status: $S != 7 (expected)"
exit 1
fi
exit 0
EOF
- output=$(/bin/sh helper.sh)
+
+ output=$(${TEST_SH} individualhelper.sh 2>&1)
[ $? -eq 0 ] || atf_fail "${output}"
}
+atf_test_case kill
+kill_head() {
+ atf_set "descr" "Tests that killing the shell while in wait calls trap"
+}
+kill_body() {
+ atf_require_prog sleep
+ atf_require_prog kill
+
+ s=killhelper.sh
+ z=killhelper.$$
+ pid=
+
+ # waiting for a specific process that is not a child
+ # should return exit status of 127 according to the spec
+ # This test is here before the next, to avoid that one
+ # entering an infinite loop should the shell have a bug here.
+
+ atf_check -s exit:127 -o empty -e ignore ${TEST_SH} -c 'wait 1'
+
+ cat > "${s}" <<'EOF'
+
+trap "echo SIGHUP" 1
+(sleep 5; exit 3) &
+sl=$!
+wait
+S=$?
+echo $S
+LS=9999
+while [ $S -ne 0 ] && [ $S != 127 ]; do
+ wait $sl; S=$?; echo $S
+ test $S = $LS && { echo "wait repeats..."; exit 2; }
+ LS=$S
+ done
+EOF
+
+ ${TEST_SH} $s > $z &
+ pid=$!
+ sleep 1
+
+ kill -HUP "${pid}"
+ wait
+
+ output="$(cat $z | tr '\n' ' ')"
+
+ if [ "$output" != "SIGHUP 129 3 127 " ]; then
+ atf_fail "${output} != 'SIGHUP 129 3 127 '"
+ fi
+}
+
atf_init_test_cases() {
+ atf_add_test_case basic_wait
atf_add_test_case individual
+ atf_add_test_case jobs
+ atf_add_test_case kill
}
diff --git a/contrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh b/contrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh
index aa7af27..f460cf5 100755
--- a/contrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh
+++ b/contrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_libcrypto.sh,v 1.3 2010/11/08 19:06:12 pooka Exp $
+# $NetBSD: t_libcrypto.sh,v 1.4 2016/10/13 09:25:37 martin Exp $
#
# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -49,7 +49,7 @@ atf_test_case bn
bn_head()
{
atf_set "descr" "Checks BIGNUM library"
- atf_set "timeout" "300"
+ atf_set "timeout" "360"
}
bn_body()
{
diff --git a/contrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh b/contrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh
index 1453e75..eb8d0f5 100755
--- a/contrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh
+++ b/contrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_pubkey.sh,v 1.3 2011/06/09 05:25:21 spz Exp $
+# $NetBSD: t_pubkey.sh,v 1.4 2016/10/13 09:25:37 martin Exp $
#
# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -49,7 +49,7 @@ atf_test_case rsa
rsa_head()
{
atf_set "descr" "Checks RSA"
- atf_set "timeout" "300"
+ atf_set "timeout" "420"
}
rsa_body()
{
@@ -60,7 +60,7 @@ atf_test_case ec
ec_head()
{
atf_set "descr" "Checks EC cipher"
- atf_set "timeout" "300"
+ atf_set "timeout" "480"
}
ec_body()
{
@@ -81,7 +81,7 @@ atf_test_case ecdsa
ecdsa_head()
{
atf_set "descr" "Checks ECDSA algorithm"
- atf_set "timeout" "300"
+ atf_set "timeout" "480"
}
ecdsa_body()
{
diff --git a/contrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh b/contrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh
index f7faa3a..e8e3f28 100755
--- a/contrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh
+++ b/contrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_opencrypto.sh,v 1.4 2014/01/18 15:15:16 pgoyette Exp $
+# $NetBSD: t_opencrypto.sh,v 1.6 2015/12/26 07:10:03 pgoyette Exp $
#
# Copyright (c) 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -80,7 +80,11 @@ arc4_body() {
}
arc4_cleanup() {
- common_cleanup
+ # No cleanup required since test is skipped. Trying to run rump.halt
+ # at this point fails, causing the ATF environment to erroneously
+ # report a failed test!
+ #
+ # common_cleanup
}
atf_test_case camellia cleanup
@@ -98,7 +102,7 @@ camellia_cleanup() {
atf_test_case cbcdes cleanup
cbcdes_head() {
- common_head "Test ARC4 crypto"
+ common_head "Test DES_CBC crypto"
}
cbcdes_body() {
diff --git a/contrib/netbsd-tests/dev/audio/h_pad.c b/contrib/netbsd-tests/dev/audio/h_pad.c
index dd481ac..b760d04 100644
--- a/contrib/netbsd-tests/dev/audio/h_pad.c
+++ b/contrib/netbsd-tests/dev/audio/h_pad.c
@@ -1,4 +1,4 @@
-/* $NetBSD: h_pad.c,v 1.1 2010/08/04 13:15:15 pooka Exp $ */
+/* $NetBSD: h_pad.c,v 1.2 2016/10/15 07:08:06 nat Exp $ */
/*
* Copyright (c) 2010 Antti Kantee. All Rights Reserved.
@@ -56,14 +56,14 @@ main(int argc, char *argv[])
ssize_t n;
rump_init();
- audiofd = rump_sys_open("/dev/audio0", O_RDWR);
- if (audiofd == -1)
- err(1, "open audio");
-
padfd = rump_sys_open("/dev/pad0", O_RDONLY);
if (padfd == -1)
err(1, "open pad");
+ audiofd = rump_sys_open("/dev/audio0", O_RDWR);
+ if (audiofd == -1)
+ err(1, "open audio");
+
if ((n = rump_sys_write(audiofd, musa, sizeof(musa))) != sizeof(musa))
err(1, "write");
diff --git a/contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue b/contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue
index 0aadfa7..969ad9c 100644
--- a/contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue
+++ b/contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue
@@ -1,998 +1,1040 @@
begin 644 t_pad_output.bz2
-M0EIH.3%!629368,\S/H`A(]_____________________________________
-M________X)/JWW=]LJ1DQ(V-I-I+:VTPD*VTAK31))5F;9)60#$TK+5K#:U*
-M-:*D!0Q6EMLA*CJG75+322@`44*+KJ[*:U%`=]N\V@VVF]YP#E5K*A78P,S#
-MZT/(+W<.M[<YW=V9MW;N[N7O=>>RM[LO9>]N>KVVVVU[MVU7+6MC5M6U%;5E
-ML)MD:LTBI`6RBM)!"VL!D))"-@4VJM56U;9JFF@VK`!M@#+8S0%3:-K6VU,V
-MQK&@`*!FV;6S9MLU5K8:M9K62MA;`J:+:(V9I2W6NUFUK,VJ:NMVZVSK;O96
-M[N]W=W=>WO>;6M[W;W=[WO>\Y]SN]#??>>'&P/6$<PP9:BH<L>RM"O;IU+34
-MFG(=*=!IK(YZ=U(J4%`]!0#1IC5NTN.DU1;44F&#1HUEELQ;`VK&UJE(JJ:8
-MYP:41,@3``T!,"::&F!`9#3)@33331IH-``TT9`U,&@TR&0R833`$T,F$Q#$
-M8`$T9&C1IDR,F(--&3330#0(-)(1H`!H``````````"8`3`3(P3$P$8!!HT$
-MP#(TT:$P``)@$G@)HTP)IZ$QI,$,`%!II*(3``P8":::!&`F@$P308@3$-4\
-MP1-3]3$CR9$8;4U/*&T;4F3$S2:>IDR9#!&0T,U`:`&AZ)Y)ZC0QJ;4]0S4>
-MIH9&@"34E*2)E&R>I[;8$CTH8"3!)X4]-,30:!&3)J>BGDP*::-I,AC*:-#0
-M-&F@`!IH`:::!D>H````````#3(``!E2@3Q(T8--#0F@D],U3\03830Q4_$:
-M3,)B9-3T:,"(]&IL29Z5/3PDS331H:$\*83::9)ZGHTR>B8JG^FC0&3$T4_1
-M,FT9&2;:FAJ;)I,:&BH)-2DH04]-4_9MJHQGFI--$,F@9)DRC:;5,T%-E-JF
-M]4;PIZI^H:GIFHU/TU0\DV(RGE&F9-BIY30]3)^J-/4_4TC0S1I-!ZGJ9-,0
-M\4T9/4:>H/:D>H'E&0>IH>HVD_P'^!QBM$WZH<N9/\1AOU@ZQ5]&G\[MS3YI
-M6?/_),4?*E&(/&KL?TQ4)#,_/\R3!CVT)[6U_/W^%I;'5`^^GU,B_&^CJ0ZS
-M\Z?2(7O]E$)GK^WQ_MV9V-#]T*,>/L1P,O'$"(@>"7Z["OJJJC@L[DDKWX>;
-M.I?\7_4S95A_"B0(B%P@`<W$S8:C^KZ-WW-I>M:^O>ZN;N>U[CV8\/P,*1D\
-M7FF<DTDH"""2022!;*!5@!XO/X_SM7=WNY^?_NZ_L#L0%!5%8,1%03&,",8Q
-M@8P,8@8QDLF$342>6F$[Y:6L3:\[_+_H\CA[6TL6?19]ONV3@J2HH`B+%I;W
-M(>S39[Z?/-HJX`Q!(#:_XGN6K[U>EW4[>PI':-BK]?0U_<!:4DQ)+7"JKB1B
-ML'$%H(I<T&D:N7DZ2@W>-QOB$O00%%Q](-)Q'ARFMZF:4`2*C^K!H/K3RKK]
-M-!9O<*COJ&H>OZ>?,I"7:06C:]$#!7=16YRM^YR+4QSHV:?UYS-:GS>'Q=RQ
-MJZ,5W7X32SQ$BH3;@MD0(9(:S=IYT\NE&+^6.SB+>\:ITL]=6UAGJM2M)W:(
-MJ<GF$0+!0&BKRH`GT'2ER_/3S.R=$_0M7N9V?Q;5FGJU;K>L&O*9A]EW6N7E
-MT$1*_C_D\Z#.K+*R1LK?8&:X&741@Y7;2OI4^=RX&FBJO1*H5P0`W[?B=1S]
-MJXQJ3RQ_#P1&\SW>R<6MHC1*ME4`1/!DV<`FG!NU#,,JP_VGKDJ-W'7A.6-2
-MH`@6BQ/H[0!?G+3#@BKUE&XG'87&!\'ZM:%FJ1+QPCSS0J$0`\ZO.D@Y?+5F
-MJA&]I_8/'_YW56@=6IBWCI<93`!/!(_%C%.;ZLRBTGM4?'A=G=<>6D:!@&N;
-M=TH@$3>I<;'M)5'3VR4VAD/M+707S3Z(2YR*8E+3FF@$7C[M0Q!NV;BJ(CE2
-M-&U^="F<R_@]-N,K!\PY8*B@1`"'M,V0V%#<:.C-T6>V54K:M?GT>6J*KZ3/
-MO_/9:G327;0T03)*,[RJK)$0%5,/RR65<-0YN"ITIRPN^UD^_^(W,^WOR/(4
-MVI*`3A>M3S""->70*,S":;ARXQSC5TV0X50Z)=GTWO9TS"0#C_CGU`UFBHF3
-M+;]/P;'"@*G:SJH4G4W"\"1=+^O,/M-XO^%*VYMJ>?VUL)0<R687AST;\U)0
-M"+'Q#WL]]$QX*.181O6;^?R:3"+[SXG>`1G[M:"=>*)G"?50.UXBV(=QK'_H
-M^S&@@09*)H!`;`RL74"ZY1NUEI&<@6?):>8W*IZFE5<TV%:?:HD")C`C8??]
-M9P7+VM2M7/1NSU$)V?7S7^$]/H8F)6(B%!ZZRO!65Y$V]W$GW!0P)VWR>UI/
-M1R(YCJ,..G[%050`52\01%GW-7V6N6VY)^\7"N;]\_OL/L^^W#5EN352!#:Z
-M9Z$:0G406)N$S-QB*V?YG;RFPMG)`H#IT^ZPV[#E<HK@@6>X/X[HHMB<F&5H
-MX6PP<=I;W%FF/#<_BQB*"#FU$@1,/5M]ZP@FB1':RN614]H7?Z^R&E4U%2XW
-MHR:74)Q$"A:_M4+9*0Z^Y;X%.+'/S[/D7MGQL953F44G(VX>4''<*2RS(K.B
-MH*9$"IDAYG.-6D+G2KB34-#K?6CJ_S/<V&J_CJ_'=18[7F9K:X5R`*#Z<!^=
-M*"XVXQU?,8+_8U;]^6DE.LI-U8[_G8YQ"Z\.!LJE5SZPW+0!$U7MJ1=ECW.@
-M2-^@=%YTU5Q&[E&84ZUT$\FK2D"`HJ78@E%LLMK"YZSF5?D+%=YMKG=U=65>
-ML+"GC(B(AYESJ5[#I"'8+FV9)N83_1DF::W>MV<51?SO>O^6'\9+L^UVR&?3
-MD$VR$H2IG/^-,G_SHI&;*/,GEHV@[VK:/2F0+4G@$.&F)A`'<)WDV:A<-ZHC
-MV;TU1BO%#Z15\%HR\!^%,8GZ#GP)J`@18-;CR`L<B\UGWY#EX'K&LL8E]0+3
-M7<-="XJN3QB!1($/KY<6M^KKY"$UW(P,Z>\T>D<F1X454&+\O-9!*5*Q"B$X
-M@"^ZLG[_XZT!L\K:Q(-9OU?^35>)YM&Q)B:0`_ILC@";7*VII!'K'N_LIANE
-M:[1]QOVP<_1HM?;=\.;VT^SL_5UOT9HAI!)BL-@ZP*U@6K=5WR1XFY5YK+N7
-MX.ZBJ)B75\@BJGB*%?!%I]3CC6.TB[8+O*9QXU-IH;F;O;=B\_!G-MV_VU3G
-M9R$Z<N@$2_]]?'96SG@19#X&:V9?Z[#VCM5IN#-\CP:*6O6+&E(Z-T7+VJ)0
-M8PI+`!%%YZ(="+'C')WG9Y(^>R63O\BUT&@JWK;]M.PD$6MOQ%\@23E-:2P>
-MUJF0('!QZM$KBAMAF:2??OX"3I9Z+FO=WTL3ET8(-RJX3X&0'1N#[H6[8Z>X
-M&N25R7<KN&E^*Z0`IL&C)+1W1%M$;NYR/@6&LF>J<C52F>KAWA;W_,$/KZ]1
-M`!:>@T8(OG%LS"]ZJ`'"B-K/PU/HK6&U+#G%\>%L9'7I.*YS9);!$-9U_-HY
-M.O!%_0W\5+LF:SK"(O%HM@IMD_MA?A,O&G*MR@1%P:$$*E0\6FL)>74^?E(5
-MTS_S=,8R'-MY^=7NN)A"VO(GG*@(%U<`RJ`#/<@QUHM:YZO@<"*UO.HKR]K>
-M;DPH*5+;*`!!OI-N"G'',0\WP<2=5HB'TBO>A;P*KK-&S4NO>:O?5RN"(=O?
-M5(!3:2.+`>V(H(AR<(^)5PMK5/Y<C*<I24P0%E%=M?EW^?(`:#6_SJH?M"WR
-MUN;<6SS4SM9_=S4;@,`YS[%+E#Z?%HK-TV%]G.+1K9`%.L=N`/ZOK;$H/^\6
-MLSE7.3@/$LET8W><6OXD].Z&J8R2$4E3<P`9K-Z"8II[@6Z9OB=@A7)JC!8?
-M?/^^YRP;&($BGE"#E2K*N"-AH8BF5JQND\3#N6[KN4-4</.3O4\/-6`1#\@.
-M]=-V87UAJI$Z+4J4>!,!-82,ZN.&UR*ZNXQ'SQI[EH=,#^6*">)R"MTI!&IX
-ML6"=@QS3A&ZZ5>KMRS+ZKI29EHO,]GI*G76AU_<T_7X]2;AJ[C7B]0?"1;5\
-M$19MN@?*0%QT/PP1;#%L#'B8]=B:2DQM+B2_QY%W@*I`#]X/H#E`%!L*P_K3
-M[=/FCVT@S05&_[.'_*DL'\.;[A^C1>?.<K-LX!/&CT`#G9!GZT`TN#@SQ_5E
-MFAP9Y2_U]*&&T82"S7="`+PD1K[7YEI:-9>?Q2-2I3^-JUV6400"Z0$QN+0/
-M>-=L2C%NZAHE#I):\G`BA-\1,:"_GFZDY4OT^U5:S5:8=J3O>9]N[2J@(A7(
-M+"?@`"1L:*6!;?\TO*],-NG:>"I]*4]UATF[$G6E2``UOB<"(E21ZG0]6%62
-M4?'\1N5Y3B;O1UQBS6`XT6"KR%(`!X^:Y.D.$IJ&5X6=SO_1;NG%W>Y9TUC,
-M["W_2#@*!$0I.!@Z-[V7D("$\ZPS/T*'#=<AO&^6HE:H`R8M7;ZG>1WV_O@T
-M$-1*H(B;IL$.9"./.-O5G+\)Q<7Y5V;3(6,WFN7U%2TU2B1`7<[<86JV5T`!
-MYQ5;+_4NRDMY)27_;Y@LGM@>=!E$C7+OB5OKYQ_JVZ^#:KA`AF][SYKE@$Z.
-MKL+!<"V'J/;-CB/-+M6!@:8J?=5,$7*87[_H;V;D$6;\'&B':[GERN[CL[)C
-M'Z\:.7UY$N#3O/&[;;P:US6P0&FMP0]7YK.Q'-ZHJ+N8GF6IANBI@R@ZVKW]
-M/[?A94->@!$*<$2HS*@9*CR,JJW84EL86668I9DIC<K`,5J.W\_K9%0B`.\3
-MQ`BUFZN+3FC].3]*<WCSSOEO#492IVU',.<'(Y?/^M4``IT'5E0"Z.'F<Y<B
-M5&[\[JK,Z1):FT<G'4MO*]/[]/^5A@H`0$9>$0U3R@9(&/XISJ;O<,K]U%BU
-MSZ1W7VY;)\*DBH@`6(!9-550K(H$-2JAIS(J=J1!$\T;+@I!$.5]6T@4[H97
-MLKD='QVHK%;I1^Y>)2=K'"=PC=]3*WF\Z`B`NY-G<B!>O"%@.XJNS)Q8IWM<
-M['Z*7@RNX/$:/SYG6YN\O1LH)#9?\<DI^5NO%X_U67!HIX/Z^I)Q6JT5&T+#
-M;^/]PJ4`"PKY>NSQ)BUG34?L$;J9V=:>I.]>RT66G\VN=KW*?VY"J0`L>-A]
-MD$.KY:H;B-Q<6ZKG#LK>VLXM`Y>3CT-TG@`2_8(ICBUL6QR:8RTY4#7/[N'D
-M9+/?KZ6RD$\B(,]UW<1J>P"7,XXK(?KJJ"'B32W=5.RE-ROA4@LY+>NU500$
-M)[_KYKSL`@-0%SIJ6R*XIS2RZN8:/J[80?PJ*:VT,+G?5^ZJ"+M=KQ63:">:
-M00LGQX?8;#OBE5(N'U/?^4KO_1(IP("^B\&D]OE($J<WY^30#0/6V9F9\LI=
-M96-KK6-B":"$?Q:9SG"`&:@DKT,\7:]4-^V;D46N:RD,X:EM_BK@2L1UKW/X
-MF3\HOE<$!B_?5N!$A:RR7UG1_.'O>)6^%GG@KVU7H:;GJMTH`B%P"+/VUMXL
-MM`H,JWO;._<,SA?!GAWG%^ZSS@?9_%%2J``!C22`U&2;6U1TD[T/.R3%R]S:
-M@RN_';NSQT%-!1HF?S@Q\DWM``,9R&4@SO;;91IS&.J^E3UD5C\=.CH)\\T=
-M[BL)(Y-;*^$`W/S8+'<8*#\UW']]%D7*MF9%5]`]&4HWJ!Q,I,1*INU8`%[T
-M\@7KRUFYK"PYH&:`?>L^_O.'+TSL8[V,`R[MEXL,$]<3JV1`?UHY'7@%;BVZ
-MG-]Z^PL"[P$-'N'6<BA?<O/M']3@1/#\_-H(K??-B7UQJVBOE\8I\/KP;)O7
-M')">AU)/(A*O(!*-=Y>-`[JY&EV>FY2S;U*BV:C<MMGDFV;401?-L?@0&[P4
-MW#L>7T6/:\C?MO@:-<^W5=.T\`Z8W:;BLFE'.9B2X>+.=!JVI!QUO>XT--O)
-M[=ZS2&L>69P3_>8&HD]YO%24B+%7M0?K2(N"%2TTXV+,IH&$\O)OB1_A(8AQ
-M7A.!:]I_@Y;%1``'K9:V!B,NF``:OPF?!9S[A/3>LS%+Z!5TNL;^]CFCD_Y,
-M3R`?(A$J`1!1BZH]R,&XRWJJ?G_NP2M(=YJ*0=,,S+98/\?O7S>7'U$XXV<E
-M+?Q;($&CX0'TI.50`A0S_MQ>.XW%N\;-Q,`T0'+$5Z;F&ZZA]@V(D"BD?:`;
-M=S>)A-.=D9J8S\+(1K\R/P?E6O</!U8'\*9C(`U60TG>!"J^?\W-1#\S?1>Q
-MS[PV>Z9M[RE3)>NX2DF%GF5<M@!Q%"B$"@65)MY]R@4X3L9*LSB60+Z\_<]0
-M`"<^KZK/2D3#%L*`/EI*0'.U2I5Z,-GEE(O\PZF0+:7#I:WV>JR+.Z(2BI22
-MB;KN%RX7I/]0D`$N8K5Q9'"!?I>K'$_TQ9Q@_U<,':[%<N$G6\`@X/XZ:+UG
-M5$G&OU+47MCTKOVB0%:]\O"\B4$_Y0V=B2>6RYA^"9RM.@_+>*:ZQB]?$?ZJ
-M,QBKG_)*"7KO7P(&T^/P$'#"=8\Y)3C)).KOW;W#$ZK#8%*U7=U2QQ_[_V-5
-MB("08I,$3D/,Y_O.X$G?;WRZ%R:T#1V%)+(O3#@@-#DZK[!]<TU.;F1/8VML
-MP\YRHW=R(9<&[UEPX("1L;8@_?*WU[=[EH3Q6/LG5BEV*ICKE-L6`@-=N"(B
-M_R:[#,GKH==O/DE%L8P(0@+U+^DSN/PZ*`(!.:]GJ"!17MNVH:V`:DV4K'Y!
-MUDD0OO0)Z80&]S%`F2>4DU,=5X&GCA;22225I!AS0\_.D/@*J67P1?`GX4NB
-MM+WX?[#5IV$U5-6;8B#`3/Z/GTC>E4``\&WQR(?:\Y+T'VG?%7$].V>IA\5=
-MWKZ?7J0(/?8[MN@DR(>-$T'IC@M)FG]4#LE7.O&OWT77(2(.6D``T&_GMEE4
-M8R)HJY%Y##J,/(N>"Q9#JM*QF?E1*9`LGG>[R\*P(`/47`4QF\_/L\4-TL60
-MH'?1"-Z>'882<1"DIK($5)<S^4DG.$4U,/N*\K+.QZ7/6;)"0R>0"A?U((?&
-MB[RFPV#OB!Q:W`H6^(/^ZR"<Y%;!.S^.=4O_<!/4N\KVK[\74:3A6M9193*2
-M35&^A>)'HZ-`0`X_!Z,WXI&U#7P8%4V[YE\Y=UE^M5W?QW-TQ5[_UNM`@,QV
-M:($!,;*%[OR&35=\:Z;3E4+'CK]55]XX5K>J?Y1(%P_?;;.&KB(E]NE$7Z/4
-MA^KG)K4,F'5#[X'??SK)UDVI3R(5]D`0MK5=V=GT;@W=;7>OF39G]ED7^XQ7
-M/S"*A?84/HU@@7>T2CQ@"O6S4*QPQ9BGF512;):"I=E5_#QA_J%,$4^1$%)G
-MN)[OT@KO'UL_]22:=PV&TYH\?N6X9[;YBINKW3^#4+8!:1YLP1;6DY*P)968
-MT!52)%K7@9,9.4]4UDRN52/\Z@1`=S:."8`0YW@B&9YL,7@R69XDD(!Y2##/
-M`K'9/WK+RW(9`2IV[`+LULJG_2*#%4S>=T?OXZ$PI!"5WUHS7Y`#)\B!38#$
-MXJ]FWZDII/45>LKFO(A)*BDPT/G,\'@/+0`"*^;E3A:S53A$-1VD##4S_,7<
-MKO7Y^ED$4'[&)0`;HOP<X$3L>8Y-K0S-6^7W`D]'6U3&QYO@LG)#+I\#8Z]3
-M``[6+`$CT2?-=6_NMD:G#_R=:F#$ECZW]O/]S`25;1]0D9S!URG"8]HVP'8H
-ML>U>A79$N1B)RG[]8E!+]9V9!O&!B]M,&]8%+P8^(J=-:MDHV;Y:#:-]SO=0
-MU>-O%,`AE^1!SNJ!%?8L6>;%:1U\^]ST%C^I_VT5[J2<MHG@A6V^)_462N@"
-MS%3-.'4#R+2`[>EM52T>V))!8/8!`8LCK?SQG!%$DQ"H4&C=77246E/XR:!1
-M\N^XK%W@"&)^K?!K]QBL-P/N)+CY!!1XYZ4K91D+;ZJ)`6_*(A6T6JG'01$Q
-M%;/;.^]B.%WHD=)CB*S?IX!>*9;'H@0\3YW=O%3JLIOBMLU?)Z2/Y.-=>U\+
-MN_M(U:&-DE0B'?Y,FT4Q$66G?[7-W0J=-C=G=S^G05M:S)9"WR=THUP`+XSR
-MB]P'<ZL<LW6G^ZH3DT7?G<A'X]DSK)T8W*3])VG!7(%_W/OO<"'<9_OO]VR[
-M3HI8T_S]&#RQPN^LU[U,)Q$6D8,W8D`)W6.&3Y']VOT5E??9-Q6'=E@W+X7>
-MV?/-X,(,J`@5Y5;[Q[Q(8`0$BGM]Z^;56<(B/=W%D5XF@/9*^KWZ^6@?;5AD
-M4R(1T^YH^20+*X4W_<:[4RZT.KJO72BYYV(4?)6XRH1#!^620);6EKH5JH(@
-MG$.O-G1RZU_$?\T\`F*$UK\`6QSW$V+/W5-H?;P="7=KV]5_0K?%2!#8WSZ"
-M(=K95/UB]E:=K.[Z?_P(]LL[+D.P4K<9$`L-.$K$!FNLV<"/]0`$"4VO1[//
-M>Q`R!4#K+OXX'N4OI>T@085=/J`(N<@A=H0(0L+U+WF17Z0=1NV+?R9C2T.]
-MH>[SM%:5>@6O',,S,K$0RCGRR!"M0OU\5W^[VI?^V-4L=%);).JFEF^G</J=
-M3B+%"/5O43,"?EXWUEB<02=@LK#?F87,S6?R5)E-#=:&DM9AC,EY?W2D&+Y.
-M6JR0$CXMV6R#CJ9O!6+!9WV5Y,W4X"Y@6<JGJS-0U>`J`$J_#?2-UI01;`(L
-M-=>0(O\4]73WL6T*MO4MX4[VKM-RH$"OO?[IF%(@,TJ<;/A.4^.S\O;L203&
-M];U^M>4]\7+,)-UYX#]20,""YW*\4W)0EXQ,B&LTS+6[81RMJ&.OA1/=]B`,
-MQ<6E>`!44N1]'2Z.G'FCO,Y1R"AS?2CMUJ=M^V_X;7.9Y``4UZW3N``/?$^?
-MUN/WV[YVI%W`C3/%YYPZK2T'5PZ2(B$%^>5(@':XR/PB*=]VG'"W$7>EF<RY
-M\>RXRN66F&E5(A5Y^Z`(<ZC]?>=968%Y=U46D3>'NMI+*4#&[/5[>-6E8@-:
-M0((WTR>U@0]*7X;X>$H7Q22X4:BT/K?R3@(1J:^""+%'UFZ[:_&!#7DD_X)"
-MVV\79J=PO$U\-Y99Y)`:M7ZKG#2CT=MSUV=X;)MV2PB-4S)G24Z^0=,5F&FN
-M%3I;C\.>V/^47`1#$T.'W.41%]'S3=Q04:A'W[AUY/T+#E9<?9M+W1?/>*)$
-M$K]7^?<^<`!D(_N.G.P<AY[82/0F&9>#%3;:O3EN@\LE(+S[E^JL&733?-`(
-M0K/ED]OP79<DTUVO</\\3`TU=%YC&?5YAZ##MM-0K8!3JJFP!^8!`1#HT_UP
-MU"TO.T%E,AX7WT6BY?.\_*:WOM8*8@=W<C[0"/2]82#I(30@N+@!OJ,]L\_T
-MO4][YRC;[..VZ-O%,$&QPU>,C@"%NF-_]V^0<Z3\_U<UD:_<^[\?8\U9Y>-<
-MZ6P@N3OB9%8B*VZG;UX[_,`(9/M<F7OUF5\#2V]"S7AS%QJEPU?IN\.;7US-
-MYN`SE4K$"2YB[PYKY[W83H`'VQ[Y(;@"Y&TT"+R?'%85XK*S+B\7#5IR$40"
-M;(6>0F?<$`)]!48ENTNK1J^KT:U"\EAHNTZU1>;F7">""]QN?,1NV$AYO$"(
-M5>4W_9\Q_&MNY_L/;TOCP:Q@D>G'1RZO=95!14Q1?J"(+L\]YGY^=@4J0*\7
-M6<ERZ:0MNC\Z55-II1O=MONG%.2.ZX55OF`2BU.1M6"3S\MZ6>3I,2.G69B>
-MTL]SD\HK<A(`9X$!_=]3^)A^'_!I[]UF[9ZR]E40BNWBR1^XJ$"NIBX(`'U/
-M*4\)*M>-A--A.>K:/^F2CCL:V\!3;6)L/$`@P8]>H(L@"@>\R0S*(MDGMZXR
-MNFE08'-<Y4J.0=<77/RB[\N0KD5+M%1PH\4@`UK<-[].F2OH-V]?K\"^F*7;
-M55]V?T6XTSNJ*H(?:LT_@`(6E/BZ??0B')]VD?5A4"G+ZOD?),(7R7YM@0!8
-MF>''9/U][FBFF@1G!9VSW&/T/=9$)I*W@7.-LFNT($$[TT=#=^=5;>1?N-PJ
-MJFE9Z55TBG"PVD;;OJ'X*W6B`S\]S]^"(3'0I;'JO06]92\N*V0-++C9,=I.
-MI.5%=>A\UE,JY`.EI<Z92]\#Y"!"MN.]_6EI1>MPF&9]RUF-"LR^8#?@1\JN
-M+M_!=WR_A.7Y=8`*:UE?ZR(#_EOJV$8T^YLU&',YJSTJYF[1IY76J%AW"B1<
-M'/\JC(@/TS<1.$8SXL99,WI%.R8IN[O;UFI5(Q.!!K!$*GWP,3M=S2IO>Y&6
-MJUO'MQ\9M/;&J\84\&J7&ZG((W4OW*;R0?*C/?`]GNLF=LMUQF>-]-!_#PM=
-M]M8R8"B((DLK@VWRS-7YRD9WX,BCZ\LB5#8RLF(%;A5</**8!,&*S4B[EP`!
-M^!:)4A.*0ED64_FFFM8;N-4U2:MBB;1?<L981?R%@B[2]_>D!$*_(==E[/0B
-MKEDZY=*VF3[:GY#QQN*@01^UU23@#VJ@(9;E-_-JR!">Z-M1]_CO79T,UVOJ
-M<7C<XM1NL6[QSCN2]8WQ+LJO57%7<^LD"CU2T(B_&6%]<JL,)339]44M9Y>V
-MXZWE)8`<O]\:#4-9`@ZW7E75)X9F9`7R9H3)?M>H-MD'M_"<`%3HL+K2``4$
-M?O=[_II043;+9ORML+!YX$&K>%2(HB4WE;4`BIFK1*W."MU%%GU[,J.]`S\2
-M.J[57M!#(B!9R"(@5'U[_OUNQSF)@[?AXOFBQQFU"D+C?9KN-C=I$B!BX;+X
-M.R5P03;Z>!$%Q>XEHY,]-E:^M_6<7T[,<[2KU,Q/;N]R&I>E@$_<3@;E13B(
-M$MAE[<A/?5.^2E]4[[NN,P8(>74'7JYBNHW(C,%5"N`/?!*OU^=6ED""&;>W
-MC)\7"9C9."X330W+=+#MUJ+#\M_=40`N\#O8F3($+&OW&CKUN655SEJD;OF^
-M;2=\A>DX0!Q0QUT_+<'&A#`#NX*RZ`0O'[IWGQZ^)^-;WZ'I,SDY<DS"A)WX
-M3%ZVON>M++,JI`6FEZNG2"("QW,EX^%EDBQL`Z;.2V\C884:S:]`G%$4'YO:
-MPB`4?B\\6/IEC!D8%B\2/H&@U-KQ,MRB$,\1*^<]/;M=XL@@6I9V^"QT93W:
-M[Y#=#Y8V'6.*LY99X?+U$U&^W@J*`AZTNST47H01%_STWZ+R+B9X5<=S[4WD
-M?EJU@,.27;_&QCI<.DG$A><76W7UBJ,6B!.;YH[C;K"OOB(@B9C\NZ#`KZQ^
-M69US2F5&@UQI^BYQ(`SFVR6UK-(@("H@&>\4*.`Z9$0SGGB_/H?#H/K>>I66
-M#E(<^*_!I1=]$W[&C?OJ@$&/M\F4GE;P?*@75*KC'"?H.:Z-U;HU0AY4*?/8
-M>K(B"=G-&K;!HW&#@?LWSW^&AX-N-)3,P&16?[11`'^B)[6D0&M??UVX_#2I
-MK;JFEY2#3S,DH)8;<_VOSS\1[VF<7[BA!`JRUDN;I?1O8ZXOK<_KJ'?5W3\G
-M.G=<KC<[G.'%(BJ,)S5TK_B!#@XS/HO9ZO+>XJTRT:DSV"F^]XQ-!T[-65E(
-M%OV#</F3``N*SGUFOI8S89AR4$W@*$&89:QD9YW1.!":4FXZ`1>6B]38E!_T
-M[][;B&\7VG,9()1_78^$U:"JX"6K]K6K#&J@O5I-4P?GV%F:!,;CD&F+^I*[
-M?U+\C)H]6FIKBSW"Z0/ZH*30$`UE!"IK`6-'ZY?%0/NGGA3I`IUET[1"?*L0
-M'5[?=5MQ1,`!`F9-L^NSRM[V>;(/3[@/?`][C<_/2U>PSF1HWU\"Q1RD.AJ7
-M'?V>.!PN1E]%3SO1H""7K[9E0'6;QN7C*E.FZ+I,X]I&-ND28<E8S+*($M#]
-M8B`P?#%9>M7(^//T"ZF\-+V#*H]#2,D+D$\@G=3=D"*&O.0_1ZM],YS.Q@^I
-M>GU#)EM2@RY5/EYAW6I-!!GK(QE)\JEPQA)#)$6SA:<>B:=/L;&EO$I]$"G%
-M>KMQ3/Y$`Q('#C)7IU7^4>TI(AE:>@U.U8X<AMN40*#XN*/94=19T`)'U65Z
-MX[&`53_FE[ITC.M\:KBN*YD%UG8#FYK7>3`U$MW5!(-IOT*K=^[%/.B45/UV
-MD8G]4>N-[+F&FF82)^JF$ZBO:UU&2!]W#QC&_>F^R<;%S5)N-2VN*>&V0\'R
-M]:1$`$6-Z.PQ0@/&\;>RK#'X=-,545(]M[V'E:.IDN<LS435%K9"DJIS=Z90
-MAP0&>C^YG/^O85GX+$MQ+E7JQZ%RJZF`75RX/'6^\;T0`!%S]%C.FZ^75]SC
-MXEYF,*DVJC,KC-D7R!TTY/SSED5C$Y+-,X-/&7[5'$DXSZID6&Q06J_U[]&W
-M%C#Z74[B+JA5N4&Q6:\O*Q6:+TY;[TX`*?QO+T;JRJ>!L<W0CZ\3@;24:X)B
-M@7?8\;M[RQ;"``/0FFGJW=^E"\SU;_0_GG0^@RNG9%$X^,VX?E#Y_S7.-X<:
-MP`4W,?JTY"1JU7]\*WI-5I%%$8U1++*7.3Z?3@G_W>]<`!<95:[2_\ZC#>1U
-MG6#4F]Y+.@3#<7>86G%3(//9]+>@`(3<8QL_\;QA=;)-RE\AY)5=Y!IY52EG
-MA\*'55#J1`!=I85^WU.;G_Q=VG79*G89%1_>3]SN\J4%AS(L;-R$O8LJX"L,
-MSW>P]@B+3H6M7TEE<4Z/^EC!&BL?5(U6K.:@LD#)SWGSPF?;_'\I#Z0(G3!R
-M]@O=M$IY*I_V4?VE*CN>JOZSG3"DD4"(EMR5/R_/VQ*DHD`3;"]JXZCK4_-2
-M[S%W>S;K2VM)*DK9PQ5"4#AY/!:_Q:J_^.4/_X&`@0ED9\LU>$KH.-X!LWV\
-M3H-&`W.UH??+DTZE;Q85P,:8#'!!.[.CZ5[E;')_BCSXHY9)($$Y_=8G[_#3
-MR*"BEF;+!77`[!<4"\YAP.9V9EZE$H@`&A*"E47\5_E\M,H^GVR[NT9Y>M[U
-ME9:M?@UTE,%A,=+WM2;S!$Y/K=W&5+1:PU+16%-<'\HL7V;A9/]'JTUKS=)R
-M%%..\LU+2LL@//Y$1/[(\UQOT_>`],HX\:-;SV4;T5))ZUJ"FC&!J(X"S,"'
-M`CIKC4ZZNLJ61`AA3*:)M<Q?EJN3L(7G9IAL?$B>CRL'/LQM"?B]C'K6DF&%
-M<,8&,8P,8B*#W<ZA]FKCI>ED'1U<HN,^+LY@!SK[K'VRG4HI5()7!B!C$#`Q
-MC$XC(!9)U/%J<)!0%4$8"Q4`0#J&.+M_F<)@^<#+I$/$Y:@\`G()BJ.2!.H`
-M`'VI?M9$1*,$A(`D#.]B@'US/`37>^222>@K]314[E`^,R`?L^WD%L]1H*,B
-MM.AP#P5)X!%)J3;E3X*9,V^S8K"A24(*Y\:12`!>4=,</<?.+X(3A;=VHJ;)
-M0SJJ!?C(U+@HKCHW^['TS`C$30XY6BDKYU7;/>H004(7YH?=8`\A:&J8L9\J
-M2)!?['A8I7(2(RD=4:NL(4B!#FK\V%.+#=G>)6/7M62!')**!';IM9SW141@
-M7YZ[.XF5<N$LUY!_,NA]J'/L?3T(Q$]9DJK2<V=SH)9D>%@_(#>_`@>;HX$W
-MJ%^S_TX15?":L&/-'I>"?5GA2YT0VWV06#"L=<G0#$^*NLK/!R\1(!"*"ENC
-MAL('HM\BV_\@(JY']9@.:]UK#XU*\J?(0'AI4F'BFB:V6HIP->^)R;F//*`K
-MKKT@\%''`1=\QHF0@[W^2H`\[R'?RQWH0]2>('^+TV?16WU,0<64_'0RC:4$
-MW+(Q`,&0!M(*PM^4_8>Z7T!`7--Z$UDMY9`0@*K2+48SF#RMR>^UO.!1'E?P
-M*:^[C-WI-4WB$@ML0$P\<E2S"`BKK@J']>6FQZ$7ZP.AM<1:BJ\%(1RPSKR]
-MV.H>!<UD7Y'?C3YE].+&8/%L,KM%3Z0)X!2XM#8UJL-7/9S(&KNG*CK!(K0+
-M)N>"$U#*]%8(@GI^U*86WRM#VN$N9_?U!T$RTHA\1K>;M"`5)K2BQQ'I4FL<
-M\'R#S4CQ>-1S^+Y2GJ$PAXZ?RY(76<?3A!%U@::0UR`_$%JU'E.!X$WT^\(>
-MJN1N1'O"Y(H9$M,6V':I)0X3=FS\$)\P]5B$J.N<WU6(^!YXC$^3D<2*7Z^K
-MI'1FS46C`H+B]!4%U&]\]X^=$7E(Y\?LQV6/D3O'-K?L;8!SBRB'^.ZYT![+
-MM>2_.#VYU>TER!M&9E2BKC.\80#LZO71W]\UGP!L'5L-\^B^^JYW`!:/WT6D
-M.D[:L<;PHF"=(6&XC<7]&@1('A[1P'9TUNOU`%I%YOM'P/EHLKS++Q>$B2X-
-MRO\:_73A5A4=*L\71_*4PSBZ,O:%FF6V/$WXS&A`K:'X\4^,)_IUK[`;9&W^
-M@U$8>!6[5;@OGLZ+Y1%^]\O:T:*03K8>#>]4X6!HYL>I6B[<Z0C.ET!A<_!.
-M#7IC[;L!@'TSD_/`6:TK'!!:H,]XH7YT!F[&Y39PA6O<BE'T(N$'7'&E_LR0
-M_GN_U;/(3SK@//;NE2?%1C$;,Q$J?)T]4ZQ3@&"F\P\)NQ`]SSC,U\@)[H0.
-M:P*D3^EX9&!>_I=7XB*&21)'EG27&A/%_YZ1^2"$/H5(Y9U59^QKW1R:=20X
-MG-[/RQ.O$`3T$^G"OXC2)48<'^S$N7NVQW*'7E]`]>ICVZC0BU^XZ//49DIQ
-MIYMK/9@\69A':D^H*E^EI)EVUGQ[A'A3Q,?Y;@-_IU*#B'L"5_/;X&M0A#)G
-M2'",.?/->/YMS]2=?1_$^`(NOZ$KQ">,*[.<;HDEC&V[7T2B9'4'++,W4:L4
-MAP2+/:!QT<G3TS(>`S?1NZ7V:XS+$'19_9P#[WQ3N[=_:=`E"W#^M2$>,U<]
-M<X*W+1F4F149FA.#"+]:8V)ZRT`[:S911TDN$\N3G#0E9L46DDC@J--FD3@Q
-MHSK6^G!;/55DILO#T-^F2/\&R1>CCDJ=`R3&9M^P=)%8(_^@5,0,YLS1D+VX
-MB"0NBQG*CR40N(B>@&CHB;7EHX(/7IP&WYKXA4"$7M<@2SQWSINR$O67IRIG
-MI:FI`0QZ<;SY;K`2K+\CB=U:E;7L`HCZ=8X,:Q'[#3WIS?@+?ZO3GTS*N?DM
-MH1=PQ/Y:7,AQW1H1-S729BK:J#01*W`K:R50HJA`WF(DH(L.F";C=WYDT9#T
-M\V%:D(KI6OAU+&*U!T@JE2VN.BCH]S+L`7PO^HW+2%-;.%]@HG9\.`,$VKQX
-M%WAH)LR2+J+7XM5?GG"R@F=U\OAQR&[<MI3G2TFKYY8ADV"O>-;[!]Q*_VEW
-MG%6O0&4QVV!U'G`3_\GVR/B'1._WPDEQ8)B;NB76D[B3501)7:A8FMO4:#P0
-M5UK?R/#HZ[12_W)A7<C]3>3Q\T0KX/S0\NA9P*#^V93Z%H]A!'*>W)BX]:T$
-M)"RPZ3IOQXHT%9];7_;@[!<2[?VA1K3>9-^,-&Y(-,KS^OGG+5GPYVU3^=^/
-MC:Y(<@O:Q?)6'*):@C<>B86)XP+++-0%GX?UY3OA`;TJBLL.1`];EA:W@H1+
-MFWQ5ZU`:XQ%.6NQLI4$I:K4M#-L2$#E5Z;6I0+N:(;UTWG4H$"@G>EW>CAFS
-M_^,1KGV^^Y%EU#_RT6R!;+P)O%.C-5:D0>N8CNIV?H&92%D0E=99K'J0@OH?
-MI\:R:MSFH(?'=7OF^4T=-3NOPN<)?F+9SG9I^Z_N6P7&Y<K+J;V>#GKT[S$*
-M#A++4^(1<1P\C&0UAU,I>8Q9<NA9\6H(=#7+_6=_FJ+('D?L>PG1B]C\VRX_
-M9JP&[6SYP*.V0ZX%@]2T.SX`E+EY077*6$]FQM##@K7Y^@X/DM@>A:G;@^^,
-M?<WA#Z^U!G=.A>+U1N8;'*;2@U<"6C=+]Z1-?OE1`";C],MJ!.!?`>K&8CP=
-M7GAO3D05MC\5$_,&%";AV0@3.M4`-U.S7;E%@7WT?:25M]7NAS"Y^2QISKK_
-MH+]&5V?3?+NMH0W/UW6_SN"]37@2Z08YSF']P'%`B'?]G#$6DR<\UQ8#SI%P
-MXI&$\FD%Y<1U;;N9SV@=UE@D=&B#P3DR6`U+3FMA"(LR?%(B3Q#D'3YP#&^?
-M0'2B5'(?Q&$T1*+CY?^/I)C&`1J3>1P+1+W_D)\(3`#J)](_A+&"!^?SU]8?
-M"28QC`P0W\UV'Z[,B!_B].@W[(>E_JH(=DP6$^DB0XQ`&!&'[J;T?/OQ!I>C
-M@FZA5`_UVSAXP`X;H>/?"S,,UT2QS.WVRQ9XI>\PSRYGIL(SI+`G`KU8F,M/
-MAT)KJZ;9$_UNX)_DCN4$`:?,W=.O<Q700`"8GIAI]?7XLFEWZL8'/Z9G9CZ:
-M23'XR-:QR!FQ$#_;:,4\?(QS)D@M'"U/RYH#UD>+I5?V`,N3W)I<C\@WTCBQ
-MIT"W1"HP_IA/DA^E=!2\IUPJ7Z:U%G]#[2GC$VQO+GV(!"OK!C.D6+UGL;?0
-M?HQ^&[UFAR%YZCI".4-)VC0Z(!B_0X;8TF3H>W?CA/[UBW`DB,/4PA/2SF6H
-M6+7S$O]DOWX,NM7A:Z`\>&))AA*C==8X=24JS!`LTMRD[S.*EF8-D,-DD@:*
-M`=3P-VF4A^B/=RWXI2,+*T63O'5DW0&>5S"4AHZ*0BCHZ==]0M4G;VF*!^\6
-MPI&[M#O6T.[KGZ-`2N*L9%E,#CYF@>0P%A[&%'8/X#;[+,FRA\YXGS!E"^M=
-MLO"?+QDY1*I8:/L"]I[_"ZTI('ALL45>)ON$!V>$]5WBOO08KW`%3&$IT7'/
-M"N:MRTF!W]L>04)N8(4:*$5SZ_2-3?X_/QI&'&"72U5M^'KU[)`^T7ZB":X]
-M6&@+NJ5@NS;>@E'L?9ECR1IJ?\_++8Q@A%-8W^,W.!"2V5WK3.[4['`*427>
-MHF4\&/2?"P@9<34N<%"UBGHT/VD[8<2Y%W!T+\^3@]G0\M(&IG-':+K?%:-#
-M_6F.RN0LWE@_<NA9H8_#.`L>X,-IJRT>..QNN(95O?[+9B2F$^L)*^2V_`<_
-M'.S&Z9DGXB5FAUZ1J.!Z*),WD5X,^@?69UOAHIO?"HH$7W'1HAOS/35PGO.J
-M@_5A7?%5="PEW1M":87D>>X!)63T;%S@K,'#117&"AR\MWQWE,E(R&YN`-"I
-MEP=CNPU'S0=8^1F!;.^4F2%A]Y;F>&=+&A]5S>_/W=`;W\N4@916C.7A[DD<
-M$9E"P=Q701:G,KG:^Y<G&&P@HT],YD_.G**^3M)/MI*^P24>K2JZ8*]D/U-M
-M':[)`D!W-"7GH-T(C06CQWKDTP'MPAZ7]^BV>C-`V9P1C2;&V&3[`M)CW>#U
-M8#VWB[FYG])/?#='&KTI#9V.`^5/I<,=?M4UFV%50VUL:CPLU=$5%MF"O*+3
-M&`^'DSEED>LQ')8!5V1O/]DDM]R6%TTL#55QA;M@<L;;Z\SB?JGO7WA="U![
-M-@>`QEHE=5L1X^ML58"4]C-\(S0W0H7C0:G\!\T`P>P(+95&J83<WW/5QQTX
-M0K'P^,Y%-OPIQG39G3!XU_4I=":-F-"8LQ5>^.,;[;ZWB2XME-9^4*HZ5_*"
-M%I7$49.OATU(>X][?>OL+>]]T.`O1/H?M[KCGT%GQ.#R,[>!G/M)RHX&'UY&
-M$"[,Y*#!=N7AM-$8"*:^[CJ:A.,RO4H`'GR7[.=,(7[$;U#'8;4TV<Y6O;=?
-M`AV/FP\YA*!TTL=G?5?'?)$_$)GLR2=S_,^)\WKM]UROQ4ET/*^1[+\+?&^B
-M8U)]$#A-#%(QBD4GN,:("A/;/>^9:P*_>LI)"I.8%>;`/J`\#T$0ES"FT.H7
-MJ\Y)^XP[;^-2UJ1M2?3!JS#";.9]Z*L=37:E=EP`@^GCB!Y]2,-8@RZV3_+P
-MW4.$)`2=)\).D`F*<4MV'YX0^3H7X&U)A[->$]HTP-*9]_R\]'&L]'V3+K9K
-M\&0S2PV+A%J@W2,.Y2=276YF0T-:`YK7?H:/Z,5;GC<&?O#]V8;?M/#6EVF(
-M#5TE8'F_LIMC[/-WTW)?<44-@K/E3)BDH/L??^?.7X0ORS*;M<I=FA>3B'9_
-MZK</$8I^VE-;-Q:M0&G9('^ZB@*UG)>VX<)<AEP0L#=DH*KJ8LNQ_1#E1^_N
-M>B3!K#%#=`DYC]#6<-7/1!IV.&D,[=KE7/`H^7W_O@:BGFPUNJ[)\@X4MTZT
-M&X:T%J2&/X3C%C3_OSFO5+GAA&<#?.`RP_@8E/9%(O6%H8N'0S&L:;A&]P:%
-M4+V_2D^;+C1WILVC6MMP^0<(.4)[Q!B_KW7`JS<B_SNYT3QI#1?-OS'^C)8>
-M_>-=3-"A0FA6Z=^/]FTX;_.]LX&S$,P7=@+BSC(<<N!S>_I-1I[HT.TLMW3O
-MAB$T+!`&6.8@-2LBY,*1//D4\"$7`L:W"Y-@S<_K?*=2]2.]G(DX%#J=4VN7
-M2?(Z7.!02!QS$K]NWLB)LWG*/-S`OW4TH.8/[HX.XL:].'N5>X69DX*=A$%,
-M<RM>S9V%#T_\P&K5G@=;.BHI[+EO)B;5O_^YWFK^B.+-13E0N+)2T^VDA7+A
-MW'"`VRG35`ILVT7YS%;Z`!Z4!_[NZZ2&<K1E^%#&;^"-RL>&"><L^Q6PL;##
-M=]WK`[TF1(7F_VIS#TX=?BH?$N,\\.HFZ9+-6ZSNAMZO0FN/`R/-T5BB%IE/
-M[&YAS77"9E^-C0I4XI82^"9/M*FNW["[M9V<4[3Z*9`V^<9V-X^=;Y62B\^Z
-M="[_2E];U"UF.AJ5ZR-ND9FG[]49QR[S('%VV8#C(9*"G16#@H)<I'2.O;[5
-M`J@2=G=/RH77WTV<R]-)EY;;72=1NZB/R0.F<0IMJ3CG=])GAN$+S:1N:,(0
-MO4.C"UFI/\%R`R\V>8UT<[`?OU&5+.S],$3<<@YG>$>7'@CCPKCB7)GX%3YJ
-M>2S\^[M[J>`E3KT`[@A_+^-==!5@C(*$/GL):0B"2",A%16+`%6+%@`"H*R!
-M]F@65A#^T)]]]%8+?WZYE0`PJ(PC?MK/)=LL>"NMJ'4S6"+/#H5)^N:8KG$#
-M+3FFWEX'6&1PV?K`";@&G`-89]<*,JCW/&=WZ&AQ1*),G3DZOV!YSOS.G:@)
-MQEI+Z(LGU^EGW/@3L)0M_.)#07V_K/%Q#O;'PIV$32-Y]])>_;=JVR+"8.MB
-MHNE6*WQX'O@,O^@PP5_O>7E^++)E./$O8#?GFAZI>V:-K1V8/8G1NB&P]+;D
-M-J_/VLR'5.#U>JE"JEY446",M2K:(Y8_S'_:+&8A\`G_=60]0WHGW357C&:_
-MXQUA#0D=>U'%V-K[V[(>PB%IC_@P>W@:^\[GESH8WT3N.Q\B_&RV;D4;_1F!
-M^N!C<=^@>H\R*OK4M6V#0AS]>FT[4.687DP=GYYF(CXEE-#3'K_#,C[SG:7$
-M77R'I/!R=B8-9+%T78&8P=/(FAP5U^*874P2@^B#FY?X1SC&4O"-4N61PQ3*
-M1?'8X&F4EN<P]ZOP<EO_KLNJ9Q3P1""(RG1=\,Y=0UQ!7\+.?`VIS8<3>.PF
-M+U2A3L"0WJ3J//YDC\4K68=*=@8M?F2J-E4'A<?!^VOE$QM4X9BBT2^]Y7J=
-MI:4MA(/V+&A_LUTUPJ+]0FX\]+&S>@VNX:2JFR$6O&]?]/\2.G=M$ST6JF\[
-M1"K1\[XW?4!YZB(9TJPU,'/2/\%XGK'4KT&K836D=73KH"6[?O;(X"8%N%'2
-M1>KFL_CI&<#GMQHY30BCNV2+UHG<T<U"FGD,E8+.S="H@X\@V7Z4N,QJP\Q'
-MXY+3(AS.Q,.\<X("6]])PG67X$_89@<_O&CF8]X%&YYJ1X*`[@\_G1VA@F&N
-MY@>3Q71@?$4@.!Q!XCN(JGQR6MQX@/F`DS&(QD0G&0%`18P%(*=QD(?J$/;D
-M/YZ#GX[E%W#`D;EMZ-"GC@8@LVFFK[D$<X;3(@.9Z(%9=<CG5*\@$7OQB1M^
-M&Z.MI(+*$RA3TH<S.Z("SB/\ASQIZ/0L.:2^N9_<Z%Q[PEQDB)\B%@\#^MOA
-M[Q,$'$%YQ8CBP(.<S#\`L1[VQ>X)@>LBNE+2W'FAOUVI,2O'MF76=X6S4][D
-ME#K,,EU[!EY&![\='&Q:CE^]S7B];DHF7N\$I[,S87TCA_['[:?^_/X0F>6]
-M6[RV?"38Z5_0V%N\02$L??^&N]1<+7ZNWAJ\PHGJ7N"6!IF?V["%X5F$E_"T
-MDVB;9?NV#Q9F)DE-?4H]`;!T`D88=7\,.1>CSK_+:LWHHY/*T6!?ZQK"CTZ$
-M7,*=R$+B/E-/#/E-MR<!P**-*+7R#I;6E:N]BC:(4IN7WM97P3UU]=H^:/7$
-MRFDK:6>`G1KITJNSC'49,W3O26+.`ZTC(!OLURMI$KIP'J8)VI09<-K1PM%Y
-M9Z%KC"Q@0(Z)^VH=)IB'%28NV@*SWQ\-EF_5\9\PT:S?[^,SM4.3S#AR-)G]
-M#7X.MJ[V]SM[;ZYXDBTC'),',6>1+.+W%H-+S.'PN6Q-VDDS)4WM#48(/4AT
-MX]Y^D*:HW0R+F6R96QTC(\P,^ZQ:UT2'"II,\(_7U%5L;$B/;HBVXVY@#$6W
-M!@8P,-28XP)4/O/_E7,1,C*%&0\]@?O$@?DO3ZZ(?%ESHB/=;E'#01P^8?:#
-MP>V:3T_SB3Q@'B,<0#PH3*`!^=Z`5="Q=9[$08RKR88_T/[A]ZNIV@R5ZBT.
-MQUY$%=SF9][:FJ&W.^0)^U0DRG[!;#!A%BD$YU0J9I1^%EMW(*<GKIV8PO\+
-M.XPBH,EE#`PT^-X^9?PM;PRF6M]@9WASK;XBUC>GQ.VF_2FAE8-+_F[X6N^$
-M>U+.=P-_^0<Q/T&L$?\H\YQ$O[\VLL\FD,[B/*9EX[.JKDP<K\-<<]SV/Q3A
-MQL#*.!F9/IAUV084<75A@Z/&Z6N3U8]>K:]M<%;\I'<T">,I'SVRB&H+/NX&
-MY3<G41C[M'(4F[L&*'K?XCZ+$TXV<ZHSSI;\:#GJ[D</OZ6!=<%)J)-M#B[%
-MJ;,[-5]B-IA395CNX"Q50T('$1Y5K9.*\-X195HB37L",!1HFNH65>8=6B]^
-M^G?]C<YOW.8T["]*E%97LD;."`N!5S;$;1U`6[!RG;IK&G3&H;5Q_>,NU^F.
-MTTUH+=F9*#'G1..67TN#F;)Q8<?9M#C?K<?GD;,J2[!/(F6V9/21U[&+HT;D
-M+0QCV_4/13/[OV'.]%^J]&[T6B4>X^_J'W?WS#69<H,@;Z`/M&A204@?:H"P
-M]$5'P'S4FR^=D!G1-[)MNF,#(<".`>C#DG%3NS=SW:-Y;94J3;!]!8,.QADJ
-M.@Q5D(9:W?0'8-D.B*JL#I==_^"*/:DQ];FN,FYO&>='RYE):\)PT;EO[>0@
-MD=^Z"1%=W&_D-'4Q_I^>L1]K"N=MLD[QF^7/^&[6DHSRA[AOV8E7=@.,'#!"
-MDJJMULZVQX=5-&^F^YS>^]WXY/?Q,""<&_JWTQNH5J@WF@<?>C[FQY4?A1_`
-M_4IMFN(1:D:,.GTGU$)3IO6HF8]4'Y1FMLQ%A'28([*+E!M9>(;Q'B.B9>A?
-M'!W:L5U*@G5?.N\UT4-G&UJ[&B;T7]YNOTL6(_7/S$Y*K[&I<564J2^T^;TR
-MG>OU=*364D10/3"S-)K7JIRZSE4EG9&AFGI%(F2O3KP.]K>G62P=^[W?KQI6
-M/"`W@!X0!!0`=%$NE%8?5,4DH`?,0(@8$,W6`?A('BO3/%R=G!G#QKE[LZ+K
-M3Y1USS[F8:,K9A8-]EA;UNVV]]F(.A4[AGW&A.4#G[%_V>>":UB%T7`@=T]A
-M(I:GC!@1(*H6Q+7DOL90\29`HY`A].GJ?58A<'9SJ1H_C!24(]>3L+/7@WSV
-M!W8_+.^X*:>JZ981ZACHJT7JX\L2JZ(W:<6!0)^;K@TF[K3=FU%ZE.Q"^/YL
-MW=01W'S*@I"CC4,K&;G_!M';W1]QPWMKG5(^\&3XY$(S?Q.]1BZ+7N(#KR!>
-M+XS$_[YS3V<&*`P3D:(<F&%0"H9(,/54>45+1PKJSGI^,E4N@2`P/ZY."=I5
-MR@HW-L#:^3["SRD#3.!Y.4@CO4:93H#F-K^7Y9\9^HKV?E?./"^)\Z?._`G,
-M>X'UTZJI^XJ3YJBGS:J0H4144160_B(2=#YU?$YEI\)A8.5NGU/SCYWA^LJ#
-M!Z,#A;R$T-[7V!O((RHW2M^GKDYU8'6IQ_'OW&>@USA6X31S>1C==W-.^'K/
-MOF:'"4_F\&(B7MM<X/N;_;TT7(KN3LF56_X,JIG1ZL_Q5+VS!SF:!<QQY;>I
-M-?01",'5/Y3FDI[N9)][S@)(>EB"2S.M\V^N-ZZXKJ(I.GUT`:WG&AN7S#)B
-MCXGE^^%[!*'7:WN$?\LH_Q+I=.@1!0LHR#IT]^BQ,3+9NGU9$''G2;8GQO^-
-MKNU3#O*1,_/TT>G\%[*#A817^$RXOL8\,D6CR\Q-;KV952D7)6GTP0N7#'+4
-MQZH$[E\N3\;+F04'R.D>C]542>YGU2';JE0]\'TMJL,DL'V"!H6IC%*HYETD
-MET]G3==\MA<>;D/`1)7YGDUV2]<GS+G=F_\(!JY_.4[;3:_PZS#+/LTKFORE
-MUV\H+O$WF\Y,E'6=IRZ=-WAF"$K#$UY_Q3U;UE,Q@K=>HJ%M]V^?OPO-6E-4
-M!.U2:%Y+8$2;T/'?.Z6/FO?:^AONRI&<]J)T5I#ZP<09]5QMS**@^.,('PSE
-MK8V#4W)GWH@M[&'G1F!QH00UU&N@^L="L=^(2#B(&"9J)GH;U!!U;0Q9*E%K
-MWZ^E??%\0/XQ,G`2%M(6,6K*3.M**8Y2$6'N65?U33-BZ^0\*\U8Z@J*RJK&
-MI3>,I+Q]2=-9;+4X.9*>G,8%+&,#&,8%3BG...-2U4(R#112Q11*82'P?^_I
-M4?,E>L^E\P^P-1+AM=35*`W5/%"G9>.>GQ<V+G@-L-:_.#:+KAS.R'F/5^A?
-M-NO;_C^$9$YZ>@R6F2.=`CZXYCZ3X!,+99G%;M&2'?XMC_<3;:^(RO6W:3H\
-MRCIZ0T?O.:243'^KO&[@*3WG?(U',;O^^W;YU,^Y%V=NU!'TYFQPV_JU!XQH
-M?&MVQHS89&VV*S^M7-]N<)0?,56;0^GG2$2JF,><L9Q>HE:-20HCHMY7H;5F
-M"=#LL''.$[^!^;G1.B:G)M_KXTLB!J//U^O;4*-53%060*`44!8>DD)\^CXZ
-M1D8SQDGQY!$)9#[WG>T?(GLT8!K-8*FZ-JH1IU\./AK]B5)@I%V\!3Y1@,Z,
-MH&3_2':#WC8VT?=A:)5@(E9QC@=UX(<KUVMO`5%[>PVLV-3^_XPJ*3P$'K/I
-M[`L*0_AC%**F(Y3'=9<PPA2*<4M:"T>O=@P<#P<2B\+USU.;1_XF%S"JNZF9
-M,PK/'?TIV3FV=C*']')LVF7M73R8&#<VAJ=WI]AW;L2^$JN>A<4C1'(TK,(\
-MP8927*$.764Q@)([*%E)4$#Y@)%A-P#V>*K"(Q8$+1063M^R>5[)RU^L,&B&
-M$;I4+'8RYTM,\G9+VY.5//>!?*D?2(:)K/7L\PB9,@$2H&?I4BD3TF>:KFVG
-MPD&OOTH/1`0,^K6'82:#X5@;1*./%3N+T%1)[/YKJ#5MK*V)?W94]P@%Q41C
-MX3E8^OK;=V6QA9&?1H+-?5NKTGLYV'8A6MJ;6I+8W1/9VVYZAO2HRDG(N,C(
-M,ZI$(3QZ./`C/5]6"J'J@Q6>K9J`,@JL6U2F>K5`!0C%D_QLGK?D(>LR?0BS
-MRK:I_6JO6]>)Z_N!FGR#T/>!D:%N#V.J"'HZKG2FQK.*W7>5UKNEI%==OOPA
-M-4AI%-]_G\)5&=$153PP/NM3FC=J*VC,?X(.IO%WP-"[;]LSA._&=?#N=WD<
-M-2VT[>31V)+@DQH1FZQ94YN85,3L9J7(YE2KV%[.J]817+ZAOCU@!:W@)FB5
-M(#"=&/09NL3=W4)#T@IGI`P9#TC_XDH].I41BJM-$D*BC``QC:HQ1;U%_8Q'
-M`T9&1FS-;8F*)`[#U=<U=L\,+4=P9:<M>'5::S9IK@K&!TM#YW'^)\7C]LC[
-M5?1$Z134@8E.L=SV-J<;D4BI6^3\N,N,:^M)SLF)JN$U(MW_)_:\3T(\G/YN
-M=)7PYF'\_-Q.?X4K+;K2+F5?T<R*MD8UNQP[C.5E`W?'X_@(1]AZWN/4/4GI
-M^GZD3U(Q1@>H2>HP4*'[5I`U,A\XXB(`XP,0#;81A^-(+CR?,;F.X!XQAQ?B
-M@<-+'W,C'"0M_TUW5<AQ[3QS;F/5!64K5;!U8ICX,K]$?!*4>$H8J?/^2UQF
-MKQ:#(,"B8FV")YF1X2F'PKJ2R2?#5\I\H"I9(9('K8%>D@EG^8:M5L$;BI_&
-M2F3.LB.F<Q*2_G%Y-3O\8-LQ9U0C%=%@7U?:59H2]HM+&$K91]B%=G1F!"^N
-M;NVJV`Z/RR2],\:)--S9]%";(SCE)D"9!QCVE$\?Q6"IXP"R'BP4BTE*TU$(
-M'/!)!"%OY1'9I]PGPNT'7)2_[52LF[UQ:Z'U+[XI7I+C:Q'<'X@BD*QO;5TX
-M[KKHA9QF9C+A!.;].4;"A2(&V[*#3HW$Q5V*^&O7?,GJ,NG"(6H)=6KY*\G\
-M[,^96=]OB>C@,^9YUG\.[\C0;-K._$J6X;<_!JB_RN!!D5'V\IVCA4LZMZ,'
-M7^%V-3,?#]I;\M5=B/W%4?:'HM\AO^&H<RJ&%'AIB,*/#*=33%)+$/"R4*J`
-M%$41/"P84!Y!C/PA;@TDWNFRST#$1%W^V`T1?-=.1&J*HG1'Z[E<5\9/&U;D
-M?:--ZDW:+X><S&^E*D3&>^FY&1.PLG&RLG@=O^*X1VTI+=SJ79*BY<1Y$%:V
-MI)!MHEL%"EM`+8*G.(OBB(D@G-*6PE)>DG('CYHD^CU!\:2F-26*-TX6K:=6
-MFJM'YX/&J^(ZGE2P,.JBB]1ZK=3/JRO<>Q7V4JDZ1*/J*R?8%1Q2YOJ)?._N
-M8U0#TUY[0^@"\?5X]'1SW3H\W2&@HTA6TI&D55*^8$%&1V.OJ.T+9AVE5%$A
-MVB"(=%*%5\2J(!T5%&)"X7HQ0Y_''P^X^M]]=YWB=EZ7_*I^&]3]KMO0\7Y8
-M1C-:-CRWBVZ-M;'^N1\I9`D)Z5VF/>K+FK)Z>GIR)/2'=143B=<\F'.SF>=@
-M[!=]Y,>F=6Z=;"C;U>J(G5"JZMJ5@5(H*=5"D58B+`:H@'W+`*!0ZR2F@ZO6
-ME)P#BXF#>*0&DN@H'CSF$OS\MU#K24)E(._\7N6I4L#Y:9\/>-[4`>/6I_WQ
-M`T2+H-^Q,"9I%=2L[/++2>H)OW35%CN!+?9*5!Q5A`I'9;4G:LZ#YB>E*JB=
-M4>_]B_;'Q.9WO!X`YVJ>U@=UM0=[?G=G=3F45W6I*@HTU(6)$13RJJ+`#NRP
-M>3W3NIW:FK46]F?5]WO]\W-Y-J>VKAFO</,=Q2^U05I^-VTO/I\\7GKA0KD2
-M[[=!\44XB)3$F3N`E?<TE%73E1%OI;V7E94R9-:P:#FP'-CS);D[0[Z]>2A>
-M*9Y`ST"9X%U0J!,])$04`+AC)N!SY-TW>UW3V?C_3YMW.^P^IC\SV7LOVCT_
-MI^^RAUX?U+DH?^18E?LYI0KPB>1"[R+:I"77J:BGI"BA*"JBUZGE-@J)YQ6Y
-M<V>6%550T'WZ_VO:_$GM>U.OV4['SNQV47X1VE#M':@IV@4&JD.U`$8BI`.G
-M!JJ8':4/A?W>W+=OMGP_AOPY\VWS3.XF7RO$IN/;\^$UU67U[;Z($:Y=<$GV
-M!;Z!R@F'):4H)R<AYJ>9.N6XS<H:(-4Y8\IRZUG+(\K1*%(I)RA!1=UI6$)J
-M)H!C-(#2TQP:@SAHRHA]SV,V\9%1-,N]\G''F9;+]K)+M?.?-N$E$HH4W(RI
-M-_E;_GXF-E9>9E?J#J]7C]835WK-C=*<;=M$"V+8MVE6V0"Q`BIU4(P1'JU)
-M&`+(*'59"=5I$B.!!P$2/J8.-(Y#Q,KJ-6'*VYG\)<7_S?>&KVC_5M'@M_2*
-M3HR[!,1**?^.5E#)W\HX.'?X^-E8V1ZBM5[2I(K`+6G5`E05154,540HI15-
-M"K(<DG&DY&6$58B%))$4.2BM1`'FDQ0Q@U`YJ$S,P]=$';HYNFN'F.KE]12\
-M&SF4NUZ.UY2-8[.?/IB4@3$L8N#AX>+A>7VV(,7,W?C\;%ZGMMZT0;%=A6U9
-M",3>LIB65(LH"0ED5>95$G4DC!%BH]-IA`ZD+5TZAU)TP$WD0;XIP_>+B_7:
-M?[R\;88GAZ^[X&'+]*;35!*7]D'`RHEI"<@2DI"F)F)%&%OZG0XN(]'Q:U3C
-M05.,./A18#QG#:H%@AQL*6ZH4DDN8),@'(JJAR`V.0<>N_/='/YVT;/Q_,]'
-M['S\7V,CT_;^Z/CU_E[.)D+)O_M<`X^'BX^%CN8L8C3K2DY_/J;&PE:HHK*A
-M-4.0Y/=R<DB,$$@<D@*LBJ$G)'CJ@XXB:#S20/GS`CX=;3DG4PFFP,TURJGB
-M2;,PFA=1TV?RJ$LJ2S@EI:.A>AA7V%AXN'W^QP=BORZ=4#*JTF5!595%.JP%
-M*J,1&%2$%5$0$8<;"`BS9R03N4A9[W1GJE>7/;4=+EY>C1Q_F_4]4'3]=ZJ_
-M][?7]/`\![Z.X/L7TB1P,7#[+%P,'&]L(Z5_AB&*%4!BB9$H(YZ0Z$@VHH9)
-M8@(P%"'/(LZ!MHJ;4$40)2);X:@BTQV8WQ[;WVEQCZ7_[W:S/1_!\S@7RQ2<
-M+RL,X%Z#$(P^OS%#:9K)FM4J7':U2K`S0%`-\`6=^W((BA)F%8AD4,VZZI1@
-M][3;_G=N_J>;K?$[KY_Y!ON!U\"3?,K\SF<OF#N0]MJ(GE44`]""#)@`"0(!
-M`9+`H)8(<54B`H*23;(IM9!VL5#JE<X0VS;58C0&U%Z6C=]!?:R/?Y,GW-_Z
-ML7]]R/9WW:1ZP$\0"!*%M4(&J9Q<[3*":I!$N9)I0!05C(35+(4A8"D^`!X.
-MVF%X/=P+G6^MGCH#[`ON3[(>_%_VWI/-6Y<@N8,]TVS:M;5-I%FV6K;:4.IA
-M+2"BFUA*$4"%05S4`PS&J<L^\^I^^WO:/^SSOK<GT#)\G([Y.O_OXX?9<VCQ
-M+9NK7.4QU3/1F,Q+&:"D,PI,:I18I`S`?\$`WFZ)%`F??U*A0+G$9U=8&T2+
-MMTB\-K0\7Q?Z?-4?9_?#(LRC?-[_WDCI&_Z/Z=05.1D1QD$8EX6T5KS1DUPJ
-M"AHD8)<PC("FNU^LU`#80D$H@C`4K0500042,$T<@LDK&:,49&UW7(V\*DG_
-MOZU[!Y&[JYEK;#'9L*BY9@F#54&)!C`*"8I2(BA"I.)Q:JEAP^*IQ3K?![T^
-MSYFW\^[WI7>=/\$[AR_"[GK9>4]++!-F5$SBT@L84A-4(L@=+907(I%(!0JR
-M8"U@3`=O&8T=[ZI/K.9S"R.3KY$=E19'&8<AMPC/&;RMI\BN`]`H?$`($A"0
-M!`C$DW8`GBLJ*$FD4TF]H"::44:6TM8WAR709^@_!`/%N_;\L_V]\3*'Q?8[
-M%E,"31I$",9T<FB%C4&,@J<"AODX-^UBU5`M(^WM8"B19`4;,HM52$-\-^*+
-M#?XS@Y>+ZXOO\CZ^[Q[[[S7</-$&[6T%P6+DN2B5))<RA8@JBP`J4JB80`1*
-M*2S,5AJE0J@I4LU!J:GR=3R/,[=?!#&=;6=VN9IVK;;>VIILT--!2PVTLQ3>
-MTH&JKF51"P&C(4HJHL"4"P,PN9!(4(%ND6Z6AHC2H,#+VIY8N_A<>]Q!!!!7
-M=O%X/$(ZC""7@\22""`Q(8B083!D"YA<RZJBK))0S')=!C`\'E!KL118#!KP
-M/P;T'S;'RO6<KQ@L\,D9/$??*/5GZST!8AI:"32JJ;NDTJF%2%FEAI4)[H`H
-M2D50A4&DJ0TTTI4RTG*:-5.7;P=GGGAZ'0\._I`5_G?O:I^NIW[&-8I41%''
-M&P1K$J1A49&D1$9!01HC"U4`J19(L%`F@=@E9]9CK9]W0\SZ7-'P=LSPQ,+]
-MR%Y=?*OL(HH7DI"ZTJ7D&G58)J@1OH"DBTR$2]I8R%3HM6M89T<+;AT<1QI.
-M#\-]S7VOGY<_#N=SR,<L<C"V.5D*`RJB406+`Q"`QD#(BPO!<H9556RZ%L[9
-MY#S^KN)S>;W9TO,7'CX\;;XZ;:4%6<"FQA:I:BZHEI%L@,@BJPEI(6<46YBP
-M,C(2X0B02`^!4=?7.=XOB8/CVAJD69S51N5ES)R%)H$B:A54DB:R,#W24))1
-M(+`6$+XJDOOJ@JZ<7#.'L=+BCT/SLYG-+,N6<+2I"H*&D%,H2&D!I,D@R:20
-M:0TGA:2HNT:M^4,M\\0X_J4_I'+S<<UF[?+MW`HF`*LP@WM!*A%D,$E1!U5(
-M%@4OJC510#;`P,,#`PO4^[/NON_.X--$JC'?QPQ=_$Q#`NYE&.(E*DJ$4AJD
-M`7%1$4A$14)"!H-`-"<),-D:ON:70Y0Z]ES5U>):UIX:#32S&P8TF-4+`H!C
-M%A-PA%C&$F,4`-%H!6J;>K9()<U3SM?M/*Y''^!FS>%GUMAR\00Z%5770"X!
-MAQ:"5(."M#&`5)!%933(3"*0R"S`6834<)=V^03DXO/Z_N.E;I>+W?-_.^GU
-MN7:V/1S%/::K;MVU5+-#0-"14$DT)"Y%`I(B*!*)F$3&,$MFNK,=RTT8F.'Y
-MOZ>[Y&[J=:MG=Y]<EPP&.`IIB\EPJ&`8`JPP"&$@BB$-D,D!V54V;*>CNINU
-MT2GKG)QZ5Y!P=W7P:[A"J)<-U1ET%)=(.MH"Z$1%@L4N0JJ*0)0L-?,JM=MP
-MZ?-[7F^KZ&TWO+^CW)N%;B;@;A>0O4%$OH(R$4(J(2%X7LI6!0-53#FFYO37
-M#=A#>OZ.F)!2@+,\)#TSP^KZOU?PO"Y>W;'"C:EQ5UUU*6LU1C9,6E86)<$6
-M`B$+$BDC50A:62A)0"PL%LYS3O<'[$^X-\]S[WEX:;D2X=;5774%UQ<>YUAJ
-M9="*%@A<R+!8TI44@%0N"XX2_@X#G]#H>=^DZO>]$X>IGD7X7%%Y>)A9J2T6
-M(S`%BF#5JD+0BR3K),6$0PHJ3#&F:C'4>WL468SI(Y6H*/'^D/D=;EZ/`?`+
-MBYUEUI05+J5H2JHGBA="YK54+$AKDFXP*15LR!K)J8(ZVI4W-9X]PC<:;?&/
-M&[_-.`W$=SQMQYNYN`%122\@I%(Q"DDO)+P%O!;S+?>I?&47$.Y_/U>5SL;H
-M[>QV!IN6K0<`;"..$(0V2'$#"`,4`*+)&"0F:,SF>:J3(S<<GJY=`]:CO=KP
-M88X[Y?O\W7+PO`OD6&IH8%$D;ZE,(5"Z^:)K"+Z;-$V+7J3AM"Z+UT=7V8M!
-MMJ]IBT&(Z(T=55=*D%;*:!+JI0HD=E`@%,D*'-(&P:3*T,F:@V.PHYAL\1<S
-MMG:[6&/L=K?->%_2\?L<(CG1E61D0RD%4)D!@PE#!2$RBC$F39DA0C8):#8C
-MI.UWAO5WZ?)6?JUZ;P@*(#;("$4S/#MVJ0VZM*XCG:<ZUCG0M535`$3G#"(!
-MJ5(4BC&`I),X+G#/GJL]7&<N9G,SJFKMV];G=/DU<AR>>=S3/=ANY9N5.<LD
-MS@,0,R"P!7513)#.3)*%24U12&29S'%RQQZICEI&D.D8VONJB]$4+V\*!9?+
-MVDID80$&`%X"JN5@+EJ(WM2FU+EI+ZX/-S\GCKPF_P[+K5?+]=]Q+H7(R+!0
-MNJB%$DN2E0"H(RX2BJ0N+<VXSZ'--AY_F\?>\B_ENY5OUXISC!3`P#!D2:V2
-M)`%!0)A+\+6E6%TOTTZ6/'Y-W:UZ]9PFO6E5KLFNU5KAK09#<*HAK)&U!"E8
-M$HULFNHZ5:Q;;P\//,0ZV?.-SA\.KR\OEZR\O"\BD4A>0%A#+?0$J(R@X30A
-M?+JO;I5ZY>2O&R\RW.ZNW7X'3Z.[T<-3:T'-UTLVI%EFU1+60$%D"P`I(*$+
-M`L#$B(8W75,2TT5KZ>CQ_<]7]_M:?A[NZ;KIAI]##%,8H8R8H#`P:%9"I`%`
-MF!,$:11FE%,X*6!M36N9M.I5&MK]CF[I;:(SVVQ4N`Z1!K![&+#'&JJ+%,0F
-M-%0"B$60F,,$@EY2'G721I9^<&'6V-2QJ<BFTTV4;G*TK0#0#2JJ3D`:28@`
-MN+",4%Q,<>*PRIEUIEGW,SR>7=./C]KC\GXO=TV.]O;W#I-'0TT!8:0!$-2$
-MT`BR%D*%9`TAO52PHF@Z4*G";71RS[O!YWF^7X.[AQN>6O#&JF)E4J9"Y`H*
-M90%DR0$"(PBQ2$R@JF654U,C(Q-_B.+KGG?9W\^["\O+]RZXM11+")<187$E
-MTD52`JB)2`:U4+E)<W76JUMSHNLV]GD^R]+V#N'9[/1OV5D:,,#1P%QJ..#B
-MT%*S"3!F1)B0TTR-T0*@2YACP*`K(4+`*"&1I@8F&+AR1T;AH[_9Z)CCC@7I
-M@U2%Y??1=:U4M]5"M=J+T$EFF4$B--)`N"^^J64%W0O+ZX@U^\2ZO)W_T?Y7
-MZ?ARRY[,0QYZ89.39"@,C%@9)J24044)(B26DR81YE0JQ4)*`1')J4Z=.LD0
-MX>H&IJ*:QG-S1;:MN%NX.H<;EO>V%LZ9@X.H&`8(H"3!@4HA*A!9(BL@;`V)
-M0PHF>RHRJ0QV9F9P9Y>GCZ'M>O[\ZAL,^'+/I!F9NQ2IL1,G9-@TRH68U4A4
-M)-B`I"DDH14-2G43"5-@6:ARK8NQQKJMFML6WN;ZGI]YACC;#E9CE%QF#-J9
-MJB9FF2H126`BBA#0%YE-4(:):4III-XX]M5EEP\/#V.+L8X#EV'/C,9?C,84
-M06&),$)BV0E226:0E`B"(8%YK-#P<[K_;];7[\ZW4N+]?0PW^#62:X10-<`U
-MH0C'@J`RZU0H>"F[?PX.KE\?DN]7Q?%.<\WG!G+U<X5!8Y:E*HD.U@C%B(%T
-M`6!VJRJ@2I29;T)I/-NO.7S/Z_PL3#'2TA;\IENRW1RH(:3&2-5`RD(+`,H<
-M%IE.)E&6'@\<\"[+TKVMI\4:WSX:`+@;;#5!L@$-(X0X$4JXI%@@68&<`4`F
-M2J&6<7-Y]9W=S'G]3UL/5]3L=7I]7CK+/+-,S$S%F8&9)2%*@9P)F@+",SJI
-M3%*S+`Y6JCB-AQ<5CBWMAO=SSNSMKV--WR>EPCNTFS9G,A,Z!$%AF18"R8D!
-M29I)0P4"5)FTE1S,[8!EPYT]7I[N9U^_Z_Q.,PPW^;KH+J"YD3514H%`1@7`
-M`7!*"4)@ES):T(NUY=[+AXD-#5V2RZ.)9V@W9<%,N!P$DN($SJB4D9(9JP*0
-M"G)HS0',U=38\=<;QUNG%IV.8E'G'P/)R,CK]ASRZJ')LV&Q8O)30FZ(F,Q1
-M"8U1*DF*$N80H`Q8(8.+14-4/@,5I^PUGV>AUM/GO#<N059X=<>?T"0P$A]5
-M4/A\J91BLF-KKBI)2%TD%"69(Q1990L'@'JBU8#`%D51N:D"[,/"T;FR"0[F
-MNO5GWP\CKS[`I8%+%*54J2U5)4@I+2`H!9"4,DJ$$$A'T?*JJ$$O"L\^I"O6
-MK7;>?R=#0IM-3M!C;3;85'*DRDR2,'&BDR`LR#"+D@08*-@EL$HVK;;=(%MN
-MH;@J4]/G=AZ1Z,6*2O"?/@@?$`@)@(+I-$2!HJL!DB@32J*9`=VJH0""2(!`
-M'`Z:1U'1L[@L[EZQ8#3E758VZ"Z0)9#K;:+E"LJ9/$8(B@@"P`Q!568Y5EPY
-M]2JZQUR^5U-7EULU_1@I5"\Z^\]2?IA8`#`PI`00@@"!8$S!(+`AB"B@VAFF
-M1S<OE[.SABG8>Y^/Y7K?)_'>_^/YAM\$ZFWJ<[>TW3>4-#0TFZB!HEFY@H:F
-M25("@9$6-5"%$6+F8A;-AMX^"VY)Z'@Z^&')@7S<N+BE-;<%$6704@LEP`H`
-MED``3`2I4HIEB92FTC;5;C4AJOVO8-V1H6FS:HVHWMBZY,'$J8S%3'!#&$%!
-M8!02(A#`FZP9-VV=!L>R6-W/?X/>>>F9\7Y/#E>I>:]S74I2B(+KJ@J'-044
-M!)!1UU)$!$E@F.61+$PWC-6:*6:T%TK?0X0BFZXH3:\42$AL*J-L(R$8IE!8
-M9)$A)E!5#(14,K9-0!6FT:;BKZRYPXHZ':2HA66=,S)H6:)+%FB:$EE00+]$
-M199!"*!>WMD)8BHEI>RR%%Y5Q0Z[VKZY</!7P/1ZQH;W-UG-W'<M4JU%3<YM
-M24"@I*(H&DR]ERC)*`N:90IE2\JFLM7TAN3<XZX>+WO-W]SJUT2Y-XK>WF88
-MBXWU6*AB19JD%4(L#$@*$%),06"E),9BA`:55:#0:,R::T8GFQ2Y5GB:L73L
-M#5WG8#`JP&`/H]`H@A8AO$1AHA$`4-&18I*8!2.FB)H;NFE+R3N=7QVNR:^W
-M=[SE+KQB:[]<N6U%(704%$9+B`H`*2%PLEQ+HI<W6&Z[I'3>+DR\/.ZMQTL>
-MM.GSL,2BE,3%'&"F.-$HBK"H$IQ2+(A>56"G:.:=3J75VSP^AT?:Z'=E^QL'
-M:EY,I"]D2`982"A,I+TO&FJV*4CC,3$HA29TR<A%$="WS?!YFJ+M)RG4I5*A
-MN+`L*R9Y,\*-DSL!,X!G`4#.R%(!4D6"DAG!""^H"PSY$$-5:`5EJ'3',LZS
-M\R<3-F"I-G$3D*32HG"19:"R8)3"4$O0!2$0%P<+6*+SK&+N7\?4Y:\<N[/0
-MW^?BXTC,"]O+RUK!8O9?+D(DBD+T@,$1&7BR_7=3?:F:<Z[LGK?`W.RW::85
-M5]QS;]=Y?2@D4U,LA4BQ2]D9(L(H0O)>I<W%RW56EV\;W5WIO<N*XN-8A?IC
-MEE4RI,29$R100RJB4$%DR)%@3)I@%`8D%RFB+D:;'+,X'M=?B+^\=''Q\LC*
-M98Y.5449!D`929,BD0BPDR(L69&5-&*%9(F+JMT*4<WF'CGC[^/;]3SN@89Y
-ME9Y99.1DY+4'(6553)@ADU')A9%)&$%)3$0B$PRB"R\,>9S[N+CWSXIQG6P=
-M_FFX[A>+#*7C%)>12*$.TA`O24DE-]`!1<MDH*:`4RR"+-2:5EC8XV?=L3IM
-M@9T^(&(4`X'74SM1LSU*;`E$'.B+",`SHK8PU,)J21"6=E9F'*G$8>#M^9AT
-M,7J3DN-SZ/<IK<+DK74*H8,-;%I*A)K0!DW)K6*&^;YQ<?=\A]'SC@[G%Z7#
-MP\!A,:K'@PRF09,0RQ2!DR,BK!JH))BADPEJJ2)%AE-4RK@H.#8=<3K[N'E\
-MIARXNN:TUM0K6'C6W+4U#<35KHL0L54DH((D=94E,A1N;E&L2UD$\836]/H]
-M.O;5<>;W?)YVYH[=RZXNNNJC75!8N99DHFID@P!9K2DE,DN5"'T95424V:&M
-MQUE"7&Z7[R<\X6GI&KGRTM]+?>E]!EOI`J%Z4R4$&(2]IDO0!@IPLF6Z\H;Y
-M5;XRX;E-:QN<S1F]1P\.)=5367-Q=-;+I4/;W4*"+)3()(7,`HH@F!)4PB8A
-M)*+,28ZZ1-A%ZYK[>LZ-ZO>/:#H]K>&A:>&HXF,N1#"J"A!"&#"(04@8(181
-M@IC!Q*$Q:HJ*Y$QG52P[^X[KZ[K>%SCNLO0R[.YM&YN#MUMFG<Z=51IFG33%
-M-,1@O$8&FD*A%.8@4D)8EP9.6.556JJ.7Q_'/(5>B>'EZ/O?2N-P/&`W!W*+
-M-F%@1FXC`4DW`(2@1!*,H!2F9*S)69F+11@#)<NTA$O7W=K=W]+9CCTK%.E2
-M!P[=II-NE3:%,IA4-M5"@!5`W4D#:$VRJ*-LU30VB[IO:=_M\5>8=KW_AQR,
-MNEF=+$$5Q,[49!D*&5-$0,JI$*0B2"DR3)`I`LP*++CE54AR9X9=_#+I7G-N
-M-=QO:7E^$P55,,`O0,"+"F,`4`PA>TX4TH85-142J+@WK]ZY>3'O\>^7&-U]
-M:[V7M\+S6WR7T4!4(VJ`D"]*2$6`42^K[00#!-0$$!Y]II&@<[.<&O:Y78V]
-M3;VZNAHK#3?@GP,4SP2)])M5V^)8J3;50VLEI*011B2+)#:!?GHR>I`84*OV
-M8!(,`VQEX..D66N-DY"!550F04(2_QE"*`B9!0$HBE``H!*,&0!C"ADX]"@M
-M`T]&K'M<;H]#O^LZ^NX5RC6MHPK&XR:FBM^6@I+$LR4PF_)+DLTPBD!#>8F]
-M2'2WZ"C5;;:C:[=_>>KMV\_9V\)W.%<CI=OFM;?&UJ.*8F9F2%(8A8!0EAD0
-MA3(4P"T4QM+511:UJK?8%C9VBW$X>?MLI3>G:WWB@L+P+T)<DJ$EZ$62#`C(
-M4(4)$HRAF'+$\9)T[M2O9#UE^9+,O*ERGU("I,4J#'5=80DH`JZUH24H:[AI
-M"MZ^7UF782N-.G;^CS.R[G<W\[CBYG7!"->A%0IB(11$")2(E("DD1&)`J!0
-MD%@I!A(I-$T(.BI4JM:M%$1`9U#.4KG74T:5Z[JS[3S@<<KMJ6RV&P&R@(0E
-M`V9&$,4D$6&08PR1U6MEED^)CX_2\D\/>Z_!>>-STX-\RWI+Q;FZZ%$+U2F%
-M((0WRMS(BE``0DH',R@PC+54E2J$)-!)<N98M[7-X?,U(J$+8;1M'-"B)E49
-MFD&$,T!DD,PQQ)B6K'/-M@5D,AK3V=?<V+D4VX;F:!FW&PX7`K;@)0H&R'$`
-M4@ID*@188I!9%A&"BPSCD4)FM8UECPG6Q[E>,>+]%XIXHI]$GBE12>*K[MLR
-M%I`6187)."/!H+I4X)VAP:L7&U2;6UXWC:YQ,O"RY8T&4RS*D6"!E$BR#"3+
-M50@I<D!@RSEE,Q&2&,#"1F29R9<Y<P9D%"3P8N5N<L<9<_B9W"I<.K!/!WAG
-M'1IM$-YIFTLQA2;44&&UD4!(:K"%-,D8H:M)JYI3KSEY^,EU9[8[//MWW+[@
-M[BM0U,!YF(<E,;6E86B6$2R@64(IBD2!9`*0*9(AC&FQ;)J8#M8<BMK:,QSN
-M9U-LSMWG=3:T^%3IBC0B`H"$$Q1"*("?$K`5$0`,2@@))6HM*,B0-#)`89T3
-MGM,T37'1OEUZY1HZ1O\_K^/Z/0[&PZ7;Z_7QOQK%HHLN(P8&+%((DB213%,6
-M0J119CBB7G7+K\*Z_D^-O^-S=_R.#GF_?=<")<$-9":T*2YDEB*%R6>?KN.?
-M-2Y.G7&4;@MC8.YMQ;SP;#0SF\Y6*Q(U<5U#(601(`1TQ@.PM5B%H04ADR"+
-MF9UL.`,]W.4[N64]/L<G8X3H=5O,+IN7S"U48.`',A,*J*`H5(2["B0I()*:
-M*I)?8M5HF&Y=O[]_0[7*8]_WWH;^7F=/I]WNG4-.-WM-M5O&BF@:52E231(D
-M(:,`0T=&4,:XPVZ;:K;Q[Q]+\K+"ZY->YK=^KKI<I+K4%$N5*2F34PE20N8+
-M(4DA4/&JI=%+HW%UWMCEEW0ZV&_?U,.OSZPWEQ,)BB8J&$NQLR8FJB%2&*0$
-MA.8E("R248!B87CKZ5U'7^F_%;_!UN+LF^[_4NER#KNH:@7,*2B%P(LB`:VX
-MU5(!4B-I=:K-I=5M_@U&#O\"99+U?>_+^1CP8Y9<\Y_0KH&>6<;59S)#("8"
-M2"PC)C12E!9LS(O,,7*Q1CJR\?5XECE/-ZW;?D_3^C\CK[,"_(9@8!B<`&+3
-M6-%$E$#)`%("$AL@HI;28@+2F;.G::V!=<Y7/[)9W1XNCI:6?I0716GA56>;
-M=NU".FVD*)M8,)M':P%D0AHP-K"&HI8-IQPY!/>>\V;MU]W2.QAQ=C*M6)B]
-M3*Q13E,IE,D8Y3)$#(5(A#U$*9#)(4PF9FQ,L^/CW1>/>XGX?E?#Y.QMWMW(
-M,2\W'"84)=J:E0*0@D"]A`9+V4E[8E%TZ=,OM:NG=TZ\&'@]7X./AY;CD,#@
-MX1R.#A-F<V354H,W86=5I0:F#(8,!2(0P22D@5)A#8A@,<:K#4-/#8X%;>/2
-MY5X<(TC2FDB&E(:0R1(32JIOT."Q$$@#+)`6$#,((&0F8;]3EK#(J2-K*&IJ
-M1V+%N>)Z3VE$Q,;Z*AB8:K2P"ZG%C)@RD)00\1).*A*8"0XIQ1&<7,</':.T
-MX/!*X*+GG"G!4.$(G"`X210&`H'!`G!5D@@\*A89*IE$C*17(9*YCQ#=7=L<
-M39Z7!@#]9T-DAPMHT6%L@DELD&*9`9"4R%`!3`RF"1'51D7&<&Q21Q3/JFKR
-M!2W^3O<KLKFLYP[K[^:_F@D0*_`4>(@"/HTT$S1"*#)!5`DR$<U$9558+.)T
-M;+5=S9TRM.'S^SA<<)S;]<UW5"I<C+@+E2#)+F4PYC"R1`+AA"Y"5*JM;"TN
-MMJH"H3,I1RA'.$VZUTM/ITML7@]7>B=6*"!8$5T/AXH^$4&8)4)0R`A"RL@+
-M)$+-%BBQRLPCQ.GR#LNS36.Q[,I#LX'9ID2Y)<2X$C)#J^HJ060B'NJ]V/,H
-M]WJ>).A-^W:L6:.YP[YXW"G7/6/E=QQN%V%V]5V!&:=)E,*126%*%"06$!AH
-M`@@$T`04`S(-7:N0,DJJI"DE0)G:2$K.D3.HO..`Y_#54:&W3;PSV?+F9Q_!
-MZ.S8XF&-54<#&S)>XHD;4LU)C).8(',M4@6D@*$,2]QMCJM2K4J50I5H&==F
-M8.SR^&.*+<T3K=&=.()G!23.$X`SL9B%0*0IDH(+@@LBD`87+5&"%L%5&$AA
-M(BHT7&`N-JW1HT0]L#;X>X-T;.]`^X`XVJN`"TRSJ"2HQ8`P@4D,V`,SJJ4S
-M,TAIR<+]R5Q=_IU[MC;J`SILVX+E05$L@55>#Q>12Z20"(+C$5083M@8I321
-M""R`8P,4%2'@\ZCP=%5\*2JV:U45&'>B&UOP4ALU+3;SH===4IL%FRFA(9HQ
-M(,`S=B+)(U1144T^+A7;<SG;CVW/#1-W092\ONF4IOBWWU1*5+Z(-]4Q082B
-M,&0EZ12D@4%YEJE%K+H+BJNJ\ULYVW=9TXQQLIE'+6E64%N87#'*:64!B"$R
-MC!2)(94520$G"K+<4@QA.8*0#II"V-V[K7+(IZ5*S:6JQAHN1F,N//!0JO`/
-M.XTT+)C$!(8L6!J,A4@8,F(P(D@!Z01&KP4O&BL5G0IMYUNM3?="F9-(G$3B
-M")LA1.1+(DP8%"2B1$)@0F`@JQ9540!2=-5)S&(HG`DD5M&W4UN5V?0[7J:>
-MIG5FJU9'*JN!75`*8$K"HF`&$9&!@,!D#!BDD0,$*2I@C!,*!W-I-K:.1M<_
-MG]3ZOH=#R_G6U>9JV+%FUK3=TJVB6AHM6&Q0MH#I30T`D-%C)&$F9(`DS+5"
-MT%FF[-D#-,P[F[CMZKF/5[V<Z7*<Q]$7JM;0T0P+#(54A@00J85A$,(2?"`2
-M0JJ@AJI0':,@A#.P`9,\SF=3H7,,Y<G*.AR^WTWOB]]\WM>#Q]-NS9L%S53'
-M/.IF&:JQ"9F=%(1)"D$5@I20J&21<C&NOCQ>QYGF^1Z'+T<>3Q#9-K9V3"L"
-M[`PF$K`P)A304A4'"HDF$84R5"3BJP1(4DH,&,.0[-%K<C9G.%T.7L\G:RX?
-M+>F[,]F69LLF=BJ-5DS-@FQ8[`-C55<X74L9"F(@L%`9),$)&8*:>"NJA!O/
-M2:M6Y>T\[C=&S>@&V^\\CR../.AQCK"C`CJ.JBI)2L+(5))L&$B138D3";.+
-MB,>WQX^9X3X!Y?GW\>'':K\,!;@OOHHDJ0O!581(`7@7L1KBM>8/"8S%,.'+
-MO=KWVO6.O2YN+II=S+%I>:I"\JJ"7+?02@)2L",N1O:3EN2[<[R06]>Y<N+T
-M:/F]CW&GW$C2U+4,_3@GI/2?`!!`R?("2$02"`"4C("YHR*0B29C9ST(;5R9
-MS6<_2Y&U8O]\>3\7S_P7PSWATY#/Z!S0CTX&8&<S7.I4*B,S&,!06&9(8LF:
-M+%D4@AF2RXYTB9'EO4S]Z>ET_(/\7ZM\KBM?=><)A,,)?A!00#`5(,D,$@L(
-M,.;@%P\*486PQKQ,)VN$R\JU9>I^2.=Z7I'@\SJE=;AZVUVAM-KMK;M#;`7:
-MK!DAM0+,E20VH(R4A)4=M33=1-._Y&CZ'8]#R_+._\3O'_XX&?UO4._U>AJV
-MQM'$P#!F,"HU1#%%EU4*`P@;$:=VT"R%F4R2@MU*HHMT^H.\9]GE\WH6MW?E
-M][_=Y2]_IZ9-O;Y5)B8!@LP1F1,"82<5%@(28,IDDH!<##;97*+9"DH6SW9I
-M\3N[V;G=KKR_,'9<ZN.C8%B'9@APA82$T%(*&@!#"$6%2Q5((0I,XD%((0#.
-M&J!GJBC/GV<YR]#T3H]'F<WJ;/8;[NS$]3:V&+CMVQ'4A@#,64`8L&$Q10,;
-MJ*2!<$**J$R,"X,64PK%&8B\&QT/HCWRG9[&.9*F;-UDN<IFB;.$DD4BTJ&:
-MC2$E"C0`<8U22)".-#>T04D9*JJ,!<.''?UCP_7__33SZ>>='P,*Q,<&L7'(
-MFG-.DXNG24HNF$TQ@I!`,D50(R/0HS*9GF9U113Y7:U'G^9CKQKP&YUM9T->
-M_OX8$PDP$88#!@8(B09)@TE,`$F$5,)@?5XE7[_F=8ZIT_*[?]#T1^J]9^5^
-MY_;9.OY'(MB6QM&TLV"S!`4+(P+)$(&(K%)(DLP;"F,<:;3U+FW.F9'5S[NM
-MM[>OR?&]C7(V;6Z_&:A@B8&!,,*)1*9(P`P8I`0Z4(#JE22`Z07%(;#;D[>_
-M[\@8>W]UN9_)O[M_GKH:#S[[N]54G)RZ&C$'0J)-$:J@-"'NXR,"&C)NH0K1
-M$L#5:!RTM:;W*\9Z_X3S_?_&X^D_H#_]]X.[W7;ECM[8RZK#:&-@<6D+K29(
-MP$DLL&#(3%6]DER0NC8,+6JCUAS7'F:F&'"\JO7UZSNCU7E;$CTUYF`+I%H6
-MK5JE006@2,D481$!$1(5%$2`4"203/&1`FLB@03.9S.KGG<'.'J>MU^GL&@\
-MGR?-/TO>_ZSTO79,EV&[C3CP-P*2V(#J82*(!A&`(@1'41VVK+]0&()`5UUZ
-M0MM\ZNMK7?]?S>\Y:^A(_\UV'88?5Z>I_<[?K;NC>->G7FCGQ=&OG#7D->)!
-M8"P2&O$"Y"@)H9`0-=IH=;7US7-T];N[G/JC=W.]-WG^OKO:O=]8\\^5]`?-
-M'9<^GTL#<%3E;E6J*LF15IBI54;B52"2!6((#E:HARQDUI1(<B#$",.1Y4C:
-MP<BM32'P!]?7T\V0C,RC/Z%?X!C'CW%&9>)B</-%GFIM-0R(?2HQ1M+(S@P9
-MUX49PN_PEF,E*,83H(Q(*`@0X`A2@`4",1@#7$\T(HAJ;\W0T?CC&[<2>[NW
-M>$4:)#5QLY8_09!4CE3&JH3Z%@@&4112:F0J0#38+IL/*20W["9(9$49J'.-
-MR877489,.\W!PKL19QJG?>NF6'V;%_(77&%J\_@\!(A%AB%]%@#Q0@`O!8$)
-M4$D2$68I"DD+!<6;&$N]5F6QFV^^G/WCZSH_N_YS^`KU:<<>C,C+(R0J@Q<H
-MH%23*U41!)#YB%,O9F*V&'B,+$S.9DF:EM6K(Z[I<5RK6NO#L^Z(@^YP)#GA
-MRQP7DI/KGB!A@#Z/@$/(I#Y1D+08*,":BBL@)%P9$+3&TL-!0\\^BS>WNB[S
-M5AJB'FZW<Q1*O.]9X7M.^_/\#Q@K.N)&7@48Z(M`1TG!#@A.!C!80IG`+XC4
-M!A)P,%E]68`@5!&220A$<1$<;&1B**?/^7B_,4KI\>=L<3>V;5K`>3FV4TS%
-M0U'`%Q60NQ2H)"ENHA0068HI%D0,:9IH,QE50LZDU'FAS+J]+G9CK>3N_TM5
-M?M[/MOEE]U]>I*PY''##$!5C),%(L8)"8VJ4K`]VP-2$M,2D,)CR/)R&.2][
-MTSZWY?6ZPK?3D8'2\SY.$O`P9/#]T>[PL/[WN?2\VU101T4C&5$!1)-$44,2
-ME8!K(JK&!-#(L%)$#0IGI-`:#0'&%H45ASK2VC9'L/]/@>)[!E63Y7C45P),
-MB1@8'!ZG<4]41ZQ%&BD471**FN:&:[<-$N60-=@BLC"&BYNN((J"B"@(H%*(
-M"I%H`B@:)UMS!Y/K_4>X^#Q_J[PZ'%,B1SXL#2[KTF^JX*8WJ=6/'-'42E1C
-M2.DP)192(-)@`-(JJ('4*4B"4$G[])+(>RA"C^GR'B:J.24UR!Y2\L[GP?E9
-M>^^+6K>U>]W\'`^E_*]*]=\'!@PL#Z5\;YS!BBX`H8B0O,H,AH`%"@*`22!3
-M4`VBBL,65("ASHR`S:QV\Y!AB'>'#NR'0TFS,C(P>G/Y+UGSD"#WYY!H?0K'
-MWU)/HZ-ILXF(\L^L\L30&=G!F<AQ!Q<"'$%69#A&"P$`%)N"*2(2DJJD8$8T
-M"J\0TJ8-&GWO>_/]#2[R+^IDCH^>;^_ONG@7WY;/#[S=\&C7?Z^N:_3.QV#8
-M38V$UZ1-@V&(!L,&,61(0X&0668?4VH@,)PBSR5X>`^DXN+_E]-Y0]WD*XQ.
-MAXD<&[C=>=DIACVSJ4:MW.UI$ILH9L34VVT,X`XS;E.'$X$VF;6X\#C&(Z3`
-M.G(V2I#I)#4%:JZ;8A2,$8!TT48K%@DDY:"@C(ZU22I.6*Z30&XQH$,YFYN@
-M3-L#0R::E\'B=LWY:3`0&^>:-)^-'<>4C*"`^DK+=N59/6@RIK-P^ZX/,.'?
-M.'A!X;(<)#Q8(HR!PHH,Z:$-U+,(5#B1%XH<*;G?MW^(XZ^O/F_8^#F<IRK[
-M'R?!^Z^M^W^U]OXWB'F279/JOCX'M\LY>%B7^%N6<'&GC8VAMC;6P+6U:/.&
-M;7KD3DKH'2(@A'I5%I*A`Z3%1D(PZ21*Z0$B8`Q-C=:G$WO<&3<VC+MVI:Q$
-MI0/97TQFH3+X?HGHS>?^.KFYUN/'D"7AX%]A8F#1CC7$R>D-E*24A+*1BDA0
-MTE(`)%)2%*(*)D4I@5(3C*B(J8W7$+@XTH=A]MO6\3[#VO$B("'S6/TM\L=Z
-MJWY__<V':7><1V5\M8A#1<7&):3]D--^Z:F)!S#2$>:65-,ZQ_EJHTI#,"95
-MRFG?OANL^[$"/Y^Z#TT8BFZ!GW4NC&)1+I)(%PH42V20@(")<()%LHB*%-S>
-M[_?K]+CZ(*]3J<C2I\CD_D[Y`;G.71\#L2?DYXUTO&PTOD.?NT>01(\^RYCV
-M+F81;Y'4GKKG5_<J<GY=L8J^I=45='R-&^QLO,UN$)[S>3DS[X7]AS7Z.PM#
-M`V.CL#9E$%X[/0()V;&TB;3`NHI4W@F]O)`8*K(P"]%`ZK%`8Q`C$!`F"L<#
-MJDX_KX"!*!,Z\=_O7V\LQ]I[8[7AQM1NV5.=X5,ZIG9,2N9#)]]?-_%_?.AA
-M\L!FB4A,A78\D0JWU/\CIZXL(RI2&C92NS75;=I48KYE31%3(6WJ.+I\?(KV
-M\;8KQQO^36PFW1EU+[=S!2Z_N+'LAK`;\BJ6;V_;CF\1#1WO"%%'BOA/#/"L
-M\(3PKYJ`4RD5!^HHDEC`H8&!G<QP,#$2`Q$<5.8"'!Q(YCNG$^:)B<M<4^TH
-MFK1YISY>OSF>V\UR?/;I;/88"BI'T@R%U[XFV<[ZOR8&A45^=I,9=[U13ED^
-MCH$16\CO2FIF,_BY-<?P,ZI1<WZ=";3Q9XOJ8X4^S#P>Z'=^F79U\/7UP:VJ
-M-4PZJ!O'0(+22HC&,@?Y&=QD^F2E&"3R5?:2@,>.#X'T:5X`J3/QG\_K&2Z"
-MP=.)MRD=6;BT?3S9^VP9B6Z/V3$@,BXG_[&)*/+2^6A0C)$DF^EO>]<@V&XP
-ME=*[>=E&:Y0Y%I75I".K=NC<K=,X7U!,44X\KIV/6U*&OEUG)/8J,+RI40[#
-M>"%%.6T*'!T,Q$Z#++QLM$-)LM"M9&(0<*")V93T6AIE/?,J!"Y`B(G6ZV\G
-M?<GK9#O/W']#V/IN&SC6QDG^VANW*@GM"1\1JVONWKH$[4W29'=M@ZMC')^!
-MQD"-+M*1R_D%3[/9]/4UE/RW;]J=Y&+WG87?RLZ)T:;:25EX'O7I46)KYK63
-M!#'%AY,T3\B:,1-?6UAH=P[<-BD.XL`\E$8B))UO$HLRE21D!/1@&PV^,0!X
-M@]F,`]BG!2JN^OH?3J=Y/;(7(KS/^G@1V$^L4U9);FKHY?BU7:S"2?4[]7V-
-M([(>8M+$ZK?/E^=9&9"9[:-TW0H5G\+T)*2T(G+V*&7QN'!J4-#(\+I9?PX/
-MG5,O$P]G$'G^\R>Y:Q'8(<L3\W$KPS,@596,-NR_:M=7J_3^?MZGG'Y/C."'
-MFOGR<3YXC'SN80%1BBBP8$`.XH0$A!K*H1"`%&X.$Q=S43JP:@:VO0_`9[G]
-M'S?.D^2](-><AX^YR>]P'[YQX<)^#^!F?1=S6U7ET29M.JLL?17H):RW-RP7
-M_AN\)44@?F#EOV,/_TSZ=1I[%I8?-H9%CFZDNA,I4Z3>'XLK"MXTVG#/P)`G
-M5:53;VZNUM;+03O57>QU!WULR,JI1)WT1%(R`=_O411&?(0"I<@DW(=T_-WC
-M[3C&/E[W\WT.+^@;SWGL_C>9O?HGY9Y'ZJ$XJAW;56,H[&'_#)PTQ^.U=@?H
-M/^0-?-Z2#Y)JM*1>]4`I(J7)G>M19'#1.>H]6)6IO@>+S,,X`E8V7@S9N,+K
-MD7)Q\M<OUL=6Q3FR<^*M8NYKET^FSMO;&V!(VTWKMZC;JD@;PI(;R#$%(D`Z
-MK-X0$CQXX\:!/,!QC0.`K01P-@*H1%45!H/CO07N[[&V<^F>;^LR_U_J[TMW
-MS4B61\"8MVZFYZ-+^GFGT]FP]JDXQ@L4^B5ORJXW,JND]#0=ZOMT05L:<1_Z
-M>7E;.I.-JEJ=5H^=F2A_!5L_C/97>5_BBCQO:?$SK&%=UZ=V.5I8]X/U,>9[
-M@=[E`7]N?QM[0(/3]*>F=?4P]-<^*H>F`*>V?3449!A`]-D6;PDP;E&#)]6*
-M7/H5^L]R>#OZGP,G@GA#[7ZP^C[KY6J?)R0OIZXEZP=/3A6L=P[6#ASE(>3)
-MW#:JJO/Q_T.I$*HIZ@Q$.JBM5WW`^/HP][\J^A4H+'4TZ?JTFDQO`7[A1.;#
-MH^$Q-O<HDXI]-GY<[Z5EE\Z,EJ26-"O/'[QP7*EW'$.5J-:`\O#KY;/K0)Y"
-MJN?QV]7Q]2KJZ>/"V+>I;O5$]Y\H<'/%&CDGS_A'M+Y<U7A;V:]8]ELT';]D
-M]BU%0/88Q49`]<8B1^^JDC`GL>O0#7P;6&*"W,H-1)&1.?SY\`XQ@>-:R8.-
-MO#"5((70P-%W<L#U!>'SO5F)C^[Y$8'@Z1>-.>AO..PW"'G>OT1O7YH7HJ;0
-MZISSV0Q<#L9PD!]6^9B(/R,.YUUI(I;?Z>JY:V(9)!?1)LUEK.@9M@HA_-_E
-MHP4K)2^.=S*`K9Y;3IZ+;0F.["`\GA8A@9':L-^,'BX%K-P<QRIS9_\TYX<M
-MCVIR(\KH7+W$1!1L]W#_N/A]WP:^EBQ:\9^SW5NT#N8E?-[/'U^2T/J"V>$#
-M-TNVZ8!Z8%8$%!J=)-@D`5B.D#VZ`IM"2OC4Q1$121`"WQJ@(R")P.)S$>)M
-M(/452SI[UFG9WASW'OL]Q[8_A-<J*(S/E9^<67#!Z7@#SM_+X@^'*?#K-^])
-M++!24IE:RLY2.G.=@I=A=Y!E-II2?G3%TP=[+T.R>]4U8$E/3#!S^6;J;%E[
-M#QK(.J:5VU=<1_M,3AQ`?O?#:>O@;<,]C^+<KM)G;F&3[5OU$!C0+R(#3GVG
-M3J/!6,;3IFG87ER@G="\[!+JHB!2Y%U=XUS=>4QG?]LHEC]JY)=:2<IA6CG1
-MN8CX>:)SAXUS:!6R^QYT8JK#Y'&NN>L3[P'2U8CRO\(I1F@I&H(03\K**R<7
-M=:VV-4I*A49N>WXCGV3DQWQ&,P--.REC)]+59H60/DQY9D*FL"S->0*O(Q&.
-M/'B(%I(2PJJ@L"$$8060$5061D(B$8D!9(08'EI^[1C(D^J$)X2`$8@$$`,H
-M@*!`$*ZZ@HOY'%H*`/V/E<)%EYFRP\&2&V\3HE^K9&S>L6C)KR)JZZ.V^J$]
-M;,!Z;&R?Q@P84,RMM0L[/5\6B@WXN&]]N]UBB)VX3MT8&%F$Z>C%&PO,BOOO
-MHJZ_IT,0P-PX5C<?[R)\%71OKIGQ&^@-51WS$['JDC8J#.;IMU$W*^3U]OF/
-M="+=?7G"#PG)96//82JHG9$3O;R/_R"@A[N!L/VA#OTB5*$3)/GLW/DFDP?;
-MI'F,-L8=_W>([/KA%QTV$0X/:HXC2?K^K['</@J=I'=N^9OGB*K"X3_O1:HV
-M9@DAZHFLTU$W#SFZQN*,M'6GAKS+9:+:`K4GI;60-<^<]T^FKLQ$M;E6MXO6
-MP"9I'_0Q\U(3KC9.`<J7ZPBZP.9/*G85@=7NK5)M@Y:YHJN"5Z4_"Z+15%/*
-M5ASQFTY7/.'[S-IGO@\[V/\+VWB?F9`]PSSS#UWF7'A+`];!3L$)YZJ***$/
-M.A0TC&$@H>$BK]VT@L`0\X3[1GY#=YZ,//3\N>@>ADJLW@^XK\I/<_YIJ[WV
-MO\YR$8M`2:C;T9IW#YXI+A(K8_:>$ICD[BO?TRD:U%2&GC\P<<&90?KV9I.S
-MXM1H*+Q)W-_).SB$,>8%"A)X43[[@I_R*83!:4>WM/)9\[^M>Y6.)OYY1Y[U
-MH.R=T14/ML/V3XM\;5&QLFB(V'%;$9EV`J[#G/T9#8?)D71ZT,5!_&+C#"];
-M6>'E=@N!.-I)^!82HG?2YK\TJ6]!^I[U`O>&,^WC"%D$<TG'[A]AI6?FF_QU
-M,KKGL0`\![/O9X4-#-+;^_"19,I&3M%\^F(";"/&LGYS0/#-N(T;_6O,.D?,
-MQ$)E=U#H(ETS!]PH9W2T:U09,8%I]IU97:Z2:?$V1I(H50^U*NZ6VG6B#&@I
-M9VLK&,.4)"Y8PBZPT09OCR0ILD?+.A)=ZIGKPKWY3!O-@99NRE^5<83U^"G3
-M7=XE(U&C$?1S'+R6AQ$GMV)]DA!56'V3`*#W"1&23P&`7S#F`Q$1Q#\S7R&+
-M2-IRCX",8!&`1L`"U"4<=@`8`P>YSH8?!X#SX324!1_W+I6,TG1GX$M,^P1!
-M+S[]WL`&1=4AF\[PH)95Y-2;9+!UDE>?5K%&H5X399N=1M?SS]?VJ[*`Z[J<
-M-CZ.X\`CT,OQ%)OT<)[W88NE&3,(#?^E"@[3&-GCLLMS>A4U1UYX^NWU[.LK
-M;6FC0>?'FNMG)(F[50M?/XTRYU]I49?/C'.YN5]][@LM0W\8)"ZW".RAF*@Q
-M!'R;4JBBW-$&EGO\=0LS5+(AF6S.SO<=E&G'C+DZ0[]M:)9T%+G3#+ON1NI2
-MPD'O,1&X=VQ$DGP-*X0;;<-'X]27@!H%X:A.H[%WBG[:ULQ(B4L)2EF($Z,A
-MS3[G\YQ,%(IDLB><#VJ(!)C!+9F4B8"=&`ROHS65RG26Q0,NPE*G-X=M$S$.
-M'6U<Z>Z4&!L?F&):[T1KD:WK8\4`G:67B77+O$)F6$QU7YGO2?WO!7C[&Y[E
-MGW'VQ_%\"Z>_$9ZRO+)/O8JFFR![\%8"'J$!20]^BQ$/:)*8""PVH?(ACAP'
-M7`T\A`W*PQ5$/N+4T&G8*C/!F?]310_2Y548:[99]-4K6&[I8#_S3JXU5%3M
-M(U:.&S^`*W$WL+S-7G*+T:#[YX?<?5#)XO-\);3MZX=?5A:EOM+<%9%J9SEA
-MP@'F1AFZB,#`\WO1\O29>,G+BWSU7X$;+):PJM_>$:>'XK/8C+'$D`]J'O4G
-M6PY*J'E&"68MBV2;MJ&8.N",STQ@?F:F:9YGU.EVL]Y871^T7RJP]?K6G!MV
-M%+'^M)UFJ4>4CI0O8&67O8Q87L\)>(DI:\Z+1L>QJ&LO]6CO*FU0U6J\*#?A
-M[E6C?;[):YL:=N*=0-Y@WT<VYLJ[SH<.59X^]6>9<T>^%=F+COK:RCYGX-AS
-ML&H9KI*G`#DQ3O>OEM1:[M66\93RNK:120N4;ZIMWA_-A6?B1*MNA3@_Y*IY
-MK#-QLB-V@;XI(/PV6I9G<P]&*%84@Q14LI53GW0^"[E%ATU7X478KQKM%9*0
-MP7G,-CD6$XX#^$)4Y(+V.V/9[,.$YHLU[/K,#<&6K;/':3UC+6R[(%4*5,78
-M7[1$!H=;KVT!6<^G^%;W?X(75/A?=>'NSQ\A#^?V>3C7`?#%!9#S_O_;\`R,
-M1`.R3X9+J"@AZA@4R'O6*2)#Z'H'PT^3Z40'SJ\X=#%V*SPZL]J!!:$[*G`>
-M16AW/%-+[(:"&P\;4Y92L>?LXJ*Z,Y<A5>(%1\)GP+`H=8HCKL64K:0"L&LQ
-MF<;#2M"KUKIVD_AA1J7H)>26C`+X/.L@L=9@5BB)*XWPHZ9RY!@U82YU$,,Q
-MWBWN\ZN%N%F2P$!C!D>0DR2DK^J$WJEK:H1";Z3`+;4-"@H.6"'A-^K!VG_9
-MFCPYC(4-A[!:J%UJ\H]M<0Q].]#A:O+`'E"^V<S/M,&SP*3W>Y0=S'['?4YH
-M;CA$SJ=7\8)'$K.ZG:+A"K;J@)/NI*C*5^(Q]V>V%#?B^>\SZ`A?JU&J,VCV
-M_Q&#7MS87?=\KH*Y#6+))D$0<Q>A6/B:=BKLL;DCTY=4%->L.F;KC@\Y/UTE
-ML4+:T"]DQ?!0J#F`<TSXU3G:=,H_<4S[Y*5Z.Y=4Y%^?]+H]YQR')B73,(8?
-M!$Y\WC14;K]WEZNP7/A#U]3WXD;)'U6P,?WD=7_;3U+PL=PDF-]W52M2[L7-
-M2L)3W7RY6B$I%'""M0C&87Y51&%O48CHA9>-G.<UP?!H92M<:3:W^X2E,VJR
-M^NGMA9C59MSS+++TS"`S8W*=0HFTCQN37V?N:I9V.4D-/M]A28E^V@*+^WT>
-M+=J[&%>-#O07N>OX31K="'0M!QK&:-JMJ<CZ72"?$A8PFJM]D&_'.&)*K5!>
-M@H9``=NQAZ'5'`]$[$[3WIB<C`(QDVXWQ;XR$X%B'P<8B`[UI2+#[9)#[I"6
-MU!46?B$E0D/D,GA?I.?0'WBI#Q-5$/T[1[MGM@>>RCYZ=:@^I]S/5^?3^7JI
-M\\5-@H'P?BC.B,#W_42;XSP25C:X>_PCTV>%,I\`"Z3'V<1;\W?R!`<$LBU[
-MD0S-4]KMHM8G%[:9_W`PCA-G@+]>H?NSGKDDWD[D2&=Z6M4D'OHWCQ%>WXAV
-M+*BKES1"]#>!WW4UHKK(^6XPB&MZ=#?/Y(U@,6Q'N?TC:"X)S],$W6N<_S7M
-M#SNN;WMYJU+3^")NLFZ[E.B`+/.]I"M-3:"L9&^;D#Q"RD,M:.K10TA(0L#,
-M^]84EAOGMA=8T_1N-#N[2"IVMM'!^GZ7I*K'A<&%^>__MF6E-'9N0GD`VN)P
-M.]W(74:'RLZ:W'RBLX_CZN8F)F9G3%VL*%I."FX1AXLU/&]LX7H,$O;]VT>R
-MA354>J<*(7S>Z5@9VFP3AF>F9QIL6KP2K+TXF6PA-W<()S)_W37^O333C3@:
-M&2@=#TTZ"YM'K5@0`:D/S\5[T(41"#X/Q<0CZ]E@Q=V-M=_A\^7XS`RGN&9=
-MOBZ.I=4.W`A0AUH9Y+F-MTZ2G[4HW+_'G"9_Y:JT!J#Z0W9TNF&_ROBLV?:^
-M+Q"BQZ^CO*Y>+<09(65'F!M-$6N\G!.337V(QLRIA$-A>"C09?=6-?&UG4X0
-MAD,L1(-%2?5B[,!;G`RU^:?$'5@0-0EB!6]+5<1Z^TIPGZ3.B(?P;7$&RVQK
-M>4%U8,-D?`V4Z=+);$=',HWY\X1>@).V=(:!>)WH_@*/O@]R=1G3,Y(C78S*
-MH(N+5U4^,85FLX./@BY^IV!`3`KV'$[X0%$1:MWDZFX2H96&[/',$(5/#+^%
-M:I22A55W9OAKR$!K26&L1'1R62+?,*J;&_)N?'C>.\-I\XU\]"0BK/F1VA4)
-MP<?8.(!#HF?U74;J3Y7.KW@NXN#G@1J^YS59W.WN[24^<_E)MC$#9U?2GH[F
-MBE,^9>2`-,'5KC2&TK\H8'C(;LDX570PSB>3$#Z1K^J.#L"Z]J8#.@W7.`M%
-M!(/`/!C":0AZY.`K&",#L!DA3/(5BP_42>VNWR=_/(50,\B9TX*XP<*T#CQH
-M+LBGC3QP2,;,K@&;V.NOO)T37^G6T(@W[.K>74Y=90'6M*W2SEKQ\:J+@.K$
-M&;06$``Y.*L=-B,P_$'9OB0)$"1]#,#>>:Y=@W!-4$AM\IHMN4TW9A<S@/=S
-M]Q]*QRXXDYIBC;`<C-,O=V(U<)!JSY$X+K;!<0W^#_ES'-L76;T+?<_'_(?A
-MY.#_IG<W!=A;S79FI1Q7>:6%VKP>'RJP>*DVOU-@52EF&<A=^._UU*9[&)>]
-M';+'4QG&,]NFH/:&9CR!:$/0]<7PD',:+.]5>QM.;W-A60ER;:U5N]<A69?(
-M<`]AY!\:<X6CSSKD*WQHGK`0HSB%*(:&_9;D;@T!/M[EA-'5AL'=&\85NF3A
-M]PF.D6'G/_X>!CMF7Q[D==POQR!1+#BLCJO.$>O>O,^_5P<\)/BJCMKM><`[
-MNX_`V/EGZ0.#15Y(?,F_L\FVW<!U9/HVGBU"F-Z:UN;M1F>_E6O'!3>#1[-P
-M5D[-IBQ&F;(T8ZI_0N_9_Q-+9&NOCK=Y_WJ#G$=`P.;&N]CN[8*M]6C](,XY
-MYH8VD<+^7_?\8?;U"P!%/ND6D%VML;.2MT`+),IDS4<-E4+F8^35'>\N)3"V
-M:XDX);1<&-89YIFC1G`)`R'&AZ,ZUEE4?<W81J+V6L1*"IW$(T'1EUJ"G!/F
-M6C+-:<SFP@[VK6Z`9'6?N\C=(8WTZ-1&INGNO(WM%T&]G)O_`XFS(@1;_#F*
-MUG+81UD^#K1BT>*1B-CVS!1`1&QRBZRNU./^AL,9C:5'#E!T=?;V.:'%DRES
-M'OJ8`>N6K4FZE#1U:N/,TOU<R2S`N;L.P73)RJEBS4$:H+<B;SUVQ&)^AW%)
-MWU[F6]^APT&=JQ6VHXYNT)J.?]F6H-";$ND'5-"(U?"\KKB*23A6T9"$,.GT
-M.`42EJ',W_/S4(FL'%&:25'4EJFH4?756HK);.$91Y+,O4H4@\>+.K9N2SV,
-MM+;)<X<S,@9R@@;9]F..!:I!N??BGC.4!J^PCOVI*KV9N1W)<NWTYIKFM;WQ
-MA;[UY1Z_G.[IW;A75=.39`5FERI:+;&VD26I3K:F?I?C%1))[^']VVI.K0('
-M90(#7W#/K7[\JRCFR?M;MPX@%DAL941>T#WT.YD#`=;F$$R926<P@E;HD829
-M\"+62@L@-3Z*JU[Z^97=U8/VU,8;,FC'OT&81'$5==".=\#T`0YA3(JKDT$<
-MU-F`6ISTT<)8`!D^;K4<T$(HP`ZC%4G8JP4%DG[+#[9#YS(*"_AU2/S$FCX5
-M&0AOU/E^7<&&0]UXWZ$N3VK-[X$/ZK<SG.C]/VOA<NR46B[`4N)+W7S#5Q@R
-M-WWGE?R6SR!V=/N3^[_65`9?:AJ/4:]RSK_$5IW4_RAY5H!QH2SIJ(@G[QAP
-M\D:3IY/#K];)"SFJ7T<?[I2E]]0:&]1R+#`F(U/:'!E&*@]^6D+%Z-#33M.Y
-MUS1DF*W\&W.""]O$HDL37+I[L6O[X70YR.-0CKH'5Y/_<#SL#J8JY?+V&9>#
-M/U70PT51@%D+"U*<WKH*<TA=(,_Q?D!M4>W>HP\C>9%)=\`XCIS%9!R!/YA'
-M4SA\]RVUD-0&.`J_PX>_MO``SY+!YAQKZ)K#B[N&!/MCS-TZK=DL;U++>F3*
-M@Y=[6U:Z(>J-_F'_.WX!;Z3[X9=96F;V$JM%XCA"VPU,.06#06C<NJUV;I=T
-MH\N)?9VV4OZ`\H5J83I6^'^Z!U1W;L?.*GNR6\9*-ZA#@B3LB,L\*5;R$H:5
-MEQ3P4AMO:@\Q?\_7GS-D]M/U\,8?K*4Q/N>Z!X-MWN96/.`WS]P)E0J`-HA-
-M7D!_AX)E5"OQ@?\NC7Y/F"![\.$T=VO;354>S-"_.=S9FAPJG:,-%3Z&AZ4=
-M:V%#?W:[7>(12,WZOR_4E7C3!T:?@&-5E!!_,)KH1[=*[-N!USQ#02O-Y+>I
-MY"-2%54K2?^0;Y<&4L%2&!>7Q'#A]XS^)`:J/O[NCZF*LT`]MMEU>0:..IV/
-MU*(T/FTP1L]KWS5'`Y7X="#BXUG=5.&:+7'>L"FS).6)'+_40@+/WTW]%F@T
-M@2/B&O^,OV',!R`?3@"5R"WCW,3?LIS24M,GCR&9G["]==T:&>Q*$A1J,FS'
-M"&9^6Y#_V#1'-(MZ[RQ?J<A[&3"5.^370@.:%37,;\L=8@<^P'B.>@K94FA$
-M2QI77=Z@^*/8?#$0X7P6L:!JO/MS@A!^^&;.A/RIH>-1Y1?:(UXF+NE,M?#T
-M+[:;,>E'C&R@A`?,&^@Z7;SY_/>CP(YGO2RH-)]HRRM7-/V="\W9PX]T)RM)
-M^WGFXX"08N2H?S1FR9("PS)PS?.Z"IZF+^[M\.'<3MT/+KSL%3EQM(,?3EF]
-M!(=B[="R_MK*LD#1,<+>@=OR>G0G1:+VX?J[I%@7ZBZ'7<KBOTQPM#KJ4>\P
-M[2QH)3F*"D$KYQRRB*W`23H@N$DR@4*E>LL$QUO]!P0(0P**ZZL]."YT'_?K
-M6UDU/D\8[KWF^R(2"5&#;%:@O$<C3QW-`IXQ69AB'"7%OR-=HBYGPY1R)S#N
-M5,]=C$JX$A?X[/G"=)A_#R86B40H-&:UUMQR2F`UM`K9>:L3]MDQ\<YS!"%P
-MI(]YN"L.99IT2"22&+_6.E=\?DI0>O8^8!,1[?5#1MAWHD"+OO!PX5^SG!.6
-M,0#(,YM1"V*N[643BA]L=Q;7S4]WL?"MEZ39S5'/1,B]C3A-ZLF#C/]LX>*M
-MT?N+4HIO/\X:KBVNC/I%W>S+N*3PGJ9@"31/],=MNS<^FF$3HRP?$2+-X)@+
-M"2TA_M^OD40AT>GOG$;,!`]8Y)$0Z#B&$&1JR&Y]5W(T)I%F.4[)T08`6V=-
-MS.'2("&MC"`OG&WO#0*>YB#2@*0`<CWZ:U(YGD?*_*#]+]UN>;4_[>AZN@]@
-MA^>;YD/8,GYHJ?'6J]VU(0/D_%_TW$F_0!8""21?B(`$E(L6*HC`!8",)!44
-M545&,1545&$`%06(!%('QO@W'7158HJ*J"R+`_@,GP7]%NJI2'IH:$[WT_FO
-MNJF_8C@@PQS@N*CDI*!@8Q@#(?[/&,./RTO7'P6@2R^B$BUF?.(P,P+V0.`E
-M]IT&W0R0ED.R&=)JW\K;GT+SNYPEC/7_[G\+P`EY4W)CVHV:U#>T@X\B)5NY
-M6HV=E-J?).P['@?O;+G^'@2/=?R\I=*D`3/@B'1>O@>!*[SBU]U@)$SL30`C
-M:&/VCU4*:3`*6/+.V'[</AJ#P&4.@]56'2.@2F6VL@B-X[?+MC@<L\93HS:2
-M`3J[N;/B_'+28\#Q5-[$'(TAD3W;HNY,7P"<L^"WB,#ZD-/KH3?8%7&K9@_,
-M$SU(:PWEB"@]1FMMZ;1</YKO$7T00H^%/0GA&W,,$'Z>K?)2`%K<+^X754U(
-M=;.Z_)(Y$'+'?(M+T,:>(GVGK6>G&@VUV;VGP'@0,0^Y2>VP*@I,/E30?Z'L
-M6Q\)R[/>.T^WQ)2@V2GTZU2_$B<47FU2J.;X;FC!\$N7Z_&L5/AY>Z^-_F=O
-MAHY$&N3Z4PPCUD`W<1T)SE!W#@:$$_H3V@S!OFWE4>(O389=DZ,K)BY"PFGB
-M169)&!(BC?SB09SY5PC(KR'BVW"JUOSZRNELQO05-VN1+!U>6BH1N0>(!FUB
-MCBCC]RBYE)H"TJ2:!JGN.;6?;21TBN]D_H\-VP(??L4/=,]:P5`#^Q`N)+R>
-M(=+Q6#NW%0N?N='/Z'B'=QK>."M\B;S7\@3Y$Y>./]C0P\H<CS/?[GRBW)=U
-MLP[2$:?`W/>BA]I^B/$@FL:F7>8>!*L1`<!W>_Y^(`GDS*]1@);R'=J/I$\@
-M^"N-]@:8:;W?Y>_83GQ/"'+DLO'V[9TM@*;Y7%\"6OS50;DZ=+`0@(:X=]YH
-M[;;?8X.Y"3F@[/[R_A.%LNE@2)5B[V3A:RAP]F3#GK%M.@=-U('I`7/\XO`>
-MCY)FDI/8'87D\OI9T+K#XWCZR;%V#0*+&:V*R-8V_<A&&P(@??KSA3FDC2LJ
-MZ.0CHWT7L]Q6#A\-Q.$WAPX[R<%?$9_H#M?7A5FI0@+M;]&-F3H%_F_OKC4>
-MBUWC,BOX0[.;+8_?@U^N1O<?(0==97U<7['=-%/OY*@+^6NR4#HPZK_>4!?]
-M(;\\&/DU3SHX][0$/X>RSK]ED+BMRZ."8'W;[KI=&:.`P+CRXIB`/VYH+ZM&
-M3I*WT_4T0$+6'`20G=K*"]O32[%YX:.*2W0Z0C6)N+D-9S?]G<9X^0W,JAGN
-M$R>3&Q9\%\UZ,XY!N:]>NI%*C?5#!!"HE_:4J+5`0$'V#V3!.SNO:JWX<B?(
-M11WI>+$.D]7RE`PY84M+Z'G(1#:4=/Z*$PJ39?+J!T,W?J@HDT,+SXE$"1/\
-MHX-*;`IJ_!S8&/U6G^+U%G@-JR.H$WY*4X)[U-YH\Q;?C&R$EF^M,[:@0@*2
-M&'`AC?^ZI\OE`;*W.C:>/P^/Z%[$=3XS'DNZ7@_6P.%V+SI84&:.52EU[X;H
-MX!WD;S-6L0'"+*R30&+9X^:.E0?BN8>'GO5&/7Y(<U5KR]^MF5<!3Q-H^OQ'
-MGB?XRMRLG<U\I8D5T`^9?WY&AF$0'G".(N%<D2COO")6+Z6%3.1Z8,`?H60E
-M4$.07_W\^0D,YX"G4>Q+&`9M-UNU.C$9P,?\!H<[9([*?`7XFQ$?2?LZ=(7\
-M!P[+,]8':?6U1TG5XF@+</6Q0O>A!X1U-FF/?-?DTO1JFPBC*K`<QDXJJ\7S
-M?_6C`O'E-ZVKY"`0;8X<FZX1B$^-FJ0B%7]UN7[2Z=+(\:Y`P-2Z<\Z68NNI
-M+@;W1QB`Z!EX*P+UK!HL]M*`/=%('`=BP,UW[;VWJ$7$:`WP*\O'07`Q?GNZ
-M<:I?G5FX0@,?HR+WRUCKMAPCP>7#($6%/8A<JOXF\!$0IM1Y]5K9Q8-84FI>
-M*_@K)X:=2-Q$4<.]S'&$DL6?;6#6R+(>68FZ;NE+_H\M(S<>(E\LYZ=/8'1,
-M_]S04FV/QPK)\QW/*'JJ=)X2F>`6[3G!67(LX'#\$F<TK&'[E.M]L\0F^Q^:
-M@"HV7ECNFA`+?"`GYOWK9W4],AD.>Q[$[G=2[<[YKNM-*>*\E#=)3$*BI;[,
-M:5J/%VJ-/B8=(_P"CCN3LP%KN&K7_%@Y?3]<Z5#VN@18+VJ>55AM,?*N?R+"
-MP[SXHS_('QIW8BRK%181UQY0&MP._*MR$(\1K2:X?(9LP93H0M<!-<9!I#JF
-MZ#N^!Q]DV"POM>64RA"`F`!DOJ$6Z#A.+=0A@:G0^@*F0-[Z+%D#TN;ZZ8BM
-MO2V+`>:6`/E]*0A]EF7VYT8,,ID7FQWBH=9C;L^3Y=T(`M8Y(V5;USQ).SFX
-M0%M5R@A3HLZ@"6U9XX$D_RBMIRW.!+7D>&(#8J&!JY+P'BE?3VD4E8S/]+Y?
-M\`)\*4KDL;;GB3*,%/^_2\,^FX#36$6&K6E?F8)&'DL^:"NLG^,MIDRE@:I(
-M!(Z?;[2T(:MUL4E)0%9O_((D'RDNTQK9X@X>B(>N2!SK-V.88'8N,^<#QBOI
-M!N<(:GE`!,T>.V9TNCOX<A;ZXUCDRP[!P;^I0`\!Z\=T"+N_:3<U,#7U_<.%
-M^K9P^C^(WGFBH2VP!U7&W8G8G?`#;7"'<<-P/4!%Z]GM6>:*D]2;@4)!P;S1
-M-+/SF,T`&B5J];J:\=J&"(P%'=O%38F?[O8=_&/"EZFR(LEK09Y8K9DGP=_&
-ML.]WJULB(.#QW!?D(26%T@%C<,:^HM@)@\_9:=3S3Q?6I(N#.]ZH!&B$Y!%3
-MZ]C.`@FF$!IS`%]T;B'-OE+.,;4">J[K1QV]K5S$GJ<9-N>#@9V^F!+.NSE-
-M^MUQ"VKD((]_$-59OXCD''42L"%M=-U-0H,N^@!<S&@@%P(!3@K5AU"&`035
-MN2V;,XA#`I;2/VQ#?]CKGEBER(1Z("D_&X\?:R?_0R%O)J[@K%T[RR\--D!N
-M=/"O)_``%KK);;'QJ<L12BY3'AX&*KV0`<.-GUQUBWLO2[.YZTU]N";W_*_A
-MO>?"29/KE//86TH!*/C+RQ[Q:?:HS9!?N>A@P+!IFJ#157@%L;S!FB3DY+?O
-MF=J`3,?,_=CG<I5VWH*TF6+"NB`F%^'>,)!PY[R`5&0IY4_06_LUIO^K@(!V
-M2!N(;\E<@D$0,.K9=`@@1R!()VJ!!!'\2&WQC':;KY'R(>SS)789D*;5*W0[
-M_P8AT@$=.[NHMQ\O0:0!XR$[W+W?YE^?@4:*4-'N/1^AQ@]A^)1)],7I=M[S
-M[G('0TJ#TE/CI)J.CZ%TGW7\K_RKDCXH('$3?H;?Z6EHD!AZ3GH_<L@@,Y!B
-M6.6MG59(`JD`2,XD1&'V?`^]\C$_&S_@=C]EV`=B+%8(K(L%D444BPB@>L.V
-MJ4RF2@?X?TOHOY/ZOD_*X$)MV[-_D5?%E<00*"`$M92^<WVZ_E7N4$0)W4$1
-MXD'Q`X5YVU<E=%')5P:HE)^9O).8.1P\BZ1R!6B]6^OW8_>:,/8<&7VRFC@@
-MLU/-IYKCOU$]==0E?>>[*`B",EWWY;>AMTL@UM^:^4!Z.S2W&4:^RE@BPI?=
-M+_]1]9ZZSB.]9"\X`DF8,%GG3ZC]*+,`AK4.ZU6):Z/YXD.3.+ST?M+?-<44
-M((;6%M='K):S?%FBD.\[V:,1!7K'&VDO-MVR545@/_*5:;%;Y$.J&1`9*>QZ
-M_(,GZ?Z*5SNP0D+M@@WP.-K83>]V0@=)G^A\_G'I!$26\FSU(\)%O`VT3L1@
-M'R`Q$ISR4L]V.[_M<;-QB9:<2,/@#N3SK$CQ-GJ77JHWV/3)``>U:`--&OX.
-M#S-4[F;>S-HD(!=6897[+_$Q=2#@\GL'XZ0"A*>E'X%A(Y<;MSN=P:=`!DDZ
-M8SU\F3NI"81\TSO=V\\ZV/@A(3KC7;/<;F*57`S@<D\0%AT_S#<6!/_QI!OS
-M/`@LK>1J9/A>%\Z7QZB,P,&-^6QF$A(Y<4[=GV4J*$S<6ZNZBKX*,`L^GT;8
-MZ"L98KT1^4YN()"WR6O`M>51.^,R3F_,/F(@RP:2.FR=/_)D2YWC97@!5?/Q
-MNQ83BYM-S87.\VN$M:9'``0.&5A?&C%K[,Y2WZ+$U2(`=."QI;N@%3=H]VO4
-M.RP^8MD%C%E,G[AT67L.*[DH-W#&B@AI'SZ\&%)V"2_">XW]FCX(>R4KX+JO
-MY?]2[AHS4RF6&4LEO;HX!0=[X^!<[`LZD[2RFOLKGP0EI34W:YP1U-_E]&_?
-MO(R,O=$THQ`#)7/,=NF';*I6]W]Y(Q"&`6;4WKH@1[+\US21L6J[R;SW+1R(
-M=O[XGC_R+':MS]5.V5-X1#'5_C2J7%T=FA]BW7$$"=B(!T=$MT]G?9MP>&[@
-M+0*$O*1V#UGJ<]X+OT_#T%'(R\U09F#]3?N?,`(;]F/@;:/YA2]UFJH'1M7]
-M$<`4R:^9&@5@3/BS06I#GI[XA(AD&'W+M&++I-G&$SC7^9]/910"F?W]]V!.
-M2DE'->YP$<(9`>2#98/T`(^D-1/>VO>$=6(0`DX/A8^V$RM@-UGDMN#[MZU)
-M(%_ZFSBN0J7AY6<9\]F/(]*D1B`>6#V!(FN*@LL9E3X`]@/C8OU):W1X`&6-
-M%);EL8<?N";<UO>DTQ$^I^ZI6T8@&PY4SA<Z4KT;F-<=BXSCHI$(!MT-3S)\
-MNM?C]SB1M'*:L&=%``?4KE^RR`I*JSWV]CL@F2`U.*C$"YV*]O:`N'TY#@P&
-M[2!P_LB$2I@\`2Y5T>GYOKV%?%(0`RQ#UB-'<T,/3[RB^'?BON`4EZ\;>:?K
-M$6+EQ+T*YFZ*Z42%I83OWZZ01$C>.M(>00;UHM3Y-(?`7J&_MJ\J)\D=_M\I
-M/'CX(9RM;P7!'ZHX6QWFE@6.F12'U>,W%5XFY-)E8?-3<.AD2A</Z3!WH2.V
-MJQ%Q`GB#;R+PK=UX!!X78:TX5':\=92``K2?MQM6"/6>/!/67G\A"`PJNM)D
-MUJ&PK6W=C/<)J2001,\=X7PBJ\_X`D(*AX#,GCQ;M*(AUEB)#\]5Q7J>YUNL
-MOCR,1?#B_K1P1X\@^V$$LD/<K-;,5(+Y:3,)Y4TD%QQP4A`HJ/C:0#$MW12"
-MFGE?`F41-+:1O3+CE)QVIW<629$0+R;G7,#J?GP.4OUWCW".\2`#!>?`:AO]
-M2Q*^U#$V`I$9`D,'JJ@-_Q&155;VJ>>BC(&]4`>GX0MUK8WBU&HS=O+2N*`,
-MWY`.EKI<6?PK5H!2W$\+[56/G_RB8/].OP^W:]OH8LD>"X5>77@Y353MO>\*
-M"#>V2J*14K]+_:?+^Q>_XF6HY`^`L-&OY/(%:0[)9&F[5MC#P`_Z"\E'ZBQ/
-M@IT9TG6D_OGZ)`7\]_<+D3!X$(_@+IP3FG-``"J9Z-.22<Z)A`GMVP5"I`WW
-MRC$/(\+4XS'9#0<='`)+FL-CT>C3B^E_//]C<N8/@#LKU$`UX^(;;7E-&^FT
-M0$Y.79!,&W;HON65+L>+)^/OXJLD$0DFDKJ!5N!S]&8A'7X^`*<AV+R27D1-
-MOCY$H5+USNR!)4D'J*09'U[$YB(A`02XD;P(^>VN@S[5\JA#(NU;$7:Y/EP.
-M>=XW?8K"B])0`=P7G]`EG.82?EFKU(!.'T@S^:<O0`FU0C&O8.W4PT,`=<`?
-MC!F$8=O3PE`CM:*"@77_@/9Z<X*!61`>!<:[!&^?>;1F]BQ?>%$`R;MZP3FB
-M)HPT'8O3Y-5-_<H4+>\[6;UCA.7\T0BR=31@!P&=IZCA+;EL9K@>J&1P!--T
-M[!D5`)M>QO'UQX"$>"`5>_^$507D[\38R@FE*G4SR00$NRO-Z"H>]1-ZJ0J7
-MGO?^C;+X>Z[Q8)M%BZ(R4QVU[3"(<U:S1$X3L#KWO`&:>=;-4<4XD&Z#5H^%
-M20`+=ADJ<@EBTD//@Y5@/@ER*FP/Z[=WF(R-(GR#&E@ANN8X;H=2=7HY91!>
-MWSMT0BOR=X,>^'@7\7W@>AC("H66:_@X1]ZG#?TMR.KN62"`;,_=(P*-2-P]
-MYQ57<@\1"*1*\%8@?!J@+?KO"*?(O3/XV.02M760^0@$)4`AT!CKM>WO#9J4
-MIHE6`>U"E)A$N;L`<=U1AT]'<RW_;2H#WLF<)=8<RB41$M1*W>`+/<:Z7K(T
-MV^[&`<ZM'(ATB1Y[.:P;KJ'B$!&,>`37:C#LO;JMXP(@,[-N_.)O/9&.?PWH
-MGOU9;T;Y;)46EP0FP[/YN/OMM7FD8.&S^$"W>T0PM/8;>,G48)X@.!M*"JSJ
-M3[Y/@O"AXFAZ5PD8/PAN20%S[/8X^]G;8OM)09W%'(F7S1LJJ>,A.)@R9P:O
-MPD7LRWUC(37JY\#"]7<(!.\0?ES3X>(]0/#22#+;:A41)()K_'R9Z>P5&13M
-MM(X['KTT@,G(;%TN.J[@8O>0$&^KB%AR=/Z9JF@OV:P@7KHI`(9HYPN*L$-I
-M5ENTV3IZ'!:=:4SV4LB9[=:>2"]Z.6YYL,!*OT0R`N5?8>8AFND_,%`CMV`R
-M(']&(J=UW?;(0W`YW>6-+L'FOK@`YRU2VL[$^>;M*DA,WY<T1AL/&T/53+1R
-M<Y,D[SA#M6K>CCZ;-)!#N<T\J$7PEW*HDT!./9\0)%4+6*\((;6@FNQU:/F9
-M)X[>1>Z&_2P!@`#VJ>2M"]3;+DS[JG)1%Z=Z`&MN3`_9F@ETS;<IQ2@5H\$`
-M[?9D3!W!:+_`78";R:.0U*7#D!4^Y*V[N^F47!ITCO!?\V,!"_H)0%Y8FS2F
-M1@U?50P-II>>HWH(="JK/I@)-XU4Z(3]'$3RJTB&'928F(9?+N,`C@"K(E$.
-M&-YOUJ<ESV>I102QXJV(2IL%PVO:J6,47["0P5+%W--4`!KVW07_8*F['9S"
-M("_Y;T[_WP/9S_:E!.;$OU(2+Y)NK(1#>SNT-O*:EY:0"N*:@(@E<#*P_19G
-M>IAD8'[;2I)I_&U0RO%;YVF7$B-_Q;(.-\``Z,L*T1X>NK?8@+OAX!`3W'F<
-M3;;CE'R<>K``%HM;$L/UU"4YI,C?9A'`=JLBT?=IWT1\1X9:"1`+2D!*Z&P3
-M,3L&?8.3Z^4UAC`"H[.,X)$);/\ZT]=_"P?T=^C-Z.S2`+Q>8?$`+G>IC?>Z
-M=&/@2A"E]#4WRG4%4]P'N1062HNE/EF<]$2_(#<>`]71!#&"#U=4-I)P.GSF
-M;"*14/H(J7ROZ/98AX<UVVGKDB`_4[Z;G.]C,(-W62TNQ/R0"A[UF`$HFQF^
-MRUZ)N8IAF$4$P:P@%J0IXM(:VM.1@NP2,0PNMHR)DZJW]155W,8@AD(--V)!
-MIW5C^YB(R&K0P.\10R'P=I5G^J*U#(&6=,P00!=[P[@=ITI)"!3Y=?2@+[W9
-M"A0$"O'C3B>P>=X]SR&4;QPO$P$GYS.=(B$=X*W-5PR$VEMJO8CB5>*!:+H'
-M<1;CI%@3G<W/@.7W=`BVJR"H:R#9>ROAL2RZ?[\TV9_?5`>GGK4;>HD0W>\`
-M#9X.L4'53*6CEN77\"&?EM`+")WCF4FA!#FN/'^2[PB1/P.D[3WK\S,V",A;
-MMLS2@B^E<+?"DZ:W2(C9=_]Z_:$BFR^?;'+DGH7T3/@^T2`&:IK-_"+O2J,\
-MU(I")8_O%D!.V%YX)2D28IV6TMK6-`_))`1T41#5K20\B'GKS]JR;=(Q8=):
-MW'#(F6\1PCH[Y+'R?>&X\@$+F[\Z]/JFX/WB@_'"%9U2+4HW)<%[F>%PR*(3
-M!*Z;&$!2R@WV,2,9M\@_W2*"J/3'D0L/TC.FQ!UV%9%)J20[+VILG+(@L;3'
-MJ4ZU&/#+\-9'DHB\<CF)P`MSS*7%3:2R\+5.NBV*_]R`IZCE-2.GVR1;01DZ
-MRPHP1]D/NGJ$4U_`[$V^K8"-U!'$ZVJ9^PF=(*\_J%=*`E&,[[$-&Q4'NTC%
-M6;I"0Z=Q<D":HM-]W!TG+QZ/0J&]1Q=4$P0)8=J2JL]N/YBSRWG=B$K11X22
-M*C@;RQM7P@&WG)+6T6+BR>D(@+T4/OO"++X5C%.&R_]HT)**=DMC2"`I(QWC
-MUFFA^=,:]J1[3&B__-R=8*!";O@"6??F+AZ"<E3S9J>\M^A*()`!=W;63[.$
-M"T*4'5]I\],)6QK$4"7UY`/EYW_:TBLUCE?XB8E`LC)Q2`>=Z[CNZ79I3(A*
-MR^#N"D(7G;K7XSTCBA5@3-!NRE`+,T'1*2"'<(L/-<U2684(Q<]1JCO<1"R/
-MYV$[R=8(XED^Y]/F5P0MF?91T1H,JWW?CAX``J;Z/[]N,D:$IWU$=6HJ,0A?
-M>D_-DRI`3;7U0Z;)>OD9'`J5L@%)4F+Z[H77]D(68S4>S,D06Z.LZRNG:S!S
-M]9!9D428`+62>C$"5$6;RR>\')].P3D$$](H$P`+Q$#R9EM],/LF@J(<\D$.
-M/5Z&N(%&=::F4A=/.[EPZ3,D0?,TDHW$5#VJ_.+9+T:K@@-AS%F]'`C^0RN6
-M.T3PP8P/*Y'L<'%D6,M?KEX1GTQ[F(9"7L'']09$3[G=+LLC3'M&O\_2D"J.
-M-23_-0=UH]+PB_]$2:EHB(LCL+EZ9_L$K.P?_<R#1QN/X[D!:=+HH[ZOSBL(
-MY/106QP:"&(%SL@O;*2MQ^`5T)-FE\%F`*W_?.\7F+!!&V-PD`NJC2H`%7-V
-MZOFUMD;#30[DBC#-^[Z^C^.RV>!%C4V@TJGK^RF'5?3&HH#W4<^([=]`GB(*
-MD5I(S67Z/>1&OB,!+&4]W!]L15^9&!#?R>\^KRQ1*/45V%@$06[2:O-W1)4;
-M5P@K=*ED%_UM9$F,;'O,ZY(K.AE-9\B+4;OV3YR(NU(3Z&/-6M70(BN9+N\'
-ML6C@L['=3AH(!OA(W687;HO@OIEU!I<8"+%8DSU=CH3+KG7])+2RW&G9)9!$
-MQ3;ITH2B6!BN`1`O#JF@(/QQ`10C/`7':QDX8,LL'T0#(.<RO77&7`"7TND]
-MB3#&)*^X(@C]?40_AQI`"*$=J4ZF2=X>-2M,NJR,(=0>`1/&Y[*7J[B?1AG%
-M9-1B$-Z+7N*DI('6:N>R8MBAV_Z_7(O.3=5P8[)($D+5KG$;E14J\-D@R_UF
-MLF&AA&/2@6)ZJ;TZ"\7E;.)/TN*8W)V^ICH>)^QR\OC]+_7M)4#V.("KGD7?
-M9_&Y+>H95?]3-GMO9,YO+``27<Z\Q6W&F/^V)_'S\;WA9@B)C2K;'J2$XYJ'
-M6,^A+32M&#?!-0$4GCT:W#8.8:0157)LZ[SXM<IZ]4V5REDT:W-^;J.#0+Z@
-M0@$O[!9UG\+Z,Z(XGV:&C_K';"L4JO#2@1!<,VI[*P&%\;0?O//I^I0NM2<E
-M)9.J;,?7['@""ZT5=+Y?V54^30D\<>79/YN6']*5(!!*+T\?CMLH@"7+1>[/
-MD0(#@&)QD)H9/ODAR$DD)/>;%E;NN8`?8H>.\=GM&$A]>FMMU]R]\GP4Z;Z?
-M&K\1"`'8'_&H2<YBP-$K*P("\2`R7L-([!)>9W967@\S[B@0/F@@@$"@$$$"
-M[H'M:I>M='#:"WN/&D).V0(?^EY+-1M?,[Z5E14BV`0Q$FYY5JF1__B[DBG"
-&A(09YF?0
+M0EIH.3%!629360S39&D`<XA_____________________________________
+M________X)S;?=A%%?,RM9MH`$E-`-;8#;;8#6E)9>>;SS,K;%2@`2::%N=I
+MVR86:*KOO>O99MMM-XP&76N]W/6T=[SW@<[G'3H:Z'K1F?=WON]WO>]S=WN^
+ML]W>^WN[[W;V\VW>[OMN^WW;;3+3/=TK*Y5E4LVE#-E5H:"S530#1IB5LS:V
+MJHK6!JVA2M9LR*V:MFUJ55JBM:Q4*EL,5$`50)L6M11:P55:V%+55:U5C!I3
+M1L,BU5-5JV-%F55-5EL;:@5:K+%5:S--;5-;:M5MJVZZ[:V]>[:7NTN>][;>
+M[O/MO-M[NYOM]WN^[K69ON\^][WO(Q/N8ZZ![N''=O3VP[V/>RCRX[0VJ7FW
+M-FQJ%7-G0R;9MB*N\G'>PTM*5H%``-LF2NKF=-LQFU*50444`446P`&FV06V
+MUE17-HDJB[#--!MBC$-1L#;!MF@JALFIM-IE3-30"JH#2D`$`!,F$R83(830
+M--,AD!H&AH`R#$9`:&AHR`Q-`,":8)D8C`3)@FF":8@P"9,$,"&)D#0)@$&D
+MD$TPF@`)@```````-`"8`)@"8F$R8`F3$`)@`:&F@),R83":8$Q---,"8"8(
+M,:1D#!,H--)2:$$VF##`"#329,1A-!,Q$:F)A-#$-3TT4>F4]">IZ0&U#3:@
+MVC4#`-(/4#3T@#30&@/1/1#0#1D``#$-!HR:-!)I2E$H&3TVPVH\BE/QIHC1
+M3,34T4]IE-I0WD4?IJ33T0`R:&T0`9!IM0&CRC(`!HT&AZ@`&@``````````
+M``TI$#1IHIFU,F`T:F*>"G@$F:3TP"-3T9&"&FT*/3"3R,33)I/":&C(T&(T
+M4\T-`GIDR-,$T:GIJ>1B831II/(&D\C4S(::8F)HU-02:E)*!#5/%/>V,B-H
+MB&"-#(TF(Q38BFVE3_48AM!-(]4_*GJ:>4>-4V*'IIE/RFIY-3RFU#$S4WJA
+MH](](]&H::/1/4:>IZFF:0/2!DVIZAH-J9`>4!H:?.1!_\Q4%G*&;V<K+2:B
+M#-=F:>=R9PT='B<1$&>Y2K7;'1<S<U!I%6/'`QC'&!$""X/]V/5\G9WG^^S[
+MT8!$`D`96HT$[KU3.RQ]H1DC%%$1--*"?K_K_L?RO_GZ7^KZOYW;=N=Q$%%(
+M+/21/#(VN>?;<MJM`B1$0'QZGCKO:O7_KPT*>`L!0$`X6":FH$!$6!]N]*1&
+M`>)4`P7%5$G@V]E5TZFK&($]>M7]W^OSGV?[[OM^+<I,Z+M=;I-766`];EA(
+M3\\&0+[8)=[Y>/=V,U7MZH"`7P^J9Y.4XK0O)T]ML=,$]>C2&`+KJIP7B%<G
+MIZ6"=\I"7.(D2$"9.7QCWB8!6)5E8;+5F?ZI-I<._LLU7*H(A'M]1VM=&Z'<
+MM%N0#J#6*R?%;:908&RHH34(@"]*2&:1G;Q?WYYUP%E2(@\E"WEXC:)^AFY*
+M"V/%2"!1ZR#N-2&W@1/`>-.A(A^%=L6PJT7:EU&#0$"\C_*-.JQ+2^W+*<`+
+M[7C&UXHH9B@ULW[I"-T:`@7%]:`B#,.N],:_+:SN\[:H0"]MG;I((-):D9I@
+MEY+M.9\`=/Z'Y5'G)UUBI`$7\=-,6\WB0M^K1(IGM("()_S^&EB%H$,(T:^:
+MUJXAFG+?)LZ=2(B>DJ4`+\#0+:GW.!F9[Y0"67\4D'5N=?C<2IH"`B?%D\H0
+MGG&<U$6JZ"MKF>E/!&")G6)];))G]L??MF>!#;?]*:P<1'/-^\77VA0`%Z]R
+ME-$,ZC*8W\V[=O*,`"`LNLU]SC!;I4"KG=/S#X!?7Y]N/BU*2;"=,Y6JXJ7(
+M\0$Q,LORY367(RS2IZ5>L>\@(%\(7%0'&&F:-KRF&'2:+-/TMFDH`&<+FRQ]
+M<IGV44@6#9TX"-:T$Y%0M=)96!4T8(<=/^652ZJ2A6^.;;S%)FK1@@/X9Q=@
+M(>2/+>LL58^19Q"!7L,11[)RREOK.2B(B\T[XU`#;W%RR(G[K(5$X17%G>A!
+M5%N-\(U<88J#4CQIX2R!95&T"Z:FJFOLXD$6)JV@!<T3-KJ-HTMC@87CT)TB
+M*J]FW0&`38'0\>^C#B[K7^`23@`L&RH8#R4AD93YM`Q3];.J--PN6QM[K)JH
+M(O;C-[U@O)%QFS:U:_'AEV+O+ML-FTP(.3(!E'S>H'.(0@#>MJ$"'FJI*?4K
+MJ(^8_>2M:QGP"F_OWH5:].!EVM>UB'TW=R@(I#\VT2P%KT]_6]DV]DSX*:$B
+M$\P$5TX-N@FLFP9/6Z#&OW(]F)2R!;.(FW!F6.80[RE%T=?O6H/*`%S(]JQ[
+MR7,>5IA_&NS_C[WLV",$5K/Y3CA9I<=R)5=2;=$"#3;X4$!A3SS<4MFG&3LO
+M(C(AK8$A:MCVU5]2F6(!3!"(X/?9Y:@`ZT))M.B\B78]MY1`BX"?4#9]!56Z
+M)(%K(4E%,HP1?M]'(<M'M'RM4SY$-*"/CI,JNSL#_3,S:Q7QT`O['-[B??UR
+M.0J-J"64EOZ")$E6GTJ.(S'2(9A1[A"3H,]OVI!WENC_:($%9:S/($2!&27F
+M=E+6YJ$;F*XDT@@+E:B0$R_/;5<8KN[X87?;PTH(I[RF!9ZIRCM"1\*Q0B30
+M)`0]^YI)3+CZ>C@/O^H")>Y@&LC0T?.?#9A!9W#]194/2$B@/0R$+"9F]7%,
+M*1BYC&C`#LQ@*O)X;[/:@Q((+?>_Z#+K*>EX6<1R+?T&:\=DJ!\#0UPA_,^E
+MKZ<2Y.D"5H,L:04L5`\;Q^3FH0!$N<-%2!`?/ZS>I:''+V&_V'MP$I)`W;W0
+M<("[Y"-384_['P.#[FK55I#5</3;EMY4\W\^9_"[7[54(A*R?T%W:1EK6:Y[
+M">ZVMM[DH!4-F!?_"G;WQ+<>IO:.A1D`8W/]@0M8>%BW/(+<-&H2+N=9T(HE
+M8\P<XK$H'SL!""$808X%/B<P[8P[Q]-<_N0=4D$.Q!`DEUQ'1DCH3-ZF@V!#
+M@JE?O+5#H*[@F9Y"`,+:9JP`_,\PQ6@)X?SY$F8?"VP=X=K\=CF/:?!/G'ZG
+M4`E6'7M<%DV&9:$((?2PL2Z62Q^Q6KX\"WFSW!"WZC?7]+:LW`0`!3E._'27
+M;()&=S.4RFUCCY6W?!*KW6HGKG^?862W8T"00$5%7P;%M#Z!QAQ:KH4^H/`"
+MP@ES?4Y?F7?+C-,[,K8E31$!JJ[@S0)=\FJ8#<OIN+[(NB]R,@&WTN\+T2%1
+MRU"PR>HC>;Y(&31@"8(L>$>5^/YP&:Y@'%$18BM3_NBBG3?7>!ZKL^1-#L?/
+MI`&OUVRZ_+Y/!HD`*"]TF31QJ9YV"1#B\R/?U",@5[-@I;.4&_W%90)LS8U+
+M`,#YI0(2X6ML1-K;[$WRF]A\#Y!IMEPB$/?B%:LF@SS8@#$1(96`NH:/6&-`
+M!:=-[T<("%]0_N*VT8X/5G4]+'5W>2@57]UECJP$[[:29VK4&^<0`O3I=VF?
+MKR@)6"J[:JVG6:T`(X0_F^G'Y[@#IX#*^6`L@0>X[PUGR@1M8&GY?GK+(:KI
+M_U,(@U>K55\YIW+R5A#A_I*4^UE*=FQJ$`;GLX^GP`%VFAMHQ<YM/D+GA>LA
+MVW-FEG)_<:*\3(P705=2"A.U_T1]?;OU(#\LK5$7LA$\:N3_/7'@3_L2$4!K
+MJ6$S1,[?R[77H`%;Q,<;P<]WB#C?6PY9\/V7UF*!4\2`M<&]Z=&$0`^[XVX`
+MP>#"!:ZO,V=QZ_BB!8WP5-F0XF%^[*`J8WXH"<]L!5-</9[HZ6PTFO\0)AXO
+MDS3O-N,];XM$0Q%N0S7:2,FEH[^H0`,"+IERF@W1-/3/``\LXT%'>)?B<UTZ
+MV15$R,@_KULJ[L%N'@]`+&4^?P!$0Z(+)XV;VJ^\ZY=V_:P3)"*C(+:U(.'4
+M.A6YU2"N#&7B,!OWTNN%2<(L1V?!YB'\])UFPY%YE4`'CKX!_`'*_7M@K)A9
+MAS[1""])62%G]5YHCQ/BL\D*[6<\DW>8P\`,YVUF%`M%7EW:-*$+>N64?@;#
+M6+FLFTL@'_E2321+T;G=ZYGMTB0'"&+[8**(!6Z&96X#]H(:2NZ%,2"$GFN,
+M1!^?3G/A^`L*^I@/+HZ6G:DLBAZ_E30+MJ_"3C6J2\[8"57T0*Q`"%5OI.Y.
+M:BNS&C[E[K4@%]-&1?WDI(=$YD<?>ICRZ]&1/M.`*SX?V1W6>I79`5A)E)=C
+MC=S#.CUY].X/Z]T\1.%B=8L[(9KD:Y=]^`D`AJ=I:%X(.1-A<7W`!S-]'$IU
+M%-,2`BN_0O@K[OJ'6R\VPY5,3$:,BZ"HE]\AB;53X3@H[X^"Q3E2>4%#6-2:
+M>^%"&#=/Z`@,;KO?/M\""U$)66_)4NJ?&F2ZTN,QPSL<'S\O.`#\I/;_'\T\
+M\-UI3`?SYZ:\L#\%AH`3:"O?XZN.EK961YEOS49"&]N%ZP3[JVOQ(P=(?G.6
+M@"M:W;)3<$\42B["?<D!>O/^=:1F#6]NZ$72@W50#Y79>"J>K0,*`@N)KT"+
+MZ#V_U(:?,N,'9\5&MI`$7^7$@&/KSB6TZC+HW]3$;[NL`N)UQ1FMLA(2OD\,
+MU-4^]`5TS)K^W:"%9?8I@#2TGV8,J0KY?V?HZW)%R@*_M:XB%7\[7[?P:+XG
+M]Q&X;\NX'>`&K2Z:_Q+0S=C1O(G$9#64P!8K][WE]U4>TJFLWGKV#V18-2@R
+M8+PTOK0G!;/I"G/^B\0/-;"WIP@_PRA]#,0B6+V)K?EQ=JK2J^C(DC[`S_#X
+MY"3TWE]1\OSVL0(N;%("2?M9ZI%FL[<HB]5+";IQ`C<Q8VU&='MB>0`%"TQ]
+MLWN_%Q7@Q^2]DUETH`>JNY1%N_++1LROZ>56$Q,7?.DD3?D:TBT$%+8?@O=,
+MI("V5)HR`5A@RVJ<H=;Y*`C+(A/6^JGSCI4Y2[+TY_$J^=OCQ3O?_GXV0)%7
+M8G8UBIWG7`L_NKY=)("RZ$I(1K_J"*YJJ!-D>DL_?A(029R?[YENFJ2&8AT%
+MAH6LF-70$`OWGS?-)?`A8JG!J?%BHFQ9=TR**BD@F:4QF(@.L`,57(WQ!&7*
+MGC:=$3`_\4$,7F=+;N-@^ORPA65Q4U)$1_U9=>^G^O)/=\V,['3Z#NE@24'X
+M=@U7X)-@E=Q@E'!@5_O2O$2"(_!93W=VB(#"F-EGAUAGK"PI/7HT9!#`D5[Y
+M\+'#?L&`?+99C>0W1!!Z[=:J17*V6,CT(^FX5>=WB+G?#?J>A=T@<1CRU($&
+M2/KW2SC-%H(8X0R]O``AJ6;Q6%^K*1B208.WI0!J4>@[T4Z6:D(9;.)+M_1-
+MD"V&FA!;[J;:O3>;"4Q<%,4Y9Y.."\W*KZ:-!PZ3;$/=\"N4*'#KN#<9_N@B
+MQ2=Z3G3EXJ/09W=Q:+STH`I>+,97UO,$<R&;<_0O'QW32(Q7&.H<?B@H6GTF
+MMYUP_-E9;WKGAII%!=+GR<5L.\`)'ZHLR%CN`I%8`ACZ+OP6W'.8.U`\'%"0
+M%X8"O\\>WD!()PS]%F:D('H[F.JU@(>YN9OAUH:$_GW-1*(O^MOQS@06;P87
+M:-R?;K+]`04'98(@+A!K949?(_%S,4L9H$=7%`"GS.&9\=+H:;/X_;W^YMH<
+M"`NS<HM5,X?)TD^Y=$5RI]B^DSJP?4(5_`$:ITEJFM`/`7'UBP!KJO;/[[DI
+M'?H!E$YLR`+<">4-HBV;9?TX0@D-MV//U([Z4A$+WJ^K::^5S2Z<NT)8I(07
+MF:A[WFO!$JYY\;VSF'OM<8:LN;T`7F08/Y3Z3?#QH"J:L4+>JW[N0=5QIYEJ
+M=&Z\W[TBD`7-[6J=-74GF61-$`:NXFO.%)=[[['PD6!H:;V/CZ?H.Q@V*Y3)
+M(*(U*S_(`/X`@=4A8N1X;%PR]WU'P@+J3H?%;:O%,!M`$NVB]R")87^3<RP<
+M'"D2]I=(Q8(!S++_?'ZBM(AE&+F#44#CS.;='!>W$@Z@#S-W_E3`9X%)L4B]
+M6_71C<D3_0KNV3L>'P<+:@@B2Q8.33:?)*X7!K<\Y@""[>-"CM-^)"A0$'ZQ
+MUML"Y6[R\SL]`>$W58Z2ZL/G<&BN`"S?9P>JEF>9LK)Z?`TF2@=J?D?SU%]\
+MW2C2*QY;KIS^#>[A@(M]1Q3>IZ28P$!0&!DN>1#QKZ+6SW.]/5S;\E4CTD_V
+MU!):LAW$J=&UU6.(N<Z';C+W_!/CE<KX:WU9&._S$E@%TY6IQM_XGC?+N>$C
+MLD@@W6R<I\AR``6YO'[].30F&YUII48E)RAW`+CGY_F[UVHU(3/Z<>R($]<N
+MNXYKBGSG(;L!']%1>+)$-=IJ=G_\M`\%7E[I+&X(JO-968S9V4N@0@/FM[:`
+M_DOHOVK;9]H"`YSN@MDXZ5!^\;IM^0"ZT[=\^+)':SZM<12_B%("*PA+=^-6
+M4X_PN14]E.7-."Q^B5'&6TA[JYMVGDV@!"6IH/Z6JH<S02(O3\>@=S^?QJF3
+M!%)(6*9O6O[NA.NF%0*E0`7VVG[["W;V*1;OZ\<X0+6X3J<DO,6&XY`J6G>T
+MW:K[M91`=CW>?L7]P`2I.^9+5TYAQM`E(0%F$ZV>R`(-RC7H&]XXFP:UY%BC
+M`)R"D*N0[730$"U_3>;"DF%<'PC3?1;![F/0$!`7,+9HVZ(Q&0*AY&)ULVCY
+M+1$(Q-SG5-O"<=//)P//$5`7SK)KA'4P'#J4"OU;LGD<B`].ZS0B9J.V:3#=
+MFHMH6CNHZ:?&4O4SY$O>;/`VB,,ES0$FE7$DK=#UHE`B"R(_/."6="48`%=C
+MEUSNIQ$$'36Q-I&5Q98XY)(("#_'Q/I<SXWV4`^'^0K6<T$3I7Z'N'Z?7R]`
+M$`D$$E-$A`GA_G\'@T>0`.M?]'YG8[&O\#T,WD(20@3N/<J*0*$E#%&`('[Y
+MJ?H^\H^GVU&E^/(?*V/S;`]-I?A_5KN#[_2`-3VO6\;OO![0[?MPD#[=](@'
+MGL^NG^%UTDDGD*_]=%3F(!C#"(`7$6TJYOB'9$BU+YQ#8@0%'I)PQ]0<(OV9
+ME,"Z5$S6[`$X]M#TB(,?',/M/'%!J1PF\>DL_0J^9;`\([->'9A>G7GCX\9E
+M0@!M=I66J/(],51@(@0?HS\478WX*Y0T*XJ_O=U@*6WFC3'B"(E.&1'DANP8
+MA"9[NDG#6V]/W#46R."#QGG`O/#C)\[4?2`5H^5G3W+1P5.,(-QBP&W;-.%?
+M>-((FRE+9_]=P/6!9$?X[H"/MB#IS`3J?[;1Z39%A=G\K;XFA6OI;)8DN$C"
+M7BML%@PI!R4,UBVE3B=_ZKF<0@AH@GWQH836)<,FH8K\Z1<`_]C"$EEWC%^!
+M/Y>[K2`I79%TH]PM=ML)@!SW*@GM%S$@J3N28M)R-`A+=E0XY^IL#V`"]FQ+
+M^_4^]%/H2!_ZO.Z:1OO/.8$>DXQ6NJ6@RJ$@&7W`;:(MKWWPFQW;(@(#-U?F
+M5&F]RJ`A#+VFVB@-@,'YAF.IL?V!1W3A`*O%]39V9A:^=$086@"=9YY/=SI%
+MP.43I]O%5,)TL*VCMQ>K<+1@HN)6<DO+TW)G@4%D%_J\0:[+[PVLM"$J9\JF
+M#R7Z$#1,3DX]3^`>`Y+R!4_X_[?Z1FD()>SVM"YCWW&/D(N1E:+:6?SS"^T^
+M>=9VH1@3/V1P?4WZR_1P%2B?BLO6(!4HEY]22&L[0O;91=\SO%,3IA"MH[!B
+M%CFMX;((MF&F@-:$#^/NR4^?H#P+/T?`(?"H1O\3JUR+0$3,YUPX/"V!XHN$
+M4I81(I##TI)/`O^DT'P/ALO4[G$M3G3UU0\M=O((04/Q><LC!49)[_/LC1A"
+MHC\'@:H/BD`);51$73^<"/TI:.TU6\/@59<'J]X\/%#-4QYP*EWKE4N4;[3$
+M!*R=!LX;O0JD`,M):D[^9;VT.FN`4QXM_,GRE:(8%>A^QPA4[V'_/X-$'J#`
+MO+<T!:]1:&Z`XNC?+<X!](-S\#U?81%G&!*R.1B,9PL0LO-B>+H<>8QCBZ$W
+M<E;M=V>)UR&A$!99;W<4^-+"5>D]I#=H>!H8G2&P7(Q_(!?:3VM_H>=M^AN)
+M]$08[0JX/,N;+V:J5'I6(6V.$(:0ZX_O4^QL.>\MF$P#[-<S,`6"VKFP^LNR
+M&3NU+`.`3>^RDL0I]Q%IA\Z7&&FQAHOC`D/9^WQY/_D&5RP';_%[KSXRXR"-
+MF8_*GR>O=!,]"!HE3EGA09H#U/^0V<TZ32Z`>%;4=#9/YAX%'X,O\!"!B0Q?
+M0.$N*`P//0.Z40@-,IF["EION'/2:'+N!#DP7<P_I-08$P_;PV6!!ZI,ZAL?
+MS+=DO9NCF3.:S=;P#U.$5GNZ=)TAH]3DRELO!6<QECQ-'-TU!_@5#]+*-+P8
+MJQ=TCG'B9?]G0.)KL0_03L!U_YX'H;,Z723I$<8PW\\Q8CYC/;R@FM3\#X`A
+M?#U^MQRU?ONC?*CR30M9*VS4>4'%[`W6W$.LT!L1>2LAH-3&4=%D#P&9C[JB
+M];D8SD-)BOV;`_Z^+M/#??G`.L6]X+VMQ,0,SZ)HV(7+922%)EYPV/>7YUQJ
+M!F5L#3[/:P0.`4%JR2QH)>8$]JHLV*0:[,(?IQ8<-C8[FQCJ78RA5_6X:=%?
+ML;9!'+Z7+@8YD,W<V<)%C(G_`=Z"&:=30QM[;P1'8YD-TGEG1;P7:XL_("57
+MELV.6Z*!#>0.Z!V<.E@:$%BG_<]G3G5ZM]/H,].8:E4@PJ!J(D)H".9OD;4'
+M"EQJXO^TH/ZS1L+=5L$%Z]`8O]7IOZY=8C-N1>,Q1=^BFR@T+P:'@C3,3:*.
+M3`"L]U%/UP=A9X#@_-05U7IC2>XUP/.GC'>F"Y[4=*YQM^4F*N%V!PAFPKE1
+M6C!"G!@N@+W^R3SZV=E77GWPH-/N38#!++$4!=X:K+&1A2:W][17AS990I0;
+M_Y#W\L@\:%VI#A:K9PY?,VY!>'`[-/7_S]GZET(W$\(#P:6IV9-1`H;VP=R?
+M$<N/WPTJ-X9YZAPB9'`[BT%>`$G:%9(6N(ABM$"PMCR#P^[&TL]\"<,%S_QL
+MQ(0B^P3W;T0R$$,%O,Q.5^I:K:OQNEMR8W^HR9"+KL.A[&]/%$`O)-.G_<7:
+MIEO@!2J#72LI4S)[\@T]>'F\[H=F?&BM:7\O0^-ICQSRP&+Y9<=`EM^-,*'X
+M?.R(5S.U$/)84-J#B5/5X#K<8L^0]0=L2#DD<D,5F+GB`;YY+-PGB_?6`C\_
+MR9%@_@@XPBRB57T*^W(3V4G:]S.IN1]^6:30?#GR73'[Z_\_![KSGY;W4$ZU
+MR?RC@S--B"&QZ21ICG;8)W)5I#K[2PQ7I.C&'[VQQ1I<EW`A\'B\\V'*G#2C
+MQIN&$CTL6;ALSO9OV8L$^Y_&R%ZL0A13=HAOKQD@JY`2:^CG0A2'E;AY]R?2
+MQNE??40QJ5I^>7]O],#(!9[U@83@F_Q:-[OF*D/&+-'5/=5`+VG)*RF0!&^C
+M6JEQSUE0R*U.P`*S^=SAK8%RM=JW9#^Y\7`(?6_56S7G8;R>EHQ[,XHQCI_6
+M:2&_SJDYG\[4`..FZBLFED?N/A(KAL;1^9VFA:LF05>S^-5\:T/A\T.W2`9Z
+MCR5SH84"^^CO0=:VV;P.D748UHW-!?N2_1E1I$^UWXVY#??7?O7MSNQE*Y-H
+M`P:-/D3G!;1RA!ZK]T"0R3#7TR$X)IH7CXG#@3499,D8:^1/?H!S7?-HM(@Q
+M5K9@4,%"4ZEMT/"_\0SAXXEGRN_`)&U1H,4XI9J%((D#1[,AX1TPPPPBAZA&
+M!3:"V2`C$8#"*&6;GU'3+`_,_6_`]S@AW#.X23A3AL[JPI?;_?6!8+%_D?YJ
+M"=RQ9,"'UT26,!(G^/'S\&#HPY'/H]/]YA#ZW![^Q`)_(&S?W>C!PZDI$S*_
+MUF+Y[5.P1GTK/PX0EJ?`18=(:`&YJA^N]`U#AQ"+T\#6/?[DT&&`FCR7_5SE
+M3GT=O`34]-,T2!`[DP:*Y=PT_6.H1]9U[%)JHU=TQC$I`Y;L,@;.$8:7L$%I
+MM"XSG]H0%WK:P_]@,2PP)2Z[_1E93+*BL864<KXMI\-?_3(>BUC^]U@OC2?,
+M5HK_HTJ(^6Z-<^88P#OK\;*<(OS,[<;O2_HSYBTHY1P_+Q'R&J6YG@G!0OC:
+M>\X;HTP3T>WODBO/KV&');,/W9PJI3G"N7[P80""\*]K-:J[PN8WX-`')Z0Q
+M--X#0N7R,,".J0^Z!RMW)_]S`QNHH4L"$:\H;!ENOD+(_R]9VD9X/7%Q)JQ[
+MY9[BYU8,+$#4ST5"'!V*CZA;H/`[?D#]_FIH,]/BKM(!O7/T:`3.2LX]F,#-
+M[&$7Y@#SAXL^MW08\-[)B=,(V35`ZHLV.H?2C%@DT.Q^0G;L;W8S,YX'S5FQ
+M0]`-49S:KL`7G8CO5,>\PM[OA%:@E#8=HV(YA%,P&#W:#`)SIG$0JJYFRR/@
+M(+%6W79$,W]AO<]5W6UR([/ON4,7;95RLCA'%$_H<%;3OAEL?Y*9]>;#3](/
+M-R@-JH$4LK_`R'1W(2^VPAL`8/K@^'`+$>7=IVL\&G3>NVAYP3\X<%:[TM`<
+M+"9Y@CBSG?P=]85NZ'DQNQPA!/)PX)?/^[,<+7DFE6(ATIMM]^U008;L8X"W
+M[8QF_,%\FX'5WG$,N8?F+;B7G56R`2>UAA`.;N#K#>-B/V":GQTZEP/"@+2&
+MM-+T9%?KWB3'YE+;FW'U5"7A(PKWH;<S`F,,VJ#Z=WM_!5U!8F@>VK.F%=ZR
+MS(3]Q`&IWIBP]V+H4P=LP3L=6"K5"Q!G2@<(:94)[VKP&H^:!QE?V@6C?E),
+MA4_]'=&O[1+0WBN:K)FZG#59EBBC)ZRR15_BZIL0V4+V[VH?0'#+A<$__@*:
+M1$AF]*;V'!.;(TG+1/DO!74UZ1,RB[-,9@O7`ZQMR^81(%,/IHK.9)N=HY+J
+M37V]PXP0V*+*^_O=>@,TN;S0AFDU#U+)-BRD?9MJ[U>W/BZE9/])=8,]$&EZ
+M-Z39$`8='K/B)J?HK#-E2]+<55)7Y&H@J2T:"NY[7`PCXUIG0`QX[;&;C@%;
+M;&NIZ^J,7XHX7#2P-7?AB>&#0K5LYF<C]4=YO.-U[,'LR!7&,T\L*U4+'M[5
+M7`C?7D?=#::X$[J]*X?<5LD//O1FZCZJ%O.A/L\6$,?$+G_?TSVEB<GBB'.V
+M\X)K+;;AR@.*L$H9DTO,K6V'O[ZV@RY-;*:.-*DD,"-'.H6T=TFZOUU`>Y=Y
+M?>J;Q;S[(`!>@[EW>7(]]!87MS_!V'$>`/2*"7SXXURC&\UN(&G0';=SP@7+
+MVNAG47FKWFQVT\M&VP^@";ZN!DB&`R26G&XEN>YYQSY0TZ!(-B`EO>HF'`86
+M,#9Z;[R_`0AA)_K.`#-#T?P?T.UTGTR5.Y9\QA/20\KYWM?DZ1I*,56:J`?J
+M`<%`JBA\SG0%)YC\Y]/C';2K_N94D+)VP-.<ELE1("1NB'1,*C2JY=LC?*PC
+M$:]NE*#/;$MD8((PPG":RJJP>#6J[.J0D"*&/'$1Z#4\9?C"_#R^!U=*?2B4
+M$O5>N6J@)VM%-A"%>T7Z<[%`W1,_8CPJVZ!]I2H'MGX\859[G^:;[;.ZT@K2
+MXD/QA?6&O;P39*5)-]]-!88S!6L>*9IUY)MRD(OKWQ;C(LFW*,/)LR0&.IS0
+M*BDINQ+[8/GQ$OIDDC.$:;IWCB5CYV4MA6Y_[PU[)W.K'OOG!J605KP./&_@
+M9>_3AG1%CUH("==L#X3WT%UMUM>O>8O<#OH@O#>DK+CV8J]I]Z++#\?\@"3#
+M7&*,YQ)VG)<3AKJ..-128TQGSL\E]G]MT*S_L+84<L&MN78Q_-E'=BG!KXK8
+M6^J&'C-L*-?^_.:<:'.CWF/7#T`9QFC\,_"ER8#$>9W@I1C>-;)FK,/*H7KR
+M*W'9T`MJ,UV%J)E-X;(.TQAC=CV63Q[;`TQ;6EC-6^OAH?ZY8X^W%YHPXYOK
+MJ(5*.U*W0]@^VE4!(N%D;#CC&>YZ^\K[=.QZ/N-%]TS/3O=.$KLF<=V7_@8D
+MHVW1N<_W4^R#N&+6H:W2S0Q&@,=)Z,/G9'J=O#[2:X"KS4&#9*4E+FJA=+<Q
+M'9-A22ARS$S]Z?UP4J:Z:G`M`P&XT3](GXTV+-8CE4:G<:E%-2C]QG\RGC%1
+MCEE<^9\'#XL,.7([K:*BFM>MIBA.]H>Q78=?8#9:.G@*9W:JJLW<N+1B.XP0
+M&VU$:N%7?MV*<T7NA`@%8?;W-C+C`LQ7\*,,R]T=M5L'W6L^\A'2JJ?BWO&S
+M#?08\A=\3<&_CKPW?!2^!/FMX])*T2::Q=-XQG)>@HI>6Y-:[VB4+=@Q!O_T
+M+^?.I*GUM.AGE44K_[PI*NZJ?YG3[DQE+;!QH$J:`F&I85,[_J>UR$]Y]_I"
+MK)#L[22+9XSI4+CC[9*R]'64IG+*KR`;=.Z@-L4Q/O:%,3V%7LE%ZIN\$_.*
+MP$987+OB2FN'*F\M11A6MHY1E(\4D2Q#D%*M1\WXSIE=;*?9F(IYT@BI`M;J
+MNBC-P7<#+SYY$?:&(<S%@^J*6I.!Q9TPI#X7'/MJ1\'?0>Q/G>KJQ\YFKXWW
+M-2QBHGCI#\_Z"<NRHJB(*0.:!\C^A5D&*0_%9+)"()((R$5%8L`58L6``*@K
+M('PD"Q6!"U!@^*:;`-^@T=-$`84Z81K[;*RN6:(!>C;C2F;(0AX=:D/T[3!P
+MI`RQ@#5U=#2]%(&<_6$$_"-&P-D9]??T^\>AAG.&@009*9,DAU:7U#7-GS.'
+M*,*!ECV-23)VX_1Z/B2_,G,]"D@5?7P^_8<<Y4#W46-$FC\SS%X+MW+/'XTP
+M3/Y1:M9IO)@^Q[RWZ+&OE_PN?EN1UTZB%@O8.?SN3<:"H-!VGZ\'OE'>@@Z7
+MF<QVX>'?9XZ6-B]O:`*R;E1.X09Z#%H="PVY^^%3V8'!+@[^L%Z'D3&DV-TR
+MFN"DMW,-!*[?E')VOE]F>QWJ(A8L/M8+YZ<[KPVC8&7>"7QC#%NYJ.S,6C_T
+M-@_IZ6L9^@>G\N*69H*7-C3#1>G7:]J'0,*RPG7S2<%$P;,:#3$K_',B;KIZ
+MSXKNY@.[6\S:F"CV1;.5!DPVKB<(UB:]*WR9AL!_2_HG[SZJ.T_!NSEW/$>!
+M@O%K:V5/"!V&RTS?S^7YG+-?W4;LU\A"F04VLZ1Q!@8,9?1&+%T/K-K+\.YO
+M';3N&L19V=E=\CB<'`0]I'&==V-<_L<+@ENI+=&QR?OF9:_&OEDL.^U@UII<
+MZX6RLGR&GS/8THS3VLF;@^@B3U%!/QDMP>GU6`HMC<U7P0$?U97CTL3-]2=5
+M37$U8[1UP\#T_C64)PSGV)I.'42O\%XG'&4+B&JZ/&QM975Z;2S9TECDW$F:
+M`V`Y(3X;21CC`2J%]&3F1IIK2%4YQK4;$4=P<XBLI$4P+<,&X>RX`C\,[(Q\
+M@0%&)S2>O$Z9H/7A0@*%^XUITX;\A1`KPKDO<6/Z,\PCEM(BC-884!CC8HM)
+MF=3146A@FSQ@F=<)^_*J3W8>!#NO7?.T\&D#)_9W.5\[`*)Z]I)*G\9I(P:U
+M@I"4D8JJJ'OT@?I&8^6(=28]6\HNX8$I<MV0Q9XX&(92[U-M@@CG+=>&&YF3
+M#L#OXN;7LJ`2/!&SDLZ(O5Q_5&*.Y$*FK#:9XQQ?)!?Y!,&CT2=^,HFS1G]:
+MPN.WO7,A!3)$*G4#^YNOJR8'Z"+T"J'(Y0-]'XUPJA@YM>>C!L,>NE'1S]*#
+MAKO>,3+%V9K>L#BU.W;)-\BV]74>NU\SE422.BPFD&\VN#BM&<,6?0$S2&+T
+MW]7@6U%Y$^]M.P'_MMDGHW'F3[+0<%!C<]8!*31_W\--]';+?ZN=6U6XG7'L
+M6Q+(UV2OW3G<:O"7P0MI=BGUEJQ#UVL?+A995B40&\&@$M&#I:C&EH`\]^!S
+M8,,5$QEJ?/8NL<0K]&F&;BSOK1.X]L_HOOUE)8;YF+\S'Q5S`U2DEM%B[A5]
+MT*`UM3&Q[BV77-G;(8KL^<3:0\$!`B@@2S%RH>QY:"L@$HN8;\):5)UN6*SJ
+M4G1AOW9J++H*\.;=PM)^E'%VAA;PX$G'_#5O4^T#BHY&\AK+_92,K777?5!8
+MR&YA<51GK$?5I<]H;30:ZPPL+%PKO7ODJ4NYZQKSK%@[&,J=(OS.=NKG%<8F
+M7U^NFS]-&;2+S^R@=DQ&,-='/FH^4R[JXD.52=G*4X'"/^O^\_@'Z?[#$^4_
+M*:2GZEA\J*J"2%$MH,(?F2?^J*463X2'FH&F\OT(A\J6/@3M/E>?91+.U>UY
+M':#DQ]1O^?//&`6!F<`/#M&2X#MI9<4G:9)1R'.,9EU.,WG:_?,WJZH-K%=H
+MNUL]B1!8ST=)^)J:N9N=^JJ.U.IW<ERV6$^+,X.S(C$M2G[:MVT05(=QDNO[
+MO\*^V]Y4K&UF!@JT$JV186MF95+6TPPX2-"Y7)(G4_O^WT;\\%U:X>-2U/(R
+MWEA5-[O-YQ`\BDI=4)3VRASN)S_;M@;9A3;7<?H9KX3:N,4Z<O;]B>=UT]NG
+M+Z<Y-NQFQ5JQTFH:&3+^HP/3]N\IQ?ME&2SS+F[+O$EMU2JHFY2CV<<X!@_S
+M>[I4\NG40>U>!4_+;-$;9]^4I]?J1W*)7HWJ]X431VG$X'>T\.]Z%'73#F'=
+M\+IW)V:S-N-MI:`K)]=A;K@;D#N)0K-RH5Z,\0N+,1YL.'&=5Z=QKF!>G7MN
+MP_CJH79C-W_7>1JF>`6J>XPY<V`(:^&8H&@WR5P8;9XHL%Q&I3.`V[O_BC"9
+M15G:B?T-ZV-5+D40H7BOT^BM4)KAW9\CLMSOBDPRF?0Y&/;+3+%0(H'68H,6
+M391IWH'(#A>"ZAB8\"J>/2>B'HR>B",/D(3X1]TDUFR(18!]L`OVC2,8B0]J
+MQ?1%$\"CW#)MOQL`,[H]YZ/5\9.58>E`/=0W&PLL[:D]/&NCG*/$9WEB.63#
+MG4,ZXCF2EYQEE=1P[9J+D!24HTMQ5?P3J1`&;-R;YZDZ:;XSNB,Z_AE'5\=M
+MO_?)W9V+YIZ=LD'S#5TE_`QX,[2.C2)7I)V"9F6674*J89HTKQF7:%1J`&=R
+M=0E):BI7,U^#R&M02/K5]QE;?)\\/S<[?N+,R]Z9UV]BW")?Z5W_U2WEMRY3
+MY)3Z>H5`V7\5E):H#U[Z17"1ZW[@38>KC\RV75A(A21Q!TVQ4N[G(YU$H)./
+MG*:"=GUPVKV5+1+V??9_"17,E9L<D*#2>>^S.GD1*;&$:'A<@Y)+(654C@ZR
+M_U"SG(2TF9^;EA2P#.V-_ZJC$V5PE/M-EIY_6I4V&$N8/([%`C.&W[BJ\[4[
+M=_;<WT-U//#ST_,J3P113RJJ0Y:'GR!@D,1^X./&,`@,"(C`AF[0#5RYXL0T
+M!A'8(P3QL*#NZGI98I7"Y^%/ARI[L+YO@S-66K[#R0.<X"]^+[92Q[?J/&U^
+M/M842QYZ8NLW:5H5.+Q\$-JF,+ZV<2%U).O7/$G-9\@0_=A%_!Z"P+7I(8;\
+M9O69W+WUIB?+G&K##.NW[E]@H)BG$+ZE7M-1:C%8G]H7'I#VW=F5BA'3`-,/
+MN4=,VKP$SUXOQ^YLRZ"3^O,JRP*J2132C>>H;I\_R4O^)`N-$L'WXRK)K84<
+M&/WZ$ON<:V&ZDJ7B]D[2?[0ZJWB12F"=#'/#/%H!7-42(#,'E=8'R"+>VT\*
+M11-):53)F$*Q4)454&*EJ'ER#G!4C.VS,/5NQY.L$I0$D99I3C7+4Y4T.*VC
+MFKFF,_&S0CA<`7!CQP%0+<Q&!*0/>(*J&_/=V58(![P01B23`3Y[`XA^ZH4"
+M$\!.F!'@'(R\5?FAFHZUKS"",#APY>A&^M\T;\Q)U^\71U1^\U!J8NHD?YE=
+M6:=%?L2P/%9U_\>'1&0?JNM+D+[0_8$P.;GEFDEYO)9?E<YZOC["A75W^@UK
+M6@'[Z+BK']SYSR:'>1QIS?([>FCD(>U7DO*-5?3(_]?\^C$`OQ"4SWG7/^)3
+MJ,2\KBKG>H@#B_Y$9R>49,K^1_A/7B1"MTW&!BH6N5_RG$M8@6PK7*B)JU6$
+MD1.SSE\\&P")E#IAR59+U.;ZX3K[,Q]+29>45>#`E$Q<4O>N>=X-0_-4B%*<
+MG9\PW@0YAV[%,M2Y]>I40C!EVJ;H8&OKZ\43D#YHVO.,15X,8Q@5>_FH#QWL
+MM%Q23`#!8P"GXE#W.*%]#&(3$^_5U'N@8@>%B?$>8&!'?70')C&1&'5[EF=;
+M"[@M3IU_K3F6Z-'_!2+SC0?L5K&.J?1C1T=,<K_US=35=G8XSW!/Q11^3+KK
+M#A:V+X:M(9S[I7[,OZ;X++#/&103I\\&1*S+:IS?)BOJ4>YD^&+&?%K4\W_:
+MV]+LM_T3'&@UX?,975H)WBA!&>-C)1*R\-N_$1OU!YZ;`<:*$9A23T/^DXMI
+MSHBHF.AXALIVVFQ$$39-S1Y5B19.KZ&6"91#_^CYB&E;V5S4BNK#;E%<QDSQ
+M*R(@>M-GEWK)S.;)!QT9`6>V;59[F9I17'5]56"L/N?S_QNGZ6_&E1`U3XS1
+M$?C6L5!0AB82X&LC4DF((*DGS__?V*?32_$?8^F/JWZ3ZA_2?&^^=I_H8)T-
+M;)X;/R6:%FFF-UE?HY,.\K7^B'L-Q\YI.JL]>OP!?HL2U7))C-\XDE#^8R.L
+M`3!O/`;5JPR?N):V_[&BH3AZ&GCDY[;#I\\U?5N?*#.1]@B=-NI+&#3MBLG;
+M2-=DA72[K4NO<MP5.S/W>!O^RL.L8_Q+EP8*$4S&V*[^W9,W?R<G;^^GV1N,
+MN[_%KE#^[/\<P1(41[ZQ9:EC`J26MRVMD&[6FC5(QGDU+EB-2Y8Q41U(5)2`
+M`^D^#25A/7Y?HL*J`?%`5&'VMA/LJ?1I&1!G"9/LI!B2%C#_EQ/&/+GBTAY?
+MEG]?Z=?D_"Z/F_&/U?-=BH<)*NM<%3GF`R/C1E/]%=T;I:A[+?.MDF5(@\4D
+MZ(YM@0Y_IL[;D=Z\O.DYU7U^__F]<3W:_XU):;6-='_&<]@P>F.R.<[O[>%T
+MMTNP3*[&EWEE1HK],U,8>WBVU*?RIY<XLKNSI3^+:Y[^Q1S]2UNZ`^)T;5MG
+MV_Q\&YM:.3@O5[&']'<WF<V9X&S[''RNVLKQO'[/==[E[/9HXB,[/BP50]@#
+M%9["QJ`((HQX*2"3J:(+(?%BPJ!]F^*>_^*=E^Q1J![C6L.KR3<:RCUIR,P&
+M*./;G"OU6+H4"'9^MU9T+$0"'O#1T250J*7,Y>XM=H%,V=ZM+DP<+2+MQUD=
+M+Z[(.8F7?ZD_U?:M(_QZ#&@V#FUN27XM:J[0S$M(3X3KI^!S5^)8BIR>SRO5
+M03_W/V=I;_!7EL>L\O4X].]R:VK]>.3Y71'E`'G]$#6Z*E#'7Q>QC!B?+I\0
+M]8%#X@5GQ`8,A[)%5!1@'Q(.+*_$M)*(Q9/\#)[7XV'M,GS8L]_@^74..E)8
+MC%+!&(.NPI3G`VH#-A4U`$4QQODU]-]=_%]]]I)=65.1W[#)Q:%$E4/_?+W1
+MJ/2(591#`U1B6PS2<KGEV(.ULVLW;"L\FW,R&R_&R:37@]!\8Y7QO:N3ZYQL
+MG'K3=7?J<C5BT11Y#4Z2MT+NI6_D\FEK9;.9SO5(14^[Z%#"\F'G"MA5>WZ\
+M3KQBC`Z\3KLIB@E,A'_ZUX+0E51&!$<H,`#&-L3%)04E\#$<#2<G)[@U]M=N
+M)<['QLS1=H\-1K^V,O1RM;&\B37:236/;0O7E=\T_Q5^=.Q2Z<4.9G3PQJY8
+MM,%U4#3$>KUO??&70LJZM*#WG%AB"PJ;%DA^/B^AK5WJ9<D!V"NI;IQ33V`M
+MK.4<#[PL*34M-+@K)Y;@"8>G>/>Y92TS@^_\+P.Q.W4H#K]=@J=<!9#K@==A
+M0J%C8A20E$7KM'>M!8PBC`>/[OKZ7@PU.=@6G9P#9A@H?N=R'4;OUI]*--R$
+M^QCC0K]".78^3M:(>I]K(ZF<F[:R?O9=_+^],Q$GGLP_3^&[38+,JV)?43,[
+MYSGD9WY/8;G0)S/RY17T.-)6#/P#PP?O5ZW=+.;\5;M_?QOK6L!5=HAV2J^?
+M55;^?D=%[]4PR[G$+>G8D<1!LK>NMR7Y<HOZ5=FH./7FU"S(H-Y?7.?Z^[RF
+MD_3@\#E\W249.L?7GSQYYU_,'?',[WOD!((AT53O24(*':^Y2G;M$4DP?<*K
+MAJUE"&"*@@$\#&,#`F+BF$Z4^6YH!H3&)%0G&.0/>A#Q1>'YC4B>$,*DV[&F
+M3="[\K=SM.Z=-:26I@ME67XJ@IU<^E/T[W578(WS\KL-[G1=MU%3D5`0JV_K
+MJW?)ECVU'P5W?:<?Y.8SW_]MKV.O[N^V;=CVM:Y%<AXDHR]#-@Y-9]O0=I\6
+MK8K_)@]=Y:,YH]+/X7P\'N_D-I\+X4QEZ[(;VIB^O)?7*"'KQ8(HA"P!C(=^
+M11JCOV#WP<\7I'?>^>QR>9\/^]WL?'YOL8C>HYSWR)-76D\?U]ZR+VV51NW5
+M2W3?A(\VM^OR'D_?6SZZ>V:\K*R^D5TYMEHZ'$O>:"/;O7O"-!3X5\75%\3;
+M\R^55##>!1!JW@PL*"\JHHD.7(V5(<PYC1LI0L`L7=9S";=;0M,(UD!W#<Q,
+M'6=E2`KL]%U6/JI2DZX6ZDM]2-!M1>3!9*6EB?AR%`YB%3DX:I[KJ\3V7%F9
+M[4R'2_.XU#Z6<:$(<G.>J#NQY[J]7D4ME0K>!->H;NN+QET"'-CT,>41/*%M
+M\EJP/1A@LL8HPA0\M*=M)/*HL8R%%\L4/'N'Y_W?Q?DX^M^@\?V/^>S]2M/^
+M5('7UH43YAK'&C\IK_5,GY9ZL*7\Z\ZA34=NO3JLS*B8F)B6IID1U%)(9U%1
+M,V&5X_J%2;LD^['7T<)P@=84LWJ["X%58BFQ@#X&"%0H.`K*2?+ZH5'4V0]*
+M+'595;2J"D@4K2J*B<"$_G,*(H<U)30<'-E-!S>:G,/;#XO.5CQY_"7R\J!$
+M#!UAE@0?>SV8KTH]NKB/'#JP0GK\_^VF$TCF+QT;%><8EWI=+8ATM/0_ZT)U
+MKXH[:AMN3]/;]7-FY_'H:.C-H;)7!@3/;)2\0+J!+H'HTL)Y8#/*T60/F`8P
+M#M34'C\IY4\MFK4&]644U:'0FFM=:89IE#4-P':R4OE_)767%M#W?^2;TE[G
+MK$Y?=NG]Z6;.)_X9SIX2?DJDYW1:XDV<]HZ&A/GT&O9^\XU-[<#T[K]?QQU^
+MNCOE1*IP_0X=D@GKC:4/3/`13TP5%MD/3#T[8B*0*1&&,"$"#$8B?P($B@!`
+M92`%?.>U]//U#\&CJ5M;\1W_9BP1^9M%W.(OBCW+!722E4!#8G:E%9)2;4*B
+MFHI2F=4E9%4*C4YXE1-JYQ7554]B$2F^Y0S*0H9B9H^,\9XIXY'QM)12*2>-
+M%C)/'(L$45(&S!LJF!RE#Q?S]^6;^^=GLO9GG6><\H\?@\X]?\OZW_O@MN7R
+M^R;_/`C7LCDC_<,/-.5DQR5(K)TZ*8Q^4K^SF6EH@6M,)AW7'>7,4M+O)@\I
+MY3R]VWRH."(J>BA&"(^6R1D&*G+9!D5FPTL)RYO"[X;^_X1RPY1O?M#P/F?G
+M>_[S_3[>B=?H_3C#]G.[ZUVE^[S'S/*-;5T2HK+"!26$B965UA6D5@UTZ.-.
+MX'W(`YR;P7?.P[*8MD:RUHJPG?`4BD#O@,$-Y@";SQX\#$1X$&\2`_XP<*AQ
+M'A9'0:T.-[R^ZE4?RW9PULTP3\I0>_IUAT:=DF6U=5W2PL!7D5@R.BD5135U
+M9RBUR>U*TN1;J8&=',\8YU=01XF,Y$Y"G(!$G(%7!5$G()QV4"(@'((B(SD,
+M`10Y%%:4"SD,ZJ<DKDGD>1UO<]]7XE<OR?F^V^^NU'(X-U/I;W[=S0H<SD/1
+M],D0)DH5$:5*J)$@2K'ZH]+@&%_1MC@X"B,>)Q05/`'S/@[!.Q(7P'9BP,0$
+MB*C`-01B/F/'@<8$`XD#YYP.(.).`!.)$'%0Y=>2DOWN?5R=GL=?X/P^;?[&
+M?Z%@J*R1CV@TIEI*IIT"1(B3)FX-Q7T>*2/<HV-)T<S@Z'!;,<9T`=#=W2;L
+MB,$$@<8#=0III;*ID"R#!)-U@DXX&[55#=#<W3CUWQ[\W\/(-WYOMOXO[/XO
+M<_"P>W\W[Q]QK>3N\?DKE9?_6:<[C=MG<7.\FV]O7,_5ZU"74`U)%E%=E<<>
+MNP%*Z,`8:D.R`B(R3L`8*(L)V1[]I;";SS@0/GS`CX?KGZSJX3CF&V<X]CP9
+M5M9#1VI^YN_-6F%J8=TJ5210(2(4GS7M_FOT!U][H^;Z>C$'IZ<=-$W)#ID'
+M%*,DP$1('3`0W65(%*S+I@GO:AA]/JGSQ?4GF4[V]K;#@TZ.2E09\O+A2UZ%
+M2:$62Q=N''J0GSZFJ)7I41(TY]\?"2`,X,SDT,Z='-99@55@=$!0#4`Q(I)T
+M0$42((2D8@4*D"".,$I&LT7Q'>'5'+'L?.NY#X7SO-6A_KZ'Q<V:L>5Q?A\8
+MYEWNNZX.Z'CBE(HDIJHDTS5D$[18&9D@`21'2$ZGMZBA.N3J=6*BI)VB#&2=
+M8J6AVE"3`:P44SS%-7XS,'Q/35_O][^OW9FYOF9F5-9W/F=B3Z81B$/I3B5"
+M!JF<6]IE!+R")8R3,$1BA+R*<:RP+%*9`SR*9V0<[%0YA6@T<#P56NZQU-?[
+M.GL?(7V$S[S/RO:Y?TPRYO[?I)NL-<PZ\3PB2(E8B1$$)2!&+"Q*'`PEDGJD
+MI$&0*D1@9S,E)5[,]X/!VVPO![Y\:WD_&NCOQ_L)O1^S'WPR^\YM+QO"UURC
+MUJ=3$MTD4ZHDY.#J.HF\ZH*0ZA2=%JBQ2!U`JR(DAU$>IHB8LL@8D5[5`8;S
+MJ/$?(_^_@OM'X1_I^S[J9_B)GP9ARB+WN.+T#%])3%/H11$$8!1>5]'G7P%0
+M$@/R,$PPB2,04`\R?Y63Q8I#FYJ%)0)A!!3%$!C)&QL$;(Q[7K?6_%_J4?*]
+M\&?!THIK2S,UP-W)KH9%TV`F;;0V$&,`I%-*4`I%#X?^RF$`VQ19#:&&YVB(
+MR;1=GN'':NUV:;2,?T'-BXKZ?^>0;0K[,S*YN[[`3=T6>_S1W-+>-.,4XU@(
+M2DA+"!8PI"6`,5D-$-#0D*DSZ*JEA?H4T'@?'ZY[3D\?]*SXA6'$G,-WV/?7
+M)R26Y*+C((8(H&2,23.`L,TE$%@%D.]I@PQD"BDHA<"E7`C@.JZCJCE[!'3N
+M7!<'3V;U304:PX6'/'UWNMVW.+HZ?,H;CP[N@=U.W=R*FY0Z";MV,&+8&)'=
+MC`%(@Q0#S)#@Q0FZ&Z=&X$W;J4W8W,8(QW,(-/#'2C'F7_F?OG^;Z,F239\K
+M+JVI))!4J@T@0#5J`K#J#!TITI2=4!0PRKAG:=6H@(`BLD-X;XHL-_>.KK\/
+MU)^-]3B]CZ#RXO)C7R)EQY''DJ8'&6&*<>5!RM[=I#``P1BH$U23)"JR%F+3
+M)`3C9K<KA\+2T9X/+X#T_3^R]/]W_6\NO?EEG/_R];N_)-?7U]K/WCH-"3/+
+M$70:%41`S@:!",!BJ,DT!H84H(%`L!T%,1`(0*"`(=P0[FSM#;IL#,/*^&'A
+MP..%&[#EAMTL(#N()-EMFFR;"U)9##5ARV$V0AA"N+*`;"88%%22B&SM8)38
+M;*/@Q*>$P?`?>?YS_PK'O?52^U"JSGRZ4L4`?AAA8(5?"@0A49"D!$!!0YI,
+M/M\6`8`YJ59#5`2TAB#4LAS<T*DD.0I*(2JI+%1UXQS*5+F4[P%C]OX&T?CJ
+M>/T=4+4JBI3B0Z3=TR].!%%#I)4.C$LW$:ZL0#I`6*2:4@@PFL/#)6?0QT9]
+M[6=WZW('^3W^3FV]+I<R[)=D.3'+GA"@9VDI!56!G"*L4)F$S0*5LDIFU8R%
+MGGMQC`SS],9'GFR.RIWOO_ZZ\O3R[O)TIY$H7-Y"N9R9V9TQ8F<BYH#((JL)
+MG""*\K`2"Q9,R+#(%;0-JJL;J,<8XV#3MZQ%NWB%W\?D^Y8FT9AM00UHG&WH
+M$*/@U=V-L[1W61@=U*))9/<)!I0PA,2=V[1,0A01,*3NAU[.[?0V?:?D]9UG
+M<WKP3W'<J%@H=P*RB0[D#N,*BR%D8Q2'<BJ3N=RT+YTW]P[F[[-PCZ7\7S]O
+M@.$TXYQ::RDU@JS7!UM"4AK8`PULEB2636D&H:WCUJ037#M&@!0HIU!)M$?B
+M?3^D7>DCC(51!5@?@-6`0`0/92I?>)2I*A%(8`%`8J!F(7H5-)HA8"F:J-*B
+M@,&"^7R^\O+\RGXI;SN=YG&Y^J8C%BLX\!KJ:[18%`8Q83B(1=:2H2@+B2HL
+M0"HI#$8@Q&$TN)O'=_=\;V78/B<KYO^W9Q^K\G7ZNGHHFPMNS8"[`V9T)9!V
+M*T8P"R11C`MD414@:D4#2=0*U-C5Z/+1<W1?B_`^Z?T_:^>\.FF?H["OHMNW
+M;MMJS8;`V$B1)-A(QMI)L@B(,)LE2&@LV"S9-'9,>34)7>-S-V=I_:[S?M>C
+M\OM?%P]C#4X5MX=E=8U:H*&J"13!.L:JH*H=0JR=00WR`Q"=4#:J&,4628)U
+M")TQ(S?U8O4>HUITG3N[/G.#LX.$0M)PCPV,X8*3AD'SF@<)$49#A(JPX8<"
+M`]NV</#7LXDXKV%?*=[KUWR'W3X?,=WULLYF7-,PS,P6&:@HG+0F<$56,12%
+MA&,Y4K(463DSMY<<AZ&7OOG>]U<7#P4Z9@N,8JG%Q);.'B3A:K#B)@(L!$(<
+M4`4!&!Q(09!96Q(<0<3*K`H-M8<)Q<TXX>YA#FQ\/1<04H"QG?D.N>'T^][W
+M^)V/,/E'$,/>;NQ3KHFN.LVFXW4-VXW&X,,^:W0E0W2+)4A@DPR&Z;DHDH"P
+MW!NYIR'SG>]#BX3SNY[@IYQYPG<PV3$6(SS@6*=QN+(8D/.0*"$.X0P@E"H5
+M``J#0`T!5&C4J".E2R>VN;G"*O@W-6U5'3#P>+HVXE"S;5:);2;`VPVMU6&"
+M0VR.VPVLL@L\MJ(3`;:63;W:S4=W4?,X*88SQHWV4%')[)PCA=73-HPHX=/"
+MZ?J,(!44DTY#U6G4+)@LLD&"L0-,FDP1TVI4X6F;6$1PF?1\'_]X?P>Y\?J=
+M/Q'=R[^^90R$RY4B9%,L+$#*112,3"$^;@*:`&@"Z`NAGIHII,>?NC\/C^#E
+MET''T=SBG&'$!QR+#4T8%@HLG&V#`*"@H&%JIAF'"JDTS"\+3>5IZQV*.EP>
+M4<<MQ\'./`8F9S3.VYM0N=:"9VJ%)'.AF0%)0!0$;4*`BH&FVPVPC+;;#<.]
+MJ.#(+XV+X\7NL%8-ZNIQMS?VA'/1?5Y>0MD%4)?(4P"AA+Y!S5"\:35LAJLP
+M!>WE&D7]HB9CH'-YN74W=BTR,@^)")UN@Z:*0TU9WK-F>S&#9#%LU0!$V#")
+M(B$-@9LLQ0-D48DV;'ME(Z"7`Z*LC^K`.7JPUN@L>W6Y8VXWX4$+KY?4OHPA
+M'D`*(&8A@0*6(+`,Q+&6)8D#,"Y@S/JKZL#X84?#I>#SSVN_:EF2BB*(-$4J
+M;;%4-D$$&&:9R@LSF;4K(R+(*C"9P-25@9)+DH5)35%(7)DEMK=;;R"V[9V\
+MV*RL<QX<?$37-:#(L%#7:0I`02$UD)K`K2N%@+AJ(XFI3FI<-)BKU6'+S.+7
+M?G&[S?R;MVZN?)L3G#130T#1D2:,D2!HRJR%@:)&%54RB6666(92RW*9^+::
+M#ON]W.A=S[;;39+;4JN3"<F+>2'(@R&1:0Y`#6E0EA%J`:IER8Q+@7HRZ.CQ
+M<OH\?'>`X#@AP+.`X`[A%(I#@(+.!A1"4.!(482G`R<%CLN,&-O5Q;S$&_;O
+MG,WN9;CXMYQC.)D<E(LR.2HF3(@(+(&<(H&;`&129LAG$90R:(9QBMEB*V2U
+M:)D:N17<5I?-VMWQ[$73NW1=,0$5^"$B%"0(9.9`8',T5D*063F85D*$J49,
+MX+`O(B%^"RI>9YMUN:FWY/OL.FF_APFSR!YJ.V6VQ86VU518I:$Q45`*`+:H
+M"H18@BD,9,:6RC;93C*;"ZG:W]OB[&R=YT?7[?V#SNQL9LQ>,OU:S5F#,&:J
+M*#5@9DF:2*!F@"A,TFJA%S4F;5U5.?O;18]'I]WN=W=B;;;=BZ7-Q=<"PN@"
+M(8$)=)%N0&`7(,I!;BZZ1@**C=E&W-MP8*[PK5N[K8._V7ZIBA;?@54@$*HJ
+M0@F$"@IG@+)>@(19*HI9#/(L!B`0H(%4E`H2$&%0215$1A+CNS4W\F+'P>]>
+MU'7W@\'L]FPQ2DP(FPBPV$FP`1)L:K(%(I%`U(*IJ:E4U-0U#*<7:-KF'P_`
+M\0Z1T.AO8]2LAW]FP[_F+ML=NQVM*K#;)L9J2;2&Q-KB(':A%6$1$M(8@I#:
+MJAVE)M=NW%QC3R.P[WI^+DY.3(UIDVH:SCXZ:\8M7C+27CQ36@DPUEA-:'"S
+MM)J%9-4%FM"MM(4(:33`Q&'$X>,.C?+76YG&/E_@>VXN7+K,R!DUDMRN5L0H
+M&AR,#1-22D%%"2(DF@02M(:@&,F8::6K*&?1H:7O!R^\3.^KN]\?!-_NGO\H
+MLPEK:VA:%J*`DM8%*(2C&DM5F(D"D,=JUPJ!0&TO(V5Y*[TB"<T`TT2*@IB_
+M5=KNWP[U>YZ`M"`/R/R60(!`820J/D)M>:<PUEAS,;9"DFI@448!8%29PSI@
+MLJ%A+\]1E4AJY[R\XE^;L:O?XL>.W%MW&V6%P7<*ZHEU2@*A%)<$BPN`6Y%`
+M$$$@H)JFB0TBI4!*417<;-2JQ7'7*CF*WM[7!+++@KX-_2/5Z3U^`WS=OF^%
+M`63>3I0F]PA+#>P4*)"R,2&H%WUM$-Z8E4W[YTG@ZK>;/S/Z6_=V#?Y60RW<
+M?4W>1<270B@72`H7$+A"((@U06F,PG%.KL^J['<]R:'U&@-!ZE70%06/J+*J
+MB0[D$8L1`P0AW"=Q(49"QY[`9P8L*//7@YN+G\FO[MX-#/3CXQ<M9KQKQ'6@
+MAK8R1M@:X*'&.LQ0#$DP,!F$XN-"<)Y5F$Y')_(^][OS;\XXS%B,.?$@F&8T
+MQDIK#1%@@88&0$6!E`615`R#B:RO,9$\0B$X`+[6SL;>UVX[E[I\_!<M7*ZP
+M0P0D0A\0@E(0!"$2D*5`SDF>JIA%("`LEZJ%^>+G=JL^7I9MKD^)ENZ&[LC=
+M26VX\0ACH$06&,BP%DR(&2*1DR061F6+*Q3&1@'7BTV2TV=FPV<EIDYW5YFI
+M7#+KL^GBH,=!C9$P45*!0&)#*$4@B+(<<4R8%$DLF345#0%!FF!/AH*;EAJ@
+M+V]TN^I\%.IL[Q9='!JXA!JPBN81"A"N>$SU1*2(`9X04AG$29C.7Y[ZV=KR
+M?"Z&IC,9O;[;CY2&W=<7+%VZ:$R")DF1$)DJDH!G:0I!3-4K"WEQ@S0',U>+
+M1\%U#J*Z*[^OE$*,@Z>'L?5[/7C'!>IZE010QTMDD,!(I*JBD-S64W+#HW8P
+M%DE0P!AFYA$)N8544H`UV"&LZ[14=PX865?P^9?SN#>Z8I;QK;MS)F<LU\N>
+M"N"F95+99,[9+(*3,DF<)4R64%0469%#(7!=MUN97*5@W#K=#+73U>KR_+_$
+M];S^?LZ-&?GV:VC6UBHZU)K2:R1@YZ*36`UF00%U(2C`H0Z$*DL1%)T3H;;$
+M7G._HUJ2M'!P>%YENT;NW5IERY,EQD,BY$%R3(B0,CD:P&`YV!,$6$L%,Q<Q
+M9G<\\^\.>?8[IM[7/]CO\GDFK?Q.A9FSCG0M3/FS1<T*S4R9F")YB%D%`J`V
+MPED.ZU)=F+1!%3NA\-APU3M.#%OC6W\#M:N6VG&VZSDH5T`NL*.D$('0!9":
+M2"A#818+#0%59ILNS?Z77WN[CN[9JOI@Z<M>'U?V_9Z7:^LZ'@9!6QI;K6Y:
+MLE0520)!()$D((`I$P];!0U,DH2'7"*2M9`[0**#U2=<[3U^EZ7D\G3O3YCR
+MY9>+(USAXSC*IQ/&%(LX(*063CA[9EM4EMD&0X[:K`2+%XV$#3G:-?2[@Z<H
+MX<=T8+U$WHKT;D;&$-EP*CB.$AQL@.(04%@%(+#1D62,%,V!H8<.&4Y#+K:F
+ML[]5R\V#-R/)\*_AY;5+3%AQ5*4HB"XJH+#6@HH#(:TK"4DK)QDUL&37CBH)
+MQP!@GZ<=*[RR-,=_VKG8WQ5;Q"HW9JU4)#P54>80\"#%-D%AM2,!=+8%(*;6
+MH4!$V@B<7535,SR6^KS8W=!7=^R\C#Q3C5=CT[2K32LJTM):T(=K)%EB"22T
+M!8"P+8*H6B*A;9;I60*QVS';Q>-TJW#P#Q/6<LUS6Q6F+&X[*E645,>&R4%!
+M2<<BR*!@#+*A2*B69,PA1C*Q%#AQM8ZX]O5KG:>QAY=<HQIG*SYV79!<EM5F
+MH9D6:I!5"+`S6'*C:C"4AR9T0*UE%.5,RUO+<ZAG,^]>KK]CT^;Z/W1[_X?)
+MHZ6Z.AG.72FD,$-"(PT0C"+-&+4EA&(&@+!3"32:(AI;=#0T>3E?==\ZGR[?
+MA<S)W>7?V3+J#$R:F295LHI"Z"@HC)E`4,TE8&@3#%K`J.FB)H<NFE7P3T_%
+MY[7='%Y.(X]V]-WBVW%%*7%R-T%+KJ)1%6%0B@7,DID"@"XIDN)=%+FZP;KN
+M.;KQ>]M]?W7V[H]69=/2<AD3(#)@)`-9`N5`8+DA"!.#%GDC8&@+-G37;'#V
+M_=^7W.T,$C5:6264WU>6!<I\E\HVR]D$S`%X"@7LA2`9I(6"%)*D%(9B7I>-
+M-5MTS;VW9LFT4NOHUXFT>5O]W?CN6W&;5MR71EJ5+B199!9+DIA*@+%+F`PB
+MA<%PXJ"KK<&.[:K(59RKNZ/$Y'(,G/XG%Z=KMJ,V&CH:&,8#!HS29H3225(#
+M,THU*P*`NCIC!3,\<V#EGN\6^\7O'7T=');EK.'+CR,JH)%-3,(618IDR("P
+MFN0R2#!$1F,68\.*G'93,^MBYIZWUU\OX^5<KEK*'+S:;-EFRIH3838R,4-C
+M$(+)L@+(I#4(B2:A-13*Y3*N6JSY;R_;Q=(XUO'NN+I=;<W511<%Q!8727,I
+ME)$!212%T`N0$"T@MTUT6XU\K=D-EYW,VSP>MKEVIJ%:F7+E<IHZ*4CH++;-
+M&"&C8YL,(I(R*2&D$9,$6+-#2M,T+HB9NK'15'8]H\\\_=G[_O'HZ._69.1D
+M+#69#%)D12*$,H"S6AD10%*("$X\H@LX@U]K=P]77O/N9[OT?#R9>$\.[J'J
+M-YH;-DTQ39IJ4V!*`[*3)DE"2M8%D-C(NR@,N>-A7>5VHGC\/N6[3U?A9[M'
+MT)X.0U\>NNO!R)<K"T8,,F+4L!$*A-8&NY8`P@(2N5UG#V)UG#\#WGK?:3?Z
+M?7]JZNK>9S2W3?GLFP-C$--$@;&1D58-L$"960U`E299J+%#B'$-O<Z7`^!=
+MWO'+N/D<4Q)K;"ZPX,<>*V'&G'KI@ACMXQ),$!9,3C<3`4!(LF*63%7%H.+:
+M<L3EW=7H]#7PZ'6PX\9CQY6G':&#)F&2DR9(,D51RIVT,)"@84UZZ9"8P@G$
+M)D^/P^.^9>0ZSAV<1OZN.KKJZS6S70X]=5)8:TK)0BG$U`FL#"5#6)#N!;22
+MNH;&\3QE$UFTR[J<_=X]-?M[9PG$\1Q3A9Q2SAXJ*1%DK(,A\Q98"PE`4.)#
+MB8,%.YCAQQ%'BEO:.'3R5O,>3C^0>5Y.^<O:Q&FXC%+$88J*"A!"&)A&3$@*
+M4DJ$Q(%,,1-/$F**LK%,5]Z8^(=US.]Y>\Z.A<V#BZO,Z&L-V*_%8UK(UM8&
+MTMH5F&LJJ*PK*5*$BL(P7K8'4D+`4ZT@I&06!A(LC!3O0>\43O-I8KJ3O3[.
+MG?'MX/>_#\X\T/-`\T?-IAPPP",\U&`I)YI'53V[A@%`$S@G&`SCG<C.55F*
+MHEU-0:Q)-<<,M?F\_8Q1Q[&O3I4@*4%Y?,V:I>`L*A?50HA"^!20+V\*9FO?
+M@??6-&`,AAUT(AWN=DYCCH=E>$K@!!)<#S%#H#H*&E:1`V6HA4(@(A)LA.5)
+M-@1U)BA0ZF4C@=!+0;<W=B5<@O]PX*#8:;%*FX''4=))*:;&:(&PBPV,0!8:
+M,U),)+`V,4B:ETV6U#IVY[/G,]GA[QK.77E>/)F3E%R.)R(B3)C".5@(19#4
+M0RAK:Y5JAE8:A4(50)P$$^"<34H[M/I=Y<W<F2O?P+%5?@A@8IA!(A4B%7F[
+M>"R<UL.9DQ)S((X&,(LA4C)S6@B!A(8)S7FQ!`P<T$0W]71T3H'Q>+I/6]YR
+M?-\4Z^2\.OCA;:3B8DX^*DL!2!\N"BDX`Z>4C)RD!A0%=*WIB8=,8A@O]OP&
+M.,SUU1#1BGK08)FGHKM"V"DM)C9*82T)%@=J1<"L@@E*`H@3Q"U0AA6$V,&K
+M2Q]O+8@3E0+)M8(XHLH2OF$B$1E)D*ASAS@*$YN>R,F.>P#4!4!0$.=B<]0\
+M'90IJQNQ3<[NSG?+NW>EIGU\NLKDG)D:U!89`:T)A)D3#!9(D4U6S#)E%->4
+MRM*9996]KC,CJZS+T#;Z'=RUNOAUZ^[52S*M!CKRP(2=LD,,(D63)BU@6"<%
+M`82*!H">9P>&D=FW);ZG5\;)S;//%VS=$`Y4,4-81"*(@1*1SU"JG.\Z!8%$
+M@L%(,#GPXP!4("B$@")2!#$"I`6M&D:U!%2@Y]*ET-W#>VZ5J%\/O^#;7:[3
+M:&U@R*38R(0VB#)4VS:@[5`4!5=5Y2'@+3MI2MK738AYF[=KMB=(1GT$GT"$
+MG@G#C$*0R<DPPP@D,,D0.W:I*+#(,4,:."RS'CQO:8N+L=V=]X?0UM&?"89A
+MCB0HB8JB2:X0UH"`<>*$ULF`J`I$FL>/A,)IJJ3Y\,!,*4*%&MJ;_=7(&[AN
+M2@2W'@^7PKKX)0H'B'X%(4R%`3-)#,&IJ$U"RM3-FU;"K.'@U.=T^\ZW1QF'
+M3PF$4TTPE1285=-L9"P`PC2!*`1TQBP8*+#2CIE"85KA5I\+6-WA<%>-XVT:
+MF'A8<,:#"89A2+!`PB19!A%@I,)#2*3@9R@,14G#3$Y70P2J1++;W[&*ICK4
+M6@:`*2**+0A:TRXL8PI+D4&%S(H#`+:J0N&DP,L9!)%DP%K:RZ68++"Q2[2T
+M2W15Q='4RMJKT.#HCMUX;>$85A$,0-R,"4B.E218J2$4@01&2`W*$4W)$G1N
+MH3%I!"88,4-U3=T(IK)<IUR&+3BAM7HMW#CCC$#SX#P=!+[X??`<?5@*CN@/
+M=HA.U;%JC(P%`-I)W;8J@*4!`>0J7P_,<=!KNUEKUQ`+NON6!8YO=]J$6=F[
+M=><>5XTIA=HP8&UBD$21@;4A&!M9*@*@<((NE2CR/@O91+ZZH>U0^[=L[[UY
+MJPTW8U[-<6'WMH(FT(;0-J0ML!(H;=MA8"BS;JHF4WS)EU*W^AUNIQ.O<8C"
+M;V+>JRK`V"L=6QP5@3`$Y&,!UF+@AR0-0@5)0,D.1(4B@HD,,E"B)&DUFV]9
+MDNL+@Q&H([I:#=%)[2-L50V6P!E0F=L4!0LF8RVDY&2@%%Y3EN9N!IQI%+E&
+MBG.UZ^OT.&H[P:NKRN4+0BE,,4:K"(B1$!$JDA9)SI&0YTA&$?<\^"525I:D
+MYL&+B)$]!++#6V;0CR/.--$4:%$UE::1HD(TQ0%"--*C"&%)I,)4(8$(R!<D
+M0N;F4,:V0R79*K)LVGLO+Q[UO/XE6Z%N+9<B7*%LPW6,EQ@HA4A<D!@"P+D(
+MDG:535088:J712Z-Q==VIX9R\WBTY_O/R>OO>CV>\.IZO)I-$'/2C8&C"I2&
+M@)HR4`MLBDJ10B0-#,-#/E'+R<E/>?2?1:^K7EEN-W3>DY,N2.+AR)#(AQY9
+M<FHD,$PPC(CJG)BX<3DN-W3J,W=TILV+Z/I^O]U\NF1KY1F09!R&0'(UO)2D
+MEA.1%@"!KM4"LC)04*2%`F%A2B)PGT#18%%"91MS)K!7&36V3VO2]+K]57O2
+M<WWGO?>^7WO3Z)X=Y;=YOW[T(].^H4FY@DG2[V`LC(;TA$F$I:"*;T97?.>#
+MTUZ-V[U+=&&JVXW;&!W4P/K,>#QUGV!0I?1]'T?(*%]'R"`'Q4B$T=HCMI*(
+M#(*3NF%D=4\,/=">3R9Z?;^SW>S/EUAQAPG`\4XJ)PZN+$L"H09)CZ2J&Q@"
+MD*)IL,,PH)IX>'P\8O#MUWQ^CWW%Q'$.0Y^@<SGZ#9I-DU64,W88=6)0U,&0
+MT8"D0,W2T(P%"+`H&C*S1P2F<[]9IC%[^??OK;/6^>^+MUAPG$<4XD0XI#B&
+M2,#B8%0BH!ID(`43301H-,%#.5=/2&CIQY:RSL->Q8M0B%(6J$M+;J*A<8L%
+MDL`7`W,9+FE0E0ERU4QL@6`=LG;(%!<H5>&1$,4R/;TW5?@V<'3M.?S]?=,=
+MMI5J+Q)IRU0N8EP%R10&`H%Q)C808%R%S"F)"XN$9=K&//F-7KXC@4X7@G<<
+M/`BIC@08IP`<`E9"R`=Q!)W!!)>"BP[EG`IP2[-W:O%W4TZOA^'U_5^B]3PO
+M6>'V=_H7];EZVML:VP*:]:VNA>)KDUXTT$UHA%!A->(%C"@FE-"1'2HUR]T&
+MN;LX=.SO.]X1N]CFY;CC&+);+;JA4N1EP&)4@R2YE,-)AA(DG*%L`*2L*P#E
+M(\M(RV\@<CDEA@)5<,^T%:DX.U6QC7#FNY4;6H\\KR*V'0X4="*"CB6$V#("
+M!@8H1`V"%9L9,2VZ,#$=9,4!4)=J4VQ3?#UZ#M;6H-*<13')G!2!.0"<1,)A
+M)@G&"1A-206"3C+9*R"'&TXQ1.$L\$'D[7A?/\.3IZUVMO"F:M1E4*145M''
+M)A80&%P$(+H(P-$&XTU!JEMJ%24)G]G;(+!D,V185)0TNPU=NFSM/H)U3KQZ
+MN##3UN_UF?:3H'AF8V/$W;[W4,NI55'*:EC)<ZB)&RA3`G+),Q`[6+(&"';&
+MLE2"$T8#HD311<ILFIM55%QDNR;4]AWL[X[\W[C)O\7)D07(4KD,YGRV89B!
+MFA62R`LU)(@"(9SD3-C<QBJM.G4"E6P6M>AQ,G1YHWN<VU/`GSE6>`&).GJ@
+M(2QBP!(I[9`C)-;$8+(,.);36@,GJJ,)#"1'2I-,!:HK1I4J0<WAP</,'/[6
+MK@M;]@&.**^<'&.-.2''K8-AV)3L*@D%V(BJ#";`,4KUI,$"C#"2LB`=;`9U
+MVU3K.M3?U])YG7S?#Y>^>MX/'Q9:S7KUUG&+-=:)#6C$@R>X8L4(A*R37`UH
+MZDUFOCFLXSPY%6VW9L#48><Z-[GWP(TO1AP.AUB.!2ZA+KJJ$4DAU0@YVL4&
+M$I&#`V,DT0*!L$@XN,&(IGR[+K\GH^5U]9U\)PCPW@O""X88&/"<'"`Q!"<`
+MP4C"<,0!D.%%,)*'"<%I()71B#`JL72$,`G;,!&[<U1+AK:MI=1C#2>IFF7H
+M(`I57A?FOIH63-$!(7LO8&9D+))8(H2,EZC(DS5I6&!#!8MYN!Q'<.6?8<%W
+M(WN-M:N4KQZTR3)$UZJ9281)DP*)*2(A-<F0Q81D-=LR$K)3(,NTG?N17)[U
+MZ_%[SP?`]=XWE>5Y?/Z''W-7<W)?MU>5GH&9PK/4$S@9XR,#.,!(<R*2LA83
+MF$1M+(SF]S9S8Q*<PJF_T>=N8K=JW$8C$XL6*;N.K,:%D,:U8-A0MD!RK1H"
+M0R6,D8&3"*1(9(I!@8V%)4QHP3'0.[L)L;`<38YG,Z7K-[>^S^IS?"OX7`>7
+ML\'N_2,%WZK9OW0WUWW>;]Y.G>"I;8;[90-[(,DWH=QA$@+(L*3>MHM#I:XJ
+M3`*B5`;MZE9JFH-_'(<F#)2BC???!+Q()1QYY4>`>*K$)M&*$0@:2;;8%DVS
+M:;5/+AAM#"-47;6NXWW^,\V_9U7WWA8%FQ8$2Q!D0B2)%B$02)2H*A8//8DG
+M/&%9*0.<1>=,)#!,+%DSH"YR^N7?L>'U>MCV/5N\W6W8[2ZQ+;"J,%B%I<)<
+ML;@+FJJQMLI8R%S$06"@,)B#*A9(ZZJ)1"ARL8=Y[]--.]WYXPET5[\N#G]G
+M:V(ADA@@2!'GH'P\Q]A1@1]'E141'R2@P(4`8$8@1D,S*J9E-3-6:HCSK]+9
+MV>#G=WN=+JV[=VW95MUPN,+;:*)*D+;92K","4#""%HD2*6I$TY;L[)A[O:P
+M]/OSUIAPCAT8G$8ISZ^U@Q,C5(9%M"9*PC(&0K("0F0!0*$%8F4!1,(:1HBC
+M"WNW.=_KW?A['AS,&&S#!L/P)`D#X#^I9?@)@D+T!9&0TE1$(P+QI%)4?(,!
+M"E++Y#[N)*NQBPX<*]K4:]2.QW_,]+UQ?&LB"'-,)`1WH&<#/,ZYZE0J(S.,
+M8"@L,\!<R29R%#%`$DO.5HH0WK$T&LZ.?R=[,?C_\WO-RS'BQFV6RVV8[8*"
+M`6BI!)+411`8&)M4LJ4D0M`P+BMI$QG4=RWGG@[?`?U#6Z_@'4ZO,*X-C@O;
+MPO+V^K[PO@+>K!@2]`L9*A+V(D4$)>BD&&2\-4=E*+[+S.5VD";F&41[TQ8^
+M?B'[PS*73W1PQZT<,$*&`/@/E($`5"JA!>BRRJ%`9"]$0@D+U$IL9"R-ZH^Z
+M00_OZ[YX>''C&+O?W+)/;M-!+#5E2'`X`X2CA!28FA,Y-$6`@#I94`I(9KHV
+M1=3J6()@L*H4,U+`+H:O:EF\Z[O^-S9_O!WG=6!V;(LQ\J&/BB-(S@J#'<'1
+MT$O17%J(0J=`D%((06($@0",A"$"F,1V2BZHIS!@8H8":AIXQ-CAQX+.KZ3I
+M]QU3.='1HOSN?D:,XYH7@S.R@#.P82]%`OLHI(%A`SK%C(1)+`O`SU11GSWG
+M(T&^+]NYN5>Q]&/[5.3JZL#T&3"Q^)3"(8AE$BT8U0QI&A)1G0`/0=%QA)$A
+M@8&I`H'0:K"PZ$*PO0C.@>@]R?\C+?EOGI^QRW,SY6YN>I,IE4RRJ51=83(8
+M*023*VLB@,#(XV@H0HBL51/!*3Y*%2D.EX>6.'@=HNKOBAL41'1I4G'`CB(X
+M$8:#!@9HB08&>E6$0*K`9&DH="E)WCO!YA!.]@N?(YP/J.D?!ZW&F9=:LXV'
+M&W$+B.%P#1@@*&B,#1(P-+;I0"DK`$FB$D.(V&P7)-B^+PW>5M2][XBU9'',
+MUM*(:((:#01JBH2B7,D9`L$1!06022T48"2Y@+0)%%#14M)N%NYMB87'=9ZN
+M_[?WPS^7Z?AO=/+NY=Y<."G4J4JEM3L\'4=3$'J+$G4C;0.HAU'N+)9`JC%D
+M6"0ZA!.IB'56JAU([ZG2=._6['W!^'[\;>CO%QO76RRKANA;<#:TA9=)@C`2
+M2X4&"!+A1D%D0ESC9*N1+`:IH"RI*M4;)U!U/3=2YX&[T=99_9F>&O/Q#E=G
+M%,]-L,S!?(UQKZ^OJ20WQ3U)M<4V0V4P5*-F!LJH39C(R!LCZ^@H"RJD9-D8
+M,=H-C:VJH\*<Q-GE\3B_7_6^6?J^7@P67>7.N?F>B%33,!RY9%$DY(R`R&0B
+MA$DM&4A"C&8S&KCG/.6/4]GD[O*?+^]Y9H\SW9@^KVGH].PXF'ZB_@_/UN"W
+M5R"13(E6XA-220)(B"1"$!*`$H"(=<0,(4`ZV(BP$A.N3K\5QVZ&(:A9)*TQ
+M;<IQY,FMY'3^@ZI_9^_'R!WG5C[.9B%+H8J=,4\J93C%*FH&)(D5#>B!O;2&
+M^,G&ED-Z()!(=+`0!4*E0:52H*@VAWFUL[:J-K9Z(R;>YW"R_BZGD>L\ZM\T
+MF:S^(?2;?>]EESR?J.QHYG4&)/$'AZUFV"+9-H@I:-FT&%"B*2"AA-U&)!0$
+MDW>.E$C`I%@,..[J0L8!9)U;(Q!,>/&RWT*P<_F')^>#/&V]OF%'"0YM.EUS
+M-=`61V5C:6)[=@@&R(HI-3(6`9B5(5`%#4&4A0:AJ`<\QMV3(7\'?]??W_?:
+M?'U+.MES%WQQ<76R9J1"+C"!Q%>#Q0@`NA7D"*'B%"(0!*(_9-#`,#(5),R.
+M:B5"D49F-LW)?8Q1!,@R:@QV`O*^B_]_G/?+TU+;=E'`XX'"`J@.%M"0@629
+MXM(@P!SJQ96`4GT[,W"30,&A<#2,NNDN!VP>$>*871ZFQ-FM^5HCE.I5>6\'
+MV&]`^CP!'=E3NL9#;W8V%1@%ML[I3`X=3"P-#E$$(^&/$/DADR8\+L!H^$R2
+MM=A'=I%O1_1?U^3[8*SS!,[:;FOU3<#-29H:I)F8D6$*3,J]HU`0F98R1D-$
+M8Q(NQD0[LV]V=V)2FW;W9>SQESJ+%9$74Y7ZI]13IJO=[WL?9YAS-KGU,7+Y
+MN.]>S*Z7M0D2"N2!6,H+V+(8[Z6"0[%U4A8!JB/<;(,#L)(F%$"H*Y))"$5Z
+MQ%>NQE<>TEEEDJYW_,Q?FL.9X(HT+:YTJ[DN2ZW(`JQDF12+&#"*9%5,B62C
+M(@9X9D@S.6T6?`G(^(/$X<L_%[[3\%FXC8!QYI])0[#U(SE-&@C-8:M2)<S5
+MU4N[MA!M;";0L-8)L,8S8&PC-ARLDZ455@DF_'4&&/AIVL0I)VA`&2!2!522
+MV;=L15CQ.F/+]Y\/UOKF297H>WC7,RIDS,S.5V?"J;8I;A$<<Y^?WI2SH.9G
+M0X&DPL`R8(\S`L@6(Q",CHH1B!H4OI-!-#G.N<XT5K<WG5SGNCF^T\WI?W]N
+M.^Y9F3.M5S,'A^!S57B)Q_(V:V<9,*2R5DK2L`$C)2#*P![[;(=^,ZT)8'?=
+M6,8%A$AJ&'^1E@K@H"*Q05PBI+L`BL:YYG/[MSR_4[CLST?0;T?I_Z,QW-S/
+M?S3-^#W&C1VYG]-+]6PSEE^<&,&!I(%-0#.+GJF&ME@'MTAJ^B:`)`YT$YSM
+MXISRMYP]ZO03/IU=Q6ULW21TGT*EHZ)H^?]/0.P'D4CC4B.'SW3Y*2?UC4PZ
+MPL:&%A!C""#"'>Z$.\%PPF\8+`0B\3)&!OB#.E!FIK,`UQSY&A\;CHS,.#>W
+M_#?;FR;>8>/T/L,I*2&C1(=R>OZ^0O&XZ/;FX-W>'I-HVDVMI-FD3:-IC`-H
+M8,8LB!':H7OL"R%&"3OVV=X.\>^;_;Q[#V>`>]X/7^H[Q^K_'>M]B=\50Q[<
+MY=#9_/\M2D<*:?$]/N--0`.L^[4!Q.A.)G%R/`XQB#B8@`Y2.$LAX4AJ"ZKX
+M7!"HP1@'A13PTJQ8,DE8PQ3[;[JS4P0E8LG`R6$]T&,408SFY&-0.CI31)C&
+MBG4'.@5;M/=?EU3>C2YU`;QW!IK^E)Z]2%50'T;'<_':SGA6[:67D5L8ED$L
+MH!E80)0@ST!!((0"4@@D9)J`BG[MA6\R3<L:$12#)N"J&X8T.&)R<H<UM?Q.
+M7FG+=6O`[_KW>(:7091!;_.B^16,K)$RDDC'1&G8A#Q(BA%5QC=ZFZ^O-K<W
+M$MFY`W"(,@[53;;&5)-M*P4I!A%+(;:(NW#93WVYUL'6=PXUGVIN]7!QSCKX
+MGV/N-C)*H.J/'*ZE4Q1REE"\G^=K**D>#QY`E2HD*1,C;F]O.3*]((<G`G`+
+MAB;SLC'LJ`IV5*R'8R*5@6`=B+V,E81(%42,.Q(E[`]A!FWZKPV?!G?[Q^<[
+M_Y?X\%FL=J[:7"WZ:SBH/U"0>9;Y9)R>\OX5`BJTE.2[A`H?=/3DHWX$I(E%
+MM53ID_`*X:9C,R?8T&GO*'/9XX@1_!SP>RC$4WP,%]+XY!*)?))`%])P*D&$
+MY?!5>SP6260F`58P0YLLLK@?=5Q^QZW0[Y>3V>?;GKHS?6PH@.72DER'WJ1%
+MGXH_C6;QJS,BKTA2UTT<67=3C;7<&*ONQ2FK)')M3>1HZ5W:$+S>?GOS1EU7
+M+_7P+'F8.O@&QID%X['6()V+&%$PL"RBE3G!.ZYJ0&#S6F1"%,1((84Q@'X/
+MQQ5ICP/&VC!.U,[!D8X5=6__5G*"&H8`T5G#4.HPLN.C8<.2KE:$VJ$1U\:S
+M*BD\[GXBYL-+QO?"<\7%^T0"4G/^M/)3_B^S]TA16EA&K4!H.L8[+BOP$SV#
+MN*AFM2X7JG;;W=<G<U,.=R[-6K!^[J<9QX:4LWIZ8D];["UY8R`=297+.Y^V
+M^3JR]F._W/LA2GG/LGLSV5GLA/97I0"LJ*@C('LL@PGVNM48'LI\>E<?SO:_
+MU_$]J>T^U[7M?*]KLX>W:;EJJ.;$=9QHIF[O<ZUVOL4U1)3S)J'BS_?I?C?F
+M#0JRS//R;B?NHJ"TDG5,XJ>+J?G+G\?X].@X_F5ZC?<5HI];CP";5'!!K0[O
+MIQZCQUQ[W&WMX&7<&X8=Q#U/-A!:DL1/?64(8<,^CLLFI)0CZ@'94P.*P,!"
+M@XGPQQQ0D(LLT\IZA2^^=CU+511^)T=?+Y4W+R51&&;XJWMCT:;9X[UG0D5-
+M@L_]$U-&P4M?^[&J\J$QG7NHM>_-3,@/M'XI,]8NH:UM77%E"Q++>SS\GEO2
+M)G1^$']+Q=^+[`8QZ5/=)OA<D:7AXCY\3@E/B8]1"@WL01/297UF^]N&8?M#
+M*0]\AVE_%-@P.VE2P/@IC59P!QXX1D6'0:JM1`TU&G;B/0U<=FU"@84<^:K5
+M*<K]V#5H$WEB*SPVTN%1P]"=$U#'+542H^]\54?9;$KH>D8GW[<^HJF*45!8
+M/XE5H$IWUK1(Y!=6!FE8CIJ=F><]ITN/OZK6?!%4I<;/H"'DT!QTW\>,;&(;
+MJ!TD(,1*(F\0C$023Q^K3#*J2,">8"B`L$DA#'&(X&!BA(0IU<A8.%?8.$*S
+M@\C6]1/8\%;4W)N^VQV%EW;)&?6/O7<BL>D7+RB]2KOLY/\L`MPF^%6\;P5+
+M!JLX$:-M6W;]U;,)XEE?FAZ5KZE6=TR]-N64R6$3#_#[G/\9KCNP1:(AU./9
+MBG\D2Z?(&]:?MV_%\7Q<D-K&/K:PJ(,1R(DAZ@C'J:1`5&**+!).HJ)_-KY*
+M2R!"&`,0BS&`BQ`@HH1476'&:=049#1OJ,S^+R'OPQX1#QNWP(7U2H=Z"*RC
+M%^0\D_$^N;3:.X4M!:JKDIPW<A@K_:GG#^=",_FE:90?92]"ZJ+!Y<.OB'[F
+M)\TDZ.?5DJM\;UVGQ=7D4)(H<R8*,M6MDR2X\>)I$W0J[K4P)O,*(46RDGJH
+MB*1@1]2GJHQ!2"2-OC:@C``XH009[LPL*1]BA-!!C=PK!TP>P.N;Z,O#\88J
+M&=[]?R47F.05_'3\*KZ6&S<90WQRFJ3\YP\2V0'85ONGK/6A.(I#$(DV-.=N
+M>8O@AAE/M02W+(>=JD@Q`%+D:/$H4.0+[E+HYVBNC]34KW)*&5=I5[=W4<NG
+MT]C)D&0"9D3&S&HL*J0/@BDA\%#X-*%24(4&'9:LC)/<XE!0A"BD`HF-!C,\
+M:0T=[[DWO%(<_D^37]P.Q\O?L_NTO0^<Y\*;X2'5'_^[%MFY6&1]B\@#ZCD,
+M-V2TE=\:C.+'[5EO+*VHN<B<EK[3!76C:1^#R\KYI+@_0A_"<J=SI:8]&6UY
+MKVAZ;5_!%/E_9?@6-7BW=J37J:>QG7P_6SI_LAZ?0`R[D/SOL>DA['KSV#RZ
+MF'L+IUV'L`"GF/KJ/KVR"`5FB44D7UXP9JU7']J_[/A':/4K\+ZO\K]J?P>#
+M'^GH_GGQX05G5H'G4\]L<W-\<.`*Z*"OQ)IHXF3\2D+[V33,J*GCEO*:W"!1
+M4(LPB%@I<A<_P.#]L=7_%AOQ'+8J29/TR71+7&7_,IFW7L5YB?>-"7^CZ?-2
+M1R]Q62]"--Q":-2O=;YU41UM?.$6AO-8!_!QK.BSXT"?H*JW>DWN?<;,NUAS
+MHFQ<V;EZLGG>]&YRSA\/U)_3\@\=>G,&,+.S7B'9;&@YW9/8V45`]@QBHD#Z
+M%B)'YBU!8PD^A7V2D*2?0C#W]D&5!C`XP,+V;$V@WQX#&0FD)T/8G1.Y-C-^
+M:>!T?MG!Z<5V(G7QF7XB90:MPP_`P[_IW9(#ZS[S$0>T([/X+JG1BX]^3>-:
+MX&;*'+*FO.[?SL9BS%G._KD6I^C5*._G&0P=>=3%96Y\L]+=P8/3YU$?!<E3
+M^($MN2F=C2SZLP.ZUWE-8&G-O;'+J:'4U[^\B"G:\&+_@>?X/*LX>VI;M0_*
+M[5RV#CX]G4Y'?[O"T/Z!<.^''WG.\;L@]D-P1AT/%G34#<3Q1Y]`4V0DKJTQ
+M1$121)/H$^+[6,!QI23S^U0M*OHM6LP.('P4S,'21\^`<5&?.AAZ#CIL!%-F
+M!LY.#@GL._:L)2/YG<Y]UUH@U4PTQP,R9!M5R:,-6V_-&6]*&ZC_WM!Q-Y?N
+MK3,LROD-@GMDMR)]OKZN8.YYZM%.F7]V9V(.?I>F8O&"UTM/LHR%<O;R*3H,
+M'$F34)W5WP_ER7?;,"QN^8Z;OF5FJ#AZU&HO(C##9?;IS76XSWR3*N$Z:F%Q
+MX9^$+J#[=J%?@+^/J4W^L[\[P[XB?MFEJHV&2S#T^2;P]<AI._O(CFG_&*8_
+M"7>*%=DGIT:#X?ZYYC%#RW"ZG<?F2*XOP4D;/_8OT[\'K":#R][(]7G@L&IX
+MH4LS,+J<NVXN<DL2U4KS]%OQ)P<Q,#NA0V`T\^+&U\W[W]3^+/QAJF[[WTSZ
+M7X\^J_$R'U<8W%Q""$)@5504@$%A!9`15!9&0B(1B0%D"+"08'TJ?5H_3-D9
+M)JP%!A[88`<8*A@#`P.,`<+LO2:](7::\O3P_1\OE[?7WQP#OZS>:-=PL`\H
+M#L"B93=3J+#1(REMQ5K=&"'RBHM1Y\$+<`SP0Z72HK[?X-@5Y5\OP4:Y\ANR
+MLV1@8<F.V?B%.IN\>O[RY[_ADI^"8,^.-56_^\JB^U$/ZN]N0C^H-!6%88H,
+M.)BZK/-)G>9-@R9_#NNML\IS5H^/-!RG&A44_;(/I].P';K[QYQW%Q&5V>?_
+M;F:\+MG7-->[9>MGI@,#;NTG74#&M]CS=K0MK,[O$`,\*WQPVGXGB\3:\5U:
+MH23QY)A>^O-45MF@\M;UIK6(4X"G<33\?>O]_9.A*+Q[K(S.5M;(MP7:GT.;
+M4'&D.@:S46EA'N+Q9NHPW(">J871RD_*T3O<.P>*K_HIC9GDG]9MK(/<#F%J
+M@9OL8M)F(A>JC\7I-)75DS9'/U\8.;T%[`9<H,Z!H*K-YJ8Y1\A<F`T(8LM7
+MGA)&,0$H1C&,$9@GURJ***$/KH4:^S92'XQ,"_2_P,!@!:(QC$*TP'T&![1Z
+M/1F-HC&*YDS#@-(O-&SQ%=]9Q_Y&<#7<#3'OWTXGZ=)[\1MZXNQS-]4<)-GV
+MQ3Q`V$3ES;;DE+>W<C/SM@X-VV]*74=Y+?4`7=Z-J@)\5S\)HE7VE/)A=U.[
+MN_SNN7Y-F\9K9;ZD5^9`:+KG<\9>#O1UE60@G-7S5RW1NTX;DA:]H+*WY<)(
+MQF-]<J]0&DD(GV2*@PQ'-MC9G:,03FT]%#LY5#[J+CFI,KYS]?W*1D\*CX>,
+M(FH2;><?OX.,FJ2?=?'6S6-`B&'?/:&!/"FII]AA802S5-J**G]W0$-0!2DF
+MKFSX/#`=QIH7,/\:I^XQ$)YCUCT(]ZL#[M346HJ,I2_LH&4@ZQ=7G&IGX)4E
+MJF0%B/A5,>HO:)NB1HJJBLK)I#Q%1=:82-D:.,ZRA(E27/EGPC?;%MS(7LZ4
+MZ;]<]6NDWG2M#"CSH*B-G,-(AJ$)'U(QQC-YX@V@B1&(P]!""JL//8!1"9D0
+M]"O@V4L(STR*LG\=F.W>VIAL_5_(IB'RXD?91A]4S^&?)^2?)[5+\A$#P3=O
+MYBZ0]KYKW"N-%K1B3#/ZTIR9K8Z8?2<-]RR"<W;^JI#W3Z=:J]96YM6L&F;J
+MPW>5YY0J`G1N?TPW/WAG2=ILJ#FIQ$!C)ZUK!$H"_Z%"?\VV6O_@/.IQAA`/
+M5V=Y?D21G+"JRD%'45&<US^Y\2ZEV9LI30T=NPFM)6QB'@*P6_E[NZN=O;T.
+M6T0QFG-97`NL%FH<^^A*7<\(G*&?A5PQ%1K4K">W\\&G)7V,GLBU1Z$QGR^U
+MNL9E&EN#\2B-A-WEF#15&?,+"#_+>S-O*P.7COG?7);1GP-0[1+G?MW_NA.0
+MPT3(-8GJ,R^R$)N[*=EA,VLS53L.<HC34CS[:%,*E9)@%&['M<0"-0,K:3,?
+M#40SS7!BVRTWSV$4K7CS.7P-E=1\[&A[NGFLPE9F<H1GCW'%$D\&O+.4%***
+MJG(][KWZ*^TT->X_;_<$^AX*['$WO?,][[H^/ZRR?%$9UZ_:DGQ8JF1D#ZT%
+M8#"'UJJOXNU7ZS_/<)'SE2'A9!"XQGS1#1))!!<(`#C$A`T0'4,+,&-A%PM(
+M'NWHN!HL?0&?I=<Z@]18<?PT"'\J[M0ZNN=5=%A\=K,;^`;:GS.^2XC)&0E$
+M]WT>,W7`S]M<ZKB1$H$-_DQNQQKAG'6-IF>/N9S6Z"-X!@Y3G@V?8VCW?K+8
+MUZABR2.V2LRL4=T!J4(]?)\B1CO=8*Q;\J[*\_#R@G4@5C,X["?OPP@S\BD>
+M^*86+UQ87_SS03E=_[\<6;_0?GE&^:[?EXMOC4T?[C.6,WA_7-^N+#"^X\W2
+M*N*Z(<6W5;#F5K#V+.)QY?-6-8"5OQ%Q?I1ZL:1]7ZJJPV*`''9"@4=E,#+L
+M8!I75BTTP:(_!OH_"5^)4C;1NY]"LJ),CEL9I\#@+OHK7`#PT47>Q6%7<<-=
+M8<A9RVO;Q4Q<VZV+GO3^$%V$);7,VB3B%\JU^UMA24L-X@=9!3/QE;53WS1M
+M0*;4,"R&F1FUG,/7=$&,[-,#WK]74=:V&-IKE8'R0%BYK[R6G>-!#!3*M)!B
+M2F1^/XQP56^Z9=#E(B_,PWN@.U7\"NO626++K%8769KM;`TFPQW0!=>H'(9,
+M#9@'CBU^<EGHIX^"&U3GVP\`,<&,`8Q$/RGV'XCS#4Q$`]LGR/=PU8"D)B/?
+M82D/-3ZY416?[Z"D/H_)A\FRC![K`6?@T?EW=$^:_2^5]]YU5@?+^.'Z:_'/
+M<YH-MU(T;K(VAVNYYJ];N>>@4*.C1X078$XT4N_@;)+S?2O;]V?>7OAOA2)8
+M>*.+JES6;(WV\_@+?UP@5G)E,!^@G*3":[L"T5RF,#@BIK'?CF#=IF+I(HUI
+MQ&'?:!B+>,$QGT!C!J?@CF`L+P_>*X"QC9@:58\1@.Q/O2VMR&2)M8_MMH.$
+M[&A8-&.[E5?"T4KG993<-<(RR-Z-!::Q@&L._;-9?`,#K[:+!P5)O,WN,^IO
+M3>24)IS]CB[LZ.;U=?#(2%BZ5X3L.MKVNTQF6UIH2KPAZXAL]`1_I>!$9#Q$
+M=-Y/-BX@NC+ODES$3']Z?6J8T+5BNMY.N?,?3G)#N^]2U>(SZETO>'SE7&E\
+MA$YMPSDP,,*U<<S#FF@G"A[3U-PG&-!_K50!W,L7@NA^C&/,>CQAZ-0_HA6C
+M1R)V!I-3^NTT5C;(<3@V@_H=Z;$*=10AFUU@I?M#^I<%O%IP,#++Q;[%?BAM
+M$R<4*?,[<V)F0.$1=A"9GA%Q;!BO:[&>D36.,,#G.,3PJ:9LW>IW>*C6`8:S
+M+["BV=P-9?/%HU3=4S`->/RGH*X,/D??G-AY_`L,?*RFI^79U&-B.1!6$(Z"
+MGVF"NM`75`?*3.9[$B=+E,L'DM!QK:>-K-P<I:;Y!1B4MHG67F0'3;G#&F<I
+M29P%%H`7]F?8?E/S],>Q]C?SGUC/(AVWV_Q_LI]D_+4GZ/45('SV)44'Z]*2
+M'[%"7]L%BS\"DLD%#ML/G62P#C!D,1'!,8B<]^-^:M:R4(4![.FM!Z#Y;^\,
+M[UXC^!3*OD/!(O;#1;K8=QH,#LISY!^"4><5/N&77I&:[I4'&\\"S-,QM'5;
+MLJSY/GA4'E[]YLLX@+]>D?NPF/02AS=\(P1>;D')55L&@UGD*\P!!,N6*F'9
+M-#GQ_!&I>)3IW#';>;WD'.1G;YY)'5#\U8]CRE;@6Y:2]Y>@LVS_9O<'M4N<
+M3P9FS)PKX6X9-.\*$(!Y,WW4>[1796#-IJ2?2"%Q/_C=O+55UI(X[ICO`XG+
+MQ8K*@=D@7)H?F.&+=^IV-D+E!M;5"V<6PU]%\=/Z&%#OMS]L`-88.C\7I[77
+MH:*0_9B7>V/;(8,*/^>1.ST]1&+QSSI#=D].F#U;>",^2(O>8#M-YI/2$Z&1
+M;R?K=.@,R7UP@8B;-#:]\QGB/XC)LHV8-$NR#G4RR.BP\?C[Y-](1,&_G'IP
+MG/`G./=A>:IAO#"9/7^%VT0_4QX$EH@<[]QCPH]);ST[7[5/J)]E<L-3C]6Y
+MO)O,O'T;8RW@],5IUV27:WWQQ`2*EOU1H:_(5HU',_7ZZ;R3W&%;"8,DO]3!
+MP1"].0AM[M4`%.YDE+R30B(>B_6\DC=&V3PZ@SC.81#:^D42JT/%;#U%3)\<
+M0"`OFE&A3H%<N[QO.;#,\O68.V6;`UB41##J,QQH#X37$A)DZ/C?%N]F-O\I
+MKZ:&%;L]R?`V]&=-I6@Z3:QP3YPD=$27*.P,#9EMG7Q`=;P&_!%=$Q@)2,?Q
+MPE$:/1JBF<$D'B-H)6"#]_#70:]>+9GV?@"`HZ17?R3U?#6C+H^@\<S115D8
+MR_)>)$:)<8]Q!&PXH&NYL;!;.DTI*7<Q:F9)4[(U9:=9\_$ON/K`@(:)[\;=
+M!INQ%+V&8`A7F9I3BIO4U$-4ZLJI<$.!$+^BE:>I\+Q:=;Y]O*2S*.594W8F
+M8B!%$9\RM>*:,':\!H$[#Q:TP&S(L(DXL>?C'$_F('U/:=4<+:%UKLP&>!L@
+MX"Z5E,\`_&,)\P!'EIVJL8(P)_<0GD,XKU+*1)]JE3]@Q83\WK4?XG^MCJ!Z
+M5#OJZEFE.W$[4'Z"?;6'XS/`\_T,!_50[F0YAD7#R9P`X6:L@V;9S-V<>9P:
+M->LR"$':8UMS6OTY9.M,%6:%%KX<J^29/V*`'V0+^[E/H-.]8$IJ0V,3Z:0R
+M=\MIHK\3AV,]!^`Q:"YK.[VA_/)D,X-AN6/CVHWK<S=V%$%,R\3.>75H+P(4
+MJ/E\WS?^<^)8[8+=IER"5WYCW?:BC?(50M_E1<MU0\(#KXE9&"YO%8/O:-67
+M(D"BDT&#<NE6+ZZ4'^[YN]MZ14N?X9]1\IZ#^07L7>CBD/=EZ/TD,D(/H6&*
+MD=>:\3G3<[T&K.EMG'FJ[-Y38'J/*OPHS9:K.MV.I^FI^,!!JKTM@B16#[A6
+M)Q!5UM[@M!I2S-I=X;R!>Z)._Q"H]J!`:+U'@8[;EZQVY3"C/7X14+[PP#I0
+M'R'L3IS_^["D$SQ5F-?=ICG`/S\-4;)KH66.#=9>T-OMWTE[=Q4.'@?+B3P>
+M8H51@E//_BC17&A;UX9]^-#_8PN]JW(Q8XYD,:"]7_07=\\DTYN(;K*HX+SZ
+MAHH..,&B5$VPMN8,"%HQ%ZXEMM[+O+,_QYLKQG+G3H.$-KIM4>,3:2IK!Q_.
+M8!5XB<Y!3L:S*5Q)X;5$X0')HQ:M<(;$?J'N(QLRTRIH9H"+,@1II"8:RRJ1
+MO+L(^Y?6G6%*[\S)'`SK4*^RX[9GE9I77F0/-&Q6YP.%%[_!J9@T7Q=^97G.
+M]UHMY[PBW@G34'$X^*&%YZ^6N7$UI#LU`CIR+`>*5C=KVS`G`*1DH6B&^>(F
+M4M#.L-Y*[FAC!'.5O5-0Y'5+L&.TC[0X<]7H-]&&A+]_5&FO[CR5C!HLA*!I
+M-N?KQB@_ES9Y78I8WGM-J-EU3N*3]LWHM][SAH<]F!9W8XQNX)^4AMN6K-%[
+M4ON#XJ!;-F8SD]-3D3BM*@A%F'1YW!*02JW+X'-N(M49N*+A&L:PM:X"IZ:X
+MX%<L)PDJER@:'8%K,K^$0SG.46FZG7<M,,_``0OT7_6L,C.`=94.46)?^-B`
+M4>]2V-`7'JCG&R+/=F>..D&:WZ89_M\'TTVFEU'-[3%E->6;XU-K,J!J!NS5
+ME!DX*%I1;WLOI3R*(LV_-\LB=C"`L#"`8K0NN>E)CGYASQNCXGW8@<\UM?BH
+MP1)<?KM!3'.T!!7VZ=Y,"5;(D@V"D!IF0LVX!PNJ6SK%\RH\:R?M*(PU*&@P
+MN[\81&T2[I"-U@%R0@#`)04H]!H`&_(_OA/(ZOX5DU0'[JOL?2T0_@H8$8JA
+M/8I/J6-"#/6H5W,5D]U$^CYE!=@E?0*/>^QL/<,Z7]'=^-G]N?Y[/I6*'+H;
+MMZ[X#U=X_=3"!O0ZQ7^3&[=&/I]5`!OIRP16/M1@.WYHES'A;!X:KIAW6PL+
+MW]SO..`<E_KZ&=(*7`QWP8S1:2RKHHG2Y-'C``YF#621A$*"P/@^8"#]]DU4
+M!S[.!L:#$,>/Y1AVBL389V6:]C0X1`:J%JWKEE&)CM:W=&P^7_'F[<05#O^S
+M?"[^DGR^(FB!35P"CWLAM_(OZLQ6TFDM&W6F9EAP`^5N&3%:7946I%#_`5PJ
+MY]\PP-VD6VSZAY'YD1+M<+_2^#$':4.F_/J!H?KML?!T#H8:`X$30]SDW@#!
+MA+>"*3H:+@FBN(\#:,30Y[I3NR67I->C!*J1K0U;EWUT0=*:_GQ_G@KA;ZK_
+ML,IM7E=E>]#K-_D-D+3#51HABC0+5:+M-FDNZ$6MC\K_-VBI_0-<=LS"TM18
+M?UNTT[]$K4]TGB&R%"X\TV(0Y&!GRR<\=]('37I$V%`3'U.X('US+_^C>;M*
+MNTC##KS-6,_SX0\3EA;V:E#B'!@^'N%OZP#\#UA5J5YDFX^+8&$K:A^4_U*M
+MR0/-Z<28[[754/#JC@V;KG5)PC.1*Z<X<?FO=`N4D26@^%966B`M;N?%^'<4
+M-.M&"/[W$,S%<^C@F$V3PO];J,[A31XAHN31R^5FY9#-B_[AKC_;7Z:X+D5-
+M^9\K[W$(QS@5B[,#L\8=[)TZ36&#2LE7X98T.6J5?V+I:;SZX(\ZZ;K8FP[>
+MP:@%I]/86BI*FA>+WJ`K6PG;'XZ[0_LD`=_#K?^"/WU0/H3O@'#-:,H*>@!^
+M[L#P"MAE:UF1N?)Q3B7IU;'5,JP/^CQ2EF<'H<\L7.B?=7D\0@?3OQPILT(E
+MJ%M46O3_[1"_9OAB:PFR=`T9VB]$1\F"J`AZD>0W=,)@M%:5$''FBN/')CXI
+M-3[_F@Y]=9Q`&R\^\-CG#]\@U,!19S0UCA:C`;S6LDKJC,LZ^.]D1#C`.SSE
+M4S(23!(R];LJ9)=+[O'3/=]Q5+[E3UQXG<_#U6MWAH5\N(&.+2U/FXP"F8N2
+MK>"I-YY@"WS)PP.:L_PS^C"@3AVU3>%^NS.T2[M158(_O/'8RI*%X)W(?O-%
+M311H2/&>0/!Y;UN.#RKN]=ZB0+"P%/1G-05OX=:;)NVE",$PY0PX)4D9R@'6
+M\XZ!05/A)9P/O%2XT*7>7JWVF:7`TCT!S3`\T=Y5N`+,Q_$T*,Z4[Z_2+72M
+M-@-?J[\M:QFH^^0\/M[VB`[>X-*X/L[^/-+.6H+H?#G&X)H;RHJ#>_SQ[XA^
+MK9(GBR+039BE)9<"V]0=+U\$E5M.B0.3M=Q;'[ORRDF\SI"+TDN>_;Z6!Y+-
+M/2F2,AM/SW'>+CK`B4^R:N6!.RCK8C2N1V3*D7>?CBX6(VG!.OXP'A,].!"\
+M*T[,VG*-W1W%N_VK,+'\3"7H-@:PZ`)K9&4\48PJXP+7KQODI]3["<$1J&\X
+M:K>TN#/K"W3J7BQ&K450P!+G>#0G+2>]%[0B#U)>WR$BE/:8"]"LJ6OX_.XJ
+M9#9X]O'%4@<U@H6U5&DDA?&(.\&XV7B[^NWQQ%`9Z66M(8$-WI=_+G"!"`M#
+M"`5;[0VUV:`H_1!FBXU``.9@Z^S(9!PK)\"QV6_[F@^M]SU"@]HA_:-)D/:,
+MGSQ4]NY;*^`U(0/H_,_1P2=M`%@())%_4(`$E18L^6:B,`%@(PD%115148Q%
+M51480`5!8@$4@,(;[V60,"@GZB?Y&QV/T*)_#P'<Q&*B"*L^`/;*I^1^3];Y
+M"`%BI2=T2,Q@8&,1M2<20QAY>]ICX+*/,6M_S'*2,GFTUG8\9(##ML9Q3L'^
+MOOZ`)`8O_>@X$^L-<:F^]HQ?S(-W=XT0N]MDQ)+<9@E77VB[ZNR"07W@X44D
+MI+P"8_)CPA$`EV"&R=]K/G`!%%:BBE^*N);6US>=77`<WWR&3,1J$AE3H/][
+MQ]<X!%Y9SA]`*CF6AL:+/&42),SI*XEE7<?#*Q(K/)QLZQAL-$&)T23.V_5]
+M/9<^&`/H+<7F^P_D0?_TEHO#FGE4,#@MZ^XTW;IMV"=>)/46)(*Y_'[A%[T$
+M223UUM4?$JX"^C0A_#T;U,@!:W11GF-MM76UAV!`L\RB(@];9_DTVACSQ%#9
+M>U;ZX9_<#^SP#^(B0A)S+,)%39;7SV6Z=V>";*47CN?AR?82O$-%9IV"J]A$
+MZK7ZZJ2')\.;J`?!,6*RQ316:^O[?H_1_K?W2D0A?5LL=P'B("*OI$H_7#EG
+M@]+_RR:%0_G?C:_4A(O!]C^[;3&EQFPOJAXENW)3PY45$,<2!\_/`&DT5\;*
+M5G]\KX49P-6[S8+;VM)K1E&AAW2-_/$!D5(?D<OP3G1=)_2EK$YP%%5:J)>:
+MW7'R*S1Y_D$-!;..@[3OW:KCMO$`M',%>X^O]1\OO^R7BRWTA^JB0_I"0YF&
+MS1HNFC.;F$_Z_4B*0Z6K\3CG1G/Q@^N?)0\03)L)Y]EI,^!\_;D1_7+;&R.N
+M,CN%F^-@L1HLY/Y;,W?X`&T272NQ9*^.J:3Z0G,/@K;B8.P&P_R[]1G6S]CX
+M2L/HC6Y/<0HP&P%;BWN""6_G7R_YZG#1@.!>O4<]YD3E&Q9S'3J_VSUYLMMJ
+M)#"BRIEWN&RV<[\74L9G:K.'`-*0.Q(]'\Y#VX'R39&@]8UFG%W,+Z:<"[C;
+M'5_6,8YLT!/;2$QE-F_N0AC2ARARL%S-E+:J'*MJ(@Z<'#A77>TPE)33FR=9
+M=^=C964X[T`Z_RD[!_1P/0AOD'21@/8W94&:.U4'=&3F:0J]*3I_SWX7)'[#
+MY!^J*V_J"_@\9H4;UU9PO99[92.#K[VF`YM8)XV%SY4V]:(73M)T@TES\PY'
+M\@K:T^"6FJ9NIP5M8X&@.?@=@P@#UL:!?3),=!RZ>]^AH24S8&P20?Z[6+^_
+M-%3_Y<UB>[FP4]^#F-*:D*O9N.\20490'$F29KM9G$D%\EWIOQ#.M;DN)5"C
+M^B`$#L\O.M"BI0.*^S9YC!:;4+SC;<:*/D(,Y'^3#.%/_FNWV@+T8V/*:9`0
+MJ?IXO>WQBX5/_`R"D367BP-&<&_I+9(,36'BG9H_?+"^^R@#"XZ[X.$(>`W&
+M0TP$IY:$V.UZ<^:'F+=\HU$Q>9F9+<S9T"AZ(XG1-<*6/E^>*YVQP.WEK_+]
+M"]:0J/F08O&5=^G0V4U=Q_O?30?Z`IJ^&_-@5:/S-6S539%E8O)AC=6&3.%-
+M_]3XWCYWT]-Q_!"`5O`6#N^@;`F^L^Z;4$,)TLV6Y.ET.]X@-1I&7\XN/YM&
+M@(/V$#;G<&R(<C.0)"-A8_WT.A/=DP!WYT5&IT`07_W\W]*R1X"B4YH#,)VS
+MVYPOED0&#W!N:ZW('@+9?@ZD1-!^SAPA@<7CUN7[8.4>TI3A-VKE`+<..U.X
+M)T:O(R.#*?@T7H3MCFR*&I,+1!DA*7R?/@^I&"Z;W;1+40NEBN/'MSRAIT%;
+M$4*`AQ_]VO!:#Q.&!W"GI'3^8^`_=W;;4A;:F&5#@#.^U)>I8-"PW4:!MYZ*
+M-@Y"@-V8K+2_O#Q<C)C/\I?7S@)Z_/S>*,;%@EEJW.@8[4@L&.JG)TXQXM;H
+M,>1>^8/I7<LX;#0$)NN&$Z[OJ'"[I(MGGJ6+.E&38Y[G)XKG2`XVUJ_*<(W0
+M\14*:,UWC+L_HZM(\\>(L0O%F;W7U)P2?"@048V.YLJU>ZA:6`I:-+XRJ?`W
+MJY9=,+.+A38T'W)/@2JH#Q4:[X#Q";_%(!2;6UAY`Z!,KG&`F97!7#CAV"&/
+MZF0VIS-N&GZ?S7=H:*8*[C36JHB%)WM!8#69@\4_W5&#@$K_`*;!S'4!;\1I
+M;X1>W+;":.%.S_7(O;M\3:JW2V!\JC@D7O^-W\$?!BCXV&G(LJQSWO.-O/`<
+ML*LZV?.B)$.TFFW#&9,&4ZW.J`)1\5=4<5-(/'7-OKE07O^UW6R9T;[C2(`8
+M_J$=P&V67*1``XZ>Y"MCS59"D#O9-)'JHB*TO<YBAKJ'CGR^E`0^RUV7<X/;
+M`JA%YF#R3NT6KH^6ZNIT`6<2E.M/-'B2W:5YP+<KDYSS@L*0H_9GC9)9_H%:
+M2UL;"\C@"`VREA;.,KCQ1RK>SZ,E<S2=G#>0!,C$1S$M6QXD_N@IG_H>A.)7
+M0QKP11RIQGGA9L\+_B^$%R\&ZW4/MTILWR$$?3.3(\8A&Y3B(D1TN+PN81*N
+M'&3[+BSQ#07,&X\T"&L-.;^($Y;Z,V-7^=X0S[;`476`$E08QU.%(<2!(6SD
+M:9(TOC4Z#/R<Z#P'JQD<1>/[1NB5`'/P^(V7ZM-!]."(B'-#O)N;`;ES.;8Y
+M"<,`;JW06_'T!ZI(O5#;%IHR[/ISOMJB&F=30HUG'H6T`-6XK(J"_H>&#"43
+MW18#G5=TJ"\[\3XAWUOF7)#[4,=%G^)GR+N=MD6M)I$-R0G,%LN;!`-=Z,<!
+MCL75K7(@$V]N?:7""/%]:4B>^U6=X$:'-?R*D<V4V"">80&O,`7])GB$#?8C
+M-,K4"<?!VXDY>5"Y\I@4@9,]JS8S]$"67+-,]%^M_1`2PR(S9O/._)_`I31J
+M[VN((A>8+I5TR"O@P`Q6&AAF,(!6`KMGU:*&07I90U!:[(AG:J3W9#@=;J'K
+MY?JO#%0!`5.ZOO)VO+T(Q$X$X=P63&=-Q<^0'S:F*?C_ZYT`7>ORN[/C65I$
+M^*\0;%_H(RA`#)7<!7:W?2%B6_XZ)&D^?N`3,^,T?.5^OE2+(W'M[LJ!*O'A
+M5:<9@N-C(_D`5>]X[\H0#%KDA*'7\X\)8_#(FAH5<I_Z8!+J,8W7=G8KF[R2
+MNI]HTN"0$ZR1K[I4'#I/T`KO"LTQ^]].P-<)@`"N3%W:/`/`B`(3-(<[&($!
+MF#$0(L$P(B(5O6L\16ZF8]*$B'D[*KO7=!N5_DR<CWL9&(`ZH6FNO1\;XT0"
+M09,6V_COGT9[VUB61#027*PUXA"T9H@69%&'&7<`_`(+M"`^+1P&.8PXA@1,
+M1FKRGB*_U?]GB(>\QB4M/YW7QH4,@:?S^EZ[_SI$#5A/,R?;_2]7I0#\9)#5
+M2/?45*?-[;XGCL@0`$-IUN+NXK_=,I$`$WJY!S"8^1;<P<%=7WNKCD06R!C&
+M,1C&%146'[)7XK\/\OXG2^[^/;9]-[8D]1M?)\GT+/3STXL7ZF'4&S#!^+ZR
+M-D4,=`'ZM30!@,O]C"7E#>/Y\@2<.WS>^,J[I1'UT1W8G];+J"`$'Y9>L/[3
+M"2?MF_[V-H8>`)4X%5OW2ET&[2>'^?=:.W)UC"VY-$1$C5M%R^!7X7D]5KZ;
+M7C/MK&<T`M93<-HS""(I*9>]]6I`@BMS")#GF_/UY#W+R1$"&U1_3LMQA:JN
+MVRLLTT3W'S-(0"GOFD[_48TU>OJ\86EGB!BXGM?;<22F`00=MWO.9Y8EPYS'
+MR6B4VU9RW2!1T=4!!GIOPD/*]MT[-=W,S'DX1$[32"TX+I):?''N/D`I/IM'
+M4OBO@J$>9X2@^`-HD<_V2GNMVOYN#7DD/$Y>ADA;'?[BO4P!W*N*CHVV>W+\
+M9Q84@"C5^1-0&SEE[#`97J331$WN<>*2Q/D!^#\+&.UU<<<`"6G]6]3'FJ^G
+M92&9E=;K50=H?!!.3=$G<R*N8SO^O?;^!6-"8]<T\0$/,Z'N;3@[B4.9IF,C
+M@AG[CGYG@_;F?"A.*K`?^,%T4LB"TA9^G0;C)I$M_:X%M;Y'K\I3`+?5$;U)
+MAV>6*J\]@X<7B*0!,-/C125LA;!O[9$%/<O7IZ6[C_!#\P`.>*D&T<MI\531
+MVHYVX:*RLYW=S-9Z&>>2@`1[?E_6BXQA<='_(;Y>7#JGTJ8`9(T["8PF>E%_
+ME6^"4.OQOY.HR!>=P@2W@[ZM7YA-QSAGQED0(+ZL*M=+4!*WPFN3_9<^"&IW
+M?VY3P6\H-XPM4FFU.1K5K<I`!=CQ/WKG-H36ENM5*?97/@AS[VR>[A[$IQ&?
+M4[C]X^*D/,671D`)/LW;,Z2(T[*F\1[NXN%0`$OW'2U?8`B&G&77Z>XBO(T;
+MIP3I$'-5B/L<XJ+27]:X=B^(A99>/=U#&XMBPY0SBDD`N=R[07^H+BZ-@=&C
+ME)`*>1:EL0:3C9@(Y,245D=UZC&WX,-)A`!OL<FQCZ5D''AK(9NWL`=(6/OG
+MU(@(KL-7T[N;T83@FC9SP6)7G+$&B(A5JL![/I'1V,5FQMU+@R=Y.H@"?<ED
+M<)AWXBH9LWF$D"2B4!$)+]_A^N0#W3,<&OM<PS?GP!:XKRN]P);.*WF>2NPA
+M=U9HR!)=)X<!=(5\!`K^1"?SN)'[M^D(#GUGD"IN<!@KDG+'P!K67UA"-QOI
+M^SNSP`8,9OB;&GA1^6@)A2PN]BD9`)=31QG`TG>ERANOX4R`;(G\IO,1$0;E
+M#I3)2^`/W+)&X;9'QLR(`!\SNI[]:!W:.O>N'$L:=K1DHR!62?0_FNE?;76W
+M5W:)AFO\4R+W5N7TV07)UA_`_"UL(-$`%WSVXC9^<<OQ<Z+_`$RM^<D%_DW,
+M1$V!%(;H:_:+'(<GQ2(/>ZD_O-)1$6O^4M.4Y"S'+V.I<;/6'P%.R\!3FZBN
+M'O,K*'CX(8R<P+2HT0+C#]]WG57#USZM4B(@W0O'&1L$V-H(?<:!$1?Y,P_A
+M"7E+^@[%^A(,/;LTN%FB#VP15SPJBZXRZI@!1GKHK;81\6"<.+*YS,;UQO$`
+M&)0_:-)9C4+UPF6:$!/KB($%U3]341<&!NP@05;^&Y./'ODA$%QWF[8L14;,
+MSKL4\A(EN6$%"]-^+96BC[,J@(>SB=6NNM^"TE9`-^`J\@);/\T1`:A\@DKJ
+MMX"5DZ5($U#F\/HH"*1EG6G)H8H=LF<V*M50$!6369`IX+JS)VB]7/C?6B`%
+M_%'-#YR[31AG'S[F)/C$JA(#Z>"_`ANFJWT]"339WT)`<7YR+V!A_O:7COO>
+MQ.ZO,>;EOJ2`73]8%-ON2*W]T!X",9R*)=+]=CWYU<8FOC;*PLJ9+(A0<`%C
+M';J6GLB=4,ZU]5$17%S@>SME_81ZY.3H(D^!.O<I_U00[I,-)06B0>`"]E]Q
+MS^<.YZB^7N5:`X7'?K3T1Y`7_S>W)P\A""&KN&H\-W-G``!B-W9LDY[',0*7
+MXWP\Y[ZP+;TZM$TWTPF86+2<Q(`)U&N;V].+Z7\SP:OT:0'P!*8>3"ROSX&<
+MQL'G[;HY7B2R$%/]T$P;O/PWCKZ3;/G7LZ[\K*41!O;VHKGDJ_$B-68=..Y\
+M`17>(35W$KZ)1OCY%#3X$91/KA1#'>IR-_)"0&+I'1=-/(2<]N6[29K#I4!$
+M_VQ%Z*C`Y]6:];]D,"O`I`!PW\%YOX$X]3Z3VW-XI@LTZ^<!)F`H<,=YV_H1
+M$`^^^'3_0`/OA2:6/'L>A/)C6B!-SR!?>IK$\GH`>!<SEW8(WZ.%NLE?+=_8
+MH0-/Z@6D0)X^*I.WI\LID2YUY"[+B,O-Z&&A(L]2_WO]T`-H;.]1<I;T6VE7
+MOU/Z0`&F8YA%."775'FN1X#L9W5@"O^Z)17T_[RXR8EE.CQ!Y=2@0Z5_T@3R
+MHH=14VF_C>YU:_G^[U^).")MO_$0;<7L+$\*:%.^U$1?<GB05+6>80>5H]SP
+MH30D,]RUB)?DL`#\=6D()@LHJY]S.P'P2Y<2P']T]3T4:/JGR"UU,@G@@\=+
+M0O`E)A?Z:TA&GC@@WBA6,&X/`KN^NV0@*599L!]YSO)<;@IC:<7,JE$!_,EJ
+M`C!0Z5OMOF,2ML&A@41$VZ>YK`,+,<6VF]4C/D2GS>Q)$$<7OVR\.B]F,]NP
+M0J1*+?#9LBR=1)QVL71]4"-)(IL`4+.=%A"OVM^CM2#:;;'A,J#;&F$1+V+O
+M`%BI;**:12N[VO%:Z5((@QQ$@25,M;D-_)GB&Y5/F14?\V7B_[;0:B@`?,Y2
+M$5_]MPU?N#$1UU3!$(C(M%U;DAB/Y5_YGL=LSH`7$L%?T`6NC0C[N'A?7*&0
+MD"_G6!?!\CY[,H]YQXK/<//00^"41!,_6RE@!ZKW/8&1;(.>2QD<]YT@`?2&
+MC%7R$)5.#(;#':[*O(O2S_6!YCFLGP/3X2`3+T9A9ZG6C,NUT"(A[D\^"QTO
+MZ^AL>DEZ=(EM/*+D<E$!D7Z,6\>L%1G9<1WF.D,"\<7KR-5-2XC5;PT!]JF"
+M#UF91M0-]]8`AN+`OF5IBLRVA<=>4]UTI%?=AGG""_<=#19D,)+/T0$!F'2S
+M(9J,WF.FD>=P6!4X*,B\^.TO@(<MZHK8Y2:#O40`R;].L24HMWLL+Y$1;'A,
+MY#^*$=H:A3/%$8'4?R*`ZHL*_*HGAVXB$@OFDDB_&M9=NWG2\WAM/4"1[16[
+M#.=RD8"8GF+/\!O9[>\YD#SD@`9_G@#ZJ/L6!B)[#D4CZJI"+>@!P<THA;2D
+MRJ7=<=V2`LFZ?R`?/@P*@[0Z;7<--UN'5*038$@*&_2]WH-X9/<"B2:L+UHD
+M@AM9N,(K,0-4F,K!LI9`!?NNMAL1=@AUZ#O_3!3+IJHT)1!%IU;NGQI\0Q,0
+MRV6T#VD`"E(E(9]:@?KWF*'R5(B!6%-!)<L"XV:VZFD*3O[D`)?\]#2`#,[B
+M,7;T=ZY$\SH05)%P^9]`'P\/T2!.XI<E$1?TTI]80AW1@>XK>5-1R%,%[J.C
+M(@DX%)%]!C?*VB4P+_;8&^(J;`8H,W"3CC-:(A%9"80+R@"OEA5",&HL?<DC
+M[[[D$`?T\U*1,7,I)*LL]@%J-IT<;]-@F:)+B_6T)`&HU%*1:GP=S=B(@:Z.
+M?$(%C.@EE`PR<$Z9)TT6\W-#XTD`J^%XA$.MHX2P]-_S'SYM_7E-37I0%(PU
+MX`\SRFY^[UZ(^!<8^,(4%QF-!&2([VXXV`B!3T?,%E\]!=A_&?/`92]CP021
+MQ/MKZ4;>,?7!KS01D4[<D5%:O*16_(\';U1A`?N8O?0V3;+B'BGC^RQ;U*!1
+M>R@KS)`#K*,/Q,M>"5DJ(9=$"VA`+75HX9);&Q/1!0?D9!DF=41,JW]1WJCH
+M,0/D/ART_6D,OO_'^^M!8[9(`*LBZ2![=N^?EQ3H"%A1,#\`557[T6^2=M,V
+M)FO6T8"9>)FM($_92'&Q@?#ZIGO+HFV5^207VA#'Q\K2(-UV\/7`"[U%.QGW
+MD1D^D@L5>`N?K\MJ3@M.?Z"9NE'GWXZ"B5D@57]J39)"JX;MHQ_2[FX&7:/(
+MZ,B<"''G)T`,5W7%G7=P23Y(LGU"'1U?2'!T,YD2;T`(37A9I'^IW5(AU]9J
+M[+2\#*=#Q(2%CE)@$/=R/Q!B5\"*50$HU7GE.^^D0F<CH&1IY!ZYE*[[00`8
+M.]3</DKDA/YUJ1$(."9?^A"`F*J[KHR@3(/48M.:UEN=TL@(>$(AL\6E:X0$
+MQ=_M83[A&7=\MMQB+(72,(T>YZQ\OB[\=M?P0]%UYUZ8Q.^/W:GO39"FEB)P
+M1\S0+W1K]!CT),'6UR20%#&CNO24EI3OCWFX1@KV*(A4V6EKEP920LI%,C`Y
+M'6@EEKY1$&#=;FO5;T;F-9HVY/)")6\DO3S0!?/RZO:IZKF=]PU4,C%++$!.
+M>!IA'K8\Q$C,0D6[\4H"&P<X',:743E+%5\/IT@!$V`A1>2,8?*DUH57*'54
+M8"Z9_2'37'/[0RX\3:`@XUW*?B!8_2I?VH8:HE76#3IY(%S.]($2P]=G^N_L
+MAFC,I$+C"A/>^0$XBEK^U\7Z$`Y<0\W--KIV;`!P%VI<BR^DMHUSR.?I419.
+M7_U/Y7)O!`5:A]E,I6QO-GMHX*5WMI'H.B>W5B#70XH!8O!:+=Q"BFS.;<*U
+M>N4T@E`%NJ_>2Q`FY+&EWE'G)%+=*9$!5.1`-3_<_7&C?QF1YT<DHP4G>X/9
+M(#+SV6'HZDHD+R`ONS@M/H/'-R$EESXY+HJ`F#.OBQ#Y2?#TE4R';(MEFOL6
+M6","$N<KV)W^$0N3^?BNZGME()\WZ/V700[#S4ZS2*'RDC>_U-%=$0_JTL+%
+MQ."K+3NKY7&"0%G?*G_EV?2`W4-\HDJEJQ$*D!3L1`+"U/8F%3/?81!@4:ST
+MVY$&&HLNFO)]AH]!91%J*A,`)>`,0)96L"M3OQR>L9:"'"=3I4P`N&0B!]4K
+MN!/0DP@R\,>4R&BLR!2'3W.X2LZ'CYCAOI$*R`/J=XO(9I1>T/L]O1:QJ6($
+M!3:!D\(M=7G&R/;)::;4P:-6Z8.B(DBT^K/S<CK3T`@(;*JT'Z?2(MVUZO:L
+M=&>DU[J:P`N503,`J5.4].I[Z(./"X?*S^K!%">>`:<D?<Y[N/FMVUG2S7H@
+M+OG\X[%+M(KCCGTL%'^ZHX!`K3TE_>5F[[4A>1%E]1X+D@+/^?,'_.8\2$.U
+MOE,%`(9D@!8S]XO7S"U.1IX=^+1CR->#];K^:A</`B6U"<UJJY]Q/.+.O-(@
+M-O2=2"\-_RCQ$%;30VN]B.\;>=IIF>.EDU7RT\/AHB`JWRHS6Q#^:243'3F_
+M(AG9*`W5/L$QXC'0;3BG2#>1)C(R/#9H4&10%C)/1D1;#<^N8-P5TIB80#S4
+MS3UB(O1%^-ZFK+/UVVW$L:!`.L5);#2]JH];,FP8E*XJ`18[2J?OU>9//>>A
+M49:?*\:BE\H")IH'SHQ50P#:QH4POC=G`+_KO018+U=]G@IMT8/S&I*8$AM6
+MGNWC.`34J\+R*F@,J-4>A&1B7.D@*]:(`0@B'!1HDS@'C2:WKJNC"EJP1:O>
+M]Q,V-OVT0S*NG(R$'2>?H]?]%L$!SV;C+ZJDRSY'_UFHUNAE0F9L,1$$/1@E
+M.`VORJ]R8,'C?VX,>-#"F`OEZ:.]TMVO*Z5]+>B-,=LX1,!!_8W=WQ^A_NW2
+MU$]I<80'?F$?$T:TQ<-`7?_J>Z[KURF99P`.KXYJ2I[?7'X+[_/R.WORQ$3(
+MEV;"IG=`U0"QHCJUEUHP3H2CI%@RFV5L]!.[""+>TSWP,+L<!0CU&2?4@G)A
+MC>5@5^0QHYKD@`);D%:,NF9"A%(V1LK_TIM+)7S",$083.2HU,IAAFT'XT4$
+M?KD3U7')$I1"I._]\#P!!78-ZZX%HIIC4@)GI=<NWCXMV3JA!!&7OI:7'M[@
+M>"3J]'-G"($!/F";"$X;)_"2&TDDA)\#BWJV=LP`]FAV799YS"0\=-?CU[U[
+M]/CISW_1L5^$A`#N#].H2;S%@=<XX$`KD0"_^U);UR/\X.XY_<\LFF!`?$QC
+M`Q&!C&+;&+J52OT95RT/FN/2B`(-]/ZZMY?<'.:U502J,`@I$17,Q7J:$Z(`
+MPB(($.:,][;^,VI$"&$8Q&,,0XX?X8\8CQXXZXA+&P/BT,!ND'T=Z":=UV/?
+M]&QC5.(SQJW5R;4)*J4Y25F#I6[3Y2K32/600*E!TEU]"V[(#S.UD8P(QB,8
+M&7#CC!L!@#CA$Y3P>VHZ<!>>RV_5"=L-6G!$*Q=R5^L65DQ&(P(P&2:S4C7`
+MI8:*T>=/$0=6%U>^QJ]19]OB[<$K&%()RS<P/K;@?``:M9+^B][_MG^XLV:>
+M2X_PW\A4?`_T,KO6V2"`&K3MT,)!CK(Q.$F)Q>PD._D?Y*B^4D*2DD`6%-<A
+MC[-C)2O;1^OAZJ&M7UOM0`-%LE'J9@3YG[T2SASES%]_WZ!OAX=XBE4@!KKG
+M^7/\-[L!P9G[*1H&X`*UFYQ1#XZRPZ.:;V#:H'3(XY$!P'-K5&X9TP?`.#6Q
+M*[[?#@(`17-?-[FZ;<".5;-5UPR.2-(@`7)YOQQBZJV%&H#KKMFR$0N.6)56
+MBLW"_8J;_EL&"_L'<D$I`#]M9#Y,P,YYTJRS-_@6'53(B_+R)7)6/4!RL5KA
+M.9.Z`"A>K8_P_JX2!'5M`WMGAS"KQWJHOF+*UVOQ:T[Y9-3P0*:WWIXLJ?C-
+MUZV=DJTK6B``2W7?Q^C,9G.S@>+J0P=!_WD]A`#3_>Y.<H(N>LY!9N]=.H@!
+M5<3DW_A4"<I[%O=O3B.+W5(P0$="5I4,G@H:)<GM3?Y09$7G5?=UW^*,3D=1
+M:($6S@>O%8FJ8(JMD+#XY#2LZ&2YJ4@!!8^J9Q;X_04\]2WO:]/KHT8(N#N?
+M.RP'[7_8W^LB&QHZJGJ<0EMX$D^/^9T'!QBWAHT1$+>ZL+"U4V0E\.+S$-7&
+M?.E_'!DT,GI3P(DFW0K0NYLF4^AB>9#5?NG)A+!%<LEY_B(3:L!;<S$HX*0?
+MD>U^U&1$P=C,+:I:Z<G3BT>(R=?"9MF:$RKNC2@@'_$<J;4V`FT5Y0T4'!_7
+M\JSC)"!=ZWM?XP^$.5M(X#\\W]=3.<>L?IRA.PM&PI@"V4DW;=.NQE$!G*O0
+M<2FBEN>ST^PK:4`G?N8HG(2#9=4[9NBPU,@75J,&4W(#B$5)7,">)F//)?JD
+M(AAW?&JOS\C;2`8+C-,ECG&;S4V'-F2`BPY76`6C*^TZ<3!ICXBW8Q+(R(IJ
+MPD=_V;-<]R\W$)-FF7_LY%TD10_/HQ$.J)0(EAUOI;$\Z-U/"3#'J)?$)`D@
+MT\)L()ABS_02AY,@?!#2]]K`&)V-5J5[<\[M]U\$4M_NV6/ZE)Y$6/%P&&)"
+M@##\T3#,]>TX^FMTL@4^0$9,B46EIO_7PTT?JDP$5D\SBBVD6P38:VFJ"(9>
+MFWL4HA?5`(4HB`C77YOO')]QKNZYYI^/"QJ>B(%>Q4-LY?.D'#;^-D.`AO\Z
+MRP:C/<+\M"$$70[\XF(*$95EYG<%2A1GP0B/7`R#]N4>DDNA506P\X(M\*3B
+MYPB@%N)A+!NKIQ7;$^,XIB`^[6,,>0'(WC733>(+6T3*<5RPD$`Q[ZGZQ%$R
+MK>_NCIQV9E4NK]JWP)0!6HSR:0_@Y;)SFUH?^7TF^51@A083IZWJJ'*;HWE[
+M!B3-9KT$IQ=$D`$VR-[!;XBS"*"^;+RLFF!H0@#Q6<6D..:(%V[6?%W$:[E:
+MW1;9L;^3PJK7<W)];O*!$+INW%9Z-%62]5-@O\KK6KCE;5U:H\;!&0'NM]3O
+M^:"Z#_DN4\?[0PD+[+3$I!$'L_S+K[3GHZQ$TIR=X0[L^9[;DK\ZJCTD$)/J
+M1(66Y)6=&CT)\@&FGG""]S^V,\T.!X$*%38_OH2`BO&A[BVMO"FAZTJK<(^.
+M%NX;D2=9N)N\CE(`@^X/^3EJ0V$3"S.]Y^R<OW@-@F`"(UA$LJC;55D%(-?$
+MS&&TN;1GF=W5B(O#_O'!-?N>V5/0H2U_DO1=@J$OY%>3:5662$!$.'F[;RI9
+M"GX^Q74GI[))>;981@$CSTG`D#;II8WJ2D_P9URN*!((B=OJ<[I%%/N23OH]
+M,.9U_'>;^(20![J&#(A5/G*P8MXF7!FZ+CJFH1P7?K$)I$*S-9JV#BFLC)JW
+M?,)92?8D\_[=:E``13__IP%L$]<T[+)<T*6Z4H?P[+_J3/JI`#EPK]?$5([&
+MY"U.2*M*M5G?W\*F(AZVKA$7`&>^JMVD*JLCH@_%VK58MEKU\E-(`:KZ10`?
+M%J[A`O<IFDN4U\K>Y&P2@0ZF.Z8`A5S7YA.I5[$)0]#8KPJ2`%&7(N_@<K<L
+M:5KZYX?*?C6*2"'Z]D&""9G4V$EMBG8YV=YE.#:YSU(M)H(5>Y[!`:/8C^SL
+M7UN+$XNDTE6R5"40'77+[7T9"S7[+0O]A0LS,XL28`%+NXOFS/%6`JZC?-]M
+MM.AUDM2>%,!;B?!+":PA6=>AIF!SS4LBL_CJT)$XYC7R'FL>]VVNNK_O[)I$
+M*F?/_ZR$!E\D.K!KH5LHV)LD:SUT]/4KLCG"(N7\G^9($?A?^_KWHR_G_Y\;
+M4[1.VL/[3@0U4S%LY$)Z,P`ZZG4U%#5?#"1D7S[WW[9%XNB_<=]O]3PNVG64
+MDGI((2KQ#XC[B71.G5+,;_A\3XW:(`#X)-!4:M>(N\XL;V]*4&H[/M9*)%92
+MM7FVB:``R3`!2HD$A^&FX*?Q3O$<61]KDD@BHU4!>R?]8Z^?][&\>5$"'8B-
+M-)D`Z2./Q[<L+&;CGWNHR86#CD0=$%O)O0F<;%R>,EG+YQE=6>W`'Y3P0P1C
+MP;\VHB%?D)<BD?=$"*8`$M+2F*QC!72UU$463X.[3?<JD!.LGS)0!Q'!0X+%
+M;O-[#IV;)LG#$F_LJAT6I9(`=/`("7XFK4.9U)/G-CKXYU((<6@(#U(XSU+=
+MY&4[[D[):?IE)]B61#^87Q<5Y*(N[D=%59;U1#&A.^/WVW'6U0@(2(YA"K_)
+MGA9F+P[J#[H_I(0'>99.NY(&`&/>9NBD%\4BHID!;K7NR"&3LY+AOU0_;[1J
+MVX;__9AP3@ABJ4B`$WG;6*"X79OW62Q*;A)B`P5+H31`?$7O5G7UG-#JS-=Y
+M]+3[M4(#SNW(GM*1"3'.T>SU\0C)U2E7AA_7T%Y(^M(!#@-W]D0I:`SS,V"W
+M=J<K&]GSZ'7GB&/]/'%<4`D[UWGAMK[G*/'+=:]<T\LW]V9YDYS%`$/$C?B#
+MK/I>02^2-RUZ-"1"N7[T`2O/2K%7?^0W]M,9!2Z^8]\FF`$R9ER4D/:(=^]8
+MN/4)\\G>JG9PC(!IK`_=?&[B:NG*;0$`P_CQ+$:0&42BW*HF4$JW-L+N)K6I
+M(*XFZOP@<O@IB+-15M,ML(B`'\6T:VB=44GT4!`O5P"`M-_G<_%>3@T]+<Y)
+M&"Z_KM8PBXB-CWJ![Y23ZZY<ND@`<B.J2!5=4-2\=_\*S&R]3O5NZX`:B@8?
+M0*?]OU12``GX($/`S?*J\6[IY5F3Y--2`&C!W`!+GVR22E99V76:YQ]RN]R7
+M2P634>P`-/@T&,KZK<Y$GO$9#V<PB\O:D9ZW[5J_[7-8`H%[^<9."%;ZO#T/
+MD(LOE:!+;<Y6I19G`*X@-]?OOE[,'SFGAOV\ASI#?Y6)>7``L\OLPB>Z0SFL
+M9T+85;%-("3U;S5$6WE_,-,FUW?8,V\)O-MTD`?09,@DP&)E(_HU9\"C=MKP
+MB(;[,X#:Y=-S"O=6'1:%I88?3!)I`>F@[)`<&6<W#>/G#O>:^>Y&0ZR30R!$
+M(/Z]I<X'G]-!Z6I471Y,Q$QB812C_["+RP_U4%NKS456M^/V20"L[,$.^M2]
+M3\[#F\CF=SZOCC5I0(3S:`4=*YQJV(AL*"Q^\;_KMN\Z*+JFD!M]$Z6I$/(,
+MQO5O2^)H5;J0XJ;^4D`;GJVA$UCJV">?I+A6C$(++YCND`G\G1-QW2Z3N>WP
+MDB!?R#!.&Y^9%VG.LA+W^89(0'[/I$4P\>F$D-S0^X0]OG]:.<MMS5:Q&56`
+M4,S]LBEF?2EJ$U-C*M;"W9+=1X#P!<5*.@B@N@MX=`XUNZB.B.CJMB>]2<"4
+MJP@)^C^ML,>]8_QX:PB+4;/9^0$&.$_#_Y_BT?7=+#+E<G=I0+&:=W^V8`$2
+MGVOJ3&R:QMRU)SNW)(*!$V"&6-*&-#C6<*#PXG%>?8.3AY]"FD`X8Z:(0F-E
+M$Z2S"6DZEPH2`#8@O(FHYW?+_X6UWA?QB)0!B(9C:$1Z\"I9RD'']_5,-=7#
+MG7T>ED0JZF;N_NUT><`%6I9Y^<6]`G]Z;T",`;JTL:4@/WRF7DC8\^)RW;DD
+M0'X3N>"&^?&5N&_2\\\]])<497ZK'=4B*][<)H;]8E;L;)9V,ZN[+?)8&]6:
+M,A%#:O^@VN#*.OB6Z%&1>AZ:@`)SVIC6F]QG=]FH#(]"SGZK=*.^3@3]KI/T
+MN<`1#G?\S=B^5J!^J8Y=1C8U$,1$E?#Y?N6]29WZ.C<QOUM]WS`^_U.(@VJM
+M:"KE?AH1RMP-='IT:B!"Y^<:\Y.F`?I[]:O=GJ_2Z2^L0C(#GQUS]?I'9U@(
+M"W46.OC'12_1M_O4RO+70I0:<@+7H@"S^%Q'+*SP%.M\>AD$I$V]T@*+N?]9
+MEBHVFE$`&YR1%RT&CE+E:VNC^2$BQZ\1#NOFKV4$_I?CY(Z.\%#FTR'ME4`)
+M*7*^8`-I.])!NZ*3'*3^!/J\%,0&E@"`NZE-9P.'=8?0J=ED:FQH)-Y64XB'
+M<]OV[G7_3R"*.0Q+=UZ=5XO#9.%RUBCLXGDP`P_0H`$8""BP8R\=N5BNYRD@
+MN[2I``[T``5GK,GSKOPI_Q<XNH4>C,>Y+(03KWXQK(#.B8\.&F0U.MIT]#XT
+M<2BB9=,!"+Y5!X&7;`%LCKDM>2'S6K<%WO(P1^<D98B)NN(;8\M!,F9I.<AI
+MX1.C.@.`F`A3+D,`/UHIK>2'FWM6N(0.1GY'^RI`>;"]N+7P4@9XL172P.,X
+M$0ZW98YYBB=#JM+/61X.>C[2<0%B`5(W5>C$!WT9CXW+1N=EWW163@O4WVH`
+M'<43H?//N?_:2-6`GKQ`[U2CDX%#V,URIF:(AYQ]]:T*W12,,;1HP.MJ7D@3
+M(E^;+3JHF[$.E<)?;N/TL^IPX/5^5:(%(,?BH0!P4=YH>OG-UU--,)9!G]*;
+M3P4(1!0QZ;)L^D'U$H*,DS'0&74[G>@%NH7&Y%.BV1QUVG&])T@Y*3Z/Q!"N
+MJ0>.N4BQ;VRE:),!6K6"%VOX1FZM/!?I2]UECP,^;SE`F$!.PVY\6.%!9@O'
+M_+1MC^UVF^89M1I"T:21":PN#=OKB"):Y&MX%9C2JBOQH7W;/J3NG`GR,V/P
+MVI$YAPU=4BICQY@X*61>SY\'@>P0F.[D!OKI9R_`?).)A([I"J^D@E`#7P-+
+ME^R`6`H:3/52A\GM1B950E$D"^CR(M+^*(,WP>X"-\:>N-"YJ&WI-3K6+Z@0
+M"]?`CKY+I\"][V(V!B$BFGBT:?L`*YUN_-9S=C(.26QFMTF`$M]_3K\&A(!C
+MOL/;57'DITTRZ+%NE!3';(%W&6]%JS<%N$-*P6C/?)-`DH3"X3-+$04V2-2]
+M'U)65H9MVF-9"X7\:%WSA%];_)ZG.!%0^F(G=]_L?9A9OXVH[B8AKVJRA/%&
+MD0[N*VO%8\!",[_*!^V&U!%O=-S!FDS^R;=BI;."=*/[S\;/*Q`4.Z<?Z\\Q
+MH2(#N2O?_I]#U?@T,ON$3^61+;%^DOL5P7QB*,`"1O/^<)#Q/JEQ6(LB\)_@
+MF$],(+3A1D0Y'OQ>+Z&9L.YMH]G1@6;#:D![U6Z%12]2=ZZHFI8%7!OM,0*<
+M?8B@G(1?7_ONDL+#1RR(4L\US7BY4`A>)%A1@7BIR3SR1"KM8&7\"JE;.&T5
+MI8Z-RW:616QKOR)`O-Z7N\^%'E\[ME+G<-98[\)8)D]$WKG,$3A/K]O\.'!M
+MLWH;[S04.I*6WK-8YU0PU($,?&T\20`PL]`"A?US"HN#EZ7?K6.O7:_1KJP"
+M'PZ,?N0`VBIL_0V*]/N]3(=Q(163.YN8!<1?@U8N_3^6^V'S0Z0@JNGKU^=`
+M'9]=^JJTSC.:?AHR$WG@!&VR\IJ;7B)3(I#"C(K!?``;);L>+F\24S9MAA6=
+MEWSLLM*81<N7Y9$6^D,.6=/4H*-EGUO)9VET3D/]F?1^O>^Q,1`6PH=Y#374
+M7*8-8-)8S8$82D//X?.A``.Y[QQ4VMJZ6R*^H%BD`HS')JX0$5!\7J)CLB9L
+MYJMJC(,GTJ?>I`B>)ZQ'G5Z;PZSB=*0SB03S=3A\B&UD&?Z5SVJY)*0DI?I^
+MD]](@@EU3+5\HZ$?6$6E!&(5%1S5K-SQ`FBL6!`IT$N4C/%_S/'26]=GV.5I
+M?A,,I`A@8BB?U?Z*/@3H*EI67A/PEV%H5+(*!$)/HY%=_VYZ5"1$<XV>Z,VI
+MQK-@JSV]&(N6ESF\3P`W^[?N'HL0`,C^T.RRWMM)Q$4)MXK-6I$).RX2.38H
+MW0,K#*TJ4A<_C6@BW&/%YBNQ-XT1[=J"8!I]UY8>W>8KVXUV[D"X'MC'B/H&
+MZL9+5C/27^@B\QIP<$8ORD/^A#P(DT@WLE]OZG#^G^F^R5U=4(:.W5VJZ(#H
+M4[G@)I4QM;2H@3KRJ+@,1``]=\YRA/UUMLI4J_-5DRC6;[$6F17!<^CKY\`6
+M(6XSTY5J00"K<X^G2$4,/34?C<9,$!SWZAHI2U\V8X3YF17]K.KJ6+GL9-YL
+M(!S`!.6RQF[B*'\O^=\$DY]HV@C^LJE9>07Y`N_R8GZ6CO_*WI%,3]Q>D"QE
+M[5N/32)')>7*1I2E`:E8D@`)!<V??4E%'0"R5F@],F,KYM4!2<0C(A]NNKY&
+M0A--HD0GH';9D?S@'W@@2^I;+D)LSTH-X88]FS[+.IR#I1R/AZ&_D-PI`%9M
+MLCP;3ASL??6,';,&P7TY1?2N_J7*G[E>8!`4_>I7FB[DFN=#7(IM;;?.J`8O
+MW_1DZAL!#&N4T1ZXYG:T0H9J(@GT$!FOT>#*%U/`\_3^%CA(UBF4Y#.[K;.\
+M-_/=\VU`)VV'2H&[\#FA>1%;Q_-V-L"(8N*I\G9K#EFV5"SO#Y=6"UFFI6+T
+M3G+?98@!?,N;SYNO-.T8M3+PL)2>9#)_:((%!7?$WL?Z+82G"_Z`=OG/?>X$
+M"&`^X.FC>[0?+XWG3LRP=J&B24*S8%_AM-Y>7>3POP4P"3^'QQ&\B%E96U-=
+M_\T+P!3FTZN)(:$?3(77,J!;MN[Q((..(R75&P._B_E)98!$.?H&V,<(NF#W
+MF7N*87EGT[@F`5/X:++MT"ZV@$,O+Q6/Q<!`KK(JEA&&H<WD=ITJD`(#*(Y"
+MLF&_<S+-.ZM8<$A2G`/IRP-/W_$]))$!B6;M.$@Q:U+5/T]*"+)+&[40F`\/
+M[D8+OS*]>I=\_Y(5TRD@`E6_MV&KS%1I_M<N1O)X)3`S0J'#-Z/<1+G.H2(F
+MB/?XCB'U0-84@>!!;Z,JUFJ07_E],9`K_8=._^^O$]@_T6;`9K+P7A[JFLEQ
+M(2)4E`Y;&DU,7U0]BB(@SF,#?$X"S:[ZWZ;?##S]/:.EM;R+\[!7)6`)*;Y)
+MO\9Q?9T)`@D,8&,8P,8))[<?/)JL`JR]5M$@RQ@1/.BAL7VWT+^WAAU?9.T%
+M">Y5(@3H#&,8P,PF(Z[H9MWSG1Z`MWE3#(#!(0Z[^<"%UJ_/$N7C^=F=5,B)
+9@#N8461T+A7W1J)TTW_Q=R13A0D`S39&D(#!
`
end
diff --git a/contrib/netbsd-tests/dev/cgd/t_cgd_3des.c b/contrib/netbsd-tests/dev/cgd/t_cgd_3des.c
new file mode 100644
index 0000000..91e81f4
--- /dev/null
+++ b/contrib/netbsd-tests/dev/cgd/t_cgd_3des.c
@@ -0,0 +1,913 @@
+/* $NetBSD: t_cgd_3des.c,v 1.1 2016/11/11 07:39:58 alnsn Exp $ */
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Alexander Nasonov.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/sysctl.h>
+
+#include <atf-c.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <util.h>
+
+#include <dev/cgdvar.h>
+
+#include <rump/rump.h>
+#include <rump/rump_syscalls.h>
+
+#include "../../h_macros.h"
+
+#define SECSIZE 512
+
+struct testvec {
+ unsigned int blkno;
+ const uint8_t *ptxt; /* PlainText */
+ const uint8_t *ctxt; /* CipherText */
+};
+
+/*
+ * 192 bits CBC key, NUL terminated.
+ */
+static const char c3des_cbc_192_key[25] = {
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* ABCDEFGH */
+ 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* IJKLMNOP */
+ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* QRSTUVWX */
+ 0
+};
+
+static const uint8_t c3des_cbc_ptxt[SECSIZE] =
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop";
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t c3des_cbc_192_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x19, 0x92, 0xc8, 0xce, 0xdf, 0xa3, 0x14, 0xef,
+ 0xff, 0x88, 0x9f, 0x01, 0xfa, 0x6f, 0xfa, 0xa6,
+ 0xdd, 0x2b, 0x43, 0x67, 0xfa, 0xce, 0x37, 0x95,
+ 0x73, 0x4d, 0x18, 0x33, 0x0c, 0x29, 0xb6, 0xbb,
+ 0x37, 0x77, 0x31, 0x74, 0xf6, 0x62, 0x03, 0xd2,
+ 0x78, 0x13, 0x55, 0xf6, 0x58, 0x49, 0xaf, 0x2a,
+ 0x15, 0x4c, 0xc2, 0x4a, 0x55, 0x99, 0x82, 0xb9,
+ 0xfb, 0x8b, 0x4f, 0x92, 0xe3, 0xbc, 0x9b, 0x09,
+ 0x42, 0x7b, 0x5f, 0x54, 0xed, 0xf0, 0xcb, 0x5d,
+ 0x93, 0xba, 0x09, 0x4b, 0x20, 0xf3, 0xe6, 0x44,
+ 0x30, 0x5e, 0x9e, 0xfc, 0x7a, 0x3c, 0x7d, 0x11,
+ 0x63, 0xea, 0x40, 0x94, 0xaa, 0xd0, 0xa9, 0xf6,
+ 0xc7, 0x1e, 0x8f, 0xc8, 0xa6, 0x2c, 0xf7, 0xeb,
+ 0x51, 0x26, 0xdc, 0xf8, 0x73, 0xf9, 0xb4, 0xa8,
+ 0x80, 0x4a, 0xe5, 0x6f, 0xb6, 0x33, 0x13, 0x6b,
+ 0x1b, 0x7d, 0x00, 0xde, 0x44, 0x7e, 0x26, 0xa2,
+ 0x82, 0xa7, 0x80, 0x16, 0x34, 0xde, 0xb9, 0x82,
+ 0x4c, 0x42, 0x8e, 0x0d, 0x48, 0x7e, 0x38, 0xbd,
+ 0x1d, 0x7d, 0x98, 0xbb, 0x11, 0x8a, 0x72, 0x14,
+ 0x4e, 0xaa, 0xd0, 0xef, 0x4d, 0x7f, 0xa3, 0xa6,
+ 0xfc, 0x85, 0x9d, 0x74, 0x63, 0x9d, 0xe4, 0x5c,
+ 0xf7, 0xa8, 0xd0, 0xd7, 0x95, 0xb4, 0x28, 0x64,
+ 0x41, 0x2d, 0x5d, 0xd9, 0xba, 0x79, 0xa7, 0xb3,
+ 0x9c, 0x16, 0xfa, 0xb8, 0x10, 0x5d, 0x1d, 0xd4,
+ 0xce, 0xad, 0x67, 0x27, 0x91, 0x8a, 0xb3, 0xbc,
+ 0x37, 0x20, 0x95, 0xac, 0xf7, 0x0d, 0xe0, 0x1e,
+ 0x59, 0xa7, 0xe5, 0x81, 0x82, 0x6a, 0x71, 0x07,
+ 0x85, 0x43, 0x43, 0xdb, 0xbf, 0x56, 0xb0, 0x0a,
+ 0x4c, 0xf1, 0xcd, 0xcd, 0xa3, 0x9a, 0x10, 0x8e,
+ 0x0c, 0xe2, 0x6d, 0xf2, 0x16, 0xd0, 0x4c, 0xac,
+ 0xf9, 0xfc, 0xc9, 0x56, 0x1f, 0x31, 0x89, 0x1c,
+ 0xfa, 0xb7, 0x49, 0xea, 0x69, 0x91, 0xfe, 0x45,
+ 0x96, 0x5e, 0x45, 0xc3, 0x2c, 0xb1, 0x40, 0xd9,
+ 0x1f, 0x82, 0x3f, 0xc1, 0x45, 0x7c, 0x39, 0x72,
+ 0x6f, 0x52, 0xe4, 0xaf, 0x15, 0xa4, 0xe2, 0xd4,
+ 0xa1, 0xa4, 0xb2, 0xb5, 0x4a, 0x0b, 0xad, 0xe4,
+ 0x1e, 0x5c, 0x26, 0x62, 0x81, 0x78, 0x3e, 0xd3,
+ 0x6a, 0x98, 0x94, 0x2a, 0x00, 0xa7, 0xe4, 0x04,
+ 0x9d, 0x9a, 0xfc, 0xcf, 0xad, 0x2b, 0xba, 0x9b,
+ 0x40, 0x1e, 0x71, 0x3a, 0xb6, 0x92, 0xc4, 0xc5,
+ 0x56, 0x58, 0x92, 0x2a, 0x69, 0xbe, 0x0f, 0xb0,
+ 0x91, 0xae, 0xaa, 0x3f, 0x07, 0xe8, 0xf9, 0x71,
+ 0x20, 0x06, 0xed, 0xe0, 0x80, 0xec, 0xc9, 0xe7,
+ 0x54, 0xaa, 0xaa, 0xf4, 0x4c, 0xb2, 0x34, 0xf7,
+ 0x8a, 0x76, 0xc2, 0x4a, 0xae, 0x71, 0x7a, 0x07,
+ 0xd7, 0xec, 0x75, 0x2f, 0x8a, 0x99, 0x59, 0x13,
+ 0xd0, 0x8d, 0x18, 0x69, 0x0d, 0xd9, 0x39, 0x73,
+ 0x2b, 0xd0, 0xa3, 0xbc, 0x9e, 0x29, 0x4d, 0x88,
+ 0xff, 0x98, 0x02, 0xb4, 0xcf, 0xa1, 0xf9, 0x2a,
+ 0xa6, 0xef, 0x7c, 0x72, 0x26, 0x4e, 0xd7, 0xdf,
+ 0xec, 0x3a, 0xbc, 0x8e, 0xe6, 0xb3, 0x2b, 0x43,
+ 0xcd, 0x67, 0x8b, 0x72, 0x00, 0x6f, 0xe5, 0x85,
+ 0xe2, 0x2a, 0x4c, 0x8d, 0x02, 0x44, 0x6b, 0x7a,
+ 0x89, 0x7a, 0x18, 0x3b, 0xc8, 0x9c, 0x8d, 0x60,
+ 0xec, 0x79, 0x58, 0x15, 0x98, 0x71, 0x4b, 0x1a,
+ 0x34, 0x69, 0x96, 0xd0, 0x0f, 0x01, 0x27, 0x2e,
+ 0x19, 0x02, 0xf0, 0x17, 0x8c, 0x89, 0xbf, 0x05,
+ 0xf0, 0xfe, 0xc3, 0xe6, 0x90, 0x9d, 0xa2, 0xb1,
+ 0x40, 0x06, 0x7e, 0xcd, 0x20, 0x7e, 0x5f, 0x54,
+ 0x31, 0xfb, 0x79, 0x84, 0x47, 0x38, 0x71, 0x69,
+ 0xe1, 0xd5, 0x4e, 0x84, 0xa3, 0x2b, 0x4a, 0x86,
+ 0xc2, 0x21, 0x5b, 0x15, 0xc3, 0x63, 0xbb, 0xc5,
+ 0x5c, 0xc1, 0xfb, 0x31, 0x3a, 0x4d, 0xb1, 0x9e,
+ 0xe1, 0xd8, 0x67, 0x4b, 0x08, 0x42, 0xc4, 0xe8,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t c3des_cbc_192_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x1d, 0x65, 0xdf, 0x01, 0x9b, 0x24, 0xa5, 0x10,
+ 0x94, 0x9a, 0x5b, 0x81, 0x96, 0x4e, 0xa3, 0x42,
+ 0x42, 0xd5, 0x05, 0x52, 0xab, 0x3c, 0x67, 0x40,
+ 0x79, 0xf9, 0x4b, 0x58, 0x39, 0xf6, 0xd0, 0x97,
+ 0x48, 0xf4, 0x77, 0xb8, 0xac, 0xe2, 0x10, 0x66,
+ 0xa8, 0x04, 0x0a, 0x1e, 0xa6, 0xbb, 0x4c, 0xd9,
+ 0x5d, 0x0c, 0x11, 0xb5, 0xe0, 0x26, 0x84, 0x50,
+ 0x10, 0x80, 0xbf, 0xd6, 0xdc, 0x82, 0x53, 0x0a,
+ 0xcf, 0xf6, 0xd3, 0x07, 0x45, 0xb0, 0x8e, 0x36,
+ 0x2e, 0x60, 0x0f, 0xd0, 0xc1, 0xb9, 0xd8, 0x29,
+ 0x6e, 0x13, 0x8e, 0xc1, 0xa8, 0x63, 0x20, 0xe0,
+ 0x8d, 0x47, 0x8b, 0xf9, 0xa0, 0x60, 0x55, 0x53,
+ 0x1d, 0xaf, 0x43, 0x46, 0xe5, 0x10, 0xd5, 0xcd,
+ 0x91, 0x9e, 0x11, 0x4a, 0x6f, 0x6a, 0x13, 0xdf,
+ 0xee, 0x7a, 0x88, 0xbe, 0x59, 0x96, 0xdb, 0x65,
+ 0x25, 0x57, 0x9e, 0x82, 0xad, 0xc2, 0xd6, 0x28,
+ 0x96, 0xb3, 0x7f, 0x57, 0x5d, 0xb2, 0xfa, 0x60,
+ 0x43, 0x22, 0xa5, 0x33, 0x14, 0x99, 0x8f, 0x68,
+ 0x5a, 0x7f, 0xaf, 0x9e, 0xe9, 0x23, 0x57, 0x9b,
+ 0x52, 0xe9, 0x20, 0x59, 0x26, 0x89, 0x9b, 0x59,
+ 0xb0, 0xee, 0xe8, 0x6d, 0x06, 0x8c, 0x01, 0xc2,
+ 0xea, 0xbc, 0x7d, 0x93, 0x3f, 0x79, 0x7f, 0xeb,
+ 0x57, 0xc9, 0x0a, 0xca, 0x37, 0x81, 0xa7, 0x82,
+ 0xde, 0x37, 0x7d, 0x69, 0x01, 0xaa, 0x19, 0x98,
+ 0x26, 0xfe, 0x06, 0x83, 0xeb, 0x9d, 0x26, 0xdc,
+ 0x04, 0x5d, 0xc9, 0x05, 0xee, 0x1a, 0xd3, 0xeb,
+ 0x20, 0x8c, 0xb7, 0x99, 0x75, 0xe0, 0x19, 0x98,
+ 0xca, 0x83, 0xae, 0x94, 0x28, 0xbf, 0x47, 0x42,
+ 0x92, 0x05, 0x8c, 0xaa, 0xeb, 0x99, 0x0f, 0xcc,
+ 0x33, 0x79, 0x24, 0x62, 0xa0, 0x7a, 0x65, 0xcb,
+ 0x53, 0xb7, 0x86, 0x0d, 0xcb, 0x44, 0x2d, 0xbf,
+ 0xe8, 0x5d, 0x62, 0xeb, 0x21, 0x4d, 0x35, 0x86,
+ 0x56, 0x6c, 0x51, 0xff, 0xa3, 0x45, 0xcc, 0x88,
+ 0x09, 0x43, 0x08, 0x97, 0x13, 0x7d, 0x00, 0xd8,
+ 0x82, 0x2d, 0xbe, 0xbe, 0x44, 0x0c, 0x2c, 0xa4,
+ 0x4f, 0x84, 0x07, 0x20, 0x9c, 0x3f, 0xf6, 0x5b,
+ 0x9e, 0xe8, 0x68, 0x40, 0xd3, 0x64, 0x8f, 0xb4,
+ 0x9e, 0xac, 0xc6, 0x41, 0x11, 0xda, 0xf2, 0x60,
+ 0xfa, 0x29, 0x9d, 0x26, 0x68, 0x5b, 0x79, 0x3a,
+ 0xd1, 0x66, 0x78, 0xca, 0x80, 0x87, 0xae, 0xab,
+ 0x7b, 0x29, 0x3c, 0xb0, 0xe6, 0xa2, 0x6b, 0x24,
+ 0x81, 0xeb, 0x51, 0xf9, 0xcb, 0x4a, 0x08, 0x37,
+ 0x2a, 0x75, 0xb5, 0xd3, 0xb3, 0x8f, 0x3d, 0x13,
+ 0x11, 0x0c, 0xa9, 0xf7, 0xf6, 0x57, 0x7e, 0xb7,
+ 0xa6, 0x22, 0xe8, 0x13, 0xfd, 0xf1, 0x6a, 0xe9,
+ 0xc1, 0x94, 0xa6, 0xf5, 0xa5, 0xec, 0xfa, 0x31,
+ 0xd2, 0x66, 0x8f, 0xe3, 0x6e, 0x9a, 0xaa, 0xb0,
+ 0xe3, 0x04, 0x09, 0x00, 0x1e, 0x67, 0x3c, 0xbe,
+ 0x2a, 0x8c, 0xd5, 0x1f, 0x4f, 0x55, 0x2c, 0x1d,
+ 0x26, 0x7f, 0xc9, 0x27, 0x00, 0x88, 0x7d, 0x45,
+ 0x4e, 0xe1, 0x36, 0xf6, 0xf5, 0xa8, 0xd4, 0xef,
+ 0x8b, 0x26, 0x76, 0x41, 0x28, 0x87, 0xf4, 0x51,
+ 0x14, 0x36, 0xad, 0x60, 0x8d, 0xe9, 0xe2, 0x9d,
+ 0x3c, 0xea, 0x09, 0x51, 0x3c, 0x81, 0xdf, 0x1a,
+ 0xc2, 0xc2, 0xf6, 0x45, 0xe1, 0x73, 0xac, 0xae,
+ 0x85, 0x74, 0x83, 0x8f, 0x56, 0x3c, 0x36, 0x1c,
+ 0xe0, 0x07, 0xc6, 0x6a, 0x48, 0xe4, 0x34, 0xe9,
+ 0x81, 0x53, 0xb7, 0x53, 0x95, 0xa7, 0x94, 0x21,
+ 0x7e, 0x32, 0x53, 0xda, 0x83, 0xd8, 0x57, 0x92,
+ 0xd1, 0x15, 0x45, 0x86, 0x40, 0xac, 0xf1, 0x6f,
+ 0x3c, 0x29, 0xef, 0x8d, 0x12, 0xe1, 0x9d, 0x04,
+ 0x17, 0x3a, 0xcc, 0xa6, 0xc5, 0xe4, 0x27, 0x41,
+ 0xcb, 0xfb, 0x5e, 0x77, 0x73, 0x5a, 0x2c, 0x03,
+ 0xe9, 0x2b, 0x76, 0x4e, 0x69, 0xea, 0xcb, 0xb3,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t c3des_cbc_192_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x87, 0xb1, 0x3c, 0xd6, 0x60, 0xa0, 0x5a, 0x35,
+ 0xf7, 0xe1, 0x6b, 0x87, 0xa0, 0x90, 0x2f, 0xc7,
+ 0x8c, 0xed, 0x53, 0xda, 0x93, 0x32, 0x78, 0x5d,
+ 0x24, 0x23, 0x42, 0xdd, 0x93, 0x5b, 0x2e, 0x40,
+ 0xa1, 0xb1, 0x3b, 0xbb, 0xf0, 0x50, 0xb4, 0x61,
+ 0xea, 0x15, 0x37, 0xf3, 0x49, 0xe1, 0xa0, 0x32,
+ 0x88, 0x85, 0x81, 0xfd, 0xb7, 0x96, 0xd7, 0x9d,
+ 0xd7, 0x29, 0x4b, 0x14, 0xf9, 0x18, 0x6a, 0xf6,
+ 0x46, 0xae, 0x69, 0xdf, 0x63, 0x9a, 0xe0, 0x0b,
+ 0x2c, 0x53, 0xd7, 0x82, 0x6f, 0xe5, 0xa0, 0x95,
+ 0x2f, 0x61, 0x7f, 0x15, 0xff, 0xc7, 0xe8, 0x83,
+ 0xfc, 0xfc, 0x16, 0x1c, 0x37, 0x0f, 0x9b, 0xbb,
+ 0x14, 0xb2, 0xe2, 0xb7, 0x1f, 0x85, 0xb7, 0x07,
+ 0x8a, 0x18, 0xed, 0xf7, 0x5f, 0x27, 0xff, 0x2f,
+ 0x07, 0xf9, 0x9d, 0xe3, 0x79, 0x45, 0x1f, 0x51,
+ 0x08, 0x54, 0x0f, 0x56, 0x84, 0xee, 0x87, 0x9a,
+ 0xa9, 0x46, 0xb8, 0x77, 0x85, 0x40, 0x46, 0x50,
+ 0xc1, 0x58, 0x07, 0xfd, 0xfa, 0x2b, 0x20, 0xd6,
+ 0x4e, 0xba, 0x08, 0x02, 0x59, 0x3d, 0x23, 0x3b,
+ 0x5d, 0xf9, 0x5e, 0x2f, 0xac, 0x9e, 0xa0, 0xd7,
+ 0x3f, 0x9a, 0xdf, 0x50, 0x66, 0xcc, 0x28, 0xce,
+ 0x93, 0xc8, 0x11, 0x5c, 0x74, 0xe2, 0x4f, 0xfd,
+ 0xaf, 0x33, 0xbb, 0xce, 0x96, 0x1f, 0xb3, 0x46,
+ 0x6e, 0xcd, 0xe4, 0xef, 0xfa, 0x2f, 0x93, 0xb1,
+ 0xe5, 0x7c, 0x54, 0xbc, 0x17, 0x1f, 0xd5, 0x31,
+ 0x0e, 0x88, 0xe7, 0xcd, 0xb0, 0xb5, 0x2e, 0x1e,
+ 0x9e, 0x40, 0x36, 0xa5, 0xbb, 0xa7, 0x4e, 0xc8,
+ 0x11, 0x6c, 0xae, 0x1c, 0x2d, 0xdb, 0x55, 0xd8,
+ 0x14, 0x40, 0x02, 0xad, 0xaf, 0x19, 0x28, 0x59,
+ 0xd7, 0x4f, 0x81, 0xd0, 0xc1, 0x54, 0x63, 0x73,
+ 0x0e, 0xfb, 0x26, 0xf2, 0xa6, 0x80, 0xca, 0x2e,
+ 0xf3, 0xca, 0x1e, 0xa4, 0x62, 0x07, 0x22, 0x10,
+ 0x11, 0x6a, 0x57, 0x28, 0x45, 0x80, 0xdf, 0x34,
+ 0x88, 0xe5, 0xf1, 0x23, 0xe0, 0xb6, 0x44, 0x51,
+ 0x54, 0xd8, 0xb3, 0x66, 0xac, 0x46, 0x4d, 0xdf,
+ 0xa2, 0x8e, 0x72, 0x3a, 0x1c, 0x87, 0x2a, 0x43,
+ 0xfe, 0xdb, 0x00, 0xff, 0xb7, 0x1c, 0x13, 0xc3,
+ 0x18, 0xfc, 0x71, 0x13, 0xe3, 0xd1, 0x1f, 0xde,
+ 0x16, 0x63, 0x73, 0xf5, 0x0e, 0xf7, 0x18, 0xe5,
+ 0x48, 0x8d, 0x30, 0xd9, 0x26, 0x20, 0x6d, 0xa1,
+ 0xba, 0xde, 0xe8, 0x7d, 0x77, 0x02, 0x33, 0x0d,
+ 0x73, 0xb2, 0xab, 0x35, 0xfd, 0xa5, 0x6e, 0x4c,
+ 0x5c, 0x27, 0xc7, 0x7e, 0x4a, 0x28, 0xf8, 0xf5,
+ 0x00, 0xbe, 0x4c, 0xd7, 0x2c, 0x27, 0x83, 0x16,
+ 0x37, 0xda, 0x0c, 0xb1, 0xd7, 0x89, 0xd8, 0x8f,
+ 0x17, 0x69, 0x1b, 0x6b, 0x48, 0x2b, 0xce, 0x9c,
+ 0xbd, 0xf4, 0x0d, 0xb5, 0x4d, 0x12, 0x11, 0x36,
+ 0x49, 0xd3, 0x8b, 0x52, 0xce, 0x7e, 0x47, 0xb0,
+ 0xb5, 0x54, 0x77, 0xef, 0x90, 0xb8, 0x0e, 0xaf,
+ 0x6f, 0x97, 0x88, 0xde, 0x6b, 0x37, 0x24, 0xdd,
+ 0x91, 0x84, 0x00, 0x51, 0xab, 0x06, 0x96, 0x3c,
+ 0x82, 0x73, 0xcf, 0xae, 0x8d, 0x23, 0x86, 0x59,
+ 0x62, 0x5b, 0xeb, 0x2a, 0xaf, 0x40, 0x17, 0xed,
+ 0x2b, 0x60, 0x73, 0x7d, 0x99, 0x95, 0x3f, 0xd6,
+ 0x6c, 0xca, 0x1e, 0xf3, 0xb0, 0xcd, 0xd5, 0x1d,
+ 0x53, 0xe0, 0xd2, 0x8b, 0x57, 0x7b, 0xac, 0x67,
+ 0x5a, 0x5a, 0x0a, 0x64, 0x82, 0xab, 0x8f, 0x5a,
+ 0x36, 0xe2, 0x45, 0x50, 0xec, 0x3e, 0x14, 0x80,
+ 0x7c, 0xfd, 0x0c, 0xa9, 0x94, 0xfb, 0xfe, 0x72,
+ 0xec, 0x47, 0x71, 0x2e, 0x90, 0x97, 0xf6, 0x33,
+ 0xbd, 0x7d, 0x7e, 0x77, 0x8f, 0xad, 0xd4, 0x1d,
+ 0x1d, 0x53, 0x0f, 0x28, 0x39, 0x77, 0x06, 0x1a,
+ 0x75, 0xfc, 0x12, 0xe6, 0x45, 0xfc, 0x87, 0xe1,
+ 0x46, 0xac, 0xb0, 0x73, 0xca, 0x24, 0x7c, 0x71,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t c3des_cbc_192_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xb1, 0xef, 0x7c, 0xd0, 0xa0, 0x6b, 0xe4, 0x88,
+ 0x5c, 0xd7, 0xf1, 0xbf, 0x5f, 0xce, 0xda, 0x19,
+ 0x81, 0x32, 0xbb, 0x96, 0x7e, 0xb9, 0x6e, 0xa1,
+ 0x43, 0xde, 0x53, 0x66, 0x9c, 0x27, 0x94, 0x85,
+ 0xcb, 0x09, 0x4e, 0x16, 0xd8, 0x60, 0x7a, 0x38,
+ 0x27, 0x21, 0x4d, 0x08, 0xaa, 0xe2, 0x1e, 0x6e,
+ 0xa3, 0xcb, 0x9a, 0x7f, 0xd1, 0xbf, 0x18, 0x36,
+ 0x5a, 0x4d, 0x7a, 0x7f, 0xcf, 0x3f, 0xba, 0xa5,
+ 0x77, 0x5b, 0xb4, 0x79, 0xdc, 0xbf, 0x2a, 0x28,
+ 0x16, 0x27, 0x0f, 0x8b, 0xd7, 0x95, 0xc3, 0xcb,
+ 0xa1, 0x6a, 0x49, 0x53, 0xa8, 0x0c, 0x70, 0xde,
+ 0x90, 0x2e, 0x36, 0x74, 0x40, 0x5d, 0x81, 0x74,
+ 0x03, 0x11, 0xbd, 0xba, 0x40, 0x8d, 0x03, 0x86,
+ 0x2b, 0x17, 0x55, 0x20, 0xd8, 0x81, 0x30, 0xd2,
+ 0x2a, 0xbd, 0xea, 0xff, 0x5c, 0x69, 0x9b, 0xe6,
+ 0xe3, 0x21, 0x9a, 0x10, 0x3e, 0xb0, 0xf4, 0x7a,
+ 0xfc, 0x6e, 0x66, 0xec, 0x44, 0x0b, 0x95, 0x8d,
+ 0x13, 0xd4, 0xf6, 0x3e, 0xa1, 0xa1, 0xac, 0xb1,
+ 0xd8, 0x3d, 0x86, 0xaf, 0x5e, 0xef, 0x14, 0x6a,
+ 0x32, 0xf3, 0x13, 0x75, 0x3b, 0x64, 0x9a, 0xf4,
+ 0xd0, 0xf5, 0x00, 0x36, 0x9e, 0xdb, 0xfd, 0xcb,
+ 0xda, 0x1f, 0xed, 0x9d, 0x6d, 0x52, 0xd7, 0xb5,
+ 0x48, 0xce, 0x53, 0x5e, 0xdc, 0xc8, 0xe4, 0x96,
+ 0x04, 0x32, 0xa5, 0xcf, 0x0c, 0xba, 0xa0, 0xd0,
+ 0x44, 0xb3, 0xe8, 0x72, 0xc6, 0xff, 0x8f, 0xd4,
+ 0x4d, 0x0a, 0x22, 0x89, 0x74, 0x50, 0xaa, 0x65,
+ 0x15, 0xab, 0x99, 0xc8, 0xf9, 0xa4, 0x10, 0xe6,
+ 0xa6, 0x4b, 0x0c, 0xc8, 0xb9, 0xa7, 0x60, 0x41,
+ 0xe7, 0x57, 0x31, 0xfa, 0x86, 0x55, 0xdf, 0x29,
+ 0x49, 0xac, 0x55, 0x7b, 0x21, 0xf9, 0x3b, 0x1e,
+ 0x1f, 0xb4, 0x1c, 0x0b, 0x77, 0xcb, 0x88, 0xbf,
+ 0xa6, 0x79, 0xbf, 0x9a, 0x51, 0xc4, 0x8e, 0x59,
+ 0x9c, 0xb3, 0x9d, 0x9d, 0x6b, 0xb2, 0x15, 0x41,
+ 0x0d, 0x6c, 0xf7, 0x5e, 0xe2, 0xf9, 0xb3, 0x80,
+ 0x8f, 0x03, 0x67, 0x68, 0x6e, 0x4b, 0x4d, 0x52,
+ 0xbc, 0x9b, 0xa2, 0xd8, 0x29, 0x1e, 0x5c, 0xd7,
+ 0x59, 0x67, 0x94, 0x40, 0x9e, 0x08, 0x15, 0x0d,
+ 0x7e, 0xc9, 0x14, 0x53, 0xa8, 0x67, 0xb3, 0xb8,
+ 0xaa, 0x21, 0x0f, 0x79, 0x69, 0x48, 0x52, 0xea,
+ 0x56, 0x03, 0x7b, 0x55, 0xb7, 0xf3, 0xfe, 0xb1,
+ 0x8a, 0x22, 0x7d, 0x75, 0x55, 0x31, 0xad, 0x20,
+ 0x6a, 0xc2, 0xa4, 0xd1, 0x1e, 0xab, 0xdd, 0x29,
+ 0xb5, 0xf8, 0xdd, 0x9b, 0x1a, 0xb8, 0xe7, 0xde,
+ 0xae, 0xa1, 0xab, 0xbb, 0xf6, 0x00, 0x87, 0xc4,
+ 0x29, 0xee, 0x2b, 0xa1, 0xa9, 0x1a, 0x46, 0x05,
+ 0x5a, 0x12, 0x3f, 0x32, 0x81, 0x25, 0x20, 0x71,
+ 0xb6, 0xfa, 0x1f, 0x27, 0x2a, 0x33, 0x49, 0xfc,
+ 0x95, 0x00, 0x72, 0x6b, 0x03, 0x53, 0x94, 0x57,
+ 0x2f, 0x47, 0x3d, 0x2d, 0x7c, 0xb4, 0xde, 0xa7,
+ 0x96, 0x81, 0x12, 0xff, 0x2c, 0xec, 0x5c, 0x03,
+ 0x2a, 0x8c, 0x76, 0xc4, 0xed, 0x09, 0xe6, 0x00,
+ 0x28, 0xdb, 0x9b, 0x44, 0xb0, 0xb4, 0x7b, 0x57,
+ 0x3b, 0xb6, 0x4f, 0x0b, 0xff, 0xf2, 0xf5, 0x02,
+ 0x56, 0xcf, 0xd5, 0xbf, 0x71, 0xe6, 0x66, 0xf3,
+ 0x08, 0x8e, 0x8b, 0x15, 0x57, 0x07, 0x41, 0xa3,
+ 0x91, 0xc1, 0xe4, 0x64, 0x92, 0x89, 0xed, 0x22,
+ 0x88, 0x8f, 0x17, 0x91, 0xde, 0xea, 0x0c, 0xa6,
+ 0x86, 0x8e, 0x4c, 0xd9, 0x63, 0xc9, 0xe5, 0xdc,
+ 0xd6, 0xd3, 0x7b, 0x2b, 0x65, 0xfa, 0x36, 0x47,
+ 0x20, 0xa4, 0xe7, 0x0b, 0x52, 0xfa, 0xa6, 0xeb,
+ 0x1d, 0x20, 0xd0, 0x4b, 0xfd, 0x88, 0x8c, 0xbb,
+ 0x52, 0x9c, 0x2f, 0xb7, 0xba, 0x8b, 0xdd, 0x10,
+ 0x2d, 0x7d, 0x77, 0x79, 0x40, 0xa7, 0xed, 0xf9,
+ 0xbd, 0x2a, 0x55, 0x1f, 0x87, 0x1e, 0x3c, 0xfc,
+};
+
+const struct testvec c3des_cbc_192_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t c3des_cbc_192_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0x9e, 0x5d, 0x35, 0x56, 0xa7, 0xcc, 0xc0, 0x1c,
+ 0x60, 0x4c, 0x42, 0x90, 0x35, 0xf3, 0xc1, 0x20,
+ 0xf2, 0x07, 0x6f, 0xf8, 0x7c, 0x33, 0x6a, 0x74,
+ 0xdc, 0x85, 0xbc, 0x9c, 0xa2, 0x29, 0xc6, 0x69,
+ 0x0e, 0xef, 0x0f, 0xa9, 0x6e, 0xec, 0xf2, 0x23,
+ 0x2f, 0x9a, 0xbe, 0x1a, 0x89, 0x22, 0x00, 0xc4,
+ 0x5a, 0xaf, 0x4a, 0xa0, 0x4f, 0x30, 0x8f, 0x99,
+ 0xd2, 0x93, 0x6d, 0xfa, 0xcd, 0x2f, 0xad, 0x19,
+ 0x10, 0x14, 0x90, 0x3a, 0x4b, 0xab, 0x17, 0x2e,
+ 0x2c, 0xe1, 0x26, 0xe5, 0x76, 0xf1, 0xd1, 0x1d,
+ 0x4c, 0x77, 0x68, 0xfb, 0x45, 0x9a, 0x3e, 0x19,
+ 0xe0, 0xfb, 0xdc, 0xd4, 0x0e, 0x29, 0x7c, 0x06,
+ 0xd3, 0x45, 0xa8, 0xf7, 0x39, 0x91, 0xe6, 0x18,
+ 0x0f, 0x81, 0xe6, 0x7d, 0x6c, 0x65, 0x2e, 0x16,
+ 0x24, 0xa4, 0x16, 0x96, 0x0a, 0x7b, 0x5f, 0x3a,
+ 0x0c, 0xe9, 0x0e, 0x3f, 0x34, 0x38, 0xb0, 0xe1,
+ 0x39, 0x23, 0x5c, 0x3c, 0x00, 0xb4, 0xa0, 0xf7,
+ 0x42, 0x18, 0x70, 0x25, 0x82, 0x13, 0x24, 0x49,
+ 0xbb, 0x3f, 0xfb, 0xef, 0xb6, 0xc6, 0x7f, 0x3d,
+ 0x8c, 0x17, 0x62, 0x60, 0x6f, 0xd5, 0xda, 0x2c,
+ 0xf8, 0x85, 0xee, 0xa7, 0xc2, 0x76, 0x5d, 0x34,
+ 0x4c, 0xe1, 0x0d, 0x36, 0x6e, 0x02, 0xdd, 0x08,
+ 0x85, 0xe4, 0x90, 0xfe, 0x1f, 0x81, 0x4a, 0x06,
+ 0xa6, 0x72, 0x81, 0x79, 0x47, 0xd7, 0x6d, 0x92,
+ 0x8f, 0xb7, 0xb2, 0xfd, 0xd0, 0x60, 0x6c, 0x06,
+ 0x44, 0xcd, 0x20, 0x28, 0xef, 0x16, 0xc3, 0x01,
+ 0x19, 0x14, 0x34, 0x39, 0xad, 0x87, 0x9f, 0xde,
+ 0x76, 0xb9, 0xb9, 0x87, 0x1a, 0xbd, 0x8e, 0x2c,
+ 0xe6, 0xb3, 0xe7, 0xb6, 0x80, 0xf8, 0xc5, 0x22,
+ 0x5f, 0x53, 0xed, 0x03, 0xfe, 0x09, 0x2c, 0x9d,
+ 0xb6, 0x61, 0x4a, 0xbb, 0x07, 0x5d, 0xbd, 0x68,
+ 0x74, 0xab, 0x02, 0x81, 0x64, 0x7b, 0x97, 0xa3,
+ 0xad, 0x15, 0x99, 0x7a, 0x04, 0x33, 0xbd, 0x50,
+ 0x94, 0x11, 0xcc, 0xf7, 0x8b, 0x77, 0x88, 0x78,
+ 0x80, 0xfe, 0x5f, 0xa1, 0x63, 0xbc, 0xb0, 0x65,
+ 0xcb, 0x9d, 0x4c, 0xfe, 0x66, 0x4e, 0xff, 0xe3,
+ 0x43, 0x61, 0x99, 0x88, 0x88, 0x4c, 0xbc, 0x8a,
+ 0xf1, 0x69, 0x00, 0xc2, 0xe5, 0xb9, 0x65, 0x8b,
+ 0x10, 0xdf, 0x38, 0x3e, 0x9e, 0x9f, 0x87, 0xed,
+ 0x84, 0x71, 0xe7, 0xf2, 0xb5, 0xb6, 0x11, 0xed,
+ 0x1e, 0xd4, 0xc0, 0x6d, 0x77, 0x08, 0x4b, 0xfd,
+ 0x95, 0xd5, 0xc0, 0xbe, 0xa6, 0xcc, 0x3b, 0xea,
+ 0x11, 0x38, 0xa5, 0x59, 0x36, 0x2a, 0xf4, 0x98,
+ 0x52, 0x9d, 0x3b, 0x8c, 0x8a, 0x19, 0xbd, 0xfb,
+ 0x49, 0xcb, 0xb0, 0x57, 0x91, 0xc7, 0xf8, 0x2a,
+ 0x89, 0xa8, 0x85, 0x03, 0xdf, 0x6e, 0xad, 0xf4,
+ 0x8a, 0x88, 0x9a, 0x2b, 0x5d, 0xe8, 0xca, 0xa9,
+ 0x8f, 0x18, 0xa3, 0x6a, 0x37, 0x84, 0xa9, 0x24,
+ 0x5b, 0xce, 0xd6, 0xbe, 0x7e, 0x40, 0x86, 0x6a,
+ 0xc3, 0x47, 0x28, 0x66, 0xf0, 0x8c, 0x2d, 0x69,
+ 0x22, 0x64, 0x61, 0x36, 0x6a, 0x0c, 0xc4, 0x18,
+ 0x5f, 0xd7, 0xff, 0xbc, 0xf1, 0x94, 0x16, 0xfb,
+ 0x26, 0xa7, 0x80, 0xa4, 0x2d, 0x72, 0xc6, 0x9d,
+ 0xa7, 0xed, 0x04, 0x13, 0x0f, 0xe7, 0xf8, 0x93,
+ 0x57, 0x6b, 0xd5, 0xa4, 0xad, 0x9a, 0x97, 0xeb,
+ 0x97, 0xe7, 0x60, 0x01, 0x89, 0x3f, 0x88, 0xf2,
+ 0xee, 0xf3, 0x79, 0xd6, 0x5a, 0x03, 0x94, 0x07,
+ 0xd3, 0x33, 0xc8, 0xda, 0x15, 0x17, 0x0a, 0x8f,
+ 0xbd, 0x58, 0x1b, 0xfe, 0x3d, 0x77, 0x5d, 0x8f,
+ 0x4e, 0x0e, 0x98, 0x7d, 0x02, 0x63, 0x94, 0x73,
+ 0x4a, 0x58, 0x47, 0xed, 0x52, 0xfc, 0x85, 0x19,
+ 0x5d, 0x2f, 0xfa, 0x07, 0x44, 0xbd, 0x8e, 0xcb,
+ 0x20, 0x63, 0x9d, 0x2b, 0x61, 0x5c, 0x19, 0x71,
+ 0x80, 0xe5, 0x25, 0x5b, 0x2e, 0xc5, 0xfe, 0x1a,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t c3des_cbc_192_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0xf4, 0xb0, 0xb0, 0xcb, 0x79, 0xcc, 0x8c, 0x0a,
+ 0x3b, 0xc7, 0x43, 0x4e, 0x62, 0x9d, 0xde, 0xb4,
+ 0xab, 0xa5, 0x62, 0x63, 0x32, 0xa7, 0x18, 0x2b,
+ 0xe3, 0xee, 0x44, 0xc6, 0x6f, 0xb2, 0xdc, 0x21,
+ 0xc5, 0xc8, 0x9e, 0x32, 0x71, 0x4c, 0x7a, 0x82,
+ 0x8d, 0xe0, 0xad, 0x91, 0x88, 0x0c, 0x41, 0x83,
+ 0x28, 0x0d, 0xed, 0xa7, 0xeb, 0x48, 0xb1, 0x31,
+ 0xfa, 0x40, 0xd9, 0x44, 0x19, 0xee, 0x8d, 0x2c,
+ 0x7d, 0xe2, 0x39, 0xa0, 0x39, 0xaa, 0x86, 0xab,
+ 0xb5, 0x68, 0xe5, 0x83, 0x06, 0x61, 0xec, 0xe6,
+ 0xc2, 0x85, 0xb2, 0x46, 0xf4, 0x5b, 0x0e, 0x34,
+ 0x7e, 0x0c, 0xa0, 0xda, 0xef, 0x58, 0x9c, 0x39,
+ 0x95, 0xa2, 0xca, 0xd3, 0x3b, 0x4d, 0x76, 0xe3,
+ 0x34, 0x6d, 0x08, 0xa4, 0xba, 0x88, 0x58, 0x39,
+ 0xb4, 0xe4, 0x6b, 0xb6, 0x32, 0x50, 0x2c, 0xe2,
+ 0x0a, 0x37, 0xbc, 0x98, 0x38, 0x32, 0x17, 0x1b,
+ 0x12, 0xef, 0xdc, 0x9d, 0x91, 0x09, 0x8e, 0xd8,
+ 0xc3, 0xf8, 0x7b, 0x35, 0x41, 0x3b, 0xf8, 0xf5,
+ 0x37, 0x48, 0x04, 0xf7, 0x94, 0xbf, 0x54, 0x8d,
+ 0x79, 0x49, 0x8f, 0xf0, 0x3f, 0xb7, 0x90, 0x76,
+ 0x14, 0x09, 0xc6, 0x8c, 0xba, 0x1a, 0x30, 0x1b,
+ 0xbb, 0xd9, 0xe2, 0xb5, 0xe8, 0xd9, 0x9b, 0x68,
+ 0x60, 0x90, 0xd3, 0x4a, 0xe8, 0x65, 0x7b, 0xaa,
+ 0xb0, 0xda, 0x69, 0x1d, 0x45, 0x78, 0x2c, 0x3b,
+ 0x59, 0x29, 0x3c, 0x26, 0x9a, 0xd2, 0xa5, 0xfd,
+ 0xb7, 0x16, 0x59, 0x7c, 0x46, 0xea, 0x99, 0xd0,
+ 0x06, 0x01, 0x3f, 0xd2, 0x23, 0xcc, 0xde, 0xb8,
+ 0xaa, 0x88, 0x17, 0x03, 0xe1, 0x48, 0x2c, 0xdd,
+ 0xce, 0xd1, 0x2c, 0xce, 0x37, 0xee, 0xe6, 0xa6,
+ 0x47, 0x8c, 0x07, 0xe5, 0xfe, 0x01, 0xc6, 0x27,
+ 0xfe, 0x3f, 0x9d, 0x30, 0x18, 0x36, 0xe7, 0xa7,
+ 0x37, 0x1d, 0xcf, 0x6d, 0x4c, 0x82, 0xec, 0x58,
+ 0xa1, 0x6f, 0x56, 0xc6, 0x08, 0x25, 0x94, 0xda,
+ 0xae, 0x1a, 0x4f, 0xda, 0xb2, 0xf4, 0xbf, 0x94,
+ 0xff, 0x66, 0x6a, 0xb1, 0x1f, 0x42, 0xfe, 0x32,
+ 0xa4, 0x0e, 0x3d, 0x6a, 0x16, 0x44, 0xe0, 0xac,
+ 0xe8, 0xc1, 0xe2, 0xa8, 0x73, 0xab, 0xac, 0x58,
+ 0xb1, 0xbc, 0x94, 0xb2, 0x6a, 0xe4, 0x45, 0xf5,
+ 0x90, 0x6b, 0x82, 0xeb, 0x9e, 0x22, 0x9e, 0xb2,
+ 0x27, 0x3e, 0xc8, 0x55, 0xf4, 0x8f, 0xda, 0x04,
+ 0xa3, 0x9c, 0xa4, 0x79, 0xbd, 0x79, 0xd3, 0xbd,
+ 0xbe, 0x72, 0x7f, 0x90, 0xef, 0xc3, 0x34, 0x17,
+ 0x72, 0x6f, 0xb4, 0xfe, 0x62, 0x56, 0xc3, 0xd6,
+ 0x43, 0xc8, 0x4c, 0x76, 0x91, 0x04, 0x97, 0x4c,
+ 0x84, 0x98, 0x56, 0xb7, 0x7b, 0x4f, 0xd5, 0xcf,
+ 0x1b, 0x9c, 0x09, 0xe3, 0x1d, 0xdf, 0x0e, 0xfa,
+ 0x39, 0xc8, 0x48, 0x43, 0x84, 0xec, 0x79, 0xc8,
+ 0x7f, 0x4f, 0xa8, 0xc0, 0xb4, 0xde, 0x8b, 0x79,
+ 0xcb, 0x9c, 0x42, 0x81, 0x49, 0xdc, 0x39, 0xb5,
+ 0x31, 0xa6, 0x22, 0xba, 0x71, 0xb8, 0x2d, 0x1d,
+ 0xc8, 0x17, 0xd8, 0x9d, 0x26, 0x2b, 0xd5, 0xcf,
+ 0x57, 0x46, 0x0a, 0x61, 0x7e, 0xb7, 0xc3, 0x9c,
+ 0xa6, 0x44, 0x60, 0x2d, 0x30, 0xb8, 0x10, 0x47,
+ 0x7d, 0x7e, 0x87, 0x76, 0xc1, 0x4e, 0x85, 0x77,
+ 0xbc, 0x30, 0x32, 0x56, 0x0a, 0x5b, 0x1c, 0xd0,
+ 0xf6, 0x47, 0x48, 0x22, 0xf4, 0x6e, 0x38, 0xc5,
+ 0xab, 0xe2, 0xd0, 0x4d, 0x40, 0x27, 0xab, 0x8f,
+ 0x43, 0xb1, 0x60, 0x29, 0x07, 0xd0, 0xf5, 0x25,
+ 0xe5, 0xfa, 0xe7, 0x46, 0x32, 0x37, 0xb9, 0xae,
+ 0x2e, 0x02, 0x8c, 0x94, 0x15, 0x69, 0xd6, 0x74,
+ 0xb4, 0x36, 0xdd, 0x94, 0x70, 0xa7, 0x16, 0x7b,
+ 0x4c, 0xd3, 0x48, 0x83, 0xc5, 0xb2, 0xb0, 0x6a,
+ 0xfe, 0x7e, 0xd4, 0xe5, 0x6d, 0xa5, 0x96, 0x20,
+ 0x08, 0x59, 0xbd, 0x0c, 0x3d, 0x55, 0xa5, 0x03,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t c3des_cbc_192_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0xea, 0x7c, 0x8c, 0x8e, 0x3e, 0x61, 0x34, 0x3d,
+ 0xe0, 0x7f, 0xd3, 0xe1, 0x3a, 0xb9, 0xc8, 0xf2,
+ 0x98, 0xdc, 0x59, 0x26, 0xd2, 0xd8, 0xa7, 0x7f,
+ 0x41, 0x98, 0x24, 0xa8, 0x28, 0x0c, 0x88, 0x55,
+ 0x91, 0xdb, 0x29, 0x17, 0x70, 0xd7, 0x03, 0xff,
+ 0xbd, 0x0e, 0xbf, 0xf8, 0x73, 0x92, 0x19, 0xe9,
+ 0x92, 0x67, 0xdb, 0x08, 0x94, 0x77, 0x71, 0x2d,
+ 0x00, 0xad, 0x26, 0x42, 0x2d, 0xac, 0x8c, 0x67,
+ 0x6f, 0xb3, 0x8e, 0x36, 0x22, 0xeb, 0x1f, 0x8c,
+ 0xd4, 0x9b, 0x9f, 0xa6, 0xa9, 0xb1, 0x52, 0x65,
+ 0x9a, 0xfe, 0xcc, 0x92, 0x48, 0x75, 0xf6, 0xb8,
+ 0x59, 0xfe, 0x0e, 0x67, 0x93, 0xce, 0x3b, 0x7e,
+ 0x51, 0x74, 0xe5, 0x24, 0x35, 0x08, 0x68, 0x21,
+ 0x6a, 0x7f, 0xdd, 0x8c, 0xfd, 0xcd, 0x6d, 0x90,
+ 0xc5, 0x3b, 0x26, 0x9e, 0x00, 0xf4, 0x1e, 0x70,
+ 0xd3, 0xe7, 0xe8, 0x2f, 0x52, 0x87, 0x76, 0x84,
+ 0xbb, 0x5c, 0x76, 0x5a, 0xc8, 0xea, 0x74, 0xe2,
+ 0x9e, 0x85, 0xf6, 0x53, 0x85, 0x1a, 0x6e, 0x02,
+ 0x0d, 0x32, 0x11, 0xc4, 0xec, 0xee, 0x79, 0x27,
+ 0xda, 0xca, 0xc0, 0x0b, 0x8e, 0x2d, 0xb7, 0x7d,
+ 0x8c, 0x6e, 0xfb, 0xa3, 0xa8, 0x24, 0x24, 0x62,
+ 0xc8, 0xdd, 0xc7, 0x16, 0x09, 0x33, 0x0f, 0xe5,
+ 0xc8, 0x60, 0x3d, 0xb6, 0xbf, 0x6c, 0x28, 0xd2,
+ 0x0b, 0x9c, 0xd9, 0xcb, 0x64, 0x49, 0xe4, 0x80,
+ 0x72, 0x58, 0xaa, 0xaa, 0x7e, 0x1d, 0x9f, 0xd7,
+ 0x29, 0x15, 0x65, 0xfc, 0xfd, 0x3f, 0xe1, 0x82,
+ 0x25, 0x3c, 0xd4, 0xbe, 0x59, 0x79, 0x63, 0xd1,
+ 0xd6, 0x0e, 0xda, 0x00, 0xf3, 0xaa, 0x13, 0xd3,
+ 0xed, 0xef, 0xca, 0x8b, 0x97, 0x15, 0x2d, 0x10,
+ 0x6f, 0xcf, 0xee, 0xc7, 0x21, 0xad, 0xe3, 0xe4,
+ 0xd8, 0x95, 0x21, 0x1f, 0xc0, 0x06, 0x3a, 0xbc,
+ 0xbb, 0x2a, 0x92, 0x78, 0x76, 0x9d, 0x1e, 0x7b,
+ 0xb5, 0x29, 0xaf, 0x96, 0x75, 0x2b, 0x41, 0xbd,
+ 0xae, 0x79, 0x28, 0x72, 0xe7, 0x54, 0xc4, 0x08,
+ 0xd3, 0xd2, 0xac, 0x96, 0xd0, 0x0f, 0x9b, 0x68,
+ 0x7d, 0x3f, 0xc2, 0xdd, 0x3d, 0xfc, 0xca, 0xcd,
+ 0x11, 0x71, 0xd9, 0x48, 0x53, 0x9f, 0xd3, 0x79,
+ 0x7d, 0x47, 0x71, 0x2a, 0x6d, 0x9e, 0xa9, 0x47,
+ 0xa1, 0xf7, 0x97, 0x80, 0x83, 0x70, 0x6b, 0xfe,
+ 0x10, 0x11, 0x6a, 0x0e, 0xdd, 0xde, 0x22, 0x3c,
+ 0x19, 0x30, 0x73, 0x73, 0x2e, 0x4b, 0x54, 0x17,
+ 0xc3, 0x2e, 0xe9, 0xce, 0xe0, 0xe3, 0xa0, 0x1a,
+ 0x28, 0xd1, 0x50, 0xa8, 0xd2, 0x40, 0xe2, 0x1b,
+ 0xfa, 0x49, 0x06, 0x49, 0x8b, 0x4b, 0xd9, 0xd5,
+ 0xf5, 0x50, 0xae, 0x64, 0x19, 0xe1, 0xd9, 0x4e,
+ 0xbb, 0x29, 0x70, 0x66, 0x46, 0xa8, 0x7e, 0x5b,
+ 0xdc, 0xe2, 0xd5, 0x9d, 0x56, 0x6d, 0x4c, 0xe6,
+ 0x0e, 0x6b, 0x71, 0x40, 0x82, 0xf7, 0xb3, 0xad,
+ 0x23, 0x17, 0xe3, 0x1c, 0x61, 0x1d, 0x3b, 0x71,
+ 0xfc, 0x06, 0x17, 0xec, 0x6c, 0x77, 0x98, 0x27,
+ 0xc7, 0x4b, 0x65, 0x17, 0x81, 0xe7, 0xcb, 0xce,
+ 0x09, 0x76, 0x82, 0x82, 0x4a, 0x53, 0x67, 0xa0,
+ 0x05, 0x25, 0x4c, 0xc4, 0xa7, 0xad, 0xa7, 0xaf,
+ 0xa0, 0x11, 0xd7, 0x73, 0x3b, 0x30, 0xbf, 0x53,
+ 0x50, 0x9b, 0xd8, 0xf3, 0x32, 0x15, 0xdd, 0x36,
+ 0x88, 0xc2, 0x39, 0x51, 0xb6, 0xb8, 0x0d, 0x5c,
+ 0x20, 0x4e, 0x24, 0xee, 0x95, 0x32, 0x61, 0x25,
+ 0xda, 0x73, 0x0d, 0x8a, 0x58, 0xe6, 0xcc, 0xad,
+ 0x79, 0x3d, 0xef, 0x29, 0x0c, 0x9f, 0xe1, 0xa7,
+ 0x22, 0x1e, 0xea, 0x7a, 0x4f, 0xfb, 0xc1, 0x1f,
+ 0x17, 0xca, 0x69, 0xd6, 0xa4, 0xce, 0x6e, 0xc0,
+ 0x70, 0xa3, 0x08, 0x32, 0x87, 0xb4, 0x6b, 0x80,
+ 0x5c, 0x7f, 0x88, 0x5c, 0xbf, 0x07, 0xd8, 0xe9,
+ 0xdd, 0xd2, 0x76, 0xa9, 0xaa, 0xd9, 0x55, 0x48,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t c3des_cbc_192_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0xf3, 0x49, 0xda, 0x5c, 0xde, 0x9d, 0x3e, 0x9d,
+ 0xb9, 0xc2, 0x6e, 0x96, 0xa9, 0x93, 0x10, 0x73,
+ 0x0e, 0x26, 0x39, 0xd6, 0x9f, 0x04, 0x5f, 0x69,
+ 0x54, 0xa3, 0x7c, 0x46, 0x7b, 0x18, 0x93, 0xc0,
+ 0xbb, 0x0c, 0x96, 0x6f, 0xb0, 0xbf, 0xce, 0x67,
+ 0x33, 0x3e, 0x56, 0xe8, 0x6b, 0x4d, 0x3f, 0xc8,
+ 0x3c, 0xc6, 0x89, 0x2c, 0x0b, 0x95, 0x3a, 0xaf,
+ 0xc0, 0xf3, 0x1f, 0x0e, 0x07, 0x01, 0xa6, 0x35,
+ 0x19, 0x79, 0x91, 0x24, 0xaa, 0x0d, 0xf0, 0x53,
+ 0x27, 0x7d, 0xbb, 0xa6, 0xb6, 0x44, 0x31, 0x4b,
+ 0xd4, 0xcf, 0xf6, 0x6d, 0x18, 0xa2, 0x28, 0x8a,
+ 0xc1, 0x0a, 0xbe, 0x57, 0x0c, 0x61, 0x5f, 0xd9,
+ 0x12, 0x14, 0xfe, 0xe2, 0xc7, 0x10, 0x72, 0xee,
+ 0x19, 0xb8, 0x16, 0x0b, 0x88, 0x87, 0xce, 0xf3,
+ 0xfe, 0x57, 0x37, 0xd1, 0xa2, 0xf7, 0xd0, 0x5e,
+ 0x73, 0xde, 0x39, 0x35, 0xbc, 0xde, 0xed, 0x61,
+ 0x4b, 0x31, 0xdc, 0xfe, 0x3c, 0x4d, 0x98, 0xa9,
+ 0x36, 0xb0, 0x34, 0x5b, 0xb4, 0xb7, 0x79, 0x25,
+ 0x6e, 0x24, 0x7e, 0x10, 0xfe, 0x20, 0xd5, 0x16,
+ 0x86, 0xaf, 0xcd, 0x26, 0x34, 0xd3, 0x2e, 0xdc,
+ 0x7c, 0x69, 0xe3, 0xc5, 0x62, 0x0c, 0xba, 0x29,
+ 0x9c, 0x4b, 0x2f, 0x39, 0x45, 0xe1, 0xcf, 0xc5,
+ 0xfe, 0x35, 0xb6, 0x2f, 0xb1, 0x1a, 0x90, 0xe1,
+ 0xa7, 0x39, 0xe8, 0x1e, 0x5f, 0xac, 0xab, 0x1e,
+ 0x32, 0xba, 0xc5, 0x92, 0x39, 0x62, 0x37, 0x2c,
+ 0x49, 0xf1, 0x62, 0x90, 0xf7, 0x1e, 0x10, 0xce,
+ 0x8e, 0x95, 0xa3, 0xc6, 0xd8, 0xe5, 0xc8, 0xdf,
+ 0xcc, 0x94, 0x7d, 0x26, 0xab, 0x29, 0xbb, 0x9d,
+ 0xf3, 0x73, 0xce, 0xac, 0x76, 0xdf, 0x75, 0x2a,
+ 0x3e, 0x8f, 0x47, 0xff, 0x76, 0xfe, 0xea, 0xd4,
+ 0x4a, 0xa9, 0x36, 0x9d, 0x12, 0x45, 0xb7, 0x99,
+ 0x81, 0xb6, 0x77, 0x98, 0x13, 0xfb, 0x5a, 0xe5,
+ 0x40, 0x87, 0x61, 0x0d, 0x10, 0x76, 0xf6, 0x3e,
+ 0x48, 0xac, 0xc4, 0x27, 0x87, 0xcd, 0x07, 0xde,
+ 0x0b, 0x23, 0x97, 0x61, 0x3d, 0x18, 0x64, 0x7f,
+ 0xbf, 0xd6, 0x87, 0xc1, 0x11, 0xfb, 0xf9, 0xda,
+ 0x14, 0xa1, 0x01, 0xf8, 0x7e, 0xea, 0x5b, 0x5b,
+ 0xdd, 0x09, 0xf9, 0x31, 0x80, 0x3c, 0xee, 0x34,
+ 0x2d, 0xda, 0x71, 0xd9, 0x32, 0x7d, 0x45, 0xb2,
+ 0x53, 0xea, 0xd5, 0x7c, 0x85, 0x45, 0xce, 0x1d,
+ 0x2b, 0xe9, 0xd7, 0x95, 0xf8, 0x8c, 0x08, 0xe4,
+ 0xd0, 0x2f, 0x60, 0x75, 0x02, 0xf3, 0xde, 0xeb,
+ 0x46, 0x40, 0xa8, 0xd2, 0x37, 0xd6, 0xca, 0x5d,
+ 0xb9, 0xf4, 0x51, 0x31, 0x8a, 0x1a, 0x82, 0xbd,
+ 0x6f, 0x6d, 0x88, 0x2b, 0x63, 0x0f, 0xe1, 0xf0,
+ 0xcf, 0x13, 0x79, 0x1d, 0x78, 0x82, 0x66, 0xa1,
+ 0xef, 0xdb, 0x34, 0x50, 0xd2, 0x71, 0x47, 0x49,
+ 0x41, 0x74, 0xd9, 0x0b, 0x14, 0x38, 0x1f, 0xc3,
+ 0x09, 0x4d, 0xb3, 0xa6, 0x03, 0x3f, 0x56, 0x67,
+ 0xd7, 0x51, 0x4c, 0x8a, 0x1d, 0x37, 0x99, 0xfb,
+ 0xe1, 0x84, 0x57, 0x55, 0x9b, 0xf8, 0x73, 0x63,
+ 0x68, 0x73, 0x89, 0x52, 0x06, 0xe7, 0x34, 0xe7,
+ 0x1a, 0x15, 0x7e, 0xd9, 0x84, 0xa3, 0x0e, 0x68,
+ 0x14, 0x1c, 0xe8, 0x23, 0x9e, 0xe3, 0x8f, 0x71,
+ 0x02, 0x9b, 0x87, 0xd4, 0xd9, 0x1b, 0xd1, 0x9e,
+ 0x9e, 0xa0, 0x7e, 0x49, 0x8e, 0xaa, 0x89, 0xb5,
+ 0x16, 0x48, 0x07, 0xb3, 0x3d, 0x9e, 0x4c, 0x35,
+ 0x3e, 0x94, 0xa9, 0xf8, 0x82, 0x50, 0x6a, 0x41,
+ 0x28, 0x3e, 0x9f, 0x9a, 0x1a, 0x5d, 0x02, 0x7c,
+ 0xd0, 0x32, 0x52, 0xa5, 0xee, 0x09, 0x27, 0x2d,
+ 0x49, 0x17, 0xf7, 0x92, 0xa1, 0x63, 0x9d, 0x2a,
+ 0xfd, 0x53, 0x26, 0x14, 0x7c, 0x92, 0x72, 0xa6,
+ 0x38, 0x18, 0x8f, 0xb5, 0x54, 0xb3, 0x69, 0x63,
+ 0x6a, 0xdc, 0xb1, 0x5a, 0x12, 0x7a, 0x0b, 0xa3,
+};
+
+const struct testvec c3des_cbc_192_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno8_vec3_ctxt,
+ },
+};
+
+static int
+open_disk(const char *devpath, const char *imgpath, size_t size)
+{
+ int fd;
+
+ fd = open(imgpath, O_CREAT | O_RDWR | O_TRUNC, 0600);
+ if (fd < 0)
+ return -1;
+
+ if (ftruncate(fd, size) < 0)
+ goto fail;
+
+ if (rump_pub_etfs_register_withsize(devpath,
+ imgpath, RUMP_ETFS_BLK, 0, size) < 0) {
+ goto fail;
+ }
+
+ unlink(imgpath);
+ return fd;
+fail:
+ close(fd);
+ unlink(imgpath);
+ return -1;
+}
+
+static int
+open_cgd(int devno)
+{
+ char devpath[32];
+
+ sprintf(devpath, "/dev/rcgd%d%c", devno, getrawpartition() + 'a');
+
+ return rump_sys_open(devpath, O_RDWR, 0);
+}
+
+static int
+configure_cgd(int fd, const char *dkpath, const char *alg,
+ const char *ivmethod, const char *key, size_t keylen)
+{
+ struct cgd_ioctl ci;
+
+ memset(&ci, 0, sizeof(ci));
+ ci.ci_disk = dkpath;
+ ci.ci_alg = alg;
+ ci.ci_ivmethod = ivmethod;
+ ci.ci_keylen = 8 * keylen - 8; /* Exclude the NUL terminator. */
+ ci.ci_key = key;
+ ci.ci_blocksize = 64;
+
+ return rump_sys_ioctl(fd, CGDIOCSET, &ci);
+}
+
+static int
+unconfigure_cgd(int fd)
+{
+ struct cgd_ioctl ci;
+
+ return rump_sys_ioctl(fd, CGDIOCCLR, &ci);
+}
+
+static int
+write_testvec(int cgdfd, const struct testvec *tv)
+{
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ return -1;
+
+ if (rump_sys_write(cgdfd, tv->ptxt, SECSIZE) != SECSIZE)
+ return -1;
+
+ return 0;
+}
+
+static int
+read_testvec(int cgdfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (rump_sys_read(cgdfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ptxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+static int
+check_testvec(int dkfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (lseek(dkfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (read(dkfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ctxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+ATF_TC(cgd_3des_cbc_192_encblkno1);
+ATF_TC_HEAD(cgd_3des_cbc_192_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test 3des-cbc with 192 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_3des_cbc_192_encblkno1, tc)
+{
+ const char imgpath[] = "3des-cbc-192-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "3des-cbc", "encblkno1",
+ c3des_cbc_192_key, sizeof(c3des_cbc_192_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "3des-cbc", "encblkno1",
+ c3des_cbc_192_key, sizeof(c3des_cbc_192_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_3des_cbc_192_encblkno8);
+ATF_TC_HEAD(cgd_3des_cbc_192_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test 3des-cbc with 192 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_3des_cbc_192_encblkno8, tc)
+{
+ const char imgpath[] = "3des-cbc-192-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "3des-cbc", "encblkno8",
+ c3des_cbc_192_key, sizeof(c3des_cbc_192_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "3des-cbc", "encblkno8",
+ c3des_cbc_192_key, sizeof(c3des_cbc_192_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, cgd_3des_cbc_192_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_3des_cbc_192_encblkno8);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/dev/cgd/t_cgd_aes.c b/contrib/netbsd-tests/dev/cgd/t_cgd_aes.c
new file mode 100644
index 0000000..9416333
--- /dev/null
+++ b/contrib/netbsd-tests/dev/cgd/t_cgd_aes.c
@@ -0,0 +1,3606 @@
+/* $NetBSD: t_cgd_aes.c,v 1.5 2016/12/11 00:23:44 alnsn Exp $ */
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * Copyright (c) 2007 The Institute of Electrical and Electronics Engineers, Inc
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Alexander Nasonov.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/sysctl.h>
+
+#include <atf-c.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <util.h>
+
+#include <dev/cgdvar.h>
+
+#include <rump/rump.h>
+#include <rump/rump_syscalls.h>
+
+#include "../../h_macros.h"
+
+#define SECSIZE 512
+
+struct testvec {
+ unsigned int blkno;
+ const uint8_t *ptxt; /* PlainText */
+ const uint8_t *ctxt; /* CipherText */
+};
+
+/*
+ * 128 bits CBC key, NUL terminated.
+ */
+static const char aes_cbc_128_key[17] = {
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
+ 0
+};
+
+/*
+ * 192 bits CBC key, NUL terminated.
+ */
+static const char aes_cbc_192_key[25] = {
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* ABCDEFGH */
+ 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* IJKLMNOP */
+ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* QRSTUVWX */
+ 0
+};
+
+/*
+ * 256 bits CBC key, NUL terminated.
+ */
+static const char aes_cbc_256_key[33] = {
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, /* 89abcdef */
+ 0
+};
+
+static const uint8_t aes_cbc_ptxt[SECSIZE] =
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop";
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t aes_cbc_128_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x1e, 0x95, 0x12, 0x15, 0xf6, 0xe0, 0xa7, 0x56,
+ 0x95, 0xa0, 0xa7, 0x35, 0x77, 0xf4, 0xdd, 0xdc,
+ 0x37, 0xc0, 0x28, 0x20, 0x00, 0x79, 0xa0, 0x35,
+ 0xe0, 0x83, 0x23, 0x95, 0x4e, 0xea, 0x8d, 0xa2,
+ 0x11, 0xbf, 0x9a, 0xd5, 0x21, 0x1e, 0x15, 0xb9,
+ 0xd1, 0x2e, 0xd2, 0xd9, 0xa5, 0xcc, 0x26, 0x75,
+ 0xba, 0x3e, 0x30, 0x11, 0xb2, 0x40, 0xdd, 0x1d,
+ 0x07, 0x3b, 0xe6, 0x00, 0xa7, 0x31, 0x9e, 0x58,
+ 0x41, 0xf3, 0x02, 0xf5, 0xad, 0x35, 0x79, 0x9a,
+ 0x9e, 0x03, 0xc8, 0x7a, 0x9d, 0x1d, 0x58, 0x9f,
+ 0x98, 0x67, 0xe2, 0x49, 0x81, 0x0c, 0x23, 0x90,
+ 0xd8, 0xc6, 0xf0, 0xc5, 0x73, 0x46, 0xd5, 0x14,
+ 0x1d, 0x78, 0x24, 0x7c, 0x9f, 0x5c, 0x8c, 0xe6,
+ 0x5d, 0x85, 0x7a, 0x5f, 0x76, 0xcc, 0xd8, 0xe9,
+ 0x03, 0xff, 0xfd, 0xd4, 0x12, 0x3f, 0xcb, 0xb0,
+ 0xfe, 0xfd, 0x86, 0x00, 0x0c, 0xe3, 0xdd, 0xa6,
+ 0x89, 0x92, 0xfe, 0xc8, 0x07, 0x5a, 0x94, 0x55,
+ 0x75, 0xae, 0x68, 0x47, 0xba, 0x84, 0x75, 0x58,
+ 0x33, 0x30, 0x2c, 0x16, 0x5b, 0xe9, 0x3f, 0x2a,
+ 0x09, 0xf9, 0x69, 0x23, 0x77, 0xd7, 0x2b, 0x95,
+ 0x4b, 0x78, 0x59, 0xcc, 0xfa, 0xf5, 0x79, 0xd2,
+ 0x05, 0x87, 0x66, 0x57, 0x93, 0xbf, 0x05, 0x90,
+ 0x4d, 0x6d, 0xd2, 0x72, 0x92, 0x24, 0xec, 0x14,
+ 0xe7, 0xbf, 0x82, 0x57, 0xbb, 0x14, 0x51, 0xe6,
+ 0xce, 0x3f, 0xa1, 0xfc, 0x63, 0x75, 0xee, 0xde,
+ 0xf9, 0x31, 0xd3, 0xa0, 0x07, 0xcd, 0x4d, 0x8f,
+ 0x83, 0x7d, 0x65, 0xe1, 0xc6, 0x60, 0x9e, 0x5c,
+ 0x51, 0x76, 0xfa, 0x64, 0xdf, 0xdc, 0xaf, 0x38,
+ 0xee, 0xe9, 0x8f, 0x4b, 0xa0, 0x3a, 0x21, 0xdf,
+ 0x58, 0x3b, 0x73, 0xf5, 0x30, 0xbb, 0x29, 0xe0,
+ 0xff, 0x60, 0xf0, 0x05, 0x5e, 0x37, 0xbc, 0x78,
+ 0x95, 0x3f, 0xa8, 0xd4, 0xb4, 0x82, 0x0d, 0xe1,
+ 0x10, 0xe3, 0xa7, 0x61, 0x37, 0x58, 0x28, 0x14,
+ 0x22, 0x57, 0x32, 0x28, 0x80, 0x98, 0x3e, 0x5f,
+ 0x71, 0xcf, 0x34, 0xb8, 0x6d, 0x6b, 0xc0, 0x23,
+ 0xc1, 0x9e, 0x58, 0x4f, 0xd5, 0xa4, 0x14, 0x03,
+ 0x2a, 0xed, 0xc4, 0xa7, 0x77, 0x7c, 0x4f, 0x94,
+ 0x91, 0x1d, 0x47, 0x34, 0x82, 0xe8, 0x9d, 0x32,
+ 0x5c, 0xc7, 0x38, 0xe9, 0x92, 0xcd, 0x35, 0xfd,
+ 0x1c, 0xcc, 0x3c, 0x28, 0x75, 0x6f, 0xff, 0xd5,
+ 0xe8, 0xbf, 0x90, 0x92, 0x34, 0x13, 0x11, 0x89,
+ 0xe0, 0xa2, 0x25, 0xeb, 0x82, 0x63, 0x31, 0x80,
+ 0x50, 0x6c, 0x99, 0xaa, 0x97, 0x0e, 0x59, 0x45,
+ 0x64, 0xb8, 0x77, 0x78, 0x6b, 0x24, 0xac, 0xc0,
+ 0xc9, 0xa9, 0xbc, 0x13, 0xd1, 0x5e, 0x50, 0x9a,
+ 0x91, 0x1a, 0x08, 0xf7, 0xc5, 0x18, 0x9f, 0x87,
+ 0x97, 0x9c, 0x0a, 0x27, 0xf1, 0x66, 0xf8, 0x09,
+ 0x52, 0x09, 0x41, 0x07, 0xc1, 0xa1, 0x91, 0xa4,
+ 0x59, 0x09, 0x75, 0x57, 0x5b, 0x53, 0x79, 0x58,
+ 0xa2, 0x9e, 0x49, 0xa2, 0x5e, 0xf7, 0x28, 0x1c,
+ 0x43, 0xa6, 0xcb, 0x88, 0x46, 0x84, 0xc9, 0x7f,
+ 0x84, 0xdb, 0x45, 0x0c, 0xb3, 0x7f, 0x01, 0x40,
+ 0x71, 0x3e, 0x48, 0x12, 0x1f, 0xbc, 0x1e, 0xdf,
+ 0x41, 0x50, 0xb2, 0x11, 0x67, 0x83, 0x19, 0x04,
+ 0x0e, 0x21, 0xd5, 0xf2, 0x54, 0x99, 0xfb, 0x47,
+ 0xf2, 0x5e, 0x02, 0x4b, 0x61, 0x6d, 0xef, 0x78,
+ 0x29, 0xe4, 0x3a, 0x56, 0x14, 0x20, 0x6f, 0x70,
+ 0x82, 0xea, 0x5d, 0xbc, 0x48, 0x89, 0x34, 0x69,
+ 0xdb, 0x4a, 0x06, 0xa7, 0xd6, 0xc7, 0xb7, 0x06,
+ 0x8e, 0x64, 0x21, 0x3e, 0xa6, 0x32, 0x61, 0x59,
+ 0x03, 0xea, 0xc3, 0x71, 0xf0, 0x26, 0x02, 0xe0,
+ 0x71, 0x95, 0x38, 0x11, 0x32, 0xe6, 0x3b, 0x25,
+ 0x53, 0x14, 0x24, 0x34, 0xe8, 0x8c, 0xa8, 0xef,
+ 0x52, 0xfe, 0x06, 0x2c, 0x20, 0x88, 0x4f, 0xa6,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t aes_cbc_128_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x2f, 0x69, 0x3e, 0x95, 0x87, 0x91, 0x99, 0xd4,
+ 0xd9, 0x5d, 0xf2, 0x52, 0x32, 0x54, 0x2a, 0x80,
+ 0xa0, 0x77, 0x6e, 0x73, 0x15, 0xb4, 0xc9, 0x13,
+ 0x85, 0xed, 0x79, 0x9b, 0x84, 0x0a, 0x7e, 0xdb,
+ 0xee, 0x09, 0x78, 0x11, 0x28, 0xd5, 0x26, 0xec,
+ 0x1d, 0x52, 0xba, 0x33, 0x26, 0xeb, 0x91, 0xc6,
+ 0x4b, 0xf0, 0x38, 0xdf, 0x9f, 0x9d, 0x6c, 0xd8,
+ 0x49, 0x83, 0x88, 0xbe, 0x62, 0x2d, 0x5e, 0x88,
+ 0xc0, 0x35, 0xe4, 0xc3, 0xc9, 0x9f, 0x62, 0x59,
+ 0x16, 0xa7, 0x2e, 0xc0, 0xda, 0x3c, 0x2e, 0x10,
+ 0x53, 0xf0, 0x84, 0x27, 0x38, 0xd0, 0xf4, 0xb5,
+ 0x7c, 0x4a, 0x63, 0x04, 0x51, 0x22, 0xae, 0xf3,
+ 0xe7, 0x97, 0x53, 0xee, 0xe6, 0xaf, 0xc3, 0x49,
+ 0x3a, 0x5a, 0x74, 0x83, 0x18, 0xa3, 0x6b, 0xf3,
+ 0x6a, 0x3b, 0xe2, 0x1b, 0xd4, 0x64, 0x41, 0xdf,
+ 0xd1, 0xd2, 0xdd, 0x22, 0xa8, 0x66, 0xbd, 0x8e,
+ 0xc4, 0x9a, 0x6d, 0x15, 0x38, 0x5b, 0x50, 0x9a,
+ 0x65, 0x48, 0x97, 0xf1, 0x04, 0x85, 0x8b, 0x5c,
+ 0x44, 0x32, 0x15, 0xea, 0x28, 0x5f, 0x98, 0x53,
+ 0xb4, 0x80, 0xd0, 0x2c, 0x59, 0x04, 0x08, 0xaf,
+ 0xa4, 0xb7, 0x49, 0xd1, 0x98, 0x87, 0xb9, 0xb6,
+ 0x3d, 0x89, 0xd1, 0xbe, 0xf4, 0x89, 0xec, 0xf9,
+ 0x2d, 0xc7, 0xc6, 0xe9, 0xe6, 0xfa, 0x1e, 0x67,
+ 0x68, 0xe7, 0xb7, 0x91, 0x55, 0x77, 0xf3, 0x27,
+ 0x38, 0x23, 0xcf, 0x2e, 0x3e, 0x8b, 0xfd, 0xb3,
+ 0x90, 0xd8, 0x6b, 0x1e, 0x93, 0x8f, 0xb6, 0xc1,
+ 0x27, 0xc2, 0xb7, 0x76, 0x10, 0x69, 0xe8, 0x7f,
+ 0xfc, 0x03, 0x59, 0xa4, 0xd3, 0x7f, 0x2f, 0x03,
+ 0x1c, 0x21, 0x6d, 0x2e, 0xae, 0xba, 0xa2, 0x04,
+ 0x67, 0xe9, 0x33, 0xc9, 0x3a, 0x96, 0xb6, 0x7c,
+ 0xf6, 0x21, 0x6b, 0x34, 0x9a, 0x5b, 0xa0, 0x8b,
+ 0x51, 0xf0, 0xd4, 0x3a, 0xa3, 0xcb, 0x22, 0xfb,
+ 0x8a, 0x56, 0xab, 0x9a, 0x15, 0x75, 0x07, 0x87,
+ 0x32, 0xa7, 0x15, 0xc7, 0xd9, 0x40, 0x95, 0xe5,
+ 0xfb, 0xb0, 0xc5, 0xb1, 0x60, 0xf8, 0xcc, 0x8b,
+ 0x30, 0x20, 0xd9, 0x84, 0x6f, 0xa2, 0xcb, 0x72,
+ 0xf5, 0xa5, 0x2c, 0xa3, 0xc6, 0x1c, 0xd2, 0x74,
+ 0x01, 0x74, 0xdd, 0xb4, 0x68, 0x3b, 0x3b, 0x3e,
+ 0x4f, 0xb5, 0x67, 0x9a, 0x9c, 0x37, 0x3d, 0xbf,
+ 0xd3, 0xab, 0xd7, 0x70, 0x03, 0x28, 0x5c, 0x3b,
+ 0xb7, 0x08, 0x38, 0x3d, 0x69, 0xa9, 0xcb, 0x63,
+ 0x04, 0x95, 0x8a, 0x16, 0x4c, 0xff, 0x9f, 0x0c,
+ 0xe2, 0x51, 0x95, 0x44, 0x52, 0x3b, 0x59, 0x9d,
+ 0x0b, 0x77, 0xa0, 0x39, 0x40, 0xea, 0x33, 0x25,
+ 0xc8, 0xc5, 0x90, 0x47, 0x23, 0xe3, 0x03, 0x8c,
+ 0x6a, 0xe0, 0x4f, 0x76, 0xe7, 0x72, 0x82, 0xcc,
+ 0xb2, 0xfd, 0xfb, 0x82, 0x1a, 0x28, 0x30, 0x89,
+ 0x0e, 0x25, 0xa7, 0x63, 0x85, 0x2e, 0x9b, 0xa6,
+ 0x0b, 0xa0, 0xb5, 0x34, 0xa2, 0x2e, 0x7f, 0xd4,
+ 0xe5, 0xd6, 0x95, 0xe8, 0x09, 0x3d, 0x4d, 0xdf,
+ 0xd9, 0xc0, 0x63, 0x17, 0xa5, 0x9c, 0xf6, 0xa3,
+ 0x59, 0x17, 0xc0, 0xf8, 0xa2, 0x11, 0x14, 0x88,
+ 0xf0, 0x1e, 0x4a, 0x4b, 0x13, 0xf6, 0xd6, 0x09,
+ 0xac, 0xf8, 0x39, 0x5d, 0x4c, 0x68, 0x69, 0x99,
+ 0x08, 0xd4, 0xf5, 0x39, 0x6d, 0x78, 0xde, 0xb5,
+ 0x6f, 0x34, 0xc4, 0x28, 0x73, 0x6c, 0x29, 0xa1,
+ 0xef, 0xfe, 0xed, 0x56, 0xb2, 0x70, 0x7b, 0xd5,
+ 0x5b, 0xd1, 0x09, 0x6a, 0x9a, 0x59, 0xe9, 0x79,
+ 0xe9, 0xee, 0xa4, 0x03, 0xc1, 0x67, 0xce, 0x62,
+ 0xf6, 0x4f, 0x04, 0xa5, 0x04, 0x71, 0x13, 0xeb,
+ 0x3d, 0x0a, 0x65, 0x2f, 0x57, 0xb0, 0xc0, 0xa4,
+ 0xf2, 0x8d, 0x78, 0x90, 0xeb, 0xc9, 0x5e, 0x8b,
+ 0xd8, 0xfb, 0xbc, 0x74, 0x1a, 0x70, 0x94, 0x2c,
+ 0xeb, 0xf2, 0x5e, 0x6d, 0xbb, 0x96, 0x7a, 0x2c,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t aes_cbc_128_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0xbc, 0x49, 0x35, 0x2c, 0xe3, 0x10, 0x12, 0x65,
+ 0x7a, 0xf4, 0xde, 0xd3, 0xf8, 0xe1, 0x49, 0x97,
+ 0x0a, 0x07, 0x93, 0x6c, 0xf8, 0x0e, 0xb7, 0xdf,
+ 0x53, 0xba, 0x1e, 0x8e, 0x14, 0xbd, 0xf6, 0x81,
+ 0xd6, 0xf6, 0x3d, 0xb2, 0xe7, 0x6a, 0x9d, 0x50,
+ 0x68, 0xc2, 0x75, 0x8e, 0xfb, 0x44, 0xfa, 0xc8,
+ 0x9f, 0x30, 0x15, 0xd5, 0xbe, 0xce, 0x04, 0xc1,
+ 0x99, 0xde, 0x3d, 0x2b, 0xc1, 0xc4, 0x8a, 0xb1,
+ 0xc5, 0x54, 0x47, 0x52, 0xf6, 0x38, 0x11, 0xcb,
+ 0x11, 0xf6, 0xb7, 0xbd, 0x4d, 0x24, 0xa1, 0xac,
+ 0x04, 0x17, 0x7e, 0x3c, 0xbc, 0x3b, 0xa0, 0x8d,
+ 0xfb, 0x22, 0x82, 0x56, 0xa2, 0xbe, 0xfe, 0xe7,
+ 0xde, 0xa4, 0xe9, 0xeb, 0xa0, 0x7a, 0x45, 0xc9,
+ 0x18, 0x0b, 0x14, 0xd5, 0xff, 0x4c, 0xe5, 0x86,
+ 0xac, 0xac, 0xaa, 0xb4, 0x70, 0x0c, 0x4a, 0x20,
+ 0xb6, 0xd8, 0x2d, 0xac, 0x09, 0xd8, 0xf6, 0x24,
+ 0xdf, 0xa5, 0x62, 0xef, 0x8c, 0x01, 0xa8, 0x1d,
+ 0x8f, 0x52, 0xee, 0xa6, 0x2f, 0x9b, 0x81, 0x18,
+ 0x0e, 0x6b, 0xa3, 0xe5, 0x67, 0xb3, 0xd5, 0x30,
+ 0xb1, 0x9f, 0x87, 0x05, 0xd0, 0x52, 0x62, 0x6f,
+ 0xb9, 0x3b, 0xbc, 0x0c, 0x0c, 0xcb, 0x73, 0x55,
+ 0x23, 0x83, 0x14, 0x78, 0x05, 0x5b, 0x05, 0xf5,
+ 0x3e, 0xa7, 0xf3, 0x4d, 0x0d, 0x34, 0x6f, 0xe0,
+ 0x58, 0x52, 0x0a, 0x82, 0xa7, 0x49, 0x8a, 0xd2,
+ 0x23, 0xb1, 0xc5, 0x0d, 0xa7, 0x0f, 0x56, 0xfc,
+ 0x7e, 0xf6, 0x19, 0x4b, 0xe7, 0x63, 0x72, 0x4c,
+ 0xb8, 0x5c, 0x80, 0x54, 0xf5, 0x1f, 0xb0, 0x29,
+ 0x40, 0x88, 0x75, 0x54, 0x42, 0xca, 0x2c, 0xc3,
+ 0xcf, 0xd7, 0xc1, 0xb2, 0xd6, 0x90, 0x70, 0x5e,
+ 0xf5, 0x58, 0x70, 0xe0, 0xff, 0x5a, 0xf5, 0xee,
+ 0x32, 0x4f, 0x61, 0x1c, 0xf6, 0xbf, 0xd5, 0x7c,
+ 0x73, 0xb9, 0x1d, 0x30, 0xc2, 0xfb, 0x2f, 0x9a,
+ 0xf7, 0x57, 0x2e, 0x87, 0x7d, 0xcb, 0xdd, 0x7e,
+ 0xda, 0xec, 0x47, 0x1a, 0x0e, 0x70, 0x2d, 0x6e,
+ 0x18, 0x2b, 0x89, 0xc1, 0x85, 0x58, 0x6d, 0x4b,
+ 0x45, 0x11, 0xcf, 0x82, 0x9f, 0x31, 0xd0, 0x42,
+ 0x11, 0xca, 0xa8, 0x52, 0x66, 0xf7, 0xf1, 0x1d,
+ 0x86, 0xe3, 0xb4, 0x41, 0xcb, 0x92, 0xb1, 0x9f,
+ 0x8d, 0x8e, 0x08, 0xe9, 0xc4, 0x66, 0xce, 0x9d,
+ 0xae, 0x91, 0xaf, 0xe6, 0xa6, 0x2e, 0x06, 0x3a,
+ 0xf5, 0x27, 0x48, 0xe4, 0x31, 0x0f, 0xc5, 0xdf,
+ 0x29, 0x56, 0xed, 0x62, 0xf3, 0xef, 0xca, 0xa6,
+ 0x58, 0xd1, 0x84, 0x99, 0xd3, 0x34, 0x67, 0x92,
+ 0x6a, 0xb2, 0xd1, 0xd1, 0x50, 0x1f, 0xe9, 0xd8,
+ 0x3c, 0xbe, 0x12, 0x97, 0x7c, 0x4f, 0xc0, 0xbe,
+ 0x91, 0x32, 0x15, 0xd5, 0xf2, 0x5e, 0xe6, 0x13,
+ 0x86, 0xfa, 0xc6, 0xde, 0xd8, 0xe1, 0x70, 0xb4,
+ 0xf7, 0x5b, 0x9f, 0x79, 0x55, 0x22, 0x7a, 0xe1,
+ 0x54, 0x40, 0x39, 0x11, 0xe1, 0x78, 0x01, 0x01,
+ 0xc0, 0x44, 0xeb, 0x92, 0xb9, 0x01, 0xdd, 0x56,
+ 0xb9, 0x7e, 0xa0, 0x50, 0x41, 0x58, 0xb2, 0x13,
+ 0x12, 0x44, 0xd2, 0x39, 0xf2, 0x76, 0x3c, 0x53,
+ 0x36, 0xfe, 0x17, 0x74, 0x91, 0x8d, 0xbe, 0xc5,
+ 0x40, 0xf7, 0xa2, 0xe9, 0x65, 0xd9, 0xdf, 0x80,
+ 0x7b, 0xd9, 0xc3, 0x1f, 0xb4, 0xfc, 0x9f, 0x8d,
+ 0x7a, 0x4e, 0x1e, 0x32, 0x6d, 0xb1, 0x82, 0x1e,
+ 0x0c, 0xb6, 0x0b, 0xe6, 0x15, 0x82, 0x5c, 0xcc,
+ 0xc8, 0x4a, 0x73, 0x56, 0x9d, 0x11, 0xfa, 0xcd,
+ 0x21, 0x95, 0x23, 0x71, 0xe8, 0xfe, 0x06, 0x43,
+ 0xf6, 0x17, 0x51, 0x28, 0x0d, 0xfb, 0x0a, 0x49,
+ 0x1b, 0x35, 0x1e, 0x4a, 0x38, 0x08, 0x6b, 0xcd,
+ 0x67, 0x21, 0x94, 0x09, 0x28, 0xca, 0x0a, 0x18,
+ 0xdf, 0x6c, 0x86, 0x47, 0x10, 0x29, 0x81, 0x9a,
+ 0x73, 0xba, 0x78, 0xbd, 0xc0, 0x61, 0xee, 0x23,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t aes_cbc_128_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0x29, 0x9f, 0xb1, 0x0f, 0x7d, 0xb4, 0xd9, 0xbb,
+ 0xf9, 0x06, 0x60, 0xdc, 0xb9, 0xeb, 0x73, 0x6e,
+ 0xfe, 0xdb, 0x99, 0x29, 0xe8, 0x42, 0x46, 0xe7,
+ 0x49, 0xcf, 0x90, 0x2d, 0x08, 0xd7, 0xd5, 0xbf,
+ 0x0f, 0x4f, 0x66, 0xce, 0xcd, 0xb1, 0x8a, 0xc7,
+ 0x47, 0xc9, 0x8e, 0xe3, 0x9f, 0x80, 0x79, 0xc6,
+ 0xa8, 0xe5, 0x20, 0x66, 0x58, 0xde, 0xab, 0x87,
+ 0x5e, 0x7e, 0xcd, 0x55, 0x81, 0x09, 0x40, 0xd9,
+ 0x8b, 0x7e, 0xd3, 0xf9, 0x16, 0x55, 0x72, 0x7d,
+ 0xe8, 0x36, 0x76, 0x06, 0x77, 0x47, 0xa5, 0xdc,
+ 0x80, 0x33, 0x7d, 0x88, 0x5f, 0x56, 0x48, 0x0f,
+ 0x66, 0xb5, 0x91, 0x9d, 0xf8, 0xdb, 0x83, 0x0d,
+ 0xd4, 0xc6, 0x13, 0xfc, 0xd4, 0xe5, 0x34, 0x81,
+ 0x70, 0x4d, 0x96, 0x82, 0x5d, 0xb2, 0x36, 0x37,
+ 0xdf, 0xd2, 0x5e, 0x31, 0xf0, 0x9d, 0x6d, 0xb7,
+ 0xf9, 0x2d, 0xcb, 0x77, 0xb8, 0x59, 0xa0, 0xbb,
+ 0x4f, 0x8d, 0xa0, 0xd1, 0x49, 0x17, 0x93, 0x3c,
+ 0xf0, 0x4e, 0x72, 0xdd, 0x99, 0x9a, 0x87, 0xf1,
+ 0x01, 0x89, 0xdf, 0xef, 0xed, 0x04, 0x86, 0x3d,
+ 0x9b, 0xab, 0x6c, 0xa7, 0xef, 0x1b, 0xbb, 0x24,
+ 0xbc, 0x65, 0x01, 0x06, 0x12, 0x3f, 0x7e, 0x9f,
+ 0x83, 0xf3, 0xd4, 0x43, 0x18, 0x03, 0xa3, 0x07,
+ 0xbc, 0x85, 0xe8, 0xdb, 0x6c, 0x8f, 0xaf, 0x70,
+ 0x71, 0x5d, 0xbc, 0x6d, 0x14, 0x05, 0xdf, 0xce,
+ 0x9f, 0xe2, 0xa3, 0x51, 0x66, 0x92, 0x52, 0x19,
+ 0x98, 0xbd, 0xb2, 0x68, 0x79, 0xf4, 0x5d, 0x71,
+ 0xcb, 0xa0, 0x1b, 0x77, 0x34, 0x46, 0x69, 0x3c,
+ 0xa4, 0x0f, 0x72, 0xf5, 0x73, 0xf6, 0xa0, 0xe9,
+ 0x72, 0xef, 0xa1, 0xcc, 0x43, 0xfc, 0xb7, 0xf3,
+ 0x59, 0xeb, 0x40, 0x61, 0x02, 0x26, 0x9b, 0x71,
+ 0x57, 0x17, 0x36, 0xac, 0xc8, 0xd5, 0x9d, 0xcb,
+ 0x4d, 0x4f, 0xf7, 0xc1, 0x58, 0xce, 0xbf, 0x73,
+ 0xe7, 0xd0, 0x58, 0x0d, 0x08, 0x01, 0x8f, 0x68,
+ 0x1b, 0x3f, 0x3a, 0x7b, 0xdb, 0x9e, 0xa7, 0x33,
+ 0x59, 0x91, 0xa8, 0xe3, 0x58, 0x22, 0x3f, 0x97,
+ 0xe1, 0xdb, 0xd6, 0x99, 0x0e, 0xdd, 0x76, 0xcd,
+ 0x4d, 0x02, 0x28, 0x43, 0x8a, 0xdd, 0x10, 0xad,
+ 0x55, 0xe0, 0x62, 0xf7, 0x44, 0xbc, 0x3f, 0x99,
+ 0x3c, 0x09, 0x25, 0xfb, 0xfd, 0x1e, 0x4c, 0x45,
+ 0x0e, 0x6e, 0x75, 0x15, 0x48, 0x19, 0x08, 0xc3,
+ 0x2b, 0x81, 0x60, 0x5f, 0x19, 0x09, 0x74, 0x0a,
+ 0xbd, 0x0d, 0x8d, 0x94, 0x55, 0x04, 0x2b, 0x8e,
+ 0x0d, 0x10, 0x60, 0x64, 0x0d, 0x7f, 0x63, 0x2e,
+ 0x89, 0x0b, 0xfc, 0x1c, 0xbc, 0xf3, 0x66, 0xc5,
+ 0x80, 0x93, 0x3a, 0x74, 0x15, 0x11, 0xd5, 0xba,
+ 0xbc, 0x06, 0x3f, 0x85, 0xcc, 0x6c, 0xd3, 0xf2,
+ 0x74, 0xc6, 0x10, 0x15, 0x0a, 0x02, 0x66, 0xa4,
+ 0xa8, 0x93, 0x0b, 0x5c, 0xe7, 0x13, 0x96, 0x90,
+ 0xdd, 0xe3, 0x25, 0x22, 0x46, 0x7b, 0x49, 0xde,
+ 0x72, 0x55, 0xf3, 0x30, 0x62, 0x5f, 0x7a, 0x2a,
+ 0x37, 0x88, 0xea, 0x57, 0x99, 0x64, 0x50, 0x2d,
+ 0xd3, 0x6a, 0x09, 0x4b, 0xd6, 0x61, 0xf2, 0x22,
+ 0x53, 0x36, 0xf7, 0x42, 0x21, 0xde, 0xda, 0xcb,
+ 0x8b, 0x6f, 0xf3, 0x4e, 0x2c, 0x16, 0xfb, 0xfc,
+ 0x13, 0xa7, 0xd1, 0xd8, 0xfd, 0x16, 0x39, 0x20,
+ 0xe0, 0xb2, 0xb4, 0xd5, 0x40, 0x93, 0x30, 0xf3,
+ 0xab, 0x88, 0xe3, 0xfb, 0xbe, 0xb8, 0x02, 0x3a,
+ 0x78, 0x2d, 0x56, 0x4b, 0x92, 0x5b, 0x0a, 0x8d,
+ 0x18, 0xa4, 0x5b, 0x11, 0x60, 0x0b, 0x45, 0xad,
+ 0x0b, 0x64, 0x96, 0x7d, 0x84, 0xf2, 0x20, 0xa8,
+ 0x95, 0x78, 0xb3, 0xb5, 0x98, 0x1f, 0xa7, 0x3e,
+ 0x30, 0x77, 0x43, 0xd2, 0x8c, 0x20, 0xc5, 0x5e,
+ 0x76, 0xcd, 0x2c, 0x7c, 0xfa, 0x34, 0x36, 0xda,
+ 0x39, 0x00, 0x2e, 0x69, 0x4a, 0xb3, 0x0f, 0x6f,
+};
+
+const struct testvec aes_cbc_128_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t aes_cbc_128_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0xa6, 0x64, 0xef, 0x0f, 0xc4, 0x45, 0xcc, 0x5e,
+ 0xf8, 0x27, 0x42, 0x5e, 0xbd, 0x93, 0x99, 0xcd,
+ 0x79, 0xa8, 0x7d, 0x72, 0xc4, 0x02, 0x99, 0xa6,
+ 0xe4, 0x69, 0x57, 0x82, 0xdf, 0x32, 0x4e, 0x67,
+ 0x2a, 0xd9, 0x58, 0x8c, 0x9f, 0xfc, 0x4d, 0xcf,
+ 0x7b, 0xa4, 0xa1, 0xfa, 0xd9, 0x4d, 0xb5, 0x67,
+ 0x06, 0x4a, 0x9e, 0x6d, 0xe8, 0xaa, 0xdd, 0xae,
+ 0x8c, 0xda, 0xcf, 0x26, 0xd5, 0x94, 0x8d, 0x12,
+ 0xf8, 0xdd, 0x21, 0x4c, 0xcb, 0xc8, 0x5d, 0xd1,
+ 0x6a, 0x89, 0x37, 0xd0, 0x32, 0xe4, 0x87, 0xbc,
+ 0x5d, 0xef, 0xca, 0x38, 0xd5, 0x08, 0xfb, 0xcf,
+ 0xb7, 0x8d, 0x65, 0x52, 0x13, 0xea, 0x2d, 0x30,
+ 0xd3, 0x9a, 0xe8, 0x9c, 0x76, 0x25, 0x44, 0x2a,
+ 0xf1, 0xe1, 0xbb, 0xcd, 0xbc, 0x9c, 0xf5, 0xa3,
+ 0xfb, 0x23, 0x53, 0x95, 0x61, 0xea, 0x46, 0x97,
+ 0xf6, 0xbf, 0xdf, 0xf9, 0xb7, 0x94, 0x73, 0xa8,
+ 0xc1, 0xaa, 0x64, 0xfb, 0x66, 0x26, 0x0f, 0x4c,
+ 0xee, 0x3c, 0xb6, 0x3f, 0x13, 0x88, 0xaa, 0x7d,
+ 0x91, 0x01, 0x1a, 0x95, 0x3b, 0xb5, 0x7e, 0x1f,
+ 0xc1, 0x84, 0xa6, 0x83, 0x99, 0xe6, 0xaf, 0x21,
+ 0x33, 0xff, 0x2e, 0xc9, 0xfe, 0xf2, 0xa1, 0x37,
+ 0xed, 0x91, 0x73, 0x70, 0x4f, 0xb4, 0x69, 0x69,
+ 0x98, 0x1d, 0x6d, 0xd4, 0xa4, 0xac, 0x73, 0x61,
+ 0x04, 0xf5, 0x13, 0x50, 0x2a, 0xa9, 0xf7, 0x61,
+ 0x78, 0xf5, 0x87, 0x26, 0xc5, 0x4a, 0x30, 0xbb,
+ 0x94, 0x55, 0x51, 0xb4, 0xa0, 0x83, 0x30, 0xe6,
+ 0xf7, 0xc7, 0x89, 0x61, 0x73, 0xd9, 0xbd, 0xe1,
+ 0x4e, 0x14, 0x8a, 0x02, 0x3d, 0x7a, 0x58, 0x92,
+ 0x41, 0xe7, 0x90, 0x8d, 0xd7, 0x67, 0x62, 0xf8,
+ 0x99, 0xa7, 0x9d, 0x55, 0xec, 0x18, 0x6b, 0x42,
+ 0xaf, 0x27, 0x97, 0xe5, 0x51, 0xa9, 0x10, 0x27,
+ 0x5e, 0x3f, 0xac, 0xda, 0xd3, 0xb5, 0x2b, 0x43,
+ 0x2e, 0x10, 0xdc, 0xd9, 0xe2, 0x2f, 0x4f, 0xfe,
+ 0xf3, 0x0d, 0x06, 0x76, 0xf9, 0x25, 0xcd, 0x26,
+ 0xef, 0x8e, 0x9b, 0xc2, 0xb3, 0x20, 0x2b, 0x00,
+ 0xb6, 0xe6, 0x2e, 0xf7, 0x17, 0xc7, 0xa8, 0x3c,
+ 0x00, 0xfc, 0x78, 0x8d, 0x10, 0x38, 0xd1, 0x11,
+ 0x94, 0xed, 0xb4, 0x22, 0x13, 0xcb, 0x52, 0x0f,
+ 0x0f, 0xd7, 0x33, 0x3b, 0xbd, 0x01, 0x04, 0x56,
+ 0xfa, 0x2c, 0xaa, 0xaf, 0x2b, 0x93, 0xde, 0xf4,
+ 0x31, 0x36, 0x13, 0x71, 0xef, 0x7a, 0xf0, 0xae,
+ 0xbd, 0xa7, 0x4a, 0x57, 0xa5, 0xc5, 0xf3, 0x5c,
+ 0x08, 0x2b, 0xe7, 0x12, 0x42, 0x4b, 0x4b, 0x12,
+ 0x49, 0x3a, 0x2e, 0x26, 0x67, 0x67, 0xa1, 0xd5,
+ 0x59, 0xa6, 0x18, 0x96, 0x22, 0x2b, 0xeb, 0x56,
+ 0x1e, 0x0a, 0x08, 0x75, 0xb4, 0x2b, 0x5c, 0x0a,
+ 0x4e, 0x9d, 0x17, 0xd4, 0x0c, 0xfe, 0x46, 0x60,
+ 0x6d, 0xfa, 0xc0, 0xb9, 0x5e, 0x1f, 0x88, 0x0e,
+ 0x08, 0x2c, 0xf3, 0xb4, 0x3a, 0x15, 0xc5, 0xf9,
+ 0x5b, 0x85, 0x92, 0x94, 0xa8, 0x8f, 0x2c, 0x3a,
+ 0x7e, 0x22, 0x86, 0x88, 0x51, 0x03, 0xee, 0xf9,
+ 0x2e, 0x83, 0xce, 0x39, 0x0c, 0x76, 0x64, 0xe5,
+ 0x5a, 0x88, 0xef, 0xc5, 0x06, 0xb2, 0xe4, 0x13,
+ 0x82, 0xc9, 0xee, 0xba, 0x6d, 0x56, 0xa8, 0x87,
+ 0x51, 0x69, 0x3b, 0x86, 0x29, 0x8e, 0xe8, 0xb4,
+ 0x44, 0x42, 0x07, 0x5b, 0xff, 0x0e, 0x1e, 0x9f,
+ 0x42, 0xb1, 0xc8, 0x5f, 0xab, 0x3b, 0xc7, 0xba,
+ 0x75, 0x20, 0xe6, 0x9f, 0x93, 0xb5, 0xcf, 0x8f,
+ 0x7c, 0x1c, 0xf3, 0xdb, 0x6a, 0xf4, 0xde, 0x00,
+ 0xe9, 0xaf, 0xd5, 0xf4, 0x36, 0x98, 0x14, 0x2d,
+ 0x53, 0x20, 0x74, 0xab, 0x0c, 0xf6, 0xcd, 0x15,
+ 0x32, 0xa6, 0x01, 0x8d, 0x24, 0x1b, 0x4b, 0x1f,
+ 0xa3, 0xfc, 0x38, 0x82, 0x3a, 0xa1, 0xb5, 0x52,
+ 0x53, 0xc7, 0x2b, 0x30, 0x7c, 0x65, 0xb9, 0x7d,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t aes_cbc_128_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x63, 0x45, 0x16, 0x0c, 0xe4, 0x4f, 0x51, 0xde,
+ 0x74, 0xf8, 0x7b, 0xf5, 0x05, 0x17, 0x13, 0x1e,
+ 0xa5, 0x3d, 0x84, 0xfa, 0x35, 0x5a, 0x2d, 0x3c,
+ 0xb7, 0x61, 0x68, 0xff, 0xcd, 0x33, 0x1f, 0x0b,
+ 0x53, 0x79, 0xf2, 0x2f, 0xbc, 0x8d, 0xac, 0xb9,
+ 0xf9, 0xb7, 0x9c, 0x0a, 0x9d, 0xa1, 0x4d, 0x78,
+ 0x9e, 0x4e, 0xfa, 0xe8, 0xc8, 0x46, 0x4b, 0x99,
+ 0x91, 0x7e, 0x33, 0x6e, 0x18, 0x24, 0x01, 0xc3,
+ 0x9f, 0x8c, 0x43, 0xb5, 0x15, 0x7e, 0xdd, 0xf9,
+ 0x1b, 0xb0, 0xf2, 0xc3, 0x97, 0x1f, 0x7c, 0x3f,
+ 0x43, 0x4c, 0x9f, 0x93, 0x29, 0x83, 0x8f, 0xad,
+ 0xd1, 0x5e, 0x92, 0x1a, 0x17, 0xd1, 0xa0, 0x05,
+ 0x6e, 0x62, 0x59, 0x80, 0x50, 0x6d, 0xe3, 0x28,
+ 0x9a, 0x43, 0xdc, 0x81, 0x4f, 0x49, 0xc4, 0x98,
+ 0xcd, 0x6d, 0x28, 0xb4, 0x86, 0xe4, 0x83, 0x45,
+ 0xd4, 0x43, 0x52, 0x8a, 0xd6, 0xc8, 0x1c, 0x90,
+ 0xeb, 0xf0, 0xe7, 0x76, 0xb4, 0x43, 0x9b, 0x56,
+ 0x48, 0x73, 0xdd, 0x01, 0x50, 0x1c, 0x61, 0xfc,
+ 0x22, 0xac, 0xf4, 0x27, 0x94, 0x02, 0x54, 0xd3,
+ 0x7d, 0x25, 0xf6, 0x14, 0x29, 0xbb, 0x2b, 0x22,
+ 0xc8, 0xe8, 0x7f, 0xa1, 0xfe, 0x19, 0x79, 0x97,
+ 0xb6, 0xa6, 0xba, 0x5b, 0x89, 0xdf, 0x73, 0x6d,
+ 0x79, 0x38, 0x5b, 0xf8, 0x89, 0xa2, 0x95, 0x1d,
+ 0xda, 0x38, 0x17, 0x4b, 0x01, 0xf1, 0x7d, 0x0a,
+ 0xa2, 0x8f, 0x5a, 0x02, 0x51, 0xb0, 0x88, 0x10,
+ 0x16, 0xc8, 0x82, 0xb9, 0x06, 0x9f, 0x01, 0x94,
+ 0xf9, 0xe0, 0x2e, 0x86, 0x8a, 0xb1, 0x7f, 0x74,
+ 0x22, 0xce, 0xee, 0xa6, 0x66, 0xee, 0xe2, 0x1d,
+ 0x98, 0x1b, 0x46, 0x22, 0x7e, 0x89, 0x0c, 0xc4,
+ 0x91, 0xfb, 0xe4, 0xd7, 0x36, 0x2a, 0xa9, 0x53,
+ 0xe9, 0xaf, 0x6c, 0xc1, 0xdd, 0x69, 0x4f, 0xde,
+ 0xd8, 0xd0, 0x7f, 0xc9, 0xf4, 0x8f, 0x84, 0xfe,
+ 0x0f, 0x16, 0x36, 0x90, 0x09, 0xd6, 0x0f, 0xbc,
+ 0x85, 0xad, 0xe9, 0xc3, 0xa1, 0x8d, 0x14, 0x5c,
+ 0x40, 0x7d, 0x0f, 0x22, 0xfe, 0x5e, 0xaf, 0xd9,
+ 0x0f, 0xe5, 0x2e, 0xa6, 0x04, 0xda, 0x35, 0x90,
+ 0x7f, 0x9a, 0x1f, 0xb8, 0x34, 0x1c, 0xd0, 0xf5,
+ 0x5c, 0x29, 0xce, 0xbe, 0x57, 0xd8, 0x55, 0x15,
+ 0x2d, 0x4c, 0x3c, 0x16, 0x93, 0x96, 0x3c, 0xf3,
+ 0xa8, 0x2f, 0x09, 0xb3, 0x8b, 0xe3, 0xce, 0xf7,
+ 0x3e, 0x8e, 0xcf, 0x47, 0xe2, 0xf2, 0xad, 0x06,
+ 0x00, 0x9a, 0x3a, 0x55, 0xf5, 0x9e, 0xbf, 0x5a,
+ 0x2e, 0x5a, 0x6c, 0x2b, 0x8f, 0x33, 0x71, 0x2c,
+ 0x56, 0x43, 0xd1, 0x8b, 0xd2, 0x98, 0x14, 0xb7,
+ 0x5a, 0xdc, 0x8b, 0xbc, 0xfe, 0x50, 0x99, 0x84,
+ 0x48, 0x5f, 0xcd, 0xed, 0xce, 0x61, 0x6f, 0xa6,
+ 0x83, 0xa3, 0x34, 0xbe, 0xf2, 0x66, 0xf3, 0x09,
+ 0xf3, 0xd3, 0x97, 0xd4, 0xee, 0x66, 0x9a, 0x81,
+ 0x62, 0x84, 0x85, 0x7f, 0x79, 0x18, 0xd2, 0x82,
+ 0xd6, 0x96, 0x09, 0x61, 0x1e, 0x53, 0x97, 0x80,
+ 0x0a, 0x81, 0x4b, 0x93, 0xf0, 0x03, 0x65, 0x18,
+ 0x93, 0x5b, 0x60, 0x2f, 0xb5, 0xfe, 0x82, 0xaf,
+ 0x85, 0xb7, 0x79, 0x7c, 0xee, 0xad, 0xea, 0xfa,
+ 0x9b, 0xad, 0xca, 0x38, 0x21, 0x3d, 0x46, 0x8a,
+ 0x5b, 0xa7, 0x55, 0x3d, 0x88, 0x4a, 0x52, 0xdb,
+ 0xf2, 0x07, 0xed, 0xd6, 0x3c, 0x9f, 0x1b, 0x42,
+ 0xb4, 0x14, 0x12, 0xb7, 0x00, 0xfc, 0x6a, 0x79,
+ 0x61, 0x0b, 0x43, 0xaa, 0x44, 0x48, 0x30, 0x15,
+ 0x48, 0x76, 0x27, 0x32, 0x7a, 0x2e, 0x25, 0x6a,
+ 0x8c, 0x8c, 0x64, 0x67, 0x86, 0x54, 0x4a, 0x93,
+ 0x14, 0xfe, 0x81, 0xf5, 0xcf, 0x98, 0x92, 0xd3,
+ 0x92, 0xf5, 0x6a, 0x74, 0x28, 0x10, 0x6b, 0xd4,
+ 0x1d, 0x64, 0x7e, 0x05, 0x32, 0xba, 0xf7, 0x4c,
+ 0xe9, 0xa8, 0xa9, 0xc5, 0x35, 0x34, 0x26, 0x41,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t aes_cbc_128_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x64, 0x7b, 0x62, 0x7a, 0xa6, 0xa9, 0xb3, 0x47,
+ 0xbc, 0x03, 0x14, 0x3d, 0x9b, 0x56, 0xfc, 0x13,
+ 0x08, 0x32, 0x81, 0xe3, 0x57, 0x3c, 0x0d, 0xbb,
+ 0x85, 0x44, 0x47, 0x12, 0xc4, 0x80, 0x35, 0x37,
+ 0xe1, 0xb4, 0x3f, 0x35, 0x98, 0x7c, 0xb0, 0x3b,
+ 0x85, 0xab, 0x3d, 0x0b, 0xd3, 0x6f, 0xf9, 0x92,
+ 0x00, 0x6b, 0x18, 0xe7, 0x31, 0x8b, 0x77, 0x4c,
+ 0xd0, 0x7b, 0x1d, 0xfc, 0x95, 0xe6, 0x02, 0x01,
+ 0x9c, 0x17, 0x4d, 0x9b, 0x3a, 0x1d, 0x12, 0x23,
+ 0xd4, 0x24, 0xf8, 0x47, 0x5e, 0x2d, 0xfd, 0xc8,
+ 0x74, 0x28, 0xb4, 0x3a, 0x99, 0x6b, 0xcc, 0xba,
+ 0xe5, 0x51, 0x0b, 0xab, 0x4d, 0x63, 0xfc, 0x6d,
+ 0x2d, 0xd9, 0x2b, 0x4f, 0xa4, 0x26, 0xc7, 0x8d,
+ 0x9d, 0x12, 0x7f, 0xc7, 0x6b, 0x15, 0x8b, 0x4a,
+ 0x41, 0xf8, 0x50, 0x32, 0x76, 0x10, 0xca, 0x8e,
+ 0xfe, 0x08, 0x7d, 0x9a, 0xb5, 0x1a, 0xdb, 0x10,
+ 0xb3, 0x6a, 0x5f, 0xd9, 0x0a, 0x5f, 0x31, 0x19,
+ 0x3e, 0xa9, 0xa1, 0x72, 0x1f, 0x6c, 0x97, 0x20,
+ 0xd4, 0xab, 0xb8, 0xad, 0xf7, 0x70, 0x12, 0xd0,
+ 0x8f, 0x70, 0x24, 0x58, 0x2e, 0x99, 0xcd, 0xd4,
+ 0xf4, 0xcd, 0xef, 0x93, 0xfb, 0x4f, 0x9a, 0x40,
+ 0x46, 0x92, 0x6b, 0xd0, 0x25, 0x24, 0xec, 0x4d,
+ 0x4c, 0x42, 0x50, 0x61, 0xb6, 0x21, 0xa6, 0x2e,
+ 0xc1, 0x42, 0x9e, 0x86, 0x9f, 0x57, 0x2a, 0x2c,
+ 0x82, 0xbd, 0xc2, 0x25, 0xb6, 0x9f, 0x2d, 0x9f,
+ 0xba, 0xe0, 0xa6, 0x06, 0x04, 0x08, 0xc5, 0x1d,
+ 0x8c, 0x0f, 0xbf, 0x21, 0x85, 0x6d, 0x61, 0x4d,
+ 0x93, 0xc0, 0xa2, 0x8b, 0xca, 0x07, 0xd0, 0x88,
+ 0x74, 0xf9, 0x42, 0x92, 0xd5, 0x0d, 0x0c, 0x34,
+ 0xa6, 0xa5, 0x86, 0x51, 0xcf, 0x40, 0x36, 0x66,
+ 0x35, 0x9f, 0xa8, 0x95, 0x0b, 0xfb, 0x0c, 0xe8,
+ 0xdc, 0x12, 0x78, 0x4c, 0x52, 0xf4, 0xfc, 0x4a,
+ 0x77, 0xdd, 0x77, 0x34, 0xf7, 0x35, 0x94, 0x7a,
+ 0x31, 0x16, 0x86, 0x44, 0x50, 0x30, 0x1c, 0x6d,
+ 0x9f, 0x66, 0x49, 0xb5, 0xe6, 0x71, 0x00, 0x83,
+ 0xd1, 0xa0, 0x01, 0xff, 0xc3, 0x27, 0xaa, 0x9a,
+ 0xdb, 0xad, 0x24, 0xdb, 0xbd, 0xde, 0xfd, 0xa6,
+ 0xaa, 0x87, 0x98, 0x98, 0xde, 0x90, 0xd5, 0x40,
+ 0x20, 0x8f, 0xe9, 0xdd, 0xa8, 0xec, 0xd3, 0x18,
+ 0x20, 0x85, 0x5e, 0xd5, 0xe7, 0x50, 0x58, 0x15,
+ 0x69, 0x03, 0xa5, 0xe8, 0xa9, 0x7a, 0x0f, 0xd1,
+ 0x7d, 0x22, 0x8a, 0xe0, 0xc6, 0x17, 0x33, 0x00,
+ 0x57, 0xcb, 0xf6, 0x8d, 0xf0, 0xc1, 0x7b, 0xb5,
+ 0x96, 0x0f, 0x08, 0x84, 0x5b, 0x7e, 0xa6, 0x1e,
+ 0xd8, 0x5e, 0x0c, 0xca, 0x30, 0x4b, 0xe0, 0x87,
+ 0x2f, 0xbc, 0x07, 0x83, 0x35, 0x76, 0x36, 0x17,
+ 0xcf, 0xdb, 0x27, 0x53, 0x43, 0xf5, 0x07, 0xd0,
+ 0x91, 0x83, 0xa1, 0xaa, 0x8d, 0xdb, 0x00, 0x2b,
+ 0xd1, 0x88, 0xe5, 0x59, 0x47, 0x17, 0xf0, 0xe8,
+ 0xce, 0x3b, 0xa0, 0x73, 0x1f, 0x22, 0x9b, 0x1b,
+ 0x59, 0x02, 0xe6, 0xaf, 0x3f, 0xdd, 0xfe, 0xba,
+ 0xc3, 0x6b, 0xe5, 0x82, 0x02, 0x92, 0x0c, 0x5e,
+ 0x5a, 0x87, 0x88, 0x91, 0x00, 0xb5, 0x30, 0x37,
+ 0xf5, 0xc6, 0xdf, 0x0a, 0x7f, 0x03, 0x1c, 0x1f,
+ 0x20, 0xf1, 0xd4, 0x5f, 0x94, 0xc3, 0x6f, 0x21,
+ 0x5e, 0xf2, 0x77, 0x5a, 0x42, 0xfd, 0xd3, 0xc4,
+ 0x31, 0xaf, 0xd6, 0x6c, 0x6c, 0xde, 0x8c, 0x50,
+ 0x01, 0x8f, 0x57, 0x90, 0x88, 0x43, 0xf9, 0x44,
+ 0x09, 0x4d, 0x27, 0x58, 0x9f, 0xae, 0x50, 0x28,
+ 0x12, 0x47, 0x20, 0x79, 0x2b, 0xe4, 0x02, 0x97,
+ 0xcd, 0xab, 0x53, 0x28, 0x8f, 0x8f, 0xe3, 0x3b,
+ 0xd6, 0xc9, 0xc8, 0xff, 0xbf, 0x18, 0x3b, 0x75,
+ 0xdb, 0xcf, 0x07, 0x8c, 0xfe, 0x58, 0xee, 0x75,
+ 0x01, 0x98, 0x98, 0xe4, 0x60, 0xfe, 0xe6, 0x7f,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t aes_cbc_128_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0x98, 0xae, 0x82, 0x1d, 0x76, 0x3a, 0xfe, 0x80,
+ 0x04, 0xa3, 0x43, 0xf0, 0x06, 0x45, 0x83, 0xb7,
+ 0xe2, 0xb5, 0x73, 0x46, 0x78, 0x01, 0x2f, 0xd6,
+ 0x0d, 0x49, 0x64, 0x4c, 0xeb, 0x8d, 0xdc, 0xa9,
+ 0xdc, 0xea, 0x22, 0x25, 0xd4, 0x8f, 0xba, 0x9f,
+ 0xd4, 0x7a, 0x3c, 0x9e, 0xd0, 0xd9, 0xcd, 0xa4,
+ 0x12, 0xdf, 0x8f, 0x50, 0x24, 0x18, 0xa2, 0x0b,
+ 0xd9, 0x7f, 0xda, 0x78, 0xd6, 0x11, 0xf3, 0x99,
+ 0xc4, 0xec, 0x95, 0xe2, 0x85, 0xe1, 0xa0, 0x0d,
+ 0x07, 0x22, 0x56, 0xaf, 0x2f, 0xf5, 0x7d, 0x63,
+ 0xf2, 0x90, 0x6c, 0x26, 0x4f, 0xa5, 0x47, 0xcd,
+ 0x66, 0x2d, 0x4c, 0x4d, 0x94, 0x6a, 0x3c, 0x98,
+ 0xe4, 0x5e, 0x3b, 0x42, 0x3a, 0x93, 0x02, 0xd0,
+ 0x90, 0xc7, 0xcd, 0x87, 0x0e, 0x84, 0x82, 0xf5,
+ 0x77, 0x7b, 0x29, 0xe4, 0xea, 0x5b, 0x60, 0x50,
+ 0xf7, 0x60, 0x8d, 0xf7, 0xd8, 0xd7, 0x7d, 0x99,
+ 0x8a, 0xdc, 0xe2, 0xb9, 0x40, 0xac, 0x4b, 0x9f,
+ 0x55, 0x30, 0xcb, 0x5a, 0x73, 0x64, 0xf2, 0xca,
+ 0x76, 0x88, 0xf7, 0x55, 0xb5, 0x33, 0xc0, 0x44,
+ 0xdf, 0x42, 0xee, 0xc9, 0xc5, 0x2a, 0x47, 0x18,
+ 0x8b, 0x74, 0xb9, 0x4f, 0x2c, 0xd8, 0x7a, 0xd1,
+ 0x12, 0x19, 0xf9, 0x21, 0x8d, 0x21, 0x7e, 0x2a,
+ 0xcf, 0xd5, 0xbb, 0x69, 0xaa, 0x20, 0x25, 0xe0,
+ 0xf5, 0x3b, 0x33, 0x77, 0x63, 0xb2, 0x05, 0x5c,
+ 0x10, 0x9c, 0x61, 0x48, 0xf5, 0xe6, 0x04, 0xd3,
+ 0xc8, 0xb4, 0xf6, 0xcf, 0x22, 0x1c, 0xf6, 0xbb,
+ 0x4b, 0xd7, 0x5d, 0x23, 0xfa, 0x0e, 0xc0, 0xac,
+ 0x27, 0x38, 0x95, 0xd0, 0xdd, 0x83, 0xad, 0x9e,
+ 0xcf, 0xde, 0x99, 0xe7, 0x04, 0xb7, 0x23, 0x9f,
+ 0x46, 0x91, 0xb8, 0xcb, 0x18, 0xd0, 0xc5, 0xf8,
+ 0xec, 0xfc, 0x33, 0xb7, 0xbe, 0x2d, 0xe9, 0x3a,
+ 0x7f, 0x83, 0x5e, 0x44, 0x0f, 0x12, 0x6d, 0x05,
+ 0xaa, 0xfb, 0x80, 0x7a, 0xf6, 0xdb, 0x25, 0xc6,
+ 0x51, 0xf3, 0x5d, 0xf3, 0xa9, 0xb8, 0x34, 0x88,
+ 0x88, 0x25, 0xd5, 0xa3, 0xe5, 0x8e, 0xb2, 0xc7,
+ 0xdc, 0xd5, 0x2e, 0x99, 0xb9, 0xc5, 0x1d, 0x91,
+ 0x49, 0x7b, 0xa3, 0x5e, 0x4b, 0xaf, 0x29, 0x7b,
+ 0x37, 0xb5, 0x39, 0x2c, 0xdf, 0x3b, 0xb1, 0xd8,
+ 0xba, 0x14, 0xc9, 0xd3, 0x6d, 0x67, 0x6a, 0x80,
+ 0x89, 0x6f, 0x11, 0xc8, 0xbc, 0xd6, 0xc7, 0xab,
+ 0x42, 0x1f, 0xf4, 0xa2, 0xc0, 0x9c, 0x2d, 0xca,
+ 0x5f, 0xe6, 0x65, 0xfa, 0x28, 0x49, 0x99, 0xa3,
+ 0x0b, 0x7b, 0x7d, 0x39, 0xaa, 0xa6, 0xd8, 0x0a,
+ 0xfd, 0xde, 0x31, 0x86, 0x15, 0x95, 0x1e, 0x5c,
+ 0x05, 0x4e, 0x3c, 0x18, 0xee, 0xa9, 0x56, 0x9c,
+ 0x3c, 0xc3, 0x67, 0x84, 0x57, 0x77, 0x8d, 0xff,
+ 0xea, 0x34, 0x3c, 0xf9, 0x58, 0xb8, 0xdc, 0x4e,
+ 0xa1, 0x92, 0x2d, 0x9a, 0x91, 0x61, 0x23, 0x6a,
+ 0xd9, 0xb7, 0x41, 0xc5, 0x0d, 0xb6, 0x57, 0x58,
+ 0x42, 0x39, 0x4a, 0x86, 0x7e, 0x9d, 0xeb, 0x7d,
+ 0xa8, 0x14, 0x1a, 0x5c, 0xa1, 0x54, 0x34, 0xb6,
+ 0xb6, 0xbc, 0x1f, 0xf5, 0xe2, 0xb5, 0xe4, 0xa8,
+ 0x42, 0xe3, 0x3d, 0x06, 0x6b, 0x50, 0xbb, 0xa1,
+ 0x6b, 0x63, 0xe5, 0x60, 0x28, 0x07, 0x49, 0x06,
+ 0x61, 0x0e, 0xa3, 0x6c, 0xc3, 0xc8, 0x3e, 0x5a,
+ 0x9c, 0xa5, 0xb3, 0x9b, 0x8d, 0x46, 0xb9, 0xf5,
+ 0x4a, 0x4d, 0xbe, 0xc0, 0xc1, 0x24, 0x92, 0x09,
+ 0x7c, 0x9a, 0x21, 0x2c, 0x08, 0x8a, 0x0d, 0xfc,
+ 0xff, 0xda, 0xdc, 0xf1, 0x45, 0x66, 0xf9, 0xcd,
+ 0x64, 0x7c, 0x2f, 0x0e, 0x95, 0x5e, 0xec, 0x92,
+ 0xd1, 0x03, 0x03, 0xa0, 0xcc, 0x73, 0x92, 0x15,
+ 0x74, 0x42, 0x54, 0x48, 0x77, 0xbe, 0x96, 0xfb,
+ 0x1f, 0x0c, 0x7a, 0x25, 0x67, 0x6b, 0x85, 0x71,
+ 0x06, 0x15, 0xd3, 0x11, 0xfe, 0xf7, 0xa9, 0xb1,
+};
+
+const struct testvec aes_cbc_128_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t aes_cbc_192_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x7c, 0xc4, 0xec, 0x89, 0x7c, 0x13, 0xac, 0x99,
+ 0x49, 0xa9, 0x96, 0xe7, 0xb1, 0x1a, 0xd6, 0xb0,
+ 0xeb, 0x89, 0x27, 0x0f, 0x8b, 0x1b, 0xab, 0x8e,
+ 0x2c, 0xd4, 0x00, 0x66, 0x12, 0x3a, 0x9a, 0x03,
+ 0xc4, 0x49, 0xa4, 0xf0, 0xc1, 0x90, 0xf9, 0x38,
+ 0xb2, 0x5c, 0xa5, 0x0d, 0x1b, 0x60, 0x94, 0xf6,
+ 0x31, 0x4a, 0x72, 0xdb, 0xfc, 0xe1, 0x3c, 0xd6,
+ 0x9d, 0x03, 0x07, 0x45, 0xdb, 0xad, 0xdb, 0xb3,
+ 0x86, 0xfa, 0xce, 0x2c, 0xeb, 0xa2, 0xac, 0x05,
+ 0xd9, 0x52, 0xb8, 0xae, 0xa9, 0x91, 0x86, 0x4b,
+ 0xbb, 0xf8, 0x03, 0xb0, 0x6c, 0x40, 0xcc, 0xbf,
+ 0xa3, 0x76, 0x60, 0xf7, 0x29, 0x03, 0xe6, 0x44,
+ 0xcc, 0x2a, 0xe7, 0x74, 0x8e, 0x62, 0xfe, 0x99,
+ 0x6a, 0x6d, 0x04, 0x1b, 0xe7, 0xf7, 0x9f, 0x13,
+ 0xa7, 0x1d, 0x93, 0x0e, 0x8f, 0xe0, 0x77, 0x9b,
+ 0xe3, 0x91, 0x67, 0x12, 0x33, 0x12, 0x42, 0x55,
+ 0x28, 0x04, 0x2d, 0x01, 0x2b, 0xd2, 0xda, 0xbe,
+ 0x7c, 0x83, 0xf2, 0x87, 0x71, 0x67, 0xaf, 0x6b,
+ 0x50, 0x6c, 0x8c, 0x9f, 0x48, 0xee, 0x90, 0x0c,
+ 0x9a, 0x9e, 0x40, 0xa8, 0x13, 0x2f, 0x58, 0xfb,
+ 0xdc, 0xb1, 0xda, 0xff, 0x06, 0x9c, 0xeb, 0x5e,
+ 0x0f, 0xaf, 0xc0, 0x9a, 0x47, 0x88, 0x25, 0xfd,
+ 0x19, 0x5e, 0xd4, 0xe0, 0x7f, 0xe0, 0x71, 0x7a,
+ 0x60, 0x54, 0xe7, 0x0d, 0xfe, 0x11, 0x9d, 0x77,
+ 0xbd, 0x9b, 0xd0, 0xf8, 0x77, 0xe4, 0x5b, 0x88,
+ 0x90, 0x12, 0x29, 0x88, 0xb6, 0xd9, 0x1e, 0x6c,
+ 0xbf, 0xa4, 0x18, 0xe1, 0xe0, 0x5e, 0xed, 0x48,
+ 0x9b, 0x05, 0x13, 0x37, 0x0f, 0x41, 0x54, 0xc8,
+ 0xe4, 0x25, 0x0e, 0x82, 0x5f, 0x81, 0xba, 0x5d,
+ 0x79, 0x8f, 0x9c, 0x17, 0x4b, 0x59, 0xf4, 0x5d,
+ 0xd6, 0x83, 0xfd, 0x44, 0xd0, 0xe1, 0x89, 0x09,
+ 0xf9, 0xe2, 0xb6, 0x9c, 0x1c, 0xbd, 0x13, 0xaa,
+ 0xa0, 0x43, 0xaa, 0xaf, 0x6d, 0x65, 0x73, 0xba,
+ 0x3a, 0x55, 0x69, 0x51, 0xb9, 0x52, 0x09, 0xaa,
+ 0x9f, 0x91, 0x3c, 0x65, 0xe2, 0x81, 0xdb, 0xe8,
+ 0x5a, 0xe3, 0x74, 0x11, 0x7b, 0xec, 0x2f, 0x18,
+ 0x8d, 0x4c, 0x8f, 0xf2, 0x06, 0x3d, 0x22, 0xc6,
+ 0x43, 0xef, 0x42, 0x7d, 0xe1, 0xe7, 0xde, 0x4c,
+ 0x58, 0xad, 0x40, 0xbb, 0x8b, 0xce, 0x1f, 0x57,
+ 0x8e, 0x6a, 0x27, 0x43, 0x46, 0x7f, 0x94, 0xe5,
+ 0x45, 0x67, 0x12, 0xc8, 0x99, 0x85, 0x08, 0x2a,
+ 0x37, 0x40, 0x0b, 0xb5, 0xd9, 0xa3, 0xf7, 0xc8,
+ 0x87, 0xb1, 0xe6, 0x87, 0x2f, 0x86, 0xd8, 0x9c,
+ 0x7b, 0xec, 0xcf, 0xa4, 0xe5, 0xd5, 0x50, 0x3f,
+ 0xdf, 0xc9, 0xb7, 0x29, 0x97, 0xd6, 0x33, 0xba,
+ 0xf0, 0x72, 0xf0, 0x76, 0x12, 0xd3, 0x99, 0x4f,
+ 0x1b, 0x36, 0xda, 0xa1, 0x83, 0xfe, 0xf5, 0x94,
+ 0x9e, 0x61, 0x82, 0x62, 0xe0, 0x08, 0x3a, 0xbd,
+ 0xba, 0x8b, 0x3d, 0xd6, 0xbd, 0x16, 0x5f, 0xd7,
+ 0x1d, 0x6c, 0x0e, 0x92, 0x89, 0x8c, 0x38, 0x62,
+ 0x80, 0xee, 0x7e, 0x63, 0x82, 0x88, 0x0b, 0xbf,
+ 0xdd, 0x9f, 0xbc, 0xba, 0xa7, 0x5a, 0xc6, 0x0d,
+ 0x87, 0x59, 0xbf, 0x0a, 0x85, 0x06, 0xa3, 0xb4,
+ 0x66, 0x63, 0xda, 0x12, 0x29, 0x5f, 0x2e, 0x4d,
+ 0x60, 0xfd, 0x85, 0x76, 0xaf, 0xf7, 0x87, 0xed,
+ 0x1f, 0x46, 0xc2, 0xd6, 0x6c, 0x98, 0x6b, 0x4b,
+ 0x60, 0x04, 0xed, 0x89, 0x3b, 0x85, 0x6c, 0xe9,
+ 0x46, 0xd9, 0xfa, 0x35, 0x61, 0xe8, 0x0c, 0x84,
+ 0x1b, 0x93, 0xc0, 0xfe, 0x5d, 0x29, 0x14, 0xe1,
+ 0x1c, 0x66, 0x73, 0xc8, 0x0b, 0x98, 0xff, 0x1a,
+ 0x78, 0x2b, 0x6a, 0x93, 0x7a, 0x29, 0xd8, 0x7b,
+ 0xb1, 0x39, 0xf0, 0xad, 0x93, 0x4d, 0x2d, 0xab,
+ 0x67, 0x3c, 0xa4, 0xa1, 0x08, 0x36, 0x0b, 0xe9,
+ 0x77, 0xd0, 0xe3, 0x45, 0x7d, 0x99, 0x75, 0xc3,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t aes_cbc_192_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0xe6, 0x41, 0x75, 0xd6, 0x80, 0xdf, 0x44, 0x37,
+ 0xa7, 0xa2, 0xb2, 0x29, 0x0d, 0xf0, 0x02, 0x78,
+ 0x92, 0xb2, 0x06, 0x5f, 0x86, 0xd3, 0x9c, 0xa3,
+ 0xd0, 0xc5, 0x08, 0x03, 0x6d, 0x41, 0x9d, 0x61,
+ 0xb4, 0xb9, 0xa1, 0x69, 0x6e, 0x3a, 0x78, 0xd7,
+ 0x04, 0x94, 0xf2, 0x53, 0xed, 0xd1, 0xf6, 0xd8,
+ 0x98, 0xe2, 0x49, 0x75, 0x15, 0x85, 0xe0, 0x78,
+ 0x5b, 0x28, 0x5e, 0xe6, 0xfa, 0x60, 0x3d, 0x4b,
+ 0x8c, 0xf1, 0x1a, 0xfd, 0x1f, 0xe8, 0xad, 0xb4,
+ 0xa1, 0xe7, 0xd3, 0x71, 0x16, 0xdf, 0xc6, 0x95,
+ 0xd4, 0x43, 0xaf, 0x92, 0xab, 0x74, 0x0f, 0x77,
+ 0x75, 0x4d, 0xd7, 0x13, 0x97, 0x18, 0xea, 0x43,
+ 0x92, 0x0d, 0x88, 0xc8, 0x41, 0xf7, 0x15, 0x34,
+ 0x0f, 0x63, 0xbf, 0x50, 0x18, 0xbe, 0x9d, 0x3b,
+ 0xfc, 0x17, 0x7d, 0x03, 0x39, 0xc2, 0x39, 0x28,
+ 0xb2, 0x23, 0x1c, 0x7f, 0x3f, 0x19, 0x6c, 0x2f,
+ 0x64, 0xbd, 0xc9, 0x7d, 0xbe, 0x98, 0xe0, 0x83,
+ 0xa4, 0x48, 0xfc, 0x89, 0xe7, 0xe0, 0x93, 0x93,
+ 0x7b, 0x15, 0x35, 0xaf, 0xf8, 0x00, 0x81, 0xcc,
+ 0x04, 0x80, 0x8b, 0x20, 0xc8, 0x6a, 0xb7, 0x5e,
+ 0x95, 0xce, 0x69, 0x50, 0x39, 0x88, 0x90, 0x41,
+ 0x3f, 0xa8, 0x62, 0x42, 0xf1, 0xa9, 0x56, 0xce,
+ 0x25, 0x53, 0x1d, 0x97, 0x5d, 0x3a, 0x4e, 0x6b,
+ 0x1f, 0xd6, 0xea, 0x20, 0x81, 0x6c, 0xe5, 0xa1,
+ 0x0d, 0x9a, 0xd9, 0x3c, 0xbb, 0xbc, 0xc1, 0x77,
+ 0xe2, 0xf4, 0x9c, 0x11, 0x3a, 0x2f, 0xd0, 0x77,
+ 0x10, 0xa6, 0x36, 0xd1, 0xbf, 0x3b, 0x50, 0x39,
+ 0x4b, 0x2c, 0x62, 0x06, 0x1a, 0xe4, 0x18, 0xc0,
+ 0x35, 0x7c, 0xc3, 0xd0, 0x22, 0xf8, 0xee, 0x19,
+ 0xa5, 0x3d, 0x69, 0xa9, 0x34, 0xe6, 0x29, 0xf9,
+ 0xf1, 0xff, 0x26, 0x7a, 0x66, 0x13, 0x1a, 0xa2,
+ 0xc6, 0xac, 0x84, 0xf6, 0x6b, 0x09, 0xbd, 0x32,
+ 0x6f, 0x26, 0x37, 0x7c, 0x7d, 0x74, 0xe4, 0xa0,
+ 0xeb, 0x85, 0x7a, 0xa1, 0x92, 0x19, 0x2e, 0x64,
+ 0x82, 0x7c, 0x89, 0x1b, 0x14, 0x92, 0xd1, 0xf4,
+ 0x1f, 0x29, 0x84, 0x04, 0x70, 0x09, 0x13, 0x4c,
+ 0x62, 0x9a, 0xb4, 0xf7, 0xc1, 0x7b, 0x83, 0xd1,
+ 0x2d, 0x1a, 0xbe, 0x83, 0x9b, 0x73, 0xba, 0x8d,
+ 0xbb, 0xb0, 0xf2, 0x5c, 0x72, 0x75, 0x01, 0x0b,
+ 0xa6, 0x43, 0x6b, 0x76, 0x56, 0x4e, 0x71, 0x1b,
+ 0xb2, 0x34, 0x1f, 0x70, 0x44, 0xe6, 0xfb, 0x67,
+ 0xd1, 0x4d, 0x63, 0xce, 0x17, 0x46, 0x9b, 0x11,
+ 0xda, 0x93, 0xf8, 0x03, 0x11, 0x8f, 0x90, 0xff,
+ 0x80, 0x85, 0x02, 0x1f, 0xb6, 0x6a, 0x28, 0x3f,
+ 0x01, 0xa8, 0x36, 0x2e, 0xc7, 0x42, 0xd4, 0x02,
+ 0x26, 0xea, 0xb5, 0x84, 0x6c, 0x9f, 0xa0, 0x4a,
+ 0x73, 0x49, 0xea, 0x91, 0x4d, 0x62, 0xf8, 0x23,
+ 0xe4, 0x3d, 0x91, 0xfb, 0x53, 0x2c, 0x8c, 0xa4,
+ 0xfe, 0x81, 0x05, 0x5d, 0x4b, 0x9a, 0x75, 0x29,
+ 0xf8, 0xbe, 0x3f, 0x05, 0xb4, 0x8f, 0xdc, 0xcc,
+ 0xfa, 0xcc, 0xd7, 0xb2, 0x06, 0x03, 0xd4, 0xf3,
+ 0x8e, 0x09, 0x09, 0x80, 0xf8, 0xc3, 0x3b, 0x66,
+ 0xe9, 0x9c, 0x5b, 0x16, 0xed, 0x2d, 0x35, 0x1c,
+ 0x99, 0x3b, 0x1f, 0x0e, 0x04, 0x30, 0x23, 0x3a,
+ 0x83, 0x0c, 0xec, 0x76, 0xf2, 0x5d, 0x13, 0x54,
+ 0x15, 0x62, 0x36, 0x26, 0x6b, 0x21, 0x62, 0xdd,
+ 0xb4, 0x1a, 0x57, 0x16, 0xfd, 0xa0, 0x9c, 0xfa,
+ 0x37, 0xb3, 0xda, 0xe0, 0x46, 0x91, 0xb3, 0x20,
+ 0xe7, 0xe2, 0xf3, 0x0e, 0x20, 0x3c, 0x98, 0x1b,
+ 0xe4, 0xc2, 0xd3, 0xa9, 0x97, 0xaf, 0x12, 0x69,
+ 0x23, 0x97, 0x62, 0x6e, 0xae, 0x54, 0x9c, 0x82,
+ 0x92, 0x50, 0x74, 0x07, 0x4a, 0xb1, 0xdc, 0xcf,
+ 0x53, 0x1d, 0xc8, 0x29, 0x1f, 0x6e, 0xf1, 0x13,
+ 0xec, 0xb6, 0x60, 0xb1, 0x4c, 0x9d, 0xd7, 0x77,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t aes_cbc_192_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x33, 0xfd, 0xfa, 0x44, 0x64, 0x75, 0x22, 0x7e,
+ 0xe3, 0xb3, 0xa0, 0x75, 0x99, 0x96, 0xc0, 0xec,
+ 0x56, 0x06, 0x7d, 0x19, 0x0b, 0x66, 0x89, 0xe0,
+ 0x69, 0x1d, 0x93, 0x91, 0xd7, 0x0f, 0xf8, 0xf5,
+ 0x5a, 0x39, 0x30, 0xad, 0x64, 0x42, 0x06, 0xa3,
+ 0xce, 0x3f, 0x67, 0xd6, 0x6e, 0xcd, 0x3b, 0xf5,
+ 0x03, 0x2b, 0x07, 0x83, 0x18, 0x1a, 0x4f, 0x4c,
+ 0xe7, 0x6b, 0xe8, 0xf9, 0x19, 0xa5, 0x23, 0x8f,
+ 0x46, 0x35, 0x13, 0x7b, 0x61, 0x05, 0xfc, 0x7d,
+ 0x17, 0x39, 0x03, 0xa8, 0xec, 0x7a, 0xd2, 0x5f,
+ 0x91, 0xa7, 0x26, 0x07, 0x9d, 0xd7, 0x0c, 0xd7,
+ 0xd4, 0x8e, 0x37, 0xf3, 0x1a, 0x3c, 0x04, 0x83,
+ 0x04, 0x71, 0x06, 0xa6, 0x5f, 0x82, 0xe0, 0x6d,
+ 0x87, 0x5c, 0x7c, 0x03, 0x25, 0x03, 0x4b, 0x24,
+ 0x07, 0x40, 0xad, 0xe4, 0x1d, 0x1d, 0xcb, 0x34,
+ 0xc2, 0x53, 0x1d, 0x13, 0xc5, 0x87, 0xab, 0xa7,
+ 0x95, 0x11, 0x8b, 0xbb, 0xf0, 0xc3, 0x00, 0xeb,
+ 0xe5, 0xb0, 0x9e, 0x88, 0x8b, 0xad, 0xca, 0xcb,
+ 0x17, 0xf8, 0x92, 0x4d, 0x00, 0xb0, 0x08, 0x74,
+ 0x08, 0xb9, 0x8b, 0x95, 0x96, 0xd9, 0x36, 0x35,
+ 0x31, 0x92, 0x89, 0xf6, 0x35, 0x33, 0xfb, 0x18,
+ 0x5b, 0x84, 0xa1, 0xfe, 0xe1, 0x62, 0x04, 0x6f,
+ 0x3c, 0xc1, 0xd2, 0xc2, 0x10, 0xd7, 0x97, 0xba,
+ 0x29, 0x7c, 0xe3, 0x85, 0xee, 0x59, 0x90, 0xaf,
+ 0x7f, 0x6f, 0x97, 0x97, 0xa2, 0x41, 0x18, 0x7f,
+ 0x2f, 0x06, 0x15, 0xb2, 0x46, 0x82, 0x49, 0x39,
+ 0xd0, 0xfb, 0xa8, 0x48, 0x44, 0x28, 0x58, 0xff,
+ 0xd8, 0xf2, 0x65, 0xf9, 0x4f, 0x2c, 0xbe, 0xec,
+ 0xb6, 0xdf, 0x27, 0x1a, 0xf2, 0x05, 0x15, 0x5e,
+ 0xe3, 0x2a, 0x98, 0x29, 0x92, 0x4a, 0x1b, 0x5d,
+ 0x5c, 0x2c, 0x70, 0xf6, 0x41, 0xd4, 0xbe, 0x64,
+ 0xa1, 0xd9, 0x79, 0xf1, 0x11, 0x16, 0xda, 0xa2,
+ 0xaf, 0xdd, 0x4d, 0xa8, 0xed, 0xec, 0xbe, 0x7d,
+ 0x49, 0x6c, 0x30, 0xf2, 0xf5, 0x36, 0x3c, 0xae,
+ 0x4b, 0xa7, 0x77, 0xa3, 0xca, 0x22, 0xa5, 0xe2,
+ 0x4d, 0x44, 0xcb, 0x36, 0xd5, 0x3f, 0x20, 0x13,
+ 0xb6, 0xfb, 0xcd, 0x79, 0xd7, 0x42, 0xf9, 0x75,
+ 0x09, 0x45, 0x28, 0x9e, 0xf2, 0xbd, 0x15, 0x57,
+ 0xf8, 0x4b, 0xc0, 0xd3, 0xb3, 0xb8, 0xde, 0x55,
+ 0x9e, 0x11, 0x67, 0xab, 0xc5, 0x5d, 0x58, 0xdb,
+ 0x4d, 0x20, 0x34, 0x77, 0x33, 0x9c, 0x46, 0x76,
+ 0x9b, 0x1e, 0x0e, 0x6b, 0x4e, 0xd9, 0x63, 0x68,
+ 0x78, 0x5e, 0x7c, 0x52, 0xa2, 0x64, 0xa9, 0xfc,
+ 0x21, 0x35, 0x17, 0x93, 0x18, 0x9e, 0x10, 0xcf,
+ 0x95, 0x6b, 0xf0, 0x55, 0x46, 0xc3, 0x4b, 0xfc,
+ 0x86, 0x8b, 0x0d, 0x3b, 0x5c, 0x30, 0xcc, 0xf1,
+ 0x4c, 0x43, 0xf0, 0xd6, 0xf6, 0x3b, 0x0b, 0x68,
+ 0x6f, 0x21, 0xd1, 0x61, 0xda, 0x35, 0x92, 0x94,
+ 0xa5, 0x5d, 0x47, 0x39, 0x96, 0x50, 0x5f, 0xbd,
+ 0x57, 0x22, 0xd2, 0x65, 0x73, 0x05, 0x8f, 0x2b,
+ 0xf2, 0x96, 0x53, 0x6b, 0x8e, 0xd3, 0x1e, 0xe7,
+ 0x92, 0xd4, 0xea, 0x41, 0xee, 0x92, 0x4d, 0x10,
+ 0x9f, 0x68, 0xd8, 0xe9, 0xac, 0x1f, 0x38, 0x0b,
+ 0x12, 0xa4, 0x1c, 0xb2, 0x63, 0x2b, 0x87, 0x07,
+ 0xb8, 0x1e, 0x02, 0x2b, 0x4d, 0xad, 0x99, 0xdf,
+ 0xe3, 0x98, 0x69, 0x29, 0x11, 0xe3, 0x77, 0x45,
+ 0x9a, 0xe9, 0x6c, 0x47, 0x4e, 0xc0, 0x85, 0x15,
+ 0x68, 0x58, 0x41, 0x37, 0xab, 0x96, 0x11, 0x94,
+ 0x9e, 0xbb, 0xa8, 0x5d, 0x51, 0x05, 0x93, 0xdd,
+ 0x2e, 0xb8, 0xdf, 0xcf, 0x83, 0xbc, 0xf6, 0x53,
+ 0x95, 0x93, 0x27, 0xda, 0xa5, 0x20, 0x1b, 0x7d,
+ 0x1d, 0xd9, 0x0c, 0xde, 0xe5, 0x3f, 0xc8, 0x60,
+ 0x16, 0x32, 0x95, 0x24, 0xa7, 0x2b, 0x74, 0xf1,
+ 0x67, 0xf9, 0xf2, 0x49, 0xda, 0x12, 0x97, 0xdd,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t aes_cbc_192_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xa5, 0x81, 0x86, 0x78, 0x4a, 0xd7, 0x5b, 0x83,
+ 0xcf, 0xbf, 0x7e, 0x3c, 0xd7, 0xcd, 0xaf, 0xfa,
+ 0x82, 0x18, 0xce, 0xbd, 0x8b, 0xe6, 0xd9, 0x39,
+ 0x22, 0x2d, 0x1e, 0x75, 0x65, 0xee, 0x61, 0xf2,
+ 0xc3, 0x8b, 0xf4, 0x40, 0x03, 0x73, 0x8a, 0x21,
+ 0x9f, 0xf3, 0xcc, 0x93, 0x08, 0x3d, 0xff, 0x8a,
+ 0xbc, 0x0f, 0x19, 0xa1, 0x9f, 0xc8, 0x73, 0xe8,
+ 0xa6, 0x14, 0x2e, 0x43, 0x19, 0x79, 0x61, 0x35,
+ 0x8d, 0x55, 0x06, 0xeb, 0x96, 0xe7, 0xf5, 0x4b,
+ 0x95, 0x5f, 0x9b, 0xb2, 0x18, 0x0d, 0x13, 0xc2,
+ 0x96, 0x79, 0x50, 0x78, 0x98, 0x50, 0x88, 0x2b,
+ 0xab, 0x05, 0x66, 0xa1, 0x3a, 0x25, 0x85, 0xe2,
+ 0xd0, 0xe2, 0xac, 0xb5, 0x26, 0xde, 0x95, 0x04,
+ 0x45, 0xe7, 0x22, 0x71, 0x02, 0xb3, 0x84, 0x4c,
+ 0xb5, 0xad, 0x64, 0x5c, 0x27, 0x5c, 0x71, 0xcd,
+ 0x0b, 0x62, 0x91, 0xd6, 0x84, 0x00, 0x62, 0x52,
+ 0x54, 0xbd, 0x22, 0xc8, 0x57, 0xa7, 0x41, 0xac,
+ 0xc7, 0xa8, 0x56, 0x6f, 0x1b, 0x7e, 0xce, 0x02,
+ 0x29, 0x3b, 0xc0, 0x5d, 0x8e, 0x11, 0xa9, 0x54,
+ 0xc2, 0xf2, 0xf0, 0x81, 0x6c, 0x9a, 0x24, 0x5b,
+ 0x81, 0x7d, 0xf3, 0x84, 0x93, 0xc6, 0x2a, 0xd4,
+ 0xd3, 0x1a, 0x2f, 0x97, 0x2e, 0x31, 0x8a, 0x62,
+ 0x43, 0xcb, 0xc7, 0x3d, 0x73, 0x8e, 0xd6, 0x86,
+ 0x17, 0x8f, 0x63, 0xd4, 0xb1, 0x50, 0x92, 0xce,
+ 0x90, 0x37, 0x91, 0xce, 0x37, 0x13, 0x8e, 0x61,
+ 0x21, 0xd8, 0x1a, 0xbf, 0x42, 0x65, 0x1d, 0x86,
+ 0x07, 0x04, 0x9b, 0xd1, 0xd3, 0x26, 0x6b, 0x7c,
+ 0xa1, 0x77, 0x54, 0x5b, 0x9f, 0x95, 0x62, 0x43,
+ 0xb3, 0x71, 0x1e, 0x4c, 0x32, 0xd1, 0x3e, 0xe8,
+ 0x60, 0x9c, 0x0c, 0x15, 0x55, 0xf0, 0x38, 0xb7,
+ 0x1e, 0x40, 0xe5, 0x26, 0x4e, 0x46, 0x49, 0x47,
+ 0x59, 0x3d, 0x49, 0x76, 0x28, 0xd3, 0xed, 0x03,
+ 0xdd, 0xf8, 0x1a, 0xf4, 0x1a, 0xfe, 0xe4, 0x03,
+ 0xb9, 0xa5, 0x8e, 0x7c, 0x91, 0x7a, 0xb2, 0x17,
+ 0x84, 0x97, 0x3f, 0x12, 0x68, 0xaa, 0xf5, 0x73,
+ 0xbc, 0x84, 0xdd, 0x03, 0x4a, 0xc4, 0xcd, 0xdb,
+ 0xb0, 0x8a, 0x3b, 0xac, 0xf1, 0xdd, 0x10, 0x20,
+ 0x69, 0xee, 0x94, 0xcd, 0x60, 0x3f, 0x01, 0xcf,
+ 0xf4, 0xff, 0xdb, 0x91, 0x8a, 0xf3, 0xb8, 0x44,
+ 0x62, 0xdc, 0xdc, 0xc8, 0x2b, 0xaf, 0x0d, 0x5e,
+ 0x1b, 0x58, 0x7f, 0x6b, 0x0d, 0xc4, 0xd4, 0x1c,
+ 0x89, 0x29, 0x60, 0x5d, 0xe9, 0x59, 0xbb, 0x19,
+ 0x03, 0x7c, 0x25, 0x63, 0xc6, 0x89, 0x6f, 0xe6,
+ 0xbe, 0xcd, 0xaa, 0xf2, 0xbf, 0x16, 0xcb, 0x47,
+ 0xc6, 0x74, 0xdd, 0x90, 0x41, 0x75, 0x7f, 0x26,
+ 0x7b, 0x5a, 0xb9, 0x11, 0xa0, 0xc7, 0x75, 0x60,
+ 0xc5, 0x54, 0x7d, 0xb0, 0xb4, 0xd0, 0x95, 0x01,
+ 0xff, 0x07, 0x49, 0x56, 0xfb, 0xec, 0xa9, 0x4c,
+ 0x68, 0x28, 0x41, 0x81, 0x80, 0x05, 0x88, 0x58,
+ 0xf5, 0xdc, 0x42, 0x99, 0xd8, 0xb7, 0x47, 0xd9,
+ 0xf7, 0x0e, 0x2c, 0x0f, 0x95, 0x04, 0xb3, 0xc8,
+ 0x8a, 0xe2, 0x21, 0x57, 0x8d, 0x64, 0x54, 0x40,
+ 0xf6, 0xd0, 0x3c, 0x97, 0xcf, 0x22, 0xce, 0xcd,
+ 0xbf, 0x05, 0x15, 0xaa, 0x89, 0xd9, 0x2b, 0x48,
+ 0xaf, 0x34, 0xe0, 0xf5, 0xe3, 0x58, 0x06, 0xd7,
+ 0x49, 0x00, 0x95, 0x3a, 0xb3, 0xc8, 0xcd, 0x2b,
+ 0x3e, 0xe8, 0x1b, 0x60, 0xe8, 0xea, 0xaf, 0x09,
+ 0xbb, 0xee, 0xce, 0xbc, 0xa0, 0x9b, 0x17, 0x90,
+ 0x42, 0x40, 0x18, 0x35, 0x2e, 0x17, 0xa0, 0x6e,
+ 0x43, 0xe7, 0xac, 0x89, 0x96, 0x3c, 0x16, 0xe0,
+ 0xdb, 0x09, 0x51, 0x4a, 0x45, 0x33, 0x63, 0xe9,
+ 0x4e, 0x3f, 0x32, 0x34, 0x36, 0x43, 0xd5, 0x0c,
+ 0x5a, 0x2e, 0x0e, 0x8b, 0x80, 0xb7, 0xf4, 0xe4,
+ 0x99, 0x9b, 0x05, 0xf5, 0xb2, 0xe4, 0x03, 0xe4,
+};
+
+const struct testvec aes_cbc_192_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t aes_cbc_192_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0x87, 0x9c, 0x05, 0xd6, 0x25, 0xb9, 0xe0, 0xbe,
+ 0x78, 0x21, 0x85, 0x81, 0x8e, 0x2f, 0x13, 0x5e,
+ 0xf2, 0x73, 0x11, 0xfa, 0x73, 0x77, 0x93, 0x5e,
+ 0x71, 0x16, 0x98, 0x68, 0x6f, 0xe8, 0x22, 0x34,
+ 0xf5, 0x11, 0xfa, 0x61, 0xe6, 0x1a, 0xfb, 0x42,
+ 0xa7, 0xa3, 0x2e, 0x0d, 0xc1, 0x9d, 0x7d, 0xd9,
+ 0xfb, 0xbb, 0xc5, 0x08, 0x9d, 0xc2, 0xab, 0x5c,
+ 0xdf, 0x9b, 0x3c, 0x1a, 0xbd, 0x66, 0x5a, 0x91,
+ 0x1c, 0x00, 0x59, 0x2e, 0x92, 0xe9, 0x23, 0xf6,
+ 0x90, 0x3d, 0x5b, 0x72, 0x76, 0x78, 0xd9, 0xa2,
+ 0x48, 0x33, 0x29, 0xe2, 0xfd, 0x77, 0x14, 0xda,
+ 0x01, 0x92, 0x63, 0xdd, 0x8c, 0x1c, 0x2e, 0xf7,
+ 0x61, 0xfb, 0xc5, 0x76, 0xec, 0x7f, 0xef, 0xdc,
+ 0xbe, 0x2d, 0x3b, 0x69, 0x30, 0xb9, 0x08, 0x00,
+ 0xe8, 0x37, 0x09, 0xaa, 0x2a, 0x02, 0x80, 0x11,
+ 0x91, 0x16, 0x94, 0x7d, 0xb5, 0xdc, 0x9f, 0xb3,
+ 0xb0, 0x26, 0x72, 0x85, 0x93, 0x85, 0x19, 0x08,
+ 0x97, 0xef, 0x97, 0x57, 0xa8, 0x76, 0x0e, 0x85,
+ 0xb1, 0x1d, 0x79, 0xe3, 0x7a, 0xe8, 0x06, 0x3b,
+ 0xc4, 0x00, 0xbd, 0xaa, 0xd9, 0x17, 0x81, 0x37,
+ 0x12, 0x86, 0x52, 0xea, 0x04, 0xb2, 0x11, 0x0f,
+ 0x5a, 0x08, 0x68, 0xcb, 0x48, 0xca, 0x2f, 0xda,
+ 0xa3, 0x0a, 0x60, 0x57, 0xc7, 0x80, 0x36, 0x60,
+ 0x05, 0xce, 0xd5, 0x43, 0xc9, 0xbc, 0x6c, 0xe6,
+ 0x63, 0x38, 0x2e, 0x81, 0x90, 0x34, 0x11, 0x2c,
+ 0x84, 0x0c, 0x62, 0x68, 0xde, 0x17, 0x57, 0x43,
+ 0x19, 0xa5, 0x92, 0x9d, 0x91, 0x2b, 0xa2, 0x95,
+ 0x7c, 0x20, 0x72, 0xaa, 0x83, 0x24, 0x54, 0x94,
+ 0x10, 0x80, 0xd4, 0x3f, 0x58, 0xb9, 0x7b, 0x74,
+ 0x68, 0xd5, 0xfb, 0x3e, 0xdd, 0xb4, 0xdf, 0x65,
+ 0x72, 0x88, 0x45, 0x8a, 0xd0, 0x93, 0x6e, 0x99,
+ 0x84, 0xad, 0x39, 0x73, 0x16, 0x88, 0xdc, 0x89,
+ 0x33, 0x34, 0xd7, 0xd8, 0x97, 0xfb, 0x90, 0xd2,
+ 0xc5, 0x8e, 0x94, 0xc4, 0xf1, 0xfe, 0xbe, 0x23,
+ 0xf1, 0x3a, 0x10, 0x1c, 0x42, 0x6b, 0xf5, 0xee,
+ 0xe4, 0x78, 0x8a, 0x7e, 0x13, 0x02, 0x25, 0xcb,
+ 0xd1, 0x61, 0x1f, 0xab, 0x45, 0x1f, 0x90, 0x88,
+ 0x0f, 0x6b, 0xff, 0x61, 0xba, 0xf3, 0xac, 0x8e,
+ 0x13, 0xc2, 0xfb, 0xca, 0x41, 0xed, 0xfe, 0x6c,
+ 0xcb, 0xdf, 0x97, 0x60, 0x29, 0x8a, 0x72, 0x8d,
+ 0x7d, 0xad, 0x6e, 0xe9, 0x7b, 0xc4, 0x92, 0x14,
+ 0x5e, 0x33, 0x27, 0xe2, 0xda, 0x2f, 0x95, 0x5f,
+ 0x40, 0x27, 0xeb, 0xdb, 0x0d, 0x1e, 0xc5, 0xd4,
+ 0x43, 0x50, 0x1a, 0x62, 0x82, 0xbe, 0x24, 0x7f,
+ 0xb7, 0x46, 0xa8, 0x70, 0x10, 0x33, 0xb6, 0x3f,
+ 0xbf, 0xa8, 0xa8, 0x85, 0xab, 0x1d, 0xb4, 0x3f,
+ 0x84, 0x06, 0x91, 0xd6, 0x18, 0x3d, 0xeb, 0x8b,
+ 0x3f, 0x9b, 0x37, 0x9e, 0x2e, 0xd2, 0xec, 0xe5,
+ 0x2d, 0xf0, 0x3f, 0x45, 0xd5, 0x9d, 0xb9, 0x28,
+ 0x89, 0xe4, 0x0c, 0xa9, 0x38, 0xca, 0x22, 0x56,
+ 0x53, 0xdf, 0x49, 0xba, 0x5d, 0x99, 0xd6, 0x4b,
+ 0x1d, 0x0d, 0x6d, 0xee, 0x7c, 0xf2, 0x6f, 0x50,
+ 0x04, 0xf1, 0xf8, 0x49, 0xd1, 0x2f, 0x50, 0x3e,
+ 0xf1, 0x08, 0x49, 0x17, 0x08, 0xd2, 0xac, 0x5d,
+ 0x58, 0xe7, 0x27, 0xe6, 0x59, 0x02, 0x9f, 0x1c,
+ 0x40, 0xff, 0x6c, 0x67, 0xae, 0x49, 0x1a, 0x2a,
+ 0xab, 0xd9, 0x63, 0x25, 0x2d, 0x9b, 0xd8, 0x1a,
+ 0x41, 0xa6, 0xea, 0x72, 0xfd, 0x56, 0xa1, 0x57,
+ 0x59, 0xdd, 0xf5, 0xa3, 0xb2, 0x2f, 0x64, 0xb1,
+ 0xc5, 0xfe, 0x8d, 0x9b, 0x93, 0xd1, 0x51, 0x77,
+ 0x13, 0x50, 0x74, 0x30, 0x28, 0xe4, 0x7a, 0x06,
+ 0x69, 0xd4, 0xa8, 0x0a, 0xae, 0x02, 0x4a, 0x61,
+ 0x24, 0xc2, 0xcd, 0xc8, 0xd3, 0x12, 0x2e, 0xac,
+ 0x9a, 0x0c, 0x24, 0x06, 0xb8, 0x1e, 0x3d, 0x29,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t aes_cbc_192_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x1e, 0x3b, 0x66, 0x76, 0xd9, 0x9e, 0xf7, 0x82,
+ 0x17, 0x76, 0x69, 0x4d, 0x64, 0x63, 0xf1, 0x01,
+ 0x81, 0x8a, 0xa4, 0x97, 0x05, 0x42, 0xdb, 0x8c,
+ 0x27, 0xc8, 0xfd, 0x08, 0x21, 0x17, 0x87, 0xa9,
+ 0x0c, 0x86, 0x2d, 0xda, 0x17, 0xd5, 0x5d, 0x67,
+ 0x12, 0x93, 0x8d, 0x34, 0x5a, 0xfc, 0x2a, 0x49,
+ 0x1a, 0x1a, 0x77, 0x20, 0xfb, 0x1d, 0x5d, 0xd8,
+ 0x99, 0xb0, 0x8f, 0x1c, 0x13, 0x4d, 0x28, 0x6d,
+ 0x2d, 0x79, 0xa9, 0x8e, 0x04, 0x0c, 0x5a, 0xd5,
+ 0x52, 0x09, 0x15, 0x4a, 0xfb, 0x7a, 0xf8, 0xdc,
+ 0x3b, 0x77, 0xaf, 0xe0, 0x80, 0x6b, 0xac, 0x5f,
+ 0xc0, 0x0f, 0x0f, 0x29, 0xf5, 0xcc, 0xbc, 0x85,
+ 0x77, 0xe7, 0x9f, 0x59, 0x23, 0x83, 0x67, 0x74,
+ 0x3b, 0x1c, 0x0f, 0x75, 0xd8, 0x58, 0xa2, 0xce,
+ 0x8c, 0x3a, 0x80, 0xd7, 0xff, 0xa1, 0x83, 0xa3,
+ 0xe0, 0xad, 0x18, 0x7a, 0xc5, 0x28, 0x28, 0x71,
+ 0x46, 0xb5, 0x13, 0x76, 0x4d, 0x67, 0x37, 0x38,
+ 0x3f, 0x9e, 0xa6, 0x8b, 0xc2, 0xaf, 0x83, 0x7d,
+ 0x8b, 0x82, 0xd0, 0xe2, 0xec, 0x13, 0xce, 0x2b,
+ 0x1e, 0x13, 0xe7, 0xb6, 0xfa, 0x9e, 0xa2, 0x32,
+ 0xb7, 0xdc, 0xe5, 0xb5, 0x35, 0xa3, 0xb4, 0x84,
+ 0x57, 0x05, 0x2d, 0x3e, 0xb0, 0x0a, 0x52, 0x61,
+ 0x00, 0xe4, 0x84, 0xab, 0xf4, 0x98, 0xe4, 0xe6,
+ 0xcd, 0xb1, 0xd4, 0x40, 0x31, 0x5f, 0x8f, 0x73,
+ 0x16, 0x6e, 0xc0, 0x3d, 0x07, 0x5d, 0x6b, 0x91,
+ 0x70, 0x71, 0x8a, 0x4b, 0xfe, 0xeb, 0xbe, 0x04,
+ 0x5d, 0x75, 0x0a, 0x74, 0x52, 0x1e, 0xd3, 0x94,
+ 0xc5, 0xcd, 0xc1, 0xd6, 0x12, 0x6a, 0x58, 0x52,
+ 0x6e, 0x45, 0x1f, 0x49, 0x09, 0x4c, 0x32, 0xf3,
+ 0x3d, 0x3d, 0x73, 0x15, 0xa3, 0xa5, 0x2f, 0xf2,
+ 0x02, 0x10, 0x1e, 0xaf, 0xf5, 0xb4, 0x78, 0x48,
+ 0x8a, 0x6c, 0x58, 0x71, 0x77, 0x91, 0x95, 0x57,
+ 0x79, 0xbf, 0x1f, 0x3e, 0xb3, 0xf8, 0xc4, 0x33,
+ 0x07, 0x5d, 0x96, 0x41, 0x76, 0xb1, 0xe1, 0xe0,
+ 0xa9, 0x97, 0x14, 0x99, 0x1d, 0xaa, 0x91, 0xbb,
+ 0xdf, 0x89, 0xf1, 0x0d, 0xd0, 0x52, 0xf9, 0xa7,
+ 0x4c, 0x82, 0xc0, 0xeb, 0xb7, 0xaf, 0x7b, 0x4b,
+ 0x5a, 0x2a, 0x7a, 0x4e, 0xb2, 0x69, 0x87, 0x28,
+ 0x84, 0xf7, 0x76, 0x56, 0xee, 0xf8, 0x37, 0x35,
+ 0xc9, 0xbc, 0x08, 0x8b, 0xfe, 0x1e, 0x54, 0xb3,
+ 0x01, 0xa7, 0x0f, 0x20, 0x70, 0xac, 0xa6, 0x6b,
+ 0x9f, 0x98, 0xfe, 0xdb, 0x3e, 0x4f, 0x9f, 0xfc,
+ 0x95, 0x37, 0xf4, 0x90, 0x61, 0x62, 0x60, 0xeb,
+ 0x7a, 0x4a, 0x56, 0xae, 0x49, 0xcc, 0x92, 0xff,
+ 0xd3, 0x06, 0xc6, 0x62, 0x4c, 0x05, 0x28, 0xa7,
+ 0x3f, 0xe9, 0xee, 0x70, 0x6f, 0xd2, 0x80, 0x41,
+ 0x4d, 0xa0, 0xbc, 0x00, 0xaf, 0x30, 0xe4, 0x34,
+ 0x61, 0xda, 0xb4, 0xff, 0x2a, 0x85, 0x8b, 0x1a,
+ 0xbf, 0xb5, 0xe4, 0x7f, 0x27, 0xee, 0xf3, 0x25,
+ 0xe6, 0x52, 0x2a, 0x83, 0xbe, 0xe4, 0x64, 0xc3,
+ 0x67, 0x0c, 0x9e, 0x0f, 0xba, 0xb4, 0x67, 0xd1,
+ 0x1b, 0x4a, 0xb0, 0xb2, 0xb4, 0xf2, 0x8a, 0x1b,
+ 0x21, 0x34, 0x3c, 0x97, 0x5a, 0xdb, 0x92, 0x8b,
+ 0x2d, 0xe9, 0x94, 0x4e, 0x11, 0xfb, 0xd4, 0x2e,
+ 0xc2, 0xed, 0xf9, 0x75, 0xfd, 0x1a, 0xef, 0x3b,
+ 0x98, 0x5d, 0xa9, 0x75, 0xd5, 0x14, 0x0a, 0xe3,
+ 0xda, 0x07, 0xa6, 0x20, 0x7b, 0x49, 0x47, 0x87,
+ 0xff, 0xf0, 0xe8, 0x7e, 0xcf, 0xc4, 0x2c, 0x02,
+ 0xdd, 0x53, 0xe9, 0x79, 0xc7, 0x6d, 0x16, 0x9f,
+ 0x2b, 0xd7, 0x1a, 0x36, 0x25, 0x5c, 0xba, 0x5c,
+ 0xdb, 0x44, 0x88, 0x99, 0x32, 0x2e, 0xb6, 0x3f,
+ 0xb4, 0xdd, 0x15, 0xeb, 0xec, 0x2a, 0x9e, 0xc5,
+ 0x37, 0x30, 0x2a, 0xd5, 0xc4, 0x2a, 0x9b, 0x40,
+ 0x97, 0x83, 0x94, 0xe7, 0x79, 0x79, 0x63, 0x4b,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t aes_cbc_192_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x34, 0x07, 0x20, 0x14, 0x64, 0x0b, 0xa2, 0x2c,
+ 0xed, 0xba, 0x46, 0x24, 0xa0, 0xe6, 0x99, 0x8a,
+ 0x20, 0x75, 0x5f, 0x9f, 0x2a, 0x10, 0xa6, 0x1c,
+ 0x52, 0x60, 0x18, 0x67, 0xd6, 0x0d, 0x90, 0x4e,
+ 0xbc, 0x25, 0x5f, 0x81, 0xb4, 0x10, 0xdb, 0xd9,
+ 0xaf, 0x36, 0x84, 0x5c, 0x20, 0x25, 0x25, 0xbf,
+ 0x0d, 0xfa, 0xc5, 0x75, 0x2b, 0xec, 0xf2, 0xa6,
+ 0x69, 0x5c, 0xfe, 0xee, 0x21, 0xd8, 0x87, 0xdf,
+ 0xe3, 0x83, 0xeb, 0xb3, 0x3f, 0x5b, 0xda, 0x37,
+ 0x11, 0x05, 0xf7, 0xd8, 0xe0, 0x94, 0x08, 0x2b,
+ 0x75, 0x6b, 0xf3, 0x40, 0x53, 0x85, 0xde, 0x7a,
+ 0x64, 0xb1, 0x0e, 0x5f, 0x01, 0xb5, 0xfb, 0x74,
+ 0x48, 0x9a, 0xd4, 0x41, 0x33, 0x70, 0x9b, 0x08,
+ 0x7e, 0x34, 0x60, 0xfc, 0xfa, 0xe6, 0x2c, 0xec,
+ 0x0e, 0xb7, 0x1a, 0xf1, 0x49, 0x48, 0x0c, 0xd4,
+ 0xd7, 0xbc, 0x60, 0x28, 0xdb, 0x57, 0xa4, 0x29,
+ 0x55, 0x2d, 0x92, 0xa6, 0xca, 0x9a, 0xaf, 0x4d,
+ 0x7f, 0xb8, 0x29, 0x9f, 0x50, 0x98, 0x21, 0x94,
+ 0x7a, 0x94, 0x44, 0x3d, 0xd1, 0xcf, 0xf4, 0x6f,
+ 0xad, 0xb4, 0x58, 0x66, 0x74, 0x01, 0x2c, 0x5b,
+ 0x8f, 0x1b, 0xa6, 0x09, 0xd0, 0x3f, 0x79, 0xc9,
+ 0x4f, 0x3b, 0x37, 0x0d, 0xb8, 0x07, 0xb0, 0x61,
+ 0xbc, 0x5a, 0x40, 0x3a, 0x10, 0x3c, 0x12, 0xe6,
+ 0x04, 0xc7, 0xd1, 0xe1, 0x18, 0x6f, 0xde, 0x72,
+ 0xf5, 0xcf, 0x24, 0x58, 0x76, 0xe1, 0xcd, 0x62,
+ 0x90, 0xc3, 0x16, 0xcc, 0x3f, 0xda, 0xd6, 0x6b,
+ 0x6a, 0xcc, 0x61, 0x76, 0xc1, 0xaf, 0xdc, 0x53,
+ 0xef, 0x06, 0x23, 0x22, 0x93, 0x11, 0x59, 0xf5,
+ 0x7f, 0x46, 0xac, 0xb8, 0x6c, 0x3b, 0x36, 0x69,
+ 0xc5, 0x14, 0x0a, 0x51, 0xa1, 0x5f, 0xb9, 0xc7,
+ 0x37, 0xe3, 0xd9, 0xaf, 0x8c, 0xe9, 0x49, 0xd4,
+ 0xf9, 0xf9, 0x5e, 0x1f, 0x5f, 0x7c, 0x07, 0xb5,
+ 0x1c, 0x9e, 0xbd, 0x10, 0x75, 0xc3, 0x93, 0x48,
+ 0xdc, 0x32, 0xe7, 0x55, 0x90, 0x48, 0x42, 0xc0,
+ 0x73, 0x20, 0x40, 0x17, 0xbb, 0x71, 0x30, 0xfe,
+ 0xd1, 0x84, 0xe9, 0x7d, 0x92, 0xd4, 0xff, 0xbe,
+ 0x3e, 0xd9, 0x41, 0xfb, 0x41, 0x43, 0x2b, 0x9f,
+ 0x04, 0x7b, 0xe7, 0x81, 0xbb, 0x2a, 0xd6, 0x7b,
+ 0x96, 0x72, 0x29, 0x30, 0x52, 0x5c, 0xea, 0xcc,
+ 0x4c, 0x77, 0xed, 0x5a, 0xd9, 0xab, 0x51, 0x90,
+ 0x21, 0x3b, 0x5b, 0x26, 0xeb, 0x14, 0xd5, 0xea,
+ 0x01, 0xb0, 0x7c, 0xbd, 0xa6, 0x3d, 0x7f, 0x42,
+ 0xd7, 0x7e, 0xf1, 0x6c, 0x71, 0x7d, 0xc0, 0x25,
+ 0x61, 0xe9, 0x66, 0xe1, 0xf2, 0x67, 0x99, 0xa1,
+ 0xe7, 0x3a, 0x6f, 0x88, 0x1e, 0x8b, 0x76, 0xed,
+ 0x50, 0x2c, 0x4e, 0xac, 0x73, 0xd7, 0xf2, 0x85,
+ 0x8f, 0xcc, 0xb1, 0x4f, 0x6c, 0x9a, 0xf7, 0x45,
+ 0x28, 0x4f, 0xfc, 0x3f, 0xf1, 0x80, 0xc3, 0xf3,
+ 0xce, 0x5e, 0xfc, 0x56, 0xd9, 0x45, 0xdd, 0x81,
+ 0xe3, 0x48, 0x22, 0xc9, 0xb8, 0x13, 0xc1, 0x48,
+ 0x6c, 0x95, 0x97, 0xc0, 0x91, 0x37, 0xf5, 0x8a,
+ 0x11, 0x3b, 0xab, 0xce, 0x7a, 0xb0, 0xb4, 0x4c,
+ 0xba, 0xc0, 0x91, 0x7f, 0x3c, 0x27, 0xe9, 0xc0,
+ 0x58, 0x92, 0x70, 0x67, 0xf4, 0x80, 0x40, 0x92,
+ 0x51, 0x80, 0x8e, 0x9d, 0x2d, 0x87, 0x89, 0x8e,
+ 0xe7, 0xd1, 0xb5, 0xc5, 0x4f, 0xd0, 0x86, 0x31,
+ 0x7f, 0x90, 0x77, 0x05, 0x35, 0xfe, 0xa7, 0xcb,
+ 0x9d, 0x94, 0xf3, 0xf8, 0xbb, 0x4f, 0xe1, 0xb3,
+ 0x48, 0x57, 0xbf, 0xd1, 0x77, 0xe8, 0x72, 0x31,
+ 0x4d, 0x2f, 0xe8, 0xa0, 0xf4, 0x7c, 0x25, 0x9c,
+ 0xcd, 0xa5, 0x7e, 0xd3, 0x30, 0xda, 0x46, 0xf5,
+ 0x48, 0x9e, 0x39, 0x34, 0x94, 0xd6, 0x24, 0x10,
+ 0xfc, 0x74, 0x2b, 0x6d, 0xcc, 0x00, 0x76, 0x3e,
+ 0x3b, 0x85, 0xfa, 0xef, 0x87, 0x70, 0x53, 0x4e,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t aes_cbc_192_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0xfe, 0xad, 0xf3, 0x4a, 0x9d, 0x64, 0x4e, 0x5d,
+ 0xaf, 0xa8, 0x44, 0x7e, 0xc9, 0x75, 0xe8, 0xd0,
+ 0x87, 0x73, 0x66, 0x4c, 0x77, 0x00, 0xfb, 0x7b,
+ 0x04, 0xe7, 0xd8, 0x82, 0x75, 0xe3, 0xa5, 0xbc,
+ 0xf3, 0x80, 0xae, 0x7c, 0xc9, 0x75, 0x9a, 0xc1,
+ 0x73, 0x49, 0x69, 0xf6, 0xa0, 0x49, 0x6e, 0x77,
+ 0x5f, 0x9b, 0x95, 0x9b, 0x9f, 0x41, 0x54, 0x57,
+ 0x0e, 0x3c, 0xe5, 0x2c, 0xbb, 0xbf, 0xd5, 0x76,
+ 0xf6, 0xb6, 0x05, 0xaa, 0x20, 0x5b, 0xdb, 0xcb,
+ 0x81, 0xad, 0x0c, 0x8a, 0x68, 0x94, 0x7d, 0x88,
+ 0xdc, 0x15, 0x6c, 0x89, 0x97, 0x53, 0x30, 0x96,
+ 0x4a, 0x54, 0xf9, 0x88, 0x00, 0xf7, 0x3b, 0x99,
+ 0xfc, 0x82, 0xe3, 0x48, 0xd2, 0x16, 0x2b, 0xba,
+ 0xd4, 0xba, 0x24, 0xd0, 0xd1, 0xb0, 0x8e, 0xcd,
+ 0x77, 0xdc, 0x01, 0xdf, 0xb2, 0x20, 0xc5, 0xa7,
+ 0x48, 0x2a, 0xcf, 0x56, 0xc8, 0x63, 0x6e, 0xc9,
+ 0xa8, 0xa4, 0xc2, 0x9c, 0x66, 0x25, 0x50, 0x77,
+ 0x08, 0x51, 0x92, 0xce, 0x3c, 0xaf, 0xff, 0xee,
+ 0x3e, 0x6d, 0x61, 0x37, 0xcd, 0x85, 0x67, 0x9c,
+ 0xe0, 0x7e, 0xa6, 0x17, 0x7b, 0x5f, 0x6a, 0xe2,
+ 0x4e, 0x76, 0xca, 0x95, 0x88, 0xdf, 0xad, 0x78,
+ 0x91, 0xfa, 0x9e, 0x71, 0x3e, 0xfd, 0x10, 0x78,
+ 0x32, 0x2b, 0x75, 0xbc, 0x3a, 0x06, 0x55, 0x8b,
+ 0x9b, 0xfb, 0x9c, 0x4b, 0xa1, 0x7d, 0x35, 0x3d,
+ 0x63, 0x80, 0x30, 0x61, 0xe0, 0x2d, 0x8a, 0x28,
+ 0xb4, 0x2d, 0x48, 0x9d, 0x27, 0x1a, 0x28, 0x86,
+ 0xfc, 0xfa, 0x93, 0xcf, 0x3e, 0x9c, 0x41, 0xc8,
+ 0xc5, 0x5e, 0x88, 0x22, 0xb8, 0xaf, 0x1d, 0x92,
+ 0xc5, 0x91, 0x1b, 0x1e, 0x95, 0x62, 0xbb, 0x80,
+ 0x0c, 0xae, 0x2a, 0xb3, 0x55, 0x77, 0x86, 0x39,
+ 0xa6, 0xed, 0xc1, 0xd2, 0xc4, 0x95, 0x7e, 0xd4,
+ 0xbe, 0xf3, 0x1b, 0xbc, 0x5e, 0x92, 0x0d, 0x9c,
+ 0x38, 0xb1, 0xb9, 0xd3, 0xf6, 0x3f, 0x97, 0xf9,
+ 0x48, 0x08, 0x2b, 0xa6, 0x98, 0x50, 0xc9, 0x84,
+ 0xec, 0x54, 0xe0, 0x1a, 0x65, 0x76, 0xf2, 0xbe,
+ 0x62, 0xb9, 0x40, 0x3a, 0xb1, 0xef, 0xa0, 0x51,
+ 0xab, 0x3a, 0xfa, 0xaf, 0x33, 0x32, 0xa5, 0x0c,
+ 0xc7, 0x9a, 0x9c, 0x5c, 0xa7, 0x8e, 0xc6, 0x4e,
+ 0x61, 0xe3, 0x83, 0xa1, 0xd4, 0x2c, 0xb2, 0x2c,
+ 0x46, 0x5a, 0xbf, 0x96, 0xeb, 0xda, 0x45, 0x2d,
+ 0x25, 0x37, 0x69, 0x1a, 0x6b, 0xd6, 0xbc, 0xe1,
+ 0x28, 0x65, 0xf9, 0xfc, 0xa7, 0xda, 0xf8, 0x79,
+ 0x87, 0x18, 0x99, 0x01, 0x74, 0x5a, 0x42, 0x79,
+ 0x8e, 0xe4, 0x23, 0x1a, 0x6c, 0xda, 0x93, 0x0f,
+ 0x19, 0xf0, 0xff, 0x0e, 0x25, 0x45, 0x1e, 0xbb,
+ 0x17, 0xca, 0x87, 0x6a, 0x9e, 0xd0, 0xd3, 0xd5,
+ 0x22, 0x5f, 0xce, 0x92, 0xeb, 0x82, 0x8e, 0x3e,
+ 0x4e, 0x99, 0x44, 0xa2, 0x9e, 0x78, 0x53, 0x89,
+ 0x4e, 0x45, 0x51, 0x41, 0x28, 0x91, 0xdb, 0x7e,
+ 0x8f, 0xac, 0xc2, 0xee, 0x09, 0xcb, 0xed, 0x04,
+ 0x7b, 0x37, 0xa1, 0x1d, 0x9c, 0x90, 0x19, 0xb1,
+ 0xdd, 0xc3, 0x22, 0xc8, 0x70, 0x07, 0x26, 0xce,
+ 0x4a, 0xc4, 0xde, 0xee, 0x87, 0xf3, 0x62, 0x69,
+ 0xed, 0xb2, 0x2d, 0x10, 0xc4, 0xfa, 0x86, 0x2e,
+ 0xd1, 0xb8, 0x58, 0xa3, 0xa4, 0x0b, 0x30, 0x87,
+ 0x23, 0x62, 0xed, 0xf3, 0x7b, 0x80, 0x7e, 0x4f,
+ 0xc2, 0xb3, 0xe8, 0xba, 0x25, 0x3e, 0xd3, 0x12,
+ 0x7e, 0x27, 0xd5, 0x72, 0x3b, 0x02, 0xf4, 0xfd,
+ 0x2f, 0x8b, 0xc2, 0x5f, 0x44, 0x40, 0x31, 0x88,
+ 0x73, 0x81, 0xa3, 0xcc, 0xc4, 0x78, 0x2b, 0xfc,
+ 0x41, 0x2e, 0xb2, 0xd0, 0xb4, 0x00, 0x29, 0xc1,
+ 0x46, 0xdf, 0xc1, 0xbd, 0x15, 0x59, 0xa3, 0x6a,
+ 0xc8, 0x2f, 0x29, 0x28, 0x12, 0x9b, 0x1e, 0xea,
+ 0x4e, 0xa9, 0x80, 0xa1, 0xb8, 0x89, 0x21, 0x3b,
+};
+
+const struct testvec aes_cbc_192_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t aes_cbc_256_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x1a, 0xa4, 0xe3, 0x09, 0x23, 0x2e, 0x91, 0x1b,
+ 0xa8, 0x3e, 0xda, 0x92, 0xb3, 0x22, 0xd2, 0xe8,
+ 0x8b, 0xed, 0x6c, 0xa7, 0x78, 0xe6, 0x32, 0x25,
+ 0xc4, 0x88, 0xd5, 0xb7, 0x6e, 0xef, 0xbf, 0x37,
+ 0x00, 0xd9, 0xb2, 0x55, 0x10, 0x4f, 0x7d, 0x84,
+ 0x3a, 0xae, 0xd2, 0xc6, 0x48, 0xdd, 0x3c, 0xd5,
+ 0x9b, 0xa7, 0xf8, 0xc2, 0xda, 0x6d, 0x14, 0xa2,
+ 0xdc, 0x54, 0x12, 0x8f, 0x1c, 0x22, 0x98, 0x6a,
+ 0xc0, 0x5f, 0x47, 0xa7, 0x78, 0xec, 0x79, 0x5d,
+ 0x04, 0xed, 0x5e, 0x20, 0x33, 0x53, 0x66, 0x40,
+ 0x83, 0x94, 0x5b, 0x34, 0x05, 0x25, 0x2e, 0x17,
+ 0xba, 0x23, 0x60, 0xb1, 0xd0, 0x27, 0xf0, 0x24,
+ 0xd2, 0x0b, 0xd3, 0xea, 0xa7, 0x13, 0x1e, 0xf9,
+ 0x56, 0xe1, 0xd4, 0xa2, 0x89, 0x5a, 0xaa, 0x42,
+ 0xa9, 0xd7, 0x85, 0x64, 0x9e, 0x44, 0x71, 0xa2,
+ 0xf9, 0xc3, 0xf4, 0x81, 0xbd, 0xa0, 0x40, 0xed,
+ 0x33, 0xeb, 0x09, 0x0f, 0x7f, 0x78, 0xe4, 0xd5,
+ 0x7b, 0x61, 0x42, 0xee, 0x65, 0x25, 0xcc, 0xba,
+ 0xc6, 0x99, 0x29, 0x25, 0x71, 0x9a, 0xf0, 0x0e,
+ 0x98, 0x3f, 0x12, 0xf2, 0xf9, 0x4d, 0x00, 0x3c,
+ 0xbe, 0x9f, 0x2b, 0x83, 0x1e, 0x5b, 0xab, 0x80,
+ 0x4c, 0x81, 0x82, 0x29, 0xbb, 0xeb, 0xc0, 0x89,
+ 0x07, 0x43, 0xdd, 0x69, 0xd3, 0x02, 0x6c, 0x1c,
+ 0x4b, 0xab, 0x44, 0x42, 0x6c, 0x25, 0xfc, 0xf5,
+ 0x73, 0xaa, 0x60, 0x48, 0xbc, 0xd2, 0x1c, 0x77,
+ 0x8b, 0x64, 0x3e, 0x5f, 0x24, 0xae, 0x14, 0x65,
+ 0xea, 0x18, 0xb1, 0xab, 0xbc, 0x3d, 0xa3, 0xb9,
+ 0xfc, 0xcc, 0x0f, 0x8d, 0x8e, 0x13, 0x0f, 0x4d,
+ 0x4e, 0xeb, 0x90, 0x9b, 0x1e, 0xbf, 0x2a, 0xc7,
+ 0xac, 0x5b, 0x11, 0xeb, 0x67, 0xf2, 0x9d, 0xef,
+ 0xf3, 0x66, 0x9e, 0x81, 0x9f, 0x24, 0x4d, 0xcd,
+ 0x4f, 0x31, 0xce, 0xc9, 0xa4, 0x2c, 0xd7, 0x58,
+ 0x7c, 0x2e, 0x88, 0xa2, 0xec, 0x4c, 0x02, 0x29,
+ 0x00, 0xbd, 0x14, 0x0f, 0xaa, 0xd8, 0xc3, 0x02,
+ 0x64, 0xdc, 0xa0, 0x15, 0xc8, 0xf6, 0x17, 0x8b,
+ 0x9c, 0xb3, 0xf2, 0x27, 0xc1, 0x3f, 0x60, 0x94,
+ 0x33, 0x10, 0x89, 0x49, 0x5f, 0xd2, 0x0e, 0xfe,
+ 0x9e, 0x99, 0x68, 0x95, 0xe4, 0x12, 0xfc, 0xe3,
+ 0x7f, 0xc4, 0xb1, 0x88, 0x4f, 0x66, 0xcd, 0x24,
+ 0x89, 0x09, 0xbb, 0x01, 0xf6, 0x9a, 0xe4, 0x41,
+ 0xee, 0x83, 0xd2, 0x28, 0xf5, 0x28, 0x49, 0x13,
+ 0x78, 0xfb, 0xb2, 0x0d, 0x5c, 0x97, 0xf4, 0x9c,
+ 0xe0, 0xdf, 0xef, 0x84, 0x36, 0x7d, 0xe5, 0x45,
+ 0xe0, 0xf8, 0xce, 0x82, 0x39, 0xc4, 0x54, 0x69,
+ 0xf1, 0x62, 0x7d, 0x1a, 0xf6, 0x6c, 0x20, 0x86,
+ 0x72, 0x4b, 0xf9, 0x3d, 0x87, 0x68, 0xec, 0x74,
+ 0x67, 0xee, 0xbd, 0xb8, 0xc6, 0x12, 0x91, 0x0f,
+ 0xf6, 0xd9, 0x4f, 0x34, 0x96, 0xa9, 0xe7, 0x52,
+ 0x7b, 0xe0, 0x08, 0x57, 0x0a, 0x8b, 0x09, 0xcb,
+ 0xd3, 0x3e, 0x4e, 0x64, 0xca, 0x38, 0x50, 0x07,
+ 0x0e, 0x7b, 0x95, 0x69, 0x1b, 0x82, 0xba, 0x50,
+ 0x93, 0x4f, 0x9a, 0x8e, 0x11, 0x9b, 0x64, 0xf5,
+ 0x6a, 0xd4, 0x81, 0xf0, 0x1f, 0xb8, 0x85, 0x90,
+ 0x9c, 0x79, 0xde, 0xcb, 0x50, 0xba, 0xa9, 0x56,
+ 0x66, 0xd1, 0x1e, 0x78, 0xa8, 0x6a, 0xd5, 0xa5,
+ 0x83, 0x73, 0xe2, 0x88, 0xf2, 0x04, 0x33, 0x61,
+ 0xdf, 0x89, 0xd5, 0x3d, 0x03, 0x4e, 0x94, 0xb0,
+ 0x0f, 0x8d, 0x4d, 0xb4, 0x09, 0xb2, 0xf1, 0xb0,
+ 0xe7, 0xfe, 0xb0, 0x18, 0xe2, 0xfc, 0x92, 0xeb,
+ 0x2d, 0x7d, 0x56, 0x29, 0xbd, 0x34, 0x20, 0x7c,
+ 0xb6, 0xe7, 0x7b, 0xd7, 0x95, 0xa5, 0x0d, 0x10,
+ 0xbc, 0x7d, 0x9d, 0xd9, 0xbe, 0xc7, 0x23, 0x44,
+ 0x37, 0xb3, 0x98, 0x36, 0x33, 0x1a, 0x11, 0xfe,
+ 0x41, 0xea, 0x59, 0x48, 0x75, 0x34, 0xf6, 0xc4,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t aes_cbc_256_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x58, 0xfc, 0x1e, 0x48, 0x66, 0x7d, 0x91, 0xc7,
+ 0x56, 0xa3, 0x41, 0x89, 0xe8, 0x1e, 0x02, 0x77,
+ 0x93, 0x38, 0x12, 0x99, 0x06, 0x0d, 0xf3, 0x6d,
+ 0x2a, 0x5d, 0x3d, 0x7b, 0x4e, 0x05, 0x4f, 0x8f,
+ 0xe3, 0x86, 0x76, 0xfe, 0x11, 0x9d, 0xde, 0xd4,
+ 0x83, 0xd9, 0x47, 0x8d, 0x51, 0xdf, 0x4a, 0x24,
+ 0x2d, 0x11, 0xf0, 0xbd, 0xde, 0x17, 0x7e, 0x52,
+ 0x20, 0xc7, 0x17, 0x88, 0x2e, 0xa4, 0xd5, 0xa0,
+ 0x1e, 0xbc, 0x61, 0x15, 0x1e, 0x52, 0xa1, 0x8b,
+ 0xe9, 0xe4, 0x1f, 0x81, 0x49, 0x64, 0x17, 0xd4,
+ 0xef, 0xb6, 0x40, 0x05, 0x2f, 0x36, 0xf7, 0x39,
+ 0x03, 0x05, 0x80, 0xff, 0xf2, 0x1a, 0x15, 0xf1,
+ 0xfc, 0xaf, 0x71, 0x51, 0x73, 0xc5, 0x9e, 0x2f,
+ 0xd1, 0x7a, 0x2d, 0xd7, 0xed, 0x90, 0x11, 0xd2,
+ 0x80, 0x49, 0x46, 0x9f, 0x13, 0xa7, 0x32, 0x33,
+ 0x24, 0x39, 0x59, 0xf1, 0xed, 0x64, 0x75, 0x61,
+ 0xc3, 0x14, 0x68, 0x48, 0xf7, 0xc7, 0xbd, 0xe0,
+ 0x21, 0x59, 0x91, 0x07, 0x70, 0x83, 0x8f, 0xfc,
+ 0x59, 0x72, 0xca, 0xdd, 0x60, 0xa0, 0xbb, 0xb1,
+ 0x2f, 0xb8, 0x98, 0x8d, 0xf2, 0x4d, 0x3a, 0x19,
+ 0xbc, 0x6b, 0x37, 0xad, 0xd2, 0xb5, 0x7d, 0x1c,
+ 0x4a, 0x7b, 0x58, 0x76, 0x2e, 0xf5, 0x6b, 0xaf,
+ 0x4c, 0x92, 0x00, 0x8a, 0xb4, 0xa3, 0x86, 0x66,
+ 0x07, 0xc7, 0xfc, 0x57, 0x3c, 0x73, 0xf4, 0x8b,
+ 0xef, 0xb6, 0xae, 0x01, 0xfb, 0x88, 0x13, 0x04,
+ 0xa8, 0xc7, 0xec, 0xc4, 0xe0, 0x67, 0x3a, 0xfb,
+ 0x67, 0xce, 0x83, 0x9b, 0x8e, 0x66, 0xff, 0xa6,
+ 0x17, 0x1b, 0x66, 0x27, 0xdf, 0x2a, 0xfe, 0xf3,
+ 0x9a, 0xba, 0x59, 0xce, 0x28, 0xd4, 0xd2, 0x40,
+ 0x78, 0xb6, 0xe9, 0x7d, 0x8b, 0xcc, 0x47, 0x5c,
+ 0xf6, 0x5d, 0xc2, 0x5d, 0xe0, 0xa7, 0x61, 0x8b,
+ 0xe6, 0x7d, 0x38, 0xb6, 0xea, 0xfb, 0x13, 0x31,
+ 0x33, 0x2a, 0xb5, 0x45, 0x7b, 0xf6, 0x9f, 0x29,
+ 0x06, 0x2d, 0xd8, 0xab, 0x36, 0x27, 0xe4, 0x6c,
+ 0xf1, 0xab, 0xcd, 0xb9, 0x08, 0x0f, 0x4b, 0x8f,
+ 0x22, 0xea, 0xe4, 0x5d, 0x22, 0x05, 0x2e, 0xd4,
+ 0xd7, 0xff, 0x58, 0x50, 0x38, 0x17, 0x6f, 0x80,
+ 0x61, 0x98, 0xdc, 0xd4, 0x9f, 0x8f, 0xeb, 0x13,
+ 0xd3, 0x86, 0xe9, 0xa9, 0xe7, 0x07, 0x6f, 0x4f,
+ 0x54, 0x9e, 0x37, 0x3d, 0xbc, 0x82, 0x5f, 0x4f,
+ 0xd5, 0x0c, 0x21, 0xaa, 0x91, 0xcb, 0x06, 0x9a,
+ 0xaf, 0x57, 0x14, 0xfb, 0x57, 0xd8, 0x63, 0x58,
+ 0x0a, 0x03, 0x12, 0x0e, 0xd3, 0x37, 0x0b, 0xbf,
+ 0x67, 0xb7, 0x9d, 0xb7, 0x6b, 0x38, 0xeb, 0x17,
+ 0xd8, 0xb9, 0x5a, 0x37, 0x9f, 0x98, 0xa6, 0xca,
+ 0x7e, 0x95, 0xa7, 0x27, 0xc4, 0xd3, 0x15, 0x00,
+ 0x7b, 0x5e, 0x05, 0xc0, 0xc1, 0xb0, 0xe0, 0x13,
+ 0x7d, 0x91, 0xed, 0x2b, 0x99, 0x74, 0x1c, 0x16,
+ 0x45, 0x55, 0x21, 0xbc, 0x7c, 0x52, 0x87, 0x0f,
+ 0xb9, 0xbf, 0x71, 0x7c, 0x3a, 0x81, 0x72, 0x97,
+ 0xf8, 0x86, 0x61, 0x20, 0x17, 0xd8, 0xc8, 0xe0,
+ 0xfc, 0x42, 0x0f, 0x5b, 0xd6, 0x7e, 0x99, 0x81,
+ 0x5c, 0x2e, 0x2e, 0x3e, 0xe8, 0xce, 0x12, 0xcf,
+ 0x2c, 0xe6, 0x7a, 0x00, 0x5d, 0x36, 0x00, 0x92,
+ 0x60, 0xc5, 0xc0, 0xfd, 0xe0, 0xa3, 0xb9, 0x3e,
+ 0x92, 0xf8, 0x8f, 0xe2, 0x0f, 0xe5, 0xb4, 0x6a,
+ 0xd6, 0x5b, 0xa4, 0x5d, 0xf9, 0xef, 0x7e, 0xae,
+ 0xdd, 0xd0, 0x5d, 0x40, 0xfe, 0xa7, 0xed, 0xda,
+ 0xa9, 0x48, 0x1d, 0x6f, 0xc2, 0xd3, 0x35, 0x65,
+ 0xd8, 0x67, 0xc2, 0x9d, 0xed, 0xf7, 0x9f, 0x7b,
+ 0x7c, 0xd4, 0x03, 0xe0, 0xa6, 0xf9, 0x3c, 0xd0,
+ 0x21, 0x98, 0x60, 0xa6, 0x59, 0x86, 0xbd, 0x40,
+ 0x17, 0x47, 0x82, 0xb9, 0xe1, 0x11, 0x8d, 0x4b,
+ 0xcd, 0x1f, 0x54, 0x96, 0x17, 0x42, 0x22, 0x44,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t aes_cbc_256_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x1d, 0x65, 0xb2, 0x4e, 0xfa, 0x3f, 0xdb, 0xab,
+ 0x34, 0x9d, 0x37, 0x03, 0x17, 0x44, 0xed, 0x5b,
+ 0xf7, 0x1b, 0x6b, 0xc0, 0x5c, 0xfe, 0x5b, 0xcd,
+ 0xf0, 0xaf, 0x26, 0x82, 0x97, 0x12, 0xb8, 0x4f,
+ 0x76, 0x3d, 0x07, 0xd8, 0x29, 0x56, 0x3c, 0xbd,
+ 0x0e, 0xac, 0xd1, 0x8f, 0x53, 0x1a, 0x8f, 0xcd,
+ 0x04, 0x5b, 0x49, 0xe0, 0xf0, 0xea, 0xc9, 0x8a,
+ 0x08, 0x3d, 0x1f, 0x2d, 0x8c, 0xec, 0xb8, 0xea,
+ 0xe9, 0x24, 0xd1, 0x93, 0xd7, 0x9a, 0x0f, 0xd7,
+ 0x0f, 0x6b, 0xa0, 0x08, 0x58, 0x81, 0x68, 0x2f,
+ 0xde, 0x36, 0xb5, 0x87, 0xd9, 0xcd, 0x82, 0x13,
+ 0x36, 0x16, 0x6a, 0x9a, 0x02, 0xca, 0xda, 0x6f,
+ 0x51, 0x87, 0x75, 0x47, 0x89, 0xa4, 0x10, 0x60,
+ 0xfb, 0x1a, 0x74, 0x55, 0x6d, 0x18, 0x8d, 0x42,
+ 0x74, 0x2d, 0x12, 0x56, 0xc0, 0xcd, 0xa2, 0x57,
+ 0x53, 0x31, 0x8c, 0x7a, 0x8b, 0xa8, 0x6d, 0x89,
+ 0x81, 0xaf, 0x9c, 0xd9, 0x56, 0xe6, 0xdc, 0xe7,
+ 0x84, 0x0f, 0x81, 0x56, 0x1a, 0xc8, 0x5d, 0xa3,
+ 0xe0, 0x93, 0xea, 0x62, 0x7d, 0xa4, 0x5a, 0x58,
+ 0x8f, 0x05, 0x85, 0x34, 0x0c, 0x74, 0x8e, 0xe7,
+ 0xb4, 0x47, 0x93, 0x61, 0xbf, 0x61, 0x0a, 0xa2,
+ 0x37, 0xcd, 0x82, 0x9d, 0x55, 0x9e, 0x32, 0x9e,
+ 0x30, 0xce, 0x61, 0x89, 0xed, 0x25, 0x9e, 0x7c,
+ 0x2a, 0xcd, 0x39, 0x45, 0x56, 0xbb, 0x1a, 0xe8,
+ 0xb0, 0x75, 0x8f, 0xa1, 0x59, 0x09, 0xf8, 0x7a,
+ 0xbd, 0x4f, 0x69, 0x8b, 0xe2, 0xf3, 0xbe, 0x9b,
+ 0xea, 0x5f, 0x2c, 0x1e, 0x84, 0x69, 0xb2, 0xfa,
+ 0xaf, 0x1d, 0xc8, 0xcf, 0x76, 0x91, 0xd0, 0x7a,
+ 0xc9, 0xd1, 0x3d, 0xa5, 0xae, 0xae, 0xd7, 0x23,
+ 0xbb, 0xb3, 0x5e, 0x8a, 0x10, 0xc6, 0xbe, 0xa6,
+ 0x79, 0x69, 0x40, 0x83, 0x81, 0xe6, 0xb1, 0xa3,
+ 0x7e, 0x57, 0x44, 0x66, 0xc9, 0x2e, 0x84, 0xdd,
+ 0x00, 0xb4, 0x93, 0xae, 0x8f, 0x23, 0x12, 0xd6,
+ 0x54, 0x56, 0xc3, 0x51, 0xe5, 0xf7, 0x69, 0x47,
+ 0x00, 0x97, 0x71, 0x29, 0xcb, 0xcf, 0xeb, 0xd9,
+ 0xaf, 0xc0, 0x2f, 0x5c, 0xd7, 0x3e, 0xe4, 0x07,
+ 0xc9, 0x65, 0x2e, 0x8c, 0xf4, 0x54, 0xce, 0x8b,
+ 0xc7, 0x0c, 0xb4, 0x74, 0x56, 0x79, 0xa6, 0x40,
+ 0x4a, 0x58, 0xfd, 0x3f, 0x7b, 0x4c, 0xe9, 0xdb,
+ 0x33, 0x85, 0x6f, 0xf7, 0x5a, 0x9f, 0x6f, 0xc4,
+ 0x60, 0xad, 0x1b, 0xe2, 0xf5, 0xeb, 0x42, 0x7d,
+ 0xa4, 0x43, 0x8d, 0x40, 0xfa, 0x53, 0xcc, 0xf0,
+ 0x5f, 0x90, 0x0d, 0x04, 0x51, 0xb1, 0x48, 0xc7,
+ 0x90, 0x65, 0xb2, 0xef, 0xca, 0xc5, 0x9a, 0xec,
+ 0xde, 0x84, 0x21, 0x22, 0xeb, 0x97, 0xdd, 0xa2,
+ 0x9d, 0x71, 0xb1, 0xe0, 0x86, 0x58, 0xc3, 0x57,
+ 0xd5, 0x5a, 0x6f, 0xdc, 0xe5, 0xcc, 0x64, 0xc7,
+ 0x80, 0x2a, 0xef, 0x90, 0x91, 0x96, 0xb4, 0xeb,
+ 0xda, 0x3b, 0x7b, 0xbc, 0x14, 0x60, 0x52, 0xe5,
+ 0xe5, 0xc8, 0x6a, 0x99, 0x46, 0x9d, 0x00, 0x77,
+ 0x3b, 0x60, 0x75, 0x04, 0x06, 0x4a, 0x5a, 0x64,
+ 0x6f, 0x2f, 0x58, 0x77, 0x27, 0x9a, 0xc5, 0x90,
+ 0x37, 0xa7, 0xf3, 0x89, 0x72, 0x47, 0x4e, 0x08,
+ 0xa5, 0x79, 0x11, 0x2f, 0x22, 0x5a, 0xbb, 0xcf,
+ 0x76, 0xb9, 0x28, 0xc8, 0xc4, 0x5a, 0xe5, 0x90,
+ 0xf7, 0x02, 0xe4, 0xf9, 0x0c, 0x4c, 0x9a, 0xb1,
+ 0xa7, 0x99, 0x34, 0xd4, 0x77, 0x66, 0xff, 0x3c,
+ 0x50, 0x9a, 0xff, 0x13, 0x49, 0xd6, 0x5a, 0xf6,
+ 0x17, 0x6f, 0xca, 0x1a, 0xef, 0x0a, 0x2d, 0xf1,
+ 0xdf, 0xd0, 0xa5, 0x6f, 0xa6, 0x22, 0x3c, 0x1f,
+ 0xcf, 0xe7, 0xec, 0x23, 0x39, 0x6e, 0xc0, 0x37,
+ 0x31, 0x84, 0xff, 0xe2, 0x5a, 0xd6, 0x88, 0x74,
+ 0x15, 0x15, 0x46, 0x21, 0x00, 0xe4, 0x13, 0x9a,
+ 0xfa, 0xb2, 0x49, 0x7e, 0x79, 0xfb, 0x8a, 0x2a,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t aes_cbc_256_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xc1, 0x4a, 0x3c, 0x90, 0xba, 0xd4, 0x9c, 0xe7,
+ 0xf2, 0x5b, 0x3a, 0xc4, 0xce, 0x4a, 0x26, 0x4a,
+ 0x9c, 0x3f, 0xe5, 0x7a, 0x15, 0xbb, 0xbd, 0x3e,
+ 0xc6, 0x49, 0x47, 0x04, 0x4e, 0x8b, 0x73, 0xa6,
+ 0x02, 0x3a, 0xc1, 0xa3, 0xfa, 0x1a, 0xd0, 0x03,
+ 0xf7, 0x26, 0x9f, 0xad, 0x06, 0x8f, 0x86, 0xdc,
+ 0xb8, 0x73, 0x87, 0xa2, 0x82, 0xc6, 0x80, 0xe1,
+ 0xac, 0x3d, 0x16, 0x4c, 0xc3, 0x7c, 0x86, 0x01,
+ 0xa5, 0x7a, 0x1c, 0x4b, 0x56, 0x68, 0xf6, 0x06,
+ 0x99, 0x32, 0x42, 0x40, 0xf1, 0xb7, 0x44, 0x4b,
+ 0xd1, 0xdb, 0xad, 0x4e, 0xa6, 0xc2, 0x5f, 0xee,
+ 0x21, 0x1d, 0x58, 0xc6, 0xd5, 0x02, 0xef, 0xb2,
+ 0x38, 0xef, 0x29, 0x25, 0xfd, 0x28, 0x8a, 0x5b,
+ 0x8b, 0x36, 0x1a, 0xd6, 0x68, 0xf8, 0x77, 0xed,
+ 0xba, 0xb3, 0xa5, 0x6f, 0x76, 0x5e, 0xb5, 0xd4,
+ 0xc3, 0xb8, 0xf9, 0x67, 0x7a, 0x18, 0x43, 0xb6,
+ 0x65, 0x07, 0x48, 0x1d, 0x56, 0x20, 0x11, 0xe1,
+ 0x62, 0x6b, 0x70, 0xc9, 0x18, 0xa9, 0xa7, 0x36,
+ 0xbf, 0x31, 0x74, 0xe3, 0x33, 0x02, 0x96, 0x7a,
+ 0xf5, 0xd9, 0x8d, 0x05, 0x2b, 0xfd, 0x85, 0x4f,
+ 0x03, 0x0f, 0xe1, 0xfb, 0x1a, 0x57, 0xaf, 0xdc,
+ 0xff, 0xff, 0x5a, 0x96, 0x27, 0xca, 0xf3, 0x0c,
+ 0xd8, 0x39, 0x3e, 0xbe, 0x41, 0x5a, 0x21, 0x95,
+ 0x66, 0xe0, 0x69, 0x14, 0x2b, 0x18, 0xf2, 0x9b,
+ 0xf4, 0x22, 0xdf, 0xa9, 0xe4, 0x7d, 0x32, 0x5d,
+ 0x98, 0xa0, 0xe0, 0xe1, 0xe1, 0xbe, 0xae, 0x58,
+ 0x63, 0xbe, 0x4b, 0x97, 0x83, 0xaa, 0x67, 0xd3,
+ 0x1a, 0x70, 0xca, 0x82, 0x98, 0x77, 0x74, 0x1a,
+ 0xf2, 0x3d, 0x6a, 0x7b, 0x8e, 0xc8, 0xca, 0x34,
+ 0x44, 0xb8, 0xc0, 0xd0, 0x77, 0x8c, 0x4a, 0x5c,
+ 0xae, 0xd3, 0x17, 0x7c, 0x12, 0x47, 0x3e, 0xe2,
+ 0x2e, 0x51, 0xe0, 0x52, 0x88, 0x8e, 0xe9, 0x68,
+ 0xb6, 0x13, 0xf8, 0x69, 0xc9, 0x4b, 0xdd, 0x91,
+ 0x27, 0xb0, 0x22, 0x0c, 0x7d, 0xad, 0xb0, 0x75,
+ 0xe8, 0x76, 0x34, 0xc2, 0xd9, 0xf3, 0x20, 0xf7,
+ 0x1d, 0x0f, 0x07, 0x61, 0xc2, 0xb8, 0x7d, 0x00,
+ 0xa6, 0x68, 0xad, 0xd4, 0x0b, 0xa4, 0xa0, 0x32,
+ 0x6d, 0xa5, 0xc0, 0x07, 0x65, 0xae, 0xda, 0x2e,
+ 0xd6, 0xb7, 0xd3, 0x99, 0x8b, 0x37, 0x08, 0x13,
+ 0x6a, 0x94, 0xe9, 0xe4, 0xea, 0x34, 0xee, 0x07,
+ 0xee, 0x77, 0xb1, 0x3f, 0x54, 0x05, 0xbe, 0x66,
+ 0x7f, 0xf2, 0x70, 0x34, 0x45, 0xa7, 0x4b, 0x27,
+ 0xef, 0xe6, 0x39, 0x2e, 0x13, 0x41, 0xdb, 0x2d,
+ 0x1f, 0x76, 0x11, 0x76, 0x33, 0xf3, 0x92, 0x33,
+ 0x69, 0x16, 0x34, 0x86, 0x23, 0xc5, 0xfa, 0xaf,
+ 0xff, 0xbf, 0xee, 0x84, 0x56, 0xf6, 0x1e, 0x54,
+ 0x37, 0x32, 0x79, 0x83, 0x45, 0x04, 0x6f, 0x0e,
+ 0x75, 0x75, 0xd9, 0xd6, 0x4a, 0x87, 0xfb, 0x3c,
+ 0xb1, 0xcf, 0x66, 0xab, 0xa4, 0xaa, 0xf6, 0x96,
+ 0xb0, 0xcd, 0xaf, 0xac, 0x2c, 0x6d, 0x72, 0xca,
+ 0x43, 0xef, 0xb7, 0xa0, 0x4c, 0x62, 0xba, 0x7e,
+ 0x59, 0x0b, 0xff, 0x90, 0x49, 0x63, 0xf6, 0x31,
+ 0x8b, 0x50, 0x20, 0x82, 0x7d, 0xf0, 0x2d, 0xe4,
+ 0x5b, 0xda, 0xdf, 0xb0, 0xfb, 0x07, 0x7b, 0xe3,
+ 0x5f, 0xac, 0xd8, 0xe5, 0xa0, 0x3e, 0xc5, 0x60,
+ 0x94, 0xbc, 0xf7, 0x7e, 0xdc, 0x18, 0x27, 0x20,
+ 0xb1, 0xdd, 0x51, 0x4a, 0xb2, 0xe0, 0xc0, 0xe7,
+ 0x5d, 0x0f, 0x88, 0xb2, 0xa0, 0x42, 0x73, 0xfb,
+ 0xc4, 0x24, 0xa7, 0x17, 0x8a, 0xc9, 0x6d, 0x34,
+ 0xe8, 0x7b, 0x51, 0x37, 0x32, 0x3f, 0xf8, 0x7e,
+ 0x92, 0xe4, 0x87, 0xd2, 0x89, 0x66, 0xb0, 0xf6,
+ 0xc2, 0xba, 0x2f, 0x42, 0x8f, 0x1d, 0x5d, 0x81,
+ 0xad, 0xfd, 0x00, 0xbc, 0xa9, 0x11, 0x96, 0xae,
+ 0x80, 0xf1, 0x27, 0xe0, 0xeb, 0x5b, 0x60, 0x39,
+};
+
+const struct testvec aes_cbc_256_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t aes_cbc_256_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0xe5, 0x55, 0xd9, 0xae, 0xc0, 0x66, 0x2d, 0x2f,
+ 0x11, 0xb1, 0x27, 0xd2, 0xb2, 0x73, 0xe4, 0x0a,
+ 0x85, 0xb5, 0x3c, 0x79, 0x78, 0xd6, 0x35, 0x3d,
+ 0x46, 0xac, 0xa3, 0x81, 0x55, 0x76, 0x86, 0xfc,
+ 0x37, 0xa0, 0x95, 0xc2, 0x30, 0xc9, 0x19, 0xc2,
+ 0x5f, 0xb0, 0x13, 0xa2, 0xa8, 0xe1, 0xc7, 0xb7,
+ 0x61, 0x54, 0xd8, 0xe6, 0xca, 0x94, 0x6f, 0x47,
+ 0x87, 0x33, 0x58, 0xd9, 0xd5, 0xd2, 0x95, 0x73,
+ 0x87, 0x9a, 0x31, 0xe5, 0x2e, 0x95, 0x83, 0x7d,
+ 0xdc, 0x0f, 0xc5, 0x2f, 0x14, 0xbc, 0x80, 0xac,
+ 0x47, 0xd6, 0xd8, 0x17, 0x9e, 0xf7, 0xff, 0x5b,
+ 0x85, 0x05, 0x91, 0xe0, 0x73, 0xd2, 0x5c, 0xa7,
+ 0x41, 0xf8, 0xcb, 0x3d, 0x38, 0x14, 0x28, 0x3e,
+ 0x89, 0x6f, 0xd4, 0xac, 0xb6, 0x11, 0x35, 0x67,
+ 0x7b, 0xef, 0x0d, 0xd8, 0x4d, 0xdd, 0x7e, 0x73,
+ 0xcd, 0x58, 0x0f, 0x5a, 0xcf, 0x42, 0xc5, 0x2f,
+ 0x61, 0x62, 0x13, 0xde, 0xcd, 0x2e, 0x22, 0xab,
+ 0xb0, 0x47, 0x5c, 0x1e, 0x5c, 0xc5, 0x49, 0xc6,
+ 0x3b, 0x0c, 0xe3, 0xb3, 0x59, 0xbf, 0xbf, 0x85,
+ 0xf6, 0x0a, 0x3d, 0x14, 0x74, 0x2a, 0xcd, 0xea,
+ 0x67, 0xd6, 0x80, 0x42, 0x3c, 0x6a, 0x92, 0x50,
+ 0x95, 0x73, 0xb5, 0x7a, 0xb2, 0xbc, 0x76, 0xe5,
+ 0x8f, 0xf3, 0x85, 0x5e, 0xcd, 0xf9, 0xb4, 0x9d,
+ 0xa8, 0x0a, 0xda, 0x95, 0x11, 0x2e, 0x22, 0x0c,
+ 0x2f, 0xb0, 0xbf, 0x92, 0x6b, 0x45, 0xec, 0x20,
+ 0xd2, 0x2b, 0x98, 0x3f, 0x4f, 0x97, 0xf2, 0xed,
+ 0xf7, 0x9b, 0x89, 0x4e, 0xd6, 0x59, 0xbb, 0x24,
+ 0x22, 0x44, 0x9f, 0x03, 0xb5, 0x42, 0xc8, 0x97,
+ 0xc7, 0xdb, 0x21, 0xfc, 0xcf, 0x33, 0xa1, 0xf1,
+ 0xc0, 0x1f, 0x28, 0x77, 0xee, 0xa5, 0x6a, 0x12,
+ 0xef, 0x8b, 0x48, 0xd1, 0xb3, 0xac, 0x65, 0x69,
+ 0x46, 0x04, 0x39, 0xb1, 0x9e, 0xfa, 0xab, 0x21,
+ 0x51, 0xa4, 0x33, 0xe9, 0x58, 0x5d, 0xf1, 0xc6,
+ 0x69, 0x44, 0x8c, 0x17, 0xf9, 0xaa, 0x96, 0xcb,
+ 0x40, 0xb4, 0x5c, 0x83, 0x76, 0x1e, 0x8a, 0x2b,
+ 0x5f, 0x6b, 0xc1, 0x73, 0xd4, 0x5f, 0x48, 0xa3,
+ 0x0e, 0x07, 0x69, 0x12, 0xc1, 0xbd, 0x13, 0xad,
+ 0xe2, 0xcf, 0x3d, 0x96, 0xd8, 0xaf, 0xed, 0xdc,
+ 0x4c, 0x72, 0xf6, 0xce, 0x15, 0x86, 0x88, 0x8c,
+ 0xbb, 0x60, 0xb3, 0xb9, 0xde, 0x42, 0x58, 0x6e,
+ 0xc4, 0x58, 0xac, 0x77, 0x8d, 0x35, 0x23, 0x5f,
+ 0xc3, 0xf9, 0x33, 0x46, 0x17, 0x80, 0x31, 0xfd,
+ 0xcd, 0x0a, 0x1e, 0x9b, 0xac, 0x42, 0xda, 0x70,
+ 0x54, 0x9a, 0xeb, 0x22, 0x27, 0x09, 0x0c, 0x6c,
+ 0x18, 0x1d, 0x1a, 0x5b, 0x86, 0x4d, 0x80, 0xca,
+ 0x4d, 0xda, 0x0e, 0x9a, 0x8e, 0x61, 0x04, 0x68,
+ 0x29, 0x08, 0x3b, 0xae, 0x14, 0x7d, 0x8e, 0x43,
+ 0x7a, 0xa7, 0x83, 0xcf, 0xb3, 0x95, 0xd3, 0x42,
+ 0x2d, 0x6b, 0xd8, 0x5c, 0x43, 0x31, 0x5b, 0x9c,
+ 0x18, 0x30, 0x0d, 0x61, 0x9c, 0xab, 0x29, 0x55,
+ 0xdd, 0x84, 0x24, 0x21, 0xec, 0x44, 0xad, 0xf3,
+ 0xb3, 0x70, 0x77, 0x2b, 0xfc, 0x3f, 0x99, 0xb8,
+ 0x50, 0x26, 0x8d, 0x96, 0xa2, 0x22, 0x99, 0x33,
+ 0x53, 0xa8, 0x5d, 0x84, 0x9b, 0x76, 0x26, 0x6e,
+ 0x75, 0x14, 0x7e, 0x63, 0xc6, 0x7a, 0x4f, 0x5c,
+ 0xfe, 0x4b, 0x80, 0xee, 0xb3, 0x32, 0x8d, 0x25,
+ 0x1c, 0x80, 0x7b, 0x3d, 0xd3, 0x84, 0x01, 0x1e,
+ 0x16, 0xa4, 0xca, 0x0d, 0x38, 0x40, 0x03, 0x6f,
+ 0x81, 0x8b, 0x5c, 0xad, 0x22, 0xfa, 0x6f, 0xeb,
+ 0x60, 0xa1, 0xcb, 0x2d, 0x97, 0xf8, 0xa6, 0x5e,
+ 0xbe, 0x93, 0xb7, 0xe6, 0x66, 0xbf, 0x9b, 0xd2,
+ 0x5c, 0x31, 0xcc, 0x70, 0x0c, 0xf1, 0xfb, 0x9f,
+ 0x09, 0x1b, 0xc2, 0x85, 0x2f, 0x22, 0x7c, 0x95,
+ 0x58, 0x09, 0xce, 0x9c, 0x7c, 0x50, 0xca, 0x89,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t aes_cbc_256_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x37, 0x4d, 0x25, 0xdb, 0x35, 0xe0, 0x8b, 0x82,
+ 0x5f, 0x77, 0xd2, 0x53, 0xd1, 0x1f, 0xf0, 0x91,
+ 0x5b, 0xd8, 0x93, 0x2f, 0xb2, 0x81, 0xbd, 0x75,
+ 0xf0, 0xd8, 0xff, 0x46, 0x8c, 0x9d, 0xf6, 0xe2,
+ 0x99, 0x1e, 0x76, 0x9d, 0x00, 0x3a, 0xe3, 0xcf,
+ 0x6d, 0x24, 0xa8, 0xe8, 0xb4, 0xa7, 0xa0, 0x87,
+ 0xa8, 0x43, 0x01, 0x21, 0x29, 0x70, 0x39, 0x2d,
+ 0x0b, 0x2a, 0xe9, 0x11, 0x57, 0x86, 0x13, 0xd4,
+ 0x1c, 0x1b, 0x59, 0x19, 0xc4, 0x7d, 0x2c, 0x94,
+ 0xc7, 0x01, 0xb8, 0x96, 0x01, 0xd2, 0x01, 0x17,
+ 0x97, 0x41, 0x68, 0xab, 0xba, 0x9c, 0xc8, 0xad,
+ 0x4e, 0xd7, 0xa8, 0x4c, 0x96, 0x3f, 0xf9, 0xfc,
+ 0x7e, 0xd7, 0x59, 0xe8, 0x25, 0x51, 0x4d, 0x1d,
+ 0x99, 0xfd, 0x0b, 0xe9, 0x88, 0x23, 0xd1, 0x4b,
+ 0x30, 0x6e, 0x18, 0x7c, 0xe3, 0x7a, 0x54, 0x2a,
+ 0x4f, 0x2a, 0x99, 0x8f, 0xaf, 0xd7, 0x5e, 0x25,
+ 0xfe, 0x9c, 0x47, 0x09, 0x63, 0x38, 0x0d, 0x5f,
+ 0xb3, 0x43, 0xa6, 0x66, 0x9b, 0xc5, 0x3d, 0x88,
+ 0x5e, 0xc7, 0x60, 0x99, 0x8e, 0xcb, 0x6a, 0x65,
+ 0x60, 0x92, 0x88, 0xe1, 0x2b, 0xfe, 0x83, 0x34,
+ 0x92, 0xa6, 0x6c, 0x22, 0x56, 0x5b, 0x75, 0x8a,
+ 0x93, 0xc3, 0x72, 0xca, 0xff, 0x59, 0x3b, 0xd8,
+ 0xa0, 0x80, 0x56, 0x98, 0x62, 0x8a, 0x70, 0xf2,
+ 0x5d, 0xd9, 0x40, 0x6b, 0xbf, 0x9f, 0x71, 0x8d,
+ 0x2e, 0x38, 0xe8, 0x06, 0x42, 0xa9, 0x95, 0x70,
+ 0x31, 0xd1, 0xe9, 0x6c, 0xab, 0xbb, 0xed, 0x25,
+ 0xe8, 0xca, 0xe8, 0xa4, 0x98, 0x82, 0xf5, 0xe3,
+ 0x11, 0x3c, 0xc4, 0xea, 0xea, 0x88, 0x56, 0x91,
+ 0xd6, 0x5d, 0xaa, 0xf7, 0xe9, 0x49, 0x2f, 0x42,
+ 0x5b, 0x76, 0xef, 0xed, 0x03, 0x9e, 0x5f, 0x4d,
+ 0x65, 0x25, 0xa5, 0xe8, 0x26, 0xba, 0x03, 0x4f,
+ 0x0e, 0x39, 0xd2, 0x53, 0x62, 0x98, 0x81, 0x9d,
+ 0x8e, 0xad, 0x50, 0x17, 0x9f, 0xcc, 0x34, 0x45,
+ 0x19, 0x5c, 0x1c, 0xd1, 0xbc, 0x71, 0x89, 0xaa,
+ 0x9a, 0x65, 0x55, 0x6f, 0x78, 0xd4, 0xd3, 0x5b,
+ 0x27, 0x8d, 0x94, 0x46, 0xd9, 0x95, 0xb3, 0x5f,
+ 0xc4, 0x35, 0x8d, 0xba, 0x1c, 0x40, 0x52, 0xd1,
+ 0x99, 0x27, 0x5d, 0x42, 0x28, 0xef, 0xcb, 0x9b,
+ 0x10, 0x7a, 0x19, 0xbf, 0x72, 0xa3, 0x4a, 0xb9,
+ 0x56, 0x83, 0x39, 0xa6, 0xb2, 0xcd, 0x48, 0x85,
+ 0xf9, 0xcc, 0x72, 0x88, 0xb3, 0x5a, 0x9b, 0x45,
+ 0xb2, 0xd3, 0x66, 0x2d, 0x24, 0x51, 0x68, 0x91,
+ 0x9d, 0x47, 0x6a, 0xb3, 0x9a, 0x60, 0xb3, 0xcd,
+ 0x6b, 0x43, 0x96, 0x21, 0xa0, 0x65, 0x43, 0xde,
+ 0x4f, 0x6e, 0xb5, 0x81, 0x50, 0x7e, 0xca, 0x4b,
+ 0xdb, 0x30, 0xf2, 0xcb, 0x28, 0x3b, 0x19, 0x6a,
+ 0x0a, 0xfa, 0x05, 0x5e, 0x61, 0xde, 0x76, 0x7e,
+ 0xdf, 0xd9, 0xa9, 0x1b, 0xd0, 0x8a, 0xb5, 0x04,
+ 0x51, 0xf5, 0x66, 0xa2, 0x32, 0x21, 0xb2, 0xa9,
+ 0x40, 0x78, 0x60, 0x9d, 0xdc, 0x45, 0xbe, 0xb4,
+ 0x3a, 0xba, 0xd1, 0xec, 0x31, 0x53, 0x24, 0x22,
+ 0x70, 0x99, 0xda, 0xc8, 0x17, 0x04, 0x87, 0x2c,
+ 0x89, 0x86, 0x24, 0xec, 0x52, 0x12, 0x6a, 0x51,
+ 0x1e, 0x2a, 0x5e, 0x96, 0xfb, 0xac, 0x95, 0x4a,
+ 0x1a, 0x06, 0x8f, 0xdf, 0xa7, 0x26, 0xeb, 0x6c,
+ 0x79, 0x4a, 0x77, 0xea, 0xb3, 0xb1, 0x3a, 0x19,
+ 0xe6, 0x5e, 0xe2, 0x26, 0x1b, 0x85, 0x3c, 0x9b,
+ 0x1d, 0x05, 0x1d, 0xbe, 0x5c, 0x25, 0x7f, 0x45,
+ 0x4c, 0x09, 0x4c, 0xc1, 0x47, 0xa5, 0x44, 0xfc,
+ 0x04, 0x2b, 0xad, 0x53, 0xac, 0x57, 0x22, 0x54,
+ 0x13, 0x7c, 0xc9, 0x96, 0x44, 0xda, 0x74, 0x95,
+ 0x6e, 0x8c, 0xe6, 0x6a, 0x05, 0x05, 0xf3, 0x8c,
+ 0x81, 0xaf, 0xbc, 0xb1, 0x91, 0xe7, 0xfd, 0x81,
+ 0x3f, 0x47, 0xc2, 0x6f, 0x0d, 0x62, 0xf6, 0x6e,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t aes_cbc_256_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x5a, 0x24, 0xfd, 0xee, 0x9a, 0x44, 0xfb, 0xac,
+ 0x3e, 0x46, 0x53, 0x95, 0x9e, 0xeb, 0x1f, 0xd9,
+ 0xfd, 0xc6, 0x4f, 0xae, 0x0b, 0xc8, 0xf2, 0xbd,
+ 0x77, 0x16, 0x7a, 0x2e, 0x8e, 0xec, 0x7a, 0x53,
+ 0xf4, 0xe0, 0x34, 0xba, 0x6e, 0xfa, 0xc4, 0x69,
+ 0xd7, 0x50, 0x13, 0x03, 0xfb, 0xb9, 0x66, 0x96,
+ 0xd4, 0x21, 0x67, 0xcc, 0x4c, 0x4d, 0x10, 0x2f,
+ 0x17, 0xeb, 0x41, 0xf4, 0x65, 0x80, 0x0b, 0x57,
+ 0x2d, 0xdf, 0xcf, 0x9f, 0xb9, 0xd8, 0x53, 0x36,
+ 0xbc, 0x1d, 0x9a, 0xe3, 0x17, 0xe7, 0x08, 0x23,
+ 0xb3, 0x60, 0xfe, 0xdf, 0x24, 0x06, 0xc5, 0x86,
+ 0x74, 0x89, 0xa3, 0xb2, 0xfc, 0x4a, 0x57, 0xf5,
+ 0xa6, 0x96, 0xfb, 0x56, 0xf0, 0xf4, 0xdc, 0xdc,
+ 0xb8, 0x53, 0x5f, 0xb2, 0xb0, 0x8d, 0x2d, 0x90,
+ 0x3d, 0x78, 0x4d, 0x42, 0x3a, 0x74, 0xa4, 0x8e,
+ 0x41, 0x7c, 0x2a, 0xff, 0xe4, 0x57, 0x1c, 0x9d,
+ 0x94, 0xc5, 0x5d, 0xd8, 0x8b, 0x88, 0x48, 0x15,
+ 0x16, 0x8a, 0xf3, 0x07, 0x3a, 0xee, 0x65, 0x24,
+ 0xbc, 0x7f, 0x58, 0xad, 0xed, 0xf2, 0xbd, 0x18,
+ 0x88, 0x1a, 0x80, 0x6e, 0xb7, 0x93, 0xe0, 0x45,
+ 0x04, 0xb0, 0xfc, 0xf9, 0x48, 0x76, 0xaf, 0xec,
+ 0x08, 0xca, 0x99, 0x64, 0x85, 0x98, 0x2c, 0xd8,
+ 0x85, 0x72, 0x32, 0xbe, 0x92, 0x18, 0xdd, 0xab,
+ 0x20, 0x8f, 0x8e, 0x11, 0xc6, 0x08, 0xf9, 0x8b,
+ 0xaf, 0x5f, 0xa9, 0xe5, 0x11, 0xc7, 0x45, 0x91,
+ 0x6e, 0x47, 0xaa, 0x0f, 0x4c, 0xf4, 0xc1, 0xb0,
+ 0x75, 0x4c, 0xba, 0x1d, 0xb3, 0x33, 0xf7, 0x47,
+ 0xbe, 0x94, 0x0b, 0x2e, 0xfa, 0x38, 0x5e, 0x5f,
+ 0x0a, 0xc2, 0x0c, 0x4e, 0x72, 0x29, 0x16, 0xc1,
+ 0x82, 0x70, 0xd4, 0xd3, 0x1b, 0x25, 0xbe, 0x0d,
+ 0x6b, 0x0a, 0x13, 0x9f, 0x4d, 0x3d, 0x7b, 0x10,
+ 0x9f, 0x93, 0x43, 0x50, 0xd1, 0x17, 0x08, 0x77,
+ 0x23, 0x58, 0x35, 0x41, 0x23, 0xf6, 0x9c, 0x6f,
+ 0x2e, 0x81, 0x6e, 0x75, 0x9b, 0x9f, 0x37, 0x4f,
+ 0xb7, 0xa1, 0xce, 0xde, 0x0c, 0x74, 0x99, 0x31,
+ 0x0e, 0x27, 0x42, 0x99, 0xdd, 0x93, 0x03, 0x6b,
+ 0x44, 0x22, 0xd4, 0xc8, 0x67, 0xb5, 0xb2, 0x4d,
+ 0x11, 0x2e, 0x80, 0x09, 0xa2, 0x5b, 0xcf, 0x0c,
+ 0xff, 0xfa, 0x51, 0xe5, 0x9b, 0xdd, 0x11, 0xa1,
+ 0x17, 0x04, 0x9e, 0xc8, 0xd8, 0x1d, 0xc1, 0x5c,
+ 0xc3, 0xde, 0x83, 0x77, 0xa3, 0xec, 0x59, 0x7e,
+ 0xfb, 0xe8, 0x45, 0xff, 0xc3, 0xb3, 0xd3, 0x9e,
+ 0x3e, 0xc4, 0x75, 0xca, 0xc1, 0x77, 0xee, 0x1a,
+ 0xdc, 0x58, 0xab, 0x27, 0xc1, 0xfe, 0x21, 0x26,
+ 0x9a, 0xe0, 0x15, 0xab, 0x35, 0x8d, 0xbc, 0x22,
+ 0x37, 0xbb, 0x4e, 0xab, 0x9d, 0xa2, 0xaf, 0xf9,
+ 0x45, 0x17, 0xb1, 0xb8, 0xd4, 0x52, 0x1e, 0x67,
+ 0xeb, 0xac, 0xe0, 0x87, 0x6c, 0xe4, 0x7a, 0x03,
+ 0x73, 0xe4, 0x43, 0xeb, 0x3b, 0x57, 0x3f, 0x56,
+ 0x4b, 0x6c, 0x26, 0x81, 0x27, 0xbf, 0x7e, 0x59,
+ 0xcd, 0xab, 0x67, 0x8c, 0x4b, 0x6f, 0xa5, 0x47,
+ 0x2c, 0x45, 0x28, 0x5a, 0x3d, 0x88, 0x53, 0xf9,
+ 0x25, 0xdf, 0x5d, 0xba, 0xf7, 0x18, 0xa7, 0x3d,
+ 0x79, 0xb4, 0x43, 0x59, 0x77, 0xf9, 0xd5, 0x5d,
+ 0x4f, 0x31, 0x56, 0x8c, 0x21, 0xb5, 0xc0, 0xa2,
+ 0xca, 0x04, 0x62, 0x2c, 0xc8, 0xa8, 0x11, 0x82,
+ 0x1b, 0xde, 0xad, 0x20, 0x5b, 0xd2, 0x63, 0xfb,
+ 0x6d, 0xba, 0xd4, 0xcc, 0xb4, 0x9d, 0xe8, 0xa8,
+ 0xd1, 0x06, 0x81, 0xf0, 0xb9, 0xd4, 0x90, 0x30,
+ 0xcd, 0x0a, 0xe8, 0xd2, 0x8c, 0x7a, 0xbf, 0xf6,
+ 0x0d, 0xa0, 0xae, 0x1b, 0x21, 0x18, 0x93, 0x18,
+ 0x71, 0xe1, 0xa0, 0x63, 0x5a, 0x9d, 0x4e, 0x6a,
+ 0x52, 0x90, 0xaf, 0xdb, 0x26, 0x1e, 0xa9, 0xa1,
+ 0xc7, 0xf9, 0xf8, 0xa7, 0x3f, 0x85, 0xa1, 0xa4,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t aes_cbc_256_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0x83, 0x77, 0xd8, 0xa8, 0x6a, 0x36, 0x41, 0x72,
+ 0xb6, 0x03, 0x4e, 0x5e, 0x39, 0x36, 0xe3, 0xf5,
+ 0xd0, 0x1b, 0x0d, 0x97, 0x78, 0x46, 0xee, 0xfd,
+ 0x34, 0x34, 0x16, 0xa0, 0x44, 0xcf, 0x0b, 0xdc,
+ 0xfb, 0x82, 0x98, 0xa2, 0x79, 0xc2, 0xe7, 0x1c,
+ 0x43, 0x43, 0x4c, 0x7f, 0xe7, 0xa6, 0xe6, 0x10,
+ 0x9e, 0x65, 0xb2, 0x09, 0xc7, 0x5f, 0xaa, 0xb7,
+ 0xb8, 0xad, 0x83, 0xd5, 0x9e, 0xd1, 0xb2, 0xce,
+ 0x4b, 0xa4, 0x5d, 0xbc, 0xd6, 0xf6, 0x0a, 0xe7,
+ 0x1b, 0xe9, 0x86, 0xbc, 0x72, 0xcc, 0x6f, 0xcc,
+ 0xf2, 0xde, 0x08, 0x48, 0xa2, 0x20, 0x31, 0x6a,
+ 0xdd, 0xbe, 0xc5, 0x36, 0x55, 0xff, 0xce, 0xfa,
+ 0xdf, 0x60, 0x26, 0x77, 0x7f, 0xd0, 0xfa, 0xd7,
+ 0x76, 0x70, 0x14, 0x11, 0xbf, 0x57, 0xc2, 0xdd,
+ 0x5f, 0xd3, 0x50, 0x49, 0xf8, 0xd1, 0xa7, 0xe2,
+ 0x8b, 0x89, 0xa0, 0xbc, 0x44, 0x42, 0x45, 0x10,
+ 0xfe, 0x66, 0x3d, 0x56, 0x09, 0x21, 0x7c, 0x49,
+ 0x30, 0xde, 0xe2, 0x4b, 0x26, 0x65, 0x8a, 0xe4,
+ 0x79, 0x08, 0x3a, 0xca, 0x36, 0x4f, 0x97, 0x3c,
+ 0xe4, 0x6a, 0xc3, 0xdb, 0xce, 0xac, 0x78, 0x76,
+ 0x25, 0x81, 0x7a, 0x01, 0x7b, 0xd8, 0xf1, 0x00,
+ 0x8d, 0x2e, 0xb7, 0x98, 0x3c, 0x86, 0x20, 0xa3,
+ 0x4c, 0x24, 0x2a, 0x78, 0x3a, 0x8d, 0xeb, 0xcd,
+ 0xae, 0xe1, 0x32, 0xf8, 0x21, 0x37, 0x30, 0x27,
+ 0xe1, 0xf3, 0x14, 0x60, 0x96, 0x77, 0x37, 0x50,
+ 0xa2, 0x92, 0xae, 0xe5, 0xd8, 0xea, 0x1a, 0x7e,
+ 0xa3, 0xd1, 0x04, 0x17, 0x03, 0x51, 0x2f, 0x21,
+ 0xa7, 0x00, 0x23, 0xb3, 0x24, 0xd8, 0x7d, 0xb7,
+ 0x4c, 0x51, 0xb1, 0xaf, 0xb0, 0x64, 0xe4, 0x62,
+ 0x91, 0x4c, 0xd5, 0x4b, 0xe8, 0xfb, 0x95, 0x61,
+ 0xa4, 0x6f, 0xf8, 0xb8, 0xea, 0xa9, 0xb2, 0x10,
+ 0xd3, 0x96, 0xcb, 0x1c, 0xdc, 0x86, 0x43, 0x26,
+ 0x2d, 0x39, 0xc2, 0xa7, 0x69, 0xfa, 0x8f, 0x3a,
+ 0xe7, 0xe0, 0x27, 0xbe, 0xc2, 0xe8, 0xd5, 0x05,
+ 0xbe, 0x5a, 0x96, 0xdc, 0x86, 0xcd, 0x93, 0x75,
+ 0x1b, 0x61, 0x40, 0x8c, 0x60, 0x64, 0x79, 0x85,
+ 0x6c, 0xed, 0x39, 0x72, 0x26, 0x69, 0xba, 0xb2,
+ 0xff, 0xa8, 0x68, 0x29, 0x03, 0xf7, 0x26, 0xe7,
+ 0x0f, 0x53, 0x1b, 0x5b, 0x37, 0x21, 0x68, 0x70,
+ 0x1c, 0x39, 0x7f, 0x5b, 0x31, 0xca, 0xde, 0xed,
+ 0x33, 0x8d, 0xaf, 0xe6, 0x01, 0xd5, 0x72, 0x5f,
+ 0x46, 0x44, 0x34, 0x1b, 0x4c, 0xd7, 0x75, 0xf0,
+ 0x47, 0x16, 0x6c, 0xd6, 0x65, 0x3c, 0xd3, 0xc2,
+ 0xb1, 0x46, 0x7d, 0xd5, 0x5c, 0x48, 0x5b, 0x61,
+ 0x3e, 0x88, 0xff, 0x24, 0x5c, 0x7b, 0xf7, 0xa9,
+ 0x44, 0xcb, 0x3b, 0x3e, 0x3b, 0x93, 0x24, 0x46,
+ 0x7e, 0x34, 0x8d, 0xc4, 0x2b, 0xb7, 0x8e, 0x22,
+ 0x9e, 0x87, 0x62, 0xca, 0xbc, 0x10, 0x09, 0x4a,
+ 0x4b, 0x0b, 0xdb, 0x57, 0x9b, 0xa9, 0x3e, 0xa8,
+ 0x99, 0x59, 0xa0, 0x12, 0xf3, 0xa5, 0xe4, 0x91,
+ 0xbb, 0xb9, 0x05, 0x8d, 0xcf, 0xb9, 0xcb, 0x36,
+ 0x97, 0xb2, 0x6a, 0x31, 0x8f, 0xcb, 0xf8, 0x5a,
+ 0x2f, 0x9e, 0xa1, 0xf9, 0x7a, 0xf4, 0x10, 0x0e,
+ 0xe7, 0x7f, 0x4c, 0xcb, 0xe3, 0x83, 0x17, 0x39,
+ 0x34, 0xef, 0x49, 0x35, 0x68, 0x50, 0x80, 0xf9,
+ 0xcd, 0x3a, 0x10, 0xf6, 0x71, 0x1a, 0x94, 0xc3,
+ 0xec, 0xb9, 0x36, 0x84, 0x36, 0xe7, 0x3f, 0x6f,
+ 0x9b, 0xa9, 0x2b, 0x5c, 0x96, 0x49, 0x26, 0xda,
+ 0xb3, 0x08, 0x3d, 0x5e, 0x9e, 0x59, 0xdf, 0x0f,
+ 0xfc, 0xbe, 0xa8, 0x0b, 0xbc, 0xaa, 0x32, 0xf0,
+ 0xa5, 0x21, 0x50, 0x15, 0x7e, 0x46, 0xb9, 0x76,
+ 0x09, 0x4e, 0x4b, 0x6f, 0x9f, 0xc7, 0x8c, 0x6d,
+ 0x80, 0x37, 0xf9, 0xaa, 0xd1, 0x5f, 0x12, 0xb9,
+ 0xb3, 0x15, 0xe4, 0x96, 0xa1, 0x01, 0xd5, 0xa0,
+};
+
+const struct testvec aes_cbc_256_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * 256 bits key from IEEE 1619/D16, NUL terminated.
+ */
+static const char aes_xts_256_key[33] = {
+ 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45,
+ 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26,
+ 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93,
+ 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95,
+ 0
+};
+
+/*
+ * 512 bits key from IEEE 1619/D16, NUL terminated.
+ */
+static const char aes_xts_512_key[65] = {
+ 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45,
+ 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26,
+ 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69,
+ 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27,
+ 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93,
+ 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95,
+ 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37,
+ 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92,
+ 0
+};
+
+/*
+ * Vector 4 from IEEE 1619/D16, blkno 0.
+ */
+static const uint8_t aes_xts_256_vec4_ptxt[SECSIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+static const uint8_t aes_xts_256_vec4_ctxt[SECSIZE] = {
+ 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76,
+ 0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2,
+ 0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25,
+ 0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c,
+ 0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f,
+ 0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00,
+ 0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad,
+ 0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12,
+ 0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5,
+ 0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5,
+ 0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc,
+ 0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce,
+ 0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4,
+ 0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84,
+ 0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a,
+ 0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65,
+ 0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89,
+ 0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51,
+ 0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15,
+ 0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8,
+ 0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed,
+ 0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91,
+ 0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e,
+ 0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34,
+ 0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b,
+ 0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5,
+ 0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4,
+ 0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c,
+ 0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd,
+ 0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3,
+ 0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f,
+ 0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e,
+ 0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91,
+ 0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19,
+ 0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1,
+ 0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc,
+ 0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed,
+ 0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde,
+ 0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98,
+ 0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3,
+ 0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca,
+ 0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6,
+ 0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc,
+ 0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44,
+ 0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0,
+ 0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95,
+ 0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4,
+ 0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd,
+ 0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13,
+ 0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7,
+ 0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a,
+ 0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52,
+ 0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a,
+ 0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38,
+ 0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e,
+ 0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e,
+ 0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad,
+ 0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8,
+ 0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c,
+ 0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d,
+ 0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f,
+ 0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2,
+ 0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea,
+ 0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68,
+};
+
+/*
+ * Vector 5 from IEEE 1619/D16, blkno 1.
+ */
+static const uint8_t aes_xts_256_vec5_ptxt[SECSIZE] = {
+ 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76,
+ 0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2,
+ 0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25,
+ 0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c,
+ 0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f,
+ 0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00,
+ 0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad,
+ 0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12,
+ 0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5,
+ 0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5,
+ 0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc,
+ 0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce,
+ 0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4,
+ 0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84,
+ 0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a,
+ 0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65,
+ 0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89,
+ 0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51,
+ 0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15,
+ 0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8,
+ 0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed,
+ 0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91,
+ 0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e,
+ 0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34,
+ 0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b,
+ 0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5,
+ 0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4,
+ 0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c,
+ 0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd,
+ 0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3,
+ 0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f,
+ 0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e,
+ 0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91,
+ 0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19,
+ 0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1,
+ 0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc,
+ 0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed,
+ 0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde,
+ 0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98,
+ 0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3,
+ 0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca,
+ 0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6,
+ 0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc,
+ 0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44,
+ 0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0,
+ 0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95,
+ 0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4,
+ 0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd,
+ 0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13,
+ 0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7,
+ 0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a,
+ 0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52,
+ 0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a,
+ 0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38,
+ 0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e,
+ 0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e,
+ 0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad,
+ 0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8,
+ 0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c,
+ 0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d,
+ 0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f,
+ 0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2,
+ 0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea,
+ 0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68,
+};
+
+static const uint8_t aes_xts_256_vec5_ctxt[SECSIZE] = {
+ 0x26, 0x4d, 0x3c, 0xa8, 0x51, 0x21, 0x94, 0xfe,
+ 0xc3, 0x12, 0xc8, 0xc9, 0x89, 0x1f, 0x27, 0x9f,
+ 0xef, 0xdd, 0x60, 0x8d, 0x0c, 0x02, 0x7b, 0x60,
+ 0x48, 0x3a, 0x3f, 0xa8, 0x11, 0xd6, 0x5e, 0xe5,
+ 0x9d, 0x52, 0xd9, 0xe4, 0x0e, 0xc5, 0x67, 0x2d,
+ 0x81, 0x53, 0x2b, 0x38, 0xb6, 0xb0, 0x89, 0xce,
+ 0x95, 0x1f, 0x0f, 0x9c, 0x35, 0x59, 0x0b, 0x8b,
+ 0x97, 0x8d, 0x17, 0x52, 0x13, 0xf3, 0x29, 0xbb,
+ 0x1c, 0x2f, 0xd3, 0x0f, 0x2f, 0x7f, 0x30, 0x49,
+ 0x2a, 0x61, 0xa5, 0x32, 0xa7, 0x9f, 0x51, 0xd3,
+ 0x6f, 0x5e, 0x31, 0xa7, 0xc9, 0xa1, 0x2c, 0x28,
+ 0x60, 0x82, 0xff, 0x7d, 0x23, 0x94, 0xd1, 0x8f,
+ 0x78, 0x3e, 0x1a, 0x8e, 0x72, 0xc7, 0x22, 0xca,
+ 0xaa, 0xa5, 0x2d, 0x8f, 0x06, 0x56, 0x57, 0xd2,
+ 0x63, 0x1f, 0xd2, 0x5b, 0xfd, 0x8e, 0x5b, 0xaa,
+ 0xd6, 0xe5, 0x27, 0xd7, 0x63, 0x51, 0x75, 0x01,
+ 0xc6, 0x8c, 0x5e, 0xdc, 0x3c, 0xdd, 0x55, 0x43,
+ 0x5c, 0x53, 0x2d, 0x71, 0x25, 0xc8, 0x61, 0x4d,
+ 0xee, 0xd9, 0xad, 0xaa, 0x3a, 0xca, 0xde, 0x58,
+ 0x88, 0xb8, 0x7b, 0xef, 0x64, 0x1c, 0x4c, 0x99,
+ 0x4c, 0x80, 0x91, 0xb5, 0xbc, 0xd3, 0x87, 0xf3,
+ 0x96, 0x3f, 0xb5, 0xbc, 0x37, 0xaa, 0x92, 0x2f,
+ 0xbf, 0xe3, 0xdf, 0x4e, 0x5b, 0x91, 0x5e, 0x6e,
+ 0xb5, 0x14, 0x71, 0x7b, 0xdd, 0x2a, 0x74, 0x07,
+ 0x9a, 0x50, 0x73, 0xf5, 0xc4, 0xbf, 0xd4, 0x6a,
+ 0xdf, 0x7d, 0x28, 0x2e, 0x7a, 0x39, 0x3a, 0x52,
+ 0x57, 0x9d, 0x11, 0xa0, 0x28, 0xda, 0x4d, 0x9c,
+ 0xd9, 0xc7, 0x71, 0x24, 0xf9, 0x64, 0x8e, 0xe3,
+ 0x83, 0xb1, 0xac, 0x76, 0x39, 0x30, 0xe7, 0x16,
+ 0x2a, 0x8d, 0x37, 0xf3, 0x50, 0xb2, 0xf7, 0x4b,
+ 0x84, 0x72, 0xcf, 0x09, 0x90, 0x20, 0x63, 0xc6,
+ 0xb3, 0x2e, 0x8c, 0x2d, 0x92, 0x90, 0xce, 0xfb,
+ 0xd7, 0x34, 0x6d, 0x1c, 0x77, 0x9a, 0x0d, 0xf5,
+ 0x0e, 0xdc, 0xde, 0x45, 0x31, 0xda, 0x07, 0xb0,
+ 0x99, 0xc6, 0x38, 0xe8, 0x3a, 0x75, 0x59, 0x44,
+ 0xdf, 0x2a, 0xef, 0x1a, 0xa3, 0x17, 0x52, 0xfd,
+ 0x32, 0x3d, 0xcb, 0x71, 0x0f, 0xb4, 0xbf, 0xbb,
+ 0x9d, 0x22, 0xb9, 0x25, 0xbc, 0x35, 0x77, 0xe1,
+ 0xb8, 0x94, 0x9e, 0x72, 0x9a, 0x90, 0xbb, 0xaf,
+ 0xea, 0xcf, 0x7f, 0x78, 0x79, 0xe7, 0xb1, 0x14,
+ 0x7e, 0x28, 0xba, 0x0b, 0xae, 0x94, 0x0d, 0xb7,
+ 0x95, 0xa6, 0x1b, 0x15, 0xec, 0xf4, 0xdf, 0x8d,
+ 0xb0, 0x7b, 0x82, 0x4b, 0xb0, 0x62, 0x80, 0x2c,
+ 0xc9, 0x8a, 0x95, 0x45, 0xbb, 0x2a, 0xae, 0xed,
+ 0x77, 0xcb, 0x3f, 0xc6, 0xdb, 0x15, 0xdc, 0xd7,
+ 0xd8, 0x0d, 0x7d, 0x5b, 0xc4, 0x06, 0xc4, 0x97,
+ 0x0a, 0x34, 0x78, 0xad, 0xa8, 0x89, 0x9b, 0x32,
+ 0x91, 0x98, 0xeb, 0x61, 0xc1, 0x93, 0xfb, 0x62,
+ 0x75, 0xaa, 0x8c, 0xa3, 0x40, 0x34, 0x4a, 0x75,
+ 0xa8, 0x62, 0xae, 0xbe, 0x92, 0xee, 0xe1, 0xce,
+ 0x03, 0x2f, 0xd9, 0x50, 0xb4, 0x7d, 0x77, 0x04,
+ 0xa3, 0x87, 0x69, 0x23, 0xb4, 0xad, 0x62, 0x84,
+ 0x4b, 0xf4, 0xa0, 0x9c, 0x4d, 0xbe, 0x8b, 0x43,
+ 0x97, 0x18, 0x4b, 0x74, 0x71, 0x36, 0x0c, 0x95,
+ 0x64, 0x88, 0x0a, 0xed, 0xdd, 0xb9, 0xba, 0xa4,
+ 0xaf, 0x2e, 0x75, 0x39, 0x4b, 0x08, 0xcd, 0x32,
+ 0xff, 0x47, 0x9c, 0x57, 0xa0, 0x7d, 0x3e, 0xab,
+ 0x5d, 0x54, 0xde, 0x5f, 0x97, 0x38, 0xb8, 0xd2,
+ 0x7f, 0x27, 0xa9, 0xf0, 0xab, 0x11, 0x79, 0x9d,
+ 0x7b, 0x7f, 0xfe, 0xfb, 0x27, 0x04, 0xc9, 0x5c,
+ 0x6a, 0xd1, 0x2c, 0x39, 0xf1, 0xe8, 0x67, 0xa4,
+ 0xb7, 0xb1, 0xd7, 0x81, 0x8a, 0x4b, 0x75, 0x3d,
+ 0xfd, 0x2a, 0x89, 0xcc, 0xb4, 0x5e, 0x00, 0x1a,
+ 0x03, 0xa8, 0x67, 0xb1, 0x87, 0xf2, 0x25, 0xdd,
+};
+
+/*
+ * Vector 6 from IEEE 1619/D16, blkno 2.
+ */
+static const uint8_t aes_xts_256_vec6_ptxt[SECSIZE] = {
+ 0x26, 0x4d, 0x3c, 0xa8, 0x51, 0x21, 0x94, 0xfe,
+ 0xc3, 0x12, 0xc8, 0xc9, 0x89, 0x1f, 0x27, 0x9f,
+ 0xef, 0xdd, 0x60, 0x8d, 0x0c, 0x02, 0x7b, 0x60,
+ 0x48, 0x3a, 0x3f, 0xa8, 0x11, 0xd6, 0x5e, 0xe5,
+ 0x9d, 0x52, 0xd9, 0xe4, 0x0e, 0xc5, 0x67, 0x2d,
+ 0x81, 0x53, 0x2b, 0x38, 0xb6, 0xb0, 0x89, 0xce,
+ 0x95, 0x1f, 0x0f, 0x9c, 0x35, 0x59, 0x0b, 0x8b,
+ 0x97, 0x8d, 0x17, 0x52, 0x13, 0xf3, 0x29, 0xbb,
+ 0x1c, 0x2f, 0xd3, 0x0f, 0x2f, 0x7f, 0x30, 0x49,
+ 0x2a, 0x61, 0xa5, 0x32, 0xa7, 0x9f, 0x51, 0xd3,
+ 0x6f, 0x5e, 0x31, 0xa7, 0xc9, 0xa1, 0x2c, 0x28,
+ 0x60, 0x82, 0xff, 0x7d, 0x23, 0x94, 0xd1, 0x8f,
+ 0x78, 0x3e, 0x1a, 0x8e, 0x72, 0xc7, 0x22, 0xca,
+ 0xaa, 0xa5, 0x2d, 0x8f, 0x06, 0x56, 0x57, 0xd2,
+ 0x63, 0x1f, 0xd2, 0x5b, 0xfd, 0x8e, 0x5b, 0xaa,
+ 0xd6, 0xe5, 0x27, 0xd7, 0x63, 0x51, 0x75, 0x01,
+ 0xc6, 0x8c, 0x5e, 0xdc, 0x3c, 0xdd, 0x55, 0x43,
+ 0x5c, 0x53, 0x2d, 0x71, 0x25, 0xc8, 0x61, 0x4d,
+ 0xee, 0xd9, 0xad, 0xaa, 0x3a, 0xca, 0xde, 0x58,
+ 0x88, 0xb8, 0x7b, 0xef, 0x64, 0x1c, 0x4c, 0x99,
+ 0x4c, 0x80, 0x91, 0xb5, 0xbc, 0xd3, 0x87, 0xf3,
+ 0x96, 0x3f, 0xb5, 0xbc, 0x37, 0xaa, 0x92, 0x2f,
+ 0xbf, 0xe3, 0xdf, 0x4e, 0x5b, 0x91, 0x5e, 0x6e,
+ 0xb5, 0x14, 0x71, 0x7b, 0xdd, 0x2a, 0x74, 0x07,
+ 0x9a, 0x50, 0x73, 0xf5, 0xc4, 0xbf, 0xd4, 0x6a,
+ 0xdf, 0x7d, 0x28, 0x2e, 0x7a, 0x39, 0x3a, 0x52,
+ 0x57, 0x9d, 0x11, 0xa0, 0x28, 0xda, 0x4d, 0x9c,
+ 0xd9, 0xc7, 0x71, 0x24, 0xf9, 0x64, 0x8e, 0xe3,
+ 0x83, 0xb1, 0xac, 0x76, 0x39, 0x30, 0xe7, 0x16,
+ 0x2a, 0x8d, 0x37, 0xf3, 0x50, 0xb2, 0xf7, 0x4b,
+ 0x84, 0x72, 0xcf, 0x09, 0x90, 0x20, 0x63, 0xc6,
+ 0xb3, 0x2e, 0x8c, 0x2d, 0x92, 0x90, 0xce, 0xfb,
+ 0xd7, 0x34, 0x6d, 0x1c, 0x77, 0x9a, 0x0d, 0xf5,
+ 0x0e, 0xdc, 0xde, 0x45, 0x31, 0xda, 0x07, 0xb0,
+ 0x99, 0xc6, 0x38, 0xe8, 0x3a, 0x75, 0x59, 0x44,
+ 0xdf, 0x2a, 0xef, 0x1a, 0xa3, 0x17, 0x52, 0xfd,
+ 0x32, 0x3d, 0xcb, 0x71, 0x0f, 0xb4, 0xbf, 0xbb,
+ 0x9d, 0x22, 0xb9, 0x25, 0xbc, 0x35, 0x77, 0xe1,
+ 0xb8, 0x94, 0x9e, 0x72, 0x9a, 0x90, 0xbb, 0xaf,
+ 0xea, 0xcf, 0x7f, 0x78, 0x79, 0xe7, 0xb1, 0x14,
+ 0x7e, 0x28, 0xba, 0x0b, 0xae, 0x94, 0x0d, 0xb7,
+ 0x95, 0xa6, 0x1b, 0x15, 0xec, 0xf4, 0xdf, 0x8d,
+ 0xb0, 0x7b, 0x82, 0x4b, 0xb0, 0x62, 0x80, 0x2c,
+ 0xc9, 0x8a, 0x95, 0x45, 0xbb, 0x2a, 0xae, 0xed,
+ 0x77, 0xcb, 0x3f, 0xc6, 0xdb, 0x15, 0xdc, 0xd7,
+ 0xd8, 0x0d, 0x7d, 0x5b, 0xc4, 0x06, 0xc4, 0x97,
+ 0x0a, 0x34, 0x78, 0xad, 0xa8, 0x89, 0x9b, 0x32,
+ 0x91, 0x98, 0xeb, 0x61, 0xc1, 0x93, 0xfb, 0x62,
+ 0x75, 0xaa, 0x8c, 0xa3, 0x40, 0x34, 0x4a, 0x75,
+ 0xa8, 0x62, 0xae, 0xbe, 0x92, 0xee, 0xe1, 0xce,
+ 0x03, 0x2f, 0xd9, 0x50, 0xb4, 0x7d, 0x77, 0x04,
+ 0xa3, 0x87, 0x69, 0x23, 0xb4, 0xad, 0x62, 0x84,
+ 0x4b, 0xf4, 0xa0, 0x9c, 0x4d, 0xbe, 0x8b, 0x43,
+ 0x97, 0x18, 0x4b, 0x74, 0x71, 0x36, 0x0c, 0x95,
+ 0x64, 0x88, 0x0a, 0xed, 0xdd, 0xb9, 0xba, 0xa4,
+ 0xaf, 0x2e, 0x75, 0x39, 0x4b, 0x08, 0xcd, 0x32,
+ 0xff, 0x47, 0x9c, 0x57, 0xa0, 0x7d, 0x3e, 0xab,
+ 0x5d, 0x54, 0xde, 0x5f, 0x97, 0x38, 0xb8, 0xd2,
+ 0x7f, 0x27, 0xa9, 0xf0, 0xab, 0x11, 0x79, 0x9d,
+ 0x7b, 0x7f, 0xfe, 0xfb, 0x27, 0x04, 0xc9, 0x5c,
+ 0x6a, 0xd1, 0x2c, 0x39, 0xf1, 0xe8, 0x67, 0xa4,
+ 0xb7, 0xb1, 0xd7, 0x81, 0x8a, 0x4b, 0x75, 0x3d,
+ 0xfd, 0x2a, 0x89, 0xcc, 0xb4, 0x5e, 0x00, 0x1a,
+ 0x03, 0xa8, 0x67, 0xb1, 0x87, 0xf2, 0x25, 0xdd,
+};
+
+static const uint8_t aes_xts_256_vec6_ctxt[SECSIZE] = {
+ 0xfa, 0x76, 0x2a, 0x36, 0x80, 0xb7, 0x60, 0x07,
+ 0x92, 0x8e, 0xd4, 0xa4, 0xf4, 0x9a, 0x94, 0x56,
+ 0x03, 0x1b, 0x70, 0x47, 0x82, 0xe6, 0x5e, 0x16,
+ 0xce, 0xcb, 0x54, 0xed, 0x7d, 0x01, 0x7b, 0x5e,
+ 0x18, 0xab, 0xd6, 0x7b, 0x33, 0x8e, 0x81, 0x07,
+ 0x8f, 0x21, 0xed, 0xb7, 0x86, 0x8d, 0x90, 0x1e,
+ 0xbe, 0x9c, 0x73, 0x1a, 0x7c, 0x18, 0xb5, 0xe6,
+ 0xde, 0xc1, 0xd6, 0xa7, 0x2e, 0x07, 0x8a, 0xc9,
+ 0xa4, 0x26, 0x2f, 0x86, 0x0b, 0xee, 0xfa, 0x14,
+ 0xf4, 0xe8, 0x21, 0x01, 0x82, 0x72, 0xe4, 0x11,
+ 0xa9, 0x51, 0x50, 0x2b, 0x6e, 0x79, 0x06, 0x6e,
+ 0x84, 0x25, 0x2c, 0x33, 0x46, 0xf3, 0xaa, 0x62,
+ 0x34, 0x43, 0x51, 0xa2, 0x91, 0xd4, 0xbe, 0xdc,
+ 0x7a, 0x07, 0x61, 0x8b, 0xde, 0xa2, 0xaf, 0x63,
+ 0x14, 0x5c, 0xc7, 0xa4, 0xb8, 0xd4, 0x07, 0x06,
+ 0x91, 0xae, 0x89, 0x0c, 0xd6, 0x57, 0x33, 0xe7,
+ 0x94, 0x6e, 0x90, 0x21, 0xa1, 0xdf, 0xfc, 0x4c,
+ 0x59, 0xf1, 0x59, 0x42, 0x5e, 0xe6, 0xd5, 0x0c,
+ 0xa9, 0xb1, 0x35, 0xfa, 0x61, 0x62, 0xce, 0xa1,
+ 0x8a, 0x93, 0x98, 0x38, 0xdc, 0x00, 0x0f, 0xb3,
+ 0x86, 0xfa, 0xd0, 0x86, 0xac, 0xce, 0x5a, 0xc0,
+ 0x7c, 0xb2, 0xec, 0xe7, 0xfd, 0x58, 0x0b, 0x00,
+ 0xcf, 0xa5, 0xe9, 0x85, 0x89, 0x63, 0x1d, 0xc2,
+ 0x5e, 0x8e, 0x2a, 0x3d, 0xaf, 0x2f, 0xfd, 0xec,
+ 0x26, 0x53, 0x16, 0x59, 0x91, 0x2c, 0x9d, 0x8f,
+ 0x7a, 0x15, 0xe5, 0x86, 0x5e, 0xa8, 0xfb, 0x58,
+ 0x16, 0xd6, 0x20, 0x70, 0x52, 0xbd, 0x71, 0x28,
+ 0xcd, 0x74, 0x3c, 0x12, 0xc8, 0x11, 0x87, 0x91,
+ 0xa4, 0x73, 0x68, 0x11, 0x93, 0x5e, 0xb9, 0x82,
+ 0xa5, 0x32, 0x34, 0x9e, 0x31, 0xdd, 0x40, 0x1e,
+ 0x0b, 0x66, 0x0a, 0x56, 0x8c, 0xb1, 0xa4, 0x71,
+ 0x1f, 0x55, 0x2f, 0x55, 0xde, 0xd5, 0x9f, 0x1f,
+ 0x15, 0xbf, 0x71, 0x96, 0xb3, 0xca, 0x12, 0xa9,
+ 0x1e, 0x48, 0x8e, 0xf5, 0x9d, 0x64, 0xf3, 0xa0,
+ 0x2b, 0xf4, 0x52, 0x39, 0x49, 0x9a, 0xc6, 0x17,
+ 0x6a, 0xe3, 0x21, 0xc4, 0xa2, 0x11, 0xec, 0x54,
+ 0x53, 0x65, 0x97, 0x1c, 0x5d, 0x3f, 0x4f, 0x09,
+ 0xd4, 0xeb, 0x13, 0x9b, 0xfd, 0xf2, 0x07, 0x3d,
+ 0x33, 0x18, 0x0b, 0x21, 0x00, 0x2b, 0x65, 0xcc,
+ 0x98, 0x65, 0xe7, 0x6c, 0xb2, 0x4c, 0xd9, 0x2c,
+ 0x87, 0x4c, 0x24, 0xc1, 0x83, 0x50, 0x39, 0x9a,
+ 0x93, 0x6a, 0xb3, 0x63, 0x70, 0x79, 0x29, 0x5d,
+ 0x76, 0xc4, 0x17, 0x77, 0x6b, 0x94, 0xef, 0xce,
+ 0x3a, 0x0e, 0xf7, 0x20, 0x6b, 0x15, 0x11, 0x05,
+ 0x19, 0x65, 0x5c, 0x95, 0x6c, 0xbd, 0x8b, 0x24,
+ 0x89, 0x40, 0x5e, 0xe2, 0xb0, 0x9a, 0x6b, 0x6e,
+ 0xeb, 0xe0, 0xc5, 0x37, 0x90, 0xa1, 0x2a, 0x89,
+ 0x98, 0x37, 0x8b, 0x33, 0xa5, 0xb7, 0x11, 0x59,
+ 0x62, 0x5f, 0x4b, 0xa4, 0x9d, 0x2a, 0x2f, 0xdb,
+ 0xa5, 0x9f, 0xbf, 0x08, 0x97, 0xbc, 0x7a, 0xab,
+ 0xd8, 0xd7, 0x07, 0xdc, 0x14, 0x0a, 0x80, 0xf0,
+ 0xf3, 0x09, 0xf8, 0x35, 0xd3, 0xda, 0x54, 0xab,
+ 0x58, 0x4e, 0x50, 0x1d, 0xfa, 0x0e, 0xe9, 0x77,
+ 0xfe, 0xc5, 0x43, 0xf7, 0x41, 0x86, 0xa8, 0x02,
+ 0xb9, 0xa3, 0x7a, 0xdb, 0x3e, 0x82, 0x91, 0xec,
+ 0xa0, 0x4d, 0x66, 0x52, 0x0d, 0x22, 0x9e, 0x60,
+ 0x40, 0x1e, 0x72, 0x82, 0xbe, 0xf4, 0x86, 0xae,
+ 0x05, 0x9a, 0xa7, 0x06, 0x96, 0xe0, 0xe3, 0x05,
+ 0xd7, 0x77, 0x14, 0x0a, 0x7a, 0x88, 0x3e, 0xcd,
+ 0xcb, 0x69, 0xb9, 0xff, 0x93, 0x8e, 0x8a, 0x42,
+ 0x31, 0x86, 0x4c, 0x69, 0xca, 0x2c, 0x20, 0x43,
+ 0xbe, 0xd0, 0x07, 0xff, 0x3e, 0x60, 0x5e, 0x01,
+ 0x4b, 0xcf, 0x51, 0x81, 0x38, 0xdc, 0x3a, 0x25,
+ 0xc5, 0xe2, 0x36, 0x17, 0x1a, 0x2d, 0x01, 0xd6,
+};
+
+/*
+ * Vector 7 from IEEE 1619/D16, blkno 0xfd.
+ */
+static const uint8_t aes_xts_256_vec7_ptxt[SECSIZE] = {
+ 0x8e, 0x41, 0xb7, 0x8c, 0x39, 0x0b, 0x5a, 0xf9,
+ 0xd7, 0x58, 0xbb, 0x21, 0x4a, 0x67, 0xe9, 0xf6,
+ 0xbf, 0x77, 0x27, 0xb0, 0x9a, 0xc6, 0x12, 0x40,
+ 0x84, 0xc3, 0x76, 0x11, 0x39, 0x8f, 0xa4, 0x5d,
+ 0xaa, 0xd9, 0x48, 0x68, 0x60, 0x0e, 0xd3, 0x91,
+ 0xfb, 0x1a, 0xcd, 0x48, 0x57, 0xa9, 0x5b, 0x46,
+ 0x6e, 0x62, 0xef, 0x9f, 0x4b, 0x37, 0x72, 0x44,
+ 0xd1, 0xc1, 0x52, 0xe7, 0xb3, 0x0d, 0x73, 0x1a,
+ 0xad, 0x30, 0xc7, 0x16, 0xd2, 0x14, 0xb7, 0x07,
+ 0xae, 0xd9, 0x9e, 0xb5, 0xb5, 0xe5, 0x80, 0xb3,
+ 0xe8, 0x87, 0xcf, 0x74, 0x97, 0x46, 0x56, 0x51,
+ 0xd4, 0xb6, 0x0e, 0x60, 0x42, 0x05, 0x1d, 0xa3,
+ 0x69, 0x3c, 0x3b, 0x78, 0xc1, 0x44, 0x89, 0x54,
+ 0x3b, 0xe8, 0xb6, 0xad, 0x0b, 0xa6, 0x29, 0x56,
+ 0x5b, 0xba, 0x20, 0x23, 0x13, 0xba, 0x7b, 0x0d,
+ 0x0c, 0x94, 0xa3, 0x25, 0x2b, 0x67, 0x6f, 0x46,
+ 0xcc, 0x02, 0xce, 0x0f, 0x8a, 0x7d, 0x34, 0xc0,
+ 0xed, 0x22, 0x91, 0x29, 0x67, 0x3c, 0x1f, 0x61,
+ 0xae, 0xd5, 0x79, 0xd0, 0x8a, 0x92, 0x03, 0xa2,
+ 0x5a, 0xac, 0x3a, 0x77, 0xe9, 0xdb, 0x60, 0x26,
+ 0x79, 0x96, 0xdb, 0x38, 0xdf, 0x63, 0x73, 0x56,
+ 0xd9, 0xdc, 0xd1, 0x63, 0x2e, 0x36, 0x99, 0x39,
+ 0xf2, 0xa2, 0x9d, 0x89, 0x34, 0x5c, 0x66, 0xe0,
+ 0x50, 0x66, 0xf1, 0xa3, 0x67, 0x7a, 0xef, 0x18,
+ 0xde, 0xa4, 0x11, 0x3f, 0xae, 0xb6, 0x29, 0xe4,
+ 0x67, 0x21, 0xa6, 0x6d, 0x0a, 0x7e, 0x78, 0x5d,
+ 0x3e, 0x29, 0xaf, 0x25, 0x94, 0xeb, 0x67, 0xdf,
+ 0xa9, 0x82, 0xaf, 0xfe, 0x0a, 0xac, 0x05, 0x8f,
+ 0x6e, 0x15, 0x86, 0x42, 0x69, 0xb1, 0x35, 0x41,
+ 0x82, 0x61, 0xfc, 0x3a, 0xfb, 0x08, 0x94, 0x72,
+ 0xcf, 0x68, 0xc4, 0x5d, 0xd7, 0xf2, 0x31, 0xc6,
+ 0x24, 0x9b, 0xa0, 0x25, 0x5e, 0x1e, 0x03, 0x38,
+ 0x33, 0xfc, 0x4d, 0x00, 0xa3, 0xfe, 0x02, 0x13,
+ 0x2d, 0x7b, 0xc3, 0x87, 0x36, 0x14, 0xb8, 0xae,
+ 0xe3, 0x42, 0x73, 0x58, 0x1e, 0xa0, 0x32, 0x5c,
+ 0x81, 0xf0, 0x27, 0x0a, 0xff, 0xa1, 0x36, 0x41,
+ 0xd0, 0x52, 0xd3, 0x6f, 0x07, 0x57, 0xd4, 0x84,
+ 0x01, 0x43, 0x54, 0xd0, 0x2d, 0x68, 0x83, 0xca,
+ 0x15, 0xc2, 0x4d, 0x8c, 0x39, 0x56, 0xb1, 0xbd,
+ 0x02, 0x7b, 0xcf, 0x41, 0xf1, 0x51, 0xfd, 0x80,
+ 0x23, 0xc5, 0x34, 0x0e, 0x56, 0x06, 0xf3, 0x7e,
+ 0x90, 0xfd, 0xb8, 0x7c, 0x86, 0xfb, 0x4f, 0xa6,
+ 0x34, 0xb3, 0x71, 0x8a, 0x30, 0xba, 0xce, 0x06,
+ 0xa6, 0x6e, 0xaf, 0x8f, 0x63, 0xc4, 0xaa, 0x3b,
+ 0x63, 0x78, 0x26, 0xa8, 0x7f, 0xe8, 0xcf, 0xa4,
+ 0x42, 0x82, 0xe9, 0x2c, 0xb1, 0x61, 0x5a, 0xf3,
+ 0xa2, 0x8e, 0x53, 0xbc, 0x74, 0xc7, 0xcb, 0xa1,
+ 0xa0, 0x97, 0x7b, 0xe9, 0x06, 0x5d, 0x0c, 0x1a,
+ 0x5d, 0xec, 0x6c, 0x54, 0xae, 0x38, 0xd3, 0x7f,
+ 0x37, 0xaa, 0x35, 0x28, 0x3e, 0x04, 0x8e, 0x55,
+ 0x30, 0xa8, 0x5c, 0x4e, 0x7a, 0x29, 0xd7, 0xb9,
+ 0x2e, 0xc0, 0xc3, 0x16, 0x9c, 0xdf, 0x2a, 0x80,
+ 0x5c, 0x76, 0x04, 0xbc, 0xe6, 0x00, 0x49, 0xb9,
+ 0xfb, 0x7b, 0x8e, 0xaa, 0xc1, 0x0f, 0x51, 0xae,
+ 0x23, 0x79, 0x4c, 0xeb, 0xa6, 0x8b, 0xb5, 0x81,
+ 0x12, 0xe2, 0x93, 0xb9, 0xb6, 0x92, 0xca, 0x72,
+ 0x1b, 0x37, 0xc6, 0x62, 0xf8, 0x57, 0x4e, 0xd4,
+ 0xdb, 0xa6, 0xf8, 0x8e, 0x17, 0x08, 0x81, 0xc8,
+ 0x2c, 0xdd, 0xc1, 0x03, 0x4a, 0x0c, 0xa7, 0xe2,
+ 0x84, 0xbf, 0x09, 0x62, 0xb6, 0xb2, 0x62, 0x92,
+ 0xd8, 0x36, 0xfa, 0x9f, 0x73, 0xc1, 0xac, 0x77,
+ 0x0e, 0xef, 0x0f, 0x2d, 0x3a, 0x1e, 0xaf, 0x61,
+ 0xd3, 0xe0, 0x35, 0x55, 0xfd, 0x42, 0x4e, 0xed,
+ 0xd6, 0x7e, 0x18, 0xa1, 0x80, 0x94, 0xf8, 0x88,
+};
+
+static const uint8_t aes_xts_256_vec7_ctxt[SECSIZE] = {
+ 0xd5, 0x5f, 0x68, 0x4f, 0x81, 0xf4, 0x42, 0x6e,
+ 0x9f, 0xde, 0x92, 0xa5, 0xff, 0x02, 0xdf, 0x2a,
+ 0xc8, 0x96, 0xaf, 0x63, 0x96, 0x28, 0x88, 0xa9,
+ 0x79, 0x10, 0xc1, 0x37, 0x9e, 0x20, 0xb0, 0xa3,
+ 0xb1, 0xdb, 0x61, 0x3f, 0xb7, 0xfe, 0x2e, 0x07,
+ 0x00, 0x43, 0x29, 0xea, 0x5c, 0x22, 0xbf, 0xd3,
+ 0x3e, 0x3d, 0xbe, 0x4c, 0xf5, 0x8c, 0xc6, 0x08,
+ 0xc2, 0xc2, 0x6c, 0x19, 0xa2, 0xe2, 0xfe, 0x22,
+ 0xf9, 0x87, 0x32, 0xc2, 0xb5, 0xcb, 0x84, 0x4c,
+ 0xc6, 0xc0, 0x70, 0x2d, 0x91, 0xe1, 0xd5, 0x0f,
+ 0xc4, 0x38, 0x2a, 0x7e, 0xba, 0x56, 0x35, 0xcd,
+ 0x60, 0x24, 0x32, 0xa2, 0x30, 0x6a, 0xc4, 0xce,
+ 0x82, 0xf8, 0xd7, 0x0c, 0x8d, 0x9b, 0xc1, 0x5f,
+ 0x91, 0x8f, 0xe7, 0x1e, 0x74, 0xc6, 0x22, 0xd5,
+ 0xcf, 0x71, 0x17, 0x8b, 0xf6, 0xe0, 0xb9, 0xcc,
+ 0x9f, 0x2b, 0x41, 0xdd, 0x8d, 0xbe, 0x44, 0x1c,
+ 0x41, 0xcd, 0x0c, 0x73, 0xa6, 0xdc, 0x47, 0xa3,
+ 0x48, 0xf6, 0x70, 0x2f, 0x9d, 0x0e, 0x9b, 0x1b,
+ 0x14, 0x31, 0xe9, 0x48, 0xe2, 0x99, 0xb9, 0xec,
+ 0x22, 0x72, 0xab, 0x2c, 0x5f, 0x0c, 0x7b, 0xe8,
+ 0x6a, 0xff, 0xa5, 0xde, 0xc8, 0x7a, 0x0b, 0xee,
+ 0x81, 0xd3, 0xd5, 0x00, 0x07, 0xed, 0xaa, 0x2b,
+ 0xcf, 0xcc, 0xb3, 0x56, 0x05, 0x15, 0x5f, 0xf3,
+ 0x6e, 0xd8, 0xed, 0xd4, 0xa4, 0x0d, 0xcd, 0x4b,
+ 0x24, 0x3a, 0xcd, 0x11, 0xb2, 0xb9, 0x87, 0xbd,
+ 0xbf, 0xaf, 0x91, 0xa7, 0xca, 0xc2, 0x7e, 0x9c,
+ 0x5a, 0xea, 0x52, 0x5e, 0xe5, 0x3d, 0xe7, 0xb2,
+ 0xd3, 0x33, 0x2c, 0x86, 0x44, 0x40, 0x2b, 0x82,
+ 0x3e, 0x94, 0xa7, 0xdb, 0x26, 0x27, 0x6d, 0x2d,
+ 0x23, 0xaa, 0x07, 0x18, 0x0f, 0x76, 0xb4, 0xfd,
+ 0x29, 0xb9, 0xc0, 0x82, 0x30, 0x99, 0xc9, 0xd6,
+ 0x2c, 0x51, 0x98, 0x80, 0xae, 0xe7, 0xe9, 0x69,
+ 0x76, 0x17, 0xc1, 0x49, 0x7d, 0x47, 0xbf, 0x3e,
+ 0x57, 0x19, 0x50, 0x31, 0x14, 0x21, 0xb6, 0xb7,
+ 0x34, 0xd3, 0x8b, 0x0d, 0xb9, 0x1e, 0xb8, 0x53,
+ 0x31, 0xb9, 0x1e, 0xa9, 0xf6, 0x15, 0x30, 0xf5,
+ 0x45, 0x12, 0xa5, 0xa5, 0x2a, 0x4b, 0xad, 0x58,
+ 0x9e, 0xb6, 0x97, 0x81, 0xd5, 0x37, 0xf2, 0x32,
+ 0x97, 0xbb, 0x45, 0x9b, 0xda, 0xd2, 0x94, 0x8a,
+ 0x29, 0xe1, 0x55, 0x0b, 0xf4, 0x78, 0x7e, 0x0b,
+ 0xe9, 0x5b, 0xb1, 0x73, 0xcf, 0x5f, 0xab, 0x17,
+ 0xda, 0xb7, 0xa1, 0x3a, 0x05, 0x2a, 0x63, 0x45,
+ 0x3d, 0x97, 0xcc, 0xec, 0x1a, 0x32, 0x19, 0x54,
+ 0x88, 0x6b, 0x7a, 0x12, 0x99, 0xfa, 0xae, 0xec,
+ 0xae, 0x35, 0xc6, 0xea, 0xac, 0xa7, 0x53, 0xb0,
+ 0x41, 0xb5, 0xe5, 0xf0, 0x93, 0xbf, 0x83, 0x39,
+ 0x7f, 0xd2, 0x1d, 0xd6, 0xb3, 0x01, 0x20, 0x66,
+ 0xfc, 0xc0, 0x58, 0xcc, 0x32, 0xc3, 0xb0, 0x9d,
+ 0x75, 0x62, 0xde, 0xe2, 0x95, 0x09, 0xb5, 0x83,
+ 0x93, 0x92, 0xc9, 0xff, 0x05, 0xf5, 0x1f, 0x31,
+ 0x66, 0xaa, 0xac, 0x4a, 0xc5, 0xf2, 0x38, 0x03,
+ 0x8a, 0x30, 0x45, 0xe6, 0xf7, 0x2e, 0x48, 0xef,
+ 0x0f, 0xe8, 0xbc, 0x67, 0x5e, 0x82, 0xc3, 0x18,
+ 0xa2, 0x68, 0xe4, 0x39, 0x70, 0x27, 0x1b, 0xf1,
+ 0x19, 0xb8, 0x1b, 0xf6, 0xa9, 0x82, 0x74, 0x65,
+ 0x54, 0xf8, 0x4e, 0x72, 0xb9, 0xf0, 0x02, 0x80,
+ 0xa3, 0x20, 0xa0, 0x81, 0x42, 0x92, 0x3c, 0x23,
+ 0xc8, 0x83, 0x42, 0x3f, 0xf9, 0x49, 0x82, 0x7f,
+ 0x29, 0xbb, 0xac, 0xdc, 0x1c, 0xcd, 0xb0, 0x49,
+ 0x38, 0xce, 0x60, 0x98, 0xc9, 0x5b, 0xa6, 0xb3,
+ 0x25, 0x28, 0xf4, 0xef, 0x78, 0xee, 0xd7, 0x78,
+ 0xb2, 0xe1, 0x22, 0xdd, 0xfd, 0x1c, 0xbd, 0xd1,
+ 0x1d, 0x1c, 0x0a, 0x67, 0x83, 0xe0, 0x11, 0xfc,
+ 0x53, 0x6d, 0x63, 0xd0, 0x53, 0x26, 0x06, 0x37,
+};
+
+/*
+ * Vector 8 from IEEE 1619/D16, blkno 0xfe.
+ */
+static const uint8_t aes_xts_256_vec8_ptxt[SECSIZE] = {
+ 0xd5, 0x5f, 0x68, 0x4f, 0x81, 0xf4, 0x42, 0x6e,
+ 0x9f, 0xde, 0x92, 0xa5, 0xff, 0x02, 0xdf, 0x2a,
+ 0xc8, 0x96, 0xaf, 0x63, 0x96, 0x28, 0x88, 0xa9,
+ 0x79, 0x10, 0xc1, 0x37, 0x9e, 0x20, 0xb0, 0xa3,
+ 0xb1, 0xdb, 0x61, 0x3f, 0xb7, 0xfe, 0x2e, 0x07,
+ 0x00, 0x43, 0x29, 0xea, 0x5c, 0x22, 0xbf, 0xd3,
+ 0x3e, 0x3d, 0xbe, 0x4c, 0xf5, 0x8c, 0xc6, 0x08,
+ 0xc2, 0xc2, 0x6c, 0x19, 0xa2, 0xe2, 0xfe, 0x22,
+ 0xf9, 0x87, 0x32, 0xc2, 0xb5, 0xcb, 0x84, 0x4c,
+ 0xc6, 0xc0, 0x70, 0x2d, 0x91, 0xe1, 0xd5, 0x0f,
+ 0xc4, 0x38, 0x2a, 0x7e, 0xba, 0x56, 0x35, 0xcd,
+ 0x60, 0x24, 0x32, 0xa2, 0x30, 0x6a, 0xc4, 0xce,
+ 0x82, 0xf8, 0xd7, 0x0c, 0x8d, 0x9b, 0xc1, 0x5f,
+ 0x91, 0x8f, 0xe7, 0x1e, 0x74, 0xc6, 0x22, 0xd5,
+ 0xcf, 0x71, 0x17, 0x8b, 0xf6, 0xe0, 0xb9, 0xcc,
+ 0x9f, 0x2b, 0x41, 0xdd, 0x8d, 0xbe, 0x44, 0x1c,
+ 0x41, 0xcd, 0x0c, 0x73, 0xa6, 0xdc, 0x47, 0xa3,
+ 0x48, 0xf6, 0x70, 0x2f, 0x9d, 0x0e, 0x9b, 0x1b,
+ 0x14, 0x31, 0xe9, 0x48, 0xe2, 0x99, 0xb9, 0xec,
+ 0x22, 0x72, 0xab, 0x2c, 0x5f, 0x0c, 0x7b, 0xe8,
+ 0x6a, 0xff, 0xa5, 0xde, 0xc8, 0x7a, 0x0b, 0xee,
+ 0x81, 0xd3, 0xd5, 0x00, 0x07, 0xed, 0xaa, 0x2b,
+ 0xcf, 0xcc, 0xb3, 0x56, 0x05, 0x15, 0x5f, 0xf3,
+ 0x6e, 0xd8, 0xed, 0xd4, 0xa4, 0x0d, 0xcd, 0x4b,
+ 0x24, 0x3a, 0xcd, 0x11, 0xb2, 0xb9, 0x87, 0xbd,
+ 0xbf, 0xaf, 0x91, 0xa7, 0xca, 0xc2, 0x7e, 0x9c,
+ 0x5a, 0xea, 0x52, 0x5e, 0xe5, 0x3d, 0xe7, 0xb2,
+ 0xd3, 0x33, 0x2c, 0x86, 0x44, 0x40, 0x2b, 0x82,
+ 0x3e, 0x94, 0xa7, 0xdb, 0x26, 0x27, 0x6d, 0x2d,
+ 0x23, 0xaa, 0x07, 0x18, 0x0f, 0x76, 0xb4, 0xfd,
+ 0x29, 0xb9, 0xc0, 0x82, 0x30, 0x99, 0xc9, 0xd6,
+ 0x2c, 0x51, 0x98, 0x80, 0xae, 0xe7, 0xe9, 0x69,
+ 0x76, 0x17, 0xc1, 0x49, 0x7d, 0x47, 0xbf, 0x3e,
+ 0x57, 0x19, 0x50, 0x31, 0x14, 0x21, 0xb6, 0xb7,
+ 0x34, 0xd3, 0x8b, 0x0d, 0xb9, 0x1e, 0xb8, 0x53,
+ 0x31, 0xb9, 0x1e, 0xa9, 0xf6, 0x15, 0x30, 0xf5,
+ 0x45, 0x12, 0xa5, 0xa5, 0x2a, 0x4b, 0xad, 0x58,
+ 0x9e, 0xb6, 0x97, 0x81, 0xd5, 0x37, 0xf2, 0x32,
+ 0x97, 0xbb, 0x45, 0x9b, 0xda, 0xd2, 0x94, 0x8a,
+ 0x29, 0xe1, 0x55, 0x0b, 0xf4, 0x78, 0x7e, 0x0b,
+ 0xe9, 0x5b, 0xb1, 0x73, 0xcf, 0x5f, 0xab, 0x17,
+ 0xda, 0xb7, 0xa1, 0x3a, 0x05, 0x2a, 0x63, 0x45,
+ 0x3d, 0x97, 0xcc, 0xec, 0x1a, 0x32, 0x19, 0x54,
+ 0x88, 0x6b, 0x7a, 0x12, 0x99, 0xfa, 0xae, 0xec,
+ 0xae, 0x35, 0xc6, 0xea, 0xac, 0xa7, 0x53, 0xb0,
+ 0x41, 0xb5, 0xe5, 0xf0, 0x93, 0xbf, 0x83, 0x39,
+ 0x7f, 0xd2, 0x1d, 0xd6, 0xb3, 0x01, 0x20, 0x66,
+ 0xfc, 0xc0, 0x58, 0xcc, 0x32, 0xc3, 0xb0, 0x9d,
+ 0x75, 0x62, 0xde, 0xe2, 0x95, 0x09, 0xb5, 0x83,
+ 0x93, 0x92, 0xc9, 0xff, 0x05, 0xf5, 0x1f, 0x31,
+ 0x66, 0xaa, 0xac, 0x4a, 0xc5, 0xf2, 0x38, 0x03,
+ 0x8a, 0x30, 0x45, 0xe6, 0xf7, 0x2e, 0x48, 0xef,
+ 0x0f, 0xe8, 0xbc, 0x67, 0x5e, 0x82, 0xc3, 0x18,
+ 0xa2, 0x68, 0xe4, 0x39, 0x70, 0x27, 0x1b, 0xf1,
+ 0x19, 0xb8, 0x1b, 0xf6, 0xa9, 0x82, 0x74, 0x65,
+ 0x54, 0xf8, 0x4e, 0x72, 0xb9, 0xf0, 0x02, 0x80,
+ 0xa3, 0x20, 0xa0, 0x81, 0x42, 0x92, 0x3c, 0x23,
+ 0xc8, 0x83, 0x42, 0x3f, 0xf9, 0x49, 0x82, 0x7f,
+ 0x29, 0xbb, 0xac, 0xdc, 0x1c, 0xcd, 0xb0, 0x49,
+ 0x38, 0xce, 0x60, 0x98, 0xc9, 0x5b, 0xa6, 0xb3,
+ 0x25, 0x28, 0xf4, 0xef, 0x78, 0xee, 0xd7, 0x78,
+ 0xb2, 0xe1, 0x22, 0xdd, 0xfd, 0x1c, 0xbd, 0xd1,
+ 0x1d, 0x1c, 0x0a, 0x67, 0x83, 0xe0, 0x11, 0xfc,
+ 0x53, 0x6d, 0x63, 0xd0, 0x53, 0x26, 0x06, 0x37,
+};
+
+static const uint8_t aes_xts_256_vec8_ctxt[SECSIZE] = {
+ 0x72, 0xef, 0xc1, 0xeb, 0xfe, 0x1e, 0xe2, 0x59,
+ 0x75, 0xa6, 0xeb, 0x3a, 0xa8, 0x58, 0x9d, 0xda,
+ 0x2b, 0x26, 0x1f, 0x1c, 0x85, 0xbd, 0xab, 0x44,
+ 0x2a, 0x9e, 0x5b, 0x2d, 0xd1, 0xd7, 0xc3, 0x95,
+ 0x7a, 0x16, 0xfc, 0x08, 0xe5, 0x26, 0xd4, 0xb1,
+ 0x22, 0x3f, 0x1b, 0x12, 0x32, 0xa1, 0x1a, 0xf2,
+ 0x74, 0xc3, 0xd7, 0x0d, 0xac, 0x57, 0xf8, 0x3e,
+ 0x09, 0x83, 0xc4, 0x98, 0xf1, 0xa6, 0xf1, 0xae,
+ 0xcb, 0x02, 0x1c, 0x3e, 0x70, 0x08, 0x5a, 0x1e,
+ 0x52, 0x7f, 0x1c, 0xe4, 0x1e, 0xe5, 0x91, 0x1a,
+ 0x82, 0x02, 0x01, 0x61, 0x52, 0x9c, 0xd8, 0x27,
+ 0x73, 0x76, 0x2d, 0xaf, 0x54, 0x59, 0xde, 0x94,
+ 0xa0, 0xa8, 0x2a, 0xda, 0xe7, 0xe1, 0x70, 0x3c,
+ 0x80, 0x85, 0x43, 0xc2, 0x9e, 0xd6, 0xfb, 0x32,
+ 0xd9, 0xe0, 0x04, 0x32, 0x7c, 0x13, 0x55, 0x18,
+ 0x0c, 0x99, 0x5a, 0x07, 0x74, 0x14, 0x93, 0xa0,
+ 0x9c, 0x21, 0xba, 0x01, 0xa3, 0x87, 0x88, 0x2d,
+ 0xa4, 0xf6, 0x25, 0x34, 0xb8, 0x7b, 0xb1, 0x5d,
+ 0x60, 0xd1, 0x97, 0x20, 0x1c, 0x0f, 0xd3, 0xbf,
+ 0x30, 0xc1, 0x50, 0x0a, 0x3e, 0xcf, 0xec, 0xdd,
+ 0x66, 0xd8, 0x72, 0x1f, 0x90, 0xbc, 0xc4, 0xc1,
+ 0x7e, 0xe9, 0x25, 0xc6, 0x1b, 0x0a, 0x03, 0x72,
+ 0x7a, 0x9c, 0x0d, 0x5f, 0x5c, 0xa4, 0x62, 0xfb,
+ 0xfa, 0x0a, 0xf1, 0xc2, 0x51, 0x3a, 0x9d, 0x9d,
+ 0x4b, 0x53, 0x45, 0xbd, 0x27, 0xa5, 0xf6, 0xe6,
+ 0x53, 0xf7, 0x51, 0x69, 0x3e, 0x6b, 0x6a, 0x2b,
+ 0x8e, 0xad, 0x57, 0xd5, 0x11, 0xe0, 0x0e, 0x58,
+ 0xc4, 0x5b, 0x7b, 0x8d, 0x00, 0x5a, 0xf7, 0x92,
+ 0x88, 0xf5, 0xc7, 0xc2, 0x2f, 0xd4, 0xf1, 0xbf,
+ 0x7a, 0x89, 0x8b, 0x03, 0xa5, 0x63, 0x4c, 0x6a,
+ 0x1a, 0xe3, 0xf9, 0xfa, 0xe5, 0xde, 0x4f, 0x29,
+ 0x6a, 0x28, 0x96, 0xb2, 0x3e, 0x7e, 0xd4, 0x3e,
+ 0xd1, 0x4f, 0xa5, 0xa2, 0x80, 0x3f, 0x4d, 0x28,
+ 0xf0, 0xd3, 0xff, 0xcf, 0x24, 0x75, 0x76, 0x77,
+ 0xae, 0xbd, 0xb4, 0x7b, 0xb3, 0x88, 0x37, 0x87,
+ 0x08, 0x94, 0x8a, 0x8d, 0x41, 0x26, 0xed, 0x18,
+ 0x39, 0xe0, 0xda, 0x29, 0xa5, 0x37, 0xa8, 0xc1,
+ 0x98, 0xb3, 0xc6, 0x6a, 0xb0, 0x07, 0x12, 0xdd,
+ 0x26, 0x16, 0x74, 0xbf, 0x45, 0xa7, 0x3d, 0x67,
+ 0xf7, 0x69, 0x14, 0xf8, 0x30, 0xca, 0x01, 0x4b,
+ 0x65, 0x59, 0x6f, 0x27, 0xe4, 0xcf, 0x62, 0xde,
+ 0x66, 0x12, 0x5a, 0x55, 0x66, 0xdf, 0x99, 0x75,
+ 0x15, 0x56, 0x28, 0xb4, 0x00, 0xfb, 0xfb, 0x3a,
+ 0x29, 0x04, 0x0e, 0xd5, 0x0f, 0xaf, 0xfd, 0xbb,
+ 0x18, 0xae, 0xce, 0x7c, 0x5c, 0x44, 0x69, 0x32,
+ 0x60, 0xaa, 0xb3, 0x86, 0xc0, 0xa3, 0x7b, 0x11,
+ 0xb1, 0x14, 0xf1, 0xc4, 0x15, 0xae, 0xbb, 0x65,
+ 0x3b, 0xe4, 0x68, 0x17, 0x94, 0x28, 0xd4, 0x3a,
+ 0x4d, 0x8b, 0xc3, 0xec, 0x38, 0x81, 0x3e, 0xca,
+ 0x30, 0xa1, 0x3c, 0xf1, 0xbb, 0x18, 0xd5, 0x24,
+ 0xf1, 0x99, 0x2d, 0x44, 0xd8, 0xb1, 0xa4, 0x2e,
+ 0xa3, 0x0b, 0x22, 0xe6, 0xc9, 0x5b, 0x19, 0x9d,
+ 0x8d, 0x18, 0x2f, 0x88, 0x40, 0xb0, 0x9d, 0x05,
+ 0x95, 0x85, 0xc3, 0x1a, 0xd6, 0x91, 0xfa, 0x06,
+ 0x19, 0xff, 0x03, 0x8a, 0xca, 0x2c, 0x39, 0xa9,
+ 0x43, 0x42, 0x11, 0x57, 0x36, 0x17, 0x17, 0xc4,
+ 0x9d, 0x32, 0x20, 0x28, 0xa7, 0x46, 0x48, 0x11,
+ 0x3b, 0xd8, 0xc9, 0xd7, 0xec, 0x77, 0xcf, 0x3c,
+ 0x89, 0xc1, 0xec, 0x87, 0x18, 0xce, 0xff, 0x85,
+ 0x16, 0xd9, 0x6b, 0x34, 0xc3, 0xc6, 0x14, 0xf1,
+ 0x06, 0x99, 0xc9, 0xab, 0xc4, 0xed, 0x04, 0x11,
+ 0x50, 0x62, 0x23, 0xbe, 0xa1, 0x6a, 0xf3, 0x5c,
+ 0x88, 0x3a, 0xcc, 0xdb, 0xe1, 0x10, 0x4e, 0xef,
+ 0x0c, 0xfd, 0xb5, 0x4e, 0x12, 0xfb, 0x23, 0x0a,
+};
+
+/*
+ * Vector 9 from IEEE 1619/D16, blkno 0xff.
+ */
+static const uint8_t aes_xts_256_vec9_ptxt[SECSIZE] = {
+ 0x72, 0xef, 0xc1, 0xeb, 0xfe, 0x1e, 0xe2, 0x59,
+ 0x75, 0xa6, 0xeb, 0x3a, 0xa8, 0x58, 0x9d, 0xda,
+ 0x2b, 0x26, 0x1f, 0x1c, 0x85, 0xbd, 0xab, 0x44,
+ 0x2a, 0x9e, 0x5b, 0x2d, 0xd1, 0xd7, 0xc3, 0x95,
+ 0x7a, 0x16, 0xfc, 0x08, 0xe5, 0x26, 0xd4, 0xb1,
+ 0x22, 0x3f, 0x1b, 0x12, 0x32, 0xa1, 0x1a, 0xf2,
+ 0x74, 0xc3, 0xd7, 0x0d, 0xac, 0x57, 0xf8, 0x3e,
+ 0x09, 0x83, 0xc4, 0x98, 0xf1, 0xa6, 0xf1, 0xae,
+ 0xcb, 0x02, 0x1c, 0x3e, 0x70, 0x08, 0x5a, 0x1e,
+ 0x52, 0x7f, 0x1c, 0xe4, 0x1e, 0xe5, 0x91, 0x1a,
+ 0x82, 0x02, 0x01, 0x61, 0x52, 0x9c, 0xd8, 0x27,
+ 0x73, 0x76, 0x2d, 0xaf, 0x54, 0x59, 0xde, 0x94,
+ 0xa0, 0xa8, 0x2a, 0xda, 0xe7, 0xe1, 0x70, 0x3c,
+ 0x80, 0x85, 0x43, 0xc2, 0x9e, 0xd6, 0xfb, 0x32,
+ 0xd9, 0xe0, 0x04, 0x32, 0x7c, 0x13, 0x55, 0x18,
+ 0x0c, 0x99, 0x5a, 0x07, 0x74, 0x14, 0x93, 0xa0,
+ 0x9c, 0x21, 0xba, 0x01, 0xa3, 0x87, 0x88, 0x2d,
+ 0xa4, 0xf6, 0x25, 0x34, 0xb8, 0x7b, 0xb1, 0x5d,
+ 0x60, 0xd1, 0x97, 0x20, 0x1c, 0x0f, 0xd3, 0xbf,
+ 0x30, 0xc1, 0x50, 0x0a, 0x3e, 0xcf, 0xec, 0xdd,
+ 0x66, 0xd8, 0x72, 0x1f, 0x90, 0xbc, 0xc4, 0xc1,
+ 0x7e, 0xe9, 0x25, 0xc6, 0x1b, 0x0a, 0x03, 0x72,
+ 0x7a, 0x9c, 0x0d, 0x5f, 0x5c, 0xa4, 0x62, 0xfb,
+ 0xfa, 0x0a, 0xf1, 0xc2, 0x51, 0x3a, 0x9d, 0x9d,
+ 0x4b, 0x53, 0x45, 0xbd, 0x27, 0xa5, 0xf6, 0xe6,
+ 0x53, 0xf7, 0x51, 0x69, 0x3e, 0x6b, 0x6a, 0x2b,
+ 0x8e, 0xad, 0x57, 0xd5, 0x11, 0xe0, 0x0e, 0x58,
+ 0xc4, 0x5b, 0x7b, 0x8d, 0x00, 0x5a, 0xf7, 0x92,
+ 0x88, 0xf5, 0xc7, 0xc2, 0x2f, 0xd4, 0xf1, 0xbf,
+ 0x7a, 0x89, 0x8b, 0x03, 0xa5, 0x63, 0x4c, 0x6a,
+ 0x1a, 0xe3, 0xf9, 0xfa, 0xe5, 0xde, 0x4f, 0x29,
+ 0x6a, 0x28, 0x96, 0xb2, 0x3e, 0x7e, 0xd4, 0x3e,
+ 0xd1, 0x4f, 0xa5, 0xa2, 0x80, 0x3f, 0x4d, 0x28,
+ 0xf0, 0xd3, 0xff, 0xcf, 0x24, 0x75, 0x76, 0x77,
+ 0xae, 0xbd, 0xb4, 0x7b, 0xb3, 0x88, 0x37, 0x87,
+ 0x08, 0x94, 0x8a, 0x8d, 0x41, 0x26, 0xed, 0x18,
+ 0x39, 0xe0, 0xda, 0x29, 0xa5, 0x37, 0xa8, 0xc1,
+ 0x98, 0xb3, 0xc6, 0x6a, 0xb0, 0x07, 0x12, 0xdd,
+ 0x26, 0x16, 0x74, 0xbf, 0x45, 0xa7, 0x3d, 0x67,
+ 0xf7, 0x69, 0x14, 0xf8, 0x30, 0xca, 0x01, 0x4b,
+ 0x65, 0x59, 0x6f, 0x27, 0xe4, 0xcf, 0x62, 0xde,
+ 0x66, 0x12, 0x5a, 0x55, 0x66, 0xdf, 0x99, 0x75,
+ 0x15, 0x56, 0x28, 0xb4, 0x00, 0xfb, 0xfb, 0x3a,
+ 0x29, 0x04, 0x0e, 0xd5, 0x0f, 0xaf, 0xfd, 0xbb,
+ 0x18, 0xae, 0xce, 0x7c, 0x5c, 0x44, 0x69, 0x32,
+ 0x60, 0xaa, 0xb3, 0x86, 0xc0, 0xa3, 0x7b, 0x11,
+ 0xb1, 0x14, 0xf1, 0xc4, 0x15, 0xae, 0xbb, 0x65,
+ 0x3b, 0xe4, 0x68, 0x17, 0x94, 0x28, 0xd4, 0x3a,
+ 0x4d, 0x8b, 0xc3, 0xec, 0x38, 0x81, 0x3e, 0xca,
+ 0x30, 0xa1, 0x3c, 0xf1, 0xbb, 0x18, 0xd5, 0x24,
+ 0xf1, 0x99, 0x2d, 0x44, 0xd8, 0xb1, 0xa4, 0x2e,
+ 0xa3, 0x0b, 0x22, 0xe6, 0xc9, 0x5b, 0x19, 0x9d,
+ 0x8d, 0x18, 0x2f, 0x88, 0x40, 0xb0, 0x9d, 0x05,
+ 0x95, 0x85, 0xc3, 0x1a, 0xd6, 0x91, 0xfa, 0x06,
+ 0x19, 0xff, 0x03, 0x8a, 0xca, 0x2c, 0x39, 0xa9,
+ 0x43, 0x42, 0x11, 0x57, 0x36, 0x17, 0x17, 0xc4,
+ 0x9d, 0x32, 0x20, 0x28, 0xa7, 0x46, 0x48, 0x11,
+ 0x3b, 0xd8, 0xc9, 0xd7, 0xec, 0x77, 0xcf, 0x3c,
+ 0x89, 0xc1, 0xec, 0x87, 0x18, 0xce, 0xff, 0x85,
+ 0x16, 0xd9, 0x6b, 0x34, 0xc3, 0xc6, 0x14, 0xf1,
+ 0x06, 0x99, 0xc9, 0xab, 0xc4, 0xed, 0x04, 0x11,
+ 0x50, 0x62, 0x23, 0xbe, 0xa1, 0x6a, 0xf3, 0x5c,
+ 0x88, 0x3a, 0xcc, 0xdb, 0xe1, 0x10, 0x4e, 0xef,
+ 0x0c, 0xfd, 0xb5, 0x4e, 0x12, 0xfb, 0x23, 0x0a,
+};
+
+static const uint8_t aes_xts_256_vec9_ctxt[SECSIZE] = {
+ 0x32, 0x60, 0xae, 0x8d, 0xad, 0x1f, 0x4a, 0x32,
+ 0xc5, 0xca, 0xfe, 0x3a, 0xb0, 0xeb, 0x95, 0x54,
+ 0x9d, 0x46, 0x1a, 0x67, 0xce, 0xb9, 0xe5, 0xaa,
+ 0x2d, 0x3a, 0xfb, 0x62, 0xde, 0xce, 0x05, 0x53,
+ 0x19, 0x3b, 0xa5, 0x0c, 0x75, 0xbe, 0x25, 0x1e,
+ 0x08, 0xd1, 0xd0, 0x8f, 0x10, 0x88, 0x57, 0x6c,
+ 0x7e, 0xfd, 0xfa, 0xaf, 0x3f, 0x45, 0x95, 0x59,
+ 0x57, 0x1e, 0x12, 0x51, 0x17, 0x53, 0xb0, 0x7a,
+ 0xf0, 0x73, 0xf3, 0x5d, 0xa0, 0x6a, 0xf0, 0xce,
+ 0x0b, 0xbf, 0x6b, 0x8f, 0x5c, 0xcc, 0x5c, 0xea,
+ 0x50, 0x0e, 0xc1, 0xb2, 0x11, 0xbd, 0x51, 0xf6,
+ 0x3b, 0x60, 0x6b, 0xf6, 0x52, 0x87, 0x96, 0xca,
+ 0x12, 0x17, 0x3b, 0xa3, 0x9b, 0x89, 0x35, 0xee,
+ 0x44, 0xcc, 0xce, 0x64, 0x6f, 0x90, 0xa4, 0x5b,
+ 0xf9, 0xcc, 0xc5, 0x67, 0xf0, 0xac, 0xe1, 0x3d,
+ 0xc2, 0xd5, 0x3e, 0xbe, 0xed, 0xc8, 0x1f, 0x58,
+ 0xb2, 0xe4, 0x11, 0x79, 0xdd, 0xdf, 0x0d, 0x5a,
+ 0x5c, 0x42, 0xf5, 0xd8, 0x50, 0x6c, 0x1a, 0x5d,
+ 0x2f, 0x8f, 0x59, 0xf3, 0xea, 0x87, 0x3c, 0xbc,
+ 0xd0, 0xee, 0xc1, 0x9a, 0xcb, 0xf3, 0x25, 0x42,
+ 0x3b, 0xd3, 0xdc, 0xb8, 0xc2, 0xb1, 0xbf, 0x1d,
+ 0x1e, 0xae, 0xd0, 0xeb, 0xa7, 0xf0, 0x69, 0x8e,
+ 0x43, 0x14, 0xfb, 0xeb, 0x2f, 0x15, 0x66, 0xd1,
+ 0xb9, 0x25, 0x30, 0x08, 0xcb, 0xcc, 0xf4, 0x5a,
+ 0x2b, 0x0d, 0x9c, 0x5c, 0x9c, 0x21, 0x47, 0x4f,
+ 0x40, 0x76, 0xe0, 0x2b, 0xe2, 0x60, 0x50, 0xb9,
+ 0x9d, 0xee, 0x4f, 0xd6, 0x8a, 0x4c, 0xf8, 0x90,
+ 0xe4, 0x96, 0xe4, 0xfc, 0xae, 0x7b, 0x70, 0xf9,
+ 0x4e, 0xa5, 0xa9, 0x06, 0x2d, 0xa0, 0xda, 0xeb,
+ 0xa1, 0x99, 0x3d, 0x2c, 0xcd, 0x1d, 0xd3, 0xc2,
+ 0x44, 0xb8, 0x42, 0x88, 0x01, 0x49, 0x5a, 0x58,
+ 0xb2, 0x16, 0x54, 0x7e, 0x7e, 0x84, 0x7c, 0x46,
+ 0xd1, 0xd7, 0x56, 0x37, 0x7b, 0x62, 0x42, 0xd2,
+ 0xe5, 0xfb, 0x83, 0xbf, 0x75, 0x2b, 0x54, 0xe0,
+ 0xdf, 0x71, 0xe8, 0x89, 0xf3, 0xa2, 0xbb, 0x0f,
+ 0x4c, 0x10, 0x80, 0x5b, 0xf3, 0xc5, 0x90, 0x37,
+ 0x6e, 0x3c, 0x24, 0xe2, 0x2f, 0xf5, 0x7f, 0x7f,
+ 0xa9, 0x65, 0x57, 0x73, 0x75, 0x32, 0x5c, 0xea,
+ 0x5d, 0x92, 0x0d, 0xb9, 0x4b, 0x9c, 0x33, 0x6b,
+ 0x45, 0x5f, 0x6e, 0x89, 0x4c, 0x01, 0x86, 0x6f,
+ 0xe9, 0xfb, 0xb8, 0xc8, 0xd3, 0xf7, 0x0a, 0x29,
+ 0x57, 0x28, 0x5f, 0x6d, 0xfb, 0x5d, 0xcd, 0x8c,
+ 0xbf, 0x54, 0x78, 0x2f, 0x8f, 0xe7, 0x76, 0x6d,
+ 0x47, 0x23, 0x81, 0x99, 0x13, 0xac, 0x77, 0x34,
+ 0x21, 0xe3, 0xa3, 0x10, 0x95, 0x86, 0x6b, 0xad,
+ 0x22, 0xc8, 0x6a, 0x60, 0x36, 0xb2, 0x51, 0x8b,
+ 0x20, 0x59, 0xb4, 0x22, 0x9d, 0x18, 0xc8, 0xc2,
+ 0xcc, 0xbd, 0xf9, 0x06, 0xc6, 0xcc, 0x6e, 0x82,
+ 0x46, 0x4e, 0xe5, 0x7b, 0xdd, 0xb0, 0xbe, 0xbc,
+ 0xb1, 0xdc, 0x64, 0x53, 0x25, 0xbf, 0xb3, 0xe6,
+ 0x65, 0xef, 0x72, 0x51, 0x08, 0x2c, 0x88, 0xeb,
+ 0xb1, 0xcf, 0x20, 0x3b, 0xd7, 0x79, 0xfd, 0xd3,
+ 0x86, 0x75, 0x71, 0x3c, 0x8d, 0xaa, 0xdd, 0x17,
+ 0xe1, 0xca, 0xbe, 0xe4, 0x32, 0xb0, 0x97, 0x87,
+ 0xb6, 0xdd, 0xf3, 0x30, 0x4e, 0x38, 0xb7, 0x31,
+ 0xb4, 0x5d, 0xf5, 0xdf, 0x51, 0xb7, 0x8f, 0xcf,
+ 0xb3, 0xd3, 0x24, 0x66, 0x02, 0x8d, 0x0b, 0xa3,
+ 0x65, 0x55, 0xe7, 0xe1, 0x1a, 0xb0, 0xee, 0x06,
+ 0x66, 0x06, 0x1d, 0x16, 0x45, 0xd9, 0x62, 0x44,
+ 0x4b, 0xc4, 0x7a, 0x38, 0x18, 0x89, 0x30, 0xa8,
+ 0x4b, 0x4d, 0x56, 0x13, 0x95, 0xc7, 0x3c, 0x08,
+ 0x70, 0x21, 0x92, 0x7c, 0xa6, 0x38, 0xb7, 0xaf,
+ 0xc8, 0xa8, 0x67, 0x9c, 0xcb, 0x84, 0xc2, 0x65,
+ 0x55, 0x44, 0x0e, 0xc7, 0xf1, 0x04, 0x45, 0xcd,
+};
+
+const struct testvec aes_xts_256_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_xts_256_vec4_ptxt,
+ .ctxt = aes_xts_256_vec4_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_xts_256_vec5_ptxt,
+ .ctxt = aes_xts_256_vec5_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_xts_256_vec6_ptxt,
+ .ctxt = aes_xts_256_vec6_ctxt,
+ },
+ {
+ .blkno = 0xfd,
+ .ptxt = aes_xts_256_vec7_ptxt,
+ .ctxt = aes_xts_256_vec7_ctxt,
+ },
+ {
+ .blkno = 0xfe,
+ .ptxt = aes_xts_256_vec8_ptxt,
+ .ctxt = aes_xts_256_vec8_ctxt,
+ },
+ {
+ .blkno = 0xff,
+ .ptxt = aes_xts_256_vec9_ptxt,
+ .ctxt = aes_xts_256_vec9_ctxt,
+ },
+};
+
+/*
+ * Vector 10 from IEEE 1619/D16, blkno 0xff.
+ */
+static const uint8_t aes_xts_512_vec10_ptxt[SECSIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+static const uint8_t aes_xts_512_vec10_ctxt[SECSIZE] = {
+ 0x1c, 0x3b, 0x3a, 0x10, 0x2f, 0x77, 0x03, 0x86,
+ 0xe4, 0x83, 0x6c, 0x99, 0xe3, 0x70, 0xcf, 0x9b,
+ 0xea, 0x00, 0x80, 0x3f, 0x5e, 0x48, 0x23, 0x57,
+ 0xa4, 0xae, 0x12, 0xd4, 0x14, 0xa3, 0xe6, 0x3b,
+ 0x5d, 0x31, 0xe2, 0x76, 0xf8, 0xfe, 0x4a, 0x8d,
+ 0x66, 0xb3, 0x17, 0xf9, 0xac, 0x68, 0x3f, 0x44,
+ 0x68, 0x0a, 0x86, 0xac, 0x35, 0xad, 0xfc, 0x33,
+ 0x45, 0xbe, 0xfe, 0xcb, 0x4b, 0xb1, 0x88, 0xfd,
+ 0x57, 0x76, 0x92, 0x6c, 0x49, 0xa3, 0x09, 0x5e,
+ 0xb1, 0x08, 0xfd, 0x10, 0x98, 0xba, 0xec, 0x70,
+ 0xaa, 0xa6, 0x69, 0x99, 0xa7, 0x2a, 0x82, 0xf2,
+ 0x7d, 0x84, 0x8b, 0x21, 0xd4, 0xa7, 0x41, 0xb0,
+ 0xc5, 0xcd, 0x4d, 0x5f, 0xff, 0x9d, 0xac, 0x89,
+ 0xae, 0xba, 0x12, 0x29, 0x61, 0xd0, 0x3a, 0x75,
+ 0x71, 0x23, 0xe9, 0x87, 0x0f, 0x8a, 0xcf, 0x10,
+ 0x00, 0x02, 0x08, 0x87, 0x89, 0x14, 0x29, 0xca,
+ 0x2a, 0x3e, 0x7a, 0x7d, 0x7d, 0xf7, 0xb1, 0x03,
+ 0x55, 0x16, 0x5c, 0x8b, 0x9a, 0x6d, 0x0a, 0x7d,
+ 0xe8, 0xb0, 0x62, 0xc4, 0x50, 0x0d, 0xc4, 0xcd,
+ 0x12, 0x0c, 0x0f, 0x74, 0x18, 0xda, 0xe3, 0xd0,
+ 0xb5, 0x78, 0x1c, 0x34, 0x80, 0x3f, 0xa7, 0x54,
+ 0x21, 0xc7, 0x90, 0xdf, 0xe1, 0xde, 0x18, 0x34,
+ 0xf2, 0x80, 0xd7, 0x66, 0x7b, 0x32, 0x7f, 0x6c,
+ 0x8c, 0xd7, 0x55, 0x7e, 0x12, 0xac, 0x3a, 0x0f,
+ 0x93, 0xec, 0x05, 0xc5, 0x2e, 0x04, 0x93, 0xef,
+ 0x31, 0xa1, 0x2d, 0x3d, 0x92, 0x60, 0xf7, 0x9a,
+ 0x28, 0x9d, 0x6a, 0x37, 0x9b, 0xc7, 0x0c, 0x50,
+ 0x84, 0x14, 0x73, 0xd1, 0xa8, 0xcc, 0x81, 0xec,
+ 0x58, 0x3e, 0x96, 0x45, 0xe0, 0x7b, 0x8d, 0x96,
+ 0x70, 0x65, 0x5b, 0xa5, 0xbb, 0xcf, 0xec, 0xc6,
+ 0xdc, 0x39, 0x66, 0x38, 0x0a, 0xd8, 0xfe, 0xcb,
+ 0x17, 0xb6, 0xba, 0x02, 0x46, 0x9a, 0x02, 0x0a,
+ 0x84, 0xe1, 0x8e, 0x8f, 0x84, 0x25, 0x20, 0x70,
+ 0xc1, 0x3e, 0x9f, 0x1f, 0x28, 0x9b, 0xe5, 0x4f,
+ 0xbc, 0x48, 0x14, 0x57, 0x77, 0x8f, 0x61, 0x60,
+ 0x15, 0xe1, 0x32, 0x7a, 0x02, 0xb1, 0x40, 0xf1,
+ 0x50, 0x5e, 0xb3, 0x09, 0x32, 0x6d, 0x68, 0x37,
+ 0x8f, 0x83, 0x74, 0x59, 0x5c, 0x84, 0x9d, 0x84,
+ 0xf4, 0xc3, 0x33, 0xec, 0x44, 0x23, 0x88, 0x51,
+ 0x43, 0xcb, 0x47, 0xbd, 0x71, 0xc5, 0xed, 0xae,
+ 0x9b, 0xe6, 0x9a, 0x2f, 0xfe, 0xce, 0xb1, 0xbe,
+ 0xc9, 0xde, 0x24, 0x4f, 0xbe, 0x15, 0x99, 0x2b,
+ 0x11, 0xb7, 0x7c, 0x04, 0x0f, 0x12, 0xbd, 0x8f,
+ 0x6a, 0x97, 0x5a, 0x44, 0xa0, 0xf9, 0x0c, 0x29,
+ 0xa9, 0xab, 0xc3, 0xd4, 0xd8, 0x93, 0x92, 0x72,
+ 0x84, 0xc5, 0x87, 0x54, 0xcc, 0xe2, 0x94, 0x52,
+ 0x9f, 0x86, 0x14, 0xdc, 0xd2, 0xab, 0xa9, 0x91,
+ 0x92, 0x5f, 0xed, 0xc4, 0xae, 0x74, 0xff, 0xac,
+ 0x6e, 0x33, 0x3b, 0x93, 0xeb, 0x4a, 0xff, 0x04,
+ 0x79, 0xda, 0x9a, 0x41, 0x0e, 0x44, 0x50, 0xe0,
+ 0xdd, 0x7a, 0xe4, 0xc6, 0xe2, 0x91, 0x09, 0x00,
+ 0x57, 0x5d, 0xa4, 0x01, 0xfc, 0x07, 0x05, 0x9f,
+ 0x64, 0x5e, 0x8b, 0x7e, 0x9b, 0xfd, 0xef, 0x33,
+ 0x94, 0x30, 0x54, 0xff, 0x84, 0x01, 0x14, 0x93,
+ 0xc2, 0x7b, 0x34, 0x29, 0xea, 0xed, 0xb4, 0xed,
+ 0x53, 0x76, 0x44, 0x1a, 0x77, 0xed, 0x43, 0x85,
+ 0x1a, 0xd7, 0x7f, 0x16, 0xf5, 0x41, 0xdf, 0xd2,
+ 0x69, 0xd5, 0x0d, 0x6a, 0x5f, 0x14, 0xfb, 0x0a,
+ 0xab, 0x1c, 0xbb, 0x4c, 0x15, 0x50, 0xbe, 0x97,
+ 0xf7, 0xab, 0x40, 0x66, 0x19, 0x3c, 0x4c, 0xaa,
+ 0x77, 0x3d, 0xad, 0x38, 0x01, 0x4b, 0xd2, 0x09,
+ 0x2f, 0xa7, 0x55, 0xc8, 0x24, 0xbb, 0x5e, 0x54,
+ 0xc4, 0xf3, 0x6f, 0xfd, 0xa9, 0xfc, 0xea, 0x70,
+ 0xb9, 0xc6, 0xe6, 0x93, 0xe1, 0x48, 0xc1, 0x51,
+};
+
+/*
+ * Vector 11 from IEEE 1619/D16, blkno 0xffff.
+ */
+static const uint8_t aes_xts_512_vec11_ptxt[SECSIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+static const uint8_t aes_xts_512_vec11_ctxt[SECSIZE] = {
+ 0x77, 0xa3, 0x12, 0x51, 0x61, 0x8a, 0x15, 0xe6,
+ 0xb9, 0x2d, 0x1d, 0x66, 0xdf, 0xfe, 0x7b, 0x50,
+ 0xb5, 0x0b, 0xad, 0x55, 0x23, 0x05, 0xba, 0x02,
+ 0x17, 0xa6, 0x10, 0x68, 0x8e, 0xff, 0x7e, 0x11,
+ 0xe1, 0xd0, 0x22, 0x54, 0x38, 0xe0, 0x93, 0x24,
+ 0x2d, 0x6d, 0xb2, 0x74, 0xfd, 0xe8, 0x01, 0xd4,
+ 0xca, 0xe0, 0x6f, 0x20, 0x92, 0xc7, 0x28, 0xb2,
+ 0x47, 0x85, 0x59, 0xdf, 0x58, 0xe8, 0x37, 0xc2,
+ 0x46, 0x9e, 0xe4, 0xa4, 0xfa, 0x79, 0x4e, 0x4b,
+ 0xbc, 0x7f, 0x39, 0xbc, 0x02, 0x6e, 0x3c, 0xb7,
+ 0x2c, 0x33, 0xb0, 0x88, 0x8f, 0x25, 0xb4, 0xac,
+ 0xf5, 0x6a, 0x2a, 0x98, 0x04, 0xf1, 0xce, 0x6d,
+ 0x3d, 0x6e, 0x1d, 0xc6, 0xca, 0x18, 0x1d, 0x4b,
+ 0x54, 0x61, 0x79, 0xd5, 0x55, 0x44, 0xaa, 0x77,
+ 0x60, 0xc4, 0x0d, 0x06, 0x74, 0x15, 0x39, 0xc7,
+ 0xe3, 0xcd, 0x9d, 0x2f, 0x66, 0x50, 0xb2, 0x01,
+ 0x3f, 0xd0, 0xee, 0xb8, 0xc2, 0xb8, 0xe3, 0xd8,
+ 0xd2, 0x40, 0xcc, 0xae, 0x2d, 0x4c, 0x98, 0x32,
+ 0x0a, 0x74, 0x42, 0xe1, 0xc8, 0xd7, 0x5a, 0x42,
+ 0xd6, 0xe6, 0xcf, 0xa4, 0xc2, 0xec, 0xa1, 0x79,
+ 0x8d, 0x15, 0x8c, 0x7a, 0xec, 0xdf, 0x82, 0x49,
+ 0x0f, 0x24, 0xbb, 0x9b, 0x38, 0xe1, 0x08, 0xbc,
+ 0xda, 0x12, 0xc3, 0xfa, 0xf9, 0xa2, 0x11, 0x41,
+ 0xc3, 0x61, 0x3b, 0x58, 0x36, 0x7f, 0x92, 0x2a,
+ 0xaa, 0x26, 0xcd, 0x22, 0xf2, 0x3d, 0x70, 0x8d,
+ 0xae, 0x69, 0x9a, 0xd7, 0xcb, 0x40, 0xa8, 0xad,
+ 0x0b, 0x6e, 0x27, 0x84, 0x97, 0x3d, 0xcb, 0x60,
+ 0x56, 0x84, 0xc0, 0x8b, 0x8d, 0x69, 0x98, 0xc6,
+ 0x9a, 0xac, 0x04, 0x99, 0x21, 0x87, 0x1e, 0xbb,
+ 0x65, 0x30, 0x1a, 0x46, 0x19, 0xca, 0x80, 0xec,
+ 0xb4, 0x85, 0xa3, 0x1d, 0x74, 0x42, 0x23, 0xce,
+ 0x8d, 0xdc, 0x23, 0x94, 0x82, 0x8d, 0x6a, 0x80,
+ 0x47, 0x0c, 0x09, 0x2f, 0x5b, 0xa4, 0x13, 0xc3,
+ 0x37, 0x8f, 0xa6, 0x05, 0x42, 0x55, 0xc6, 0xf9,
+ 0xdf, 0x44, 0x95, 0x86, 0x2b, 0xbb, 0x32, 0x87,
+ 0x68, 0x1f, 0x93, 0x1b, 0x68, 0x7c, 0x88, 0x8a,
+ 0xbf, 0x84, 0x4d, 0xfc, 0x8f, 0xc2, 0x83, 0x31,
+ 0xe5, 0x79, 0x92, 0x8c, 0xd1, 0x2b, 0xd2, 0x39,
+ 0x0a, 0xe1, 0x23, 0xcf, 0x03, 0x81, 0x8d, 0x14,
+ 0xde, 0xdd, 0xe5, 0xc0, 0xc2, 0x4c, 0x8a, 0xb0,
+ 0x18, 0xbf, 0xca, 0x75, 0xca, 0x09, 0x6f, 0x2d,
+ 0x53, 0x1f, 0x3d, 0x16, 0x19, 0xe7, 0x85, 0xf1,
+ 0xad, 0xa4, 0x37, 0xca, 0xb9, 0x2e, 0x98, 0x05,
+ 0x58, 0xb3, 0xdc, 0xe1, 0x47, 0x4a, 0xfb, 0x75,
+ 0xbf, 0xed, 0xbf, 0x8f, 0xf5, 0x4c, 0xb2, 0x61,
+ 0x8e, 0x02, 0x44, 0xc9, 0xac, 0x0d, 0x3c, 0x66,
+ 0xfb, 0x51, 0x59, 0x8c, 0xd2, 0xdb, 0x11, 0xf9,
+ 0xbe, 0x39, 0x79, 0x1a, 0xbe, 0x44, 0x7c, 0x63,
+ 0x09, 0x4f, 0x7c, 0x45, 0x3b, 0x7f, 0xf8, 0x7c,
+ 0xb5, 0xbb, 0x36, 0xb7, 0xc7, 0x9e, 0xfb, 0x08,
+ 0x72, 0xd1, 0x70, 0x58, 0xb8, 0x3b, 0x15, 0xab,
+ 0x08, 0x66, 0xad, 0x8a, 0x58, 0x65, 0x6c, 0x5a,
+ 0x7e, 0x20, 0xdb, 0xdf, 0x30, 0x8b, 0x24, 0x61,
+ 0xd9, 0x7c, 0x0e, 0xc0, 0x02, 0x4a, 0x27, 0x15,
+ 0x05, 0x52, 0x49, 0xcf, 0x3b, 0x47, 0x8d, 0xdd,
+ 0x47, 0x40, 0xde, 0x65, 0x4f, 0x75, 0xca, 0x68,
+ 0x6e, 0x0d, 0x73, 0x45, 0xc6, 0x9e, 0xd5, 0x0c,
+ 0xdc, 0x2a, 0x8b, 0x33, 0x2b, 0x1f, 0x88, 0x24,
+ 0x10, 0x8a, 0xc9, 0x37, 0xeb, 0x05, 0x05, 0x85,
+ 0x60, 0x8e, 0xe7, 0x34, 0x09, 0x7f, 0xc0, 0x90,
+ 0x54, 0xfb, 0xff, 0x89, 0xee, 0xae, 0xea, 0x79,
+ 0x1f, 0x4a, 0x7a, 0xb1, 0xf9, 0x86, 0x82, 0x94,
+ 0xa4, 0xf9, 0xe2, 0x7b, 0x42, 0xaf, 0x81, 0x00,
+ 0xcb, 0x9d, 0x59, 0xce, 0xf9, 0x64, 0x58, 0x03,
+};
+
+const struct testvec aes_xts_512_vectors[] = {
+ {
+ .blkno = 0xff,
+ .ptxt = aes_xts_512_vec10_ptxt,
+ .ctxt = aes_xts_512_vec10_ctxt,
+ },
+ {
+ .blkno = 0xffff,
+ .ptxt = aes_xts_512_vec11_ptxt,
+ .ctxt = aes_xts_512_vec11_ctxt,
+ },
+};
+
+static int
+open_disk(const char *devpath, const char *imgpath, size_t size)
+{
+ int fd;
+
+ fd = open(imgpath, O_CREAT | O_RDWR | O_TRUNC, 0600);
+ if (fd < 0)
+ return -1;
+
+ if (ftruncate(fd, size) < 0)
+ goto fail;
+
+ if (rump_pub_etfs_register_withsize(devpath,
+ imgpath, RUMP_ETFS_BLK, 0, size) < 0) {
+ goto fail;
+ }
+
+ unlink(imgpath);
+ return fd;
+fail:
+ close(fd);
+ unlink(imgpath);
+ return -1;
+}
+
+static int
+open_cgd(int devno)
+{
+ char devpath[32];
+
+ sprintf(devpath, "/dev/rcgd%d%c", devno, getrawpartition() + 'a');
+
+ return rump_sys_open(devpath, O_RDWR, 0);
+}
+
+static int
+configure_cgd(int fd, const char *dkpath, const char *alg,
+ const char *ivmethod, const char *key, size_t keylen)
+{
+ struct cgd_ioctl ci;
+
+ memset(&ci, 0, sizeof(ci));
+ ci.ci_disk = dkpath;
+ ci.ci_alg = alg;
+ ci.ci_ivmethod = ivmethod;
+ ci.ci_keylen = 8 * keylen - 8; /* Exclude the NUL terminator. */
+ ci.ci_key = key;
+ ci.ci_blocksize = 128;
+
+ return rump_sys_ioctl(fd, CGDIOCSET, &ci);
+}
+
+static int
+unconfigure_cgd(int fd)
+{
+ struct cgd_ioctl ci;
+
+ return rump_sys_ioctl(fd, CGDIOCCLR, &ci);
+}
+
+static int
+write_testvec(int cgdfd, const struct testvec *tv)
+{
+ ssize_t written;
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ return -1;
+
+ written = rump_sys_write(cgdfd, tv->ptxt, SECSIZE);
+ if (written < 0)
+ return -1;
+ if (written != SECSIZE) {
+ errno = EDOM; /* Something distinct. */
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
+read_testvec(int cgdfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (rump_sys_read(cgdfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ptxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+static int
+check_testvec(int dkfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (lseek(dkfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (read(dkfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ctxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+ATF_TC(cgd_aes_cbc_128_encblkno1);
+ATF_TC_HEAD(cgd_aes_cbc_128_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 128 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_128_encblkno1, tc)
+{
+ const char imgpath[] = "aes-cbc-128-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_128_key, sizeof(aes_cbc_128_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_1_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_1_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_1_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_1_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_128_key, sizeof(aes_cbc_128_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_128_encblkno8);
+ATF_TC_HEAD(cgd_aes_cbc_128_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 128 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_128_encblkno8, tc)
+{
+ const char imgpath[] = "aes-cbc-128-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_128_key, sizeof(aes_cbc_128_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_8_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_8_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_8_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_8_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_128_key, sizeof(aes_cbc_128_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_192_encblkno1);
+ATF_TC_HEAD(cgd_aes_cbc_192_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 192 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_192_encblkno1, tc)
+{
+ const char imgpath[] = "aes-cbc-192-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_192_key, sizeof(aes_cbc_192_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_1_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_1_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_1_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_1_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_192_key, sizeof(aes_cbc_192_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_192_encblkno8);
+ATF_TC_HEAD(cgd_aes_cbc_192_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 192 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_192_encblkno8, tc)
+{
+ const char imgpath[] = "aes-cbc-192-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_192_key, sizeof(aes_cbc_192_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_8_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_8_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_8_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_8_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_192_key, sizeof(aes_cbc_192_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_256_encblkno1);
+ATF_TC_HEAD(cgd_aes_cbc_256_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 256 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_256_encblkno1, tc)
+{
+ const char imgpath[] = "aes-cbc-256-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_256_key, sizeof(aes_cbc_256_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_1_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_1_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_1_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_1_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_256_key, sizeof(aes_cbc_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_256_encblkno8);
+ATF_TC_HEAD(cgd_aes_cbc_256_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 256 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_256_encblkno8, tc)
+{
+ const char imgpath[] = "aes-cbc-256-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_256_key, sizeof(aes_cbc_256_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_8_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_8_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_8_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_8_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_256_key, sizeof(aes_cbc_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_xts_256);
+ATF_TC_HEAD(cgd_aes_xts_256, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test aes-xts with 256 bits key");
+}
+
+ATF_TC_BODY(cgd_aes_xts_256, tc)
+{
+ const char imgpath[] = "aes-xts-256.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 256 * SECSIZE; /* Last blkno is 0xff. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-xts", "encblkno1",
+ aes_xts_256_key, sizeof(aes_xts_256_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[3]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[4]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[5]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-xts", "encblkno1",
+ aes_xts_256_key, sizeof(aes_xts_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[3]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[4]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[5]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[3]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[4]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[5]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_xts_512);
+ATF_TC_HEAD(cgd_aes_xts_512, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test aes-xts with 512 bits key");
+}
+
+ATF_TC_BODY(cgd_aes_xts_512, tc)
+{
+ const char imgpath[] = "aes-xts-512.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 65536 * SECSIZE; /* Last blkno is 0xffff. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-xts", "encblkno1",
+ aes_xts_512_key, sizeof(aes_xts_512_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_512_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_512_vectors[1]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-xts", "encblkno1",
+ aes_xts_512_key, sizeof(aes_xts_512_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_512_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_512_vectors[1]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_512_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_512_vectors[1]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_128_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_128_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_192_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_192_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_256_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_256_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_aes_xts_256);
+ ATF_TP_ADD_TC(tp, cgd_aes_xts_512);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/dev/cgd/t_cgd_blowfish.c b/contrib/netbsd-tests/dev/cgd/t_cgd_blowfish.c
new file mode 100644
index 0000000..958ebac
--- /dev/null
+++ b/contrib/netbsd-tests/dev/cgd/t_cgd_blowfish.c
@@ -0,0 +1,2341 @@
+/* $NetBSD: t_cgd_blowfish.c,v 1.1 2016/11/10 23:44:36 alnsn Exp $ */
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Alexander Nasonov.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/sysctl.h>
+
+#include <atf-c.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <util.h>
+
+#include <dev/cgdvar.h>
+
+#include <rump/rump.h>
+#include <rump/rump_syscalls.h>
+
+#include "../../h_macros.h"
+
+#define SECSIZE 512
+
+struct testvec {
+ unsigned int blkno;
+ const uint8_t *ptxt; /* PlainText */
+ const uint8_t *ctxt; /* CipherText */
+};
+
+/*
+ * 128 bits Blowfish key, NUL terminated.
+ */
+static const char bf_cbc_128_key[17] = {
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
+ 0
+};
+
+/*
+ * 256 bits Blowfish key, NUL terminated.
+ */
+static const char bf_cbc_256_key[33] = {
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, /* 89abcdef */
+ 0
+};
+
+/*
+ * 448 bits Blowfish key, NUL terminated.
+ */
+static const char bf_cbc_448_key[57] = {
+ 0x3a, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* :ABCDEFG */
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* HIJKLMNO */
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* PQRSTUVW */
+ 0x58, 0x59, 0x5a, 0x7e, 0x3a, 0x61, 0x62, 0x63, /* XYZ~:abc */
+ 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, /* defghijk */
+ 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, /* lmnopqrs */
+ 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x23, /* tuvwxyz# */
+ 0
+};
+
+static const uint8_t bf_cbc_ptxt[SECSIZE] =
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop";
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t bf_cbc_128_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x78, 0x53, 0x43, 0x2a, 0x08, 0xe7, 0x84, 0x3f,
+ 0xb7, 0x61, 0x9c, 0x17, 0x81, 0xbe, 0x38, 0xb9,
+ 0x65, 0x51, 0x68, 0xa2, 0x29, 0xd7, 0x45, 0xc9,
+ 0xee, 0x0e, 0x9d, 0xe1, 0x69, 0xc6, 0x81, 0x81,
+ 0xf3, 0x93, 0xa6, 0x62, 0xc9, 0x05, 0x2c, 0x1b,
+ 0x0e, 0x05, 0xca, 0xbe, 0x12, 0x25, 0x37, 0xd8,
+ 0x98, 0x66, 0xa2, 0xd3, 0xd0, 0x8a, 0x89, 0x57,
+ 0x44, 0x91, 0x1e, 0xe9, 0x07, 0x03, 0x5c, 0xa6,
+ 0xb8, 0x30, 0xf1, 0xc7, 0x8c, 0x66, 0x05, 0xb0,
+ 0x2d, 0xc3, 0xc3, 0xd7, 0x60, 0xef, 0x62, 0xd3,
+ 0x34, 0x9c, 0xa9, 0xd2, 0x0c, 0x1a, 0x9c, 0xfe,
+ 0x74, 0x92, 0xcb, 0x90, 0x80, 0xfa, 0x71, 0x5c,
+ 0xaa, 0x29, 0x39, 0xdd, 0x3b, 0x62, 0xa1, 0xfc,
+ 0xa5, 0x35, 0xcd, 0xa3, 0x29, 0x41, 0x1a, 0x03,
+ 0xf7, 0xe1, 0x36, 0xb2, 0xdc, 0x1a, 0xb3, 0x9f,
+ 0x46, 0xa3, 0xf7, 0xc3, 0xd1, 0x29, 0x83, 0xcf,
+ 0x0d, 0x88, 0x0b, 0xd1, 0xb7, 0xc7, 0x87, 0x21,
+ 0xb7, 0x1f, 0xe7, 0xa2, 0x8e, 0x5f, 0xac, 0x6b,
+ 0x49, 0x9c, 0x93, 0x6b, 0x6b, 0x05, 0x8e, 0x4c,
+ 0xbd, 0x31, 0x13, 0x5f, 0x4a, 0xd0, 0x35, 0x0c,
+ 0x67, 0x8f, 0xd0, 0x7a, 0xc9, 0xe3, 0x52, 0x50,
+ 0x4f, 0x85, 0x09, 0xf1, 0x27, 0xb9, 0xb1, 0x1e,
+ 0xe4, 0x6a, 0x40, 0xf6, 0x5a, 0x4f, 0x5f, 0xbe,
+ 0xab, 0xe8, 0xb9, 0xfe, 0xc7, 0x59, 0x6b, 0x0c,
+ 0xcd, 0x46, 0x4e, 0x90, 0x99, 0xde, 0xf7, 0x43,
+ 0xee, 0x6e, 0xb6, 0xae, 0xc2, 0x5e, 0x08, 0xbb,
+ 0xe9, 0x30, 0x2d, 0xb2, 0x91, 0xcc, 0xb9, 0xc7,
+ 0x58, 0xea, 0x35, 0xae, 0xa2, 0xd8, 0x00, 0xf7,
+ 0xc0, 0x01, 0xc4, 0x34, 0x2b, 0x34, 0x43, 0xae,
+ 0xeb, 0x27, 0xbc, 0x5c, 0x91, 0x5f, 0x5f, 0xc1,
+ 0x61, 0x42, 0x45, 0x68, 0x31, 0xbc, 0xce, 0xb4,
+ 0x5c, 0xd3, 0x07, 0xdf, 0x4e, 0x65, 0x65, 0x9d,
+ 0x2e, 0x26, 0x28, 0xfa, 0xcd, 0x53, 0x77, 0x6a,
+ 0x77, 0xad, 0x96, 0x0b, 0x1f, 0xea, 0x03, 0xc1,
+ 0xdd, 0xca, 0xe8, 0xfe, 0xe8, 0x36, 0x01, 0x61,
+ 0x72, 0xbb, 0xed, 0xfd, 0x8d, 0xa3, 0xc2, 0x15,
+ 0x25, 0x4f, 0xa6, 0x1a, 0x73, 0xbd, 0xcd, 0x45,
+ 0xdb, 0x08, 0x74, 0x7b, 0xa8, 0x23, 0xf5, 0x74,
+ 0x3a, 0x18, 0x6d, 0x90, 0xe0, 0xee, 0xae, 0xfe,
+ 0xc8, 0xac, 0x00, 0x57, 0xa0, 0xe1, 0xfe, 0x10,
+ 0xd4, 0xf3, 0xa8, 0x00, 0x21, 0x3e, 0x2d, 0xf9,
+ 0x63, 0xb8, 0xe9, 0xa4, 0x2e, 0xf4, 0x6b, 0xd7,
+ 0x5c, 0xfd, 0x32, 0x6c, 0x98, 0x05, 0x38, 0x0d,
+ 0x29, 0xb5, 0x5a, 0x5b, 0xbb, 0xad, 0xfd, 0x46,
+ 0x9b, 0x6a, 0x97, 0x4c, 0x24, 0xcc, 0x7d, 0x13,
+ 0x25, 0xe8, 0x2c, 0xb9, 0x13, 0x54, 0xb2, 0x8a,
+ 0x28, 0xa0, 0x8a, 0x3a, 0x4d, 0x7e, 0xf4, 0x29,
+ 0xff, 0xfb, 0x4f, 0xd6, 0x3d, 0xf7, 0xca, 0x89,
+ 0x2a, 0x58, 0x9e, 0x42, 0x00, 0x84, 0x61, 0x58,
+ 0x7c, 0x94, 0xf6, 0x50, 0x48, 0x2f, 0x34, 0x88,
+ 0xec, 0x97, 0xef, 0x8b, 0x2f, 0x84, 0xca, 0x23,
+ 0xe1, 0xb7, 0x63, 0x99, 0xdd, 0x4a, 0x76, 0xdd,
+ 0x20, 0xc1, 0xc2, 0x56, 0x45, 0xbe, 0x75, 0x9a,
+ 0x40, 0x72, 0xc8, 0xfb, 0x7e, 0x40, 0x6f, 0x38,
+ 0xfd, 0x76, 0xa4, 0x78, 0xf5, 0xde, 0x5f, 0xb7,
+ 0x4a, 0xa9, 0xaf, 0xad, 0xa1, 0x8b, 0x25, 0x8f,
+ 0xea, 0xb3, 0xeb, 0x54, 0x39, 0x5a, 0x91, 0xfe,
+ 0x86, 0x18, 0xea, 0x8c, 0xd6, 0x66, 0xd5, 0x85,
+ 0x02, 0x2b, 0x00, 0x5d, 0x7e, 0x13, 0xa0, 0x1f,
+ 0x73, 0x46, 0x6d, 0x5e, 0xcd, 0xe0, 0x82, 0x02,
+ 0x28, 0x88, 0xbf, 0x17, 0xfd, 0x9b, 0x83, 0x2c,
+ 0xa2, 0xf7, 0xde, 0x51, 0x98, 0x3f, 0xe2, 0x80,
+ 0x66, 0x14, 0x17, 0xce, 0x8e, 0x30, 0x2d, 0xe2,
+ 0x24, 0x68, 0x4b, 0xe5, 0xd1, 0x09, 0xfb, 0x6e,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t bf_cbc_128_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x87, 0xae, 0x01, 0x52, 0xe8, 0xe9, 0xd9, 0xba,
+ 0xa9, 0x18, 0x31, 0x2c, 0x1b, 0xab, 0x57, 0xad,
+ 0x45, 0x0e, 0x25, 0x5e, 0x0e, 0x04, 0xfa, 0xdd,
+ 0xf1, 0x59, 0xe6, 0xea, 0x78, 0x4b, 0x83, 0x07,
+ 0x8b, 0x46, 0x91, 0x09, 0x58, 0x5a, 0x11, 0x2e,
+ 0x54, 0x43, 0xa4, 0xc1, 0x04, 0x35, 0xd3, 0x3e,
+ 0xc9, 0xc8, 0xf5, 0xff, 0x69, 0x1e, 0x57, 0x85,
+ 0x6d, 0x91, 0x03, 0xeb, 0x8c, 0xa7, 0xe8, 0xcc,
+ 0x3f, 0xac, 0xf9, 0x14, 0x1e, 0x88, 0x50, 0xa5,
+ 0x38, 0x66, 0xa9, 0xf4, 0xf5, 0xc6, 0x30, 0x95,
+ 0xd6, 0x84, 0x0b, 0x81, 0xf9, 0x51, 0x05, 0x80,
+ 0x9a, 0x89, 0xbf, 0xd4, 0x7d, 0x6a, 0x26, 0x59,
+ 0x29, 0x44, 0xe7, 0x1d, 0x0e, 0xad, 0x8c, 0xa0,
+ 0x93, 0xe9, 0x4b, 0x4b, 0x51, 0x46, 0xa5, 0x07,
+ 0xe8, 0xcb, 0x59, 0xf4, 0x63, 0xb5, 0x36, 0xdb,
+ 0xbc, 0x54, 0x2d, 0xec, 0xf0, 0x90, 0x3a, 0xa5,
+ 0xed, 0xc8, 0x28, 0x0e, 0xd3, 0x79, 0xb8, 0x57,
+ 0xc6, 0x7f, 0x02, 0x22, 0x5e, 0x80, 0xe8, 0x7f,
+ 0xdf, 0xa0, 0x0f, 0xbc, 0x98, 0x79, 0x6f, 0xd2,
+ 0xb0, 0xb2, 0x4f, 0x9b, 0x1a, 0x21, 0x8f, 0x63,
+ 0xce, 0x54, 0x41, 0x64, 0xbf, 0xb9, 0xa7, 0x93,
+ 0xd6, 0x5b, 0x89, 0x86, 0xda, 0x90, 0x23, 0x2e,
+ 0x25, 0x35, 0x1a, 0x9a, 0xf5, 0x1e, 0x8f, 0xb4,
+ 0xe6, 0x66, 0x8e, 0x0e, 0x2d, 0x91, 0x06, 0x4b,
+ 0x3d, 0x4a, 0x97, 0xab, 0x9b, 0x92, 0x09, 0xaa,
+ 0x07, 0xbf, 0xc1, 0x7d, 0xe2, 0xbc, 0xd2, 0xf1,
+ 0x38, 0x8d, 0x02, 0x45, 0xc8, 0x13, 0x12, 0xda,
+ 0xaa, 0x53, 0xa2, 0x2c, 0x96, 0x69, 0x64, 0xce,
+ 0x86, 0xe4, 0x84, 0x56, 0xd0, 0xe5, 0x81, 0x99,
+ 0x27, 0xad, 0x86, 0x47, 0x5f, 0xaf, 0xa2, 0xa2,
+ 0x90, 0x7f, 0xe7, 0x86, 0xec, 0x7f, 0xf4, 0xa3,
+ 0xcd, 0x4f, 0x60, 0xcc, 0x1e, 0x35, 0x44, 0xe8,
+ 0xe9, 0x06, 0xaf, 0x5e, 0x53, 0x3d, 0x30, 0x91,
+ 0xfe, 0x44, 0x59, 0x66, 0x82, 0xc2, 0xea, 0x9f,
+ 0xc8, 0x3b, 0xe2, 0xe5, 0x58, 0xf7, 0x34, 0xd5,
+ 0x9e, 0xfc, 0x20, 0x84, 0x34, 0xaa, 0x4f, 0xe1,
+ 0xd4, 0x95, 0x76, 0x11, 0x59, 0x90, 0x90, 0xfd,
+ 0x4d, 0xf9, 0xb8, 0x41, 0xe1, 0xdb, 0x36, 0x05,
+ 0xe3, 0x0f, 0xa4, 0x4f, 0x0c, 0x61, 0x70, 0xa5,
+ 0x1b, 0xbf, 0xab, 0x65, 0x67, 0x75, 0x5c, 0x7d,
+ 0x46, 0x3b, 0x29, 0xd0, 0x3d, 0x06, 0x40, 0x25,
+ 0x47, 0x3e, 0x8d, 0x62, 0xf8, 0xd8, 0x08, 0xc1,
+ 0x03, 0x04, 0x4b, 0x5a, 0x40, 0x65, 0x84, 0x52,
+ 0x34, 0xa2, 0x4a, 0xcc, 0x3a, 0x9c, 0x1e, 0xbf,
+ 0x2d, 0xed, 0x08, 0x8b, 0xc3, 0x8f, 0x48, 0xba,
+ 0x06, 0x03, 0xea, 0x5b, 0xba, 0x6a, 0xac, 0x23,
+ 0x5a, 0x5e, 0x31, 0x08, 0x29, 0x69, 0x64, 0x44,
+ 0x1c, 0x31, 0xae, 0xb1, 0x86, 0x7b, 0x26, 0x89,
+ 0xa6, 0xbe, 0xef, 0x69, 0x81, 0xf7, 0x77, 0xd5,
+ 0x8e, 0x78, 0xa5, 0x11, 0x51, 0xca, 0xec, 0xd0,
+ 0x86, 0xa5, 0x33, 0xf3, 0x65, 0x5d, 0x04, 0xc5,
+ 0xd2, 0x17, 0x2a, 0xfe, 0x4a, 0x58, 0x0f, 0x98,
+ 0x61, 0xad, 0xc3, 0xb8, 0x5b, 0x45, 0xcc, 0x28,
+ 0x3d, 0x4d, 0x00, 0xf5, 0x4a, 0xe2, 0xbc, 0x6c,
+ 0x1b, 0x80, 0x7a, 0x2b, 0x40, 0xb8, 0x34, 0x0e,
+ 0x44, 0x53, 0x16, 0xda, 0x7c, 0x46, 0x8b, 0x42,
+ 0x5e, 0xa8, 0xe1, 0xb8, 0xf8, 0xcf, 0xff, 0x48,
+ 0xcf, 0x2c, 0x4c, 0x98, 0xdb, 0xe5, 0x55, 0xfe,
+ 0x45, 0xfa, 0xf8, 0xde, 0x72, 0xf9, 0x84, 0x3c,
+ 0xc0, 0x0c, 0x1f, 0x86, 0x97, 0x86, 0xb8, 0xfe,
+ 0x7d, 0xff, 0xa3, 0xaf, 0x68, 0x00, 0x66, 0x90,
+ 0xac, 0xb5, 0xd8, 0xde, 0x35, 0x01, 0xf7, 0xab,
+ 0xab, 0xe3, 0xe9, 0x85, 0x4c, 0x6f, 0xe6, 0xbc,
+ 0xce, 0x67, 0x4a, 0xbd, 0xad, 0x7b, 0xec, 0xa1,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t bf_cbc_128_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x17, 0xdd, 0x0f, 0x4b, 0x28, 0x33, 0x03, 0x89,
+ 0x21, 0x7b, 0x67, 0x15, 0x15, 0x65, 0x08, 0x4f,
+ 0x65, 0x18, 0xa6, 0x4b, 0x62, 0xdb, 0x1e, 0xc2,
+ 0xaa, 0x82, 0xb6, 0x1d, 0xf7, 0x12, 0x9e, 0x73,
+ 0xfe, 0xac, 0x2f, 0x1e, 0x2b, 0xea, 0x3a, 0x4f,
+ 0xc3, 0x0a, 0x59, 0x80, 0x0d, 0x3d, 0xbc, 0x62,
+ 0x8d, 0x70, 0xef, 0x1b, 0xfb, 0xdc, 0x4e, 0xc4,
+ 0x97, 0xf4, 0x77, 0xb7, 0x25, 0x94, 0x13, 0x48,
+ 0xf2, 0x3d, 0x4c, 0xa7, 0xb8, 0x8c, 0xf5, 0x26,
+ 0xa4, 0x35, 0xeb, 0xa0, 0xe7, 0x68, 0xb0, 0x69,
+ 0xf4, 0xf6, 0x13, 0x3a, 0x57, 0xa3, 0xd2, 0x26,
+ 0xe6, 0x70, 0xd8, 0xd4, 0x05, 0xb5, 0x01, 0xda,
+ 0xc7, 0x4a, 0x79, 0x1a, 0x6d, 0xb6, 0xf6, 0xb5,
+ 0x7d, 0x9a, 0x5c, 0xf1, 0x6a, 0xf8, 0xd1, 0x0a,
+ 0xbc, 0xe7, 0xea, 0xb4, 0x99, 0x72, 0x19, 0x97,
+ 0x41, 0x4f, 0x14, 0x5f, 0xa3, 0xb3, 0x9b, 0x36,
+ 0x00, 0x08, 0x88, 0x8c, 0xce, 0x7f, 0x3a, 0x9b,
+ 0xb0, 0x24, 0x17, 0x95, 0xc4, 0x59, 0x30, 0x5d,
+ 0xc6, 0x92, 0x19, 0x12, 0x99, 0xb0, 0x08, 0xa6,
+ 0x04, 0xdb, 0xc6, 0xd5, 0x61, 0xe4, 0xe1, 0x68,
+ 0xa8, 0xd7, 0x07, 0xfe, 0x2f, 0x47, 0xea, 0x14,
+ 0xe5, 0xf7, 0x61, 0x9b, 0xbb, 0x98, 0xcb, 0x3b,
+ 0x8c, 0x41, 0xd1, 0x55, 0x59, 0xb2, 0x41, 0x61,
+ 0x8e, 0x60, 0x17, 0xcd, 0xe8, 0xf7, 0x1d, 0xbd,
+ 0x28, 0x5d, 0x1e, 0x15, 0x28, 0x80, 0x8c, 0x29,
+ 0x34, 0x96, 0x31, 0xda, 0xe1, 0x19, 0x88, 0xd5,
+ 0xe0, 0xc8, 0xb4, 0xaa, 0x04, 0x21, 0xf5, 0xef,
+ 0xfa, 0x0e, 0xc9, 0xa5, 0x88, 0x77, 0x49, 0xf4,
+ 0x02, 0x22, 0x0b, 0x8b, 0x5e, 0xe1, 0xab, 0xd4,
+ 0xb1, 0xb6, 0x48, 0x54, 0x96, 0x08, 0xaf, 0xa1,
+ 0x0b, 0xc0, 0xfe, 0x2a, 0x12, 0x36, 0x56, 0x85,
+ 0x6a, 0xf7, 0x3d, 0x82, 0xe6, 0xda, 0x5d, 0xfe,
+ 0x4f, 0x4f, 0xc9, 0x43, 0xdc, 0x0f, 0x53, 0x05,
+ 0x09, 0xd4, 0x9c, 0x2e, 0x6e, 0xf3, 0x52, 0x6a,
+ 0x10, 0xc6, 0x48, 0xb1, 0x54, 0x70, 0xab, 0x7c,
+ 0x31, 0xf6, 0x47, 0xef, 0x64, 0x5f, 0xff, 0x45,
+ 0x8c, 0x3f, 0x87, 0x3a, 0x2d, 0xa6, 0xaf, 0xb2,
+ 0x44, 0xdf, 0x80, 0x2e, 0x89, 0x4c, 0x94, 0x67,
+ 0xfc, 0x20, 0x98, 0xb4, 0xcf, 0x58, 0x1e, 0x33,
+ 0x55, 0x6a, 0x7c, 0x67, 0x5c, 0x28, 0x2f, 0x19,
+ 0x02, 0x14, 0x06, 0x93, 0x8c, 0x84, 0xae, 0x62,
+ 0x14, 0xf9, 0x87, 0xae, 0x85, 0xa3, 0x60, 0x26,
+ 0xfc, 0x8d, 0x04, 0x92, 0x27, 0xfe, 0x35, 0x7b,
+ 0x45, 0x9d, 0x4a, 0x86, 0x75, 0xa6, 0xb3, 0xa1,
+ 0x59, 0xe4, 0x4b, 0x1c, 0xd2, 0x71, 0x36, 0xfe,
+ 0x73, 0xed, 0x54, 0x0d, 0x9d, 0xde, 0x63, 0xb2,
+ 0xc0, 0x7c, 0xf2, 0xb3, 0x36, 0x62, 0x06, 0x1f,
+ 0xcd, 0x41, 0x92, 0x73, 0xbc, 0x11, 0x68, 0xc9,
+ 0x69, 0x20, 0xf9, 0xbb, 0x9a, 0xe9, 0x6c, 0x05,
+ 0xcf, 0x01, 0x57, 0xc4, 0x1d, 0x95, 0x5e, 0xe3,
+ 0xb7, 0x15, 0xde, 0xa7, 0xb5, 0x1a, 0x4e, 0x78,
+ 0x44, 0x5b, 0x9a, 0xee, 0x29, 0xe2, 0x22, 0x8b,
+ 0xe9, 0xe3, 0xe6, 0x70, 0x3e, 0xcb, 0x9f, 0x7f,
+ 0xc3, 0xd0, 0x2c, 0xdc, 0x55, 0xb4, 0x0d, 0x67,
+ 0xf5, 0xd8, 0xff, 0xbb, 0xb1, 0x02, 0xbf, 0xf6,
+ 0x33, 0x4e, 0x7a, 0x3a, 0x50, 0xb1, 0x01, 0x77,
+ 0x51, 0xef, 0xb5, 0x75, 0xb3, 0x66, 0xe8, 0xe6,
+ 0xd6, 0x53, 0x7d, 0x33, 0x51, 0x62, 0x5d, 0xf2,
+ 0x77, 0x02, 0x34, 0x42, 0xda, 0xee, 0xd9, 0xee,
+ 0x0b, 0x4d, 0x71, 0x5c, 0xc0, 0xec, 0xdd, 0xc0,
+ 0x34, 0x6f, 0xf4, 0x65, 0x32, 0xde, 0xc5, 0xb2,
+ 0x97, 0x60, 0x89, 0x4e, 0x3b, 0x0c, 0xf2, 0xa7,
+ 0x74, 0x61, 0xd7, 0xe4, 0xa6, 0x80, 0x78, 0x76,
+ 0xe5, 0x7d, 0xab, 0x96, 0x04, 0x00, 0x76, 0x22,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t bf_cbc_128_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xdd, 0x8e, 0xce, 0x5b, 0xb8, 0x2a, 0xc8, 0x0e,
+ 0xd2, 0xbe, 0xcf, 0xa7, 0x2a, 0x5b, 0x0c, 0x1a,
+ 0xb2, 0x68, 0x5b, 0xe7, 0x53, 0xaf, 0xce, 0x56,
+ 0xfd, 0xbd, 0x73, 0x3c, 0x44, 0x02, 0x96, 0x57,
+ 0xaa, 0x47, 0x8d, 0xf1, 0x28, 0x59, 0xb6, 0xce,
+ 0xba, 0x1e, 0xc9, 0x78, 0x76, 0xdd, 0x43, 0x3a,
+ 0xbc, 0x43, 0x4c, 0x17, 0xd2, 0xba, 0xb1, 0xda,
+ 0xa8, 0xbf, 0x32, 0x25, 0xaa, 0xc0, 0xf7, 0xb6,
+ 0x72, 0x65, 0xe2, 0x67, 0xdb, 0xf0, 0xa8, 0x60,
+ 0xda, 0x9b, 0x70, 0xad, 0x8f, 0x1d, 0x34, 0x24,
+ 0x1a, 0xfd, 0x77, 0x2e, 0x1c, 0xb6, 0xc0, 0x6b,
+ 0xa0, 0x4b, 0x4a, 0xa0, 0xd5, 0x8b, 0xbb, 0xd4,
+ 0xcc, 0x7b, 0x4e, 0x4c, 0x71, 0x9a, 0x50, 0x12,
+ 0x36, 0xd4, 0xfd, 0x1f, 0xf1, 0xfc, 0x19, 0x31,
+ 0xec, 0x54, 0x24, 0xb4, 0x9f, 0xa9, 0xea, 0xd2,
+ 0x87, 0x11, 0x03, 0x29, 0xbb, 0x20, 0x20, 0x37,
+ 0xa0, 0xeb, 0x93, 0xa1, 0x60, 0x5f, 0x83, 0x9f,
+ 0x00, 0x09, 0xe4, 0x9c, 0x79, 0xcb, 0xfc, 0x4f,
+ 0x9e, 0xd2, 0x76, 0x9f, 0x56, 0x3b, 0x88, 0x1d,
+ 0x29, 0x8f, 0x36, 0x07, 0xf7, 0x7e, 0xf1, 0xa1,
+ 0xa4, 0x25, 0xfb, 0xa0, 0xbe, 0xc6, 0xa2, 0x76,
+ 0xd3, 0x59, 0x2a, 0x7f, 0xb7, 0x9b, 0xb8, 0x75,
+ 0xc7, 0xc1, 0xc0, 0xe9, 0x9b, 0x83, 0x16, 0x00,
+ 0xc8, 0x9c, 0x25, 0x2a, 0x8b, 0xd1, 0x8d, 0x16,
+ 0x9f, 0xd6, 0xd3, 0x03, 0x5b, 0xc7, 0x40, 0xac,
+ 0xb6, 0xf3, 0xbb, 0x22, 0xa3, 0x3e, 0x56, 0x55,
+ 0xdf, 0x06, 0x76, 0xe0, 0x7b, 0xd0, 0x52, 0x54,
+ 0x38, 0xb0, 0xaa, 0xab, 0x62, 0x31, 0xd1, 0x79,
+ 0x19, 0xec, 0x82, 0x36, 0x58, 0x31, 0xf9, 0x01,
+ 0xf9, 0x5e, 0xaf, 0x24, 0xb3, 0xc9, 0xb2, 0x30,
+ 0x3d, 0xbc, 0xf1, 0xbe, 0x17, 0xeb, 0xa0, 0x31,
+ 0x43, 0xed, 0xd7, 0x50, 0xcc, 0xc2, 0xe2, 0xaa,
+ 0x68, 0xc8, 0xf0, 0xd3, 0x89, 0xbd, 0xf5, 0x69,
+ 0x56, 0xe3, 0x88, 0x92, 0x32, 0x56, 0x85, 0x6f,
+ 0x25, 0x30, 0x28, 0x37, 0xd5, 0xe2, 0xa6, 0xf7,
+ 0x6e, 0xa9, 0x71, 0xda, 0x4a, 0x25, 0x94, 0x0b,
+ 0x84, 0x7f, 0x1f, 0x6b, 0x89, 0x2a, 0xf8, 0x30,
+ 0xcb, 0x60, 0x75, 0x21, 0xbd, 0xe2, 0x34, 0xf7,
+ 0x8f, 0x30, 0xd5, 0xd5, 0x1f, 0x17, 0x0d, 0x00,
+ 0x6c, 0x50, 0xde, 0x56, 0x15, 0x33, 0x1b, 0x83,
+ 0x68, 0x7b, 0x24, 0xe3, 0xa0, 0xda, 0xd5, 0x7a,
+ 0x3e, 0x93, 0x6d, 0xe0, 0x02, 0x79, 0x62, 0x5d,
+ 0x71, 0xe3, 0x7b, 0xa9, 0x0b, 0x7a, 0xcd, 0xb3,
+ 0xb2, 0x6f, 0x96, 0x19, 0x8f, 0xf8, 0x8b, 0x26,
+ 0x7a, 0x40, 0xc8, 0xae, 0xfe, 0x0d, 0x6f, 0x67,
+ 0xce, 0x5e, 0xa0, 0x04, 0x7e, 0x93, 0x1d, 0x17,
+ 0x1c, 0x32, 0x82, 0xf4, 0x54, 0xb9, 0x80, 0xdd,
+ 0x82, 0xae, 0xf5, 0xc5, 0x1e, 0x15, 0xab, 0xc2,
+ 0x5c, 0x60, 0xd2, 0x08, 0xc2, 0xa1, 0x1f, 0x89,
+ 0x0b, 0x59, 0x36, 0x07, 0xdc, 0x57, 0xd3, 0xa0,
+ 0x32, 0x42, 0xac, 0xa6, 0x90, 0x0b, 0xc0, 0xe4,
+ 0x91, 0x45, 0x85, 0x27, 0xb9, 0x48, 0x2a, 0x88,
+ 0x0a, 0xbf, 0xf6, 0x2d, 0xef, 0x4d, 0x1b, 0x64,
+ 0x49, 0x23, 0x47, 0x30, 0x29, 0x25, 0xb2, 0xc9,
+ 0xaf, 0xcd, 0xae, 0x56, 0x43, 0x28, 0xcf, 0x81,
+ 0x95, 0xa7, 0x3e, 0x51, 0x5b, 0x3b, 0xf7, 0x87,
+ 0x13, 0xc6, 0xee, 0x50, 0x2f, 0x78, 0xdd, 0xcf,
+ 0x63, 0xef, 0x15, 0xb9, 0x4f, 0x21, 0x27, 0x5e,
+ 0x94, 0x78, 0xad, 0xcd, 0x9b, 0x3d, 0xf2, 0xdb,
+ 0xed, 0xf2, 0xa2, 0x39, 0xca, 0xa3, 0xa8, 0x2e,
+ 0x68, 0xd5, 0xc3, 0xcf, 0x71, 0xec, 0x92, 0xdc,
+ 0xce, 0xe7, 0x7d, 0x2b, 0xf7, 0xbc, 0xe9, 0x2b,
+ 0x2e, 0xae, 0xaf, 0x0b, 0x92, 0x72, 0xac, 0x6e,
+ 0x49, 0xe1, 0xb3, 0x1f, 0xe5, 0x43, 0x2f, 0xa7,
+};
+
+const struct testvec bf_cbc_128_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t bf_cbc_128_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0xb8, 0x65, 0x67, 0x8e, 0xe4, 0xd8, 0xb4, 0x93,
+ 0xa5, 0xbb, 0x13, 0x92, 0x27, 0x4b, 0xdd, 0xeb,
+ 0x0d, 0xad, 0x80, 0x6a, 0x57, 0x37, 0xc0, 0x23,
+ 0x23, 0xbf, 0xed, 0x86, 0x0c, 0x18, 0x48, 0x19,
+ 0xcd, 0x84, 0x66, 0xa7, 0xd6, 0xa0, 0x44, 0xd3,
+ 0x05, 0x4e, 0xf4, 0xfe, 0x6a, 0x57, 0x69, 0x01,
+ 0xaa, 0x91, 0x9c, 0x6e, 0x4f, 0x79, 0xc9, 0x8f,
+ 0x4c, 0xdf, 0x5b, 0x9c, 0xc4, 0xf7, 0x63, 0x16,
+ 0x20, 0x09, 0x07, 0x3f, 0x5e, 0x31, 0xcc, 0x81,
+ 0x71, 0xe3, 0x7b, 0xb5, 0xea, 0x2c, 0xb5, 0x14,
+ 0x1e, 0xf9, 0x0d, 0xe0, 0x45, 0xbc, 0x9f, 0x92,
+ 0x6c, 0xc9, 0x0a, 0x85, 0x62, 0x42, 0xf1, 0x4b,
+ 0xac, 0xe2, 0xfa, 0xad, 0x97, 0x7a, 0x43, 0x3d,
+ 0xb6, 0x5f, 0xcb, 0xe7, 0x17, 0x23, 0x28, 0xde,
+ 0x4e, 0xf8, 0xa1, 0x3c, 0x22, 0x63, 0x49, 0x31,
+ 0xa7, 0xbe, 0xbf, 0xfe, 0xee, 0xd9, 0x1f, 0xa0,
+ 0x2a, 0x0e, 0xf2, 0x4f, 0x3e, 0xf8, 0xbb, 0xae,
+ 0x9e, 0x0d, 0x2c, 0xaa, 0x2a, 0x2c, 0xf0, 0x6c,
+ 0x37, 0x2a, 0x5d, 0x96, 0x70, 0x9c, 0x87, 0xcc,
+ 0x2b, 0xca, 0x95, 0x37, 0xf4, 0x4d, 0x78, 0xae,
+ 0x4f, 0xb5, 0xe6, 0xad, 0xb1, 0xc1, 0x31, 0xd3,
+ 0x2d, 0xa6, 0xaf, 0xc1, 0x8c, 0xe4, 0x72, 0x05,
+ 0xb0, 0xfc, 0xb0, 0xf7, 0xfe, 0xf9, 0x3e, 0xa3,
+ 0xb9, 0xea, 0xc8, 0x69, 0xe3, 0x4e, 0x6d, 0xd1,
+ 0x8b, 0x2b, 0xf9, 0x2f, 0xd9, 0x40, 0x69, 0xff,
+ 0x90, 0x98, 0x7a, 0x82, 0xe3, 0x0d, 0x4e, 0x19,
+ 0x2f, 0x77, 0xf9, 0xab, 0x36, 0xa9, 0x4e, 0xbc,
+ 0x25, 0x32, 0xbd, 0x44, 0xea, 0x5a, 0x18, 0x31,
+ 0x37, 0xcd, 0x6c, 0x98, 0xdd, 0x1d, 0xf9, 0xf7,
+ 0x8f, 0x0b, 0x79, 0xbc, 0xe6, 0xf5, 0xf1, 0xa3,
+ 0x13, 0xe9, 0x39, 0xaf, 0xa4, 0x8a, 0x74, 0xae,
+ 0x60, 0x30, 0x63, 0x6e, 0xee, 0x97, 0x83, 0xee,
+ 0xc0, 0xdd, 0xde, 0xad, 0x92, 0x83, 0xc9, 0x3c,
+ 0xd8, 0x58, 0x6c, 0xcb, 0xe4, 0x29, 0x04, 0x69,
+ 0x4f, 0x45, 0xc2, 0x59, 0x98, 0x20, 0x91, 0x6e,
+ 0x95, 0x82, 0xb3, 0x47, 0x2c, 0xef, 0xdb, 0x96,
+ 0x38, 0xba, 0x01, 0x89, 0x84, 0x96, 0x71, 0xf9,
+ 0x2b, 0x23, 0xe0, 0x89, 0xb8, 0xb9, 0x80, 0xbf,
+ 0x0c, 0xdc, 0xf0, 0x5c, 0xd6, 0x4f, 0x18, 0x19,
+ 0xfe, 0x23, 0x5a, 0x1e, 0x20, 0x9a, 0x05, 0xf2,
+ 0x62, 0xd4, 0x04, 0x92, 0x24, 0xfc, 0xc0, 0x48,
+ 0xf0, 0x00, 0xb4, 0xbe, 0x2e, 0xea, 0x25, 0x17,
+ 0x5d, 0xab, 0x73, 0x26, 0x79, 0x77, 0xc5, 0x96,
+ 0xd3, 0xbf, 0x38, 0xda, 0x0f, 0xe1, 0x26, 0x9a,
+ 0x38, 0xfc, 0x43, 0x82, 0xd1, 0x4d, 0xf2, 0xae,
+ 0x98, 0x1e, 0xb0, 0x0d, 0xec, 0x7b, 0x56, 0x66,
+ 0xcb, 0x30, 0x57, 0x4f, 0xe7, 0x03, 0xe3, 0xa6,
+ 0x4a, 0x4a, 0xf9, 0xa3, 0xbf, 0x44, 0xac, 0x1a,
+ 0xe7, 0x4b, 0xc1, 0x5b, 0x03, 0x25, 0x4e, 0xc6,
+ 0x1f, 0x96, 0x4d, 0xf7, 0xbe, 0xa7, 0x5d, 0x60,
+ 0x20, 0x62, 0x10, 0xd7, 0xab, 0x64, 0xce, 0x22,
+ 0x8b, 0x52, 0x76, 0xa1, 0xa1, 0x8b, 0x1e, 0xb2,
+ 0x18, 0x29, 0x8f, 0xc5, 0x24, 0x39, 0xd4, 0xf8,
+ 0x75, 0x1e, 0x30, 0x57, 0x12, 0x01, 0x04, 0x78,
+ 0x68, 0x97, 0xa8, 0x65, 0x8c, 0xac, 0xb4, 0x3b,
+ 0x37, 0x45, 0x41, 0xbc, 0x7d, 0x4b, 0x09, 0xd7,
+ 0x46, 0x40, 0x99, 0x59, 0xa1, 0xb5, 0x9e, 0x84,
+ 0x24, 0x6d, 0xfb, 0x74, 0x22, 0xac, 0x4e, 0x5f,
+ 0x11, 0xd3, 0xa7, 0x9f, 0xa5, 0xca, 0x38, 0x54,
+ 0xe2, 0x65, 0x52, 0x02, 0x69, 0xe9, 0xa8, 0xf1,
+ 0xd7, 0x9d, 0x9a, 0x17, 0x54, 0xa0, 0xda, 0xbb,
+ 0x37, 0xb4, 0x0c, 0xb6, 0x00, 0xad, 0x6f, 0x88,
+ 0x84, 0xa7, 0x69, 0xd7, 0x0b, 0xbe, 0xb4, 0xbe,
+ 0x96, 0xbc, 0xcd, 0x08, 0xf1, 0x28, 0xe0, 0x6f,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t bf_cbc_128_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x7d, 0x95, 0x5a, 0x66, 0x23, 0x98, 0xa8, 0xbe,
+ 0x53, 0x63, 0x0d, 0x46, 0x4e, 0x38, 0x1b, 0x1d,
+ 0x36, 0xdd, 0x2a, 0x57, 0x3c, 0x17, 0x01, 0xba,
+ 0x4e, 0xf8, 0xaa, 0x22, 0x74, 0x05, 0xa2, 0x40,
+ 0xd0, 0x30, 0x61, 0x6c, 0x65, 0x5e, 0xfb, 0x21,
+ 0x63, 0xef, 0x62, 0x01, 0x74, 0x15, 0xf6, 0x87,
+ 0x92, 0xc1, 0x4e, 0x46, 0xdd, 0x76, 0xdb, 0x8b,
+ 0x20, 0x44, 0xc4, 0xfa, 0x7c, 0xd2, 0x07, 0x32,
+ 0x11, 0xeb, 0x5b, 0x38, 0x44, 0x32, 0xa1, 0xe7,
+ 0xcb, 0xa6, 0x1a, 0x12, 0xb9, 0x53, 0x13, 0x6f,
+ 0xc2, 0x0e, 0x6a, 0x77, 0x8b, 0x96, 0x14, 0x0a,
+ 0x23, 0x48, 0x65, 0xa5, 0xcd, 0x39, 0x38, 0x03,
+ 0xc8, 0x3a, 0x98, 0x69, 0x3d, 0x14, 0xae, 0xad,
+ 0x54, 0x57, 0xf6, 0x5a, 0xdd, 0x46, 0x4c, 0x3a,
+ 0x68, 0xa8, 0xb7, 0x57, 0xdd, 0x1e, 0x66, 0x0e,
+ 0xc2, 0x4c, 0x17, 0xba, 0xa4, 0x7e, 0x83, 0x45,
+ 0xc6, 0xf2, 0x34, 0x3b, 0x4e, 0xab, 0x67, 0x0c,
+ 0x73, 0xbf, 0x87, 0x7e, 0x93, 0x2b, 0x14, 0x33,
+ 0xd6, 0x24, 0x8d, 0xc7, 0x90, 0x11, 0xd2, 0x38,
+ 0xe6, 0xe0, 0x39, 0x1f, 0x00, 0x74, 0x40, 0xab,
+ 0xdc, 0xdd, 0x46, 0xe8, 0x85, 0x14, 0xb1, 0x78,
+ 0x34, 0x24, 0x04, 0x97, 0xde, 0xf9, 0x04, 0x69,
+ 0x0b, 0x15, 0x72, 0x37, 0xf4, 0x0d, 0xf4, 0x76,
+ 0x6f, 0xd8, 0x05, 0x75, 0x8f, 0x7e, 0x6b, 0xca,
+ 0x55, 0x20, 0x4a, 0x29, 0x16, 0xc1, 0x6e, 0x91,
+ 0x22, 0x01, 0x0d, 0x39, 0x5d, 0xb9, 0x09, 0xa4,
+ 0xe8, 0xc7, 0xff, 0x60, 0x39, 0xc6, 0xe4, 0x2a,
+ 0x1c, 0xf2, 0x3c, 0xf7, 0xf9, 0xd7, 0xde, 0x0b,
+ 0x0e, 0x30, 0xf1, 0x20, 0x7c, 0x93, 0x2f, 0x74,
+ 0x72, 0x40, 0x47, 0x2d, 0xeb, 0x8a, 0x5f, 0x69,
+ 0x60, 0xdf, 0xe9, 0x4d, 0x06, 0x24, 0x9c, 0x79,
+ 0xe7, 0x61, 0xd3, 0xa7, 0x57, 0x44, 0x49, 0x97,
+ 0x3a, 0xa3, 0x11, 0xc4, 0x70, 0xf4, 0x3d, 0xb5,
+ 0x4b, 0xb7, 0xae, 0x77, 0x36, 0xcf, 0x65, 0x3e,
+ 0xb6, 0x51, 0x83, 0xcb, 0x43, 0x5f, 0xd0, 0xfb,
+ 0x69, 0xc4, 0x1b, 0x77, 0x71, 0xcc, 0x72, 0xf4,
+ 0x5f, 0xc2, 0xda, 0xea, 0xa4, 0x33, 0xec, 0x8e,
+ 0x92, 0x22, 0x6a, 0x55, 0x34, 0x6a, 0x10, 0xb8,
+ 0x62, 0x66, 0xc1, 0x6f, 0x65, 0xdd, 0x9a, 0x40,
+ 0xa0, 0xbf, 0x88, 0xbb, 0x79, 0x1c, 0xa4, 0xaa,
+ 0xdf, 0xe8, 0xe7, 0x40, 0x88, 0xc6, 0x0f, 0xa2,
+ 0x2c, 0xee, 0xe7, 0x41, 0x32, 0x46, 0xa2, 0x46,
+ 0x85, 0xbf, 0x4c, 0xca, 0x4d, 0xd3, 0x9b, 0x49,
+ 0x43, 0x98, 0xae, 0xfc, 0x93, 0xa7, 0x94, 0x98,
+ 0x86, 0xa1, 0x0a, 0x85, 0x77, 0x67, 0xa6, 0x16,
+ 0x94, 0x76, 0xe5, 0x2f, 0x88, 0x5f, 0x24, 0x16,
+ 0xe5, 0x84, 0x4c, 0xd2, 0x58, 0x59, 0x82, 0x59,
+ 0x2c, 0xe2, 0x8d, 0xba, 0x08, 0x01, 0x67, 0x1f,
+ 0x2a, 0x9e, 0x4d, 0x53, 0x57, 0x2d, 0x6e, 0x35,
+ 0x38, 0xd5, 0x50, 0xa7, 0x0c, 0xe6, 0x77, 0x71,
+ 0xbe, 0x45, 0x2e, 0xf4, 0x7a, 0x3a, 0x51, 0x03,
+ 0x04, 0x2b, 0xd7, 0x42, 0x6c, 0x5b, 0x82, 0xba,
+ 0xb4, 0x09, 0xee, 0x9d, 0xea, 0x8f, 0xf0, 0xb3,
+ 0xb2, 0x9d, 0x0e, 0x09, 0x72, 0x8c, 0xd9, 0x1e,
+ 0x6d, 0x78, 0x57, 0x10, 0x1f, 0xeb, 0x4e, 0x53,
+ 0x57, 0x65, 0xe5, 0x43, 0xe8, 0xb4, 0xb6, 0xb8,
+ 0x25, 0x8a, 0xe2, 0xb3, 0x99, 0x95, 0x2c, 0xd0,
+ 0xc7, 0x89, 0xad, 0xdb, 0x72, 0xf0, 0x83, 0xe3,
+ 0x2f, 0x30, 0x33, 0xf4, 0x03, 0x14, 0x86, 0xa0,
+ 0xe0, 0x57, 0x15, 0x53, 0x26, 0xd0, 0x6d, 0x12,
+ 0x51, 0x96, 0x9b, 0x00, 0x8e, 0x41, 0xea, 0x05,
+ 0x75, 0x5d, 0xb3, 0x8d, 0x44, 0x7f, 0x41, 0x7f,
+ 0xd1, 0xed, 0x7c, 0xf7, 0xac, 0x6b, 0x21, 0xc7,
+ 0x0c, 0x49, 0xa1, 0x2e, 0x57, 0xa1, 0x21, 0xe2,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t bf_cbc_128_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x28, 0x0c, 0x49, 0x08, 0x84, 0xcb, 0xba, 0x4a,
+ 0xa5, 0xb6, 0x12, 0x4c, 0x14, 0x11, 0x1f, 0x88,
+ 0x57, 0x78, 0x1e, 0x51, 0x7c, 0x9d, 0xba, 0x31,
+ 0x80, 0x14, 0xeb, 0x4a, 0x98, 0x8a, 0xb5, 0x4d,
+ 0xc5, 0xbd, 0xd2, 0x48, 0x1e, 0x19, 0x43, 0x54,
+ 0x48, 0x1d, 0x24, 0x76, 0x7d, 0xd8, 0xcc, 0xe9,
+ 0xd9, 0x7b, 0xa9, 0xdf, 0xe3, 0x65, 0x85, 0x10,
+ 0xb8, 0x11, 0xce, 0xa3, 0x07, 0x4d, 0x87, 0x3f,
+ 0x95, 0xfb, 0xa5, 0x06, 0xa4, 0x37, 0xb0, 0x89,
+ 0x03, 0xa9, 0xef, 0x62, 0x98, 0xd3, 0x85, 0xe8,
+ 0xb3, 0x21, 0xab, 0xe9, 0xdc, 0x03, 0x2a, 0x20,
+ 0xf7, 0xb1, 0xa4, 0x7a, 0xd5, 0xdc, 0x61, 0x2e,
+ 0x15, 0x81, 0x3e, 0xcf, 0x8d, 0x8d, 0x54, 0x19,
+ 0x70, 0xde, 0xa9, 0x57, 0x93, 0x87, 0xc7, 0x16,
+ 0x06, 0x25, 0xf3, 0x93, 0x8f, 0x73, 0x92, 0x29,
+ 0x1e, 0xcd, 0x5a, 0x9d, 0x8f, 0x8d, 0x44, 0x15,
+ 0x8d, 0x92, 0x44, 0x95, 0x7a, 0x5e, 0x1b, 0xfd,
+ 0x31, 0xa5, 0x8c, 0x22, 0x89, 0xbb, 0x91, 0x15,
+ 0xad, 0x0a, 0x73, 0x94, 0x65, 0xae, 0xca, 0xfc,
+ 0x7e, 0xae, 0x85, 0x45, 0xe7, 0xd7, 0x8f, 0x89,
+ 0x8e, 0x44, 0x62, 0x7a, 0xe0, 0xee, 0x78, 0xbd,
+ 0x88, 0x62, 0x8e, 0xb8, 0x35, 0x7a, 0xa9, 0x12,
+ 0x56, 0x2d, 0xe4, 0xbb, 0x2d, 0xc8, 0x98, 0x0e,
+ 0x35, 0x9e, 0xea, 0x14, 0x43, 0x80, 0xde, 0x9e,
+ 0x2e, 0xf8, 0xf9, 0xcd, 0x61, 0xa6, 0x22, 0xc8,
+ 0x77, 0xfc, 0x32, 0x71, 0x4b, 0xcb, 0x00, 0x9b,
+ 0x9f, 0x85, 0x02, 0x92, 0xfa, 0x84, 0xd8, 0xd8,
+ 0x09, 0xa4, 0x08, 0xc1, 0x96, 0xd3, 0x9a, 0x27,
+ 0xa3, 0x82, 0x05, 0xd0, 0x78, 0x18, 0x0a, 0x7d,
+ 0xb6, 0x95, 0xc0, 0x27, 0x3e, 0x76, 0x77, 0xf3,
+ 0xd9, 0x62, 0x8e, 0x77, 0xa0, 0x1f, 0x9e, 0x41,
+ 0xdb, 0x24, 0xaa, 0xdd, 0x8f, 0x94, 0x7b, 0x1f,
+ 0xff, 0xaa, 0xfd, 0xe2, 0x19, 0xc2, 0x71, 0x80,
+ 0x0a, 0xda, 0xc5, 0x98, 0x57, 0xde, 0x4e, 0xfb,
+ 0x38, 0xe6, 0x9b, 0xe5, 0xa6, 0x1f, 0x7d, 0x2c,
+ 0x41, 0x5f, 0x4d, 0x13, 0xb8, 0x0c, 0xac, 0x9a,
+ 0x7d, 0xc0, 0x7c, 0x44, 0x64, 0x1e, 0xbc, 0x7d,
+ 0x16, 0xaa, 0x45, 0xda, 0x62, 0x4e, 0x64, 0x69,
+ 0xd6, 0x71, 0xd9, 0x64, 0x2a, 0x5d, 0x20, 0x34,
+ 0xb0, 0xcb, 0x9d, 0xd3, 0x69, 0xd6, 0x60, 0xad,
+ 0x78, 0x72, 0xb8, 0x36, 0x17, 0xe7, 0xaf, 0x0a,
+ 0x11, 0x84, 0x43, 0x32, 0x38, 0x43, 0xe5, 0xc5,
+ 0x1b, 0xf4, 0x48, 0xb6, 0x0e, 0x72, 0x48, 0x2f,
+ 0x9b, 0xe3, 0xce, 0x27, 0xcd, 0x66, 0x28, 0x5c,
+ 0x2a, 0xd7, 0x28, 0x52, 0x6e, 0x86, 0x03, 0x60,
+ 0x7b, 0xbd, 0xbd, 0x53, 0xfb, 0x7d, 0xa1, 0xba,
+ 0x6a, 0x46, 0x0c, 0xf3, 0x1a, 0xbf, 0xa7, 0xa2,
+ 0x46, 0x87, 0x40, 0xaa, 0x7d, 0x76, 0x36, 0x85,
+ 0xa5, 0xbf, 0x0b, 0xd4, 0x56, 0x4c, 0x37, 0xe3,
+ 0x60, 0x93, 0xdc, 0x3b, 0xca, 0x34, 0x78, 0xcf,
+ 0xdb, 0x0c, 0x9d, 0x5c, 0x52, 0xb2, 0xd5, 0x7b,
+ 0xbb, 0x4e, 0xe1, 0xa9, 0x2a, 0xc6, 0x42, 0xf5,
+ 0x21, 0x9c, 0x15, 0xae, 0xb9, 0x08, 0x3a, 0xc4,
+ 0x50, 0x7e, 0x0e, 0xb6, 0xc3, 0xfe, 0xf4, 0xd9,
+ 0x1a, 0x97, 0x30, 0x9f, 0x51, 0x2c, 0xac, 0xd2,
+ 0x13, 0x93, 0x62, 0x56, 0xcb, 0x34, 0xf3, 0xca,
+ 0x26, 0xc6, 0x32, 0xbe, 0xf6, 0xd5, 0x1e, 0x5b,
+ 0x3a, 0x5c, 0x31, 0x08, 0xa1, 0x47, 0x6b, 0x75,
+ 0x95, 0x8e, 0x3d, 0xbf, 0x2e, 0x81, 0x02, 0x0d,
+ 0x17, 0x66, 0x6f, 0x04, 0xe0, 0x1e, 0x03, 0x27,
+ 0xd3, 0xcf, 0x45, 0xc6, 0x08, 0xdb, 0xdf, 0x83,
+ 0xd5, 0xc2, 0x7f, 0xe8, 0x5f, 0x4a, 0x36, 0x0a,
+ 0x6d, 0x3c, 0x91, 0x8e, 0x52, 0xf3, 0xdd, 0x62,
+ 0xff, 0x78, 0x87, 0xd9, 0x4c, 0xad, 0x5c, 0x9f,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t bf_cbc_128_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0xa3, 0x9a, 0x21, 0xbd, 0x1c, 0x97, 0x4f, 0xe2,
+ 0x7d, 0x63, 0xfe, 0x52, 0x07, 0xac, 0x81, 0x75,
+ 0x15, 0x04, 0x8c, 0xc7, 0x7c, 0x11, 0x8d, 0x53,
+ 0x17, 0x87, 0xe8, 0x5d, 0xb1, 0xe8, 0xcb, 0x43,
+ 0xe2, 0x4b, 0xce, 0x9b, 0xf7, 0x51, 0x0a, 0xee,
+ 0x0a, 0x49, 0xae, 0x9a, 0xbd, 0x33, 0x3f, 0x0b,
+ 0xd4, 0xe8, 0x57, 0x77, 0xb1, 0xe1, 0xa5, 0x22,
+ 0x83, 0xbf, 0x7c, 0x63, 0x6c, 0x3b, 0x25, 0xde,
+ 0x2c, 0x6a, 0x28, 0x66, 0x0e, 0xc4, 0x8d, 0x66,
+ 0x66, 0xb6, 0xc6, 0xb5, 0x38, 0x40, 0x84, 0x81,
+ 0xec, 0x03, 0xdb, 0xbf, 0xe1, 0x8f, 0xf4, 0xb3,
+ 0xc4, 0x50, 0x24, 0xa2, 0x48, 0x66, 0x73, 0xed,
+ 0x4b, 0x00, 0x12, 0xd5, 0x15, 0x5f, 0xfb, 0xd9,
+ 0x6c, 0x76, 0x3b, 0xa2, 0x68, 0x41, 0xc1, 0x96,
+ 0x50, 0xff, 0x8a, 0x83, 0xac, 0x02, 0x42, 0xcb,
+ 0xed, 0x93, 0xbf, 0xd9, 0x51, 0x46, 0x50, 0xd1,
+ 0xeb, 0x02, 0x61, 0x64, 0xa7, 0x0e, 0x95, 0xc2,
+ 0x95, 0x5a, 0x93, 0xd9, 0x77, 0x17, 0xa4, 0xc7,
+ 0x51, 0x42, 0xa3, 0xd4, 0x32, 0x4e, 0x4f, 0xe1,
+ 0xaa, 0x6d, 0xab, 0x08, 0xd9, 0xe9, 0xfe, 0x72,
+ 0xf3, 0x2c, 0xfb, 0x43, 0xdf, 0x88, 0x44, 0x94,
+ 0x0b, 0x5c, 0x85, 0x54, 0xe3, 0x13, 0xe2, 0x10,
+ 0x64, 0xa7, 0xcf, 0xe3, 0x2a, 0x3e, 0xfe, 0xd1,
+ 0x67, 0xcd, 0xd1, 0x66, 0x06, 0x26, 0x2f, 0x6f,
+ 0x6f, 0x44, 0xe7, 0xf4, 0xac, 0xe4, 0x58, 0x2f,
+ 0x61, 0xad, 0x64, 0xc6, 0x0c, 0xf0, 0x9a, 0x3b,
+ 0x85, 0x1f, 0x3c, 0xea, 0x8e, 0x84, 0xbb, 0x1a,
+ 0x51, 0x19, 0x3c, 0x6f, 0x5b, 0xf5, 0x6c, 0xb1,
+ 0x8c, 0x91, 0x25, 0x89, 0x3a, 0x45, 0xb5, 0x35,
+ 0x13, 0x74, 0xec, 0x68, 0x44, 0xb8, 0xfd, 0xd6,
+ 0x20, 0x78, 0x7b, 0xe3, 0xe0, 0x82, 0xb7, 0x4a,
+ 0x38, 0xb6, 0xe4, 0x1b, 0xbf, 0xd9, 0xd3, 0xe9,
+ 0xbf, 0xd7, 0xdc, 0x8e, 0x90, 0x7d, 0xcb, 0x39,
+ 0xc4, 0x6c, 0xa4, 0x70, 0x15, 0xf7, 0xa2, 0x16,
+ 0x04, 0x9b, 0xc0, 0x85, 0x04, 0x1e, 0x69, 0x73,
+ 0xf3, 0xbd, 0x64, 0x95, 0xfb, 0x21, 0xcb, 0xca,
+ 0x72, 0xd4, 0x33, 0xe5, 0x11, 0xc3, 0x46, 0xa6,
+ 0xd2, 0x4c, 0x8a, 0xbb, 0xba, 0x45, 0xcc, 0x45,
+ 0xdb, 0x8a, 0xec, 0xef, 0x8c, 0x04, 0xcc, 0xeb,
+ 0x42, 0xad, 0xc3, 0x87, 0xe2, 0x59, 0x3b, 0xed,
+ 0x2a, 0x11, 0x74, 0xc1, 0x28, 0x8a, 0xc2, 0x17,
+ 0xca, 0x5a, 0x88, 0xcc, 0x17, 0x2c, 0x03, 0xf6,
+ 0xcd, 0xd6, 0x92, 0xbd, 0x68, 0x26, 0x41, 0x40,
+ 0x15, 0x3e, 0x54, 0xf5, 0xb7, 0x4a, 0x82, 0x68,
+ 0xca, 0x27, 0xed, 0xed, 0x25, 0xd6, 0x0d, 0x0f,
+ 0x86, 0x62, 0xf0, 0x86, 0x5b, 0xed, 0x94, 0x0b,
+ 0xd0, 0xec, 0xc7, 0xfd, 0x9c, 0x8a, 0xdf, 0x4f,
+ 0x65, 0x7e, 0x63, 0x40, 0xeb, 0xe4, 0x79, 0xcb,
+ 0x67, 0xc6, 0x0e, 0x45, 0xf9, 0xb1, 0x48, 0x27,
+ 0x16, 0xfc, 0x99, 0x76, 0xac, 0xd0, 0xbc, 0xe6,
+ 0x9b, 0x29, 0x2d, 0xa5, 0x6c, 0x88, 0x45, 0x7a,
+ 0x01, 0xf3, 0xe3, 0x15, 0xfb, 0x29, 0xd4, 0x3b,
+ 0x9a, 0xa8, 0xc6, 0x98, 0x92, 0x19, 0x16, 0xba,
+ 0xdc, 0x41, 0x70, 0x40, 0x51, 0xfb, 0x7f, 0xb5,
+ 0xe4, 0x3f, 0x3f, 0x73, 0xb0, 0xb3, 0xd7, 0x6d,
+ 0x3e, 0x4d, 0x6b, 0x9e, 0x42, 0x8e, 0xbb, 0xd7,
+ 0xb5, 0x26, 0xa9, 0x19, 0xf5, 0x68, 0xf3, 0x8d,
+ 0x35, 0x91, 0x06, 0x48, 0xfa, 0x0e, 0x7d, 0xe2,
+ 0xd3, 0x71, 0x75, 0x44, 0xbd, 0xe6, 0xe6, 0xd6,
+ 0x36, 0x43, 0x64, 0x3a, 0xd5, 0x97, 0xfa, 0xc0,
+ 0x10, 0xf7, 0x6c, 0x26, 0xf1, 0xb4, 0xbc, 0xf5,
+ 0xf6, 0xa3, 0xec, 0x0a, 0xb5, 0x34, 0x55, 0x1a,
+ 0x67, 0xcb, 0xec, 0x2c, 0x2e, 0x2e, 0x74, 0xed,
+ 0xfc, 0x85, 0x53, 0x01, 0x87, 0xa7, 0xa0, 0x1f,
+};
+
+const struct testvec bf_cbc_128_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t bf_cbc_256_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x14, 0xec, 0xa9, 0xa0, 0x51, 0x9f, 0x5e, 0xb5,
+ 0x81, 0x6f, 0xa2, 0xbf, 0x5e, 0xf7, 0x91, 0xad,
+ 0xc5, 0x1a, 0x7e, 0xe6, 0x7a, 0x82, 0x4a, 0xba,
+ 0x54, 0x60, 0xcb, 0xc3, 0x2f, 0x69, 0x5c, 0xd9,
+ 0x1e, 0x58, 0xa1, 0x88, 0xa1, 0xe5, 0xa8, 0x52,
+ 0xdf, 0xf3, 0x8d, 0x5e, 0x2f, 0x81, 0x54, 0xab,
+ 0x67, 0xb5, 0x05, 0x63, 0x20, 0x10, 0x98, 0xf5,
+ 0xa5, 0xc3, 0x9e, 0x6d, 0x80, 0x4d, 0xb6, 0x82,
+ 0x80, 0x5e, 0xb3, 0xc5, 0xd8, 0x77, 0x94, 0xa0,
+ 0xb8, 0x67, 0xb8, 0x2d, 0x9b, 0x11, 0x3c, 0x24,
+ 0xbd, 0xb7, 0x0b, 0x1d, 0xeb, 0x1d, 0x6c, 0xab,
+ 0x3f, 0x8c, 0x91, 0xa0, 0x3a, 0xa6, 0x0c, 0x5a,
+ 0x88, 0xa0, 0xb5, 0xea, 0x49, 0x58, 0xfb, 0x37,
+ 0x7c, 0x94, 0xc4, 0x22, 0x35, 0x84, 0xda, 0xd1,
+ 0x1b, 0x4a, 0x42, 0xa1, 0xd4, 0x90, 0xcd, 0xfb,
+ 0x77, 0x29, 0xd2, 0xe3, 0x89, 0xec, 0x9e, 0x6a,
+ 0x4b, 0xbc, 0xc0, 0xfa, 0xb8, 0xdd, 0x5c, 0x2b,
+ 0xc5, 0x49, 0xb1, 0x6d, 0x6f, 0x2c, 0xb5, 0x50,
+ 0xd1, 0xd4, 0x9b, 0x15, 0x1c, 0xd7, 0x44, 0xf3,
+ 0x2e, 0x1f, 0x46, 0xee, 0x38, 0x40, 0xaa, 0x73,
+ 0xca, 0xf2, 0xc3, 0x83, 0xe2, 0xff, 0xd6, 0xc7,
+ 0x20, 0xea, 0x70, 0x95, 0x48, 0x58, 0x29, 0x6e,
+ 0xac, 0x10, 0x75, 0x69, 0x1d, 0xb2, 0x08, 0x3e,
+ 0x68, 0x43, 0xff, 0x69, 0x1e, 0x88, 0x0a, 0x34,
+ 0x40, 0xae, 0xb9, 0xf4, 0xb9, 0x3f, 0xa5, 0xd2,
+ 0xfb, 0xa0, 0xfd, 0x10, 0xa5, 0xbb, 0xd7, 0x22,
+ 0x8c, 0xd1, 0xf5, 0xc4, 0x11, 0xc6, 0x1e, 0xb5,
+ 0xfc, 0x90, 0x84, 0xa2, 0x49, 0x38, 0x64, 0x92,
+ 0x6e, 0xf2, 0xaa, 0xed, 0xe8, 0x9d, 0xac, 0x86,
+ 0xb7, 0xb3, 0xd9, 0x98, 0x11, 0x8f, 0x51, 0x33,
+ 0x84, 0x06, 0x40, 0x26, 0x3f, 0xe1, 0xb3, 0x4a,
+ 0x76, 0x53, 0x68, 0x8b, 0xfe, 0x6f, 0xcd, 0x66,
+ 0x92, 0x24, 0x42, 0xf4, 0x11, 0x02, 0x01, 0x00,
+ 0xaa, 0x15, 0x35, 0x42, 0xab, 0x6f, 0x2b, 0x3b,
+ 0x9a, 0x23, 0x73, 0x18, 0xa8, 0x9b, 0x43, 0x4b,
+ 0xfb, 0xef, 0x07, 0x75, 0xd7, 0xd6, 0x08, 0x94,
+ 0xe3, 0x2d, 0xd9, 0xd4, 0x8e, 0x6b, 0x7c, 0xe0,
+ 0xae, 0xef, 0xcb, 0x5c, 0x46, 0x39, 0x64, 0x34,
+ 0x48, 0x77, 0x2c, 0x87, 0x68, 0x57, 0xef, 0xba,
+ 0xd3, 0x3b, 0xb8, 0x68, 0xc5, 0x65, 0x73, 0x44,
+ 0x0b, 0xef, 0xc7, 0x5e, 0xe6, 0xa2, 0xba, 0x24,
+ 0x8c, 0x67, 0xa0, 0xf4, 0xef, 0x18, 0x8c, 0x72,
+ 0x5b, 0x81, 0x8c, 0x81, 0x4f, 0x9a, 0xed, 0x46,
+ 0x5d, 0x05, 0x9a, 0xdc, 0x01, 0xbe, 0xe8, 0x3f,
+ 0xb7, 0x5c, 0x8b, 0x2f, 0x92, 0x2c, 0x93, 0x54,
+ 0x68, 0xfa, 0xd4, 0x27, 0x81, 0xab, 0xa9, 0xfd,
+ 0x20, 0x21, 0x1b, 0x3a, 0x6e, 0x6b, 0x02, 0x57,
+ 0x6e, 0xd6, 0x7b, 0x7e, 0x5d, 0x84, 0x47, 0x69,
+ 0x86, 0x7b, 0x8f, 0x8b, 0xff, 0xb5, 0xcd, 0xc1,
+ 0x03, 0x18, 0x23, 0x7f, 0x23, 0x2e, 0x3a, 0x48,
+ 0xe2, 0xf6, 0xb1, 0x78, 0x13, 0x81, 0xbb, 0x80,
+ 0x91, 0x89, 0x54, 0x7d, 0x1f, 0x1a, 0xd5, 0x35,
+ 0xad, 0x56, 0x6a, 0x0f, 0xeb, 0x4d, 0x00, 0xdf,
+ 0xe0, 0xf3, 0x7c, 0xd3, 0x2c, 0x5a, 0x48, 0x39,
+ 0xa1, 0xc1, 0xfa, 0x34, 0x5f, 0xf9, 0x0b, 0xcd,
+ 0x1f, 0x21, 0xc6, 0x46, 0xb3, 0xd8, 0x45, 0xc5,
+ 0x37, 0xf7, 0xd0, 0xda, 0x27, 0x0f, 0xec, 0xec,
+ 0x05, 0x81, 0x6f, 0x97, 0xca, 0x6d, 0xfa, 0x71,
+ 0xc9, 0x59, 0x84, 0xc3, 0x0d, 0x55, 0x12, 0xbf,
+ 0xe1, 0xd2, 0x7c, 0x51, 0x65, 0x8c, 0xc3, 0x8a,
+ 0x73, 0x2f, 0x1c, 0xd8, 0x13, 0x4a, 0xd1, 0x78,
+ 0xb2, 0xc8, 0x19, 0x09, 0xce, 0x7b, 0xb6, 0x77,
+ 0xcc, 0xc3, 0xe6, 0xee, 0x3a, 0x82, 0xf9, 0xc6,
+ 0x5a, 0x36, 0x46, 0xc0, 0x25, 0xee, 0xaf, 0x78,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t bf_cbc_256_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x0b, 0xb6, 0x26, 0x92, 0x1d, 0x74, 0xc2, 0x10,
+ 0xb5, 0x99, 0x5f, 0x62, 0x7f, 0x3b, 0x49, 0x10,
+ 0xc1, 0x20, 0x9f, 0x38, 0x25, 0x0f, 0x59, 0xde,
+ 0xe4, 0xc8, 0xb5, 0x27, 0xb1, 0xec, 0x96, 0x40,
+ 0xe8, 0x05, 0x15, 0x40, 0x96, 0xe0, 0xff, 0xaf,
+ 0x53, 0x73, 0xa1, 0xa6, 0x73, 0x03, 0xcf, 0x1f,
+ 0x87, 0x48, 0x7d, 0x81, 0x0e, 0x35, 0x23, 0x7b,
+ 0xde, 0x12, 0xd8, 0xcd, 0x0a, 0xcb, 0x03, 0xc5,
+ 0x07, 0xf7, 0x7a, 0x04, 0xf3, 0xda, 0x7d, 0x3b,
+ 0x73, 0xc6, 0x31, 0xbc, 0x24, 0xde, 0x23, 0x05,
+ 0x3a, 0xdc, 0xe2, 0x96, 0x85, 0x06, 0xeb, 0x89,
+ 0xb0, 0x49, 0x3c, 0x79, 0x8e, 0xcf, 0x49, 0x0e,
+ 0x34, 0x04, 0xa5, 0xcf, 0x45, 0x56, 0xb6, 0xc2,
+ 0xf1, 0xf1, 0xab, 0x7c, 0x8a, 0xfc, 0xeb, 0xa0,
+ 0x8a, 0xe6, 0x73, 0xb4, 0xc3, 0x0c, 0x03, 0x5f,
+ 0x03, 0x53, 0x6f, 0x69, 0xa2, 0xd0, 0xa7, 0x48,
+ 0xc4, 0x11, 0x88, 0x75, 0xe1, 0xf3, 0xd0, 0x72,
+ 0x98, 0x6f, 0x84, 0xa6, 0xa8, 0x35, 0xbb, 0xac,
+ 0x4d, 0xac, 0x55, 0x88, 0x85, 0x86, 0x5a, 0xd9,
+ 0xb6, 0x57, 0xf9, 0x40, 0xf6, 0x7f, 0x1b, 0x4e,
+ 0x87, 0xc0, 0x56, 0x8a, 0x2f, 0x3a, 0xe5, 0xa6,
+ 0x67, 0x68, 0x21, 0x2b, 0xea, 0xfa, 0xee, 0x47,
+ 0xa0, 0x34, 0x56, 0x7d, 0xa0, 0x3d, 0x58, 0xd7,
+ 0xff, 0xa2, 0xb6, 0x03, 0x52, 0x16, 0xa5, 0x15,
+ 0x65, 0xdb, 0xe1, 0x1b, 0xdf, 0x69, 0xb1, 0x48,
+ 0x6a, 0xdf, 0xc1, 0x00, 0x07, 0xdc, 0x46, 0x4b,
+ 0x59, 0xcf, 0x15, 0x6b, 0xee, 0x4f, 0x72, 0x77,
+ 0x6e, 0xbf, 0x47, 0x0e, 0x84, 0x0b, 0xb1, 0xac,
+ 0x85, 0xce, 0x2b, 0x47, 0x7a, 0xcc, 0x30, 0x0c,
+ 0x2f, 0x10, 0x27, 0xaa, 0x83, 0x3f, 0x17, 0x39,
+ 0x84, 0x45, 0x8c, 0xb7, 0x31, 0xb3, 0x7c, 0xcd,
+ 0xed, 0x86, 0x7d, 0xa9, 0x06, 0x25, 0x1f, 0xe3,
+ 0x9a, 0x9b, 0x92, 0xdd, 0x07, 0x63, 0x3b, 0x51,
+ 0x32, 0x2e, 0xae, 0xdf, 0xad, 0xd4, 0x54, 0x5d,
+ 0x71, 0x36, 0xe9, 0xda, 0x70, 0xe9, 0xec, 0x75,
+ 0x0b, 0xbb, 0xcc, 0x5d, 0xc5, 0x45, 0x8e, 0x56,
+ 0x12, 0x87, 0x95, 0x0f, 0x0f, 0x5b, 0x22, 0xc2,
+ 0xe9, 0x71, 0xf2, 0x7e, 0x7b, 0xc2, 0xce, 0x1f,
+ 0xb4, 0x43, 0xa5, 0xf1, 0x80, 0x03, 0xd9, 0x44,
+ 0x3e, 0x97, 0xd6, 0x32, 0x80, 0x99, 0x6b, 0x5b,
+ 0x25, 0x8b, 0x73, 0x0c, 0x21, 0xda, 0x87, 0x29,
+ 0x57, 0x1e, 0xa3, 0x1f, 0xc1, 0xb2, 0xd6, 0xa4,
+ 0x72, 0x64, 0x4a, 0x6b, 0x6f, 0x4d, 0xa8, 0x03,
+ 0x59, 0x6f, 0xce, 0x8a, 0xd6, 0x1c, 0x63, 0x30,
+ 0x60, 0xd1, 0x55, 0xc5, 0x44, 0x9a, 0xa8, 0x69,
+ 0x9f, 0xc7, 0xbe, 0xca, 0x92, 0x83, 0xe9, 0xea,
+ 0x51, 0x00, 0x5a, 0xdc, 0xbb, 0xbd, 0x5d, 0xf2,
+ 0x6d, 0x3c, 0x09, 0xde, 0x68, 0x33, 0x5f, 0x5c,
+ 0x80, 0x8e, 0x22, 0x93, 0x28, 0x5b, 0x77, 0xae,
+ 0xcd, 0x0d, 0x08, 0xab, 0x94, 0xd6, 0x12, 0x72,
+ 0x3f, 0xd2, 0xb3, 0xff, 0x87, 0x0a, 0x6f, 0x72,
+ 0xa7, 0xff, 0xc1, 0xdc, 0x8a, 0x64, 0xdf, 0xeb,
+ 0x0e, 0x63, 0x71, 0x42, 0x88, 0x2b, 0x13, 0x17,
+ 0xf2, 0x3b, 0xf9, 0xbb, 0xc9, 0xcc, 0x32, 0x1f,
+ 0x12, 0x7f, 0xa0, 0x8e, 0x77, 0x31, 0x42, 0x46,
+ 0x3d, 0xb6, 0xa9, 0x14, 0x6e, 0x02, 0x5a, 0x4f,
+ 0xf1, 0x5b, 0x91, 0x7e, 0x93, 0xea, 0x94, 0xf1,
+ 0xcf, 0x0e, 0x10, 0xf8, 0xc2, 0x55, 0x87, 0x68,
+ 0xf9, 0x49, 0xfa, 0xeb, 0x0f, 0x2c, 0xd7, 0xd8,
+ 0x26, 0x1a, 0x5b, 0x1a, 0x42, 0x06, 0xea, 0x8a,
+ 0xb6, 0xec, 0x6e, 0xb0, 0x00, 0xb9, 0x3b, 0x50,
+ 0xe8, 0x9e, 0xc2, 0x51, 0x4f, 0x03, 0xcd, 0x9f,
+ 0x36, 0x27, 0xca, 0xa2, 0x98, 0x87, 0x5a, 0xae,
+ 0xd8, 0x87, 0x76, 0xb6, 0xb6, 0x19, 0x7d, 0x75,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t bf_cbc_256_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x91, 0x45, 0x4e, 0xe8, 0xad, 0xe3, 0x95, 0x0f,
+ 0x40, 0x35, 0x21, 0x21, 0x77, 0x62, 0x1d, 0x65,
+ 0xe4, 0x93, 0x11, 0xd2, 0x20, 0xa4, 0xe4, 0x53,
+ 0x44, 0xff, 0x60, 0xe9, 0x34, 0xb2, 0x33, 0x87,
+ 0x3d, 0xb0, 0xd8, 0x37, 0x7e, 0x0e, 0x9a, 0x53,
+ 0x92, 0xeb, 0xee, 0x16, 0x41, 0x25, 0xe3, 0x80,
+ 0x0c, 0x53, 0xd8, 0x1f, 0xf0, 0x99, 0xcb, 0x31,
+ 0xd1, 0x00, 0x82, 0x03, 0xcc, 0xa9, 0x5c, 0x8d,
+ 0x1a, 0xbb, 0x03, 0x81, 0x80, 0x0d, 0x5d, 0x4a,
+ 0x96, 0x74, 0x79, 0xf4, 0xa7, 0x46, 0x97, 0x42,
+ 0x5e, 0xb6, 0x8d, 0xc1, 0x95, 0x1d, 0x98, 0x4d,
+ 0xe5, 0xe9, 0x70, 0x1a, 0x5a, 0xad, 0xf4, 0x3d,
+ 0xe1, 0xa7, 0x25, 0xc7, 0xfa, 0x0a, 0x75, 0x98,
+ 0x2f, 0xef, 0x16, 0x2e, 0xf2, 0x02, 0x8a, 0x4c,
+ 0x1f, 0x5a, 0xbb, 0x06, 0x1b, 0x4e, 0x50, 0xfb,
+ 0x03, 0xed, 0x2a, 0x53, 0xdc, 0x2a, 0x65, 0xad,
+ 0x57, 0x84, 0x48, 0xdb, 0xd2, 0x9b, 0xc0, 0x01,
+ 0x5f, 0x7d, 0x3e, 0x84, 0xe5, 0x15, 0x7d, 0xc5,
+ 0x60, 0x4b, 0x18, 0xa1, 0xf3, 0x00, 0x82, 0xd3,
+ 0x39, 0x2a, 0x1f, 0x8f, 0x6a, 0xb7, 0xeb, 0x76,
+ 0xfb, 0xf0, 0x5e, 0x66, 0xd8, 0xf1, 0x85, 0xa8,
+ 0x17, 0xdc, 0x6a, 0xee, 0x53, 0xd9, 0x72, 0x27,
+ 0xd1, 0x47, 0x73, 0x97, 0x2c, 0xd7, 0xd2, 0xb8,
+ 0xcd, 0xbe, 0x7b, 0xcc, 0xcc, 0x7d, 0x82, 0x10,
+ 0x05, 0x5d, 0xff, 0xb0, 0xe0, 0x3a, 0xda, 0x1b,
+ 0x39, 0x7b, 0x11, 0x30, 0x4f, 0xe7, 0xf9, 0xa6,
+ 0x43, 0x56, 0x01, 0xe4, 0xed, 0x1a, 0x22, 0x5b,
+ 0x53, 0x6b, 0x34, 0x58, 0x21, 0x3f, 0x0d, 0xca,
+ 0x95, 0x24, 0x9a, 0xb0, 0x03, 0xe3, 0x97, 0xf5,
+ 0x9b, 0xcb, 0x10, 0x6f, 0x1d, 0x8a, 0x8b, 0xaa,
+ 0x14, 0x0a, 0x89, 0x92, 0xa1, 0x07, 0xb1, 0x35,
+ 0x40, 0x7f, 0xb0, 0xc3, 0x9a, 0x2a, 0x1f, 0x94,
+ 0x6c, 0x8f, 0xd8, 0x40, 0x52, 0xec, 0x0e, 0xbf,
+ 0x91, 0x27, 0xbd, 0x65, 0x25, 0xf2, 0x36, 0xe8,
+ 0x8f, 0x49, 0x08, 0xa6, 0x8f, 0x82, 0xb3, 0x47,
+ 0xe9, 0xa4, 0xa6, 0x8e, 0xfb, 0x30, 0xb2, 0x4c,
+ 0xad, 0x76, 0x65, 0x25, 0xdb, 0x60, 0xa8, 0xeb,
+ 0xb9, 0xf9, 0x9a, 0x9c, 0x9c, 0x12, 0xab, 0xeb,
+ 0x4b, 0x96, 0xa5, 0xc3, 0x58, 0x9b, 0x68, 0x2c,
+ 0x41, 0xac, 0xe5, 0x03, 0xbc, 0xee, 0xb8, 0x05,
+ 0xf7, 0xe6, 0xb1, 0x07, 0xde, 0x46, 0x28, 0xc1,
+ 0x2c, 0x15, 0xa2, 0x34, 0xea, 0xe7, 0xc3, 0x36,
+ 0xe6, 0x18, 0x20, 0x4e, 0x20, 0x3f, 0x32, 0xa8,
+ 0x29, 0x05, 0xf6, 0xa5, 0xf2, 0xa3, 0xeb, 0x7a,
+ 0x25, 0x5e, 0x14, 0x1f, 0xd0, 0xe1, 0x8e, 0xfb,
+ 0x28, 0xc5, 0xa2, 0x42, 0xed, 0x4c, 0x12, 0x15,
+ 0x2a, 0x08, 0xfb, 0x0b, 0xfb, 0x94, 0x64, 0xc0,
+ 0x8b, 0xbb, 0xbb, 0x2c, 0xef, 0xab, 0x0b, 0x4c,
+ 0x27, 0x40, 0x94, 0x3e, 0x93, 0x77, 0x98, 0xcc,
+ 0x64, 0xe3, 0xba, 0x22, 0x95, 0xd7, 0xc1, 0xe3,
+ 0xa7, 0xcd, 0xf9, 0x25, 0xdc, 0xc4, 0xd2, 0xee,
+ 0x5b, 0x53, 0x72, 0x59, 0x8b, 0xea, 0xbf, 0xde,
+ 0x2b, 0x35, 0xd5, 0x27, 0x57, 0x2e, 0x13, 0xa7,
+ 0x50, 0x2d, 0xa5, 0xd5, 0x43, 0x0b, 0x49, 0x87,
+ 0xd0, 0xbd, 0xdd, 0xec, 0x4b, 0xd1, 0x8b, 0xf6,
+ 0xf6, 0xd0, 0x97, 0xcb, 0x8d, 0x58, 0x35, 0x27,
+ 0xa5, 0x7e, 0x4a, 0xda, 0x93, 0xa4, 0x1e, 0x39,
+ 0x53, 0x59, 0x87, 0xfe, 0x82, 0x09, 0xda, 0x03,
+ 0x33, 0xcf, 0x94, 0x60, 0xb1, 0x0c, 0xa1, 0x0e,
+ 0xd6, 0xaa, 0xb0, 0x09, 0x96, 0x8b, 0x72, 0x15,
+ 0xfb, 0xb0, 0x7d, 0x06, 0xf5, 0x2d, 0x64, 0xcd,
+ 0x03, 0xf0, 0xfa, 0xed, 0x6f, 0x43, 0xe3, 0xf3,
+ 0x33, 0xaf, 0x65, 0x82, 0x1d, 0xad, 0x03, 0x62,
+ 0xbe, 0x12, 0x14, 0x85, 0x66, 0x45, 0x03, 0x79,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t bf_cbc_256_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0x65, 0xbb, 0x30, 0x13, 0x9a, 0x26, 0xe9, 0x3d,
+ 0x54, 0x28, 0x77, 0xf1, 0x3f, 0x9b, 0xe1, 0x3e,
+ 0x70, 0x90, 0x6f, 0x16, 0xfc, 0x2f, 0x27, 0xb3,
+ 0xc6, 0x3c, 0x38, 0x31, 0x11, 0xe1, 0x3b, 0x72,
+ 0x22, 0x1c, 0x01, 0xc5, 0xa6, 0x70, 0x16, 0x4d,
+ 0xd2, 0xbd, 0xcb, 0x15, 0x00, 0x22, 0xab, 0x65,
+ 0x6a, 0x96, 0x5e, 0x45, 0x7f, 0xfd, 0x76, 0x18,
+ 0x43, 0x25, 0x75, 0x73, 0xa4, 0x24, 0xe4, 0x5b,
+ 0xca, 0xf7, 0x6f, 0xfe, 0xc6, 0x4c, 0x81, 0x77,
+ 0xe5, 0x1b, 0xb4, 0x7b, 0x64, 0xc2, 0x0d, 0x2b,
+ 0xa9, 0x76, 0xae, 0x5d, 0xab, 0x81, 0x77, 0xa6,
+ 0x48, 0xe9, 0x0c, 0x6d, 0x93, 0xbd, 0x7e, 0xdc,
+ 0x39, 0x89, 0x72, 0xd2, 0x07, 0x87, 0x44, 0xa6,
+ 0x7d, 0x08, 0x54, 0xc6, 0x90, 0x1d, 0xa2, 0xd7,
+ 0xfd, 0xd5, 0x59, 0x67, 0xd9, 0x5f, 0x5c, 0xbc,
+ 0x60, 0xc7, 0xf6, 0x98, 0xad, 0x21, 0xdf, 0xde,
+ 0x27, 0xca, 0x73, 0x2f, 0x56, 0xb7, 0xd7, 0x54,
+ 0x6e, 0xc3, 0x09, 0x6f, 0x1b, 0x82, 0x6f, 0xf8,
+ 0x1b, 0xb2, 0x54, 0x47, 0x54, 0x55, 0x67, 0x1c,
+ 0x4a, 0x10, 0x44, 0xb8, 0x8e, 0x85, 0x71, 0x70,
+ 0x02, 0x49, 0xdd, 0x4f, 0xd4, 0xd4, 0x8a, 0x60,
+ 0x04, 0x17, 0x84, 0xbf, 0xb4, 0x0a, 0x6f, 0xc1,
+ 0xec, 0x1f, 0x5d, 0x79, 0x59, 0x15, 0x7b, 0x87,
+ 0xa2, 0xfe, 0x81, 0xa1, 0x0b, 0x74, 0xfa, 0xef,
+ 0xce, 0x96, 0xec, 0x4b, 0xd8, 0x8e, 0xe9, 0xc2,
+ 0x6b, 0x15, 0xd9, 0xe4, 0x1d, 0x81, 0xb2, 0x12,
+ 0xb9, 0x8b, 0x64, 0x3d, 0xfa, 0xf6, 0x29, 0x25,
+ 0x88, 0x4f, 0xfa, 0x56, 0x34, 0x85, 0xa6, 0xbe,
+ 0xf7, 0x9f, 0x54, 0xc4, 0xb7, 0x17, 0xd5, 0x00,
+ 0x2d, 0x06, 0xca, 0xf0, 0xec, 0xf9, 0x52, 0x62,
+ 0x12, 0xef, 0xc0, 0x57, 0xd1, 0xf3, 0xf2, 0xb1,
+ 0x3d, 0xc5, 0x69, 0x04, 0x95, 0xaf, 0xc6, 0x54,
+ 0x18, 0x08, 0x2f, 0xe2, 0xc2, 0xdb, 0x28, 0x63,
+ 0x7c, 0xf5, 0xba, 0xa4, 0xdf, 0xbd, 0xdd, 0xac,
+ 0x98, 0xec, 0x9e, 0x07, 0x48, 0xee, 0xb9, 0x6f,
+ 0x40, 0xba, 0x08, 0xd5, 0x74, 0x97, 0x34, 0x98,
+ 0x7a, 0x80, 0xc5, 0x78, 0x69, 0x11, 0xd9, 0xcb,
+ 0x3b, 0x6f, 0xe7, 0xb7, 0x78, 0xb0, 0x5e, 0x02,
+ 0xaf, 0x6c, 0xef, 0x36, 0x00, 0xca, 0x97, 0x1a,
+ 0x01, 0x2e, 0xe8, 0xc0, 0x8b, 0xc6, 0x78, 0xf4,
+ 0x2d, 0x60, 0x2c, 0x04, 0x3f, 0x0b, 0xca, 0x7e,
+ 0xf1, 0x2e, 0x67, 0x8f, 0x9d, 0xa7, 0xaa, 0xab,
+ 0xcf, 0xb3, 0x84, 0x9e, 0x14, 0x35, 0x15, 0x3b,
+ 0x88, 0x9a, 0x33, 0x5d, 0x68, 0x82, 0x29, 0x53,
+ 0x94, 0x18, 0x0d, 0x14, 0x9e, 0x5f, 0xc1, 0x32,
+ 0x0a, 0x95, 0x6e, 0xa3, 0x82, 0x4b, 0x58, 0x0f,
+ 0x9c, 0xf0, 0x26, 0x4b, 0x2f, 0x02, 0x60, 0x85,
+ 0xdd, 0x2c, 0xb8, 0x87, 0x8b, 0x14, 0x9c, 0x54,
+ 0x0a, 0x5a, 0x02, 0xbe, 0xe2, 0x71, 0xcc, 0x07,
+ 0xae, 0x67, 0x00, 0xa8, 0xd4, 0x09, 0x7c, 0xee,
+ 0x0d, 0x29, 0x17, 0x67, 0x96, 0x68, 0x41, 0xfa,
+ 0x72, 0x29, 0x98, 0x2b, 0x23, 0xd1, 0xa9, 0x89,
+ 0x1c, 0xcc, 0xaf, 0x88, 0xdb, 0xb5, 0x1e, 0xb1,
+ 0xae, 0x17, 0x5f, 0x29, 0x8d, 0x1c, 0x0a, 0x5c,
+ 0xb9, 0xa7, 0x59, 0x8b, 0x91, 0x41, 0xee, 0x89,
+ 0xe1, 0x0e, 0x7e, 0x0a, 0xee, 0xbc, 0x35, 0xab,
+ 0xf1, 0x5a, 0x58, 0x03, 0xa2, 0xcf, 0x33, 0xa3,
+ 0x74, 0x82, 0xd3, 0xa0, 0x32, 0xfc, 0x3b, 0x9c,
+ 0xdf, 0xc0, 0x3a, 0x76, 0xe1, 0xea, 0xf0, 0x6d,
+ 0xc8, 0xe7, 0x97, 0xec, 0x03, 0xc1, 0x72, 0x94,
+ 0xe5, 0xc4, 0x04, 0x2a, 0x38, 0xb4, 0xef, 0x47,
+ 0x1d, 0xf9, 0xb8, 0x0a, 0xa9, 0x45, 0xc1, 0x63,
+ 0xf8, 0x32, 0xdb, 0x5d, 0xb1, 0xa2, 0x80, 0x8c,
+ 0x23, 0xd3, 0x60, 0xfb, 0xf8, 0x84, 0x57, 0x8b,
+};
+
+const struct testvec bf_cbc_256_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t bf_cbc_256_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0x90, 0x3d, 0xd2, 0xc0, 0xd3, 0x75, 0xe8, 0x04,
+ 0x34, 0x66, 0x76, 0x25, 0x70, 0xde, 0x41, 0xf1,
+ 0x35, 0x63, 0x5c, 0xac, 0x8f, 0x28, 0x17, 0xd3,
+ 0xae, 0x43, 0xfd, 0x8a, 0xb8, 0xc2, 0xd3, 0x88,
+ 0xef, 0xfa, 0x21, 0xeb, 0xb4, 0x33, 0x75, 0x69,
+ 0x7d, 0xe9, 0x27, 0x1c, 0x03, 0xcf, 0x90, 0xcf,
+ 0xf0, 0xaa, 0x3e, 0x01, 0x41, 0x24, 0xdc, 0x01,
+ 0x5a, 0xe8, 0x92, 0xea, 0xde, 0x87, 0xbf, 0x75,
+ 0xe4, 0x0b, 0xf7, 0xa3, 0x42, 0x27, 0xc4, 0xde,
+ 0x01, 0x6f, 0x5c, 0xec, 0x6d, 0x37, 0x38, 0xd7,
+ 0x4f, 0x85, 0xc0, 0xc2, 0x3a, 0xa7, 0x2d, 0x15,
+ 0xd5, 0x1c, 0xee, 0x15, 0x13, 0x7a, 0x4e, 0x33,
+ 0xc7, 0x59, 0x93, 0x73, 0xe9, 0xf5, 0x39, 0xb0,
+ 0xad, 0x8b, 0x61, 0xca, 0x4d, 0x31, 0xaa, 0x44,
+ 0xf6, 0x5c, 0xb7, 0x99, 0xe5, 0x92, 0x3d, 0x47,
+ 0x79, 0x9b, 0x29, 0x16, 0xe1, 0x2c, 0x30, 0x8b,
+ 0x1e, 0x17, 0xf0, 0x91, 0x59, 0x00, 0xab, 0x6d,
+ 0x4d, 0xa7, 0x4d, 0x96, 0xc3, 0xe4, 0x3d, 0x17,
+ 0x5c, 0x8e, 0xfc, 0x59, 0x48, 0xd4, 0xdd, 0xf4,
+ 0xea, 0x3a, 0x68, 0xc8, 0xb1, 0x74, 0x69, 0xcb,
+ 0x49, 0x1a, 0xec, 0x24, 0x4e, 0x7e, 0xe9, 0xba,
+ 0x75, 0xfb, 0x52, 0x85, 0x75, 0xe9, 0x41, 0x9a,
+ 0xc6, 0x40, 0x9c, 0x92, 0x3f, 0xe8, 0x99, 0x81,
+ 0x84, 0x14, 0x2b, 0x62, 0x94, 0xba, 0x56, 0x00,
+ 0xde, 0x88, 0xe1, 0x35, 0xea, 0x25, 0x88, 0xd1,
+ 0xce, 0xd4, 0xfc, 0xde, 0xee, 0x1a, 0xfd, 0xb1,
+ 0xa7, 0x46, 0x9d, 0x0c, 0x99, 0xa6, 0xab, 0x23,
+ 0x55, 0x2f, 0x46, 0xd7, 0xb3, 0xcd, 0x2c, 0xab,
+ 0x93, 0x3e, 0xdb, 0xe2, 0x34, 0x69, 0x1a, 0x56,
+ 0x21, 0x92, 0x56, 0xf4, 0x05, 0xe1, 0x24, 0xee,
+ 0x4d, 0x5e, 0x89, 0xeb, 0x23, 0x26, 0xdc, 0x14,
+ 0xde, 0x56, 0x3f, 0x0c, 0x15, 0x3e, 0x42, 0x71,
+ 0x9b, 0xe8, 0xc5, 0xfd, 0x5e, 0x4a, 0xb6, 0xd9,
+ 0xa0, 0x18, 0x5d, 0xbd, 0xef, 0x80, 0xb4, 0xf6,
+ 0x1e, 0x56, 0x2a, 0x57, 0x13, 0xba, 0x24, 0xa4,
+ 0x6f, 0x4c, 0xd4, 0xaa, 0x31, 0x5e, 0x69, 0x26,
+ 0xd2, 0xee, 0xef, 0x7f, 0x83, 0x9c, 0x8e, 0x6a,
+ 0x17, 0xe3, 0xda, 0xf4, 0x59, 0xad, 0x26, 0x83,
+ 0x53, 0x4c, 0x0d, 0x62, 0xe5, 0x9a, 0x30, 0xc5,
+ 0x0a, 0xa8, 0xb1, 0x3b, 0x1b, 0x41, 0x5c, 0x74,
+ 0x42, 0x7b, 0x0c, 0x9e, 0x3c, 0x12, 0x04, 0x46,
+ 0xc3, 0xc7, 0x10, 0xea, 0xf1, 0x3b, 0xb1, 0x01,
+ 0xfe, 0x1b, 0xe8, 0xf8, 0x42, 0xbc, 0xe9, 0x11,
+ 0x9b, 0x63, 0x29, 0x99, 0x18, 0x79, 0x9e, 0xd2,
+ 0xbf, 0x9d, 0x93, 0x4d, 0x16, 0x0f, 0x14, 0x41,
+ 0xb6, 0x0c, 0xa5, 0x07, 0x13, 0x29, 0x21, 0x0d,
+ 0x8f, 0xf9, 0x0a, 0x0a, 0x54, 0xaf, 0xa6, 0x22,
+ 0x25, 0x79, 0x07, 0xe5, 0x3e, 0x49, 0x6b, 0x12,
+ 0x9e, 0xfc, 0x91, 0xdb, 0xf3, 0x7c, 0xdf, 0x03,
+ 0x9c, 0x78, 0xa7, 0xc3, 0x5e, 0x14, 0xde, 0xb5,
+ 0x6a, 0x7b, 0x3b, 0xe3, 0x4f, 0x8a, 0x49, 0xce,
+ 0xc9, 0x14, 0x29, 0x96, 0x84, 0xca, 0xe1, 0x49,
+ 0x41, 0x73, 0xb3, 0x2a, 0xbe, 0x37, 0xb6, 0x2d,
+ 0xff, 0xf2, 0x8e, 0x3d, 0x02, 0xeb, 0xd4, 0xd3,
+ 0x15, 0x8f, 0xc0, 0x00, 0x91, 0xd5, 0xe7, 0x76,
+ 0xf5, 0x6e, 0x81, 0x38, 0x38, 0x07, 0xa6, 0xe8,
+ 0x72, 0x14, 0x3b, 0x36, 0xef, 0xbc, 0x5b, 0x26,
+ 0xb0, 0x60, 0x25, 0x49, 0x7e, 0xfc, 0xd8, 0x3b,
+ 0x63, 0xdc, 0x7f, 0x80, 0xd5, 0x43, 0x78, 0xbb,
+ 0xf1, 0xf9, 0x3e, 0x75, 0x1d, 0x58, 0xb2, 0xc7,
+ 0xb6, 0x52, 0xfb, 0xe7, 0x42, 0xef, 0x87, 0xfd,
+ 0x3a, 0x02, 0x7a, 0xf9, 0xbc, 0xa8, 0x2f, 0xd6,
+ 0xc1, 0x5f, 0xa4, 0x57, 0x62, 0x83, 0x82, 0x8e,
+ 0x1e, 0xbb, 0x85, 0xf7, 0x1b, 0x2e, 0xe2, 0xb0,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t bf_cbc_256_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x2b, 0xf6, 0xd4, 0x61, 0x3b, 0x1f, 0x5b, 0xe9,
+ 0x32, 0xab, 0x27, 0xa1, 0xaf, 0x5e, 0xf4, 0xa7,
+ 0xaa, 0xc5, 0x2a, 0x3c, 0x0d, 0x34, 0xd8, 0xb3,
+ 0xfd, 0xb2, 0xca, 0xfb, 0x3c, 0x38, 0x96, 0x71,
+ 0x47, 0xaa, 0xa7, 0x2f, 0x48, 0x2c, 0x39, 0x88,
+ 0x2d, 0xc6, 0xb1, 0xf7, 0xc7, 0x2d, 0xda, 0xe9,
+ 0xfb, 0x4f, 0x9b, 0x1f, 0xe1, 0x0c, 0x24, 0x89,
+ 0xfe, 0x70, 0xe0, 0xb2, 0x51, 0x89, 0x51, 0xa9,
+ 0xae, 0xd1, 0x92, 0x4f, 0x56, 0x5c, 0x2a, 0xf4,
+ 0xbc, 0x4e, 0x77, 0x4a, 0xb8, 0xab, 0x02, 0x76,
+ 0xef, 0x69, 0xfb, 0x5e, 0x06, 0xb5, 0xff, 0x31,
+ 0xce, 0x2b, 0xfc, 0x48, 0x4c, 0x82, 0xe9, 0x3c,
+ 0x61, 0x69, 0x68, 0x1d, 0xb1, 0xc6, 0x40, 0x10,
+ 0xd7, 0x0e, 0xd2, 0x26, 0x33, 0x5b, 0x0b, 0xe7,
+ 0xc2, 0xbe, 0xf4, 0x24, 0x1a, 0xa6, 0x70, 0x31,
+ 0xa7, 0x15, 0x76, 0xc7, 0x90, 0x8d, 0x60, 0xe0,
+ 0xee, 0x5b, 0x73, 0xa9, 0xe1, 0xe1, 0xaf, 0xf0,
+ 0x5e, 0x6f, 0x32, 0x98, 0x92, 0xbe, 0x24, 0x81,
+ 0x26, 0x9f, 0xb8, 0x67, 0xd0, 0xca, 0x9d, 0x8f,
+ 0x14, 0xc8, 0x81, 0x2e, 0x57, 0x1c, 0x3a, 0xe0,
+ 0xdb, 0x49, 0xad, 0x47, 0x51, 0x07, 0x7d, 0xec,
+ 0xbc, 0xa5, 0x8f, 0xdf, 0x84, 0xe4, 0xdf, 0x76,
+ 0x8f, 0x0b, 0xef, 0xc4, 0x41, 0xd5, 0x7c, 0xf5,
+ 0x3c, 0x21, 0x62, 0xc0, 0x1f, 0xbd, 0x39, 0xbe,
+ 0xe5, 0x75, 0x64, 0xcd, 0xa4, 0xa0, 0x03, 0xf4,
+ 0x8a, 0x16, 0x3e, 0xde, 0x79, 0x9a, 0x96, 0xff,
+ 0xf2, 0xbe, 0x88, 0xfd, 0xac, 0xc1, 0x9d, 0x5b,
+ 0xbf, 0x2f, 0xde, 0xf0, 0x26, 0x2f, 0xc9, 0x45,
+ 0xbd, 0x26, 0xa5, 0x2c, 0x3c, 0x12, 0x8b, 0xc0,
+ 0xc8, 0x7a, 0x71, 0xbb, 0xc3, 0xe9, 0xf6, 0x15,
+ 0x01, 0x6e, 0x94, 0x37, 0xbc, 0xc5, 0x9a, 0x93,
+ 0x6f, 0x9c, 0x04, 0x7e, 0xe9, 0xb2, 0xba, 0xe8,
+ 0x86, 0xa1, 0x9c, 0x1f, 0x4b, 0x77, 0x6f, 0x99,
+ 0x2d, 0x8f, 0x23, 0x34, 0x32, 0x1a, 0x82, 0x2d,
+ 0x32, 0x41, 0x3e, 0xb8, 0x6a, 0x67, 0xa9, 0x81,
+ 0xd5, 0x1b, 0x76, 0x9f, 0xd1, 0xb0, 0x06, 0xaf,
+ 0x10, 0x9e, 0x00, 0x2e, 0xb3, 0x80, 0xde, 0xae,
+ 0xf2, 0x96, 0x12, 0x5b, 0xe7, 0xc7, 0x25, 0xb7,
+ 0xd9, 0x1c, 0x04, 0xe5, 0x05, 0xaf, 0x77, 0xfa,
+ 0x6d, 0xa8, 0x04, 0x74, 0xf8, 0x9c, 0x09, 0xcf,
+ 0xe2, 0xc2, 0xd1, 0xb6, 0xac, 0xed, 0xb4, 0xbc,
+ 0x2e, 0xc2, 0xf6, 0x3c, 0xc4, 0x47, 0xc8, 0x81,
+ 0x3a, 0x50, 0x3c, 0x5c, 0x7c, 0x86, 0x17, 0x22,
+ 0xe7, 0xa3, 0xff, 0x73, 0x5e, 0x91, 0xbf, 0xb3,
+ 0x59, 0x07, 0xb7, 0xa4, 0xd5, 0x1b, 0x5c, 0xce,
+ 0x56, 0xde, 0x5f, 0xae, 0x89, 0xcb, 0x6a, 0xfe,
+ 0xaf, 0xe7, 0xd4, 0x34, 0x8d, 0x18, 0x22, 0x4d,
+ 0xd9, 0x91, 0xa6, 0xec, 0x97, 0x0e, 0x29, 0x4d,
+ 0xf6, 0xd8, 0xb3, 0x50, 0x1c, 0xc9, 0x66, 0x9d,
+ 0x2e, 0x5e, 0x27, 0xce, 0x36, 0xcb, 0x47, 0x35,
+ 0x41, 0x16, 0x0c, 0x4e, 0x73, 0x90, 0x52, 0xc5,
+ 0x65, 0xb8, 0x0c, 0xdc, 0x36, 0x8d, 0xdc, 0xca,
+ 0x97, 0x0b, 0xbc, 0xcb, 0x79, 0xc7, 0x4c, 0xd2,
+ 0x21, 0x5c, 0xbd, 0xeb, 0xea, 0xfb, 0x87, 0xe1,
+ 0xe0, 0x75, 0x39, 0xb9, 0x84, 0x1e, 0xa7, 0xfe,
+ 0x7d, 0x41, 0x75, 0x15, 0x88, 0x98, 0xd4, 0x80,
+ 0x42, 0x57, 0xb5, 0x65, 0xbf, 0xb8, 0xbd, 0x19,
+ 0x28, 0xd8, 0xa7, 0x6c, 0xe7, 0xc1, 0x00, 0xdc,
+ 0xde, 0xcb, 0x30, 0x3d, 0x29, 0x5e, 0xa6, 0x9c,
+ 0xbb, 0xb8, 0xec, 0x28, 0x23, 0x36, 0x23, 0x27,
+ 0xee, 0xdd, 0x24, 0x7d, 0x9a, 0xc9, 0xb5, 0x3c,
+ 0x7a, 0x3f, 0x1d, 0xd9, 0x32, 0x47, 0xc0, 0x4d,
+ 0x86, 0x9b, 0x2d, 0xa9, 0x5c, 0x93, 0x90, 0x51,
+ 0x70, 0xe6, 0x8f, 0x35, 0x96, 0xe0, 0x11, 0x00,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t bf_cbc_256_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x28, 0x93, 0x0f, 0x23, 0xfb, 0xa4, 0x9e, 0xe5,
+ 0x11, 0x38, 0x2b, 0xbd, 0x8d, 0x2d, 0xdb, 0x11,
+ 0xfa, 0xac, 0x74, 0x28, 0x95, 0x29, 0xf2, 0x92,
+ 0x8d, 0x00, 0x8a, 0x8a, 0x04, 0x92, 0x92, 0x33,
+ 0x8c, 0x4b, 0x29, 0x8e, 0xde, 0x59, 0xf4, 0x72,
+ 0xae, 0x2f, 0xe4, 0xe9, 0xd4, 0xe4, 0xb6, 0x69,
+ 0xc5, 0x1b, 0xbe, 0x02, 0x85, 0x4b, 0x24, 0x1e,
+ 0x79, 0xb9, 0x22, 0x29, 0x4c, 0x60, 0x8c, 0xc5,
+ 0x03, 0x1d, 0x79, 0xfe, 0x3d, 0x9e, 0x47, 0xb6,
+ 0xf7, 0x17, 0x65, 0x24, 0x15, 0x5d, 0x75, 0x4d,
+ 0xdb, 0xbc, 0x68, 0x67, 0x3b, 0xc3, 0x5a, 0x7e,
+ 0x9d, 0x98, 0x67, 0xe4, 0x8f, 0x9a, 0xd1, 0x31,
+ 0xe0, 0x26, 0xa1, 0x68, 0xbe, 0x53, 0x73, 0x7c,
+ 0xfd, 0xce, 0x6c, 0xd6, 0x1f, 0x51, 0xe6, 0x84,
+ 0x54, 0x7a, 0xe3, 0x7f, 0x7c, 0x8f, 0x2f, 0x88,
+ 0x58, 0xfe, 0x5e, 0x82, 0x11, 0xc9, 0xa5, 0x89,
+ 0xa4, 0x49, 0x92, 0x21, 0x0f, 0x03, 0xdb, 0x16,
+ 0xc4, 0xc0, 0x80, 0xb7, 0x16, 0x4c, 0x29, 0xbe,
+ 0x18, 0xfa, 0x2d, 0xdf, 0x4a, 0x23, 0x34, 0x9a,
+ 0x27, 0xea, 0xed, 0x95, 0x25, 0x14, 0xa8, 0x2e,
+ 0x17, 0x59, 0x04, 0xb0, 0x5c, 0x6d, 0xc7, 0xeb,
+ 0xed, 0xf6, 0x73, 0xae, 0x18, 0x0e, 0x4b, 0xec,
+ 0xc6, 0xb7, 0x39, 0xe7, 0x62, 0xf0, 0x84, 0x30,
+ 0x10, 0xb6, 0xf3, 0x27, 0x6d, 0xfe, 0x32, 0xe7,
+ 0xfe, 0xff, 0x43, 0xba, 0x89, 0xfe, 0x24, 0xa8,
+ 0x0e, 0x7c, 0xf2, 0x23, 0x9d, 0x66, 0x6f, 0x9c,
+ 0xe6, 0x88, 0xbc, 0x3f, 0x44, 0x4c, 0x73, 0x13,
+ 0x77, 0x95, 0x6f, 0xcb, 0xc8, 0xa5, 0x7a, 0xa9,
+ 0xeb, 0xe1, 0x0f, 0x9e, 0x25, 0xbe, 0x99, 0x1a,
+ 0x99, 0x7f, 0xbb, 0xec, 0x89, 0x91, 0x3e, 0x52,
+ 0xb5, 0xac, 0xc9, 0xd3, 0xea, 0xb0, 0xf2, 0x0c,
+ 0xc8, 0x58, 0x4b, 0x93, 0xa3, 0x9f, 0xad, 0x5a,
+ 0x80, 0x4e, 0x02, 0x20, 0x9d, 0xac, 0x4b, 0xe0,
+ 0x59, 0x4d, 0xb5, 0x51, 0x07, 0xf5, 0xa6, 0xb3,
+ 0xc9, 0x20, 0x58, 0x7e, 0x45, 0xec, 0x58, 0xea,
+ 0x49, 0xbb, 0x03, 0xf5, 0x6c, 0xdd, 0xcc, 0xa3,
+ 0x13, 0x21, 0x79, 0xc9, 0xc2, 0x92, 0x60, 0xd5,
+ 0xb2, 0x3b, 0x74, 0xbc, 0x57, 0xa6, 0x70, 0x36,
+ 0x75, 0xf5, 0x01, 0xd1, 0xb2, 0xe9, 0xfd, 0xc5,
+ 0x93, 0x5e, 0x60, 0x6b, 0xfd, 0xd2, 0x56, 0xc0,
+ 0x1f, 0xe4, 0xcd, 0x4c, 0xfa, 0xc4, 0xd8, 0xc2,
+ 0x2d, 0xf9, 0x9f, 0x82, 0x0f, 0x40, 0x7b, 0xad,
+ 0x35, 0x63, 0x95, 0x7e, 0x49, 0x4a, 0xfe, 0x8f,
+ 0xaa, 0x57, 0x3a, 0x0c, 0x59, 0x69, 0xe7, 0xb8,
+ 0xfc, 0x71, 0x5c, 0x4f, 0x18, 0x12, 0xe5, 0xef,
+ 0xdb, 0x1f, 0x66, 0x9a, 0xe2, 0x1a, 0x92, 0x1f,
+ 0xfe, 0x20, 0x81, 0xe5, 0x83, 0x97, 0xfb, 0xaf,
+ 0xeb, 0x31, 0x6c, 0x81, 0xf2, 0x2f, 0xf4, 0x41,
+ 0xf1, 0xd9, 0x61, 0xfb, 0x36, 0x4e, 0xab, 0xc5,
+ 0x8b, 0x9c, 0x37, 0xea, 0x88, 0xeb, 0x1e, 0x4c,
+ 0x84, 0x1a, 0xac, 0x4c, 0x19, 0x39, 0x51, 0x53,
+ 0xe0, 0x50, 0xb0, 0xdf, 0xe6, 0xc5, 0xbb, 0x80,
+ 0x06, 0x30, 0x14, 0xf5, 0x0e, 0x73, 0xd2, 0xdb,
+ 0x19, 0x45, 0x30, 0xdc, 0xd0, 0x4d, 0xe6, 0xd6,
+ 0x0e, 0x2d, 0x77, 0xa3, 0xb3, 0x27, 0xda, 0x99,
+ 0x62, 0x88, 0x35, 0xba, 0x64, 0x15, 0xec, 0xaf,
+ 0x70, 0x97, 0x94, 0x81, 0x30, 0x6d, 0x63, 0x42,
+ 0x71, 0x3e, 0x06, 0xec, 0x50, 0x96, 0x87, 0x59,
+ 0xe7, 0x26, 0x9c, 0xcf, 0xc7, 0xe7, 0x62, 0x82,
+ 0x3b, 0xd7, 0xfe, 0xb4, 0x48, 0x45, 0x9d, 0x54,
+ 0x18, 0x15, 0x13, 0x74, 0x92, 0x6f, 0x43, 0xb3,
+ 0xa9, 0x82, 0xd4, 0xc2, 0xef, 0x61, 0x9d, 0x5e,
+ 0x1d, 0xc6, 0x80, 0xd3, 0xe9, 0xdd, 0x52, 0x9c,
+ 0x4d, 0x04, 0x05, 0xa0, 0x43, 0x36, 0xb6, 0x89,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t bf_cbc_256_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0x60, 0x91, 0x19, 0x89, 0xee, 0xac, 0x12, 0xe5,
+ 0x60, 0x6c, 0xfd, 0xf9, 0xe4, 0xc6, 0xc9, 0xbd,
+ 0x75, 0xe1, 0xa5, 0xe6, 0xf4, 0xed, 0x4b, 0xf4,
+ 0x16, 0xf4, 0x57, 0xa4, 0xe6, 0x60, 0x8e, 0x1b,
+ 0x97, 0x0e, 0xd5, 0x09, 0xa1, 0x3c, 0x6c, 0xe8,
+ 0x91, 0xaf, 0x19, 0x96, 0x2a, 0x7b, 0x77, 0x30,
+ 0xc7, 0x99, 0xe6, 0xaa, 0xb0, 0xe2, 0x29, 0x1c,
+ 0x39, 0x54, 0x1c, 0x0a, 0x4a, 0x51, 0xa2, 0xa2,
+ 0x22, 0x96, 0x05, 0x8b, 0x12, 0x80, 0x16, 0x28,
+ 0xdc, 0xfa, 0x22, 0x90, 0xa4, 0x33, 0xb1, 0x84,
+ 0x13, 0x52, 0x5d, 0xb5, 0xd4, 0xe8, 0x60, 0x18,
+ 0x6a, 0xb8, 0x1b, 0xdb, 0xb4, 0x69, 0xf6, 0x09,
+ 0x95, 0x71, 0xdd, 0x43, 0x21, 0xad, 0x7e, 0xf7,
+ 0x8e, 0x7a, 0x0d, 0xf0, 0x52, 0x54, 0xb8, 0xdc,
+ 0x7d, 0x72, 0x29, 0x97, 0x2b, 0x9c, 0x2c, 0xef,
+ 0xc3, 0x26, 0x68, 0x72, 0xae, 0x29, 0x0f, 0x67,
+ 0xbf, 0xea, 0x92, 0x27, 0xd1, 0xba, 0x8d, 0x32,
+ 0x8b, 0x26, 0x91, 0x30, 0x88, 0xcc, 0x47, 0xaf,
+ 0x54, 0x8c, 0x88, 0x88, 0x2f, 0x59, 0x76, 0x34,
+ 0x43, 0x35, 0x44, 0xc3, 0x16, 0x28, 0x62, 0x4b,
+ 0xbb, 0x47, 0x99, 0x7c, 0x26, 0x51, 0xe2, 0x7d,
+ 0xd8, 0x2c, 0x35, 0xf4, 0x24, 0xf1, 0x5b, 0x01,
+ 0xcc, 0x9a, 0x54, 0xd8, 0xc1, 0x73, 0x85, 0x83,
+ 0xdd, 0x0d, 0xd5, 0x75, 0xac, 0x67, 0x68, 0x59,
+ 0x3e, 0x6e, 0x9a, 0x4a, 0x7f, 0xbd, 0x85, 0xeb,
+ 0x36, 0x3e, 0xfd, 0x03, 0xfe, 0x2b, 0xe6, 0x97,
+ 0x16, 0x6b, 0xd0, 0x22, 0xb1, 0x00, 0xcc, 0x7c,
+ 0x03, 0xb1, 0x7c, 0x23, 0x7a, 0xca, 0x5e, 0x0b,
+ 0xba, 0x37, 0xa6, 0x08, 0x5b, 0xa6, 0x2b, 0x57,
+ 0x58, 0x0b, 0x5a, 0x58, 0x91, 0x3c, 0xf9, 0x46,
+ 0x05, 0x03, 0x0a, 0x9b, 0xca, 0x2d, 0x71, 0xe2,
+ 0xbb, 0x1e, 0xd3, 0xc5, 0xc2, 0xb4, 0xde, 0x7b,
+ 0xbb, 0x8b, 0x45, 0x39, 0xf5, 0x3d, 0xa2, 0xe5,
+ 0xb1, 0x40, 0x3b, 0x9e, 0x47, 0x93, 0xf9, 0x9c,
+ 0x50, 0x5c, 0x9b, 0x8d, 0x18, 0x47, 0xd3, 0xe8,
+ 0x61, 0xbc, 0x93, 0xdc, 0xf7, 0x20, 0x5a, 0x00,
+ 0x0e, 0xb8, 0xee, 0x5e, 0x83, 0x06, 0x48, 0x06,
+ 0x91, 0x08, 0x9e, 0x9c, 0x73, 0x6d, 0xb9, 0x31,
+ 0x62, 0xdc, 0x8a, 0x37, 0x17, 0x47, 0x2f, 0x0f,
+ 0xc0, 0x02, 0x02, 0xf3, 0x06, 0x26, 0x6c, 0x9d,
+ 0x96, 0x9f, 0xb0, 0xb3, 0x3b, 0x72, 0x18, 0x59,
+ 0xf4, 0xb7, 0x26, 0xcc, 0xa4, 0x46, 0xdb, 0x51,
+ 0xad, 0xed, 0xd8, 0x3a, 0xc4, 0x3a, 0x09, 0x30,
+ 0x72, 0xd9, 0x2c, 0xfe, 0x5f, 0xa8, 0x46, 0x75,
+ 0xf7, 0xba, 0x46, 0x1e, 0x7e, 0x4c, 0xd6, 0xdd,
+ 0x92, 0x2b, 0x23, 0xc6, 0x59, 0x19, 0xda, 0x9a,
+ 0x01, 0x9c, 0x5c, 0xc1, 0xaa, 0xcf, 0x6d, 0xd0,
+ 0xa5, 0x06, 0xc7, 0x5e, 0x6b, 0x60, 0x64, 0x9f,
+ 0xfe, 0xa8, 0x3f, 0x64, 0xa8, 0xed, 0xf8, 0x62,
+ 0xd7, 0x6d, 0x34, 0x41, 0x3e, 0x5e, 0x74, 0xc7,
+ 0xe6, 0x62, 0xb1, 0x5a, 0xec, 0x6a, 0xc1, 0x71,
+ 0x19, 0xf3, 0xf1, 0xe7, 0x46, 0x13, 0xd6, 0xb6,
+ 0x5a, 0xf4, 0xca, 0x3f, 0xe3, 0xa1, 0x1f, 0xe4,
+ 0xda, 0xd6, 0x0c, 0x62, 0x6a, 0x33, 0x42, 0x99,
+ 0x6f, 0x5d, 0x3a, 0xe0, 0xe7, 0xfa, 0x2d, 0x47,
+ 0x4a, 0xec, 0xaa, 0x71, 0xb5, 0xeb, 0x62, 0xb8,
+ 0x31, 0x34, 0x07, 0x44, 0xa2, 0x18, 0xec, 0x76,
+ 0xf7, 0x77, 0x56, 0x86, 0xc7, 0xe0, 0x1e, 0x8e,
+ 0xec, 0x16, 0x2b, 0xeb, 0xff, 0xaa, 0xba, 0x83,
+ 0x1f, 0xdc, 0x32, 0x23, 0x27, 0xea, 0xea, 0x0c,
+ 0x3a, 0x5f, 0x2b, 0xb4, 0xee, 0x0c, 0xf2, 0x73,
+ 0xbb, 0x59, 0x9b, 0x73, 0xf7, 0xfa, 0xe1, 0x1f,
+ 0x3b, 0xdb, 0x40, 0x29, 0xf0, 0x6c, 0xbe, 0x8f,
+ 0x2e, 0xd0, 0x83, 0xf7, 0xe8, 0x2a, 0x81, 0x82,
+};
+
+const struct testvec bf_cbc_256_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t bf_cbc_448_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0xb0, 0x1b, 0x43, 0xc9, 0x84, 0x53, 0x51, 0x72,
+ 0x1f, 0x93, 0x62, 0x94, 0x13, 0x1f, 0xe3, 0xc1,
+ 0x30, 0xee, 0xc4, 0x35, 0x98, 0xb8, 0x11, 0x9b,
+ 0xd1, 0x23, 0xfa, 0x2d, 0xc1, 0xe6, 0xf3, 0x8f,
+ 0x8b, 0x05, 0x8d, 0xc5, 0x1d, 0xc3, 0x29, 0x1a,
+ 0xff, 0x08, 0xb0, 0x97, 0x88, 0x50, 0x8f, 0x41,
+ 0x66, 0xc6, 0x70, 0x37, 0xca, 0xb2, 0xcd, 0x91,
+ 0x89, 0x41, 0x1b, 0x42, 0xce, 0x02, 0xec, 0xe8,
+ 0x9b, 0xf3, 0x50, 0x95, 0x5f, 0xba, 0xda, 0xd5,
+ 0x0c, 0x2f, 0x29, 0x2a, 0x14, 0x96, 0x4a, 0x60,
+ 0x04, 0x43, 0x62, 0x80, 0x89, 0xcf, 0xfd, 0xb6,
+ 0xc7, 0x2d, 0xb2, 0xac, 0xce, 0x51, 0xf5, 0xd1,
+ 0xcd, 0x41, 0x59, 0x8b, 0xf5, 0x02, 0x2d, 0xe8,
+ 0xc4, 0xee, 0xe9, 0x40, 0x6f, 0xcd, 0xbe, 0x3b,
+ 0xd0, 0x8d, 0x3e, 0x6c, 0x42, 0x2a, 0x17, 0xfd,
+ 0x78, 0xf6, 0xb2, 0xde, 0x69, 0x81, 0xbb, 0xae,
+ 0xd9, 0x1f, 0x49, 0xa6, 0x4c, 0x5a, 0xe9, 0x94,
+ 0x49, 0x9b, 0x7e, 0x32, 0x6d, 0x11, 0xea, 0x88,
+ 0xda, 0xf0, 0xc7, 0x8d, 0x07, 0x98, 0xab, 0xc7,
+ 0xf3, 0xcf, 0x2e, 0xda, 0x27, 0x44, 0x68, 0xc7,
+ 0xdc, 0xda, 0x00, 0xd0, 0x6d, 0x64, 0x5b, 0x39,
+ 0x46, 0x3d, 0x98, 0x24, 0xee, 0x3b, 0x36, 0x23,
+ 0x62, 0xf6, 0x8e, 0xb9, 0x8d, 0xc1, 0x9a, 0x7b,
+ 0xd7, 0x03, 0x6b, 0xb7, 0x81, 0x19, 0xec, 0x2f,
+ 0x0c, 0x0b, 0x32, 0x5a, 0xb3, 0x25, 0xf5, 0xcc,
+ 0xa3, 0x60, 0xe6, 0x4e, 0x03, 0xcd, 0xdc, 0x67,
+ 0xe5, 0x26, 0xda, 0xe0, 0x1f, 0x33, 0x99, 0xc3,
+ 0x43, 0x8c, 0x9c, 0x1a, 0x85, 0xb1, 0x15, 0x04,
+ 0xc1, 0x06, 0xd1, 0x2d, 0xc9, 0x67, 0x72, 0xe7,
+ 0xd6, 0x6d, 0x1f, 0x22, 0x56, 0x56, 0xfa, 0x8a,
+ 0xd7, 0x16, 0x37, 0x3f, 0x3e, 0x67, 0xa5, 0xb7,
+ 0xee, 0x3e, 0xd2, 0x38, 0xd5, 0xce, 0xa9, 0x62,
+ 0x82, 0x17, 0xae, 0xae, 0x62, 0xe6, 0xb7, 0xf2,
+ 0x73, 0xf1, 0xc1, 0xb7, 0xe9, 0x62, 0x79, 0x3b,
+ 0x3b, 0x3f, 0xaa, 0x0d, 0x42, 0x03, 0x35, 0x3f,
+ 0x5d, 0xa4, 0xba, 0x02, 0x23, 0x65, 0x40, 0x0e,
+ 0x61, 0x31, 0xc9, 0xd5, 0x79, 0x36, 0x76, 0x7c,
+ 0x21, 0x4a, 0x75, 0xb2, 0xa0, 0x2b, 0xc1, 0xb8,
+ 0xba, 0xf8, 0x10, 0x7a, 0x85, 0x32, 0x81, 0xbf,
+ 0x2d, 0x58, 0x3c, 0x22, 0x2f, 0x0b, 0xce, 0x03,
+ 0x12, 0xce, 0x13, 0xce, 0x4a, 0x81, 0x77, 0x1d,
+ 0x68, 0x99, 0xc0, 0x25, 0xeb, 0xd9, 0x80, 0x0d,
+ 0xe7, 0x17, 0xc8, 0x41, 0xbd, 0x4b, 0x9c, 0xdd,
+ 0x41, 0x74, 0x90, 0x2a, 0x65, 0x92, 0x05, 0xff,
+ 0x06, 0x24, 0xeb, 0x89, 0xd8, 0x41, 0xaa, 0x41,
+ 0xac, 0x8a, 0x31, 0xc6, 0x82, 0x44, 0x12, 0x5a,
+ 0xd9, 0x1c, 0xca, 0x76, 0x2b, 0x4e, 0xe8, 0x18,
+ 0x7e, 0x50, 0xf5, 0x8c, 0x7c, 0x11, 0xe7, 0x0e,
+ 0xfd, 0x08, 0x5e, 0x64, 0x8b, 0x5b, 0x9f, 0x94,
+ 0x8b, 0x0d, 0x83, 0x7e, 0xef, 0x89, 0x30, 0x4a,
+ 0x55, 0xce, 0x10, 0x5f, 0x15, 0xd2, 0xe7, 0x07,
+ 0x0c, 0x34, 0x92, 0xda, 0xae, 0x84, 0x26, 0x28,
+ 0x36, 0x1a, 0x96, 0xc6, 0xf1, 0x41, 0x2b, 0xb6,
+ 0x01, 0xfe, 0x20, 0x05, 0x43, 0x80, 0x45, 0xdf,
+ 0x5c, 0xc2, 0x96, 0xc8, 0x41, 0x68, 0x87, 0x78,
+ 0xbc, 0xf8, 0x34, 0xfb, 0x19, 0x61, 0xab, 0x7f,
+ 0x15, 0x56, 0x7f, 0x1a, 0xf5, 0x08, 0xf1, 0x1c,
+ 0x59, 0x70, 0x92, 0x3a, 0xda, 0x1a, 0xfd, 0xfc,
+ 0x4d, 0xe1, 0x12, 0x61, 0xc1, 0xd8, 0xdb, 0x63,
+ 0x6e, 0x6b, 0x19, 0x96, 0x68, 0x17, 0x9b, 0xf5,
+ 0xa9, 0x5d, 0x2c, 0xaf, 0xad, 0xc6, 0x26, 0x9e,
+ 0x09, 0xcb, 0x67, 0x4e, 0x50, 0x7d, 0x2f, 0xae,
+ 0x4e, 0x73, 0xd9, 0x5a, 0xaa, 0x5d, 0x54, 0x20,
+ 0x7b, 0x77, 0xcf, 0xf8, 0xad, 0x88, 0x6b, 0xc8,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t bf_cbc_448_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x8b, 0x2a, 0xcf, 0x7d, 0x38, 0x1b, 0xaa, 0x33,
+ 0x1c, 0xe6, 0xa1, 0x37, 0x6e, 0x9e, 0xb3, 0x48,
+ 0x2a, 0xb8, 0x61, 0x11, 0x00, 0xe5, 0x48, 0xea,
+ 0xb5, 0x9f, 0x6c, 0xa4, 0xdf, 0x8d, 0x5a, 0xd8,
+ 0x03, 0x55, 0x4d, 0x07, 0x7d, 0x5f, 0x1b, 0x18,
+ 0xd1, 0x86, 0x52, 0xc1, 0x13, 0xda, 0x99, 0x23,
+ 0xeb, 0xab, 0xb2, 0x93, 0x40, 0x7c, 0x6a, 0x8a,
+ 0xaa, 0xf8, 0xf1, 0x66, 0xf1, 0x10, 0x1d, 0xcd,
+ 0x25, 0xc7, 0x84, 0x55, 0x02, 0x1d, 0xc0, 0x3c,
+ 0xba, 0xf4, 0xbf, 0xe2, 0xe4, 0xc3, 0x57, 0xdc,
+ 0x0d, 0xfd, 0xeb, 0xb3, 0x7d, 0x31, 0x82, 0x6b,
+ 0x5c, 0x0e, 0x92, 0xa5, 0x42, 0x8b, 0x7f, 0x36,
+ 0x74, 0x4d, 0xfd, 0x2f, 0xd7, 0x19, 0x0d, 0x23,
+ 0xa7, 0x36, 0xe8, 0xe4, 0xe5, 0xff, 0xc8, 0x0d,
+ 0xe1, 0x48, 0x25, 0x79, 0xa9, 0x22, 0xac, 0x72,
+ 0x86, 0x28, 0xcb, 0x63, 0xa6, 0xa0, 0x46, 0x08,
+ 0x53, 0xb8, 0x59, 0xab, 0x0f, 0x8f, 0xb1, 0x78,
+ 0xf8, 0x4e, 0x6d, 0x1a, 0xb5, 0xdd, 0x12, 0x02,
+ 0x57, 0x55, 0xf8, 0xab, 0x78, 0x7d, 0x75, 0x61,
+ 0x81, 0x20, 0xd6, 0x4b, 0x7d, 0x76, 0x05, 0xc9,
+ 0x56, 0xf2, 0xe9, 0x3f, 0xb6, 0xb5, 0x02, 0x2b,
+ 0x1c, 0x29, 0xbf, 0x07, 0xe9, 0x5f, 0x9b, 0x18,
+ 0x38, 0x26, 0xa0, 0x09, 0xde, 0x24, 0x5b, 0x37,
+ 0x72, 0x74, 0xf4, 0x9f, 0x86, 0x28, 0x89, 0xb6,
+ 0x0c, 0x95, 0x24, 0x2f, 0x88, 0x80, 0x6a, 0xc7,
+ 0x3a, 0xdc, 0x89, 0xb0, 0xa3, 0xfe, 0x6e, 0x38,
+ 0xec, 0x0b, 0x1d, 0xbc, 0xd5, 0x90, 0x48, 0xfb,
+ 0xb1, 0x54, 0xac, 0x6e, 0x35, 0xb0, 0x71, 0x9e,
+ 0x57, 0x07, 0x81, 0x90, 0xcb, 0x63, 0xb2, 0x7f,
+ 0x4c, 0x81, 0xe1, 0x58, 0xda, 0x27, 0xef, 0x77,
+ 0xe7, 0xde, 0x96, 0x83, 0x2a, 0xb1, 0x6b, 0x08,
+ 0x62, 0x89, 0xdc, 0x3a, 0x3f, 0x08, 0xff, 0xdc,
+ 0x50, 0x3e, 0xc1, 0xe4, 0x33, 0x8b, 0xad, 0x19,
+ 0x90, 0x0b, 0x8e, 0xc3, 0x55, 0x77, 0xf0, 0xc2,
+ 0x24, 0xf9, 0x0c, 0x99, 0x84, 0xb2, 0xcc, 0x23,
+ 0x8c, 0xab, 0x79, 0x0d, 0xff, 0x75, 0x3a, 0xe0,
+ 0xc9, 0xe8, 0x1e, 0x15, 0x02, 0xd5, 0x67, 0x8e,
+ 0x32, 0xe3, 0x1f, 0xda, 0xfb, 0x88, 0xeb, 0xa5,
+ 0x23, 0xea, 0x1d, 0xaa, 0xc3, 0x62, 0x7f, 0x27,
+ 0x38, 0x2a, 0xf6, 0xa2, 0x6a, 0x0e, 0x05, 0xff,
+ 0xe4, 0x63, 0x70, 0xec, 0xf8, 0x25, 0x96, 0x08,
+ 0xcb, 0x22, 0x2a, 0xaa, 0xbc, 0x45, 0x04, 0xb9,
+ 0xbc, 0x64, 0x07, 0x09, 0x31, 0xee, 0x5f, 0x9a,
+ 0xb1, 0x71, 0x85, 0x10, 0x60, 0xfb, 0x3c, 0x56,
+ 0xeb, 0xfe, 0x91, 0xab, 0x3f, 0x09, 0x76, 0xba,
+ 0x3c, 0xfc, 0xa6, 0x0d, 0xce, 0x9f, 0x59, 0xd4,
+ 0x83, 0x8d, 0x98, 0xf5, 0x0d, 0x60, 0x1f, 0xd1,
+ 0x10, 0x61, 0x77, 0x0d, 0xd1, 0xcd, 0xc2, 0xc2,
+ 0x2c, 0x7d, 0xf6, 0x15, 0x16, 0x90, 0xc9, 0xc5,
+ 0x1e, 0xe9, 0xf5, 0x7b, 0xb4, 0x49, 0x47, 0x91,
+ 0x6a, 0x94, 0x26, 0x94, 0xb3, 0xb5, 0xa7, 0x9e,
+ 0xcb, 0xb1, 0x9c, 0xb7, 0x5d, 0x25, 0x3c, 0x2d,
+ 0x8c, 0xa8, 0xa1, 0xb1, 0x79, 0x8e, 0x60, 0xa2,
+ 0x3e, 0x04, 0xfa, 0x3f, 0xb4, 0x43, 0xde, 0x0a,
+ 0xde, 0xf4, 0x58, 0xe7, 0xd1, 0x04, 0x1d, 0xb7,
+ 0x1d, 0xa6, 0xcb, 0x49, 0x41, 0x30, 0xb5, 0x41,
+ 0xb5, 0x14, 0x19, 0xe4, 0xeb, 0x2c, 0xe2, 0xf0,
+ 0x66, 0x59, 0xe3, 0xc6, 0xb0, 0xd0, 0x1e, 0xaa,
+ 0x9f, 0xa5, 0x0b, 0xb8, 0xfd, 0xae, 0x62, 0xcf,
+ 0x3e, 0xe2, 0xea, 0x79, 0xc5, 0x3e, 0xcf, 0xf0,
+ 0x40, 0x00, 0x8c, 0x81, 0x97, 0xed, 0xac, 0xf9,
+ 0x61, 0x75, 0x4e, 0xd7, 0xb7, 0xb2, 0x02, 0x14,
+ 0x04, 0xf6, 0xbf, 0x25, 0xbe, 0x78, 0x2a, 0xea,
+ 0xd2, 0x61, 0xf2, 0x7e, 0x45, 0x6b, 0x20, 0xca,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t bf_cbc_448_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x35, 0x34, 0x49, 0x29, 0x12, 0x3f, 0xc6, 0x2f,
+ 0xc9, 0x3d, 0xc9, 0x54, 0x46, 0xf3, 0x26, 0xf9,
+ 0x5e, 0x45, 0xb4, 0xba, 0x6d, 0x0f, 0x98, 0x53,
+ 0x8b, 0x7a, 0x00, 0x47, 0xb6, 0xbd, 0x70, 0x89,
+ 0x60, 0x8e, 0x52, 0x0b, 0xe3, 0x0a, 0xd8, 0x0e,
+ 0x48, 0xf3, 0xcc, 0x66, 0x8d, 0x71, 0xaa, 0x0e,
+ 0xc2, 0x68, 0x03, 0x05, 0xf9, 0xef, 0x1d, 0x14,
+ 0x5a, 0x85, 0x88, 0x70, 0x77, 0xcf, 0xe3, 0xdf,
+ 0x18, 0xe5, 0xfb, 0xea, 0xe1, 0xe8, 0xe0, 0x25,
+ 0xb2, 0x14, 0x61, 0x5d, 0x2f, 0xce, 0x61, 0xec,
+ 0x68, 0xc8, 0x06, 0x60, 0x41, 0xc1, 0xe3, 0x0a,
+ 0x5e, 0x96, 0x15, 0x9b, 0x2c, 0x5b, 0xfd, 0xba,
+ 0x17, 0x2e, 0x50, 0xb6, 0x68, 0x39, 0x21, 0x56,
+ 0x31, 0x2e, 0xb5, 0x29, 0xff, 0x4a, 0x12, 0x34,
+ 0x02, 0x54, 0xb1, 0x7f, 0xd8, 0x35, 0xec, 0x79,
+ 0x9e, 0xef, 0x62, 0xf3, 0x4b, 0x58, 0x96, 0xf1,
+ 0x83, 0x26, 0x57, 0x3d, 0x55, 0xb9, 0xb0, 0xa7,
+ 0x48, 0x65, 0x06, 0xee, 0x14, 0x88, 0xb5, 0x58,
+ 0xc8, 0x4d, 0x6e, 0xd8, 0x44, 0x76, 0x21, 0x16,
+ 0xa4, 0xdf, 0x68, 0x4b, 0xff, 0x69, 0x23, 0x66,
+ 0x18, 0x75, 0xe6, 0x29, 0xea, 0x95, 0x87, 0x1c,
+ 0xed, 0x2d, 0xbd, 0xbf, 0x22, 0x56, 0x11, 0xd5,
+ 0x59, 0x90, 0x24, 0xd7, 0xae, 0xda, 0x99, 0x49,
+ 0xe3, 0x23, 0x03, 0x24, 0x3b, 0x02, 0x49, 0x1d,
+ 0xa5, 0x57, 0x2f, 0xea, 0xd1, 0x6a, 0x17, 0x53,
+ 0x0f, 0xb3, 0xa9, 0x64, 0x8a, 0xdb, 0x62, 0x17,
+ 0xad, 0x5c, 0x7d, 0x56, 0x14, 0x0f, 0xfb, 0x14,
+ 0xbe, 0x7e, 0xa1, 0xa8, 0x27, 0xf0, 0xf0, 0x3a,
+ 0xe7, 0xc5, 0x26, 0x98, 0x9d, 0x29, 0xf7, 0xfd,
+ 0x43, 0x13, 0x34, 0xe2, 0xb8, 0x0b, 0x14, 0xe9,
+ 0x79, 0x66, 0x7a, 0xf2, 0xed, 0x79, 0x37, 0x16,
+ 0x75, 0x2b, 0xf2, 0x99, 0xa1, 0xba, 0xf1, 0xc1,
+ 0x61, 0x8d, 0x78, 0x46, 0x3a, 0x67, 0x58, 0x6a,
+ 0x55, 0x0d, 0x2e, 0x08, 0x47, 0xfc, 0x94, 0x2f,
+ 0x65, 0xa1, 0x1a, 0xfe, 0x05, 0xfa, 0x41, 0x00,
+ 0x6c, 0x42, 0xbc, 0x65, 0x37, 0xd9, 0x25, 0x9c,
+ 0xf4, 0x83, 0x8a, 0xdb, 0x91, 0x96, 0xc5, 0xa9,
+ 0x02, 0x44, 0xbc, 0x9a, 0x26, 0x9c, 0xd1, 0xfa,
+ 0x06, 0x8b, 0xd6, 0x40, 0x8f, 0x0a, 0xd2, 0x5b,
+ 0xd8, 0x57, 0xd5, 0x61, 0x1b, 0x86, 0xa6, 0x49,
+ 0x15, 0xe4, 0x06, 0x6c, 0x48, 0x24, 0xb8, 0xe3,
+ 0x23, 0xed, 0xcf, 0x39, 0x44, 0x4d, 0xf0, 0x4e,
+ 0x89, 0x44, 0x0d, 0x3a, 0xe6, 0x1b, 0x7c, 0x39,
+ 0xfd, 0x79, 0x0e, 0x78, 0xc7, 0xf6, 0xa3, 0x91,
+ 0x18, 0x2a, 0xfb, 0x92, 0x48, 0xcc, 0x8b, 0xbb,
+ 0x33, 0x07, 0x42, 0xf5, 0xd0, 0x01, 0x8b, 0x12,
+ 0xd9, 0x5e, 0x9d, 0xe4, 0x13, 0x99, 0x11, 0x18,
+ 0x86, 0x8a, 0xb7, 0xa6, 0xe2, 0x38, 0x34, 0x12,
+ 0x67, 0xd6, 0x4b, 0xc0, 0x23, 0x56, 0xba, 0x53,
+ 0xbe, 0x20, 0xe5, 0xec, 0x16, 0xf9, 0x74, 0x92,
+ 0x62, 0xfc, 0xb9, 0xe8, 0xa3, 0xbf, 0x3b, 0x06,
+ 0x76, 0xa5, 0xf5, 0x56, 0x81, 0x72, 0x50, 0xc8,
+ 0x55, 0x80, 0x7d, 0xe1, 0x46, 0x92, 0xa1, 0xeb,
+ 0x41, 0xaf, 0xce, 0x52, 0xb1, 0xb3, 0x51, 0xf2,
+ 0xba, 0x03, 0xb4, 0xcb, 0x16, 0xd2, 0x92, 0x3d,
+ 0x0c, 0x9b, 0xe9, 0xd9, 0x5d, 0xcf, 0x79, 0x05,
+ 0xbd, 0xe0, 0x44, 0x39, 0xf0, 0x35, 0x2d, 0x7a,
+ 0x31, 0x3b, 0x24, 0xb3, 0xb4, 0xa5, 0x08, 0xf5,
+ 0xac, 0x51, 0xf1, 0x09, 0x52, 0x14, 0xc7, 0xb5,
+ 0xe0, 0x65, 0x47, 0x30, 0xdd, 0xa4, 0xfd, 0x71,
+ 0x68, 0xa5, 0x4b, 0x00, 0x72, 0xe2, 0xc4, 0xa9,
+ 0x5d, 0x21, 0x6d, 0x83, 0x4e, 0x88, 0xaa, 0x76,
+ 0x07, 0xf0, 0xf7, 0x36, 0xa2, 0x5e, 0xd5, 0x4c,
+ 0x7f, 0x9b, 0x74, 0x89, 0x0a, 0x18, 0xdc, 0x9a,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t bf_cbc_448_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xc3, 0xd3, 0xae, 0x7e, 0x4f, 0xbe, 0x0d, 0x50,
+ 0xd6, 0x63, 0x2c, 0xa2, 0xfd, 0x07, 0xf1, 0x33,
+ 0x2a, 0x15, 0x8f, 0xd7, 0x63, 0xb6, 0x5f, 0x04,
+ 0x69, 0x90, 0xa3, 0x1a, 0xd3, 0xdd, 0xe0, 0x70,
+ 0xb1, 0xcd, 0xd5, 0xe0, 0x75, 0xd2, 0x31, 0x38,
+ 0xcc, 0x65, 0xbb, 0xc3, 0x3b, 0xc6, 0xc9, 0x33,
+ 0x43, 0x9c, 0x32, 0x69, 0x95, 0x10, 0x74, 0x36,
+ 0x3a, 0x05, 0x9c, 0x26, 0x2f, 0x80, 0x20, 0x92,
+ 0x74, 0x31, 0xc0, 0xf4, 0xb1, 0x42, 0x58, 0xc8,
+ 0x3e, 0xaa, 0xd4, 0xba, 0xba, 0x4b, 0x5f, 0x47,
+ 0x1a, 0x9e, 0x43, 0xaf, 0x25, 0x64, 0x0c, 0x2e,
+ 0xa3, 0xf5, 0xde, 0x6e, 0x28, 0x5e, 0xb9, 0x9e,
+ 0xc9, 0xdf, 0x85, 0xda, 0xc9, 0xa8, 0x30, 0xf9,
+ 0x44, 0x9b, 0x16, 0xcb, 0x4b, 0x47, 0x6f, 0x11,
+ 0x5c, 0xd7, 0xc9, 0xb7, 0x9c, 0x50, 0x04, 0x3b,
+ 0x2f, 0x13, 0xab, 0xb6, 0x72, 0xe7, 0x11, 0x29,
+ 0x35, 0xf3, 0xae, 0x5e, 0x2a, 0xa7, 0x1a, 0xac,
+ 0xb7, 0x4c, 0x7b, 0x69, 0x89, 0xfc, 0xff, 0x37,
+ 0x24, 0xf8, 0x65, 0xc0, 0x87, 0x89, 0x69, 0x1e,
+ 0xa6, 0x7e, 0xe7, 0xb3, 0xb7, 0xa8, 0x42, 0x73,
+ 0x83, 0xdb, 0x56, 0x4f, 0xce, 0xb9, 0x6e, 0x38,
+ 0x40, 0x24, 0xb8, 0xdd, 0xab, 0x25, 0x3b, 0xc6,
+ 0x58, 0xed, 0xc7, 0x2b, 0xe0, 0x11, 0x8b, 0x62,
+ 0xe8, 0x4f, 0xcf, 0xba, 0x2e, 0xd7, 0x6d, 0xf0,
+ 0x14, 0xa5, 0xee, 0x24, 0xd3, 0x3a, 0xb4, 0xf2,
+ 0xdc, 0x0d, 0x79, 0xc6, 0x14, 0x52, 0x14, 0x4b,
+ 0xd1, 0x8c, 0x18, 0xef, 0x1f, 0xd8, 0xe7, 0x60,
+ 0xf3, 0x28, 0xce, 0xf1, 0x59, 0xc8, 0x43, 0x02,
+ 0x0e, 0x08, 0x72, 0xe5, 0x7d, 0x5b, 0xc5, 0x80,
+ 0xfb, 0xca, 0x2a, 0x63, 0x8d, 0x3c, 0x54, 0x04,
+ 0x1e, 0xdf, 0x94, 0x53, 0xf8, 0x44, 0xe5, 0xc2,
+ 0x5c, 0x36, 0xc9, 0x75, 0x1c, 0xa2, 0x98, 0x3d,
+ 0xd6, 0xee, 0x38, 0xf9, 0xab, 0x2d, 0x1a, 0xdb,
+ 0x87, 0x2c, 0x86, 0xfd, 0xf9, 0xb2, 0x4d, 0x21,
+ 0xb7, 0xc0, 0x8f, 0x75, 0x21, 0x53, 0xc7, 0xd7,
+ 0x3e, 0xc6, 0x6c, 0x98, 0x2c, 0x6d, 0x44, 0x13,
+ 0x40, 0xea, 0xaa, 0x84, 0xd9, 0x47, 0xfd, 0x65,
+ 0x2c, 0x3d, 0xb0, 0x76, 0xe7, 0xdd, 0xd7, 0x06,
+ 0x8a, 0x79, 0xa7, 0x6c, 0x3a, 0x2d, 0x32, 0xf7,
+ 0xae, 0xe7, 0xd2, 0xb1, 0xf2, 0xe0, 0x3a, 0x10,
+ 0x19, 0xa1, 0x79, 0x7b, 0x76, 0x0b, 0xeb, 0xf3,
+ 0x01, 0x6e, 0x9f, 0xa1, 0x5d, 0x16, 0x09, 0xec,
+ 0x6b, 0x64, 0xe3, 0x96, 0xb8, 0x89, 0x99, 0x8c,
+ 0x77, 0xcf, 0x3f, 0x37, 0x42, 0x51, 0x82, 0x5a,
+ 0x63, 0x89, 0x12, 0x12, 0x59, 0x38, 0xe3, 0xcf,
+ 0xa0, 0xda, 0xbc, 0x69, 0x75, 0x48, 0x7c, 0x3e,
+ 0x56, 0x75, 0x12, 0x10, 0xc5, 0x96, 0x5b, 0x34,
+ 0x52, 0x2e, 0xce, 0xba, 0xd2, 0x7f, 0x8f, 0x1c,
+ 0xbd, 0x35, 0x3b, 0x74, 0x5b, 0x6c, 0xfe, 0xa7,
+ 0xf1, 0x4a, 0x07, 0x95, 0xff, 0xa8, 0xa0, 0x2a,
+ 0x85, 0xec, 0xd7, 0x56, 0x3b, 0x28, 0x2e, 0x09,
+ 0x50, 0x43, 0xbd, 0x49, 0x22, 0xdc, 0x78, 0x0e,
+ 0x7e, 0x68, 0x78, 0xd5, 0x57, 0xc2, 0xd6, 0x7c,
+ 0x2f, 0xd0, 0x4a, 0x62, 0x16, 0x38, 0x04, 0x23,
+ 0x43, 0x21, 0xaa, 0xe1, 0x96, 0x0e, 0xa9, 0x22,
+ 0xe7, 0x2c, 0xb8, 0x5e, 0x8f, 0xc6, 0x2d, 0xbd,
+ 0x99, 0x25, 0x33, 0xb8, 0x47, 0x99, 0x8d, 0xf5,
+ 0x22, 0x08, 0x9b, 0xd5, 0xad, 0x83, 0x67, 0xec,
+ 0x05, 0x89, 0xda, 0xd6, 0xe4, 0xe2, 0xd5, 0xef,
+ 0x7f, 0x61, 0x1e, 0x03, 0x81, 0x03, 0xb1, 0x98,
+ 0x5a, 0x29, 0x69, 0x13, 0xb2, 0xe6, 0xe1, 0x2c,
+ 0x66, 0x88, 0x39, 0x90, 0xf9, 0xae, 0x5d, 0x71,
+ 0xfe, 0x07, 0x30, 0x7d, 0xba, 0xa9, 0x37, 0xb5,
+ 0xff, 0x2c, 0xa9, 0xe6, 0x95, 0x48, 0xb2, 0xc8,
+};
+
+const struct testvec bf_cbc_448_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t bf_cbc_448_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0x91, 0xb4, 0x8f, 0x78, 0x34, 0xbe, 0x03, 0xe9,
+ 0x4b, 0xca, 0xf4, 0xfa, 0x27, 0x99, 0xa0, 0xd0,
+ 0xa0, 0x85, 0xf9, 0xca, 0xcc, 0x2e, 0x0d, 0x41,
+ 0x91, 0xdb, 0xf9, 0x71, 0xcd, 0x49, 0xf7, 0x66,
+ 0x9b, 0x0c, 0x70, 0x49, 0x36, 0x72, 0xf4, 0xc0,
+ 0x17, 0xdd, 0xd8, 0x6a, 0xd2, 0x17, 0xfe, 0x50,
+ 0xa3, 0x2b, 0xa8, 0x7c, 0x9c, 0x12, 0x8c, 0x08,
+ 0x3d, 0xb5, 0x20, 0xc0, 0x83, 0xc1, 0xf5, 0x34,
+ 0x4b, 0xa5, 0xcc, 0x7c, 0xc6, 0x9f, 0x4b, 0x7f,
+ 0x09, 0x0c, 0x04, 0xe3, 0x02, 0xfe, 0xe2, 0x5a,
+ 0x45, 0xee, 0x4a, 0xcb, 0xc0, 0xe1, 0xf1, 0xae,
+ 0x1a, 0x22, 0x95, 0xb9, 0x30, 0xe8, 0x2d, 0x90,
+ 0xe5, 0x6a, 0x2f, 0x0a, 0x59, 0x15, 0xfc, 0x60,
+ 0xa5, 0x91, 0x95, 0x1a, 0xa2, 0xf5, 0x87, 0xa3,
+ 0x97, 0x45, 0x1b, 0xfb, 0x78, 0x62, 0x8b, 0xb6,
+ 0x86, 0xc6, 0x94, 0x9a, 0x9d, 0x09, 0x46, 0xc9,
+ 0x1f, 0x5f, 0x2e, 0x6c, 0xed, 0x5e, 0xe2, 0xab,
+ 0xca, 0x30, 0xdb, 0x13, 0x37, 0x8d, 0xb7, 0xc6,
+ 0xce, 0x74, 0xe3, 0xe2, 0x64, 0x7b, 0x74, 0x3e,
+ 0x9f, 0x18, 0x4e, 0xe2, 0x2b, 0x52, 0x08, 0x60,
+ 0x2b, 0x6d, 0x17, 0x1a, 0xff, 0xae, 0xfb, 0xea,
+ 0x59, 0x1d, 0x45, 0xe8, 0xf9, 0x0c, 0x56, 0xb8,
+ 0xb5, 0xc7, 0x8f, 0xa7, 0x9e, 0x67, 0x87, 0xbb,
+ 0xe2, 0x37, 0x56, 0x49, 0xed, 0x75, 0x27, 0x54,
+ 0xb5, 0x16, 0x34, 0xb6, 0xa6, 0xe0, 0x27, 0x48,
+ 0x91, 0xfb, 0x80, 0x4f, 0x5e, 0xef, 0x40, 0x6d,
+ 0x28, 0x8f, 0x2e, 0x56, 0xab, 0x6c, 0x7d, 0xde,
+ 0xbd, 0xa5, 0xa6, 0x47, 0xe2, 0xc9, 0xb0, 0xc5,
+ 0x69, 0x5d, 0x57, 0x18, 0x59, 0x08, 0x66, 0x1b,
+ 0xdc, 0x4f, 0xa4, 0xe2, 0xb5, 0xff, 0x72, 0x4d,
+ 0x25, 0x79, 0x38, 0x8f, 0xca, 0x23, 0x81, 0x31,
+ 0x1d, 0xeb, 0x7b, 0x7e, 0x04, 0xc3, 0xa6, 0xac,
+ 0x12, 0x92, 0x95, 0x44, 0x08, 0xae, 0x25, 0xb5,
+ 0xc2, 0x39, 0x88, 0x28, 0xc5, 0xc7, 0x3c, 0xfe,
+ 0x95, 0xe1, 0x1a, 0x27, 0xbe, 0xfd, 0x0a, 0xc7,
+ 0xd1, 0x02, 0x1a, 0xae, 0x03, 0xfb, 0xce, 0x79,
+ 0xe6, 0xea, 0x4a, 0xa1, 0x0e, 0x68, 0x61, 0x2f,
+ 0xfa, 0x7a, 0xb8, 0xda, 0xd1, 0x4a, 0xbe, 0x88,
+ 0xd2, 0xa0, 0x6b, 0x90, 0xc3, 0x37, 0x18, 0x77,
+ 0x2e, 0xc8, 0x44, 0x2e, 0x9d, 0xa2, 0x4a, 0xc7,
+ 0x54, 0xb2, 0x38, 0x9b, 0x60, 0x5e, 0x5b, 0xb0,
+ 0x31, 0x4c, 0x10, 0xf0, 0x1d, 0x8c, 0xab, 0x9b,
+ 0x25, 0x86, 0x05, 0xfc, 0xd9, 0x39, 0x11, 0x2b,
+ 0x7e, 0x07, 0xfd, 0x6b, 0xb3, 0x28, 0x57, 0x66,
+ 0x94, 0xc6, 0xfc, 0x48, 0x71, 0xeb, 0x7b, 0x9a,
+ 0x26, 0x8f, 0x9f, 0x97, 0xb6, 0x83, 0x9a, 0xdc,
+ 0x5d, 0x84, 0x96, 0x9d, 0xe3, 0xa5, 0x12, 0x97,
+ 0x8c, 0x87, 0xa6, 0x2a, 0xa8, 0x15, 0x9a, 0xb0,
+ 0x0e, 0x31, 0x55, 0xf7, 0x1b, 0x5c, 0x9c, 0xaf,
+ 0x13, 0x20, 0x13, 0x50, 0xaf, 0xc9, 0xf4, 0xd9,
+ 0x47, 0x16, 0xcc, 0x9d, 0xec, 0xa9, 0x2d, 0xfc,
+ 0x3d, 0x5d, 0x48, 0x89, 0x86, 0x91, 0x6f, 0x1a,
+ 0xa5, 0xf0, 0xb6, 0x9b, 0xa9, 0x08, 0xf2, 0x05,
+ 0xad, 0xe5, 0xe0, 0xd8, 0x2e, 0x09, 0xbe, 0x3a,
+ 0xf2, 0xdc, 0xeb, 0x14, 0xe6, 0x8c, 0x21, 0x20,
+ 0xbb, 0x42, 0x6a, 0xba, 0x55, 0x79, 0x54, 0x8b,
+ 0xa8, 0x43, 0x14, 0x28, 0x66, 0xd2, 0x44, 0x65,
+ 0x9c, 0xa9, 0xdc, 0x3b, 0x3f, 0xab, 0x36, 0xb4,
+ 0xbc, 0x9d, 0x22, 0x92, 0x24, 0xa8, 0x29, 0x18,
+ 0x98, 0x3a, 0xbe, 0xa1, 0xb4, 0xf8, 0x7f, 0xea,
+ 0x2f, 0x58, 0x69, 0xce, 0xee, 0x99, 0x76, 0x2c,
+ 0x53, 0x84, 0xf5, 0x9e, 0xa3, 0x98, 0xe6, 0x94,
+ 0x39, 0xfa, 0xfa, 0x6d, 0x66, 0xe2, 0x39, 0x2b,
+ 0x4b, 0x84, 0x14, 0x89, 0x18, 0xa2, 0x03, 0xdd,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t bf_cbc_448_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x90, 0x3d, 0xee, 0x58, 0xf7, 0xe3, 0xc4, 0x18,
+ 0xaf, 0xfa, 0xaf, 0xed, 0x9a, 0x45, 0xe7, 0xa8,
+ 0xbe, 0xcd, 0x0f, 0xb9, 0x53, 0x18, 0xc6, 0x14,
+ 0xbe, 0xbb, 0x90, 0x1c, 0x5c, 0x60, 0x93, 0xcb,
+ 0x62, 0xb3, 0xdb, 0x31, 0x19, 0x39, 0xce, 0x3f,
+ 0xe4, 0x8f, 0x44, 0xc1, 0x10, 0x80, 0x05, 0x6b,
+ 0x77, 0xe3, 0xe1, 0xe5, 0xd2, 0x6d, 0x93, 0xf2,
+ 0xb3, 0x81, 0x03, 0xf8, 0xbc, 0x7b, 0x5a, 0x71,
+ 0x15, 0x16, 0x3a, 0x2f, 0x03, 0xbb, 0x67, 0x6a,
+ 0xd9, 0xf5, 0x63, 0x6f, 0x3d, 0x75, 0x1b, 0x0a,
+ 0x4b, 0x9d, 0x04, 0x11, 0x7e, 0xe8, 0x3e, 0x2d,
+ 0x04, 0x8f, 0xbf, 0x8a, 0xb2, 0x35, 0x76, 0xc5,
+ 0xcc, 0x6d, 0x9e, 0x99, 0x71, 0x13, 0xf6, 0x5e,
+ 0xeb, 0x74, 0x96, 0x8a, 0x29, 0x38, 0x0b, 0x25,
+ 0x4b, 0x89, 0xa9, 0x43, 0x3c, 0x2f, 0x03, 0x14,
+ 0x8d, 0x0f, 0xe3, 0xe7, 0x01, 0xd1, 0x2e, 0x14,
+ 0x08, 0x51, 0xba, 0x06, 0x39, 0x76, 0x35, 0xbc,
+ 0x14, 0xa6, 0x16, 0x36, 0x47, 0xcc, 0x48, 0xe0,
+ 0xd6, 0xd7, 0x07, 0xb0, 0xf0, 0x30, 0x6c, 0xf8,
+ 0x68, 0x9d, 0x6c, 0x4b, 0x69, 0x33, 0x78, 0x0e,
+ 0x4a, 0xfa, 0x97, 0xfb, 0x0c, 0x0d, 0x0a, 0xc3,
+ 0x4b, 0x7b, 0x77, 0x77, 0x18, 0x9a, 0x74, 0x85,
+ 0x2f, 0xae, 0xc7, 0x90, 0x45, 0x4b, 0xa2, 0x06,
+ 0x3e, 0xa2, 0x48, 0xe7, 0x6c, 0x86, 0x65, 0x78,
+ 0x97, 0x0b, 0x97, 0xc1, 0x70, 0x91, 0x12, 0x79,
+ 0xae, 0xf0, 0x2b, 0x44, 0xe9, 0x84, 0x8d, 0x78,
+ 0x53, 0xf8, 0x3a, 0xf5, 0x9f, 0x27, 0x3d, 0x49,
+ 0x69, 0xd1, 0x18, 0xa4, 0xb2, 0xd0, 0xbb, 0xf2,
+ 0x57, 0x76, 0xb7, 0x77, 0x16, 0x2f, 0xf8, 0x0c,
+ 0xa5, 0x86, 0x43, 0x0d, 0x2d, 0xfe, 0x84, 0xc6,
+ 0xbb, 0x58, 0x81, 0x47, 0x3d, 0xa3, 0x93, 0xb0,
+ 0x50, 0xfc, 0x25, 0xf7, 0xc5, 0x05, 0xe5, 0xf2,
+ 0xb3, 0x79, 0x12, 0xe4, 0x37, 0x71, 0x2d, 0xe8,
+ 0xa5, 0x0b, 0xce, 0x67, 0x51, 0x4f, 0xab, 0xc7,
+ 0x7b, 0x3b, 0xac, 0x78, 0x97, 0x82, 0x02, 0xf4,
+ 0x62, 0x20, 0x1b, 0x8b, 0xac, 0x07, 0x3b, 0xd7,
+ 0x0b, 0x99, 0x27, 0x85, 0x52, 0x7a, 0x79, 0x18,
+ 0xfb, 0x81, 0x3a, 0x05, 0x76, 0x6c, 0x3c, 0x6a,
+ 0x35, 0xe1, 0x2b, 0x03, 0x48, 0x70, 0x1a, 0xa8,
+ 0x30, 0x33, 0x61, 0xe2, 0xd8, 0x99, 0x86, 0x7f,
+ 0xfd, 0xe0, 0x4a, 0xe4, 0x62, 0xa1, 0xac, 0xcb,
+ 0xb8, 0x8a, 0xf3, 0xaa, 0xd6, 0x61, 0x9d, 0xc5,
+ 0xdb, 0xf5, 0x53, 0x39, 0x1d, 0xd7, 0xf8, 0x96,
+ 0xc6, 0x2b, 0xca, 0xbf, 0x83, 0x4e, 0x89, 0x63,
+ 0x53, 0x6f, 0x17, 0xaa, 0xf3, 0x61, 0x9b, 0x75,
+ 0x8c, 0x5a, 0xf8, 0x21, 0x84, 0x52, 0xb8, 0x76,
+ 0xbc, 0xf5, 0x9b, 0xd6, 0x98, 0x26, 0x58, 0xec,
+ 0xdd, 0xa8, 0xf1, 0xee, 0x9e, 0x14, 0x24, 0x94,
+ 0x7c, 0xb6, 0x45, 0x8b, 0xc7, 0x85, 0x50, 0x4e,
+ 0x30, 0xd7, 0x51, 0x8c, 0x33, 0xeb, 0xeb, 0x5d,
+ 0x52, 0x58, 0x43, 0xcb, 0x25, 0x4a, 0x77, 0x34,
+ 0xe6, 0x70, 0x5b, 0x6f, 0x8f, 0xe8, 0x07, 0xee,
+ 0x76, 0x4a, 0xad, 0xab, 0x11, 0x8a, 0x1b, 0x92,
+ 0x60, 0x79, 0xb8, 0xe0, 0x88, 0xa7, 0x3a, 0xe0,
+ 0x15, 0xf6, 0x57, 0xf0, 0xe8, 0x87, 0xda, 0xf8,
+ 0x90, 0x4e, 0xe7, 0xb3, 0xb4, 0xe7, 0x73, 0x5c,
+ 0xd3, 0x69, 0xfb, 0x23, 0x4f, 0x4f, 0xc8, 0xd2,
+ 0xfb, 0xf5, 0xf5, 0x76, 0x80, 0xb6, 0xb7, 0xe2,
+ 0xb7, 0x96, 0x1a, 0x97, 0x12, 0x40, 0x16, 0x86,
+ 0xd6, 0x66, 0xf5, 0x46, 0x9e, 0x04, 0x62, 0xaa,
+ 0x9c, 0xc9, 0x45, 0x39, 0x5c, 0xd3, 0x58, 0x40,
+ 0xb4, 0x32, 0xd8, 0x6c, 0x19, 0xfa, 0xa5, 0x5f,
+ 0x1e, 0x83, 0x5a, 0x32, 0x5e, 0x1d, 0xab, 0xa9,
+ 0x48, 0x1b, 0x1b, 0x37, 0x66, 0xf8, 0x67, 0xd7,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t bf_cbc_448_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0xb3, 0x2d, 0x0d, 0x90, 0x7a, 0x50, 0xb6, 0x29,
+ 0x9d, 0xd4, 0x12, 0x1a, 0xc9, 0x71, 0x56, 0xc4,
+ 0xce, 0x3d, 0x74, 0xf9, 0x91, 0xe4, 0x79, 0x8a,
+ 0x42, 0x34, 0x1a, 0xd4, 0x84, 0xaa, 0x01, 0x85,
+ 0x13, 0xe8, 0xab, 0xaa, 0xb6, 0x81, 0x82, 0xd6,
+ 0x32, 0xd6, 0x9f, 0x63, 0x69, 0x55, 0x10, 0x5f,
+ 0x2e, 0xb3, 0x51, 0x74, 0x80, 0x5c, 0xe9, 0x8d,
+ 0x27, 0xd8, 0x41, 0x2d, 0x27, 0x07, 0xb4, 0x13,
+ 0xcd, 0xc0, 0xb3, 0x96, 0xaa, 0x59, 0x9c, 0x3e,
+ 0x16, 0x9e, 0x18, 0xa5, 0x92, 0x52, 0x59, 0x19,
+ 0x19, 0x62, 0xeb, 0xd9, 0xdf, 0x9d, 0x10, 0x77,
+ 0xfb, 0x3c, 0xf1, 0xeb, 0x70, 0xf6, 0x6a, 0x9b,
+ 0xad, 0x99, 0x35, 0xd7, 0xf8, 0xde, 0x2b, 0x52,
+ 0x85, 0xdd, 0x36, 0x07, 0x3a, 0x88, 0xa6, 0xbb,
+ 0x98, 0x7a, 0xe3, 0xb0, 0xe6, 0xae, 0x33, 0x5d,
+ 0x47, 0x0c, 0x6c, 0xd4, 0x84, 0x33, 0x7e, 0xf4,
+ 0xea, 0xfd, 0xf1, 0x1c, 0xdb, 0x8b, 0xfe, 0x01,
+ 0x77, 0xa3, 0x07, 0x21, 0x09, 0xac, 0x0c, 0xe4,
+ 0x63, 0xaa, 0x3d, 0xb3, 0x05, 0xf8, 0x73, 0x03,
+ 0x69, 0x53, 0x2f, 0xd3, 0x53, 0x29, 0xf2, 0x02,
+ 0x60, 0x41, 0xed, 0xc7, 0xe9, 0x2e, 0xba, 0x54,
+ 0xa4, 0xfe, 0x26, 0xf0, 0xd9, 0x2c, 0x58, 0x2d,
+ 0x90, 0x94, 0x19, 0xf9, 0xe5, 0xaa, 0xe2, 0x13,
+ 0x9a, 0x67, 0x90, 0x44, 0x61, 0x36, 0xd0, 0x3f,
+ 0xe7, 0xe8, 0x7e, 0x47, 0x2b, 0x84, 0x97, 0xe2,
+ 0x0b, 0x8a, 0xfa, 0x2f, 0xbc, 0x1a, 0x70, 0xed,
+ 0xb2, 0x93, 0x36, 0x0e, 0xe6, 0xb1, 0xa2, 0x5a,
+ 0x04, 0x04, 0x8d, 0x2f, 0x82, 0xdb, 0x49, 0x5e,
+ 0x1b, 0x90, 0xc1, 0x27, 0x2a, 0x2f, 0x64, 0x5b,
+ 0xce, 0x35, 0x06, 0x0d, 0xb6, 0x05, 0x50, 0x5a,
+ 0x90, 0xc8, 0x21, 0xd0, 0xf0, 0xb9, 0xf3, 0x43,
+ 0x25, 0xd8, 0xb9, 0x86, 0xb7, 0xd0, 0x29, 0x75,
+ 0xdc, 0xf6, 0xf6, 0x14, 0x5e, 0x1f, 0xad, 0x54,
+ 0x28, 0x63, 0x92, 0xcd, 0xcd, 0x75, 0xb2, 0xe8,
+ 0xf3, 0x1f, 0xfd, 0x88, 0x72, 0x04, 0xab, 0xe2,
+ 0x77, 0x21, 0xc1, 0xb4, 0x87, 0xa7, 0x98, 0x86,
+ 0x2d, 0x7f, 0x01, 0x24, 0xed, 0x3a, 0x23, 0x83,
+ 0xb7, 0xa4, 0xb7, 0x08, 0x4e, 0xee, 0x10, 0x77,
+ 0x29, 0x22, 0xab, 0xea, 0x4a, 0x68, 0x1f, 0x7f,
+ 0xd6, 0xe6, 0x90, 0x11, 0xbc, 0x23, 0x2e, 0x47,
+ 0x78, 0xea, 0x1d, 0x33, 0x7c, 0x02, 0x09, 0x55,
+ 0x7a, 0xbc, 0xa7, 0x3d, 0x9a, 0xd0, 0x4d, 0x40,
+ 0x6c, 0xc2, 0x99, 0xc2, 0xe9, 0x0e, 0xcf, 0x06,
+ 0x82, 0x61, 0x5c, 0x76, 0xca, 0xef, 0x8f, 0xd3,
+ 0x78, 0x2a, 0xae, 0x39, 0x29, 0x4e, 0xc1, 0x2c,
+ 0xb1, 0xbc, 0xcd, 0x76, 0x4f, 0x25, 0xf0, 0x5b,
+ 0x78, 0x3a, 0xa4, 0x39, 0x52, 0x5a, 0xc7, 0xcf,
+ 0x17, 0x3d, 0xb0, 0x39, 0x63, 0xf9, 0xf9, 0xfb,
+ 0x6f, 0x35, 0xb7, 0xf1, 0x49, 0x10, 0xd8, 0x12,
+ 0x8d, 0xa2, 0xdf, 0xc5, 0x26, 0x37, 0xd1, 0xb8,
+ 0xef, 0xdc, 0x04, 0x1b, 0x0d, 0x60, 0xbf, 0xbc,
+ 0xc0, 0xff, 0x56, 0x8b, 0xd3, 0x6e, 0x71, 0xfc,
+ 0x87, 0x00, 0x86, 0x10, 0x78, 0x3b, 0xce, 0x8b,
+ 0xe8, 0x5f, 0x8c, 0xce, 0x03, 0xa2, 0x89, 0x8c,
+ 0x16, 0x00, 0x0e, 0xd8, 0x53, 0xaf, 0x7f, 0x77,
+ 0x78, 0x40, 0x5e, 0x5e, 0xd1, 0x7d, 0xf8, 0x41,
+ 0xa8, 0x1e, 0xa5, 0xe5, 0xe9, 0xd6, 0x17, 0x2c,
+ 0x2f, 0x1b, 0xff, 0xef, 0xf5, 0x53, 0x31, 0xf3,
+ 0x5b, 0xe4, 0x84, 0x7c, 0xe2, 0x45, 0x3c, 0x82,
+ 0x5b, 0xf6, 0x03, 0x35, 0xdd, 0x03, 0x22, 0xbe,
+ 0x77, 0x9c, 0x6a, 0x7d, 0xc8, 0x29, 0x41, 0x53,
+ 0xbb, 0xab, 0x6e, 0xa5, 0x00, 0xaf, 0x3b, 0x1d,
+ 0x76, 0x12, 0xac, 0x44, 0x5c, 0x7d, 0xd2, 0x3b,
+ 0x3a, 0x95, 0xb0, 0xa9, 0x4f, 0x27, 0x76, 0x17,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t bf_cbc_448_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0x8e, 0xc4, 0x56, 0x64, 0x1e, 0x2a, 0x0d, 0x60,
+ 0x54, 0x5c, 0xcd, 0xe0, 0x6d, 0xa7, 0x4c, 0x30,
+ 0x7e, 0x85, 0x21, 0xdf, 0xaa, 0xb2, 0x32, 0xde,
+ 0xc0, 0xc6, 0x56, 0xe0, 0x43, 0xc2, 0x3e, 0x6c,
+ 0x8c, 0x62, 0x35, 0xaa, 0xf9, 0xba, 0xc9, 0x52,
+ 0x38, 0x72, 0x06, 0xcc, 0x02, 0xa2, 0xb8, 0x85,
+ 0xf7, 0xcc, 0xe6, 0x8c, 0x86, 0x8f, 0x9c, 0xd6,
+ 0x1f, 0xf8, 0x24, 0x9d, 0xca, 0xe8, 0xed, 0x3c,
+ 0x80, 0x0b, 0xaf, 0x0c, 0x78, 0x4f, 0x5b, 0x2a,
+ 0x0f, 0xfe, 0xe5, 0xe6, 0x12, 0x8a, 0xff, 0xc7,
+ 0x6a, 0x97, 0xd9, 0xcb, 0xc8, 0x6a, 0x83, 0x12,
+ 0xa1, 0x12, 0x84, 0xc8, 0x72, 0x1c, 0xb7, 0x68,
+ 0x23, 0x24, 0xff, 0x5a, 0x78, 0x99, 0x9d, 0xb8,
+ 0x03, 0x70, 0x0a, 0x09, 0xa1, 0x3d, 0xfe, 0xe0,
+ 0xc5, 0x1b, 0xea, 0x58, 0xbc, 0x52, 0x70, 0xa2,
+ 0x4e, 0xcc, 0x43, 0xfb, 0xb7, 0xc4, 0xbd, 0xb6,
+ 0xa9, 0x1e, 0xff, 0xf6, 0x69, 0xaa, 0xab, 0xa4,
+ 0xd7, 0x07, 0x0d, 0xda, 0x41, 0x4b, 0xe3, 0xa5,
+ 0xef, 0x94, 0x9f, 0xb4, 0xd8, 0xd1, 0x41, 0xd0,
+ 0x9e, 0xa0, 0x0a, 0x70, 0xdb, 0xb8, 0x5e, 0x27,
+ 0xc6, 0x08, 0x38, 0x6a, 0x31, 0xe3, 0xa0, 0xd6,
+ 0x90, 0xad, 0x19, 0x0c, 0x7e, 0x1d, 0x21, 0xc8,
+ 0x66, 0x30, 0x73, 0x8e, 0x06, 0x97, 0xec, 0xc6,
+ 0xfe, 0x5c, 0xc6, 0xc0, 0xd1, 0x5c, 0x5f, 0xf8,
+ 0x01, 0xb3, 0xac, 0x18, 0x66, 0x1e, 0x04, 0xaf,
+ 0xa7, 0xd3, 0x6d, 0x10, 0x74, 0xa1, 0x9a, 0x36,
+ 0x10, 0xa0, 0xd6, 0x28, 0x61, 0x93, 0x98, 0x14,
+ 0x67, 0x6f, 0x7d, 0x52, 0x86, 0x48, 0x17, 0x99,
+ 0x53, 0xa3, 0xee, 0xe5, 0x93, 0xf6, 0x80, 0xe1,
+ 0x52, 0xf0, 0x39, 0x48, 0x5c, 0x20, 0x05, 0xd9,
+ 0xae, 0xa2, 0xe3, 0x25, 0x4e, 0x60, 0x84, 0xf8,
+ 0xad, 0xd6, 0xf6, 0x95, 0x8e, 0x95, 0xd0, 0x49,
+ 0x1c, 0x65, 0xd0, 0xc8, 0xa5, 0x26, 0xc0, 0xdf,
+ 0x32, 0xbe, 0xbc, 0xb7, 0x6d, 0xe5, 0x5e, 0x6d,
+ 0x38, 0x7d, 0x03, 0xd5, 0x94, 0x7a, 0x14, 0x2b,
+ 0x02, 0xe0, 0x09, 0x00, 0x50, 0xf1, 0x52, 0x69,
+ 0x06, 0x33, 0x4b, 0x5b, 0xa2, 0xbc, 0x2e, 0xa9,
+ 0x1a, 0xb7, 0xca, 0xa8, 0xb4, 0xa2, 0x5b, 0xcd,
+ 0x35, 0xe4, 0x03, 0xdd, 0x8f, 0x66, 0x3a, 0x34,
+ 0xc6, 0x2a, 0xd6, 0x90, 0xa2, 0xef, 0xe2, 0xfa,
+ 0x7c, 0xc1, 0x6c, 0x21, 0xd0, 0xfd, 0x96, 0x92,
+ 0xb5, 0x99, 0xe4, 0xb7, 0x66, 0xd4, 0xf2, 0x50,
+ 0x22, 0xef, 0x66, 0x1e, 0x5f, 0x62, 0xd1, 0x77,
+ 0x87, 0x52, 0xed, 0x40, 0x69, 0xfd, 0xab, 0x66,
+ 0xe4, 0x0e, 0x2b, 0xa8, 0x67, 0x4c, 0x6d, 0xce,
+ 0xb0, 0x61, 0x8e, 0x6c, 0xc5, 0x34, 0xab, 0x03,
+ 0x3e, 0x8a, 0xe5, 0x2b, 0xa2, 0xa4, 0x04, 0xa2,
+ 0x01, 0x81, 0x79, 0x72, 0xfc, 0x19, 0xbd, 0x38,
+ 0x39, 0xee, 0xb3, 0x95, 0xc5, 0x6f, 0xed, 0xaa,
+ 0x6e, 0xca, 0xeb, 0xc6, 0xaf, 0xeb, 0x76, 0xb4,
+ 0xd7, 0xc3, 0x1b, 0x65, 0x99, 0xc6, 0xa3, 0xe8,
+ 0x96, 0x5e, 0xc1, 0x0c, 0xd2, 0xf8, 0x65, 0xcf,
+ 0x42, 0xc5, 0x8f, 0x52, 0x5d, 0x90, 0x21, 0x55,
+ 0xec, 0x9d, 0x93, 0x81, 0xb7, 0x9a, 0xa4, 0x35,
+ 0xe7, 0xef, 0xef, 0x2d, 0x4c, 0x02, 0xf7, 0x2b,
+ 0x26, 0xe0, 0x9e, 0x3a, 0x31, 0xfd, 0x94, 0xb3,
+ 0xa7, 0x8a, 0x93, 0xf3, 0xe1, 0x77, 0x79, 0xdf,
+ 0xcf, 0x1f, 0x99, 0x55, 0x20, 0xc3, 0x7d, 0x8a,
+ 0xbc, 0xff, 0x63, 0x64, 0x87, 0xa9, 0x42, 0x63,
+ 0xc9, 0x67, 0x7e, 0x51, 0x99, 0x9c, 0xcb, 0x47,
+ 0xa9, 0xc8, 0x5e, 0x83, 0x87, 0x55, 0x7c, 0x45,
+ 0x3a, 0xb4, 0xfe, 0x97, 0x24, 0x17, 0x1d, 0x5e,
+ 0xdf, 0xe0, 0xe8, 0x17, 0xa6, 0x31, 0x99, 0xeb,
+ 0xb7, 0xb5, 0xd5, 0xd7, 0x7c, 0x2f, 0x22, 0x26,
+};
+
+const struct testvec bf_cbc_448_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno8_vec3_ctxt,
+ },
+};
+
+static int
+open_disk(const char *devpath, const char *imgpath, size_t size)
+{
+ int fd;
+
+ fd = open(imgpath, O_CREAT | O_RDWR | O_TRUNC, 0600);
+ if (fd < 0)
+ return -1;
+
+ if (ftruncate(fd, size) < 0)
+ goto fail;
+
+ if (rump_pub_etfs_register_withsize(devpath,
+ imgpath, RUMP_ETFS_BLK, 0, size) < 0) {
+ goto fail;
+ }
+
+ unlink(imgpath);
+ return fd;
+fail:
+ close(fd);
+ unlink(imgpath);
+ return -1;
+}
+
+static int
+open_cgd(int devno)
+{
+ char devpath[32];
+
+ sprintf(devpath, "/dev/rcgd%d%c", devno, getrawpartition() + 'a');
+
+ return rump_sys_open(devpath, O_RDWR, 0);
+}
+
+static int
+configure_cgd(int fd, const char *dkpath, const char *alg,
+ const char *ivmethod, const char *key, size_t keylen)
+{
+ struct cgd_ioctl ci;
+
+ memset(&ci, 0, sizeof(ci));
+ ci.ci_disk = dkpath;
+ ci.ci_alg = alg;
+ ci.ci_ivmethod = ivmethod;
+ ci.ci_keylen = 8 * keylen - 8; /* Exclude the NUL terminator. */
+ ci.ci_key = key;
+ ci.ci_blocksize = 64;
+
+ return rump_sys_ioctl(fd, CGDIOCSET, &ci);
+}
+
+static int
+unconfigure_cgd(int fd)
+{
+ struct cgd_ioctl ci;
+
+ return rump_sys_ioctl(fd, CGDIOCCLR, &ci);
+}
+
+static int
+write_testvec(int cgdfd, const struct testvec *tv)
+{
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ return -1;
+
+ if (rump_sys_write(cgdfd, tv->ptxt, SECSIZE) != SECSIZE)
+ return -1;
+
+ return 0;
+}
+
+static int
+read_testvec(int cgdfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (rump_sys_read(cgdfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ptxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+static int
+check_testvec(int dkfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (lseek(dkfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (read(dkfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ctxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+ATF_TC(cgd_bf_cbc_128_encblkno1);
+ATF_TC_HEAD(cgd_bf_cbc_128_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 128 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_128_encblkno1, tc)
+{
+ const char imgpath[] = "blowfish-cbc-128-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_128_key, sizeof(bf_cbc_128_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_128_key, sizeof(bf_cbc_128_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_128_encblkno8);
+ATF_TC_HEAD(cgd_bf_cbc_128_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 128 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_128_encblkno8, tc)
+{
+ const char imgpath[] = "blowfish-cbc-128-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_128_key, sizeof(bf_cbc_128_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_128_key, sizeof(bf_cbc_128_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_256_encblkno1);
+ATF_TC_HEAD(cgd_bf_cbc_256_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 256 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_256_encblkno1, tc)
+{
+ const char imgpath[] = "blowfish-cbc-256-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_256_key, sizeof(bf_cbc_256_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_256_key, sizeof(bf_cbc_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_256_encblkno8);
+ATF_TC_HEAD(cgd_bf_cbc_256_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 256 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_256_encblkno8, tc)
+{
+ const char imgpath[] = "blowfish-cbc-256-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_256_key, sizeof(bf_cbc_256_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_256_key, sizeof(bf_cbc_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_448_encblkno1);
+ATF_TC_HEAD(cgd_bf_cbc_448_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 448 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_448_encblkno1, tc)
+{
+ const char imgpath[] = "blowfish-cbc-448-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_448_key, sizeof(bf_cbc_448_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_1_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_1_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_1_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_448_key, sizeof(bf_cbc_448_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_448_encblkno8);
+ATF_TC_HEAD(cgd_bf_cbc_448_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 448 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_448_encblkno8, tc)
+{
+ const char imgpath[] = "blowfish-cbc-448-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_448_key, sizeof(bf_cbc_448_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_8_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_8_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_8_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_448_key, sizeof(bf_cbc_448_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_128_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_128_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_256_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_256_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_448_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_448_encblkno8);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/dev/dm/h_dm.c b/contrib/netbsd-tests/dev/dm/h_dm.c
index 3380ad3..d4ccb3a 100644
--- a/contrib/netbsd-tests/dev/dm/h_dm.c
+++ b/contrib/netbsd-tests/dev/dm/h_dm.c
@@ -1,4 +1,4 @@
-/* $NetBSD: h_dm.c,v 1.1 2010/10/06 11:24:55 haad Exp $ */
+/* $NetBSD: h_dm.c,v 1.2 2016/01/23 21:18:27 christos Exp $ */
/*
* Copyright (c) 2010 Antti Kantee. All Rights Reserved.
@@ -83,6 +83,7 @@ dm_test_versions(void) {
dict_out = prop_dictionary_internalize(prefp.pref_plist);
xml = prop_dictionary_externalize(dict_out);
+ __USE(xml);
rump_sys_close(fd);
@@ -122,6 +123,7 @@ dm_test_targets(void) {
dict_out = prop_dictionary_internalize(prefp.pref_plist);
xml = prop_dictionary_externalize(dict_out);
+ __USE(xml);
rump_sys_close(fd);
diff --git a/contrib/netbsd-tests/dev/fss/t_fss.sh b/contrib/netbsd-tests/dev/fss/t_fss.sh
new file mode 100755
index 0000000..cb3341f
--- /dev/null
+++ b/contrib/netbsd-tests/dev/fss/t_fss.sh
@@ -0,0 +1,84 @@
+# $NetBSD: t_fss.sh,v 1.2 2016/07/29 20:27:37 pgoyette Exp $
+#
+# Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+#
+# Verify basic operation of fss(4) file system snapshot device
+#
+
+orig_data="Original data"
+repl_data="Replacement data"
+
+atf_test_case basic cleanup
+basic_body() {
+
+# create of mount-points for the file system and snapshot
+
+ mkdir ./m1
+ mkdir ./m2
+
+# create a small 4MB file, treat it as a disk, init a file-system on it,
+# and mount it
+
+ dd if=/dev/zero of=./image bs=32k count=64
+ vndconfig -c vnd0 ./image
+ newfs /dev/vnd0a
+ mount /dev/vnd0a ./m1
+
+ echo "${orig_data}" > ./m1/text
+
+# configure and mount a snapshot of the file system
+
+ fssconfig -c fss0 ./m1 ./backup
+ mount -o rdonly /dev/fss0 ./m2
+
+# Modify the data on the underlying file system
+
+ echo "${repl_data}" > ./m1/text || abort
+
+# Verify that original data is still visible in the snapshot
+
+ read test_data < ./m2/text
+ atf_check_equal "${orig_data}" "${test_data}"
+
+# Unmount our temporary stuff
+
+ umount /dev/fss0 || true
+ fssconfig -u fss0 || true
+ umount /dev/vnd0a || true
+ vndconfig -u vnd0 || true
+}
+
+basic_cleanup() {
+ umount /dev/vnd0a || true
+ fssconfig -u fss0 || true
+ umount /dev/fss0 || true
+ vndconfig -u vnd0 || true
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case basic
+}
diff --git a/contrib/netbsd-tests/dev/sysmon/t_swsensor.sh b/contrib/netbsd-tests/dev/sysmon/t_swsensor.sh
index 5b54431..7f98c1a 100755
--- a/contrib/netbsd-tests/dev/sysmon/t_swsensor.sh
+++ b/contrib/netbsd-tests/dev/sysmon/t_swsensor.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_swsensor.sh,v 1.7 2013/04/14 16:07:46 martin Exp $
+# $NetBSD: t_swsensor.sh,v 1.9 2015/04/23 23:23:28 pgoyette Exp $
get_sensor_info() {
rump.envstat -x | \
@@ -6,7 +6,13 @@ get_sensor_info() {
}
get_sensor_key() {
- get_sensor_info | grep -A1 $1 | grep integer | sed -e 's;<[/a-z]*>;;g'
+ local v
+ v=$(get_sensor_info | grep -A1 $1 | grep integer | \
+ sed -e 's;<[/a-z]*>;;g')
+ if [ -z "$v" ] ; then
+ v="key_$1_not_found"
+ fi
+ echo $v
}
get_powerd_event_count() {
@@ -60,7 +66,7 @@ start_rump() {
common_head() {
atf_set descr "$1"
- atf_set timeout 60
+ atf_set timeout 120
atf_set require.progs rump.powerd rump.envstat rump.modload \
rump.halt rump.sysctl rump_server \
sed grep awk \
diff --git a/contrib/netbsd-tests/dev/sysmon/t_swwdog.c b/contrib/netbsd-tests/dev/sysmon/t_swwdog.c
index 19e3795..1635884 100644
--- a/contrib/netbsd-tests/dev/sysmon/t_swwdog.c
+++ b/contrib/netbsd-tests/dev/sysmon/t_swwdog.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_swwdog.c,v 1.5 2011/06/26 12:14:59 christos Exp $ */
+/* $NetBSD: t_swwdog.c,v 1.6 2015/04/23 04:49:37 pgoyette Exp $ */
/*
* Copyright (c) 2010 Antti Kantee. All Rights Reserved.
@@ -121,6 +121,7 @@ testbody(int max)
_exit(2);
}
/* fail */
+ printf("no watchdog registered!\n");
_exit(1);
}
diff --git a/contrib/netbsd-tests/dev/usb/t_hid.c b/contrib/netbsd-tests/dev/usb/t_hid.c
new file mode 100644
index 0000000..31c289b
--- /dev/null
+++ b/contrib/netbsd-tests/dev/usb/t_hid.c
@@ -0,0 +1,267 @@
+/* $NetBSD: t_hid.c,v 1.8 2016/05/05 17:40:26 jakllsch Exp $ */
+
+/*
+ * Copyright (c) 2016 Jonathan A. Kollasch
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_hid.c,v 1.8 2016/05/05 17:40:26 jakllsch Exp $");
+
+#include <machine/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <atf-c.h>
+
+#include <rump/rump.h>
+
+#define hid_start_parse rumpns_hid_start_parse
+#define hid_end_parse rumpns_hid_end_parse
+#define hid_get_item rumpns_hid_get_item
+#define hid_locate rumpns_hid_locate
+#define hid_report_size rumpns_hid_report_size
+#define hid_get_data rumpns_hid_get_data
+#define hid_get_udata rumpns_hid_get_udata
+#define uhidevdebug rumpns_uhidevdebug
+#include <usb.h>
+#include <usbhid.h>
+#include <hid.h>
+
+#include "../../lib/libusbhid/hid_test_data.c"
+
+#define MYd_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %d", (d))
+
+#define MYld_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %ld", (d))
+
+#define MYu_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %u", (d))
+
+#define MYlu_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %lu", (d))
+
+#define MYx_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== 0x%x", (d))
+
+#define MYlx_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== 0x%lx", (d))
+
+int uhidevdebug;
+
+ATF_TC(khid);
+
+ATF_TC_HEAD(khid, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "check kernel hid.c");
+}
+
+static int
+locate_item(const void *desc, int size, u_int32_t u, u_int8_t id,
+ enum hid_kind k, struct hid_item *hip)
+{
+ struct hid_data *d;
+ struct hid_item h;
+
+ h.report_ID = 0;
+ for (d = hid_start_parse(desc, size, k); hid_get_item(d, &h); ) {
+ if (h.kind == k && !(h.flags & HIO_CONST) &&
+ (/*XXX*/uint32_t)h.usage == u && h.report_ID == id) {
+ if (hip != NULL)
+ *hip = h;
+ hid_end_parse(d);
+ return (1);
+ }
+ }
+ hid_end_parse(d);
+ return (0);
+}
+
+ATF_TC_BODY(khid, tc)
+{
+ int ret;
+ struct hid_item hi;
+
+ uhidevdebug = 0;
+
+ rump_init();
+
+ rump_schedule();
+
+ ret = locate_item(range_test_report_descriptor,
+ sizeof(range_test_report_descriptor), 0xff000003, 0, hid_input,
+ &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 32);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 0);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -2147483648);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 2147483647);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -2147483648);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 2147483647);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report,
+ &hi.loc), -2147483648);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report,
+ &hi.loc), -1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report,
+ &hi.loc), 1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report,
+ &hi.loc), 2147483647);
+
+ ret = locate_item(range_test_report_descriptor,
+ sizeof(range_test_report_descriptor), 0xff000002, 0, hid_input,
+ &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 16);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 32);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -32768);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 32767);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -32768);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 32767);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report,
+ &hi.loc), -32768);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report,
+ &hi.loc), -1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report,
+ &hi.loc), 1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report,
+ &hi.loc), 32767);
+
+ ret = locate_item(range_test_report_descriptor,
+ sizeof(range_test_report_descriptor), 0xff000001, 0, hid_input,
+ &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 8);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 48);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -128);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 127);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -128);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 127);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report,
+ &hi.loc), -128);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report,
+ &hi.loc), -1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report,
+ &hi.loc), 1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report,
+ &hi.loc), 127);
+
+
+ ret = locate_item(unsigned_range_test_report_descriptor,
+ sizeof(unsigned_range_test_report_descriptor), 0xff000013, 0,
+ hid_input, &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 32);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 0);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report,
+ &hi.loc), 0x0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report,
+ &hi.loc), 0x1);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report,
+ &hi.loc), 0xfffffffe);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report,
+ &hi.loc), 0xffffffff);
+
+ ret = locate_item(unsigned_range_test_report_descriptor,
+ sizeof(unsigned_range_test_report_descriptor), 0xff000012, 0,
+ hid_input, &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 16);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 32);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report,
+ &hi.loc), 0x0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report,
+ &hi.loc), 0x1);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report,
+ &hi.loc), 0xfffe);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report,
+ &hi.loc), 0xffff);
+
+ ret = locate_item(unsigned_range_test_report_descriptor,
+ sizeof(unsigned_range_test_report_descriptor), 0xff000011, 0,
+ hid_input, &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 8);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 48);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report,
+ &hi.loc), 0x0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report,
+ &hi.loc), 0x1);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report,
+ &hi.loc), 0xfe);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report,
+ &hi.loc), 0xff);
+
+ rump_unschedule();
+}
+
+ATF_TC(khid_parse_just_pop);
+
+ATF_TC_HEAD(khid_parse_just_pop, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "check kernel hid.c for "
+ "Pop on empty stack bug");
+}
+
+ATF_TC_BODY(khid_parse_just_pop, tc)
+{
+ struct hid_data *hdp;
+ struct hid_item hi;
+
+ rump_init();
+
+ rump_schedule();
+
+ hdp = hid_start_parse(just_pop_report_descriptor,
+ sizeof just_pop_report_descriptor, hid_none);
+ while (hid_get_item(hdp, &hi) > 0) {
+ }
+ hid_end_parse(hdp);
+
+ rump_unschedule();
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, khid);
+ ATF_TP_ADD_TC(tp, khid_parse_just_pop);
+
+ return atf_no_error();
+}
+
diff --git a/contrib/netbsd-tests/fs/common/fstest_lfs.c b/contrib/netbsd-tests/fs/common/fstest_lfs.c
index fd131cf..597ca23 100644
--- a/contrib/netbsd-tests/fs/common/fstest_lfs.c
+++ b/contrib/netbsd-tests/fs/common/fstest_lfs.c
@@ -1,4 +1,4 @@
-/* $NetBSD: fstest_lfs.c,v 1.4 2010/07/30 16:15:05 pooka Exp $ */
+/* $NetBSD: fstest_lfs.c,v 1.5 2015/08/30 18:27:26 dholland Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -48,8 +48,6 @@
#include "h_fsmacros.h"
#include "mount_lfs.h"
-sem_t lfs_clearnerloop;
-
struct lfstestargs {
struct ufs_args ta_uargs;
pthread_t ta_cleanerthread;
diff --git a/contrib/netbsd-tests/fs/common/h_fsmacros.h b/contrib/netbsd-tests/fs/common/h_fsmacros.h
index b47a708..b295cf2 100644
--- a/contrib/netbsd-tests/fs/common/h_fsmacros.h
+++ b/contrib/netbsd-tests/fs/common/h_fsmacros.h
@@ -1,4 +1,4 @@
-/* $NetBSD: h_fsmacros.h,v 1.38 2013/06/26 19:29:24 reinoud Exp $ */
+/* $NetBSD: h_fsmacros.h,v 1.40 2015/08/29 19:19:43 dholland Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -110,10 +110,6 @@ do { \
atf_tc_set_md_var(tc, "descr", type " test for " desc); \
atf_tc_set_md_var(tc, "X-fs.type", #fs); \
atf_tc_set_md_var(tc, "X-fs.mntname", type); \
- if (strcmp(#fs, "zfs") == 0) { \
- /* This should not be necessary. */ \
- atf_tc_set_md_var(tc, "require.user", "root"); \
- } \
} \
void *fs##func##tmp; \
\
@@ -136,10 +132,6 @@ do { \
atf_tc_set_md_var(tc, "descr",_type_" test for "_desc_);\
atf_tc_set_md_var(tc, "X-fs.type", #_fs_); \
atf_tc_set_md_var(tc, "X-fs.mntname", _type_); \
- if (strcmp(#_fs_, "zfs") == 0) { \
- /* This should not be necessary. */ \
- atf_tc_set_md_var(tc, "require.user", "root"); \
- } \
} \
void *_fs_##_func_##tmp; \
\
@@ -153,7 +145,7 @@ do { \
atf_tc_fail_errno("unmount r/w failed"); \
if (_fs_##_fstest_mount(tc, _fs_##_func_##tmp, \
FSTEST_MNTNAME, MNT_RDONLY) != 0) \
- atf_tc_fail_errno("mount ro failed"); \
+ atf_tc_fail_errno("mount ro failed"); \
_func_(tc,FSTEST_MNTNAME); \
if (_fs_##_fstest_unmount(tc, FSTEST_MNTNAME, 0) != 0) {\
rump_pub_vfs_mount_print(FSTEST_MNTNAME, 1); \
diff --git a/contrib/netbsd-tests/fs/ffs/ffs_common.sh b/contrib/netbsd-tests/fs/ffs/ffs_common.sh
index eaf7142..ee94a15 100755
--- a/contrib/netbsd-tests/fs/ffs/ffs_common.sh
+++ b/contrib/netbsd-tests/fs/ffs/ffs_common.sh
@@ -1,4 +1,4 @@
-# $NetBSD: ffs_common.sh,v 1.2 2013/07/29 13:15:24 skrll Exp $
+# $NetBSD: ffs_common.sh,v 1.3 2016/10/08 13:23:53 gson Exp $
create_ffs()
{
@@ -45,7 +45,7 @@ test_case()
eval "${name}_head() { \
atf_set "descr" "${descr}"
- atf_set "timeout" "60"
+ atf_set "timeout" "120"
}"
eval "${name}_body() { \
RUMP_SOCKETS_LIST=\${RUMP_SOCKET}; \
diff --git a/contrib/netbsd-tests/fs/fifofs/t_fifo.c b/contrib/netbsd-tests/fs/fifofs/t_fifo.c
index c4a2060..4b37bb8 100644
--- a/contrib/netbsd-tests/fs/fifofs/t_fifo.c
+++ b/contrib/netbsd-tests/fs/fifofs/t_fifo.c
@@ -1,9 +1,10 @@
/* Test case written by Bharat Joshi */
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fifo.c,v 1.1 2011/12/21 00:17:07 christos Exp $");
+__RCSID("$NetBSD: t_fifo.c,v 1.2 2017/01/10 22:36:29 christos Exp $");
#include <sys/types.h>
#include <sys/wait.h>
+#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/contrib/netbsd-tests/fs/h_funcs.subr b/contrib/netbsd-tests/fs/h_funcs.subr
index 1216aaf..21bdd97 100644
--- a/contrib/netbsd-tests/fs/h_funcs.subr
+++ b/contrib/netbsd-tests/fs/h_funcs.subr
@@ -45,6 +45,15 @@ require_fs() {
# if we have autoloadable modules, just assume the file system
atf_require_prog sysctl
+ # Begin FreeBSD
+ if true; then
+ if kldstat -m ${name}; then
+ found=yes
+ else
+ found=no
+ fi
+ else
+ # End FreeBSD
autoload=$(sysctl -n kern.module.autoload)
[ "${autoload}" = "1" ] && return 0
@@ -57,6 +66,9 @@ require_fs() {
fi
shift
done
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
[ ${found} = yes ] || \
atf_skip "The kernel does not include support the " \
"\`${name}' file system"
diff --git a/contrib/netbsd-tests/fs/nfs/nfsservice/mountd.c b/contrib/netbsd-tests/fs/nfs/nfsservice/mountd.c
deleted file mode 100644
index b3625f6..0000000
--- a/contrib/netbsd-tests/fs/nfs/nfsservice/mountd.c
+++ /dev/null
@@ -1,2575 +0,0 @@
-/* $NetBSD: mountd.c,v 1.8 2013/10/19 17:45:00 christos Exp $ */
-
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Herb Hasler and Rick Macklem at The University of Guelph.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1989, 1993\
- The Regents of the University of California. All rights reserved.");
-#endif /* not lint */
-
-#ifndef lint
-#if 0
-static char sccsid[] = "@(#)mountd.c 8.15 (Berkeley) 5/1/95";
-#else
-__RCSID("$NetBSD: mountd.c,v 1.8 2013/10/19 17:45:00 christos Exp $");
-#endif
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/file.h>
-#include <sys/ioctl.h>
-#include <sys/mount.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <syslog.h>
-#include <sys/ucred.h>
-
-#include <rpc/rpc.h>
-#include <rpc/pmap_clnt.h>
-#include <rpc/pmap_prot.h>
-#include <rpcsvc/mount.h>
-#include <nfs/rpcv2.h>
-#include <nfs/nfsproto.h>
-#include <nfs/nfs.h>
-#include <nfs/nfsmount.h>
-
-#include <arpa/inet.h>
-
-#include <rump/rump.h>
-#include <rump/rump_syscalls.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <grp.h>
-#include <netdb.h>
-#include <pwd.h>
-#include <netgroup.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <err.h>
-#include <util.h>
-#include "pathnames.h"
-
-#ifdef IPSEC
-#include <netinet6/ipsec.h>
-#ifndef IPSEC_POLICY_IPSEC /* no ipsec support on old ipsec */
-#undef IPSEC
-#endif
-#include "ipsec.h"
-#endif
-
-#include "svc_fdset.h"
-
-#include <stdarg.h>
-
-/*
- * Structures for keeping the mount list and export list
- */
-struct mountlist {
- struct mountlist *ml_next;
- char ml_host[RPCMNT_NAMELEN + 1];
- char ml_dirp[RPCMNT_PATHLEN + 1];
- int ml_flag;/* XXX more flags (same as dp_flag) */
-};
-
-struct dirlist {
- struct dirlist *dp_left;
- struct dirlist *dp_right;
- int dp_flag;
- struct hostlist *dp_hosts; /* List of hosts this dir exported to */
- char dp_dirp[1]; /* Actually malloc'd to size of dir */
-};
-/* dp_flag bits */
-#define DP_DEFSET 0x1
-#define DP_HOSTSET 0x2
-#define DP_KERB 0x4
-#define DP_NORESMNT 0x8
-
-struct exportlist {
- struct exportlist *ex_next;
- struct dirlist *ex_dirl;
- struct dirlist *ex_defdir;
- int ex_flag;
- fsid_t ex_fs;
- char *ex_fsdir;
- char *ex_indexfile;
-};
-/* ex_flag bits */
-#define EX_LINKED 0x1
-
-struct netmsk {
- struct sockaddr_storage nt_net;
- int nt_len;
- char *nt_name;
-};
-
-union grouptypes {
- struct addrinfo *gt_addrinfo;
- struct netmsk gt_net;
-};
-
-struct grouplist {
- int gr_type;
- union grouptypes gr_ptr;
- struct grouplist *gr_next;
-};
-/* Group types */
-#define GT_NULL 0x0
-#define GT_HOST 0x1
-#define GT_NET 0x2
-
-struct hostlist {
- int ht_flag;/* Uses DP_xx bits */
- struct grouplist *ht_grp;
- struct hostlist *ht_next;
-};
-
-struct fhreturn {
- int fhr_flag;
- int fhr_vers;
- size_t fhr_fhsize;
- union {
- uint8_t v2[NFSX_V2FH];
- uint8_t v3[NFSX_V3FHMAX];
- } fhr_fh;
-};
-
-/* Global defs */
-static char *add_expdir __P((struct dirlist **, char *, int));
-static void add_dlist __P((struct dirlist **, struct dirlist *,
- struct grouplist *, int));
-static void add_mlist __P((char *, char *, int));
-static int check_dirpath __P((const char *, size_t, char *));
-static int check_options __P((const char *, size_t, struct dirlist *));
-static int chk_host __P((struct dirlist *, struct sockaddr *, int *, int *));
-static int del_mlist __P((char *, char *, struct sockaddr *));
-static struct dirlist *dirp_search __P((struct dirlist *, char *));
-static int do_nfssvc __P((const char *, size_t, struct exportlist *,
- struct grouplist *, int, struct uucred *, char *, int, struct statvfs *));
-static int do_opt __P((const char *, size_t, char **, char **,
- struct exportlist *, struct grouplist *, int *, int *, struct uucred *));
-static struct exportlist *ex_search __P((fsid_t *));
-static int parse_directory __P((const char *, size_t, struct grouplist *,
- int, char *, struct exportlist **, struct statvfs *));
-static int parse_host_netgroup __P((const char *, size_t, struct exportlist *,
- struct grouplist *, char *, int *, struct grouplist **));
-static struct exportlist *get_exp __P((void));
-static void free_dir __P((struct dirlist *));
-static void free_exp __P((struct exportlist *));
-static void free_grp __P((struct grouplist *));
-static void free_host __P((struct hostlist *));
-void get_exportlist __P((int));
-static int get_host __P((const char *, size_t, const char *,
- struct grouplist *));
-static struct hostlist *get_ht __P((void));
-static void get_mountlist __P((void));
-static int get_net __P((char *, struct netmsk *, int));
-static void free_exp_grp __P((struct exportlist *, struct grouplist *));
-static struct grouplist *get_grp __P((void));
-static void hang_dirp __P((struct dirlist *, struct grouplist *,
- struct exportlist *, int));
-static void mntsrv __P((struct svc_req *, SVCXPRT *));
-static void nextfield __P((char **, char **));
-static void parsecred __P((char *, struct uucred *));
-static int put_exlist __P((struct dirlist *, XDR *, struct dirlist *, int *));
-static int scan_tree __P((struct dirlist *, struct sockaddr *));
-static void send_umntall __P((int));
-#if 0
-static int umntall_each __P((caddr_t, struct sockaddr_in *));
-#endif
-static int xdr_dir __P((XDR *, char *));
-static int xdr_explist __P((XDR *, caddr_t));
-static int xdr_fhs __P((XDR *, caddr_t));
-static int xdr_mlist __P((XDR *, caddr_t));
-static int bitcmp __P((void *, void *, int));
-static int netpartcmp __P((struct sockaddr *, struct sockaddr *, int));
-static int sacmp __P((struct sockaddr *, struct sockaddr *));
-static int allones __P((struct sockaddr_storage *, int));
-static int countones __P((struct sockaddr *));
-static void bind_resv_port __P((int, sa_family_t, in_port_t));
-static void no_nfs(int);
-static struct exportlist *exphead;
-static struct mountlist *mlhead;
-static struct grouplist *grphead;
-static char *exname;
-static struct uucred def_anon = {
- 1,
- (uid_t) -2,
- (gid_t) -2,
- 0,
- { 0 }
-};
-
-static int opt_flags;
-static int have_v6 = 1;
-static const int ninumeric = NI_NUMERICHOST;
-
-/* Bits for above */
-#define OP_MAPROOT 0x001
-#define OP_MAPALL 0x002
-#define OP_KERB 0x004
-#define OP_MASK 0x008
-#define OP_NET 0x010
-#define OP_ALLDIRS 0x040
-#define OP_NORESPORT 0x080
-#define OP_NORESMNT 0x100
-#define OP_MASKLEN 0x200
-
-static int debug = 1;
-#if 0
-static void SYSLOG __P((int, const char *,...));
-#endif
-int main __P((int, char *[]));
-
-/*
- * If this is non-zero, -noresvport and -noresvmnt are implied for
- * each export.
- */
-static int noprivports;
-
-#define C2FD(_c_) ((int)(uintptr_t)(_c_))
-static int
-rumpread(void *cookie, char *buf, int count)
-{
-
- return rump_sys_read(C2FD(cookie), buf, count);
-}
-
-static int
-rumpwrite(void *cookie, const char *buf, int count)
-{
-
- return rump_sys_write(C2FD(cookie), buf, count);
-}
-
-static off_t
-rumpseek(void *cookie, off_t off, int whence)
-{
-
- return rump_sys_lseek(C2FD(cookie), off, whence);
-}
-
-static int
-rumpclose(void *cookie)
-{
-
- return rump_sys_close(C2FD(cookie));
-}
-
-int __sflags(const char *, int *); /* XXX */
-static FILE *
-rumpfopen(const char *path, const char *opts)
-{
- int fd, oflags;
-
- __sflags(opts, &oflags);
- fd = rump_sys_open(path, oflags, 0777);
- if (fd == -1)
- return NULL;
-
- return funopen((void *)(uintptr_t)fd,
- rumpread, rumpwrite, rumpseek, rumpclose);
-}
-
-/*
- * Make sure mountd signal handler is executed from a thread context
- * instead of the signal handler. This avoids the signal handler
- * ruining our kernel context.
- */
-static sem_t exportsem;
-static void
-signal_get_exportlist(int sig)
-{
-
- sem_post(&exportsem);
-}
-
-static void *
-exportlist_thread(void *arg)
-{
-
- for (;;) {
- sem_wait(&exportsem);
- get_exportlist(0);
- }
-
- return NULL;
-}
-
-/*
- * Mountd server for NFS mount protocol as described in:
- * NFS: Network File System Protocol Specification, RFC1094, Appendix A
- * The optional arguments are the exports file name
- * default: _PATH_EXPORTS
- * "-d" to enable debugging
- * and "-n" to allow nonroot mount.
- */
-void *mountd_main(void *);
-void *
-mountd_main(void *arg)
-{
- SVCXPRT *udptransp, *tcptransp;
- struct netconfig *udpconf, *tcpconf;
- int udpsock, tcpsock;
- int xcreated = 0;
- int maxrec = RPC_MAXDATASIZE;
- in_port_t forcedport = 0;
- extern sem_t gensem;
- pthread_t ptdummy;
-
- alloc_fdset();
-
-#if 0
- while ((c = getopt(argc, argv, "dNnrp:" ADDOPTS)) != -1)
- switch (c) {
-#ifdef IPSEC
- case 'P':
- if (ipsecsetup_test(policy = optarg))
- errx(1, "Invalid ipsec policy `%s'", policy);
- break;
-#endif
- case 'p':
- /* A forced port "0" will dynamically allocate a port */
- forcedport = atoi(optarg);
- break;
- case 'd':
- debug = 1;
- break;
- case 'N':
- noprivports = 1;
- break;
- /* Compatibility */
- case 'n':
- case 'r':
- break;
- default:
- fprintf(stderr, "usage: %s [-dNn]"
-#ifdef IPSEC
- " [-P policy]"
-#endif
- " [-p port] [exportsfile]\n", getprogname());
- exit(1);
- };
- argc -= optind;
- argv += optind;
-#endif
-
- sem_init(&exportsem, 0, 0);
- pthread_create(&ptdummy, NULL, exportlist_thread, NULL);
-
- grphead = NULL;
- exphead = NULL;
- mlhead = NULL;
- exname = _PATH_EXPORTS;
- openlog("mountd", LOG_PID | (debug ? LOG_PERROR : 0), LOG_DAEMON);
- (void)signal(SIGSYS, no_nfs);
-
- if (debug)
- (void)fprintf(stderr, "Getting export list.\n");
- get_exportlist(0);
- if (debug)
- (void)fprintf(stderr, "Getting mount list.\n");
- get_mountlist();
- if (debug)
- (void)fprintf(stderr, "Here we go.\n");
- if (debug == 0) {
- daemon(0, 0);
- (void)signal(SIGINT, SIG_IGN);
- (void)signal(SIGQUIT, SIG_IGN);
- }
- (void)signal(SIGHUP, signal_get_exportlist);
- (void)signal(SIGTERM, send_umntall);
- pidfile(NULL);
-
- rpcb_unset(RPCPROG_MNT, RPCMNT_VER1, NULL);
- rpcb_unset(RPCPROG_MNT, RPCMNT_VER3, NULL);
-
- udpsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- tcpsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-
- udpconf = getnetconfigent("udp");
- tcpconf = getnetconfigent("tcp");
-
- rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec);
-
- if (udpsock != -1 && udpconf != NULL) {
- bind_resv_port(udpsock, AF_INET, forcedport);
-#ifdef IPSEC
- if (policy)
- ipsecsetup(AF_INET, udpsock, policy);
-#endif
- udptransp = svc_dg_create(udpsock, 0, 0);
- if (udptransp != NULL) {
- if (!svc_reg(udptransp, RPCPROG_MNT, RPCMNT_VER1,
- mntsrv, udpconf) ||
- !svc_reg(udptransp, RPCPROG_MNT, RPCMNT_VER3,
- mntsrv, udpconf)) {
- syslog(LOG_WARNING, "can't register UDP service");
- }
- else {
- xcreated++;
- }
- } else {
- syslog(LOG_WARNING, "can't create UDP service");
- }
-
- }
-
- if (tcpsock != -1 && tcpconf != NULL) {
- bind_resv_port(tcpsock, AF_INET, forcedport);
-#ifdef IPSEC
- if (policy)
- ipsecsetup(AF_INET, tcpsock, policy);
-#endif
- listen(tcpsock, SOMAXCONN);
- tcptransp = svc_vc_create(tcpsock, RPC_MAXDATASIZE,
- RPC_MAXDATASIZE);
- if (tcptransp != NULL) {
- if (!svc_reg(tcptransp, RPCPROG_MNT, RPCMNT_VER1,
- mntsrv, tcpconf) ||
- !svc_reg(tcptransp, RPCPROG_MNT, RPCMNT_VER3,
- mntsrv, tcpconf))
- syslog(LOG_WARNING, "can't register TCP service");
- else
- xcreated++;
- } else
- syslog(LOG_WARNING, "can't create TCP service");
-
- }
-
- if (xcreated == 0) {
- syslog(LOG_ERR, "could not create any services");
- exit(1);
- }
-
- sem_post(&gensem);
- svc_run();
- syslog(LOG_ERR, "Mountd died");
- exit(1);
-}
-
-/*
- * The mount rpc service
- */
-void
-mntsrv(rqstp, transp)
- struct svc_req *rqstp;
- SVCXPRT *transp;
-{
- struct exportlist *ep;
- struct dirlist *dp;
- struct fhreturn fhr;
- struct stat stb;
- struct statvfs fsb;
- char host[NI_MAXHOST], numerichost[NI_MAXHOST];
- int lookup_failed = 1;
- struct sockaddr *saddr;
- u_short sport;
- char rpcpath[RPCMNT_PATHLEN + 1], dpath[MAXPATHLEN];
- long bad = EACCES;
- int defset, hostset, ret;
- sigset_t sighup_mask;
- struct sockaddr_in6 *sin6;
- struct sockaddr_in *sin;
- size_t fh_size;
- int error = 0;
-
- (void)sigemptyset(&sighup_mask);
- (void)sigaddset(&sighup_mask, SIGHUP);
- saddr = svc_getrpccaller(transp)->buf;
- switch (saddr->sa_family) {
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *)saddr;
- sport = ntohs(sin6->sin6_port);
- break;
- case AF_INET:
- sin = (struct sockaddr_in *)saddr;
- sport = ntohs(sin->sin_port);
- break;
- default:
- syslog(LOG_ERR, "request from unknown address family");
- return;
- }
- lookup_failed = getnameinfo(saddr, saddr->sa_len, host, sizeof host,
- NULL, 0, 0);
- if (getnameinfo(saddr, saddr->sa_len, numerichost,
- sizeof numerichost, NULL, 0, ninumeric) != 0)
- strlcpy(numerichost, "?", sizeof(numerichost));
- ret = 0;
- switch (rqstp->rq_proc) {
- case NULLPROC:
- if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
- case MOUNTPROC_MNT:
- if (debug)
- fprintf(stderr,
- "got mount request from %s\n", numerichost);
- if (!svc_getargs(transp, xdr_dir, rpcpath)) {
- if (debug)
- fprintf(stderr, "-> garbage args\n");
- svcerr_decode(transp);
- return;
- }
- if (debug)
- fprintf(stderr,
- "-> rpcpath: %s\n", rpcpath);
- /*
- * Get the real pathname and make sure it is a file or
- * directory that exists.
- */
-#if 0
- if (realpath(rpcpath, dpath) == 0 ||
-#endif
- strcpy(dpath, rpcpath);
- if (rump_sys_stat(dpath, &stb) < 0 ||
- (!S_ISDIR(stb.st_mode) && !S_ISREG(stb.st_mode)) ||
- rump_sys_statvfs1(dpath, &fsb, ST_WAIT) < 0) {
- (void)chdir("/"); /* Just in case realpath doesn't */
- if (debug)
- (void)fprintf(stderr, "-> stat failed on %s\n",
- dpath);
- if (!svc_sendreply(transp, (xdrproc_t)xdr_long, (caddr_t) &bad))
- syslog(LOG_ERR, "Can't send reply");
- return;
- }
- if (debug)
- fprintf(stderr,
- "-> dpath: %s\n", dpath);
- /* Check in the exports list */
- (void)sigprocmask(SIG_BLOCK, &sighup_mask, NULL);
- ep = ex_search(&fsb.f_fsidx);
- hostset = defset = 0;
- if (ep && (chk_host(ep->ex_defdir, saddr, &defset,
- &hostset) || ((dp = dirp_search(ep->ex_dirl, dpath)) &&
- chk_host(dp, saddr, &defset, &hostset)) ||
- (defset && scan_tree(ep->ex_defdir, saddr) == 0 &&
- scan_tree(ep->ex_dirl, saddr) == 0))) {
- if ((hostset & DP_HOSTSET) == 0) {
- hostset = defset;
- }
- if (sport >= IPPORT_RESERVED &&
- !(hostset & DP_NORESMNT)) {
- syslog(LOG_NOTICE,
- "Refused mount RPC from host %s port %d",
- numerichost, sport);
- svcerr_weakauth(transp);
- goto out;
- }
- fhr.fhr_flag = hostset;
- fhr.fhr_vers = rqstp->rq_vers;
- /* Get the file handle */
- memset(&fhr.fhr_fh, 0, sizeof(fhr.fhr_fh)); /* for v2 */
- fh_size = sizeof(fhr.fhr_fh);
- error = 0;
- if (rump_sys_getfh(dpath, &fhr.fhr_fh, &fh_size) < 0) {
- bad = error;
- //syslog(LOG_ERR, "Can't get fh for %s %d %d", dpath, error, fh_size);
- if (!svc_sendreply(transp, (xdrproc_t)xdr_long,
- (char *)&bad))
- syslog(LOG_ERR, "Can't send reply");
- goto out;
- }
- if ((fhr.fhr_vers == 1 && fh_size > NFSX_V2FH) ||
- fh_size > NFSX_V3FHMAX) {
- bad = EINVAL; /* XXX */
- if (!svc_sendreply(transp, (xdrproc_t)xdr_long,
- (char *)&bad))
- syslog(LOG_ERR, "Can't send reply");
- goto out;
- }
- fhr.fhr_fhsize = fh_size;
- if (!svc_sendreply(transp, (xdrproc_t)xdr_fhs, (char *) &fhr))
- syslog(LOG_ERR, "Can't send reply");
- if (!lookup_failed)
- add_mlist(host, dpath, hostset);
- else
- add_mlist(numerichost, dpath, hostset);
- if (debug)
- (void)fprintf(stderr, "Mount successful.\n");
- } else {
- if (!svc_sendreply(transp, (xdrproc_t)xdr_long, (caddr_t) &bad))
- syslog(LOG_ERR, "Can't send reply");
- }
-out:
- (void)sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
- return;
- case MOUNTPROC_DUMP:
- if (!svc_sendreply(transp, (xdrproc_t)xdr_mlist, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
- case MOUNTPROC_UMNT:
- if (!svc_getargs(transp, xdr_dir, dpath)) {
- svcerr_decode(transp);
- return;
- }
- if (!lookup_failed)
- ret = del_mlist(host, dpath, saddr);
- ret |= del_mlist(numerichost, dpath, saddr);
- if (ret) {
- svcerr_weakauth(transp);
- return;
- }
- if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
- case MOUNTPROC_UMNTALL:
- if (!lookup_failed)
- ret = del_mlist(host, NULL, saddr);
- ret |= del_mlist(numerichost, NULL, saddr);
- if (ret) {
- svcerr_weakauth(transp);
- return;
- }
- if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
- case MOUNTPROC_EXPORT:
- case MOUNTPROC_EXPORTALL:
- if (!svc_sendreply(transp, (xdrproc_t)xdr_explist, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
-
-
- default:
- svcerr_noproc(transp);
- return;
- }
-}
-
-/*
- * Xdr conversion for a dpath string
- */
-static int
-xdr_dir(xdrsp, dirp)
- XDR *xdrsp;
- char *dirp;
-{
-
- return (xdr_string(xdrsp, &dirp, RPCMNT_PATHLEN));
-}
-
-/*
- * Xdr routine to generate file handle reply
- */
-static int
-xdr_fhs(xdrsp, cp)
- XDR *xdrsp;
- caddr_t cp;
-{
- struct fhreturn *fhrp = (struct fhreturn *) cp;
- long ok = 0, len, auth;
-
- if (!xdr_long(xdrsp, &ok))
- return (0);
- switch (fhrp->fhr_vers) {
- case 1:
- return (xdr_opaque(xdrsp, (caddr_t)&fhrp->fhr_fh, NFSX_V2FH));
- case 3:
- len = fhrp->fhr_fhsize;
- if (!xdr_long(xdrsp, &len))
- return (0);
- if (!xdr_opaque(xdrsp, (caddr_t)&fhrp->fhr_fh, len))
- return (0);
- if (fhrp->fhr_flag & DP_KERB)
- auth = RPCAUTH_KERB4;
- else
- auth = RPCAUTH_UNIX;
- len = 1;
- if (!xdr_long(xdrsp, &len))
- return (0);
- return (xdr_long(xdrsp, &auth));
- };
- return (0);
-}
-
-int
-xdr_mlist(xdrsp, cp)
- XDR *xdrsp;
- caddr_t cp;
-{
- struct mountlist *mlp;
- int trueval = 1;
- int falseval = 0;
- char *strp;
-
- mlp = mlhead;
- while (mlp) {
- if (!xdr_bool(xdrsp, &trueval))
- return (0);
- strp = &mlp->ml_host[0];
- if (!xdr_string(xdrsp, &strp, RPCMNT_NAMELEN))
- return (0);
- strp = &mlp->ml_dirp[0];
- if (!xdr_string(xdrsp, &strp, RPCMNT_PATHLEN))
- return (0);
- mlp = mlp->ml_next;
- }
- if (!xdr_bool(xdrsp, &falseval))
- return (0);
- return (1);
-}
-
-/*
- * Xdr conversion for export list
- */
-int
-xdr_explist(xdrsp, cp)
- XDR *xdrsp;
- caddr_t cp;
-{
- struct exportlist *ep;
- int falseval = 0;
- int putdef;
- sigset_t sighup_mask;
-
- (void)sigemptyset(&sighup_mask);
- (void)sigaddset(&sighup_mask, SIGHUP);
- (void)sigprocmask(SIG_BLOCK, &sighup_mask, NULL);
- ep = exphead;
- while (ep) {
- putdef = 0;
- if (put_exlist(ep->ex_dirl, xdrsp, ep->ex_defdir, &putdef))
- goto errout;
- if (ep->ex_defdir && putdef == 0 &&
- put_exlist(ep->ex_defdir, xdrsp, NULL, &putdef))
- goto errout;
- ep = ep->ex_next;
- }
- (void)sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
- if (!xdr_bool(xdrsp, &falseval))
- return (0);
- return (1);
-errout:
- (void)sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
- return (0);
-}
-
-/*
- * Called from xdr_explist() to traverse the tree and export the
- * directory paths. Assumes SIGHUP has already been masked.
- */
-int
-put_exlist(dp, xdrsp, adp, putdefp)
- struct dirlist *dp;
- XDR *xdrsp;
- struct dirlist *adp;
- int *putdefp;
-{
- struct grouplist *grp;
- struct hostlist *hp;
- int trueval = 1;
- int falseval = 0;
- int gotalldir = 0;
- char *strp;
-
- if (dp) {
- if (put_exlist(dp->dp_left, xdrsp, adp, putdefp))
- return (1);
- if (!xdr_bool(xdrsp, &trueval))
- return (1);
- strp = dp->dp_dirp;
- if (!xdr_string(xdrsp, &strp, RPCMNT_PATHLEN))
- return (1);
- if (adp && !strcmp(dp->dp_dirp, adp->dp_dirp)) {
- gotalldir = 1;
- *putdefp = 1;
- }
- if ((dp->dp_flag & DP_DEFSET) == 0 &&
- (gotalldir == 0 || (adp->dp_flag & DP_DEFSET) == 0)) {
- hp = dp->dp_hosts;
- while (hp) {
- grp = hp->ht_grp;
- if (grp->gr_type == GT_HOST) {
- if (!xdr_bool(xdrsp, &trueval))
- return (1);
- strp =
- grp->gr_ptr.gt_addrinfo->ai_canonname;
- if (!xdr_string(xdrsp, &strp,
- RPCMNT_NAMELEN))
- return (1);
- } else if (grp->gr_type == GT_NET) {
- if (!xdr_bool(xdrsp, &trueval))
- return (1);
- strp = grp->gr_ptr.gt_net.nt_name;
- if (!xdr_string(xdrsp, &strp,
- RPCMNT_NAMELEN))
- return (1);
- }
- hp = hp->ht_next;
- if (gotalldir && hp == NULL) {
- hp = adp->dp_hosts;
- gotalldir = 0;
- }
- }
- }
- if (!xdr_bool(xdrsp, &falseval))
- return (1);
- if (put_exlist(dp->dp_right, xdrsp, adp, putdefp))
- return (1);
- }
- return (0);
-}
-
-static int
-parse_host_netgroup(line, lineno, ep, tgrp, cp, has_host, grp)
- const char *line;
- size_t lineno;
- struct exportlist *ep;
- struct grouplist *tgrp;
- char *cp;
- int *has_host;
- struct grouplist **grp;
-{
- const char *hst, *usr, *dom;
- int netgrp;
-
- if (ep == NULL) {
- syslog(LOG_ERR, "\"%s\", line %ld: No current export",
- line, (unsigned long)lineno);
- return 0;
- }
- setnetgrent(cp);
- netgrp = getnetgrent(&hst, &usr, &dom);
- do {
- if (*has_host) {
- (*grp)->gr_next = get_grp();
- *grp = (*grp)->gr_next;
- }
- if (netgrp) {
- if (hst == NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: No host in netgroup %s",
- line, (unsigned long)lineno, cp);
- goto bad;
- }
- if (get_host(line, lineno, hst, *grp))
- goto bad;
- } else if (get_host(line, lineno, cp, *grp))
- goto bad;
- *has_host = TRUE;
- } while (netgrp && getnetgrent(&hst, &usr, &dom));
-
- endnetgrent();
- return 1;
-bad:
- endnetgrent();
- return 0;
-
-}
-
-static int
-parse_directory(line, lineno, tgrp, got_nondir, cp, ep, fsp)
- const char *line;
- size_t lineno;
- struct grouplist *tgrp;
- int got_nondir;
- char *cp;
- struct exportlist **ep;
- struct statvfs *fsp;
-{
- int error = 0;
-
- if (!check_dirpath(line, lineno, cp))
- return 0;
-
- if (rump_sys_statvfs1(cp, fsp, ST_WAIT) == -1) {
- syslog(LOG_ERR, "\"%s\", line %ld: statvfs for `%s' failed: %m %d",
- line, (unsigned long)lineno, cp, error);
- return 0;
- }
-
- if (got_nondir) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Directories must precede files",
- line, (unsigned long)lineno);
- return 0;
- }
- if (*ep) {
- if ((*ep)->ex_fs.__fsid_val[0] != fsp->f_fsidx.__fsid_val[0] ||
- (*ep)->ex_fs.__fsid_val[1] != fsp->f_fsidx.__fsid_val[1]) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: filesystem ids disagree",
- line, (unsigned long)lineno);
- return 0;
- }
- } else {
- /*
- * See if this directory is already
- * in the list.
- */
- *ep = ex_search(&fsp->f_fsidx);
- if (*ep == NULL) {
- *ep = get_exp();
- (*ep)->ex_fs = fsp->f_fsidx;
- (*ep)->ex_fsdir = estrdup(fsp->f_mntonname);
- if (debug)
- (void)fprintf(stderr,
- "Making new ep fs=0x%x,0x%x\n",
- fsp->f_fsidx.__fsid_val[0], fsp->f_fsidx.__fsid_val[1]);
- } else {
- if (debug)
- (void)fprintf(stderr,
- "Found ep fs=0x%x,0x%x\n",
- fsp->f_fsidx.__fsid_val[0], fsp->f_fsidx.__fsid_val[1]);
- }
- }
-
- return 1;
-}
-
-
-/*
- * Get the export list
- */
-/* ARGSUSED */
-void
-get_exportlist(n)
- int n;
-{
- struct exportlist *ep, *ep2;
- struct grouplist *grp, *tgrp;
- struct exportlist **epp;
- struct dirlist *dirhead;
- struct statvfs fsb, *fsp;
- struct addrinfo *ai;
- struct uucred anon;
- char *cp, *endcp, *dirp, savedc;
- int has_host, exflags, got_nondir, dirplen, num, i;
- FILE *exp_file;
- char *line;
- size_t lineno = 0, len;
-
-
- /*
- * First, get rid of the old list
- */
- ep = exphead;
- while (ep) {
- ep2 = ep;
- ep = ep->ex_next;
- free_exp(ep2);
- }
- exphead = NULL;
-
- dirp = NULL;
- dirplen = 0;
- grp = grphead;
- while (grp) {
- tgrp = grp;
- grp = grp->gr_next;
- free_grp(tgrp);
- }
- grphead = NULL;
-
- /*
- * And delete exports that are in the kernel for all local
- * file systems.
- */
- num = getmntinfo(&fsp, MNT_NOWAIT);
- for (i = 0; i < num; i++) {
- struct mountd_exports_list mel;
-
- /* Delete all entries from the export list. */
- mel.mel_path = fsp->f_mntonname;
- mel.mel_nexports = 0;
- if (rump_sys_nfssvc(NFSSVC_SETEXPORTSLIST, &mel) == -1 &&
- errno != EOPNOTSUPP)
- syslog(LOG_ERR, "Can't delete exports for %s (%m)",
- fsp->f_mntonname);
-
- fsp++;
- }
-
- /*
- * Read in the exports file and build the list, calling
- * mount() as we go along to push the export rules into the kernel.
- */
- exname = _PATH_EXPORTS;
- if ((exp_file = rumpfopen(exname, "r")) == NULL) {
- /*
- * Don't exit here; we can still reload the config
- * after a SIGHUP.
- */
- if (debug)
- (void)fprintf(stderr, "Can't open %s: %s\n", exname,
- strerror(errno));
- return;
- }
- dirhead = NULL;
- while ((line = fparseln(exp_file, &len, &lineno, NULL, 0)) != NULL) {
- if (debug)
- (void)fprintf(stderr, "Got line %s\n", line);
- cp = line;
- nextfield(&cp, &endcp);
- if (cp == endcp)
- goto nextline; /* skip empty line */
- /*
- * Set defaults.
- */
- has_host = FALSE;
- anon = def_anon;
- exflags = MNT_EXPORTED;
- got_nondir = 0;
- opt_flags = 0;
- ep = NULL;
-
- if (noprivports) {
- opt_flags |= OP_NORESMNT | OP_NORESPORT;
- exflags |= MNT_EXNORESPORT;
- }
-
- /*
- * Create new exports list entry
- */
- len = endcp - cp;
- tgrp = grp = get_grp();
- while (len > 0) {
- if (len > RPCMNT_NAMELEN) {
- *endcp = '\0';
- syslog(LOG_ERR,
- "\"%s\", line %ld: name `%s' is too long",
- line, (unsigned long)lineno, cp);
- goto badline;
- }
- switch (*cp) {
- case '-':
- /*
- * Option
- */
- if (ep == NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: No current export list",
- line, (unsigned long)lineno);
- goto badline;
- }
- if (debug)
- (void)fprintf(stderr, "doing opt %s\n",
- cp);
- got_nondir = 1;
- if (do_opt(line, lineno, &cp, &endcp, ep, grp,
- &has_host, &exflags, &anon))
- goto badline;
- break;
-
- case '/':
- /*
- * Directory
- */
- savedc = *endcp;
- *endcp = '\0';
-
- if (!parse_directory(line, lineno, tgrp,
- got_nondir, cp, &ep, &fsb))
- goto badline;
- /*
- * Add dirpath to export mount point.
- */
- dirp = add_expdir(&dirhead, cp, len);
- dirplen = len;
-
- *endcp = savedc;
- break;
-
- default:
- /*
- * Host or netgroup.
- */
- savedc = *endcp;
- *endcp = '\0';
-
- if (!parse_host_netgroup(line, lineno, ep,
- tgrp, cp, &has_host, &grp))
- goto badline;
-
- got_nondir = 1;
-
- *endcp = savedc;
- break;
- }
-
- cp = endcp;
- nextfield(&cp, &endcp);
- len = endcp - cp;
- }
- if (check_options(line, lineno, dirhead))
- goto badline;
-
- if (!has_host) {
- grp->gr_type = GT_HOST;
- if (debug)
- (void)fprintf(stderr,
- "Adding a default entry\n");
- /* add a default group and make the grp list NULL */
- ai = emalloc(sizeof(struct addrinfo));
- ai->ai_flags = 0;
- ai->ai_family = AF_INET; /* XXXX */
- ai->ai_socktype = SOCK_DGRAM;
- /* setting the length to 0 will match anything */
- ai->ai_addrlen = 0;
- ai->ai_flags = AI_CANONNAME;
- ai->ai_canonname = estrdup("Default");
- ai->ai_addr = NULL;
- ai->ai_next = NULL;
- grp->gr_ptr.gt_addrinfo = ai;
-
- } else if ((opt_flags & OP_NET) && tgrp->gr_next) {
- /*
- * Don't allow a network export coincide with a list of
- * host(s) on the same line.
- */
- syslog(LOG_ERR,
- "\"%s\", line %ld: Mixed exporting of networks and hosts is disallowed",
- line, (unsigned long)lineno);
- goto badline;
- }
- /*
- * Loop through hosts, pushing the exports into the kernel.
- * After loop, tgrp points to the start of the list and
- * grp points to the last entry in the list.
- */
- grp = tgrp;
- do {
- if (do_nfssvc(line, lineno, ep, grp, exflags, &anon,
- dirp, dirplen, &fsb))
- goto badline;
- } while (grp->gr_next && (grp = grp->gr_next));
-
- /*
- * Success. Update the data structures.
- */
- if (has_host) {
- hang_dirp(dirhead, tgrp, ep, opt_flags);
- grp->gr_next = grphead;
- grphead = tgrp;
- } else {
- hang_dirp(dirhead, NULL, ep, opt_flags);
- free_grp(tgrp);
- }
- tgrp = NULL;
- dirhead = NULL;
- if ((ep->ex_flag & EX_LINKED) == 0) {
- ep2 = exphead;
- epp = &exphead;
-
- /*
- * Insert in the list in alphabetical order.
- */
- while (ep2 && strcmp(ep2->ex_fsdir, ep->ex_fsdir) < 0) {
- epp = &ep2->ex_next;
- ep2 = ep2->ex_next;
- }
- if (ep2)
- ep->ex_next = ep2;
- *epp = ep;
- ep->ex_flag |= EX_LINKED;
- }
- goto nextline;
-badline:
- free_exp_grp(ep, grp);
-nextline:
- if (dirhead) {
- free_dir(dirhead);
- dirhead = NULL;
- }
- free(line);
- }
- (void)fclose(exp_file);
-}
-
-/*
- * Allocate an export list element
- */
-static struct exportlist *
-get_exp()
-{
- struct exportlist *ep;
-
- ep = emalloc(sizeof(struct exportlist));
- (void)memset(ep, 0, sizeof(struct exportlist));
- return (ep);
-}
-
-/*
- * Allocate a group list element
- */
-static struct grouplist *
-get_grp()
-{
- struct grouplist *gp;
-
- gp = emalloc(sizeof(struct grouplist));
- (void)memset(gp, 0, sizeof(struct grouplist));
- return (gp);
-}
-
-/*
- * Clean up upon an error in get_exportlist().
- */
-static void
-free_exp_grp(ep, grp)
- struct exportlist *ep;
- struct grouplist *grp;
-{
- struct grouplist *tgrp;
-
- if (ep && (ep->ex_flag & EX_LINKED) == 0)
- free_exp(ep);
- while (grp) {
- tgrp = grp;
- grp = grp->gr_next;
- free_grp(tgrp);
- }
-}
-
-/*
- * Search the export list for a matching fs.
- */
-static struct exportlist *
-ex_search(fsid)
- fsid_t *fsid;
-{
- struct exportlist *ep;
-
- ep = exphead;
- return ep;
- while (ep) {
- if (ep->ex_fs.__fsid_val[0] == fsid->__fsid_val[0] &&
- ep->ex_fs.__fsid_val[1] == fsid->__fsid_val[1])
- return (ep);
- ep = ep->ex_next;
- }
- return (ep);
-}
-
-/*
- * Add a directory path to the list.
- */
-static char *
-add_expdir(dpp, cp, len)
- struct dirlist **dpp;
- char *cp;
- int len;
-{
- struct dirlist *dp;
-
- dp = emalloc(sizeof(struct dirlist) + len);
- dp->dp_left = *dpp;
- dp->dp_right = NULL;
- dp->dp_flag = 0;
- dp->dp_hosts = NULL;
- (void)strcpy(dp->dp_dirp, cp);
- *dpp = dp;
- return (dp->dp_dirp);
-}
-
-/*
- * Hang the dir list element off the dirpath binary tree as required
- * and update the entry for host.
- */
-void
-hang_dirp(dp, grp, ep, flags)
- struct dirlist *dp;
- struct grouplist *grp;
- struct exportlist *ep;
- int flags;
-{
- struct hostlist *hp;
- struct dirlist *dp2;
-
- if (flags & OP_ALLDIRS) {
- if (ep->ex_defdir)
- free(dp);
- else
- ep->ex_defdir = dp;
- if (grp == NULL) {
- ep->ex_defdir->dp_flag |= DP_DEFSET;
- if (flags & OP_KERB)
- ep->ex_defdir->dp_flag |= DP_KERB;
- if (flags & OP_NORESMNT)
- ep->ex_defdir->dp_flag |= DP_NORESMNT;
- } else
- while (grp) {
- hp = get_ht();
- if (flags & OP_KERB)
- hp->ht_flag |= DP_KERB;
- if (flags & OP_NORESMNT)
- hp->ht_flag |= DP_NORESMNT;
- hp->ht_grp = grp;
- hp->ht_next = ep->ex_defdir->dp_hosts;
- ep->ex_defdir->dp_hosts = hp;
- grp = grp->gr_next;
- }
- } else {
-
- /*
- * Loop through the directories adding them to the tree.
- */
- while (dp) {
- dp2 = dp->dp_left;
- add_dlist(&ep->ex_dirl, dp, grp, flags);
- dp = dp2;
- }
- }
-}
-
-/*
- * Traverse the binary tree either updating a node that is already there
- * for the new directory or adding the new node.
- */
-static void
-add_dlist(dpp, newdp, grp, flags)
- struct dirlist **dpp;
- struct dirlist *newdp;
- struct grouplist *grp;
- int flags;
-{
- struct dirlist *dp;
- struct hostlist *hp;
- int cmp;
-
- dp = *dpp;
- if (dp) {
- cmp = strcmp(dp->dp_dirp, newdp->dp_dirp);
- if (cmp > 0) {
- add_dlist(&dp->dp_left, newdp, grp, flags);
- return;
- } else if (cmp < 0) {
- add_dlist(&dp->dp_right, newdp, grp, flags);
- return;
- } else
- free(newdp);
- } else {
- dp = newdp;
- dp->dp_left = NULL;
- *dpp = dp;
- }
- if (grp) {
-
- /*
- * Hang all of the host(s) off of the directory point.
- */
- do {
- hp = get_ht();
- if (flags & OP_KERB)
- hp->ht_flag |= DP_KERB;
- if (flags & OP_NORESMNT)
- hp->ht_flag |= DP_NORESMNT;
- hp->ht_grp = grp;
- hp->ht_next = dp->dp_hosts;
- dp->dp_hosts = hp;
- grp = grp->gr_next;
- } while (grp);
- } else {
- dp->dp_flag |= DP_DEFSET;
- if (flags & OP_KERB)
- dp->dp_flag |= DP_KERB;
- if (flags & OP_NORESMNT)
- dp->dp_flag |= DP_NORESMNT;
- }
-}
-
-/*
- * Search for a dirpath on the export point.
- */
-static struct dirlist *
-dirp_search(dp, dirp)
- struct dirlist *dp;
- char *dirp;
-{
- int cmp;
-
- if (dp) {
- cmp = strcmp(dp->dp_dirp, dirp);
- if (cmp > 0)
- return (dirp_search(dp->dp_left, dirp));
- else if (cmp < 0)
- return (dirp_search(dp->dp_right, dirp));
- else
- return (dp);
- }
- return (dp);
-}
-
-/*
- * Some helper functions for netmasks. They all assume masks in network
- * order (big endian).
- */
-static int
-bitcmp(void *dst, void *src, int bitlen)
-{
- int i;
- u_int8_t *p1 = dst, *p2 = src;
- u_int8_t bitmask;
- int bytelen, bitsleft;
-
- bytelen = bitlen / 8;
- bitsleft = bitlen % 8;
-
- if (debug) {
- printf("comparing:\n");
- for (i = 0; i < (bitsleft ? bytelen + 1 : bytelen); i++)
- printf("%02x", p1[i]);
- printf("\n");
- for (i = 0; i < (bitsleft ? bytelen + 1 : bytelen); i++)
- printf("%02x", p2[i]);
- printf("\n");
- }
-
- for (i = 0; i < bytelen; i++) {
- if (*p1 != *p2)
- return 1;
- p1++;
- p2++;
- }
-
- for (i = 0; i < bitsleft; i++) {
- bitmask = 1 << (7 - i);
- if ((*p1 & bitmask) != (*p2 & bitmask))
- return 1;
- }
-
- return 0;
-}
-
-static int
-netpartcmp(struct sockaddr *s1, struct sockaddr *s2, int bitlen)
-{
- void *src, *dst;
-
- if (s1->sa_family != s2->sa_family)
- return 1;
-
- switch (s1->sa_family) {
- case AF_INET:
- src = &((struct sockaddr_in *)s1)->sin_addr;
- dst = &((struct sockaddr_in *)s2)->sin_addr;
- if (bitlen > sizeof(((struct sockaddr_in *)s1)->sin_addr) * 8)
- return 1;
- break;
- case AF_INET6:
- src = &((struct sockaddr_in6 *)s1)->sin6_addr;
- dst = &((struct sockaddr_in6 *)s2)->sin6_addr;
- if (((struct sockaddr_in6 *)s1)->sin6_scope_id !=
- ((struct sockaddr_in6 *)s2)->sin6_scope_id)
- return 1;
- if (bitlen > sizeof(((struct sockaddr_in6 *)s1)->sin6_addr) * 8)
- return 1;
- break;
- default:
- return 1;
- }
-
- return bitcmp(src, dst, bitlen);
-}
-
-static int
-allones(struct sockaddr_storage *ssp, int bitlen)
-{
- u_int8_t *p;
- int bytelen, bitsleft, i;
- int zerolen;
-
- switch (ssp->ss_family) {
- case AF_INET:
- p = (u_int8_t *)&((struct sockaddr_in *)ssp)->sin_addr;
- zerolen = sizeof (((struct sockaddr_in *)ssp)->sin_addr);
- break;
- case AF_INET6:
- p = (u_int8_t *)&((struct sockaddr_in6 *)ssp)->sin6_addr;
- zerolen = sizeof (((struct sockaddr_in6 *)ssp)->sin6_addr);
- break;
- default:
- return -1;
- }
-
- memset(p, 0, zerolen);
-
- bytelen = bitlen / 8;
- bitsleft = bitlen % 8;
-
- if (bytelen > zerolen)
- return -1;
-
- for (i = 0; i < bytelen; i++)
- *p++ = 0xff;
-
- for (i = 0; i < bitsleft; i++)
- *p |= 1 << (7 - i);
-
- return 0;
-}
-
-static int
-countones(struct sockaddr *sa)
-{
- void *mask;
- int i, bits = 0, bytelen;
- u_int8_t *p;
-
- switch (sa->sa_family) {
- case AF_INET:
- mask = (u_int8_t *)&((struct sockaddr_in *)sa)->sin_addr;
- bytelen = 4;
- break;
- case AF_INET6:
- mask = (u_int8_t *)&((struct sockaddr_in6 *)sa)->sin6_addr;
- bytelen = 16;
- break;
- default:
- return 0;
- }
-
- p = mask;
-
- for (i = 0; i < bytelen; i++, p++) {
- if (*p != 0xff) {
- for (bits = 0; bits < 8; bits++) {
- if (!(*p & (1 << (7 - bits))))
- break;
- }
- break;
- }
- }
-
- return (i * 8 + bits);
-}
-
-static int
-sacmp(struct sockaddr *sa1, struct sockaddr *sa2)
-{
- void *p1, *p2;
- int len;
-
- if (sa1->sa_family != sa2->sa_family)
- return 1;
-
- switch (sa1->sa_family) {
- case AF_INET:
- p1 = &((struct sockaddr_in *)sa1)->sin_addr;
- p2 = &((struct sockaddr_in *)sa2)->sin_addr;
- len = 4;
- break;
- case AF_INET6:
- p1 = &((struct sockaddr_in6 *)sa1)->sin6_addr;
- p2 = &((struct sockaddr_in6 *)sa2)->sin6_addr;
- len = 16;
- if (((struct sockaddr_in6 *)sa1)->sin6_scope_id !=
- ((struct sockaddr_in6 *)sa2)->sin6_scope_id)
- return 1;
- break;
- default:
- return 1;
- }
-
- return memcmp(p1, p2, len);
-}
-
-/*
- * Scan for a host match in a directory tree.
- */
-static int
-chk_host(dp, saddr, defsetp, hostsetp)
- struct dirlist *dp;
- struct sockaddr *saddr;
- int *defsetp;
- int *hostsetp;
-{
- struct hostlist *hp;
- struct grouplist *grp;
- struct addrinfo *ai;
-
- if (dp) {
- if (dp->dp_flag & DP_DEFSET)
- *defsetp = dp->dp_flag;
- hp = dp->dp_hosts;
- while (hp) {
- grp = hp->ht_grp;
- switch (grp->gr_type) {
- case GT_HOST:
- ai = grp->gr_ptr.gt_addrinfo;
- for (; ai; ai = ai->ai_next) {
- if (!sacmp(ai->ai_addr, saddr)) {
- *hostsetp =
- (hp->ht_flag | DP_HOSTSET);
- return (1);
- }
- }
- break;
- case GT_NET:
- if (!netpartcmp(saddr,
- (struct sockaddr *)
- &grp->gr_ptr.gt_net.nt_net,
- grp->gr_ptr.gt_net.nt_len)) {
- *hostsetp = (hp->ht_flag | DP_HOSTSET);
- return (1);
- }
- break;
- };
- hp = hp->ht_next;
- }
- }
- return (0);
-}
-
-/*
- * Scan tree for a host that matches the address.
- */
-static int
-scan_tree(dp, saddr)
- struct dirlist *dp;
- struct sockaddr *saddr;
-{
- int defset, hostset;
-
- if (dp) {
- if (scan_tree(dp->dp_left, saddr))
- return (1);
- if (chk_host(dp, saddr, &defset, &hostset))
- return (1);
- if (scan_tree(dp->dp_right, saddr))
- return (1);
- }
- return (0);
-}
-
-/*
- * Traverse the dirlist tree and free it up.
- */
-static void
-free_dir(dp)
- struct dirlist *dp;
-{
-
- if (dp) {
- free_dir(dp->dp_left);
- free_dir(dp->dp_right);
- free_host(dp->dp_hosts);
- free(dp);
- }
-}
-
-/*
- * Parse the option string and update fields.
- * Option arguments may either be -<option>=<value> or
- * -<option> <value>
- */
-static int
-do_opt(line, lineno, cpp, endcpp, ep, grp, has_hostp, exflagsp, cr)
- const char *line;
- size_t lineno;
- char **cpp, **endcpp;
- struct exportlist *ep;
- struct grouplist *grp;
- int *has_hostp;
- int *exflagsp;
- struct uucred *cr;
-{
- char *cpoptarg, *cpoptend;
- char *cp, *cpopt, savedc, savedc2;
- char *endcp = NULL; /* XXX: GCC */
- int allflag, usedarg;
-
- cpopt = *cpp;
- cpopt++;
- cp = *endcpp;
- savedc = *cp;
- *cp = '\0';
- while (cpopt && *cpopt) {
- allflag = 1;
- usedarg = -2;
- savedc2 = '\0';
- if ((cpoptend = strchr(cpopt, ',')) != NULL) {
- *cpoptend++ = '\0';
- if ((cpoptarg = strchr(cpopt, '=')) != NULL)
- *cpoptarg++ = '\0';
- } else {
- if ((cpoptarg = strchr(cpopt, '=')) != NULL)
- *cpoptarg++ = '\0';
- else {
- *cp = savedc;
- nextfield(&cp, &endcp);
- **endcpp = '\0';
- if (endcp > cp && *cp != '-') {
- cpoptarg = cp;
- savedc2 = *endcp;
- *endcp = '\0';
- usedarg = 0;
- }
- }
- }
- if (!strcmp(cpopt, "ro") || !strcmp(cpopt, "o")) {
- *exflagsp |= MNT_EXRDONLY;
- } else if (cpoptarg && (!strcmp(cpopt, "maproot") ||
- !(allflag = strcmp(cpopt, "mapall")) ||
- !strcmp(cpopt, "root") || !strcmp(cpopt, "r"))) {
- usedarg++;
- parsecred(cpoptarg, cr);
- if (allflag == 0) {
- *exflagsp |= MNT_EXPORTANON;
- opt_flags |= OP_MAPALL;
- } else
- opt_flags |= OP_MAPROOT;
- } else if (!strcmp(cpopt, "kerb") || !strcmp(cpopt, "k")) {
- *exflagsp |= MNT_EXKERB;
- opt_flags |= OP_KERB;
- } else if (cpoptarg && (!strcmp(cpopt, "mask") ||
- !strcmp(cpopt, "m"))) {
- if (get_net(cpoptarg, &grp->gr_ptr.gt_net, 1)) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad mask: %s",
- line, (unsigned long)lineno, cpoptarg);
- return (1);
- }
- usedarg++;
- opt_flags |= OP_MASK;
- } else if (cpoptarg && (!strcmp(cpopt, "network") ||
- !strcmp(cpopt, "n"))) {
- if (strchr(cpoptarg, '/') != NULL) {
- if (debug)
- fprintf(stderr, "setting OP_MASKLEN\n");
- opt_flags |= OP_MASKLEN;
- }
- if (grp->gr_type != GT_NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Network/host conflict",
- line, (unsigned long)lineno);
- return (1);
- } else if (get_net(cpoptarg, &grp->gr_ptr.gt_net, 0)) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad net: %s",
- line, (unsigned long)lineno, cpoptarg);
- return (1);
- }
- grp->gr_type = GT_NET;
- *has_hostp = 1;
- usedarg++;
- opt_flags |= OP_NET;
- } else if (!strcmp(cpopt, "alldirs")) {
- opt_flags |= OP_ALLDIRS;
- } else if (!strcmp(cpopt, "noresvmnt")) {
- opt_flags |= OP_NORESMNT;
- } else if (!strcmp(cpopt, "noresvport")) {
- opt_flags |= OP_NORESPORT;
- *exflagsp |= MNT_EXNORESPORT;
- } else if (!strcmp(cpopt, "public")) {
- *exflagsp |= (MNT_EXNORESPORT | MNT_EXPUBLIC);
- opt_flags |= OP_NORESPORT;
- } else if (!strcmp(cpopt, "webnfs")) {
- *exflagsp |= (MNT_EXNORESPORT | MNT_EXPUBLIC |
- MNT_EXRDONLY | MNT_EXPORTANON);
- opt_flags |= (OP_MAPALL | OP_NORESPORT);
- } else if (cpoptarg && !strcmp(cpopt, "index")) {
- ep->ex_indexfile = strdup(cpoptarg);
- } else {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad opt %s",
- line, (unsigned long)lineno, cpopt);
- return (1);
- }
- if (usedarg >= 0) {
- *endcp = savedc2;
- **endcpp = savedc;
- if (usedarg > 0) {
- *cpp = cp;
- *endcpp = endcp;
- }
- return (0);
- }
- cpopt = cpoptend;
- }
- **endcpp = savedc;
- return (0);
-}
-
-/*
- * Translate a character string to the corresponding list of network
- * addresses for a hostname.
- */
-static int
-get_host(line, lineno, cp, grp)
- const char *line;
- size_t lineno;
- const char *cp;
- struct grouplist *grp;
-{
- struct addrinfo *ai, hints;
- int ecode;
- char host[NI_MAXHOST];
-
- if (grp->gr_type != GT_NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad netgroup type for ip host %s",
- line, (unsigned long)lineno, cp);
- return (1);
- }
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_CANONNAME;
- hints.ai_protocol = IPPROTO_UDP;
- ecode = getaddrinfo(cp, NULL, &hints, &ai);
- if (ecode != 0) {
- syslog(LOG_ERR, "\"%s\", line %ld: can't get address info for "
- "host %s",
- line, (long)lineno, cp);
- return 1;
- }
- grp->gr_type = GT_HOST;
- grp->gr_ptr.gt_addrinfo = ai;
- while (ai != NULL) {
- if (ai->ai_canonname == NULL) {
- if (getnameinfo(ai->ai_addr, ai->ai_addrlen, host,
- sizeof host, NULL, 0, ninumeric) != 0)
- strlcpy(host, "?", sizeof(host));
- ai->ai_canonname = estrdup(host);
- ai->ai_flags |= AI_CANONNAME;
- } else
- ai->ai_flags &= ~AI_CANONNAME;
- if (debug)
- (void)fprintf(stderr, "got host %s\n", ai->ai_canonname);
- ai = ai->ai_next;
- }
- return (0);
-}
-
-/*
- * Free up an exports list component
- */
-static void
-free_exp(ep)
- struct exportlist *ep;
-{
-
- if (ep->ex_defdir) {
- free_host(ep->ex_defdir->dp_hosts);
- free(ep->ex_defdir);
- }
- if (ep->ex_fsdir)
- free(ep->ex_fsdir);
- if (ep->ex_indexfile)
- free(ep->ex_indexfile);
- free_dir(ep->ex_dirl);
- free(ep);
-}
-
-/*
- * Free hosts.
- */
-static void
-free_host(hp)
- struct hostlist *hp;
-{
- struct hostlist *hp2;
-
- while (hp) {
- hp2 = hp;
- hp = hp->ht_next;
- free(hp2);
- }
-}
-
-static struct hostlist *
-get_ht()
-{
- struct hostlist *hp;
-
- hp = emalloc(sizeof(struct hostlist));
- hp->ht_next = NULL;
- hp->ht_flag = 0;
- return (hp);
-}
-
-/*
- * Do the nfssvc syscall to push the export info into the kernel.
- */
-static int
-do_nfssvc(line, lineno, ep, grp, exflags, anoncrp, dirp, dirplen, fsb)
- const char *line;
- size_t lineno;
- struct exportlist *ep;
- struct grouplist *grp;
- int exflags;
- struct uucred *anoncrp;
- char *dirp;
- int dirplen;
- struct statvfs *fsb;
-{
- struct sockaddr *addrp;
- struct sockaddr_storage ss;
- struct addrinfo *ai;
- int addrlen;
- int done;
- struct export_args export;
-
- export.ex_flags = exflags;
- export.ex_anon = *anoncrp;
- export.ex_indexfile = ep->ex_indexfile;
- if (grp->gr_type == GT_HOST) {
- ai = grp->gr_ptr.gt_addrinfo;
- addrp = ai->ai_addr;
- addrlen = ai->ai_addrlen;
- } else {
- addrp = NULL;
- ai = NULL; /* XXXGCC -Wuninitialized */
- addrlen = 0; /* XXXGCC -Wuninitialized */
- }
- done = FALSE;
- while (!done) {
- struct mountd_exports_list mel;
-
- switch (grp->gr_type) {
- case GT_HOST:
- if (addrp != NULL && addrp->sa_family == AF_INET6 &&
- have_v6 == 0)
- goto skip;
- export.ex_addr = addrp;
- export.ex_addrlen = addrlen;
- export.ex_masklen = 0;
- break;
- case GT_NET:
- export.ex_addr = (struct sockaddr *)
- &grp->gr_ptr.gt_net.nt_net;
- if (export.ex_addr->sa_family == AF_INET6 &&
- have_v6 == 0)
- goto skip;
- export.ex_addrlen = export.ex_addr->sa_len;
- memset(&ss, 0, sizeof ss);
- ss.ss_family = export.ex_addr->sa_family;
- ss.ss_len = export.ex_addr->sa_len;
- if (allones(&ss, grp->gr_ptr.gt_net.nt_len) != 0) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad network flag",
- line, (unsigned long)lineno);
- return (1);
- }
- export.ex_mask = (struct sockaddr *)&ss;
- export.ex_masklen = ss.ss_len;
- break;
- default:
- syslog(LOG_ERR, "\"%s\", line %ld: Bad netgroup type",
- line, (unsigned long)lineno);
- return (1);
- };
-
- /*
- * XXX:
- * Maybe I should just use the fsb->f_mntonname path?
- */
-
- mel.mel_path = dirp;
- mel.mel_nexports = 1;
- mel.mel_exports = &export;
-
- if (rump_sys_nfssvc(NFSSVC_SETEXPORTSLIST, &mel) != 0) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Can't change attributes for %s to %s: %m %d",
- line, (unsigned long)lineno,
- dirp, (grp->gr_type == GT_HOST) ?
- grp->gr_ptr.gt_addrinfo->ai_canonname :
- (grp->gr_type == GT_NET) ?
- grp->gr_ptr.gt_net.nt_name :
- "Unknown", errno);
- return (1);
- }
-skip:
- if (addrp) {
- ai = ai->ai_next;
- if (ai == NULL)
- done = TRUE;
- else {
- addrp = ai->ai_addr;
- addrlen = ai->ai_addrlen;
- }
- } else
- done = TRUE;
- }
- return (0);
-}
-
-/*
- * Translate a net address.
- */
-static int
-get_net(cp, net, maskflg)
- char *cp;
- struct netmsk *net;
- int maskflg;
-{
- struct netent *np;
- char *thename, *p, *prefp;
- struct sockaddr_in sin, *sinp;
- struct sockaddr *sa;
- struct addrinfo hints, *ai = NULL;
- char netname[NI_MAXHOST];
- long preflen;
- int ecode;
-
- (void)memset(&sin, 0, sizeof(sin));
- if ((opt_flags & OP_MASKLEN) && !maskflg) {
- p = strchr(cp, '/');
- *p = '\0';
- prefp = p + 1;
- } else {
- p = NULL; /* XXXGCC -Wuninitialized */
- prefp = NULL; /* XXXGCC -Wuninitialized */
- }
-
- if ((np = getnetbyname(cp)) != NULL) {
- sin.sin_family = AF_INET;
- sin.sin_len = sizeof sin;
- sin.sin_addr = inet_makeaddr(np->n_net, 0);
- sa = (struct sockaddr *)&sin;
- } else if (isdigit((unsigned char)*cp)) {
- memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_UNSPEC;
- hints.ai_flags = AI_NUMERICHOST;
- if (getaddrinfo(cp, NULL, &hints, &ai) != 0) {
- /*
- * If getaddrinfo() failed, try the inet4 network
- * notation with less than 3 dots.
- */
- sin.sin_family = AF_INET;
- sin.sin_len = sizeof sin;
- sin.sin_addr = inet_makeaddr(inet_network(cp),0);
- if (debug)
- fprintf(stderr, "get_net: v4 addr %x\n",
- sin.sin_addr.s_addr);
- sa = (struct sockaddr *)&sin;
- } else
- sa = ai->ai_addr;
- } else if (isxdigit((unsigned char)*cp) || *cp == ':') {
- memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_UNSPEC;
- hints.ai_flags = AI_NUMERICHOST;
- if (getaddrinfo(cp, NULL, &hints, &ai) == 0)
- sa = ai->ai_addr;
- else
- goto fail;
- } else
- goto fail;
-
- /*
- * Only allow /pref notation for v6 addresses.
- */
- if (sa->sa_family == AF_INET6 && (!(opt_flags & OP_MASKLEN) || maskflg))
- return 1;
-
- ecode = getnameinfo(sa, sa->sa_len, netname, sizeof netname,
- NULL, 0, ninumeric);
- if (ecode != 0)
- goto fail;
-
- if (maskflg)
- net->nt_len = countones(sa);
- else {
- if (opt_flags & OP_MASKLEN) {
- errno = 0;
- preflen = strtol(prefp, NULL, 10);
- if (preflen == LONG_MIN && errno == ERANGE)
- goto fail;
- net->nt_len = (int)preflen;
- *p = '/';
- }
-
- if (np)
- thename = np->n_name;
- else {
- if (getnameinfo(sa, sa->sa_len, netname, sizeof netname,
- NULL, 0, ninumeric) != 0)
- strlcpy(netname, "?", sizeof(netname));
- thename = netname;
- }
- net->nt_name = estrdup(thename);
- memcpy(&net->nt_net, sa, sa->sa_len);
- }
-
- if (!maskflg && sa->sa_family == AF_INET &&
- !(opt_flags & (OP_MASK|OP_MASKLEN))) {
- sinp = (struct sockaddr_in *)sa;
- if (IN_CLASSA(sinp->sin_addr.s_addr))
- net->nt_len = 8;
- else if (IN_CLASSB(sinp->sin_addr.s_addr))
- net->nt_len = 16;
- else if (IN_CLASSC(sinp->sin_addr.s_addr))
- net->nt_len = 24;
- else if (IN_CLASSD(sinp->sin_addr.s_addr))
- net->nt_len = 28;
- else
- net->nt_len = 32; /* XXX */
- }
-
- if (ai)
- freeaddrinfo(ai);
- return 0;
-
-fail:
- if (ai)
- freeaddrinfo(ai);
- return 1;
-}
-
-/*
- * Parse out the next white space separated field
- */
-static void
-nextfield(cp, endcp)
- char **cp;
- char **endcp;
-{
- char *p;
-
- p = *cp;
- while (*p == ' ' || *p == '\t')
- p++;
- if (*p == '\n' || *p == '\0')
- *cp = *endcp = p;
- else {
- *cp = p++;
- while (*p != ' ' && *p != '\t' && *p != '\n' && *p != '\0')
- p++;
- *endcp = p;
- }
-}
-
-/*
- * Parse a description of a credential.
- */
-static void
-parsecred(namelist, cr)
- char *namelist;
- struct uucred *cr;
-{
- char *thename;
- int cnt;
- char *names;
- struct passwd *pw;
- struct group *gr;
- int ngroups;
- gid_t grps[NGROUPS + 1];
-
- /*
- * Set up the unprivileged user.
- */
- *cr = def_anon;
- /*
- * Get the user's password table entry.
- */
- names = strsep(&namelist, " \t\n");
- thename = strsep(&names, ":");
- if (isdigit((unsigned char)*thename) || *thename == '-')
- pw = getpwuid(atoi(thename));
- else
- pw = getpwnam(thename);
- /*
- * Credentials specified as those of a user.
- */
- if (names == NULL) {
- if (pw == NULL) {
- syslog(LOG_ERR, "Unknown user: %s", thename);
- return;
- }
- cr->cr_uid = pw->pw_uid;
- ngroups = NGROUPS + 1;
- if (getgrouplist(pw->pw_name, pw->pw_gid, grps, &ngroups))
- syslog(LOG_ERR, "Too many groups for user %s", thename);
- /*
- * Convert from int's to gid_t's and compress out duplicate
- */
- cr->cr_ngroups = ngroups - 1;
- cr->cr_gid = grps[0];
- for (cnt = 1; cnt < ngroups; cnt++)
- cr->cr_groups[cnt - 1] = grps[cnt];
- return;
- }
- /*
- * Explicit credential specified as a colon separated list:
- * uid:gid:gid:...
- */
- if (pw != NULL)
- cr->cr_uid = pw->pw_uid;
- else if (isdigit((unsigned char)*thename) || *thename == '-')
- cr->cr_uid = atoi(thename);
- else {
- syslog(LOG_ERR, "Unknown user: %s", thename);
- return;
- }
- cr->cr_ngroups = 0;
- while (names != NULL && *names != '\0' && cr->cr_ngroups < NGROUPS) {
- thename = strsep(&names, ":");
- if (isdigit((unsigned char)*thename) || *thename == '-') {
- cr->cr_groups[cr->cr_ngroups++] = atoi(thename);
- } else {
- if ((gr = getgrnam(thename)) == NULL) {
- syslog(LOG_ERR, "Unknown group: %s", thename);
- continue;
- }
- cr->cr_groups[cr->cr_ngroups++] = gr->gr_gid;
- }
- }
- if (names != NULL && *names != '\0' && cr->cr_ngroups == NGROUPS)
- syslog(LOG_ERR, "Too many groups");
-}
-
-#define STRSIZ (RPCMNT_NAMELEN+RPCMNT_PATHLEN+50)
-/*
- * Routines that maintain the remote mounttab
- */
-static void
-get_mountlist()
-{
- struct mountlist *mlp, **mlpp;
- char *host, *dirp, *cp;
- char str[STRSIZ];
- FILE *mlfile;
-
- if ((mlfile = rumpfopen(_PATH_RMOUNTLIST, "r")) == NULL) {
- syslog(LOG_ERR, "Can't open %s: %m", _PATH_RMOUNTLIST);
- return;
- }
- mlpp = &mlhead;
- while (fgets(str, STRSIZ, mlfile) != NULL) {
- cp = str;
- host = strsep(&cp, " \t\n");
- dirp = strsep(&cp, " \t\n");
- if (host == NULL || dirp == NULL)
- continue;
- mlp = emalloc(sizeof(*mlp));
- (void)strncpy(mlp->ml_host, host, RPCMNT_NAMELEN);
- mlp->ml_host[RPCMNT_NAMELEN] = '\0';
- (void)strncpy(mlp->ml_dirp, dirp, RPCMNT_PATHLEN);
- mlp->ml_dirp[RPCMNT_PATHLEN] = '\0';
- mlp->ml_next = NULL;
- *mlpp = mlp;
- mlpp = &mlp->ml_next;
- }
- (void)fclose(mlfile);
-}
-
-static int
-del_mlist(hostp, dirp, saddr)
- char *hostp, *dirp;
- struct sockaddr *saddr;
-{
- struct mountlist *mlp, **mlpp;
- struct mountlist *mlp2;
- u_short sport;
- FILE *mlfile;
- int fnd = 0, ret = 0;
- char host[NI_MAXHOST];
-
- switch (saddr->sa_family) {
- case AF_INET6:
- sport = ntohs(((struct sockaddr_in6 *)saddr)->sin6_port);
- break;
- case AF_INET:
- sport = ntohs(((struct sockaddr_in *)saddr)->sin_port);
- break;
- default:
- return -1;
- }
- mlpp = &mlhead;
- mlp = mlhead;
- while (mlp) {
- if (!strcmp(mlp->ml_host, hostp) &&
- (!dirp || !strcmp(mlp->ml_dirp, dirp))) {
- if (!(mlp->ml_flag & DP_NORESMNT) &&
- sport >= IPPORT_RESERVED) {
- if (getnameinfo(saddr, saddr->sa_len, host,
- sizeof host, NULL, 0, ninumeric) != 0)
- strlcpy(host, "?", sizeof(host));
- syslog(LOG_NOTICE,
- "Umount request for %s:%s from %s refused\n",
- mlp->ml_host, mlp->ml_dirp, host);
- ret = -1;
- goto cont;
- }
- fnd = 1;
- mlp2 = mlp;
- *mlpp = mlp = mlp->ml_next;
- free(mlp2);
- } else {
-cont:
- mlpp = &mlp->ml_next;
- mlp = mlp->ml_next;
- }
- }
- if (fnd) {
- if ((mlfile = rumpfopen(_PATH_RMOUNTLIST, "w")) == NULL) {
- syslog(LOG_ERR, "Can't update %s: %m",
- _PATH_RMOUNTLIST);
- return ret;
- }
- mlp = mlhead;
- while (mlp) {
- (void)fprintf(mlfile, "%s %s\n", mlp->ml_host,
- mlp->ml_dirp);
- mlp = mlp->ml_next;
- }
- (void)fclose(mlfile);
- }
- return ret;
-}
-
-static void
-add_mlist(hostp, dirp, flags)
- char *hostp, *dirp;
- int flags;
-{
- struct mountlist *mlp, **mlpp;
- FILE *mlfile;
-
- mlpp = &mlhead;
- mlp = mlhead;
- while (mlp) {
- if (!strcmp(mlp->ml_host, hostp) && !strcmp(mlp->ml_dirp, dirp))
- return;
- mlpp = &mlp->ml_next;
- mlp = mlp->ml_next;
- }
- mlp = emalloc(sizeof(*mlp));
- strncpy(mlp->ml_host, hostp, RPCMNT_NAMELEN);
- mlp->ml_host[RPCMNT_NAMELEN] = '\0';
- strncpy(mlp->ml_dirp, dirp, RPCMNT_PATHLEN);
- mlp->ml_dirp[RPCMNT_PATHLEN] = '\0';
- mlp->ml_flag = flags;
- mlp->ml_next = NULL;
- *mlpp = mlp;
- if ((mlfile = rumpfopen(_PATH_RMOUNTLIST, "a")) == NULL) {
- syslog(LOG_ERR, "Can't update %s: %m", _PATH_RMOUNTLIST);
- return;
- }
- (void)fprintf(mlfile, "%s %s\n", mlp->ml_host, mlp->ml_dirp);
- (void)fclose(mlfile);
-}
-
-/*
- * This function is called via. SIGTERM when the system is going down.
- * It sends a broadcast RPCMNT_UMNTALL.
- */
-/* ARGSUSED */
-static void
-send_umntall(n)
- int n;
-{
-#if 0
- (void)clnt_broadcast(RPCPROG_MNT, RPCMNT_VER1, RPCMNT_UMNTALL,
- xdr_void, NULL, xdr_void, NULL, (resultproc_t)umntall_each);
-#endif
- exit(0);
-}
-
-#if 0
-static int
-umntall_each(resultsp, raddr)
- caddr_t resultsp;
- struct sockaddr_in *raddr;
-{
- return (1);
-}
-#endif
-
-/*
- * Free up a group list.
- */
-static void
-free_grp(grp)
- struct grouplist *grp;
-{
-
- if (grp->gr_type == GT_HOST) {
- if (grp->gr_ptr.gt_addrinfo != NULL)
- freeaddrinfo(grp->gr_ptr.gt_addrinfo);
- } else if (grp->gr_type == GT_NET) {
- if (grp->gr_ptr.gt_net.nt_name)
- free(grp->gr_ptr.gt_net.nt_name);
- }
- free(grp);
-}
-
-#if 0
-static void
-SYSLOG(int pri, const char *fmt,...)
-{
- va_list ap;
-
- va_start(ap, fmt);
-
- if (debug)
- vfprintf(stderr, fmt, ap);
- else
- vsyslog(pri, fmt, ap);
-
- va_end(ap);
-}
-#endif
-
-/*
- * Check options for consistency.
- */
-static int
-check_options(line, lineno, dp)
- const char *line;
- size_t lineno;
- struct dirlist *dp;
-{
-
- if (dp == NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: missing directory list",
- line, (unsigned long)lineno);
- return (1);
- }
- if ((opt_flags & (OP_MAPROOT|OP_MAPALL)) == (OP_MAPROOT|OP_MAPALL) ||
- (opt_flags & (OP_MAPROOT|OP_KERB)) == (OP_MAPROOT|OP_KERB) ||
- (opt_flags & (OP_MAPALL|OP_KERB)) == (OP_MAPALL|OP_KERB)) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: -mapall, -maproot and -kerb mutually exclusive",
- line, (unsigned long)lineno);
- return (1);
- }
- if ((opt_flags & OP_MASK) && (opt_flags & OP_NET) == 0) {
- syslog(LOG_ERR, "\"%s\", line %ld: -mask requires -net",
- line, (unsigned long)lineno);
- return (1);
- }
- if ((opt_flags & OP_MASK) && (opt_flags & OP_MASKLEN) != 0) {
- syslog(LOG_ERR, "\"%s\", line %ld: /pref and -mask mutually"
- " exclusive",
- line, (unsigned long)lineno);
- return (1);
- }
- if ((opt_flags & OP_ALLDIRS) && dp->dp_left) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: -alldirs has multiple directories",
- line, (unsigned long)lineno);
- return (1);
- }
- return (0);
-}
-
-/*
- * Check an absolute directory path for any symbolic links. Return true
- * if no symbolic links are found.
- */
-static int
-check_dirpath(line, lineno, dirp)
- const char *line;
- size_t lineno;
- char *dirp;
-{
- char *cp;
- struct stat sb;
- char *file = "";
-
- for (cp = dirp + 1; *cp; cp++) {
- if (*cp == '/') {
- *cp = '\0';
- if (rump_sys_lstat(dirp, &sb) == -1)
- goto bad;
- if (!S_ISDIR(sb.st_mode))
- goto bad1;
- *cp = '/';
- }
- }
-
- cp = NULL;
- if (rump_sys_lstat(dirp, &sb) == -1)
- goto bad;
-
- if (!S_ISDIR(sb.st_mode) && !S_ISREG(sb.st_mode)) {
- file = " file or a";
- goto bad1;
- }
-
- return 1;
-
-bad:
- syslog(LOG_ERR,
- "\"%s\", line %ld: lstat for `%s' failed: %m",
- line, (unsigned long)lineno, dirp);
- if (cp)
- *cp = '/';
- return 0;
-
-bad1:
- syslog(LOG_ERR,
- "\"%s\", line %ld: `%s' is not a%s directory",
- line, (unsigned long)lineno, dirp, file);
- abort();
- if (cp)
- *cp = '/';
- return 0;
-}
-
-static void
-bind_resv_port(int sock, sa_family_t family, in_port_t port)
-{
- struct sockaddr *sa;
- struct sockaddr_in sasin;
- struct sockaddr_in6 sasin6;
-
- switch (family) {
- case AF_INET:
- (void)memset(&sasin, 0, sizeof(sasin));
- sasin.sin_len = sizeof(sasin);
- sasin.sin_family = family;
- sasin.sin_port = htons(port);
- sa = (struct sockaddr *)(void *)&sasin;
- break;
- case AF_INET6:
- (void)memset(&sasin6, 0, sizeof(sasin6));
- sasin6.sin6_len = sizeof(sasin6);
- sasin6.sin6_family = family;
- sasin6.sin6_port = htons(port);
- sa = (struct sockaddr *)(void *)&sasin6;
- break;
- default:
- syslog(LOG_ERR, "Unsupported address family %d", family);
- return;
- }
- if (bindresvport_sa(sock, sa) == -1)
- syslog(LOG_ERR, "Cannot bind to reserved port %d (%m)", port);
-}
-
-/* ARGSUSED */
-static void
-no_nfs(int sig)
-{
- syslog(LOG_ERR, "kernel NFS support not present; exiting");
- exit(1);
-}
diff --git a/contrib/netbsd-tests/fs/nfs/nfsservice/nfsd.c b/contrib/netbsd-tests/fs/nfs/nfsservice/nfsd.c
deleted file mode 100644
index b062501..0000000
--- a/contrib/netbsd-tests/fs/nfs/nfsservice/nfsd.c
+++ /dev/null
@@ -1,571 +0,0 @@
-/* $NetBSD: nfsd.c,v 1.4 2013/10/19 17:45:00 christos Exp $ */
-
-/*
- * Copyright (c) 1989, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Rick Macklem at The University of Guelph.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1989, 1993, 1994\
- The Regents of the University of California. All rights reserved.");
-#endif /* not lint */
-
-#ifndef lint
-#if 0
-static char sccsid[] = "@(#)nfsd.c 8.9 (Berkeley) 3/29/95";
-#else
-__RCSID("$NetBSD: nfsd.c,v 1.4 2013/10/19 17:45:00 christos Exp $");
-#endif
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <sys/uio.h>
-#include <sys/ucred.h>
-#include <sys/mount.h>
-#include <sys/socket.h>
-#include <sys/socketvar.h>
-#include <poll.h>
-
-#include <rpc/rpc.h>
-#include <rpc/pmap_clnt.h>
-#include <rpc/pmap_prot.h>
-
-#include <nfs/rpcv2.h>
-#include <nfs/nfsproto.h>
-#include <nfs/nfs.h>
-
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include <netdb.h>
-
-#include <rump/rump.h>
-#include <rump/rump_syscalls.h>
-
-/* Global defs */
-#ifdef DEBUG
-#define syslog(e, s, args...) \
-do { \
- fprintf(stderr,(s), ## args); \
- fprintf(stderr, "\n"); \
-} while (/*CONSTCOND*/0)
-int debug = 1;
-#else
-int debug = 0;
-#endif
-
-int main __P((int, char **));
-void nonfs __P((int));
-void usage __P((void));
-
-static void *
-child(void *arg)
-{
- struct nfsd_srvargs nsd;
- int nfssvc_flag;
-
- nfssvc_flag = NFSSVC_NFSD;
- memset(&nsd, 0, sizeof(nsd));
- while (rump_sys_nfssvc(nfssvc_flag, &nsd) < 0) {
- if (errno != ENEEDAUTH) {
- syslog(LOG_ERR, "nfssvc: %m %d", errno);
- exit(1);
- }
- nfssvc_flag = NFSSVC_NFSD | NFSSVC_AUTHINFAIL;
- }
-
- return NULL;
-}
-
-/*
- * Nfs server daemon mostly just a user context for nfssvc()
- *
- * 1 - do file descriptor and signal cleanup
- * 2 - create the nfsd thread(s)
- * 3 - create server socket(s)
- * 4 - register socket with portmap
- *
- * For connectionless protocols, just pass the socket into the kernel via
- * nfssvc().
- * For connection based sockets, loop doing accepts. When you get a new
- * socket from accept, pass the msgsock into the kernel via nfssvc().
- * The arguments are:
- * -c - support iso cltp clients
- * -r - reregister with portmapper
- * -t - support tcp nfs clients
- * -u - support udp nfs clients
- * followed by "n" which is the number of nfsd threads to create
- */
-int nfsd_main(int, char**);
-int
-nfsd_main(argc, argv)
- int argc;
- char *argv[];
-{
- struct nfsd_args nfsdargs;
- struct addrinfo *ai_udp, *ai_tcp, *ai_udp6, *ai_tcp6, hints;
- struct netconfig *nconf_udp, *nconf_tcp, *nconf_udp6, *nconf_tcp6;
- struct netbuf nb_udp, nb_tcp, nb_udp6, nb_tcp6;
- struct sockaddr_in inetpeer;
- struct pollfd set[4];
- socklen_t len;
- int ch, connect_type_cnt, i, msgsock;
- int nfsdcnt, on = 1, reregister, sock, tcpflag, tcpsock;
- int tcp6sock, ip6flag;
- int tp4cnt, tp4flag, tpipcnt, udpflag, ecode, s;
- int error = 0;
-
-#define DEFNFSDCNT 4
- nfsdcnt = DEFNFSDCNT;
- reregister = tcpflag = tp4cnt = tp4flag = tpipcnt = 0;
- udpflag = ip6flag = 0;
- nconf_udp = nconf_tcp = nconf_udp6 = nconf_tcp6 = NULL;
- tcpsock = tcp6sock = -1;
-#define GETOPT "6n:rtu"
-#define USAGE "[-rtu] [-n num_servers]"
- while ((ch = getopt(argc, argv, GETOPT)) != -1) {
- switch (ch) {
- case '6':
- ip6flag = 1;
- s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
- if (s < 0 && (errno == EPROTONOSUPPORT ||
- errno == EPFNOSUPPORT || errno == EAFNOSUPPORT))
- ip6flag = 0;
- else
- close(s);
- break;
- case 'n':
- nfsdcnt = atoi(optarg);
- if (nfsdcnt < 1) {
- warnx("nfsd count %d; reset to %d", nfsdcnt, DEFNFSDCNT);
- nfsdcnt = DEFNFSDCNT;
- }
- break;
- case 'r':
- reregister = 1;
- break;
- case 't':
- tcpflag = 1;
- break;
- case 'u':
- udpflag = 1;
- break;
- default:
- case '?':
- usage();
- };
- }
- argv += optind;
- argc -= optind;
-
- /*
- * XXX
- * Backward compatibility, trailing number is the count of daemons.
- */
- if (argc > 1)
- usage();
- if (argc == 1) {
- nfsdcnt = atoi(argv[0]);
- if (nfsdcnt < 1) {
- warnx("nfsd count %d; reset to %d", nfsdcnt, DEFNFSDCNT);
- nfsdcnt = DEFNFSDCNT;
- }
- }
-
- /*
- * If none of TCP or UDP are specified, default to UDP only.
- */
- if (tcpflag == 0 && udpflag == 0)
- udpflag = 1;
-
- if (debug == 0) {
- fprintf(stderr, "non-debug not supported here\n");
- exit(1);
-
-#ifdef not_the_debug_man
- daemon(0, 0);
- (void)signal(SIGHUP, SIG_IGN);
- (void)signal(SIGINT, SIG_IGN);
- (void)signal(SIGQUIT, SIG_IGN);
- (void)signal(SIGSYS, nonfs);
-#endif
- }
-
- if (udpflag) {
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_PASSIVE;
- hints.ai_family = PF_INET;
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = IPPROTO_UDP;
-
- ecode = getaddrinfo(NULL, "nfs", &hints, &ai_udp);
- if (ecode != 0) {
- syslog(LOG_ERR, "getaddrinfo udp: %s",
- gai_strerror(ecode));
- exit(1);
- }
-
- nconf_udp = getnetconfigent("udp");
-
- if (nconf_udp == NULL)
- err(1, "getnetconfigent udp failed");
-
- nb_udp.buf = ai_udp->ai_addr;
- nb_udp.len = nb_udp.maxlen = ai_udp->ai_addrlen;
- if (reregister)
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_udp, &nb_udp))
- err(1, "rpcb_set udp failed");
- }
-
- if (tcpflag) {
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_PASSIVE;
- hints.ai_family = PF_INET;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = IPPROTO_TCP;
-
- ecode = getaddrinfo(NULL, "nfs", &hints, &ai_tcp);
- if (ecode != 0) {
- syslog(LOG_ERR, "getaddrinfo tcp: %s",
- gai_strerror(ecode));
- exit(1);
- }
-
- nconf_tcp = getnetconfigent("tcp");
-
- if (nconf_tcp == NULL)
- err(1, "getnetconfigent tcp failed");
-
- nb_tcp.buf = ai_tcp->ai_addr;
- nb_tcp.len = nb_tcp.maxlen = ai_tcp->ai_addrlen;
- if (reregister)
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_tcp, &nb_tcp))
- err(1, "rpcb_set tcp failed");
- }
-
- if (udpflag && ip6flag) {
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_PASSIVE;
- hints.ai_family = PF_INET6;
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = IPPROTO_UDP;
-
- ecode = getaddrinfo(NULL, "nfs", &hints, &ai_udp6);
- if (ecode != 0) {
- syslog(LOG_ERR, "getaddrinfo udp: %s",
- gai_strerror(ecode));
- exit(1);
- }
-
- nconf_udp6 = getnetconfigent("udp6");
-
- if (nconf_udp6 == NULL)
- err(1, "getnetconfigent udp6 failed");
-
- nb_udp6.buf = ai_udp6->ai_addr;
- nb_udp6.len = nb_udp6.maxlen = ai_udp6->ai_addrlen;
- if (reregister)
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_udp6, &nb_udp6))
- err(1, "rpcb_set udp6 failed");
- }
-
- if (tcpflag && ip6flag) {
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_PASSIVE;
- hints.ai_family = PF_INET6;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = IPPROTO_TCP;
-
- ecode = getaddrinfo(NULL, "nfs", &hints, &ai_tcp6);
- if (ecode != 0) {
- syslog(LOG_ERR, "getaddrinfo tcp: %s",
- gai_strerror(ecode));
- exit(1);
- }
-
- nconf_tcp6 = getnetconfigent("tcp6");
-
- if (nconf_tcp6 == NULL)
- err(1, "getnetconfigent tcp6 failed");
-
- nb_tcp6.buf = ai_tcp6->ai_addr;
- nb_tcp6.len = nb_tcp6.maxlen = ai_tcp6->ai_addrlen;
- if (reregister)
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_tcp6, &nb_tcp6))
- err(1, "rpcb_set tcp6 failed");
- }
-
- openlog("nfsd", LOG_PID, LOG_DAEMON);
-
- for (i = 0; i < nfsdcnt; i++) {
- pthread_t t;
- pthread_create(&t, NULL, child, NULL);
- }
-
- /* If we are serving udp, set up the socket. */
- if (udpflag) {
- if ((sock = rump_sys_socket(ai_udp->ai_family, ai_udp->ai_socktype,
- ai_udp->ai_protocol)) < 0) {
- syslog(LOG_ERR, "can't create udp socket");
- exit(1);
- }
- if (bind(sock, ai_udp->ai_addr, ai_udp->ai_addrlen) < 0) {
- syslog(LOG_ERR, "can't bind udp addr");
- exit(1);
- }
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_udp, &nb_udp) ||
- !rpcb_set(RPCPROG_NFS, 3, nconf_udp, &nb_udp)) {
- syslog(LOG_ERR, "can't register with udp portmap");
- exit(1);
- }
- nfsdargs.sock = sock;
- nfsdargs.name = NULL;
- nfsdargs.namelen = 0;
- if (rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs) < 0) {
- syslog(LOG_ERR, "can't add UDP socket");
- exit(1);
- }
- (void)rump_sys_close(sock);
- }
-
- if (udpflag &&ip6flag) {
- if ((sock = rump_sys_socket(ai_udp6->ai_family, ai_udp6->ai_socktype,
- ai_udp6->ai_protocol)) < 0) {
- syslog(LOG_ERR, "can't create udp socket");
- exit(1);
- }
- if (rump_sys_setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
- &on, sizeof on) < 0) {
- syslog(LOG_ERR, "can't set v6-only binding for udp6 "
- "socket: %m");
- exit(1);
- }
- if (rump_sys_bind(sock, ai_udp6->ai_addr, ai_udp6->ai_addrlen) < 0) {
- syslog(LOG_ERR, "can't bind udp addr");
- exit(1);
- }
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_udp6, &nb_udp6) ||
- !rpcb_set(RPCPROG_NFS, 3, nconf_udp6, &nb_udp6)) {
- syslog(LOG_ERR, "can't register with udp portmap");
- exit(1);
- }
- nfsdargs.sock = sock;
- nfsdargs.name = NULL;
- nfsdargs.namelen = 0;
- if (rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs) < 0) {
- syslog(LOG_ERR, "can't add UDP6 socket");
- exit(1);
- }
- (void)rump_sys_close(sock);
- }
-
- /* Now set up the master server socket waiting for tcp connections. */
- on = 1;
- connect_type_cnt = 0;
- if (tcpflag) {
- if ((tcpsock = rump_sys_socket(ai_tcp->ai_family, ai_tcp->ai_socktype,
- ai_tcp->ai_protocol)) < 0) {
- syslog(LOG_ERR, "can't create tcp socket");
- exit(1);
- }
- if (setsockopt(tcpsock,
- SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
- syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
- if (bind(tcpsock, ai_tcp->ai_addr, ai_tcp->ai_addrlen) < 0) {
- syslog(LOG_ERR, "can't bind tcp addr");
- exit(1);
- }
- if (rump_sys_listen(tcpsock, 5) < 0) {
- syslog(LOG_ERR, "listen failed");
- exit(1);
- }
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_tcp, &nb_tcp) ||
- !rpcb_set(RPCPROG_NFS, 3, nconf_tcp, &nb_tcp)) {
- syslog(LOG_ERR, "can't register tcp with rpcbind");
- exit(1);
- }
- set[0].fd = tcpsock;
- set[0].events = POLLIN;
- connect_type_cnt++;
- } else
- set[0].fd = -1;
-
- if (tcpflag && ip6flag) {
- if ((tcp6sock = socket(ai_tcp6->ai_family, ai_tcp6->ai_socktype,
- ai_tcp6->ai_protocol)) < 0) {
- syslog(LOG_ERR, "can't create tcp socket");
- exit(1);
- }
- if (setsockopt(tcp6sock,
- SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
- syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
- if (setsockopt(tcp6sock, IPPROTO_IPV6, IPV6_V6ONLY,
- &on, sizeof on) < 0) {
- syslog(LOG_ERR, "can't set v6-only binding for tcp6 "
- "socket: %m");
- exit(1);
- }
- if (bind(tcp6sock, ai_tcp6->ai_addr, ai_tcp6->ai_addrlen) < 0) {
- syslog(LOG_ERR, "can't bind tcp6 addr");
- exit(1);
- }
- if (listen(tcp6sock, 5) < 0) {
- syslog(LOG_ERR, "listen failed");
- exit(1);
- }
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_tcp6, &nb_tcp6) ||
- !rpcb_set(RPCPROG_NFS, 3, nconf_tcp6, &nb_tcp6)) {
- syslog(LOG_ERR, "can't register tcp6 with rpcbind");
- exit(1);
- }
- set[1].fd = tcp6sock;
- set[1].events = POLLIN;
- connect_type_cnt++;
- } else
- set[1].fd = -1;
-
- set[2].fd = -1;
- set[3].fd = -1;
-
- if (connect_type_cnt == 0) {
- pause();
- exit(0);
- }
-
- /*
- * Loop forever accepting connections and passing the sockets
- * into the kernel for the mounts.
- */
- for (;;) {
- if (rump_sys_poll(set, 4, INFTIM) < 1) {
- syslog(LOG_ERR, "poll failed: %m");
- exit(1);
- }
-
- len = sizeof(inetpeer);
- if ((msgsock = accept(tcpsock,
- (struct sockaddr *)&inetpeer, &len)) < 0) {
- syslog(LOG_ERR, "accept failed: %d", error);
- exit(1);
- }
- memset(inetpeer.sin_zero, 0, sizeof(inetpeer.sin_zero));
- if (setsockopt(msgsock, SOL_SOCKET,
- SO_KEEPALIVE, (char *)&on, sizeof(on)) < 0)
- syslog(LOG_ERR,
- "setsockopt SO_KEEPALIVE: %m");
- nfsdargs.sock = msgsock;
- nfsdargs.name = (caddr_t)&inetpeer;
- nfsdargs.namelen = sizeof(inetpeer);
- rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs);
- (void)rump_sys_close(msgsock);
-
-#ifdef notyet
- if (set[1].revents & POLLIN) {
- len = sizeof(inet6peer);
- if ((msgsock = rump_sys_accept(tcp6sock,
- (struct sockaddr *)&inet6peer, &len, &error)) < 0) {
- syslog(LOG_ERR, "accept failed: %m");
- exit(1);
- }
- if (rump_sys_setsockopt(msgsock, SOL_SOCKET,
- SO_KEEPALIVE, (char *)&on, sizeof(on), &error) < 0)
- syslog(LOG_ERR,
- "setsockopt SO_KEEPALIVE: %m");
- nfsdargs.sock = msgsock;
- nfsdargs.name = (caddr_t)&inet6peer;
- nfsdargs.namelen = sizeof(inet6peer);
- rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs, &error);
- (void)rump_sys_close(msgsock, &error);
- }
-
- if (set[2].revents & POLLIN) {
- len = sizeof(isopeer);
- if ((msgsock = rump_sys_accept(tp4sock,
- (struct sockaddr *)&isopeer, &len, &error)) < 0) {
- syslog(LOG_ERR, "accept failed: %m");
- exit(1);
- }
- if (rump_sys_setsockopt(msgsock, SOL_SOCKET,
- SO_KEEPALIVE, (char *)&on, sizeof(on), &error) < 0)
- syslog(LOG_ERR,
- "setsockopt SO_KEEPALIVE: %m");
- nfsdargs.sock = msgsock;
- nfsdargs.name = (caddr_t)&isopeer;
- nfsdargs.namelen = len;
- rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs, &error);
- (void)rump_sys_close(msgsock, &error);
- }
-
- if (set[3].revents & POLLIN) {
- len = sizeof(inetpeer);
- if ((msgsock = rump_sys_accept(tpipsock,
- (struct sockaddr *)&inetpeer, &len)) < 0) {
- syslog(LOG_ERR, "accept failed: %m");
- exit(1);
- }
- if (setsockopt(msgsock, SOL_SOCKET,
- SO_KEEPALIVE, (char *)&on, sizeof(on)) < 0)
- syslog(LOG_ERR, "setsockopt SO_KEEPALIVE: %m");
- nfsdargs.sock = msgsock;
- nfsdargs.name = (caddr_t)&inetpeer;
- nfsdargs.namelen = len;
- rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs);
- (void)rump_sys_close(msgsock);
- }
-#endif /* notyet */
- }
-}
-
-void
-usage()
-{
- (void)fprintf(stderr, "usage: nfsd %s\n", USAGE);
- exit(1);
-}
-
-void
-nonfs(signo)
- int signo;
-{
- syslog(LOG_ERR, "missing system call: NFS not available.");
-}
diff --git a/contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c b/contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c
index 337a06e..5f8e152 100644
--- a/contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c
+++ b/contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpnfsd.c,v 1.8 2014/05/12 15:31:07 christos Exp $ */
+/* $NetBSD: rumpnfsd.c,v 1.9 2015/11/08 02:45:16 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -37,6 +37,7 @@
#include <string.h>
#include <syslog.h>
#include <unistd.h>
+#include <rpc/rpc.h>
void *mountd_main(void *);
void *rpcbind_main(void *);
@@ -87,7 +88,7 @@ main(int argc, char *argv[])
}
rump_init();
- init_fdsets();
+ svc_fdset_init(SVC_FDSET_MT);
rv = rump_pub_etfs_register("/etc/exports", "./exports", RUMP_ETFS_REG);
if (rv) {
diff --git a/contrib/netbsd-tests/fs/nfs/t_rquotad.sh b/contrib/netbsd-tests/fs/nfs/t_rquotad.sh
index 05d34fb..dc9226c 100755
--- a/contrib/netbsd-tests/fs/nfs/t_rquotad.sh
+++ b/contrib/netbsd-tests/fs/nfs/t_rquotad.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_rquotad.sh,v 1.4 2014/03/13 12:45:14 gson Exp $
+# $NetBSD: t_rquotad.sh,v 1.5 2016/08/10 23:25:39 kre Exp $
#
# Copyright (c) 2011 Manuel Bouyer
# All rights reserved.
@@ -114,7 +114,7 @@ get_nfs_quota()
unset RUMPHIJACK
unset LD_PRELOAD
- atf_check -s exit:0 rump_server -lrumpvfs -lrumpnet \
+ atf_check -s exit:0 rump_server -lrumpvfs -lrumpnet -lrumpdev \
-lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpfs_nfs\
${RUMP_SERVER}
diff --git a/contrib/netbsd-tests/fs/psshfs/t_psshfs.sh b/contrib/netbsd-tests/fs/psshfs/t_psshfs.sh
index 241d46d..4d8fede 100755
--- a/contrib/netbsd-tests/fs/psshfs/t_psshfs.sh
+++ b/contrib/netbsd-tests/fs/psshfs/t_psshfs.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_psshfs.sh,v 1.7 2013/03/16 07:54:04 jmmv Exp $
+# $NetBSD: t_psshfs.sh,v 1.8 2016/09/05 08:53:57 christos Exp $
#
# Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -262,6 +262,26 @@ setattr_cache_cleanup() {
stop_ssh
}
+atf_test_case read_empty_file cleanup
+read_empty_file_head() {
+ atf_set "descr" "Checks whether an empty file can be read"
+ # This test is supposed to make sure psshfs does not hang
+ # when reading from an empty file, hence the timeout.
+ atf_set "timeout" 8
+}
+read_empty_file_body() {
+ require_puffs
+ start_ssh
+ atf_check mkdir root mnt
+ atf_check -x ': > root/empty'
+ mount_psshfs root mnt
+ atf_check cat mnt/empty
+}
+read_empty_file_cleanup() {
+ umount mnt
+ stop_ssh
+}
+
# -------------------------------------------------------------------------
# Initialization.
# -------------------------------------------------------------------------
@@ -271,4 +291,5 @@ atf_init_test_cases() {
atf_add_test_case pwd
atf_add_test_case ls
#atf_add_test_case setattr_cache
+ atf_add_test_case read_empty_file
}
diff --git a/contrib/netbsd-tests/fs/puffs/t_basic.c b/contrib/netbsd-tests/fs/puffs/t_basic.c
index ce5e4ea..735108d 100644
--- a/contrib/netbsd-tests/fs/puffs/t_basic.c
+++ b/contrib/netbsd-tests/fs/puffs/t_basic.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_basic.c,v 1.12 2013/10/19 17:45:00 christos Exp $ */
+/* $NetBSD: t_basic.c,v 1.13 2016/12/01 14:49:04 hannken Exp $ */
#include <sys/types.h>
#include <sys/mount.h>
@@ -286,7 +286,7 @@ ATF_TC_BODY(inactive_reclaim, tc)
rump_sys_close(fd);
syncbar(FSTEST_MNTNAME);
- ATF_REQUIRE_EQ(pargs->pta_vn_toserv_ops[PUFFS_VN_INACTIVE], 1);
+ ATF_REQUIRE(pargs->pta_vn_toserv_ops[PUFFS_VN_INACTIVE] > 0);
ATF_REQUIRE_EQ(pargs->pta_vn_toserv_ops[PUFFS_VN_RECLAIM], 1);
FSTEST_EXIT();
@@ -383,7 +383,7 @@ ATF_TC_BODY(unlink_accessible, tc)
syncbar(FSTEST_MNTNAME);
ATF_REQUIRE_EQ(pargs->pta_vn_toserv_ops[PUFFS_VN_RECLAIM], 1);
- ATF_REQUIRE_EQ(pargs->pta_vn_toserv_ops[PUFFS_VN_INACTIVE], ianow+1);
+ ATF_REQUIRE(pargs->pta_vn_toserv_ops[PUFFS_VN_INACTIVE] > ianow);
ATF_REQUIRE_STREQ(buf, MAGICSTR);
diff --git a/contrib/netbsd-tests/fs/tmpfs/h_funcs.subr b/contrib/netbsd-tests/fs/tmpfs/h_funcs.subr
index 07c1644..edab789 100644
--- a/contrib/netbsd-tests/fs/tmpfs/h_funcs.subr
+++ b/contrib/netbsd-tests/fs/tmpfs/h_funcs.subr
@@ -59,12 +59,31 @@ test_mount() {
# Unmounts the file system mounted by test_mount.
#
test_unmount() {
+ # Begin FreeBSD
+ _test_unmount
+ exit_code=$?
+ atf_check_equal "$exit_code" "0"
+ return $exit_code
+ # End FreeBSD
cd - >/dev/null
atf_check -s eq:0 -o empty -e empty umount ${Mount_Point}
atf_check -s eq:0 -o empty -e empty rmdir ${Mount_Point}
Mount_Point=
}
+# Begin FreeBSD
+_test_unmount() {
+ if [ -z "${Mount_Point}" -o ! -d "${Mount_Point}" ]; then
+ return 0
+ fi
+
+ cd - >/dev/null
+ umount ${Mount_Point}
+ rmdir ${Mount_Point}
+ Mount_Point=
+}
+# End FreeBSD
+
#
# kqueue_monitor expected_nevents file1 [.. fileN]
#
diff --git a/contrib/netbsd-tests/fs/tmpfs/h_tools.c b/contrib/netbsd-tests/fs/tmpfs/h_tools.c
index 6a7b8fd..492e084 100644
--- a/contrib/netbsd-tests/fs/tmpfs/h_tools.c
+++ b/contrib/netbsd-tests/fs/tmpfs/h_tools.c
@@ -50,6 +50,10 @@
#include <string.h>
#include <unistd.h>
+#ifdef __FreeBSD__
+#include <inttypes.h>
+#endif
+
/* --------------------------------------------------------------------- */
static int getfh_main(int, char **);
@@ -70,7 +74,12 @@ getfh_main(int argc, char **argv)
if (argc < 2)
return EXIT_FAILURE;
+#ifdef __FreeBSD__
+ fh_size = sizeof(fhandle_t);
+#else
fh_size = 0;
+#endif
+
fh = NULL;
for (;;) {
if (fh_size) {
@@ -85,7 +94,11 @@ getfh_main(int argc, char **argv)
* but it may change if someone moves things around,
* so retry untill we have enough memory.
*/
+#ifdef __FreeBSD__
+ error = getfh(argv[1], fh);
+#else
error = getfh(argv[1], fh, &fh_size);
+#endif
if (error == 0) {
break;
} else {
@@ -230,12 +243,21 @@ sockets_main(int argc, char **argv)
return EXIT_FAILURE;
}
+#ifdef __FreeBSD__
+ memset(&addr, 0, sizeof(addr));
+#endif
(void)strlcpy(addr.sun_path, argv[1], sizeof(addr.sun_path));
addr.sun_family = PF_UNIX;
-
+#ifdef __FreeBSD__
+ error = bind(fd, (struct sockaddr *)&addr, SUN_LEN(&addr));
+#else
error = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
+#endif
if (error == -1) {
warn("connect");
+#ifdef __FreeBSD__
+ (void)close(fd);
+#endif
return EXIT_FAILURE;
}
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_link.sh b/contrib/netbsd-tests/fs/tmpfs/t_link.sh
index 660f3f2..612c1e2 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_link.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_link.sh
@@ -93,7 +93,18 @@ subdirs_body() {
test_unmount
}
+# Begin FreeBSD
+if true; then
+atf_test_case kqueue cleanup
+kqueue_cleanup() {
+ Mount_Point=$(pwd)/mntpt _test_unmount || :
+}
+else
+# End FreeBSD
atf_test_case kqueue
+# Begin FreeBSD
+fi
+# End FreeBSD
kqueue_head() {
atf_set "descr" "Verifies that creating a link raises the correct" \
"kqueue events"
@@ -102,6 +113,10 @@ kqueue_head() {
kqueue_body() {
test_mount
+ # Begin FreeBSD
+ atf_expect_fail "fails with: dir/b did not receive NOTE_LINK - bug 213662"
+ # End FreeBSD
+
atf_check -s eq:0 -o empty -e empty mkdir dir
atf_check -s eq:0 -o empty -e empty touch dir/a
echo 'ln dir/a dir/b' | kqueue_monitor 2 dir dir/a
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_mknod.sh b/contrib/netbsd-tests/fs/tmpfs/t_mknod.sh
index 62c7cce..037dc16 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_mknod.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_mknod.sh
@@ -106,7 +106,15 @@ pipe_body() {
test_mount
umask 022
+ # Begin FreeBSD
+ if true; then
+ atf_check -s eq:0 -o empty -e empty mkfifo pipe
+ else
+ # End FreeBSD
atf_check -s eq:0 -o empty -e empty mknod pipe p
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
eval $(stat -s pipe)
[ ${st_mode} = 010644 ] || atf_fail "Invalid mode"
@@ -124,7 +132,15 @@ pipe_kqueue_body() {
umask 022
atf_check -s eq:0 -o empty -e empty mkdir dir
+ # Begin FreeBSD
+ if true; then
+ echo 'mkfifo dir/pipe' | kqueue_monitor 1 dir
+ else
+ # End FreeBSD
echo 'mknod dir/pipe p' | kqueue_monitor 1 dir
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
kqueue_check dir NOTE_WRITE
test_unmount
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_mount.sh b/contrib/netbsd-tests/fs/tmpfs/t_mount.sh
index 11a77d4..9ec5e31 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_mount.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_mount.sh
@@ -93,7 +93,19 @@ negative_body() {
test_unmount
}
+# Begin FreeBSD
+if true; then
+atf_test_case large cleanup
+large_cleanup() {
+ umount -f tmp 2>/dev/null || :
+ Mount_Point=$(pwd)/mnt _test_unmount || :
+}
+else
+# End FreeBSD
atf_test_case large
+# Begin FreeBSD
+fi
+# End FreeBSD
large_head() {
atf_set "descr" "Tests that extremely long values passed to -s" \
"are handled correctly"
@@ -103,6 +115,10 @@ large_body() {
test_mount -o -s9223372036854775807
test_unmount
+ # Begin FreeBSD
+ atf_expect_fail "-o -s<large-size> succeeds unexpectedly on FreeBSD - bug 212862"
+ # End FreeBSD
+
mkdir tmp
atf_check -s eq:1 -o empty -e ignore \
mount -t tmpfs -o -s9223372036854775808 tmpfs tmp
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_readdir.sh b/contrib/netbsd-tests/fs/tmpfs/t_readdir.sh
index 6f5dc3e..272c749 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_readdir.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_readdir.sh
@@ -59,7 +59,15 @@ types_body() {
atf_check -s eq:0 -o empty -e empty ln -s reg lnk
atf_check -s eq:0 -o empty -e empty mknod blk b 0 0
atf_check -s eq:0 -o empty -e empty mknod chr c 0 0
+ # Begin FreeBSD
+ if true; then
+ atf_check -s eq:0 -o empty -e empty mkfifo fifo
+ else
+ # End FreeBSD
atf_check -s eq:0 -o empty -e empty mknod fifo p
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
atf_check -s eq:0 -o empty -e empty \
$(atf_get_srcdir)/h_tools sockets sock
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_remove.sh b/contrib/netbsd-tests/fs/tmpfs/t_remove.sh
index df868f9..f75032c 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_remove.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_remove.sh
@@ -46,13 +46,28 @@ single_body() {
test_unmount
}
+# Begin FreeBSD
+if true; then
+atf_test_case uchg cleanup
+uchg_cleanup() {
+ Mount_Point=$(pwd)/mntpt _test_unmount
+}
+else
+# End FreeBSD
atf_test_case uchg
+# Begin FreeBSD
+fi
+# End FreeBSD
uchg_head() {
atf_set "descr" "Checks that files with the uchg flag set cannot" \
"be removed"
atf_set "require.user" "root"
}
uchg_body() {
+ # Begin FreeBSD
+ atf_expect_fail "this fails on FreeBSD with root - bug 212861"
+ # End FreeBSD
+
test_mount
atf_check -s eq:0 -o empty -e empty touch a
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_sizes.sh b/contrib/netbsd-tests/fs/tmpfs/t_sizes.sh
index 9673b91..35abe8a 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_sizes.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_sizes.sh
@@ -54,7 +54,15 @@ big_head() {
big_body() {
test_mount -o -s10M
+ # Begin FreeBSD
+ if true; then
+ pagesize=$(sysctl -n hw.pagesize)
+ else
+ # End FreeBSD
pagesize=$(sysctl hw.pagesize | cut -d ' ' -f 3)
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
eval $($(atf_get_srcdir)/h_tools statvfs . | sed -e 's|^f_|cf_|')
cf_bused=$((${cf_blocks} - ${cf_bfree}))
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_statvfs.sh b/contrib/netbsd-tests/fs/tmpfs/t_statvfs.sh
index 21290b6..d0e7ac2 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_statvfs.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_statvfs.sh
@@ -38,7 +38,15 @@ values_head() {
values_body() {
test_mount -o -s10M
+ # Begin FreeBSD
+ if true; then
+ pagesize=$(sysctl -n hw.pagesize)
+ else
+ # End FreeBSD
pagesize=$(sysctl hw.pagesize | cut -d ' ' -f 3)
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
eval $($(atf_get_srcdir)/h_tools statvfs .)
[ ${pagesize} -eq ${f_bsize} ] || \
atf_fail "Invalid bsize"
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh b/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh
index 2c97fa9..1f42f62 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_vnd.sh,v 1.8 2011/04/21 22:26:46 haad Exp $
+# $NetBSD: t_vnd.sh,v 1.9 2016/07/29 05:23:24 pgoyette Exp $
#
# Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -38,12 +38,21 @@ basic_body() {
atf_check -s eq:0 -o ignore -e ignore \
dd if=/dev/zero of=disk.img bs=1m count=10
- atf_check -s eq:0 -o empty -e empty vnconfig /dev/vnd3 disk.img
+ # Begin FreeBSD
+ if true; then
+ atf_check -s eq:0 -o empty -e empty mkdir mnt
+ atf_check -s eq:0 -o empty -e empty mdmfs -F disk.img md3 mnt
+ else
+ # End FreeBSD
+ atf_check -s eq:0 -o empty -e empty vndconfig /dev/vnd3 disk.img
atf_check -s eq:0 -o ignore -e ignore newfs /dev/rvnd3a
atf_check -s eq:0 -o empty -e empty mkdir mnt
atf_check -s eq:0 -o empty -e empty mount /dev/vnd3a mnt
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
echo "Creating test files"
for f in $(jot -w %u 100 | uniq); do
@@ -58,7 +67,15 @@ basic_body() {
done
atf_check -s eq:0 -o empty -e empty umount mnt
- atf_check -s eq:0 -o empty -e empty vnconfig -u /dev/vnd3
+ # Begin FreeBSD
+ if true; then
+ atf_check -s eq:0 -o empty -e empty mdconfig -d -u 3
+ else
+ # End FreeBSD
+ atf_check -s eq:0 -o empty -e empty vndconfig -u /dev/vnd3
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
test_unmount
touch done
@@ -66,7 +83,15 @@ basic_body() {
basic_cleanup() {
if [ ! -f done ]; then
umount mnt 2>/dev/null 1>&2
- vnconfig -u /dev/vnd3 2>/dev/null 1>&2
+ # Begin FreeBSD
+ if true; then
+ [ ! -c /dev/md3 ] || mdconfig -d -u 3
+ else
+ # End FreeBSD
+ vndconfig -u /dev/vnd3 2>/dev/null 1>&2
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
fi
}
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh b/contrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh
index c505ffd..4630a7c 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh
@@ -36,7 +36,15 @@ main_head() {
}
main_body() {
echo "Lowering kern.maxvnodes to 2000"
+ # Begin FreeBSD
+ if true; then
+ sysctl -n kern.maxvnodes > oldvnodes
+ else
+ # End FreeBSD
sysctl kern.maxvnodes | awk '{ print $3; }' >oldvnodes
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
atf_check -s eq:0 -o ignore -e empty sysctl -w kern.maxvnodes=2000
test_mount -o -s$(((4000 + 2) * 4096))
diff --git a/contrib/netbsd-tests/fs/vfs/t_io.c b/contrib/netbsd-tests/fs/vfs/t_io.c
index 67d8657..23c3a15 100644
--- a/contrib/netbsd-tests/fs/vfs/t_io.c
+++ b/contrib/netbsd-tests/fs/vfs/t_io.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_io.c,v 1.12 2013/08/04 11:02:02 pooka Exp $ */
+/* $NetBSD: t_io.c,v 1.16 2015/04/04 12:34:44 riastradh Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -222,6 +222,22 @@ wrrd_after_unlink(const atf_tc_t *tc, const char *mp)
FSTEST_EXIT();
}
+static void
+read_fault(const atf_tc_t *tc, const char *mp)
+{
+ char ch = 123;
+ int fd;
+
+ FSTEST_ENTER();
+ RL(fd = rump_sys_open("file", O_CREAT | O_RDWR, 0777));
+ ATF_REQUIRE_EQ(rump_sys_write(fd, &ch, 1), 1);
+ RL(rump_sys_close(fd));
+ RL(fd = rump_sys_open("file", O_RDONLY | O_SYNC | O_RSYNC));
+ ATF_REQUIRE_ERRNO(EFAULT, rump_sys_read(fd, NULL, 1) == -1);
+ RL(rump_sys_close(fd));
+ FSTEST_EXIT();
+}
+
ATF_TC_FSAPPLY(holywrite, "create a sparse file and fill hole");
ATF_TC_FSAPPLY(extendfile, "check that extending a file works");
ATF_TC_FSAPPLY(extendfile_append, "check that extending a file works "
@@ -232,6 +248,7 @@ ATF_TC_FSAPPLY(overwrite_trunc, "write 64k + truncate + rewrite");
ATF_TC_FSAPPLY(shrinkfile, "shrink file");
ATF_TC_FSAPPLY(read_after_unlink, "contents can be read off disk after unlink");
ATF_TC_FSAPPLY(wrrd_after_unlink, "file can be written and read after unlink");
+ATF_TC_FSAPPLY(read_fault, "read at bad address must return EFAULT");
ATF_TP_ADD_TCS(tp)
{
@@ -245,6 +262,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_FSAPPLY(shrinkfile);
ATF_TP_FSAPPLY(read_after_unlink);
ATF_TP_FSAPPLY(wrrd_after_unlink);
+ ATF_TP_FSAPPLY(read_fault);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/fs/vfs/t_renamerace.c b/contrib/netbsd-tests/fs/vfs/t_renamerace.c
index 70e02f3..809c380 100644
--- a/contrib/netbsd-tests/fs/vfs/t_renamerace.c
+++ b/contrib/netbsd-tests/fs/vfs/t_renamerace.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_renamerace.c,v 1.32 2014/07/29 09:15:48 gson Exp $ */
+/* $NetBSD: t_renamerace.c,v 1.33 2016/05/04 08:30:22 dholland Exp $ */
/*
* Modified for rump and atf from a program supplied
@@ -127,7 +127,7 @@ renamerace(const atf_tc_t *tc, const char *mp)
atf_tc_fail("race did not trigger this time");
if (FSTYPE_MSDOS(tc)) {
- atf_tc_expect_fail("PR kern/44661");
+ atf_tc_expect_fail("PR kern/43626");
/*
* XXX: race does not trigger every time at least
* on amd64/qemu.
diff --git a/contrib/netbsd-tests/fs/vfs/t_unpriv.c b/contrib/netbsd-tests/fs/vfs/t_unpriv.c
index fffffe4..6da771b4 100644
--- a/contrib/netbsd-tests/fs/vfs/t_unpriv.c
+++ b/contrib/netbsd-tests/fs/vfs/t_unpriv.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_unpriv.c,v 1.11 2014/08/29 17:39:18 gson Exp $ */
+/* $NetBSD: t_unpriv.c,v 1.12 2015/04/09 19:51:13 riastradh Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -55,8 +55,6 @@ owner(const atf_tc_t *tc, const char *mp)
rump_pub_lwproc_rfork(RUMP_RFCFDG);
if (rump_sys_setuid(1) == -1)
atf_tc_fail_errno("setuid");
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
if (rump_sys_chown(".", 1, -1) != -1 || errno != EPERM)
atf_tc_fail_errno("chown");
if (rump_sys_chmod(".", 0000) != -1 || errno != EPERM)
diff --git a/contrib/netbsd-tests/fs/vfs/t_vnops.c b/contrib/netbsd-tests/fs/vfs/t_vnops.c
index 66b5505..978fadb 100644
--- a/contrib/netbsd-tests/fs/vfs/t_vnops.c
+++ b/contrib/netbsd-tests/fs/vfs/t_vnops.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_vnops.c,v 1.43 2014/09/09 06:51:00 gson Exp $ */
+/* $NetBSD: t_vnops.c,v 1.58 2016/08/29 02:31:46 kre Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -28,9 +28,11 @@
#include <sys/stat.h>
#include <sys/statvfs.h>
+#include <sys/time.h>
#include <assert.h>
#include <atf-c.h>
+#include <ctype.h>
#include <fcntl.h>
#include <libgen.h>
#include <stdlib.h>
@@ -54,10 +56,10 @@
atf_tc_skip("symlinks not supported by file system")
static char *
-md(char *buf, const char *base, const char *tail)
+md(char *buf, size_t buflen, const char *base, const char *tail)
{
- sprintf(buf, "%s/%s", base, tail);
+ snprintf(buf, buflen, "%s/%s", base, tail);
return buf;
}
@@ -68,11 +70,11 @@ lookup_simple(const atf_tc_t *tc, const char *mountpath)
struct stat sb1, sb2;
strcpy(final, mountpath);
- sprintf(pb, "%s/../%s", mountpath, basename(final));
+ snprintf(pb, sizeof(pb), "%s/../%s", mountpath, basename(final));
if (rump_sys_stat(pb, &sb1) == -1)
atf_tc_fail_errno("stat 1");
- sprintf(pb, "%s/./../%s", mountpath, basename(final));
+ snprintf(pb, sizeof(pb), "%s/./../%s", mountpath, basename(final));
if (rump_sys_stat(pb, &sb2) == -1)
atf_tc_fail_errno("stat 2");
@@ -84,22 +86,38 @@ lookup_complex(const atf_tc_t *tc, const char *mountpath)
{
char pb[MAXPATHLEN];
struct stat sb1, sb2;
+ struct timespec atplus1, onesec;
USES_DIRS;
- if (FSTYPE_UDF(tc))
- atf_tc_expect_fail("PR kern/49033");
-
- sprintf(pb, "%s/dir", mountpath);
+ snprintf(pb, sizeof(pb), "%s/dir", mountpath);
if (rump_sys_mkdir(pb, 0777) == -1)
atf_tc_fail_errno("mkdir");
if (rump_sys_stat(pb, &sb1) == -1)
atf_tc_fail_errno("stat 1");
- sprintf(pb, "%s/./dir/../././dir/.", mountpath);
+ snprintf(pb, sizeof(pb), "%s/./dir/../././dir/.", mountpath);
if (rump_sys_stat(pb, &sb2) == -1)
atf_tc_fail_errno("stat 2");
+ /*
+ * The lookup is permitted to modify the access time of
+ * any directories searched - such a directory is the
+ * subject of this test. Any difference should cause
+ * the 2nd lookup atime tp be >= the first, if it is ==, all is
+ * OK (atime is not required to be modified by the search, or
+ * both references may happen within the came clock tick), if the
+ * 2nd lookup atime is > the first, but not "too much" greater,
+ * just set it back, so the memcmp just below succeeds
+ * (assuming all else is OK).
+ */
+ onesec.tv_sec = 1;
+ onesec.tv_nsec = 0;
+ timespecadd(&sb1.st_atimespec, &onesec, &atplus1);
+ if (timespeccmp(&sb2.st_atimespec, &sb1.st_atimespec, >) &&
+ timespeccmp(&sb2.st_atimespec, &atplus1, <))
+ sb2.st_atimespec = sb1.st_atimespec;
+
if (memcmp(&sb1, &sb2, sizeof(sb1)) != 0) {
printf("what\tsb1\t\tsb2\n");
@@ -118,10 +136,10 @@ lookup_complex(const atf_tc_t *tc, const char *mountpath)
FIELD(st_uid);
FIELD(st_gid);
FIELD(st_rdev);
- TIME(st_atim);
- TIME(st_mtim);
- TIME(st_ctim);
- TIME(st_birthtim);
+ TIME(st_atimespec);
+ TIME(st_mtimespec);
+ TIME(st_ctimespec);
+ TIME(st_birthtimespec);
FIELD(st_size);
FIELD(st_blocks);
FIELD(st_flags);
@@ -132,9 +150,6 @@ lookup_complex(const atf_tc_t *tc, const char *mountpath)
atf_tc_fail("stat results differ, see ouput for more details");
}
- if (FSTYPE_UDF(tc))
- atf_tc_fail("random failure of PR kern/49033 "
- "did not happen this time");
}
static void
@@ -146,7 +161,7 @@ dir_simple(const atf_tc_t *tc, const char *mountpath)
USES_DIRS;
/* check we can create directories */
- sprintf(pb, "%s/dir", mountpath);
+ snprintf(pb, sizeof(pb), "%s/dir", mountpath);
if (rump_sys_mkdir(pb, 0777) == -1)
atf_tc_fail_errno("mkdir");
if (rump_sys_stat(pb, &sb) == -1)
@@ -168,19 +183,17 @@ dir_notempty(const atf_tc_t *tc, const char *mountpath)
USES_DIRS;
/* check we can create directories */
- sprintf(pb, "%s/dir", mountpath);
+ snprintf(pb, sizeof(pb), "%s/dir", mountpath);
if (rump_sys_mkdir(pb, 0777) == -1)
atf_tc_fail_errno("mkdir");
- sprintf(pb2, "%s/dir/file", mountpath);
+ snprintf(pb2, sizeof(pb2), "%s/dir/file", mountpath);
fd = rump_sys_open(pb2, O_RDWR | O_CREAT, 0777);
if (fd == -1)
atf_tc_fail_errno("create file");
rump_sys_close(fd);
rv = rump_sys_rmdir(pb);
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
if (rv != -1 || errno != ENOTEMPTY)
atf_tc_fail("non-empty directory removed succesfully");
@@ -206,9 +219,9 @@ dir_rmdirdotdot(const atf_tc_t *tc, const char *mp)
RL(rump_sys_mkdir("subtest", 0777));
RL(rump_sys_chdir("subtest"));
- md(pb, mp, "test/subtest");
+ md(pb, sizeof(pb), mp, "test/subtest");
RL(rump_sys_rmdir(pb));
- md(pb, mp, "test");
+ md(pb, sizeof(pb), mp, "test");
RL(rump_sys_rmdir(pb));
if (FSTYPE_NFS(tc))
@@ -226,7 +239,7 @@ checkfile(const char *path, struct stat *refp)
struct stat sb;
static int n = 1;
- md(buf, path, "file");
+ md(buf, sizeof(buf), path, "file");
if (rump_sys_stat(buf, &sb) == -1)
atf_tc_fail_errno("cannot stat file %d (%s)", n, buf);
if (memcmp(&sb, refp, sizeof(sb)) != 0)
@@ -245,18 +258,18 @@ rename_dir(const atf_tc_t *tc, const char *mp)
USES_DIRS;
- md(pb1, mp, "dir1");
+ md(pb1, sizeof(pb1), mp, "dir1");
if (rump_sys_mkdir(pb1, 0777) == -1)
atf_tc_fail_errno("mkdir 1");
- md(pb2, mp, "dir2");
+ md(pb2, sizeof(pb2), mp, "dir2");
if (rump_sys_mkdir(pb2, 0777) == -1)
atf_tc_fail_errno("mkdir 2");
- md(pb2, mp, "dir2/subdir");
+ md(pb2, sizeof(pb2), mp, "dir2/subdir");
if (rump_sys_mkdir(pb2, 0777) == -1)
atf_tc_fail_errno("mkdir 3");
- md(pb3, mp, "dir1/file");
+ md(pb3, sizeof(pb3), mp, "dir1/file");
if (rump_sys_mknod(pb3, S_IFREG | 0777, -1) == -1)
atf_tc_fail_errno("create file");
if (rump_sys_stat(pb3, &ref) == -1)
@@ -267,30 +280,28 @@ rename_dir(const atf_tc_t *tc, const char *mp)
*/
/* rename within directory */
- md(pb3, mp, "dir3");
+ md(pb3, sizeof(pb3), mp, "dir3");
if (rump_sys_rename(pb1, pb3) == -1)
atf_tc_fail_errno("rename 1");
checkfile(pb3, &ref);
/* rename directory onto itself (two ways, should fail) */
- md(pb1, mp, "dir3/.");
+ md(pb1, sizeof(pb1), mp, "dir3/.");
if (rump_sys_rename(pb1, pb3) != -1 || errno != EINVAL)
atf_tc_fail_errno("rename 2");
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
if (rump_sys_rename(pb3, pb1) != -1 || errno != EISDIR)
atf_tc_fail_errno("rename 3");
checkfile(pb3, &ref);
/* rename father of directory into directory */
- md(pb1, mp, "dir2/dir");
- md(pb2, mp, "dir2");
+ md(pb1, sizeof(pb1), mp, "dir2/dir");
+ md(pb2, sizeof(pb2), mp, "dir2");
if (rump_sys_rename(pb2, pb1) != -1 || errno != EINVAL)
atf_tc_fail_errno("rename 4");
/* same for grandfather */
- md(pb1, mp, "dir2/subdir/dir2");
+ md(pb1, sizeof(pb1), mp, "dir2/subdir/dir2");
if (rump_sys_rename(pb2, pb1) != -1 || errno != EINVAL)
atf_tc_fail("rename 5");
@@ -301,29 +312,29 @@ rename_dir(const atf_tc_t *tc, const char *mp)
atf_tc_fail("rename 6");
/* cross-directory rename */
- md(pb1, mp, "dir3");
- md(pb2, mp, "dir2/somedir");
+ md(pb1, sizeof(pb1), mp, "dir3");
+ md(pb2, sizeof(pb2), mp, "dir2/somedir");
if (rump_sys_rename(pb1, pb2) == -1)
atf_tc_fail_errno("rename 7");
checkfile(pb2, &ref);
/* move to parent directory */
- md(pb1, mp, "dir2/somedir/../../dir3");
+ md(pb1, sizeof(pb1), mp, "dir2/somedir/../../dir3");
if (rump_sys_rename(pb2, pb1) == -1)
atf_tc_fail_errno("rename 8");
- md(pb1, mp, "dir2/../dir3");
+ md(pb1, sizeof(pb1), mp, "dir2/../dir3");
checkfile(pb1, &ref);
/* atomic cross-directory rename */
- md(pb3, mp, "dir2/subdir");
+ md(pb3, sizeof(pb3), mp, "dir2/subdir");
if (rump_sys_rename(pb1, pb3) == -1)
atf_tc_fail_errno("rename 9");
checkfile(pb3, &ref);
/* rename directory over an empty directory */
- md(pb1, mp, "parent");
- md(pb2, mp, "parent/dir1");
- md(pb3, mp, "parent/dir2");
+ md(pb1, sizeof(pb1), mp, "parent");
+ md(pb2, sizeof(pb2), mp, "parent/dir1");
+ md(pb3, sizeof(pb3), mp, "parent/dir2");
RL(rump_sys_mkdir(pb1, 0777));
RL(rump_sys_mkdir(pb2, 0777));
RL(rump_sys_mkdir(pb3, 0777));
@@ -442,6 +453,78 @@ rename_reg_nodir(const atf_tc_t *tc, const char *mp)
rump_sys_chdir("/");
}
+/* PR kern/50607 */
+static void
+create_many(const atf_tc_t *tc, const char *mp)
+{
+ char buf[64];
+ int nfiles = 2324; /* #Nancy */
+ int i;
+
+ /* takes forever with many files */
+ if (FSTYPE_MSDOS(tc))
+ nfiles /= 4;
+
+ RL(rump_sys_chdir(mp));
+
+ if (FSTYPE_SYSVBFS(tc)) {
+ /* fs doesn't support many files or subdirectories */
+ nfiles = 5;
+ } else {
+ /* msdosfs doesn't like many entries in the root directory */
+ RL(rump_sys_mkdir("subdir", 0777));
+ RL(rump_sys_chdir("subdir"));
+ }
+
+ /* create them */
+#define TESTFN "testfile"
+ for (i = 0; i < nfiles; i++) {
+ int fd;
+
+ snprintf(buf, sizeof(buf), TESTFN "%d", i);
+ RL(fd = rump_sys_open(buf, O_RDWR|O_CREAT|O_EXCL, 0666));
+ RL(rump_sys_close(fd));
+ }
+
+ /* wipe them out */
+ for (i = 0; i < nfiles; i++) {
+ snprintf(buf, sizeof(buf), TESTFN "%d", i);
+ RLF(rump_sys_unlink(buf), "%s", buf);
+ }
+#undef TESTFN
+
+ rump_sys_chdir("/");
+}
+
+/*
+ * Test creating files with one-character names using all possible
+ * character values. Failures to create the file are ignored as the
+ * characters allowed in file names vary by file system, but at least
+ * we can check that the fs does not crash, and if the file is
+ * successfully created, unlinking it should also succeed.
+ */
+static void
+create_nonalphanum(const atf_tc_t *tc, const char *mp)
+{
+ char buf[64];
+ int i;
+
+ RL(rump_sys_chdir(mp));
+
+ for (i = 0; i < 256; i++) {
+ int fd;
+ snprintf(buf, sizeof(buf), "%c", i);
+ fd = rump_sys_open(buf, O_RDWR|O_CREAT|O_EXCL, 0666);
+ if (fd == -1)
+ continue;
+ RLF(rump_sys_close(fd), "%d", fd);
+ RLF(rump_sys_unlink(buf), "%s", buf);
+ }
+ printf("\n");
+
+ rump_sys_chdir("/");
+}
+
static void
create_nametoolong(const atf_tc_t *tc, const char *mp)
{
@@ -563,7 +646,7 @@ symlink_len(const atf_tc_t *tc, const char *mp, size_t len)
USES_SYMLINKS;
- RL(rump_sys_chdir(mp));
+ RLF(rump_sys_chdir(mp), "%s", mp);
buf = malloc(len + 1);
ATF_REQUIRE(buf);
@@ -645,8 +728,6 @@ attrs(const atf_tc_t *tc, const char *mp)
RL(rump_sys_stat(TESTFILE, &sb2));
#define CHECK(a) ATF_REQUIRE_EQ(sb.a, sb2.a)
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
if (!(FSTYPE_MSDOS(tc) || FSTYPE_SYSVBFS(tc))) {
CHECK(st_uid);
CHECK(st_gid);
@@ -684,9 +765,6 @@ fcntl_lock(const atf_tc_t *tc, const char *mp)
RL(fd = rump_sys_open(TESTFILE, O_RDWR | O_CREAT, 0755));
RL(rump_sys_ftruncate(fd, 8192));
- /* PR kern/43321 */
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
RL(rump_sys_fcntl(fd, F_SETLK, &l));
/* Next, we fork and try to lock the same area */
@@ -820,9 +898,6 @@ fcntl_getlock_pids(const atf_tc_t *tc, const char *mp)
RL(rump_sys_ftruncate(fd[i], sz));
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be "
- "broken");
if (i < __arraycount(lock)) {
RL(rump_sys_fcntl(fd[i], F_SETLK, &lock[i]));
expect[i].l_pid = pid[i];
@@ -932,9 +1007,6 @@ lstat_symlink(const atf_tc_t *tc, const char *mp)
USES_SYMLINKS;
- if (FSTYPE_V7FS(tc))
- atf_tc_expect_fail("PR kern/48864");
-
FSTEST_ENTER();
src = "source";
@@ -973,6 +1045,11 @@ ATF_TC_FSAPPLY(access_simple, "access(2)");
ATF_TC_FSAPPLY(read_directory, "read(2) on directories");
ATF_TC_FSAPPLY(lstat_symlink, "lstat(2) values for symbolic links");
+#undef FSTEST_IMGSIZE
+#define FSTEST_IMGSIZE (1024*1024*64)
+ATF_TC_FSAPPLY(create_many, "create many directory entries");
+ATF_TC_FSAPPLY(create_nonalphanum, "non-alphanumeric filenames");
+
ATF_TP_ADD_TCS(tp)
{
@@ -984,6 +1061,8 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_FSAPPLY(rename_dir);
ATF_TP_FSAPPLY(rename_dotdot);
ATF_TP_FSAPPLY(rename_reg_nodir);
+ ATF_TP_FSAPPLY(create_many);
+ ATF_TP_FSAPPLY(create_nonalphanum);
ATF_TP_FSAPPLY(create_nametoolong);
ATF_TP_FSAPPLY(create_exist);
ATF_TP_FSAPPLY(rename_nametoolong);
diff --git a/contrib/netbsd-tests/games/t_factor.sh b/contrib/netbsd-tests/games/t_factor.sh
index e2320a2..45a54bc 100755
--- a/contrib/netbsd-tests/games/t_factor.sh
+++ b/contrib/netbsd-tests/games/t_factor.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_factor.sh,v 1.7 2010/11/19 12:31:36 pgoyette Exp $
+# $NetBSD: t_factor.sh,v 1.9 2016/06/27 05:29:32 pgoyette Exp $
#
# Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -27,32 +27,55 @@
expect() {
echo "${2}" >expout
+ ncrypt=$( ldd /usr/games/factor | grep -c -- -lcrypt )
+ if [ "X$3" != "X" -a $ncrypt -eq 0 ] ; then
+ atf_skip "crypto needed for huge non-prime factors - PR bin/23663"
+ fi
atf_check -s eq:0 -o file:expout -e empty /usr/games/factor ${1}
}
-atf_test_case overflow
-overflow_head() {
+atf_test_case overflow1
+overflow1_head() {
atf_set "descr" "Tests for overflow conditions"
atf_set "require.progs" "/usr/games/factor"
}
-overflow_body() {
+overflow1_body() {
expect '8675309' '8675309: 8675309'
+}
+
+atf_test_case overflow2
+overflow2_head() {
+ atf_set "descr" "Tests for overflow conditions"
+ atf_set "require.progs" "/usr/games/factor"
+}
+overflow2_body() {
expect '6172538568' '6172538568: 2 2 2 3 7 17 2161253'
}
-atf_test_case loop
-loop_head() {
+atf_test_case loop1
+loop1_head() {
atf_set "descr" "Tests some cases that once locked the program" \
"in an infinite loop"
atf_set "require.progs" "/usr/games/factor"
}
-loop_body() {
- expect '99999999999991' '99999999999991: 7 13 769231 1428571'
+loop1_body() {
expect '2147483647111311' '2147483647111311: 3 3 3 131 607148331103'
}
+atf_test_case loop2
+loop2_head() {
+ atf_set "descr" "Tests some cases that once locked the program" \
+ "in an infinite loop"
+ atf_set "require.progs" "/usr/games/factor"
+}
+loop2_body() {
+ expect '99999999999991' '99999999999991: 7 13 769231 1428571' Need_Crypto
+}
+
atf_init_test_cases()
{
- atf_add_test_case overflow
- atf_add_test_case loop
+ atf_add_test_case overflow1
+ atf_add_test_case overflow2
+ atf_add_test_case loop1
+ atf_add_test_case loop2
}
diff --git a/contrib/netbsd-tests/h_macros.h b/contrib/netbsd-tests/h_macros.h
index 5dd56de..dd730c9 100644
--- a/contrib/netbsd-tests/h_macros.h
+++ b/contrib/netbsd-tests/h_macros.h
@@ -1,4 +1,4 @@
-/* $NetBSD: h_macros.h,v 1.9 2013/05/17 15:42:09 christos Exp $ */
+/* $NetBSD: h_macros.h,v 1.13 2016/08/20 15:49:08 christos Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -45,13 +45,15 @@
ATF_CHECK_MSG((x) != (v), "%s: %s", #x, strerror(errno))
#define RL(x) REQUIRE_LIBC(x, -1)
+#define RLF(x, fmt, arg) \
+ ATF_CHECK_MSG((x) != -1, "%s [" fmt "]: %s", #x, arg, strerror(errno))
#define RZ(x) \
do { \
int RZ_rv = x; \
ATF_REQUIRE_MSG(RZ_rv == 0, "%s: %s", #x, strerror(RZ_rv)); \
} while (/*CONSTCOND*/0)
-static __inline __printflike(1, 2) void
+__dead static __inline __printflike(1, 2) void
atf_tc_fail_errno(const char *fmt, ...)
{
va_list ap;
@@ -75,7 +77,7 @@ tests_makegarbage(void *space, size_t len)
uint16_t randval;
while (len >= sizeof(randval)) {
- *sb++ = (random() & 0xffff);
+ *sb++ = (uint16_t)random();
len -= sizeof(*sb);
}
randval = (uint16_t)random();
diff --git a/contrib/netbsd-tests/include/sys/t_bitops.c b/contrib/netbsd-tests/include/sys/t_bitops.c
index 7c90da0..6bdeb2b 100644
--- a/contrib/netbsd-tests/include/sys/t_bitops.c
+++ b/contrib/netbsd-tests/include/sys/t_bitops.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_bitops.c,v 1.16 2012/12/07 02:28:19 christos Exp $ */
+/* $NetBSD: t_bitops.c,v 1.19 2015/03/21 05:50:19 isaki Exp $ */
/*-
* Copyright (c) 2011, 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_bitops.c,v 1.16 2012/12/07 02:28:19 christos Exp $");
+__RCSID("$NetBSD: t_bitops.c,v 1.19 2015/03/21 05:50:19 isaki Exp $");
#include <atf-c.h>
@@ -67,7 +67,7 @@ static const struct {
ATF_TC(bitmap_basic);
ATF_TC_HEAD(bitmap_basic, tc)
{
- atf_tc_set_md_var(tc, "descr", "A basic test of __BITMAP_*");
+ atf_tc_set_md_var(tc, "descr", "A basic test of __BITMAP_*");
}
ATF_TC_BODY(bitmap_basic, tc)
@@ -174,65 +174,191 @@ ATF_TC_BODY(ffsfls, tc)
}
}
-ATF_TC(ilog2_basic);
-ATF_TC_HEAD(ilog2_basic, tc)
+ATF_TC(ilog2_32bit);
+ATF_TC_HEAD(ilog2_32bit, tc)
{
- atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for correctness");
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for 32bit variable");
}
-ATF_TC_BODY(ilog2_basic, tc)
+ATF_TC_BODY(ilog2_32bit, tc)
{
- uint64_t i, x;
+ int i;
+ uint32_t x;
- for (i = x = 0; i < 64; i++) {
+ for (i = 0; i < 32; i++) {
+ x = 1 << i;
+ ATF_REQUIRE(ilog2(x) == i);
+ }
+}
+
+ATF_TC(ilog2_64bit);
+ATF_TC_HEAD(ilog2_64bit, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for 64bit variable");
+}
- x = (uint64_t)1 << i;
+ATF_TC_BODY(ilog2_64bit, tc)
+{
+ int i;
+ uint64_t x;
- ATF_REQUIRE(i == (uint64_t)ilog2(x));
+ for (i = 0; i < 64; i++) {
+ x = ((uint64_t)1) << i;
+ ATF_REQUIRE(ilog2(x) == i);
}
}
-ATF_TC(ilog2_log2);
-ATF_TC_HEAD(ilog2_log2, tc)
+ATF_TC(ilog2_const);
+ATF_TC_HEAD(ilog2_const, tc)
{
- atf_tc_set_md_var(tc, "descr", "Test log2(3) vs. ilog2(3)");
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for constant");
}
-ATF_TC_BODY(ilog2_log2, tc)
+ATF_TC_BODY(ilog2_const, tc)
{
-#ifdef __vax__
- atf_tc_skip("Test is unavailable on vax because of lack of log2()");
-#else
- double x, y;
- uint64_t i;
-
/*
- * This may fail under QEMU; see PR misc/44767.
+ * These inlines test __builtin_constant_p() part of ilog2()
+ * at compile time, so don't change it to loop. PR lib/49745
*/
- for (i = 1; i < UINT32_MAX; i += UINT16_MAX) {
-
- x = log2(i);
- y = (double)(ilog2(i));
-
- ATF_REQUIRE(ceil(x) >= y);
-
- if (fabs(floor(x) - y) > 1.0e-40) {
- atf_tc_expect_fail("PR misc/44767");
- atf_tc_fail("log2(%"PRIu64") != "
- "ilog2(%"PRIu64")", i, i);
- }
- }
-#endif
+ ATF_REQUIRE(ilog2(0x0000000000000001ULL) == 0);
+ ATF_REQUIRE(ilog2(0x0000000000000002ULL) == 1);
+ ATF_REQUIRE(ilog2(0x0000000000000004ULL) == 2);
+ ATF_REQUIRE(ilog2(0x0000000000000008ULL) == 3);
+ ATF_REQUIRE(ilog2(0x0000000000000010ULL) == 4);
+ ATF_REQUIRE(ilog2(0x0000000000000020ULL) == 5);
+ ATF_REQUIRE(ilog2(0x0000000000000040ULL) == 6);
+ ATF_REQUIRE(ilog2(0x0000000000000080ULL) == 7);
+ ATF_REQUIRE(ilog2(0x0000000000000100ULL) == 8);
+ ATF_REQUIRE(ilog2(0x0000000000000200ULL) == 9);
+ ATF_REQUIRE(ilog2(0x0000000000000400ULL) == 10);
+ ATF_REQUIRE(ilog2(0x0000000000000800ULL) == 11);
+ ATF_REQUIRE(ilog2(0x0000000000001000ULL) == 12);
+ ATF_REQUIRE(ilog2(0x0000000000002000ULL) == 13);
+ ATF_REQUIRE(ilog2(0x0000000000004000ULL) == 14);
+ ATF_REQUIRE(ilog2(0x0000000000008000ULL) == 15);
+ ATF_REQUIRE(ilog2(0x0000000000010000ULL) == 16);
+ ATF_REQUIRE(ilog2(0x0000000000020000ULL) == 17);
+ ATF_REQUIRE(ilog2(0x0000000000040000ULL) == 18);
+ ATF_REQUIRE(ilog2(0x0000000000080000ULL) == 19);
+ ATF_REQUIRE(ilog2(0x0000000000100000ULL) == 20);
+ ATF_REQUIRE(ilog2(0x0000000000200000ULL) == 21);
+ ATF_REQUIRE(ilog2(0x0000000000400000ULL) == 22);
+ ATF_REQUIRE(ilog2(0x0000000000800000ULL) == 23);
+ ATF_REQUIRE(ilog2(0x0000000001000000ULL) == 24);
+ ATF_REQUIRE(ilog2(0x0000000002000000ULL) == 25);
+ ATF_REQUIRE(ilog2(0x0000000004000000ULL) == 26);
+ ATF_REQUIRE(ilog2(0x0000000008000000ULL) == 27);
+ ATF_REQUIRE(ilog2(0x0000000010000000ULL) == 28);
+ ATF_REQUIRE(ilog2(0x0000000020000000ULL) == 29);
+ ATF_REQUIRE(ilog2(0x0000000040000000ULL) == 30);
+ ATF_REQUIRE(ilog2(0x0000000080000000ULL) == 31);
+ ATF_REQUIRE(ilog2(0x0000000100000000ULL) == 32);
+ ATF_REQUIRE(ilog2(0x0000000200000000ULL) == 33);
+ ATF_REQUIRE(ilog2(0x0000000400000000ULL) == 34);
+ ATF_REQUIRE(ilog2(0x0000000800000000ULL) == 35);
+ ATF_REQUIRE(ilog2(0x0000001000000000ULL) == 36);
+ ATF_REQUIRE(ilog2(0x0000002000000000ULL) == 37);
+ ATF_REQUIRE(ilog2(0x0000004000000000ULL) == 38);
+ ATF_REQUIRE(ilog2(0x0000008000000000ULL) == 39);
+ ATF_REQUIRE(ilog2(0x0000010000000000ULL) == 40);
+ ATF_REQUIRE(ilog2(0x0000020000000000ULL) == 41);
+ ATF_REQUIRE(ilog2(0x0000040000000000ULL) == 42);
+ ATF_REQUIRE(ilog2(0x0000080000000000ULL) == 43);
+ ATF_REQUIRE(ilog2(0x0000100000000000ULL) == 44);
+ ATF_REQUIRE(ilog2(0x0000200000000000ULL) == 45);
+ ATF_REQUIRE(ilog2(0x0000400000000000ULL) == 46);
+ ATF_REQUIRE(ilog2(0x0000800000000000ULL) == 47);
+ ATF_REQUIRE(ilog2(0x0001000000000000ULL) == 48);
+ ATF_REQUIRE(ilog2(0x0002000000000000ULL) == 49);
+ ATF_REQUIRE(ilog2(0x0004000000000000ULL) == 50);
+ ATF_REQUIRE(ilog2(0x0008000000000000ULL) == 51);
+ ATF_REQUIRE(ilog2(0x0010000000000000ULL) == 52);
+ ATF_REQUIRE(ilog2(0x0020000000000000ULL) == 53);
+ ATF_REQUIRE(ilog2(0x0040000000000000ULL) == 54);
+ ATF_REQUIRE(ilog2(0x0080000000000000ULL) == 55);
+ ATF_REQUIRE(ilog2(0x0100000000000000ULL) == 56);
+ ATF_REQUIRE(ilog2(0x0200000000000000ULL) == 57);
+ ATF_REQUIRE(ilog2(0x0400000000000000ULL) == 58);
+ ATF_REQUIRE(ilog2(0x0800000000000000ULL) == 59);
+ ATF_REQUIRE(ilog2(0x1000000000000000ULL) == 60);
+ ATF_REQUIRE(ilog2(0x2000000000000000ULL) == 61);
+ ATF_REQUIRE(ilog2(0x4000000000000000ULL) == 62);
+ ATF_REQUIRE(ilog2(0x8000000000000000ULL) == 63);
+
+ ATF_REQUIRE(ilog2(0x0000000000000003ULL) == 1);
+ ATF_REQUIRE(ilog2(0x0000000000000007ULL) == 2);
+ ATF_REQUIRE(ilog2(0x000000000000000fULL) == 3);
+ ATF_REQUIRE(ilog2(0x000000000000001fULL) == 4);
+ ATF_REQUIRE(ilog2(0x000000000000003fULL) == 5);
+ ATF_REQUIRE(ilog2(0x000000000000007fULL) == 6);
+ ATF_REQUIRE(ilog2(0x00000000000000ffULL) == 7);
+ ATF_REQUIRE(ilog2(0x00000000000001ffULL) == 8);
+ ATF_REQUIRE(ilog2(0x00000000000003ffULL) == 9);
+ ATF_REQUIRE(ilog2(0x00000000000007ffULL) == 10);
+ ATF_REQUIRE(ilog2(0x0000000000000fffULL) == 11);
+ ATF_REQUIRE(ilog2(0x0000000000001fffULL) == 12);
+ ATF_REQUIRE(ilog2(0x0000000000003fffULL) == 13);
+ ATF_REQUIRE(ilog2(0x0000000000007fffULL) == 14);
+ ATF_REQUIRE(ilog2(0x000000000000ffffULL) == 15);
+ ATF_REQUIRE(ilog2(0x000000000001ffffULL) == 16);
+ ATF_REQUIRE(ilog2(0x000000000003ffffULL) == 17);
+ ATF_REQUIRE(ilog2(0x000000000007ffffULL) == 18);
+ ATF_REQUIRE(ilog2(0x00000000000fffffULL) == 19);
+ ATF_REQUIRE(ilog2(0x00000000001fffffULL) == 20);
+ ATF_REQUIRE(ilog2(0x00000000003fffffULL) == 21);
+ ATF_REQUIRE(ilog2(0x00000000007fffffULL) == 22);
+ ATF_REQUIRE(ilog2(0x0000000000ffffffULL) == 23);
+ ATF_REQUIRE(ilog2(0x0000000001ffffffULL) == 24);
+ ATF_REQUIRE(ilog2(0x0000000003ffffffULL) == 25);
+ ATF_REQUIRE(ilog2(0x0000000007ffffffULL) == 26);
+ ATF_REQUIRE(ilog2(0x000000000fffffffULL) == 27);
+ ATF_REQUIRE(ilog2(0x000000001fffffffULL) == 28);
+ ATF_REQUIRE(ilog2(0x000000003fffffffULL) == 29);
+ ATF_REQUIRE(ilog2(0x000000007fffffffULL) == 30);
+ ATF_REQUIRE(ilog2(0x00000000ffffffffULL) == 31);
+ ATF_REQUIRE(ilog2(0x00000001ffffffffULL) == 32);
+ ATF_REQUIRE(ilog2(0x00000003ffffffffULL) == 33);
+ ATF_REQUIRE(ilog2(0x00000007ffffffffULL) == 34);
+ ATF_REQUIRE(ilog2(0x0000000fffffffffULL) == 35);
+ ATF_REQUIRE(ilog2(0x0000001fffffffffULL) == 36);
+ ATF_REQUIRE(ilog2(0x0000003fffffffffULL) == 37);
+ ATF_REQUIRE(ilog2(0x0000007fffffffffULL) == 38);
+ ATF_REQUIRE(ilog2(0x000000ffffffffffULL) == 39);
+ ATF_REQUIRE(ilog2(0x000001ffffffffffULL) == 40);
+ ATF_REQUIRE(ilog2(0x000003ffffffffffULL) == 41);
+ ATF_REQUIRE(ilog2(0x000007ffffffffffULL) == 42);
+ ATF_REQUIRE(ilog2(0x00000fffffffffffULL) == 43);
+ ATF_REQUIRE(ilog2(0x00001fffffffffffULL) == 44);
+ ATF_REQUIRE(ilog2(0x00003fffffffffffULL) == 45);
+ ATF_REQUIRE(ilog2(0x00007fffffffffffULL) == 46);
+ ATF_REQUIRE(ilog2(0x0000ffffffffffffULL) == 47);
+ ATF_REQUIRE(ilog2(0x0001ffffffffffffULL) == 48);
+ ATF_REQUIRE(ilog2(0x0003ffffffffffffULL) == 49);
+ ATF_REQUIRE(ilog2(0x0007ffffffffffffULL) == 50);
+ ATF_REQUIRE(ilog2(0x000fffffffffffffULL) == 51);
+ ATF_REQUIRE(ilog2(0x001fffffffffffffULL) == 52);
+ ATF_REQUIRE(ilog2(0x003fffffffffffffULL) == 53);
+ ATF_REQUIRE(ilog2(0x007fffffffffffffULL) == 54);
+ ATF_REQUIRE(ilog2(0x00ffffffffffffffULL) == 55);
+ ATF_REQUIRE(ilog2(0x01ffffffffffffffULL) == 56);
+ ATF_REQUIRE(ilog2(0x03ffffffffffffffULL) == 57);
+ ATF_REQUIRE(ilog2(0x07ffffffffffffffULL) == 58);
+ ATF_REQUIRE(ilog2(0x0fffffffffffffffULL) == 59);
+ ATF_REQUIRE(ilog2(0x1fffffffffffffffULL) == 60);
+ ATF_REQUIRE(ilog2(0x3fffffffffffffffULL) == 61);
+ ATF_REQUIRE(ilog2(0x7fffffffffffffffULL) == 62);
+ ATF_REQUIRE(ilog2(0xffffffffffffffffULL) == 63);
}
ATF_TP_ADD_TCS(tp)
{
- ATF_TP_ADD_TC(tp, bitmap_basic);
+ ATF_TP_ADD_TC(tp, bitmap_basic);
ATF_TP_ADD_TC(tp, fast_divide32);
ATF_TP_ADD_TC(tp, ffsfls);
- ATF_TP_ADD_TC(tp, ilog2_basic);
- ATF_TP_ADD_TC(tp, ilog2_log2);
+ ATF_TP_ADD_TC(tp, ilog2_32bit);
+ ATF_TP_ADD_TC(tp, ilog2_64bit);
+ ATF_TP_ADD_TC(tp, ilog2_const);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/include/sys/t_cdefs.c b/contrib/netbsd-tests/include/sys/t_cdefs.c
index a473009..14f5cf2 100644
--- a/contrib/netbsd-tests/include/sys/t_cdefs.c
+++ b/contrib/netbsd-tests/include/sys/t_cdefs.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_cdefs.c,v 1.3 2013/09/05 09:01:27 gsutre Exp $ */
+/* $NetBSD: t_cdefs.c,v 1.4 2016/03/16 07:21:36 mrg Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_cdefs.c,v 1.3 2013/09/05 09:01:27 gsutre Exp $");
+__RCSID("$NetBSD: t_cdefs.c,v 1.4 2016/03/16 07:21:36 mrg Exp $");
#include <atf-c.h>
#include <sys/types.h>
@@ -180,34 +180,34 @@ ATF_TC_HEAD(stypefit, tc)
ATF_TC_BODY(stypefit, tc)
{
-#define CHECK(a, b, c) ATF_REQUIRE(!__type_fit(a, b) == c)
-
- CHECK(signed char, -1, 0);
- CHECK(signed char, 1, 0);
- CHECK(signed char, 0x7f, 0);
- CHECK(signed char, 0x80, 1);
- CHECK(signed char, 0xff, 1);
- CHECK(signed char, 0x1ff, 1);
-
- CHECK(signed short, -1, 0);
- CHECK(signed short, 1, 0);
- CHECK(signed short, 0x7fff, 0);
- CHECK(signed short, 0x8000, 1);
- CHECK(signed short, 0xffff, 1);
- CHECK(signed short, 0x1ffff, 1);
-
- CHECK(signed int, -1, 0);
- CHECK(signed int, 1, 0);
- CHECK(signed int, 0x7fffffff, 0);
- CHECK(signed int, 0x80000000, 1);
- CHECK(signed int, 0xffffffff, 1);
- CHECK(signed int, 0x1ffffffffLL, 1);
-
- CHECK(signed long long, -1, 0);
- CHECK(signed long long, 1, 0);
- CHECK(signed long long, 0x7fffffffffffffffLL, 0);
- CHECK(signed long long, 0x8000000000000000LL, 1);
- CHECK(signed long long, 0xffffffffffffffffLL, 1);
+#define CHECK(a, b, c) ATF_REQUIRE(__type_fit(a, b) == c)
+
+ CHECK(signed char, -1, 1);
+ CHECK(signed char, 1, 1);
+ CHECK(signed char, 0x7f, 1);
+ CHECK(signed char, 0x80, 0);
+ CHECK(signed char, 0xff, 0);
+ CHECK(signed char, 0x1ff, 0);
+
+ CHECK(signed short, -1, 1);
+ CHECK(signed short, 1, 1);
+ CHECK(signed short, 0x7fff, 1);
+ CHECK(signed short, 0x8000, 0);
+ CHECK(signed short, 0xffff, 0);
+ CHECK(signed short, 0x1ffff, 0);
+
+ CHECK(signed int, -1, 1);
+ CHECK(signed int, 1, 1);
+ CHECK(signed int, 0x7fffffff, 1);
+ CHECK(signed int, 0x80000000, 0);
+ CHECK(signed int, 0xffffffff, 0);
+ CHECK(signed int, 0x1ffffffffLL, 0);
+
+ CHECK(signed long long, -1, 1);
+ CHECK(signed long long, 1, 1);
+ CHECK(signed long long, 0x7fffffffffffffffLL, 1);
+ CHECK(signed long long, 0x8000000000000000LL, 0);
+ CHECK(signed long long, 0xffffffffffffffffLL, 0);
#undef CHECK
}
@@ -220,34 +220,34 @@ ATF_TC_HEAD(utypefit, tc)
ATF_TC_BODY(utypefit, tc)
{
-#define CHECK(a, b, c) ATF_REQUIRE(!__type_fit(a, b) == c)
-
- CHECK(unsigned char, -1, 1);
- CHECK(unsigned char, 1, 0);
- CHECK(unsigned char, 0x7f, 0);
- CHECK(unsigned char, 0x80, 0);
- CHECK(unsigned char, 0xff, 0);
- CHECK(unsigned char, 0x1ff, 1);
-
- CHECK(unsigned short, -1, 1);
- CHECK(unsigned short, 1, 0);
- CHECK(unsigned short, 0x7fff, 0);
- CHECK(unsigned short, 0x8000, 0);
- CHECK(unsigned short, 0xffff, 0);
- CHECK(unsigned short, 0x1ffff, 1);
-
- CHECK(unsigned int, -1, 1);
- CHECK(unsigned int, 1, 0);
- CHECK(unsigned int, 0x7fffffff, 0);
- CHECK(unsigned int, 0x80000000, 0);
- CHECK(unsigned int, 0xffffffff, 0);
- CHECK(unsigned int, 0x1ffffffffLL, 1);
-
- CHECK(unsigned long long, -1, 1);
- CHECK(unsigned long long, 1, 0);
- CHECK(unsigned long long, 0x7fffffffffffffffULL, 0);
- CHECK(unsigned long long, 0x8000000000000000ULL, 0);
- CHECK(unsigned long long, 0xffffffffffffffffULL, 0);
+#define CHECK(a, b, c) ATF_REQUIRE(__type_fit(a, b) == c)
+
+ CHECK(unsigned char, -1, 0);
+ CHECK(unsigned char, 1, 1);
+ CHECK(unsigned char, 0x7f, 1);
+ CHECK(unsigned char, 0x80, 1);
+ CHECK(unsigned char, 0xff, 1);
+ CHECK(unsigned char, 0x1ff, 0);
+
+ CHECK(unsigned short, -1, 0);
+ CHECK(unsigned short, 1, 1);
+ CHECK(unsigned short, 0x7fff, 1);
+ CHECK(unsigned short, 0x8000, 1);
+ CHECK(unsigned short, 0xffff, 1);
+ CHECK(unsigned short, 0x1ffff, 0);
+
+ CHECK(unsigned int, -1, 0);
+ CHECK(unsigned int, 1, 1);
+ CHECK(unsigned int, 0x7fffffff, 1);
+ CHECK(unsigned int, 0x80000000, 1);
+ CHECK(unsigned int, 0xffffffff, 1);
+ CHECK(unsigned int, 0x1ffffffffLL, 0);
+
+ CHECK(unsigned long long, -1, 0);
+ CHECK(unsigned long long, 1, 1);
+ CHECK(unsigned long long, 0x7fffffffffffffffULL, 1);
+ CHECK(unsigned long long, 0x8000000000000000ULL, 1);
+ CHECK(unsigned long long, 0xffffffffffffffffULL, 1);
#undef CHECK
}
diff --git a/contrib/netbsd-tests/include/sys/t_pslist.c b/contrib/netbsd-tests/include/sys/t_pslist.c
new file mode 100644
index 0000000..f46ed57
--- /dev/null
+++ b/contrib/netbsd-tests/include/sys/t_pslist.c
@@ -0,0 +1,125 @@
+/* $NetBSD: t_pslist.c,v 1.1 2016/04/09 04:39:47 riastradh Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/pslist.h>
+
+#include <atf-c.h>
+
+/*
+ * XXX This is a limited test to make sure the operations behave as
+ * described on a sequential machine. It does nothing to test the
+ * pserialize-safety of any operations.
+ */
+
+ATF_TC(misc);
+ATF_TC_HEAD(misc, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "pserialize-safe list tests");
+}
+ATF_TC_BODY(misc, tc)
+{
+ struct pslist_head h = PSLIST_INITIALIZER;
+ struct element {
+ unsigned i;
+ struct pslist_entry entry;
+ } elements[] = {
+ { .i = 0, .entry = PSLIST_ENTRY_INITIALIZER },
+ { .i = 1 },
+ { .i = 2 },
+ { .i = 3 },
+ { .i = 4 },
+ { .i = 5 },
+ { .i = 6 },
+ { .i = 7 },
+ };
+ struct element *element;
+ unsigned i;
+
+ /* Check PSLIST_INITIALIZER is destroyable. */
+ PSLIST_DESTROY(&h);
+ PSLIST_INIT(&h);
+
+ /* Check PSLIST_ENTRY_INITIALIZER is destroyable. */
+ PSLIST_ENTRY_DESTROY(&elements[0], entry);
+
+ for (i = 0; i < __arraycount(elements); i++)
+ PSLIST_ENTRY_INIT(&elements[i], entry);
+
+ PSLIST_WRITER_INSERT_HEAD(&h, &elements[4], entry);
+ PSLIST_WRITER_INSERT_BEFORE(&elements[4], &elements[2], entry);
+ PSLIST_WRITER_INSERT_BEFORE(&elements[4], &elements[3], entry);
+ PSLIST_WRITER_INSERT_BEFORE(&elements[2], &elements[1], entry);
+ PSLIST_WRITER_INSERT_HEAD(&h, &elements[0], entry);
+ PSLIST_WRITER_INSERT_AFTER(&elements[4], &elements[5], entry);
+ PSLIST_WRITER_INSERT_AFTER(&elements[5], &elements[7], entry);
+ PSLIST_WRITER_INSERT_AFTER(&elements[5], &elements[6], entry);
+
+ PSLIST_WRITER_REMOVE(&elements[0], entry);
+ ATF_CHECK(elements[0].entry.ple_next != NULL);
+ PSLIST_ENTRY_DESTROY(&elements[0], entry);
+
+ PSLIST_WRITER_REMOVE(&elements[4], entry);
+ ATF_CHECK(elements[4].entry.ple_next != NULL);
+ PSLIST_ENTRY_DESTROY(&elements[4], entry);
+
+ PSLIST_ENTRY_INIT(&elements[0], entry);
+ PSLIST_WRITER_INSERT_HEAD(&h, &elements[0], entry);
+
+ PSLIST_ENTRY_INIT(&elements[4], entry);
+ PSLIST_WRITER_INSERT_AFTER(&elements[3], &elements[4], entry);
+
+ i = 0;
+ PSLIST_WRITER_FOREACH(element, &h, struct element, entry) {
+ ATF_CHECK_EQ(i, element->i);
+ i++;
+ }
+ i = 0;
+ PSLIST_READER_FOREACH(element, &h, struct element, entry) {
+ ATF_CHECK_EQ(i, element->i);
+ i++;
+ }
+
+ while ((element = PSLIST_WRITER_FIRST(&h, struct element, entry))
+ != NULL) {
+ PSLIST_WRITER_REMOVE(element, entry);
+ PSLIST_ENTRY_DESTROY(element, entry);
+ }
+
+ PSLIST_DESTROY(&h);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, misc);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/include/sys/t_socket.c b/contrib/netbsd-tests/include/sys/t_socket.c
index ad4d2e6..f60941c 100644
--- a/contrib/netbsd-tests/include/sys/t_socket.c
+++ b/contrib/netbsd-tests/include/sys/t_socket.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_socket.c,v 1.3 2013/10/19 17:45:00 christos Exp $ */
+/* $NetBSD: t_socket.c,v 1.4 2015/02/27 08:30:30 martin Exp $ */
#include <sys/types.h>
#include <sys/mount.h>
@@ -74,7 +74,7 @@ ATF_TC(cmsg_sendfd);
ATF_TC_HEAD(cmsg_sendfd, tc)
{
atf_tc_set_md_var(tc, "descr", "Checks that fd passing works");
- atf_tc_set_md_var(tc, "timeout", "2");
+ atf_tc_set_md_var(tc, "timeout", "10");
}
ATF_TC_BODY(cmsg_sendfd, tc)
diff --git a/contrib/netbsd-tests/include/t_paths.c b/contrib/netbsd-tests/include/t_paths.c
index 653a70b..52a150e 100644
--- a/contrib/netbsd-tests/include/t_paths.c
+++ b/contrib/netbsd-tests/include/t_paths.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_paths.c,v 1.14 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_paths.c,v 1.16 2015/05/07 06:23:23 pgoyette Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_paths.c,v 1.14 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_paths.c,v 1.16 2015/05/07 06:23:23 pgoyette Exp $");
#include <sys/param.h>
#include <sys/stat.h>
@@ -47,6 +47,7 @@ __RCSID("$NetBSD: t_paths.c,v 1.14 2014/11/04 00:20:19 justin Exp $");
#define PATH_DIR __BIT(1) /* A directory */
#define PATH_FILE __BIT(2) /* A file */
#define PATH_ROOT __BIT(3) /* Access for root only */
+#define PATH_OPT __BIT(3) /* Optional, ENODEV if not supported */
static const struct {
const char *path;
@@ -82,7 +83,7 @@ static const struct {
{ _PATH_MIXER, PATH_DEV },
{ _PATH_MIXER0, PATH_DEV },
{ _PATH_NOLOGIN, PATH_FILE },
- { _PATH_POWER, PATH_DEV | PATH_ROOT },
+ { _PATH_POWER, PATH_DEV | PATH_ROOT | PATH_OPT },
{ _PATH_PRINTCAP, PATH_FILE },
{ _PATH_PUD, PATH_DEV | PATH_ROOT },
{ _PATH_PUFFS, PATH_DEV | PATH_ROOT },
@@ -92,12 +93,13 @@ static const struct {
{ _PATH_SKEYKEYS, PATH_FILE | PATH_ROOT },
{ _PATH_SOUND, PATH_DEV },
{ _PATH_SOUND0, PATH_DEV },
- { _PATH_SYSMON, PATH_DEV },
+ { _PATH_SYSMON, PATH_DEV | PATH_OPT },
{ _PATH_TTY, PATH_DEV },
{ _PATH_UNIX, PATH_FILE | PATH_ROOT },
{ _PATH_URANDOM, PATH_DEV },
{ _PATH_VIDEO, PATH_DEV },
{ _PATH_VIDEO0, PATH_DEV },
+ { _PATH_WATCHDOG, PATH_DEV | PATH_OPT },
{ _PATH_DEV, PATH_DIR },
{ _PATH_DEV_PTS, PATH_DIR },
@@ -143,13 +145,22 @@ ATF_TC_BODY(paths, tc)
switch (errno) {
+ case ENODEV:
+ if ((paths[i].flags & PATH_OPT) == 0) {
+
+ atf_tc_fail("Required path %s does "
+ "not exist", paths[i].path);
+ }
+ break;
+
case EPERM: /* FALLTHROUGH */
case EACCES: /* FALLTHROUGH */
if ((paths[i].flags & PATH_ROOT) == 0) {
- atf_tc_fail("UID %u failed to open %s",
- (uint32_t)uid, paths[i].path);
+ atf_tc_fail("UID %u failed to open %s, "
+ "error %d", (uint32_t)uid,
+ paths[i].path, errno);
}
case EBUSY: /* FALLTHROUGH */
diff --git a/contrib/netbsd-tests/ipf/expected/n14 b/contrib/netbsd-tests/ipf/expected/n14
index 7b1a19e..14e1401 100644
--- a/contrib/netbsd-tests/ipf/expected/n14
+++ b/contrib/netbsd-tests/ipf/expected/n14
@@ -11,9 +11,9 @@ RDR 10.1.1.253 80 <- -> 203.1.1.1 80 [10.2.2.6 2000]
RDR 10.1.1.254 80 <- -> 203.1.1.1 80 [10.2.2.5 2000]
Hostmap table:
-10.2.2.7,203.1.1.1 -> 254.1.1.10,0.0.0.0 (use = 1)
-10.2.2.6,203.1.1.1 -> 253.1.1.10,0.0.0.0 (use = 1)
-10.2.2.5,203.1.1.1 -> 254.1.1.10,0.0.0.0 (use = 1)
+10.2.2.7,203.1.1.1 -> 10.1.1.254,0.0.0.0 (use = 1)
+10.2.2.6,203.1.1.1 -> 10.1.1.253,0.0.0.0 (use = 1)
+10.2.2.5,203.1.1.1 -> 10.1.1.254,0.0.0.0 (use = 1)
List of active state sessions:
List of configured pools
List of configured hash tables
diff --git a/contrib/netbsd-tests/ipf/expected/n14_6 b/contrib/netbsd-tests/ipf/expected/n14_6
index b999ee97..c177b62 100644
--- a/contrib/netbsd-tests/ipf/expected/n14_6
+++ b/contrib/netbsd-tests/ipf/expected/n14_6
@@ -11,9 +11,9 @@ RDR 10:1:1::253 80 <- -> 203:0:1::1:1 80 [10::2:2:6 2000]
RDR 10:1:1::254 80 <- -> 203:0:1::1:1 80 [10::2:2:5 2000]
Hostmap table:
-10::2:2:7,203:0:1:0:0:0:1:1 -> 254:1:1::10,any (use = 1)
-10::2:2:6,203:0:1:0:0:0:1:1 -> 253:0:1:0:0:0:1:10,any (use = 1)
-10::2:2:5,203:0:1:0:0:0:1:1 -> 254:1:1::10,any (use = 3)
+10::2:2:7,203:0:1:0:0:0:1:1 -> 10:1:1::254,any (use = 1)
+10::2:2:6,203:0:1:0:0:0:1:1 -> 10:0:1:0:0:0:1:253,any (use = 1)
+10::2:2:5,203:0:1:0:0:0:1:1 -> 10:1:1::254,any (use = 3)
List of active state sessions:
List of configured pools
List of configured hash tables
diff --git a/contrib/netbsd-tests/ipf/t_filter_parse.sh b/contrib/netbsd-tests/ipf/t_filter_parse.sh
index f44db7d..a253088 100755
--- a/contrib/netbsd-tests/ipf/t_filter_parse.sh
+++ b/contrib/netbsd-tests/ipf/t_filter_parse.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_filter_parse.sh,v 1.11 2014/06/29 09:27:58 darrenr Exp $
+# $NetBSD: t_filter_parse.sh,v 1.12 2014/12/06 19:31:25 dholland Exp $
#
# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -133,3 +133,4 @@ atf_init_test_cases()
atf_add_test_case i22
atf_add_test_case i23
}
+
diff --git a/contrib/netbsd-tests/ipf/t_nat_exec.sh b/contrib/netbsd-tests/ipf/t_nat_exec.sh
index 78110dc..ad99a84 100755
--- a/contrib/netbsd-tests/ipf/t_nat_exec.sh
+++ b/contrib/netbsd-tests/ipf/t_nat_exec.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_nat_exec.sh,v 1.20 2014/07/15 20:00:23 martin Exp $
+# $NetBSD: t_nat_exec.sh,v 1.22 2015/12/26 08:01:58 pgoyette Exp $
#
# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -71,9 +71,9 @@ test_case n8 nattest hex hex -T update_ipid=0
test_case n9 nattest hex hex -T update_ipid=0
test_case n10 nattest hex hex -T update_ipid=0
test_case n11 nattest text text
-failing_test_case n12 nattest "Known to be broken" hex hex -T update_ipid=0 -v
+test_case n12 nattest hex hex -T update_ipid=0
test_case n13 nattest text text
-failing_test_case_be n14 nattest "See PR kern/47665" text text
+test_case n14 nattest text text
test_case n15 nattest text text -T update_ipid=0
test_case n16 nattest hex hex -D
test_case n17 nattest hex hex -D
diff --git a/contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c b/contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c
index 5908547..19c7b02 100644
--- a/contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c
+++ b/contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c
@@ -78,7 +78,11 @@ ATF_TC_BODY(fifo, tc)
RL(n = kevent(kq, NULL, 0, event, 1, NULL));
(void)printf("kevent num %d filt %d flags: %#x, fflags: %#x, "
+#ifdef __FreeBSD__
+ "data: %" PRIdPTR "\n", n, event[0].filter, event[0].flags,
+#else
"data: %" PRId64 "\n", n, event[0].filter, event[0].flags,
+#endif
event[0].fflags, event[0].data);
ATF_REQUIRE_EQ(event[0].filter, EVFILT_READ);
diff --git a/contrib/netbsd-tests/kernel/kqueue/read/t_file.c b/contrib/netbsd-tests/kernel/kqueue/read/t_file.c
index 2335172..80479af 100644
--- a/contrib/netbsd-tests/kernel/kqueue/read/t_file.c
+++ b/contrib/netbsd-tests/kernel/kqueue/read/t_file.c
@@ -111,7 +111,11 @@ ATF_TC_BODY(file, tc)
num += n;
(void)printf("kevent num %d flags: %#x, fflags: %#x, data: "
+#ifdef __FreeBSD__
+ "%" PRIdPTR "\n", n, event[0].flags, event[0].fflags,
+#else
"%" PRId64 "\n", n, event[0].flags, event[0].fflags,
+#endif
event[0].data);
if (event[0].data < 0)
diff --git a/contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c b/contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c
index d8e05f2..2cdd015 100644
--- a/contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c
+++ b/contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c
@@ -67,7 +67,11 @@ ATF_TC_BODY(pipe, tc)
RL(n = kevent(kq, NULL, 0, event, 1, NULL));
(void)printf("kevent num %d flags: %#x, fflags: %#x, data: "
+#ifdef __FreeBSD__
+ "%" PRIdPTR "\n", n, event[0].flags, event[0].fflags, event[0].data);
+#else
"%" PRId64 "\n", n, event[0].flags, event[0].fflags, event[0].data);
+#endif
RL(n = read(fds[0], buffer, event[0].data));
buffer[n] = '\0';
diff --git a/contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c b/contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c
index 3a42fd3..57ccf92 100644
--- a/contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c
+++ b/contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c
@@ -103,7 +103,11 @@ h_check(bool check_master)
RL(n = kevent(kq, NULL, 0, event, 1, NULL));
(void)printf("kevent num %d filt %d flags: %#x, fflags: %#x, "
+#ifdef __FreeBSD__
+ "data: %" PRIdPTR "\n", n, event[0].filter, event[0].flags,
+#else
"data: %" PRId64 "\n", n, event[0].filter, event[0].flags,
+#endif
event[0].fflags, event[0].data);
ATF_REQUIRE_EQ(event[0].filter, EVFILT_READ);
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_ioctl.c b/contrib/netbsd-tests/kernel/kqueue/t_ioctl.c
index 8ed5a79..d996fdf 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_ioctl.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_ioctl.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ioctl.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $ */
+/* $NetBSD: t_ioctl.c,v 1.2 2015/01/14 22:22:32 christos Exp $ */
/*-
* Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_ioctl.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $");
+__RCSID("$NetBSD: t_ioctl.c,v 1.2 2015/01/14 22:22:32 christos Exp $");
#include <sys/event.h>
#include <sys/ioctl.h>
@@ -53,7 +53,8 @@ ATF_TC_BODY(kfilter_byfilter, tc)
{
char buf[32];
struct kfilter_mapping km;
- int i, kq;
+ int kq;
+ uint32_t i;
RL(kq = kqueue());
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_proc1.c b/contrib/netbsd-tests/kernel/kqueue/t_proc1.c
index e755309..aa806ba 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_proc1.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_proc1.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_proc1.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $ */
+/* $NetBSD: t_proc1.c,v 1.2 2015/01/14 22:22:32 christos Exp $ */
/*-
* Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_proc1.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $");
+__RCSID("$NetBSD: t_proc1.c,v 1.2 2015/01/14 22:22:32 christos Exp $");
/*
* this also used to trigger problem fixed in
@@ -99,7 +99,8 @@ ATF_TC_BODY(proc1, tc)
{
struct kevent event[1];
pid_t pid;
- int kq, want, status;
+ int kq, status;
+ u_int want;
RL(kq = kqueue());
@@ -112,7 +113,7 @@ ATF_TC_BODY(proc1, tc)
(void)sleep(1); /* give child some time to come up */
- event[0].ident = pid;
+ event[0].ident = (uintptr_t)pid;
event[0].filter = EVFILT_PROC;
event[0].flags = EV_ADD | EV_ENABLE;
event[0].fflags = NOTE_EXIT | NOTE_FORK | NOTE_EXEC; /* | NOTE_TRACK;*/
@@ -138,7 +139,11 @@ ATF_TC_BODY(proc1, tc)
printf(" NOTE_FORK");
}
if (event[0].fflags & NOTE_CHILD)
+#ifdef __FreeBSD__
+ printf(" NOTE_CHILD, parent = %" PRIdPTR, event[0].data);
+#else
printf(" NOTE_CHILD, parent = %" PRId64, event[0].data);
+#endif
printf("\n");
}
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_proc2.c b/contrib/netbsd-tests/kernel/kqueue/t_proc2.c
index 54769d6..2d8d7f7 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_proc2.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_proc2.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_proc2.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $ */
+/* $NetBSD: t_proc2.c,v 1.2 2015/01/14 22:22:32 christos Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -32,8 +32,11 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_proc2.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $");
+__RCSID("$NetBSD: t_proc2.c,v 1.2 2015/01/14 22:22:32 christos Exp $");
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#endif
#include <sys/event.h>
#include <sys/time.h>
#include <sys/types.h>
@@ -106,7 +109,8 @@ ATF_TC_BODY(proc2, tc)
/* NOTREACHED */
}
- EV_SET(&ke, pid, EVFILT_PROC, EV_ADD, NOTE_FORK|NOTE_TRACK, 0, 0);
+ EV_SET(&ke, (uintptr_t)pid, EVFILT_PROC, EV_ADD, NOTE_FORK|NOTE_TRACK,
+ 0, 0);
RL(kevent(kq, &ke, 1, NULL, 0, &timeout));
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_proc3.c b/contrib/netbsd-tests/kernel/kqueue/t_proc3.c
index 3cb9ae5..eac2f9c 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_proc3.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_proc3.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_proc3.c,v 1.1 2012/11/17 21:55:24 joerg Exp $ */
+/* $NetBSD: t_proc3.c,v 1.2 2015/01/14 22:22:32 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,8 +30,11 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_proc3.c,v 1.1 2012/11/17 21:55:24 joerg Exp $");
+__RCSID("$NetBSD: t_proc3.c,v 1.2 2015/01/14 22:22:32 christos Exp $");
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#endif
#include <sys/event.h>
#include <sys/time.h>
#include <sys/types.h>
@@ -63,7 +66,7 @@ ATF_TC_BODY(proc3, tc)
RL(kq = kqueue());
- EV_SET(&ke, getpid(), EVFILT_PROC, EV_ADD, NOTE_TRACK, 0, 0);
+ EV_SET(&ke, (uintptr_t)getpid(), EVFILT_PROC, EV_ADD, NOTE_TRACK, 0, 0);
RL(kevent(kq, &ke, 1, NULL, 0, NULL));
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_sig.c b/contrib/netbsd-tests/kernel/kqueue/t_sig.c
index 4fc0758..ebbd76e 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_sig.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_sig.c
@@ -34,6 +34,9 @@ __COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
__RCSID("$NetBSD: t_sig.c,v 1.2 2010/11/03 16:10:20 christos Exp $");
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#endif
#include <sys/event.h>
#include <sys/ioctl.h>
#include <sys/param.h>
@@ -60,9 +63,13 @@ ATF_TC_HEAD(sig, tc)
ATF_TC_BODY(sig, tc)
{
struct timespec timeout;
+#ifdef __NetBSD__
struct kfilter_mapping km;
+#endif
struct kevent event[1];
+#ifdef __NetBSD__
char namebuf[32];
+#endif
pid_t pid, child;
int kq, n, num, status;
@@ -84,16 +91,22 @@ ATF_TC_BODY(sig, tc)
RL(kq = kqueue());
+#ifdef __NetBSD__
(void)strlcpy(namebuf, "EVFILT_SIGNAL", sizeof(namebuf));
km.name = namebuf;
RL(ioctl(kq, KFILTER_BYNAME, &km));
(void)printf("got %d as filter number for `%s'.\n", km.filter, km.name);
+#endif
/* ignore the signal to avoid taking it for real */
REQUIRE_LIBC(signal(SIGUSR1, SIG_IGN), SIG_ERR);
event[0].ident = SIGUSR1;
+#ifdef __NetBSD__
event[0].filter = km.filter;
+#else
+ event[0].filter = EVFILT_SIGNAL;
+#endif
event[0].flags = EV_ADD | EV_ENABLE;
RL(kevent(kq, event, 1, NULL, 0, NULL));
@@ -117,7 +130,11 @@ ATF_TC_BODY(sig, tc)
if (n == 0)
continue;
+#ifdef __FreeBSD__
+ (void)printf("sig: kevent flags: 0x%x, data: %" PRIdPTR " (# "
+#else
(void)printf("sig: kevent flags: 0x%x, data: %" PRId64 " (# "
+#endif
"times signal posted)\n", event[0].flags, event[0].data);
}
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_vnode.c b/contrib/netbsd-tests/kernel/kqueue/t_vnode.c
new file mode 100644
index 0000000..06ef683
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/kqueue/t_vnode.c
@@ -0,0 +1,536 @@
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#endif
+#include <sys/event.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+/*
+ * Test cases for events triggered by manipulating a target directory
+ * content. Using EVFILT_VNODE filter on the target directory descriptor.
+ *
+ */
+
+static const char *dir_target = "foo";
+static const char *dir_inside1 = "foo/bar1";
+static const char *dir_inside2 = "foo/bar2";
+static const char *dir_outside = "bar";
+static const char *file_inside1 = "foo/baz1";
+static const char *file_inside2 = "foo/baz2";
+static const char *file_outside = "qux";
+static const struct timespec ts = {0, 0};
+static int kq = -1;
+static int target = -1;
+
+int init_target(void);
+int init_kqueue(void);
+int create_file(const char *);
+void cleanup(void);
+
+int
+init_target(void)
+{
+ if (mkdir(dir_target, S_IRWXU) < 0) {
+ return -1;
+ }
+ target = open(dir_target, O_RDONLY, 0);
+ return target;
+}
+
+int
+init_kqueue(void)
+{
+ struct kevent eventlist[1];
+
+ kq = kqueue();
+ if (kq < 0) {
+ return -1;
+ }
+ EV_SET(&eventlist[0], (uintptr_t)target, EVFILT_VNODE,
+ EV_ADD | EV_ONESHOT, NOTE_DELETE |
+ NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB |
+ NOTE_LINK | NOTE_RENAME | NOTE_REVOKE, 0, 0);
+ return kevent(kq, eventlist, 1, NULL, 0, NULL);
+}
+
+int
+create_file(const char *file)
+{
+ int fd;
+
+ fd = open(file, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
+ if (fd < 0) {
+ return -1;
+ }
+ return close(fd);
+}
+
+void
+cleanup(void)
+{
+ (void)unlink(file_inside1);
+ (void)unlink(file_inside2);
+ (void)unlink(file_outside);
+ (void)rmdir(dir_inside1);
+ (void)rmdir(dir_inside2);
+ (void)rmdir(dir_outside);
+ (void)rmdir(dir_target);
+ (void)close(kq);
+ (void)close(target);
+}
+
+ATF_TC_WITH_CLEANUP(dir_no_note_link_create_file_in);
+ATF_TC_HEAD(dir_no_note_link_create_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) does not return NOTE_LINK for the directory "
+ "'foo' if a file 'foo/baz' is created.");
+}
+ATF_TC_BODY(dir_no_note_link_create_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, 0);
+}
+ATF_TC_CLEANUP(dir_no_note_link_create_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_no_note_link_delete_file_in);
+ATF_TC_HEAD(dir_no_note_link_delete_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) does not return NOTE_LINK for the directory "
+ "'foo' if a file 'foo/baz' is deleted.");
+}
+ATF_TC_BODY(dir_no_note_link_delete_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(unlink(file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, 0);
+}
+ATF_TC_CLEANUP(dir_no_note_link_delete_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_no_note_link_mv_dir_within);
+ATF_TC_HEAD(dir_no_note_link_mv_dir_within, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) does not return NOTE_LINK for the directory "
+ "'foo' if a directory 'foo/bar' is renamed to 'foo/baz'.");
+}
+ATF_TC_BODY(dir_no_note_link_mv_dir_within, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_inside1, dir_inside2) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, 0);
+}
+ATF_TC_CLEANUP(dir_no_note_link_mv_dir_within, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_no_note_link_mv_file_within);
+ATF_TC_HEAD(dir_no_note_link_mv_file_within, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) does not return NOTE_LINK for the directory "
+ "'foo' if a file 'foo/baz' is renamed to 'foo/qux'.");
+}
+ATF_TC_BODY(dir_no_note_link_mv_file_within, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(file_inside1, file_inside2) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, 0);
+}
+ATF_TC_CLEANUP(dir_no_note_link_mv_file_within, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_link_create_dir_in);
+ATF_TC_HEAD(dir_note_link_create_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_LINK for the directory "
+ "'foo' if a directory 'foo/bar' is created.");
+}
+ATF_TC_BODY(dir_note_link_create_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, NOTE_LINK);
+}
+ATF_TC_CLEANUP(dir_note_link_create_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_link_delete_dir_in);
+ATF_TC_HEAD(dir_note_link_delete_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_LINK for the directory "
+ "'foo' if a directory 'foo/bar' is deleted.");
+}
+ATF_TC_BODY(dir_note_link_delete_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rmdir(dir_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, NOTE_LINK);
+}
+ATF_TC_CLEANUP(dir_note_link_delete_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_link_mv_dir_in);
+ATF_TC_HEAD(dir_note_link_mv_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_LINK for the directory "
+ "'foo' if a directory 'bar' is renamed to 'foo/bar'.");
+}
+ATF_TC_BODY(dir_note_link_mv_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_outside, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_outside, dir_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, NOTE_LINK);
+}
+ATF_TC_CLEANUP(dir_note_link_mv_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_link_mv_dir_out);
+ATF_TC_HEAD(dir_note_link_mv_dir_out, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_LINK for the directory "
+ "'foo' if a directory 'foo/bar' is renamed to 'bar'.");
+}
+ATF_TC_BODY(dir_note_link_mv_dir_out, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_inside1, dir_outside) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, NOTE_LINK);
+}
+ATF_TC_CLEANUP(dir_note_link_mv_dir_out, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_create_dir_in);
+ATF_TC_HEAD(dir_note_write_create_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'foo/bar' is created.");
+}
+ATF_TC_BODY(dir_note_write_create_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_create_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_create_file_in);
+ATF_TC_HEAD(dir_note_write_create_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'foo/baz' is created.");
+}
+ATF_TC_BODY(dir_note_write_create_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_create_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_delete_dir_in);
+ATF_TC_HEAD(dir_note_write_delete_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'foo/bar' is deleted.");
+}
+ATF_TC_BODY(dir_note_write_delete_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rmdir(dir_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_delete_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_delete_file_in);
+ATF_TC_HEAD(dir_note_write_delete_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'foo/baz' is deleted.");
+}
+ATF_TC_BODY(dir_note_write_delete_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(unlink(file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_delete_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_dir_in);
+ATF_TC_HEAD(dir_note_write_mv_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'bar' is renamed to 'foo/bar'.");
+}
+ATF_TC_BODY(dir_note_write_mv_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_outside, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_outside, dir_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_dir_out);
+ATF_TC_HEAD(dir_note_write_mv_dir_out, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'foo/bar' is renamed to 'bar'.");
+}
+ATF_TC_BODY(dir_note_write_mv_dir_out, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_inside1, dir_outside) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_dir_out, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_dir_within);
+ATF_TC_HEAD(dir_note_write_mv_dir_within, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'foo/bar' is renamed to 'foo/baz'.");
+}
+ATF_TC_BODY(dir_note_write_mv_dir_within, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_inside1, dir_inside2) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_dir_within, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_file_in);
+ATF_TC_HEAD(dir_note_write_mv_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'qux' is renamed to 'foo/baz'.");
+}
+ATF_TC_BODY(dir_note_write_mv_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_outside) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(file_outside, file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_file_out);
+ATF_TC_HEAD(dir_note_write_mv_file_out, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'foo/baz' is renamed to 'qux'.");
+}
+ATF_TC_BODY(dir_note_write_mv_file_out, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(file_inside1, file_outside) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_file_out, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_file_within);
+ATF_TC_HEAD(dir_note_write_mv_file_within, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'foo/baz' is renamed to 'foo/qux'.");
+}
+ATF_TC_BODY(dir_note_write_mv_file_within, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(file_inside1, file_inside2) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_file_within, tc)
+{
+ cleanup();
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, dir_no_note_link_create_file_in);
+ ATF_TP_ADD_TC(tp, dir_no_note_link_delete_file_in);
+ ATF_TP_ADD_TC(tp, dir_no_note_link_mv_dir_within);
+ ATF_TP_ADD_TC(tp, dir_no_note_link_mv_file_within);
+ ATF_TP_ADD_TC(tp, dir_note_link_create_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_link_delete_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_link_mv_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_link_mv_dir_out);
+ ATF_TP_ADD_TC(tp, dir_note_write_create_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_create_file_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_delete_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_delete_file_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_dir_out);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_dir_within);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_file_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_file_out);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_file_within);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/kernel/msg.h b/contrib/netbsd-tests/kernel/msg.h
new file mode 100644
index 0000000..547400e
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/msg.h
@@ -0,0 +1,136 @@
+/* $NetBSD: msg.h,v 1.1 2016/12/05 20:10:10 christos Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+struct msg_fds {
+ int pfd[2];
+ int cfd[2];
+};
+
+#define CLOSEFD(fd) do { \
+ if (fd != -1) { \
+ close(fd); \
+ fd = -1; \
+ } \
+} while (/*CONSTCOND*/ 0)
+
+static int
+msg_open(struct msg_fds *fds)
+{
+ if (pipe(fds->pfd) == -1)
+ return -1;
+ if (pipe(fds->cfd) == -1) {
+ close(fds->pfd[0]);
+ close(fds->pfd[1]);
+ return -1;
+ }
+ return 0;
+}
+
+static void
+msg_close(struct msg_fds *fds)
+{
+ CLOSEFD(fds->pfd[0]);
+ CLOSEFD(fds->pfd[1]);
+ CLOSEFD(fds->cfd[0]);
+ CLOSEFD(fds->cfd[1]);
+}
+
+static int
+msg_write_child(const char *info, struct msg_fds *fds, void *msg, size_t len)
+{
+ ssize_t rv;
+ CLOSEFD(fds->cfd[1]);
+ CLOSEFD(fds->pfd[0]);
+
+ printf("Send %s\n", info);
+ rv = write(fds->pfd[1], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+// printf("Wait %s\n", info);
+ rv = read(fds->cfd[0], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+ return 0;
+}
+
+static int
+msg_write_parent(const char *info, struct msg_fds *fds, void *msg, size_t len)
+{
+ ssize_t rv;
+ CLOSEFD(fds->pfd[1]);
+ CLOSEFD(fds->cfd[0]);
+
+ printf("Send %s\n", info);
+ rv = write(fds->cfd[1], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+// printf("Wait %s\n", info);
+ rv = read(fds->pfd[0], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+ return 0;
+}
+
+static int
+msg_read_parent(const char *info, struct msg_fds *fds, void *msg, size_t len)
+{
+ ssize_t rv;
+ CLOSEFD(fds->pfd[1]);
+ CLOSEFD(fds->cfd[0]);
+
+ printf("Wait %s\n", info);
+ rv = read(fds->pfd[0], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+// printf("Send %s\n", info);
+ rv = write(fds->cfd[1], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+ return 0;
+}
+
+static int
+msg_read_child(const char *info, struct msg_fds *fds, void *msg, size_t len)
+{
+ ssize_t rv;
+ CLOSEFD(fds->cfd[1]);
+ CLOSEFD(fds->pfd[0]);
+
+ printf("Wait %s\n", info);
+ rv = read(fds->cfd[0], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+// printf("Send %s\n", info);
+ rv = write(fds->pfd[1], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+ return 0;
+}
diff --git a/contrib/netbsd-tests/kernel/t_mqueue.c b/contrib/netbsd-tests/kernel/t_mqueue.c
index aa98d91..485269f 100644
--- a/contrib/netbsd-tests/kernel/t_mqueue.c
+++ b/contrib/netbsd-tests/kernel/t_mqueue.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mqueue.c,v 1.4 2014/03/02 19:56:48 jmmv Exp $ */
+/* $NetBSD: t_mqueue.c,v 1.5 2017/01/10 22:10:22 christos Exp $ */
/*
* Test for POSIX message queue priority handling.
@@ -14,6 +14,7 @@
#endif
#include <atf-c.h>
+#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/contrib/netbsd-tests/kernel/t_ptrace.c b/contrib/netbsd-tests/kernel/t_ptrace.c
new file mode 100644
index 0000000..074a953
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace.c
@@ -0,0 +1,208 @@
+/* $NetBSD: t_ptrace.c,v 1.17 2016/11/13 22:59:31 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_ptrace.c,v 1.17 2016/11/13 22:59:31 kamil Exp $");
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/stat.h>
+#include <sys/sysctl.h>
+#include <err.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+#include "../h_macros.h"
+
+/*
+ * A child process cannot call atf functions and expect them to magically
+ * work like in the parent.
+ * The printf(3) messaging from a child will not work out of the box as well
+ * without estabilishing a communication protocol with its parent. To not
+ * overcomplicate the tests - do not log from a child and use err(3)/errx(3)
+ * wrapped with FORKEE_ASSERT()/FORKEE_ASSERTX() as that is guaranteed to work.
+ */
+#define FORKEE_ASSERTX(x) \
+do { \
+ int ret = (x); \
+ if (!ret) \
+ errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s", \
+ __FILE__, __LINE__, __func__, #x); \
+} while (0)
+
+#define FORKEE_ASSERT(x) \
+do { \
+ int ret = (x); \
+ if (!ret) \
+ err(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s", \
+ __FILE__, __LINE__, __func__, #x); \
+} while (0)
+
+ATF_TC(attach_pid0);
+ATF_TC_HEAD(attach_pid0, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot attach to PID 0");
+}
+
+ATF_TC_BODY(attach_pid0, tc)
+{
+ errno = 0;
+ ATF_REQUIRE_ERRNO(EPERM, ptrace(PT_ATTACH, 0, NULL, 0) == -1);
+}
+
+ATF_TC(attach_pid1);
+ATF_TC_HEAD(attach_pid1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot attach to PID 1 (as non-root)");
+
+ atf_tc_set_md_var(tc, "require.user", "unprivileged");
+}
+
+ATF_TC_BODY(attach_pid1, tc)
+{
+ ATF_REQUIRE_ERRNO(EPERM, ptrace(PT_ATTACH, 1, NULL, 0) == -1);
+}
+
+ATF_TC(attach_pid1_securelevel);
+ATF_TC_HEAD(attach_pid1_securelevel, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot attach to PID 1 with "
+ "securelevel >= 1 (as root)");
+
+ atf_tc_set_md_var(tc, "require.user", "root");
+}
+
+ATF_TC_BODY(attach_pid1_securelevel, tc)
+{
+ int level;
+ size_t len = sizeof(level);
+
+ ATF_REQUIRE(sysctlbyname("kern.securelevel", &level, &len, NULL, 0)
+ != -1);
+
+ if (level < 1) {
+ atf_tc_skip("Test must be run with securelevel >= 1");
+ }
+
+ ATF_REQUIRE_ERRNO(EPERM, ptrace(PT_ATTACH, 1, NULL, 0) == -1);
+}
+
+ATF_TC(attach_self);
+ATF_TC_HEAD(attach_self, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot attach to self (as it's nonsense)");
+}
+
+ATF_TC_BODY(attach_self, tc)
+{
+ ATF_REQUIRE_ERRNO(EINVAL, ptrace(PT_ATTACH, getpid(), NULL, 0) == -1);
+}
+
+ATF_TC(attach_chroot);
+ATF_TC_HEAD(attach_chroot, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot trace another process unless the "
+ "process's root directory is at or below the tracing process's "
+ "root");
+
+ atf_tc_set_md_var(tc, "require.user", "root");
+}
+
+ATF_TC_BODY(attach_chroot, tc)
+{
+ char buf[PATH_MAX];
+ pid_t child;
+ int fds_toparent[2], fds_fromparent[2];
+ int rv;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+
+ (void)memset(buf, '\0', sizeof(buf));
+ ATF_REQUIRE(getcwd(buf, sizeof(buf)) != NULL);
+ (void)strlcat(buf, "/dir", sizeof(buf));
+
+ ATF_REQUIRE(mkdir(buf, 0500) == 0);
+ ATF_REQUIRE(chdir(buf) == 0);
+
+ ATF_REQUIRE(pipe(fds_toparent) == 0);
+ ATF_REQUIRE(pipe(fds_fromparent) == 0);
+ child = atf_utils_fork();
+ if (child == 0) {
+ FORKEE_ASSERT(close(fds_toparent[0]) == 0);
+ FORKEE_ASSERT(close(fds_fromparent[1]) == 0);
+
+ FORKEE_ASSERT(chroot(buf) == 0);
+
+ rv = write(fds_toparent[1], &msg, sizeof(msg));
+ FORKEE_ASSERTX(rv == sizeof(msg));
+
+ ATF_REQUIRE_ERRNO(EPERM,
+ ptrace(PT_ATTACH, getppid(), NULL, 0) == -1);
+
+ rv = read(fds_fromparent[0], &msg, sizeof(msg));
+ FORKEE_ASSERTX(rv == sizeof(msg));
+
+ _exit(0);
+ }
+ ATF_REQUIRE(close(fds_toparent[1]) == 0);
+ ATF_REQUIRE(close(fds_fromparent[0]) == 0);
+
+ printf("Waiting for chrooting of the child PID %d", child);
+ rv = read(fds_toparent[0], &msg, sizeof(msg));
+ ATF_REQUIRE(rv == sizeof(msg));
+
+ printf("Child is ready, it will try to PT_ATTACH to parent\n");
+ rv = write(fds_fromparent[1], &msg, sizeof(msg));
+ ATF_REQUIRE(rv == sizeof(msg));
+
+ printf("fds_fromparent is no longer needed - close it\n");
+ ATF_REQUIRE(close(fds_fromparent[1]) == 0);
+
+ printf("fds_toparent is no longer needed - close it\n");
+ ATF_REQUIRE(close(fds_toparent[0]) == 0);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ setvbuf(stdout, NULL, _IONBF, 0);
+ setvbuf(stderr, NULL, _IONBF, 0);
+ ATF_TP_ADD_TC(tp, attach_pid0);
+ ATF_TP_ADD_TC(tp, attach_pid1);
+ ATF_TP_ADD_TC(tp, attach_pid1_securelevel);
+ ATF_TP_ADD_TC(tp, attach_self);
+ ATF_TP_ADD_TC(tp, attach_chroot);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait.c b/contrib/netbsd-tests/kernel/t_ptrace_wait.c
new file mode 100644
index 0000000..e502a03
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait.c
@@ -0,0 +1,5082 @@
+/* $NetBSD: t_ptrace_wait.c,v 1.53 2017/01/10 05:08:24 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_ptrace_wait.c,v 1.53 2017/01/10 05:08:24 kamil Exp $");
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/sysctl.h>
+#include <sys/wait.h>
+#include <machine/reg.h>
+#include <err.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+#include "../h_macros.h"
+
+#include "t_ptrace_wait.h"
+#include "msg.h"
+
+#define PARENT_TO_CHILD(info, fds, msg) \
+ ATF_REQUIRE(msg_write_child(info " to child " # fds, &fds, &msg, sizeof(msg)) == 0)
+
+#define CHILD_FROM_PARENT(info, fds, msg) \
+ FORKEE_ASSERT(msg_read_parent(info " from parent " # fds, &fds, &msg, sizeof(msg)) == 0)
+
+#define CHILD_TO_PARENT(info, fds, msg) \
+ FORKEE_ASSERT(msg_write_parent(info " to parent " # fds, &fds, &msg, sizeof(msg)) == 0)
+
+#define PARENT_FROM_CHILD(info, fds, msg) \
+ ATF_REQUIRE(msg_read_child(info " from parent " # fds, &fds, &msg, sizeof(msg)) == 0)
+
+ATF_TC(traceme1);
+ATF_TC_HEAD(traceme1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify SIGSTOP followed by _exit(2) in a child");
+}
+
+ATF_TC_BODY(traceme1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(traceme2);
+ATF_TC_HEAD(traceme2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify SIGSTOP followed by _exit(2) in a child");
+}
+
+static int traceme2_caught = 0;
+
+static void
+traceme2_sighandler(int sig)
+{
+ FORKEE_ASSERT_EQ(sig, SIGINT);
+
+ ++traceme2_caught;
+}
+
+ATF_TC_BODY(traceme2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP, sigsent = SIGINT;
+ pid_t child, wpid;
+ struct sigaction sa;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ sa.sa_handler = traceme2_sighandler;
+ sa.sa_flags = SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+
+ FORKEE_ASSERT(sigaction(sigsent, &sa, NULL) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(traceme2_caught, 1);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and with "
+ "signal %s to be sent\n", strsignal(sigsent));
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigsent) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the exited child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(traceme3);
+ATF_TC_HEAD(traceme3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify SIGSTOP followed by termination by a signal in a child");
+}
+
+ATF_TC_BODY(traceme3, tc)
+{
+ const int sigval = SIGSTOP, sigsent = SIGINT /* Without core-dump */;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ /* NOTREACHED */
+ FORKEE_ASSERTX(0 &&
+ "Child should be terminated by a signal from its parent");
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and with "
+ "signal %s to be sent\n", strsignal(sigsent));
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigsent) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_signaled(status, sigsent, 0);
+
+ printf("Before calling %s() for the exited child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(traceme4);
+ATF_TC_HEAD(traceme4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify SIGSTOP followed by SIGCONT and _exit(2) in a child");
+}
+
+ATF_TC_BODY(traceme4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP, sigsent = SIGCONT;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before raising %s from child\n", strsignal(sigsent));
+ FORKEE_ASSERT(raise(sigsent) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(),child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigsent);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the exited child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach1);
+ATF_TC_HEAD(attach1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer sees process termination before the parent");
+}
+
+ATF_TC_BODY(attach1, tc)
+{
+ struct msg_fds parent_tracee, parent_tracer;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ // Wait for parent to let us exit
+ CHILD_FROM_PARENT("exit tracee", parent_tracee, msg);
+ _exit(exitval_tracee);
+ }
+
+ printf("Spawn debugger\n");
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("tracer ready", parent_tracer, msg);
+
+ /* Wait for parent to tell use that tracee should have exited */
+ CHILD_FROM_PARENT("wait for tracee exit", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+ printf("Tracee %d exited with %d\n", tracee, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("tracer ready", parent_tracer, msg);
+
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("exit tracee", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+
+ printf("Assert that there is no status about tracee %d - "
+ "Tracer must detect zombie first - calling %s()\n", tracee,
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Tell the tracer child should have exited\n");
+ PARENT_TO_CHILD("wait for tracee exit", parent_tracer, msg);
+ printf("Wait for tracer to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+
+ printf("Wait from tracer child to complete waiting for tracee\n");
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracer);
+ msg_close(&parent_tracee);
+}
+#endif
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach2);
+ATF_TC_HEAD(attach2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that any tracer sees process termination before its "
+ "parent");
+}
+
+ATF_TC_BODY(attach2, tc)
+{
+ struct msg_fds parent_tracer, parent_tracee;
+ const int exitval_tracee = 5;
+ const int exitval_tracer1 = 10, exitval_tracer2 = 20;
+ pid_t tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ /* Wait for message from the parent */
+ CHILD_FROM_PARENT("Message 1", parent_tracee, msg);
+ _exit(exitval_tracee);
+ }
+
+ printf("Spawn debugger\n");
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ /* Fork again and drop parent to reattach to PID 1 */
+ tracer = atf_utils_fork();
+ if (tracer != 0)
+ _exit(exitval_tracer1);
+
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("Message 1", parent_tracer, msg);
+ CHILD_FROM_PARENT("Message 2", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer2);
+ }
+ printf("Wait for the tracer process (direct child) to exit calling "
+ "%s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracer, &status, 0), tracer);
+
+ validate_status_exited(status, exitval_tracer1);
+
+ printf("Wait for the non-exited tracee process with %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, NULL, WNOHANG), 0);
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("Message 1", parent_tracer, msg);
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Resume the tracer and let it detect exited tracee\n");
+ PARENT_TO_CHILD("Message 2", parent_tracer, msg);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracer);
+ msg_close(&parent_tracee);
+
+}
+#endif
+
+ATF_TC(attach3);
+ATF_TC_HEAD(attach3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer parent can PT_ATTACH to its child");
+}
+
+ATF_TC_BODY(attach3, tc)
+{
+ struct msg_fds parent_tracee;
+ const int exitval_tracee = 5;
+ pid_t tracee, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ CHILD_FROM_PARENT("Message 1", parent_tracee, msg);
+ printf("Parent should now attach to tracee\n");
+
+ CHILD_FROM_PARENT("Message 2", parent_tracee, msg);
+ /* Wait for message from the parent */
+ _exit(exitval_tracee);
+ }
+ PARENT_TO_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Before calling PT_ATTACH for tracee %d\n", tracee);
+ ATF_REQUIRE(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ printf("Wait for the stopped tracee process with %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ validate_status_stopped(status, SIGSTOP);
+
+ printf("Resume tracee with PT_CONTINUE\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ printf("Let the tracee exit now\n");
+ PARENT_TO_CHILD("Message 2", parent_tracee, msg);
+
+ printf("Wait for tracee to exit with %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ printf("Before calling %s() for tracee\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(tracee, &status, 0));
+
+ msg_close(&parent_tracee);
+}
+
+ATF_TC(attach4);
+ATF_TC_HEAD(attach4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer child can PT_ATTACH to its parent");
+}
+
+ATF_TC_BODY(attach4, tc)
+{
+ struct msg_fds parent_tracee;
+ const int exitval_tracer = 5;
+ pid_t tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracer\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+
+ /* Wait for message from the parent */
+ CHILD_FROM_PARENT("Message 1", parent_tracee, msg);
+
+ printf("Attach to parent PID %d with PT_ATTACH from child\n",
+ getppid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, getppid(), NULL, 0) != -1);
+
+ printf("Wait for the stopped parent process with %s()\n",
+ TWAIT_FNAME);
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(getppid(), &status, 0), getppid());
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ printf("Resume parent with PT_DETACH\n");
+ FORKEE_ASSERT(ptrace(PT_DETACH, getppid(), (void *)1, 0)
+ != -1);
+
+ /* Tell parent we are ready */
+ CHILD_TO_PARENT("Message 1", parent_tracee, msg);
+
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to become ready\n");
+ PARENT_TO_CHILD("Message 1", parent_tracee, msg);
+ printf("Allow the tracer to exit now\n");
+ PARENT_FROM_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Wait for tracer to exit with %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracer, &status, 0), tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Before calling %s() for tracer\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(tracer, &status, 0));
+
+ msg_close(&parent_tracee);
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach5);
+ATF_TC_HEAD(attach5, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer sees its parent when attached to tracer "
+ "(check getppid(2))");
+}
+
+ATF_TC_BODY(attach5, tc)
+{
+ struct msg_fds parent_tracer, parent_tracee;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t parent, tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ parent = getppid();
+
+ /* Emit message to the parent */
+ CHILD_TO_PARENT("tracee ready", parent_tracee, msg);
+ CHILD_FROM_PARENT("exit tracee", parent_tracee, msg);
+
+ FORKEE_ASSERT_EQ(parent, getppid());
+
+ _exit(exitval_tracee);
+ }
+ printf("Wait for child to record its parent identifier (pid)\n");
+ PARENT_FROM_CHILD("tracee ready", parent_tracee, msg);
+
+ printf("Spawn debugger\n");
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ /* No IPC to communicate with the child */
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("tracer ready", parent_tracer, msg);
+
+ /* Wait for parent to tell use that tracee should have exited */
+ CHILD_FROM_PARENT("wait for tracee exit", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("tracer ready", parent_tracer, msg);
+
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("exit tracee", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Tell the tracer child should have exited\n");
+ PARENT_TO_CHILD("wait for tracee exit", parent_tracer, msg);
+
+ printf("Wait from tracer child to complete waiting for tracee\n");
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracer);
+ msg_close(&parent_tracee);
+}
+#endif
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach6);
+ATF_TC_HEAD(attach6, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer sees its parent when attached to tracer "
+ "(check sysctl(7) and struct kinfo_proc2)");
+}
+
+ATF_TC_BODY(attach6, tc)
+{
+ struct msg_fds parent_tracee, parent_tracer;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t parent, tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int name[CTL_MAXNAME];
+ struct kinfo_proc2 kp;
+ size_t len = sizeof(kp);
+ unsigned int namelen;
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ parent = getppid();
+
+ /* Emit message to the parent */
+ CHILD_TO_PARENT("Message 1", parent_tracee, msg);
+ CHILD_FROM_PARENT("Message 2", parent_tracee, msg);
+
+ namelen = 0;
+ name[namelen++] = CTL_KERN;
+ name[namelen++] = KERN_PROC2;
+ name[namelen++] = KERN_PROC_PID;
+ name[namelen++] = getpid();
+ name[namelen++] = len;
+ name[namelen++] = 1;
+
+ FORKEE_ASSERT(sysctl(name, namelen, &kp, &len, NULL, 0) == 0);
+ FORKEE_ASSERT_EQ(parent, kp.p_ppid);
+
+ _exit(exitval_tracee);
+ }
+
+ printf("Wait for child to record its parent identifier (pid)\n");
+ PARENT_FROM_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Spawn debugger\n");
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ /* No IPC to communicate with the child */
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("Message 1", parent_tracer, msg);
+
+ CHILD_FROM_PARENT("Message 2", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("Message 1", parent_tracer, msg);
+
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Resume the tracer and let it detect exited tracee\n");
+ PARENT_TO_CHILD("Message 2", parent_tracer, msg);
+
+ printf("Wait for tracer to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracee);
+ msg_close(&parent_tracer);
+}
+#endif
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach7);
+ATF_TC_HEAD(attach7, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer sees its parent when attached to tracer "
+ "(check /proc/curproc/status 3rd column)");
+}
+
+ATF_TC_BODY(attach7, tc)
+{
+ struct msg_fds parent_tracee, parent_tracer;
+ int rv;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t parent, tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ FILE *fp;
+ struct stat st;
+ const char *fname = "/proc/curproc/status";
+ char s_executable[MAXPATHLEN];
+ int s_pid, s_ppid;
+ /*
+ * Format:
+ * EXECUTABLE PID PPID ...
+ */
+
+ ATF_REQUIRE((rv = stat(fname, &st)) == 0 || (errno == ENOENT));
+ if (rv != 0) {
+ atf_tc_skip("/proc/curproc/status not found");
+ }
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ parent = getppid();
+
+ // Wait for parent to let us exit
+ CHILD_TO_PARENT("tracee ready", parent_tracee, msg);
+ CHILD_FROM_PARENT("tracee exit", parent_tracee, msg);
+
+ FORKEE_ASSERT((fp = fopen(fname, "r")) != NULL);
+ fscanf(fp, "%s %d %d", s_executable, &s_pid, &s_ppid);
+ FORKEE_ASSERT(fclose(fp) == 0);
+ FORKEE_ASSERT_EQ(parent, s_ppid);
+
+ _exit(exitval_tracee);
+ }
+
+ printf("Wait for child to record its parent identifier (pid)\n");
+ PARENT_FROM_CHILD("tracee ready", parent_tracee, msg);
+
+ printf("Spawn debugger\n");
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("tracer ready", parent_tracer, msg);
+
+ /* Wait for parent to tell use that tracee should have exited */
+ CHILD_FROM_PARENT("wait for tracee exit", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("tracer ready", parent_tracer, msg);
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("tracee exit", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Resume the tracer and let it detect exited tracee\n");
+ PARENT_TO_CHILD("Message 2", parent_tracer, msg);
+
+ printf("Wait for tracer to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracee);
+ msg_close(&parent_tracer);
+}
+#endif
+
+ATF_TC(eventmask1);
+ATF_TC_HEAD(eventmask1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that empty EVENT_MASK is preserved");
+}
+
+ATF_TC_BODY(eventmask1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_event_t set_event, get_event;
+ const int len = sizeof(ptrace_event_t);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ set_event.pe_set_event = 0;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &set_event, len) != -1);
+ ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, child, &get_event, len) != -1);
+ ATF_REQUIRE(memcmp(&set_event, &get_event, len) == 0);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(eventmask2);
+ATF_TC_HEAD(eventmask2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that PTRACE_FORK in EVENT_MASK is preserved");
+}
+
+ATF_TC_BODY(eventmask2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_event_t set_event, get_event;
+ const int len = sizeof(ptrace_event_t);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ set_event.pe_set_event = PTRACE_FORK;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &set_event, len) != -1);
+ ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, child, &get_event, len) != -1);
+ ATF_REQUIRE(memcmp(&set_event, &get_event, len) == 0);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(fork1);
+ATF_TC_HEAD(fork1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that fork(2) is intercepted by ptrace(2) with EVENT_MASK "
+ "set to PTRACE_FORK");
+}
+
+ATF_TC_BODY(fork1, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_state_t state;
+ const int slen = sizeof(state);
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = fork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Enable PTRACE_FORK in EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = PTRACE_FORK;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child %d\n", TWAIT_FNAME, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_FORK);
+
+ child2 = state.pe_other_pid;
+ printf("Reported PTRACE_FORK event with forkee %d\n", child2);
+
+ printf("Before calling %s() for the forkee %d of the child %d\n",
+ TWAIT_FNAME, child2, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child2, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_FORK);
+ ATF_REQUIRE_EQ(state.pe_other_pid, child);
+
+ printf("Before resuming the forkee process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child2, (void *)1, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the forkee - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_exited(status, exitval2);
+
+ printf("Before calling %s() for the forkee - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(child2, &status, 0));
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+ATF_TC(fork2);
+ATF_TC_HEAD(fork2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that fork(2) is not intercepted by ptrace(2) with empty "
+ "EVENT_MASK");
+}
+
+ATF_TC_BODY(fork2, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = fork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Set empty EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = 0;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(vfork1);
+ATF_TC_HEAD(vfork1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that vfork(2) is intercepted by ptrace(2) with EVENT_MASK "
+ "set to PTRACE_VFORK");
+}
+
+ATF_TC_BODY(vfork1, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_state_t state;
+ const int slen = sizeof(state);
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+
+ /*
+ * ptrace(2) command PT_SET_EVENT_MASK: option PTRACE_VFORK unsupported
+ */
+#ifndef PTRACE_VFORK
+#define PTRACE_VFORK 0
+#endif
+ atf_tc_expect_fail("PR kern/51630");
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = vfork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Enable PTRACE_VFORK in EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = PTRACE_VFORK;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child %d\n", TWAIT_FNAME, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_VFORK);
+
+ child2 = state.pe_other_pid;
+ printf("Reported PTRACE_VFORK event with forkee %d\n", child2);
+
+ printf("Before calling %s() for the forkee %d of the child %d\n",
+ TWAIT_FNAME, child2, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child2, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_VFORK);
+ ATF_REQUIRE_EQ(state.pe_other_pid, child);
+
+ printf("Before resuming the forkee process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child2, (void *)1, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the forkee - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_exited(status, exitval2);
+
+ printf("Before calling %s() for the forkee - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(child2, &status, 0));
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+ATF_TC(vfork2);
+ATF_TC_HEAD(vfork2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that vfork(2) is not intercepted by ptrace(2) with empty "
+ "EVENT_MASK");
+}
+
+ATF_TC_BODY(vfork2, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = vfork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Set empty EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = 0;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d1);
+ATF_TC_HEAD(io_read_d1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and len = sizeof(uint8_t)");
+}
+
+ATF_TC_BODY(io_read_d1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me = 0;
+ const uint8_t magic = 0xab;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d2);
+ATF_TC_HEAD(io_read_d2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and len = sizeof(uint16_t)");
+}
+
+ATF_TC_BODY(io_read_d2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint16_t lookup_me = 0;
+ const uint16_t magic = 0x1234;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx16 " != expected %" PRIx16, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d3);
+ATF_TC_HEAD(io_read_d3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and len = sizeof(uint32_t)");
+}
+
+ATF_TC_BODY(io_read_d3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint32_t lookup_me = 0;
+ const uint32_t magic = 0x1234abcd;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx32 " != expected %" PRIx32, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d4);
+ATF_TC_HEAD(io_read_d4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and len = sizeof(uint64_t)");
+}
+
+ATF_TC_BODY(io_read_d4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint64_t lookup_me = 0;
+ const uint64_t magic = 0x1234abcd9876dcfa;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx64 " != expected %" PRIx64, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_write_d1);
+ATF_TC_HEAD(io_write_d1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and len = sizeof(uint8_t)");
+}
+
+ATF_TC_BODY(io_write_d1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me = 0;
+ const uint8_t magic = 0xab;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me = magic;
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_write_d2);
+ATF_TC_HEAD(io_write_d2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and len = sizeof(uint16_t)");
+}
+
+ATF_TC_BODY(io_write_d2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint16_t lookup_me = 0;
+ const uint16_t magic = 0xab12;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me = magic;
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_write_d3);
+ATF_TC_HEAD(io_write_d3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and len = sizeof(uint32_t)");
+}
+
+ATF_TC_BODY(io_write_d3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint32_t lookup_me = 0;
+ const uint32_t magic = 0xab127643;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me = magic;
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_write_d4);
+ATF_TC_HEAD(io_write_d4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and len = sizeof(uint64_t)");
+}
+
+ATF_TC_BODY(io_write_d4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint64_t lookup_me = 0;
+ const uint64_t magic = 0xab12764376490123;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me = magic;
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d1);
+ATF_TC_HEAD(read_d1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D called once");
+}
+
+ATF_TC_BODY(read_d1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me = 0;
+ const int magic = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me = ptrace(PT_READ_D, child, &lookup_me, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %#x != expected %#x", lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d2);
+ATF_TC_HEAD(read_d2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D called twice");
+}
+
+ATF_TC_BODY(read_d2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me1 = magic1;
+ lookup_me2 = magic2;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_D, child, &lookup_me1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_D, child, &lookup_me2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d3);
+ATF_TC_HEAD(read_d3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D called three times");
+}
+
+ATF_TC_BODY(read_d3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+ const int magic3 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me1 = magic1;
+ lookup_me2 = magic2;
+ lookup_me3 = magic3;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_D, child, &lookup_me1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_D, child, &lookup_me2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Read new lookup_me3 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me3 = ptrace(PT_READ_D, child, &lookup_me3, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me3, magic3,
+ "got value %#x != expected %#x", lookup_me3, magic3);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d4);
+ATF_TC_HEAD(read_d4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D called four times");
+}
+
+ATF_TC_BODY(read_d4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ int lookup_me4 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+ const int magic3 = (int)random();
+ const int magic4 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me1 = magic1;
+ lookup_me2 = magic2;
+ lookup_me3 = magic3;
+ lookup_me4 = magic4;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_D, child, &lookup_me1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_D, child, &lookup_me2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Read new lookup_me3 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me3 = ptrace(PT_READ_D, child, &lookup_me3, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me3, magic3,
+ "got value %#x != expected %#x", lookup_me3, magic3);
+
+ printf("Read new lookup_me4 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me4 = ptrace(PT_READ_D, child, &lookup_me4, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me4, magic4,
+ "got value %#x != expected %#x", lookup_me4, magic4);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(write_d1);
+ATF_TC_HEAD(write_d1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D called once");
+}
+
+ATF_TC_BODY(write_d1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me = 0;
+ const int magic = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me, magic) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(write_d2);
+ATF_TC_HEAD(write_d2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D called twice");
+}
+
+ATF_TC_BODY(write_d2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me1, magic1);
+ FORKEE_ASSERT_EQ(lookup_me2, magic2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me1 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me1, magic1) != -1);
+
+ printf("Write new lookup_me2 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me2, magic2) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(write_d3);
+ATF_TC_HEAD(write_d3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D called three times");
+}
+
+ATF_TC_BODY(write_d3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+ const int magic3 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me1, magic1);
+ FORKEE_ASSERT_EQ(lookup_me2, magic2);
+ FORKEE_ASSERT_EQ(lookup_me3, magic3);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me1 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me1, magic1) != -1);
+
+ printf("Write new lookup_me2 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me2, magic2) != -1);
+
+ printf("Write new lookup_me3 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me3, magic3) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(write_d4);
+ATF_TC_HEAD(write_d4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D called four times");
+}
+
+ATF_TC_BODY(write_d4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ int lookup_me4 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+ const int magic3 = (int)random();
+ const int magic4 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me1, magic1);
+ FORKEE_ASSERT_EQ(lookup_me2, magic2);
+ FORKEE_ASSERT_EQ(lookup_me3, magic3);
+ FORKEE_ASSERT_EQ(lookup_me4, magic4);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me1 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me1, magic1) != -1);
+
+ printf("Write new lookup_me2 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me2, magic2) != -1);
+
+ printf("Write new lookup_me3 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me3, magic3) != -1);
+
+ printf("Write new lookup_me4 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me4, magic4) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d_write_d_handshake1);
+ATF_TC_HEAD(io_read_d_write_d_handshake1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and PIOD_WRITE_D handshake");
+}
+
+ATF_TC_BODY(io_read_d_write_d_handshake1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me_fromtracee = 0;
+ const uint8_t magic_fromtracee = (uint8_t)random();
+ uint8_t lookup_me_totracee = 0;
+ const uint8_t magic_totracee = (uint8_t)random();
+ struct ptrace_io_desc io_fromtracee = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me_fromtracee,
+ .piod_addr = &lookup_me_fromtracee,
+ .piod_len = sizeof(lookup_me_fromtracee)
+ };
+ struct ptrace_io_desc io_totracee = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me_totracee,
+ .piod_addr = &lookup_me_totracee,
+ .piod_len = sizeof(lookup_me_totracee)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me_fromtracee = magic_fromtracee;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me_totracee, magic_totracee);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me_fromtracee PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io_fromtracee, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_fromtracee, magic_fromtracee,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me_fromtracee,
+ magic_fromtracee);
+
+ lookup_me_totracee = magic_totracee;
+
+ printf("Write lookup_me_totracee to PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io_totracee, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_totracee, magic_totracee,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me_totracee,
+ magic_totracee);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d_write_d_handshake2);
+ATF_TC_HEAD(io_read_d_write_d_handshake2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and PIOD_READ_D handshake");
+}
+
+ATF_TC_BODY(io_read_d_write_d_handshake2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me_fromtracee = 0;
+ const uint8_t magic_fromtracee = (uint8_t)random();
+ uint8_t lookup_me_totracee = 0;
+ const uint8_t magic_totracee = (uint8_t)random();
+ struct ptrace_io_desc io_fromtracee = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me_fromtracee,
+ .piod_addr = &lookup_me_fromtracee,
+ .piod_len = sizeof(lookup_me_fromtracee)
+ };
+ struct ptrace_io_desc io_totracee = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me_totracee,
+ .piod_addr = &lookup_me_totracee,
+ .piod_len = sizeof(lookup_me_totracee)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me_fromtracee = magic_fromtracee;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me_totracee, magic_totracee);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me_totracee = magic_totracee;
+
+ printf("Write lookup_me_totracee to PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io_totracee, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_totracee, magic_totracee,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me_totracee,
+ magic_totracee);
+
+ printf("Read lookup_me_fromtracee PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io_fromtracee, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_fromtracee, magic_fromtracee,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me_fromtracee,
+ magic_fromtracee);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d_write_d_handshake1);
+ATF_TC_HEAD(read_d_write_d_handshake1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D with PT_WRITE_D handshake");
+}
+
+ATF_TC_BODY(read_d_write_d_handshake1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me_fromtracee = 0;
+ const int magic_fromtracee = (int)random();
+ int lookup_me_totracee = 0;
+ const int magic_totracee = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me_fromtracee = magic_fromtracee;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me_totracee, magic_totracee);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me_fromtracee PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me_fromtracee =
+ ptrace(PT_READ_D, child, &lookup_me_fromtracee, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_fromtracee, magic_fromtracee,
+ "got value %#x != expected %#x", lookup_me_fromtracee,
+ magic_fromtracee);
+
+ printf("Write new lookup_me_totracee to PID=%d from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE
+ (ptrace(PT_WRITE_D, child, &lookup_me_totracee, magic_totracee)
+ != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d_write_d_handshake2);
+ATF_TC_HEAD(read_d_write_d_handshake2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D with PT_READ_D handshake");
+}
+
+ATF_TC_BODY(read_d_write_d_handshake2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me_fromtracee = 0;
+ const int magic_fromtracee = (int)random();
+ int lookup_me_totracee = 0;
+ const int magic_totracee = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me_fromtracee = magic_fromtracee;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me_totracee, magic_totracee);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me_totracee to PID=%d from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE
+ (ptrace(PT_WRITE_D, child, &lookup_me_totracee, magic_totracee)
+ != -1);
+
+ printf("Read new lookup_me_fromtracee PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me_fromtracee =
+ ptrace(PT_READ_D, child, &lookup_me_fromtracee, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_fromtracee, magic_fromtracee,
+ "got value %#x != expected %#x", lookup_me_fromtracee,
+ magic_fromtracee);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+/* These dummy functions are used to be copied with ptrace(2) calls */
+static int __used
+dummy_fn1(int a, int b, int c, int d)
+{
+
+ a *= 1;
+ b += 2;
+ c -= 3;
+ d /= 4;
+
+ return a + b * c - d;
+}
+
+static int __used
+dummy_fn2(int a, int b, int c, int d)
+{
+
+ a *= 4;
+ b += 3;
+ c -= 2;
+ d /= 1;
+
+ return a + b * c - d;
+}
+
+static int __used
+dummy_fn3(int a, int b, int c, int d)
+{
+
+ a *= 10;
+ b += 20;
+ c -= 30;
+ d /= 40;
+
+ return a + b * c - d;
+}
+
+static int __used
+dummy_fn4(int a, int b, int c, int d)
+{
+
+ a *= 40;
+ b += 30;
+ c -= 20;
+ d /= 10;
+
+ return a + b * c - d;
+}
+
+ATF_TC(io_read_i1);
+ATF_TC_HEAD(io_read_i1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_I and len = sizeof(uint8_t)");
+}
+
+ATF_TC_BODY(io_read_i1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me = 0;
+ uint8_t magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_I,
+ .piod_offs = dummy_fn1,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_i2);
+ATF_TC_HEAD(io_read_i2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_I and len = sizeof(uint16_t)");
+}
+
+ATF_TC_BODY(io_read_i2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint16_t lookup_me = 0;
+ uint16_t magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_I,
+ .piod_offs = dummy_fn1,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx16 " != expected %" PRIx16, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_i3);
+ATF_TC_HEAD(io_read_i3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_I and len = sizeof(uint32_t)");
+}
+
+ATF_TC_BODY(io_read_i3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint32_t lookup_me = 0;
+ uint32_t magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_I,
+ .piod_offs = dummy_fn1,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx32 " != expected %" PRIx32, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_i4);
+ATF_TC_HEAD(io_read_i4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_I and len = sizeof(uint64_t)");
+}
+
+ATF_TC_BODY(io_read_i4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint64_t lookup_me = 0;
+ uint64_t magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_I,
+ .piod_offs = dummy_fn1,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx64 " != expected %" PRIx64, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_i1);
+ATF_TC_HEAD(read_i1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_I called once");
+}
+
+ATF_TC_BODY(read_i1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me = 0;
+ int magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me = ptrace(PT_READ_I, child, dummy_fn1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %#x != expected %#x", lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_i2);
+ATF_TC_HEAD(read_i2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_I called twice");
+}
+
+ATF_TC_BODY(read_i2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int magic1;
+ int magic2;
+ memcpy(&magic1, dummy_fn1, sizeof(magic1));
+ memcpy(&magic2, dummy_fn2, sizeof(magic2));
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_I, child, dummy_fn1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_I, child, dummy_fn2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_i3);
+ATF_TC_HEAD(read_i3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_I called three times");
+}
+
+ATF_TC_BODY(read_i3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ int magic1;
+ int magic2;
+ int magic3;
+ memcpy(&magic1, dummy_fn1, sizeof(magic1));
+ memcpy(&magic2, dummy_fn2, sizeof(magic2));
+ memcpy(&magic3, dummy_fn3, sizeof(magic3));
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_I, child, dummy_fn1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_I, child, dummy_fn2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Read new lookup_me3 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me3 = ptrace(PT_READ_I, child, dummy_fn3, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me3, magic3,
+ "got value %#x != expected %#x", lookup_me3, magic3);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_i4);
+ATF_TC_HEAD(read_i4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_I called four times");
+}
+
+ATF_TC_BODY(read_i4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ int lookup_me4 = 0;
+ int magic1;
+ int magic2;
+ int magic3;
+ int magic4;
+ memcpy(&magic1, dummy_fn1, sizeof(magic1));
+ memcpy(&magic2, dummy_fn2, sizeof(magic2));
+ memcpy(&magic3, dummy_fn3, sizeof(magic3));
+ memcpy(&magic4, dummy_fn4, sizeof(magic4));
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_I, child, dummy_fn1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_I, child, dummy_fn2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Read new lookup_me3 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me3 = ptrace(PT_READ_I, child, dummy_fn3, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me3, magic3,
+ "got value %#x != expected %#x", lookup_me3, magic3);
+
+ printf("Read new lookup_me4 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me4 = ptrace(PT_READ_I, child, dummy_fn4, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me4, magic4,
+ "got value %#x != expected %#x", lookup_me4, magic4);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs1);
+ATF_TC_HEAD(regs1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETREGS call without further steps");
+}
+
+ATF_TC_BODY(regs1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs2);
+ATF_TC_HEAD(regs2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETREGS call and retrieve PC");
+}
+
+ATF_TC_BODY(regs2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Retrieved PC=%" PRIxREGISTER "\n", PTRACE_REG_PC(&r));
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs3);
+ATF_TC_HEAD(regs3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETREGS call and retrieve SP");
+}
+
+ATF_TC_BODY(regs3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Retrieved SP=%" PRIxREGISTER "\n", PTRACE_REG_SP(&r));
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs4);
+ATF_TC_HEAD(regs4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETREGS call and retrieve INTRV");
+}
+
+ATF_TC_BODY(regs4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Retrieved INTRV=%" PRIxREGISTER "\n", PTRACE_REG_INTRV(&r));
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs5);
+ATF_TC_HEAD(regs5, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_GETREGS and PT_SETREGS calls without changing regs");
+}
+
+ATF_TC_BODY(regs5, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Call SETREGS for the child process (without changed regs)\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_FPREGS)
+ATF_TC(fpregs1);
+ATF_TC_HEAD(fpregs1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETFPREGS call without further steps");
+}
+
+ATF_TC_BODY(fpregs1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct fpreg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETFPREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETFPREGS, child, &r, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_FPREGS)
+ATF_TC(fpregs2);
+ATF_TC_HEAD(fpregs2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_GETFPREGS and PT_SETFPREGS calls without changing "
+ "regs");
+}
+
+ATF_TC_BODY(fpregs2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct fpreg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETFPREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETFPREGS, child, &r, 0) != -1);
+
+ printf("Call SETFPREGS for the child (without changed regs)\n");
+ ATF_REQUIRE(ptrace(PT_SETFPREGS, child, &r, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(step1);
+ATF_TC_HEAD(step1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify single PT_STEP call");
+}
+
+ATF_TC_BODY(step1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(100);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(100));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(step2);
+ATF_TC_HEAD(step2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_STEP called twice");
+}
+
+ATF_TC_BODY(step2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+ int N = 2;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(999);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(999));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ while (N --> 0) {
+ printf("Before resuming the child process where it left off "
+ "and without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0),
+ child);
+
+ validate_status_stopped(status, SIGTRAP);
+ }
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(step3);
+ATF_TC_HEAD(step3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_STEP called three times");
+}
+
+ATF_TC_BODY(step3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+ int N = 3;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(999);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(999));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ while (N --> 0) {
+ printf("Before resuming the child process where it left off "
+ "and without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0),
+ child);
+
+ validate_status_stopped(status, SIGTRAP);
+ }
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(step4);
+ATF_TC_HEAD(step4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_STEP called four times");
+}
+
+ATF_TC_BODY(step4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+ int N = 4;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(999);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(999));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ while (N --> 0) {
+ printf("Before resuming the child process where it left off "
+ "and without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0),
+ child);
+
+ validate_status_stopped(status, SIGTRAP);
+ }
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+ATF_TC(kill1);
+ATF_TC_HEAD(kill1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that PT_CONTINUE with SIGKILL terminates child");
+}
+
+ATF_TC_BODY(kill1, tc)
+{
+ const int sigval = SIGSTOP, sigsent = SIGKILL;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ /* NOTREACHED */
+ FORKEE_ASSERTX(0 &&
+ "Child should be terminated by a signal from its parent");
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigsent) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_signaled(status, sigsent, 0);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(kill2);
+ATF_TC_HEAD(kill2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that PT_KILL terminates child");
+}
+
+ATF_TC_BODY(kill2, tc)
+{
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ /* NOTREACHED */
+ FORKEE_ASSERTX(0 &&
+ "Child should be terminated by a signal from its parent");
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_KILL, child, (void*)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_signaled(status, SIGKILL, 0);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(lwpinfo1);
+ATF_TC_HEAD(lwpinfo1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic LWPINFO call for single thread (PT_TRACE_ME)");
+}
+
+ATF_TC_BODY(lwpinfo1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_lwpinfo info = {0, 0};
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_LWPINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_LWPINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Assert that there exists a thread\n");
+ ATF_REQUIRE(info.pl_lwpid > 0);
+
+ printf("Assert that lwp thread %d received event PL_EVENT_SIGNAL\n",
+ info.pl_lwpid);
+ ATF_REQUIRE_EQ_MSG(info.pl_event, PL_EVENT_SIGNAL,
+ "Received event %d != expected event %d",
+ info.pl_event, PL_EVENT_SIGNAL);
+
+ printf("Before calling ptrace(2) with PT_LWPINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_LWPINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Assert that there are no more lwp threads in child\n");
+ ATF_REQUIRE_EQ(info.pl_lwpid, 0);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(lwpinfo2);
+ATF_TC_HEAD(lwpinfo2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic LWPINFO call for single thread (PT_ATTACH from "
+ "tracer)");
+}
+
+ATF_TC_BODY(lwpinfo2, tc)
+{
+ struct msg_fds parent_tracee, parent_tracer;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_lwpinfo info = {0, 0};
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+
+ /* Wait for message from the parent */
+ CHILD_TO_PARENT("tracee ready", parent_tracee, msg);
+ CHILD_FROM_PARENT("tracee exit", parent_tracee, msg);
+
+ _exit(exitval_tracee);
+ }
+ PARENT_FROM_CHILD("tracee ready", parent_tracee, msg);
+
+ printf("Spawn debugger\n");
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ /* No IPC to communicate with the child */
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ printf("Before calling ptrace(2) with PT_LWPINFO for child\n");
+ FORKEE_ASSERT(ptrace(PT_LWPINFO, tracee, &info, sizeof(info))
+ != -1);
+
+ printf("Assert that there exists a thread\n");
+ FORKEE_ASSERTX(info.pl_lwpid > 0);
+
+ printf("Assert that lwp thread %d received event "
+ "PL_EVENT_SIGNAL\n", info.pl_lwpid);
+ FORKEE_ASSERT_EQ(info.pl_event, PL_EVENT_SIGNAL);
+
+ printf("Before calling ptrace(2) with PT_LWPINFO for child\n");
+ FORKEE_ASSERT(ptrace(PT_LWPINFO, tracee, &info, sizeof(info))
+ != -1);
+
+ printf("Assert that there are no more lwp threads in child\n");
+ FORKEE_ASSERTX(info.pl_lwpid == 0);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("tracer ready", parent_tracer, msg);
+ /* Wait for parent */
+ CHILD_FROM_PARENT("tracer wait", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("tracer ready", parent_tracer, msg);
+
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("tracee exit", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Resume the tracer and let it detect exited tracee\n");
+ PARENT_TO_CHILD("tracer wait", parent_tracer, msg);
+
+ printf("Wait for tracer to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracer);
+ msg_close(&parent_tracee);
+}
+#endif
+
+ATF_TC(siginfo1);
+ATF_TC_HEAD(siginfo1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic PT_GET_SIGINFO call for SIGTRAP from tracee");
+}
+
+ATF_TC_BODY(siginfo1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGTRAP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_siginfo info;
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+ printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+ info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+ info.psi_siginfo.si_errno);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(siginfo2);
+ATF_TC_HEAD(siginfo2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic PT_GET_SIGINFO and PT_SET_SIGINFO calls without "
+ "modification of SIGINT from tracee");
+}
+
+static int siginfo2_caught = 0;
+
+static void
+siginfo2_sighandler(int sig)
+{
+ FORKEE_ASSERT_EQ(sig, SIGINT);
+
+ ++siginfo2_caught;
+}
+
+ATF_TC_BODY(siginfo2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGINT;
+ pid_t child, wpid;
+ struct sigaction sa;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_siginfo info;
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ sa.sa_handler = siginfo2_sighandler;
+ sa.sa_flags = SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+
+ FORKEE_ASSERT(sigaction(sigval, &sa, NULL) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(siginfo2_caught, 1);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+ printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+ info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+ info.psi_siginfo.si_errno);
+
+ printf("Before calling ptrace(2) with PT_SET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_SET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigval) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(siginfo3);
+ATF_TC_HEAD(siginfo3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic PT_GET_SIGINFO and PT_SET_SIGINFO calls with "
+ "setting signal to new value");
+}
+
+static int siginfo3_caught = 0;
+
+static void
+siginfo3_sigaction(int sig, siginfo_t *info, void *ctx)
+{
+ FORKEE_ASSERT_EQ(sig, SIGTRAP);
+
+ FORKEE_ASSERT_EQ(info->si_signo, SIGTRAP);
+ FORKEE_ASSERT_EQ(info->si_code, TRAP_BRKPT);
+
+ ++siginfo3_caught;
+}
+
+ATF_TC_BODY(siginfo3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGINT;
+ const int sigfaked = SIGTRAP;
+ const int sicodefaked = TRAP_BRKPT;
+ pid_t child, wpid;
+ struct sigaction sa;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_siginfo info;
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ sa.sa_sigaction = siginfo3_sigaction;
+ sa.sa_flags = SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+
+ FORKEE_ASSERT(sigaction(sigfaked, &sa, NULL) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(siginfo3_caught, 1);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+ printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+ info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+ info.psi_siginfo.si_errno);
+
+ printf("Before setting new faked signal to signo=%d si_code=%d\n",
+ sigfaked, sicodefaked);
+ info.psi_siginfo.si_signo = sigfaked;
+ info.psi_siginfo.si_code = sicodefaked;
+
+ printf("Before calling ptrace(2) with PT_SET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_SET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, sigfaked);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, sicodefaked);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigfaked) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(siginfo4);
+ATF_TC_HEAD(siginfo4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Detect SIGTRAP TRAP_EXEC from tracee");
+}
+
+ATF_TC_BODY(siginfo4, tc)
+{
+ const int sigval = SIGTRAP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ struct ptrace_siginfo info;
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before calling execve(2) from child\n");
+ execlp("/bin/echo", "/bin/echo", NULL);
+
+ FORKEE_ASSERT(0 && "Not reached");
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+ printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+ info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+ info.psi_siginfo.si_errno);
+
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, sigval);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_EXEC);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(siginfo5);
+ATF_TC_HEAD(siginfo5, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that fork(2) is intercepted by ptrace(2) with EVENT_MASK "
+ "set to PTRACE_FORK and reports correct signal information");
+}
+
+ATF_TC_BODY(siginfo5, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_state_t state;
+ const int slen = sizeof(state);
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+ struct ptrace_siginfo info;
+
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = fork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, sigval);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, SI_LWP);
+
+ printf("Enable PTRACE_FORK in EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = PTRACE_FORK;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child %d\n", TWAIT_FNAME, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_CHLD);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_FORK);
+
+ child2 = state.pe_other_pid;
+ printf("Reported PTRACE_FORK event with forkee %d\n", child2);
+
+ printf("Before calling %s() for the forkee %d of the child %d\n",
+ TWAIT_FNAME, child2, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_CHLD);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child2, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_FORK);
+ ATF_REQUIRE_EQ(state.pe_other_pid, child);
+
+ printf("Before resuming the forkee process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child2, (void *)1, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the forkee - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_exited(status, exitval2);
+
+ printf("Before calling %s() for the forkee - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(child2, &status, 0));
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGCHLD);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, CLD_EXITED);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(siginfo6);
+ATF_TC_HEAD(siginfo6, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify single PT_STEP call with signal information check");
+}
+
+ATF_TC_BODY(siginfo6, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+ struct ptrace_siginfo info;
+
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(100);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(100));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, sigval);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, SI_LWP);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_TRACE);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+ATF_TP_ADD_TCS(tp)
+{
+ setvbuf(stdout, NULL, _IONBF, 0);
+ setvbuf(stderr, NULL, _IONBF, 0);
+ ATF_TP_ADD_TC(tp, traceme1);
+ ATF_TP_ADD_TC(tp, traceme2);
+ ATF_TP_ADD_TC(tp, traceme3);
+ ATF_TP_ADD_TC(tp, traceme4);
+
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach1);
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach2);
+ ATF_TP_ADD_TC(tp, attach3);
+ ATF_TP_ADD_TC(tp, attach4);
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach5);
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach6);
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach7);
+
+ ATF_TP_ADD_TC(tp, eventmask1);
+ ATF_TP_ADD_TC(tp, eventmask2);
+
+ ATF_TP_ADD_TC_HAVE_PID(tp, fork1);
+ ATF_TP_ADD_TC(tp, fork2);
+
+ ATF_TP_ADD_TC_HAVE_PID(tp, vfork1);
+ ATF_TP_ADD_TC(tp, vfork2);
+
+ ATF_TP_ADD_TC(tp, io_read_d1);
+ ATF_TP_ADD_TC(tp, io_read_d2);
+ ATF_TP_ADD_TC(tp, io_read_d3);
+ ATF_TP_ADD_TC(tp, io_read_d4);
+
+ ATF_TP_ADD_TC(tp, io_write_d1);
+ ATF_TP_ADD_TC(tp, io_write_d2);
+ ATF_TP_ADD_TC(tp, io_write_d3);
+ ATF_TP_ADD_TC(tp, io_write_d4);
+
+ ATF_TP_ADD_TC(tp, read_d1);
+ ATF_TP_ADD_TC(tp, read_d2);
+ ATF_TP_ADD_TC(tp, read_d3);
+ ATF_TP_ADD_TC(tp, read_d4);
+
+ ATF_TP_ADD_TC(tp, write_d1);
+ ATF_TP_ADD_TC(tp, write_d2);
+ ATF_TP_ADD_TC(tp, write_d3);
+ ATF_TP_ADD_TC(tp, write_d4);
+
+ ATF_TP_ADD_TC(tp, io_read_d_write_d_handshake1);
+ ATF_TP_ADD_TC(tp, io_read_d_write_d_handshake2);
+
+ ATF_TP_ADD_TC(tp, read_d_write_d_handshake1);
+ ATF_TP_ADD_TC(tp, read_d_write_d_handshake2);
+
+ ATF_TP_ADD_TC(tp, io_read_i1);
+ ATF_TP_ADD_TC(tp, io_read_i2);
+ ATF_TP_ADD_TC(tp, io_read_i3);
+ ATF_TP_ADD_TC(tp, io_read_i4);
+
+ ATF_TP_ADD_TC(tp, read_i1);
+ ATF_TP_ADD_TC(tp, read_i2);
+ ATF_TP_ADD_TC(tp, read_i3);
+ ATF_TP_ADD_TC(tp, read_i4);
+
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs1);
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs2);
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs3);
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs4);
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs5);
+
+ ATF_TP_ADD_TC_HAVE_FPREGS(tp, fpregs1);
+ ATF_TP_ADD_TC_HAVE_FPREGS(tp, fpregs2);
+
+ ATF_TP_ADD_TC_PT_STEP(tp, step1);
+ ATF_TP_ADD_TC_PT_STEP(tp, step2);
+ ATF_TP_ADD_TC_PT_STEP(tp, step3);
+ ATF_TP_ADD_TC_PT_STEP(tp, step4);
+
+ ATF_TP_ADD_TC(tp, kill1);
+ ATF_TP_ADD_TC(tp, kill2);
+
+ ATF_TP_ADD_TC(tp, lwpinfo1);
+ ATF_TP_ADD_TC_HAVE_PID(tp, lwpinfo2);
+
+ ATF_TP_ADD_TC(tp, siginfo1);
+ ATF_TP_ADD_TC(tp, siginfo2);
+ ATF_TP_ADD_TC(tp, siginfo3);
+ ATF_TP_ADD_TC(tp, siginfo4);
+ ATF_TP_ADD_TC_HAVE_PID(tp, siginfo5);
+ ATF_TP_ADD_TC_PT_STEP(tp, siginfo6);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait.h b/contrib/netbsd-tests/kernel/t_ptrace_wait.h
new file mode 100644
index 0000000..9c6921c
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait.h
@@ -0,0 +1,431 @@
+/* $NetBSD: t_ptrace_wait.h,v 1.7 2017/01/09 22:09:20 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Detect plain wait(2) use-case */
+#if !defined(TWAIT_WAITPID) && \
+ !defined(TWAIT_WAITID) && \
+ !defined(TWAIT_WAIT3) && \
+ !defined(TWAIT_WAIT4) && \
+ !defined(TWAIT_WAIT6)
+#define TWAIT_WAIT
+#endif
+
+/*
+ * There are two classes of wait(2)-like functions:
+ * - wait4(2)-like accepting pid_t, optional options parameter, struct rusage*
+ * - wait6(2)-like accepting idtype_t, id_t, struct wrusage, mandatory options
+ *
+ * The TWAIT_FNAME value is to be used for convenience in debug messages.
+ *
+ * The TWAIT_GENERIC() macro is designed to reuse the same unmodified
+ * code with as many wait(2)-like functions as possible.
+ *
+ * In a common use-case wait4(2) and wait6(2)-like function can work the almost
+ * the same way, however there are few important differences:
+ * wait6(2) must specify P_PID for idtype to match wpid from wait4(2).
+ * To behave like wait4(2), wait6(2) the 'options' to wait must include
+ * WEXITED|WTRUNCATED.
+ *
+ * There are two helper macros (they purpose it to mach more than one
+ * wait(2)-like function):
+ * The TWAIT_HAVE_STATUS - specifies whether a function can retrieve
+ * status (as integer value).
+ * The TWAIT_HAVE_PID - specifies whether a function can request
+ * exact process identifier
+ * The TWAIT_HAVE_RUSAGE - specifies whether a function can request
+ * the struct rusage value
+ *
+ */
+
+#if defined(TWAIT_WAIT)
+# define TWAIT_FNAME "wait"
+# define TWAIT_WAIT4TYPE(a,b,c,d) wait((b))
+# define TWAIT_GENERIC(a,b,c) wait((b))
+# define TWAIT_HAVE_STATUS 1
+#elif defined(TWAIT_WAITPID)
+# define TWAIT_FNAME "waitpid"
+# define TWAIT_WAIT4TYPE(a,b,c,d) waitpid((a),(b),(c))
+# define TWAIT_GENERIC(a,b,c) waitpid((a),(b),(c))
+# define TWAIT_HAVE_PID 1
+# define TWAIT_HAVE_STATUS 1
+#elif defined(TWAIT_WAITID)
+# define TWAIT_FNAME "waitid"
+# define TWAIT_GENERIC(a,b,c) \
+ waitid(P_PID,(a),NULL,(c)|WEXITED|WTRAPPED)
+# define TWAIT_WAIT6TYPE(a,b,c,d,e,f) waitid((a),(b),(f),(d))
+# define TWAIT_HAVE_PID 1
+#elif defined(TWAIT_WAIT3)
+# define TWAIT_FNAME "wait3"
+# define TWAIT_WAIT4TYPE(a,b,c,d) wait3((b),(c),(d))
+# define TWAIT_GENERIC(a,b,c) wait3((b),(c),NULL)
+# define TWAIT_HAVE_STATUS 1
+# define TWAIT_HAVE_RUSAGE 1
+#elif defined(TWAIT_WAIT4)
+# define TWAIT_FNAME "wait4"
+# define TWAIT_WAIT4TYPE(a,b,c,d) wait4((a),(b),(c),(d))
+# define TWAIT_GENERIC(a,b,c) wait4((a),(b),(c),NULL)
+# define TWAIT_HAVE_PID 1
+# define TWAIT_HAVE_STATUS 1
+# define TWAIT_HAVE_RUSAGE 1
+#elif defined(TWAIT_WAIT6)
+# define TWAIT_FNAME "wait6"
+# define TWAIT_WAIT6TYPE(a,b,c,d,e,f) wait6((a),(b),(c),(d),(e),(f))
+# define TWAIT_GENERIC(a,b,c) \
+ wait6(P_PID,(a),(b),(c)|WEXITED|WTRAPPED,NULL,NULL)
+# define TWAIT_HAVE_PID 1
+# define TWAIT_HAVE_STATUS 1
+#endif
+
+/*
+ * There are 3 groups of tests:
+ * - TWAIT_GENERIC() (wait, wait2, waitpid, wait3, wait4, wait6)
+ * - TWAIT_WAIT4TYPE() (wait2, waitpid, wait3, wait4)
+ * - TWAIT_WAIT6TYPE() (waitid, wait6)
+ *
+ * Tests only in the above categories are allowed. However some tests are not
+ * possible in the context requested functionality to be verified, therefore
+ * there are helper macros:
+ * - TWAIT_HAVE_PID (wait2, waitpid, waitid, wait4, wait6)
+ * - TWAIT_HAVE_STATUS (wait, wait2, waitpid, wait3, wait4, wait6)
+ * - TWAIT_HAVE_RUSAGE (wait3, wait4)
+ * - TWAIT_HAVE_RETPID (wait, wait2, waitpid, wait3, wait4, wait6)
+ *
+ * If there is an intention to test e.g. wait6(2) specific features in the
+ * ptrace(2) context, find the most matching group and with #ifdefs reduce
+ * functionality of less featured than wait6(2) interface (TWAIT_WAIT6TYPE).
+ *
+ * For clarity never use negative preprocessor checks, like:
+ * #if !defined(TWAIT_WAIT4)
+ * always refer to checks for positive values.
+ */
+
+#define TEST_REQUIRE_EQ(x, y) \
+do { \
+ uintmax_t vx = (x); \
+ uintmax_t vy = (y); \
+ int ret = vx == vy; \
+ if (!ret) \
+ ATF_REQUIRE_EQ_MSG(vx, vy, "%s(%ju) == %s(%ju)", \
+ #x, vx, #y, vy); \
+} while (/*CONSTCOND*/0)
+
+/*
+ * A child process cannot call atf functions and expect them to magically
+ * work like in the parent.
+ * The printf(3) messaging from a child will not work out of the box as well
+ * without estabilishing a communication protocol with its parent. To not
+ * overcomplicate the tests - do not log from a child and use err(3)/errx(3)
+ * wrapped with FORKEE_ASSERT()/FORKEE_ASSERTX() as that is guaranteed to work.
+ */
+#define FORKEE_ASSERT_EQ(x, y) \
+do { \
+ uintmax_t vx = (x); \
+ uintmax_t vy = (y); \
+ int ret = vx == vy; \
+ if (!ret) \
+ errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: " \
+ "%s(%ju) == %s(%ju)", __FILE__, __LINE__, __func__, \
+ #x, vx, #y, vy); \
+} while (/*CONSTCOND*/0)
+
+#define FORKEE_ASSERTX(x) \
+do { \
+ int ret = (x); \
+ if (!ret) \
+ errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s",\
+ __FILE__, __LINE__, __func__, #x); \
+} while (/*CONSTCOND*/0)
+
+#define FORKEE_ASSERT(x) \
+do { \
+ int ret = (x); \
+ if (!ret) \
+ err(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s",\
+ __FILE__, __LINE__, __func__, #x); \
+} while (/*CONSTCOND*/0)
+
+/*
+ * Simplify logic for functions using general purpose registers add HAVE_GPREGS
+ *
+ * For platforms that do not implement all needed calls for simplicity assume
+ * that they are unsupported at all.
+ */
+#if defined(PT_GETREGS) \
+ && defined(PT_SETREGS) \
+ && defined(PTRACE_REG_PC) \
+ && defined(PTRACE_REG_SET_PC) \
+ && defined(PTRACE_REG_SP) \
+ && defined(PTRACE_REG_INTRV)
+#define HAVE_GPREGS
+#endif
+
+/* Add guards for floating point registers */
+#if defined(PT_GETFPREGS) \
+ && defined(PT_SETFPREGS)
+#define HAVE_FPREGS
+#endif
+
+/* Add guards for cpu debug registers */
+#if defined(PT_GETDBREGS) \
+ && defined(PT_SETDBREGS)
+#define HAVE_DBREGS
+#endif
+
+/*
+ * If waitid(2) returns because one or more processes have a state change to
+ * report, 0 is returned. If an error is detected, a value of -1 is returned
+ * and errno is set to indicate the error. If WNOHANG is specified and there
+ * are no stopped, continued or exited children, 0 is returned.
+ */
+#if defined(TWAIT_WAITID)
+#define TWAIT_REQUIRE_SUCCESS(a,b) TEST_REQUIRE_EQ((a), 0)
+#define TWAIT_REQUIRE_FAILURE(a,b) ATF_REQUIRE_ERRNO((a),(b) == -1)
+#define FORKEE_REQUIRE_SUCCESS(a,b) FORKEE_ASSERT_EQ(a, 0)
+#define FORKEE_REQUIRE_FAILURE(a,b) \
+ FORKEE_ASSERTX(((a) == errno) && ((b) == -1))
+#else
+#define TWAIT_REQUIRE_SUCCESS(a,b) TEST_REQUIRE_EQ((a), (b))
+#define TWAIT_REQUIRE_FAILURE(a,b) ATF_REQUIRE_ERRNO((a),(b) == -1)
+#define FORKEE_REQUIRE_SUCCESS(a,b) FORKEE_ASSERT_EQ(a, b)
+#define FORKEE_REQUIRE_FAILURE(a,b) \
+ FORKEE_ASSERTX(((a) == errno) && ((b) == -1))
+#endif
+
+/*
+ * Helper tools to verify whether status reports exited value
+ */
+#if TWAIT_HAVE_STATUS
+static void __used
+validate_status_exited(int status, int expected)
+{
+ ATF_REQUIRE_MSG(WIFEXITED(status), "Reported !exited process");
+ ATF_REQUIRE_MSG(!WIFCONTINUED(status), "Reported continued process");
+ ATF_REQUIRE_MSG(!WIFSIGNALED(status), "Reported signaled process");
+ ATF_REQUIRE_MSG(!WIFSTOPPED(status), "Reported stopped process");
+
+ ATF_REQUIRE_EQ_MSG(WEXITSTATUS(status), expected,
+ "The process has exited with invalid value %d != %d",
+ WEXITSTATUS(status), expected);
+}
+
+static void __used
+forkee_status_exited(int status, int expected)
+{
+ FORKEE_ASSERTX(WIFEXITED(status));
+ FORKEE_ASSERTX(!WIFCONTINUED(status));
+ FORKEE_ASSERTX(!WIFSIGNALED(status));
+ FORKEE_ASSERTX(!WIFSTOPPED(status));
+
+ FORKEE_ASSERT_EQ(WEXITSTATUS(status), expected);
+}
+
+static void __used
+validate_status_continued(int status)
+{
+ ATF_REQUIRE_MSG(!WIFEXITED(status), "Reported exited process");
+ ATF_REQUIRE_MSG(WIFCONTINUED(status), "Reported !continued process");
+ ATF_REQUIRE_MSG(!WIFSIGNALED(status), "Reported signaled process");
+ ATF_REQUIRE_MSG(!WIFSTOPPED(status), "Reported stopped process");
+}
+
+static void __used
+forkee_status_continued(int status)
+{
+ FORKEE_ASSERTX(!WIFEXITED(status));
+ FORKEE_ASSERTX(WIFCONTINUED(status));
+ FORKEE_ASSERTX(!WIFSIGNALED(status));
+ FORKEE_ASSERTX(!WIFSTOPPED(status));
+}
+
+static void __used
+validate_status_signaled(int status, int expected_termsig, int expected_core)
+{
+ ATF_REQUIRE_MSG(!WIFEXITED(status), "Reported exited process");
+ ATF_REQUIRE_MSG(!WIFCONTINUED(status), "Reported continued process");
+ ATF_REQUIRE_MSG(WIFSIGNALED(status), "Reported !signaled process");
+ ATF_REQUIRE_MSG(!WIFSTOPPED(status), "Reported stopped process");
+
+ ATF_REQUIRE_EQ_MSG(WTERMSIG(status), expected_termsig,
+ "Unexpected signal received");
+
+ ATF_REQUIRE_EQ_MSG(WCOREDUMP(status), expected_core,
+ "Unexpectedly core file %s generated", expected_core ? "not" : "");
+}
+
+static void __used
+forkee_status_signaled(int status, int expected_termsig, int expected_core)
+{
+ FORKEE_ASSERTX(!WIFEXITED(status));
+ FORKEE_ASSERTX(!WIFCONTINUED(status));
+ FORKEE_ASSERTX(WIFSIGNALED(status));
+ FORKEE_ASSERTX(!WIFSTOPPED(status));
+
+ FORKEE_ASSERT_EQ(WTERMSIG(status), expected_termsig);
+ FORKEE_ASSERT_EQ(WCOREDUMP(status), expected_core);
+}
+
+static void __used
+validate_status_stopped(int status, int expected)
+{
+ ATF_REQUIRE_MSG(!WIFEXITED(status), "Reported exited process");
+ ATF_REQUIRE_MSG(!WIFCONTINUED(status), "Reported continued process");
+ ATF_REQUIRE_MSG(!WIFSIGNALED(status), "Reported signaled process");
+ ATF_REQUIRE_MSG(WIFSTOPPED(status), "Reported !stopped process");
+
+ char st[128], ex[128];
+ strlcpy(st, strsignal(WSTOPSIG(status)), sizeof(st));
+ strlcpy(ex, strsignal(expected), sizeof(ex));
+
+ ATF_REQUIRE_EQ_MSG(WSTOPSIG(status), expected,
+ "Unexpected stop signal received [%s] != [%s]", st, ex);
+}
+
+static void __used
+forkee_status_stopped(int status, int expected)
+{
+ FORKEE_ASSERTX(!WIFEXITED(status));
+ FORKEE_ASSERTX(!WIFCONTINUED(status));
+ FORKEE_ASSERTX(!WIFSIGNALED(status));
+ FORKEE_ASSERTX(WIFSTOPPED(status));
+
+ FORKEE_ASSERT_EQ(WSTOPSIG(status), expected);
+}
+#else
+#define validate_status_exited(a,b)
+#define forkee_status_exited(a,b)
+#define validate_status_continued(a,b)
+#define forkee_status_continued(a,b)
+#define validate_status_signaled(a,b,c)
+#define forkee_status_signaled(a,b,c)
+#define validate_status_stopped(a,b)
+#define forkee_status_stopped(a,b)
+#endif
+
+/* This function is currently designed to be run in the main/parent process */
+static void __used
+await_zombie(pid_t process)
+{
+ struct kinfo_proc2 p;
+ size_t len = sizeof(p);
+
+ const int name[] = {
+ [0] = CTL_KERN,
+ [1] = KERN_PROC2,
+ [2] = KERN_PROC_PID,
+ [3] = process,
+ [4] = sizeof(p),
+ [5] = 1
+ };
+
+ const size_t namelen = __arraycount(name);
+
+ /* Await the process becoming a zombie */
+ while(1) {
+ ATF_REQUIRE(sysctl(name, namelen, &p, &len, NULL, 0) == 0);
+
+ if (p.p_stat == LSZOMB)
+ break;
+
+ ATF_REQUIRE(usleep(1000) == 0);
+ }
+}
+
+/* Happy number sequence -- this function is used to just consume cpu cycles */
+#define HAPPY_NUMBER 1
+
+/* If n is not happy then its sequence ends in the cycle:
+ * 4, 16, 37, 58, 89, 145, 42, 20, 4, ... */
+#define SAD_NUMBER 4
+
+/* Calculate the sum of the squares of the digits of n */
+static unsigned __used
+dsum(unsigned n)
+{
+ unsigned sum, x;
+ for (sum = 0; n; n /= 10) {
+ x = n % 10;
+ sum += x * x;
+ }
+ return sum;
+}
+
+/*
+ * XXX: Disabled optimization is required to make tests for hardware assisted
+ * traps in .text functional
+ *
+ * Tested with GCC 5.4 on NetBSD 7.99.47 amd64
+ */
+static int __used
+#ifdef __clang__
+__attribute__((__optnone__))
+#else
+__attribute__((__optimize__("O0")))
+#endif
+check_happy(unsigned n)
+{
+ for (;;) {
+ unsigned total = dsum(n);
+
+ if (total == HAPPY_NUMBER)
+ return 1;
+ if (total == SAD_NUMBER)
+ return 0;
+
+ n = total;
+ }
+}
+
+#if defined(TWAIT_HAVE_PID)
+#define ATF_TP_ADD_TC_HAVE_PID(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_HAVE_PID(a,b)
+#endif
+
+#if defined(HAVE_GPREGS)
+#define ATF_TP_ADD_TC_HAVE_GPREGS(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_HAVE_GPREGS(a,b)
+#endif
+
+#if defined(HAVE_FPREGS)
+#define ATF_TP_ADD_TC_HAVE_FPREGS(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_HAVE_FPREGS(a,b)
+#endif
+
+#if defined(PT_STEP)
+#define ATF_TP_ADD_TC_PT_STEP(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_PT_STEP(a,b)
+#endif
+
+#if defined(__HAVE_PTRACE_WATCHPOINTS)
+#define ATF_TP_ADD_TC_HAVE_PTRACE_WATCHPOINTS(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_HAVE_PTRACE_WATCHPOINTS(a,b)
+#endif
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait3.c b/contrib/netbsd-tests/kernel/t_ptrace_wait3.c
new file mode 100644
index 0000000..c136431
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait3.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_wait3.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAIT3
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait4.c b/contrib/netbsd-tests/kernel/t_ptrace_wait4.c
new file mode 100644
index 0000000..7ae771b
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait4.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_wait4.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAIT4
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait6.c b/contrib/netbsd-tests/kernel/t_ptrace_wait6.c
new file mode 100644
index 0000000..122cb1d
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait6.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_wait6.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAIT6
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_waitid.c b/contrib/netbsd-tests/kernel/t_ptrace_waitid.c
new file mode 100644
index 0000000..1c09be7
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_waitid.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_waitid.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAITID
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_waitpid.c b/contrib/netbsd-tests/kernel/t_ptrace_waitpid.c
new file mode 100644
index 0000000..c8f107d
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_waitpid.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_waitpid.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAITPID
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_rnd.c b/contrib/netbsd-tests/kernel/t_rnd.c
index 7f1f288..8646130 100644
--- a/contrib/netbsd-tests/kernel/t_rnd.c
+++ b/contrib/netbsd-tests/kernel/t_rnd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_rnd.c,v 1.5 2012/03/18 09:46:50 jruoho Exp $ */
+/* $NetBSD: t_rnd.c,v 1.9 2016/05/22 04:34:44 riastradh Exp $ */
/*
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -27,12 +27,12 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_rnd.c,v 1.5 2012/03/18 09:46:50 jruoho Exp $");
+__RCSID("$NetBSD: t_rnd.c,v 1.9 2016/05/22 04:34:44 riastradh Exp $");
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
-#include <sys/rnd.h>
+#include <sys/rndio.h>
#include <atf-c.h>
@@ -86,10 +86,29 @@ ATF_TC_BODY(RNDADDDATA2, tc)
ATF_REQUIRE_ERRNO(EINVAL, rump_sys_ioctl(fd, RNDADDDATA, &rd) == -1);
}
+ATF_TC(read_random);
+ATF_TC_HEAD(read_random, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "does reading /dev/random return "
+ "within reasonable time");
+ atf_tc_set_md_var(tc, "timeout", "10");
+}
+
+ATF_TC_BODY(read_random, tc)
+{
+ char buf[128];
+ int fd;
+
+ rump_init();
+ RL(fd = rump_sys_open("/dev/random", O_RDONLY));
+ RL(rump_sys_read(fd, buf, sizeof(buf)));
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, RNDADDDATA);
ATF_TP_ADD_TC(tp, RNDADDDATA2);
+ ATF_TP_ADD_TC(tp, read_random);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c b/contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c
index da67c1b3..4d81dd6 100644
--- a/contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c
+++ b/contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c
@@ -1,7 +1,7 @@
-/* $NetBSD: t_bpfjit.c,v 1.6 2014/07/08 21:07:52 alnsn Exp $ */
+/* $NetBSD: t_bpfjit.c,v 1.14 2015/02/14 22:40:18 alnsn Exp $ */
/*-
- * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
+ * Copyright (c) 2011-2012, 2014-2015 Alexander Nasonov.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_bpfjit.c,v 1.6 2014/07/08 21:07:52 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.14 2015/02/14 22:40:18 alnsn Exp $");
#include <atf-c.h>
#include <stdint.h>
@@ -67,9 +67,75 @@ ATF_TC_BODY(libbpfjit_empty, tc)
{
struct bpf_insn dummy;
+ ATF_CHECK(!bpf_validate(&dummy, 0));
ATF_CHECK(bpfjit_generate_code(NULL, &dummy, 0) == NULL);
}
+ATF_TC(libbpfjit_ret_k);
+ATF_TC_HEAD(libbpfjit_ret_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of a trivial bpf program");
+}
+
+ATF_TC_BODY(libbpfjit_ret_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_RET+BPF_K, 17)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 17);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_bad_ret_k);
+ATF_TC_HEAD(libbpfjit_bad_ret_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that JIT compilation of a program with bad BPF_RET fails");
+}
+
+ATF_TC_BODY(libbpfjit_bad_ret_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_RET+BPF_K+0x8000, 13)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ /*
+ * The point of this test is checking a bad instruction of
+ * a valid class and with a valid BPF_RVAL data.
+ */
+ const uint16_t rcode = insns[0].code;
+ ATF_CHECK(BPF_CLASS(rcode) == BPF_RET &&
+ (BPF_RVAL(rcode) == BPF_K || BPF_RVAL(rcode) == BPF_A));
+
+ ATF_CHECK(!bpf_validate(insns, insn_count));
+
+ /* Current implementation generates code. */
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 13);
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_add_k);
ATF_TC_HEAD(libbpfjit_alu_add_k, tc)
{
@@ -399,6 +465,245 @@ ATF_TC_BODY(libbpfjit_alu_div80000000_k, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_alu_mod0_k);
+ATF_TC_HEAD(libbpfjit_alu_mod0_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod0_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ //ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod1_k);
+ATF_TC_HEAD(libbpfjit_alu_mod1_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=1");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod1_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 1),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod2_k);
+ATF_TC_HEAD(libbpfjit_alu_mod2_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=2");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod2_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 2),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod4_k);
+ATF_TC_HEAD(libbpfjit_alu_mod4_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=4");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod4_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 4),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 3);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod10_k);
+ATF_TC_HEAD(libbpfjit_alu_mod10_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod10_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 9);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod10000_k);
+ATF_TC_HEAD(libbpfjit_alu_mod10000_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10000");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod10000_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10000),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 3849);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod7609801_k);
+ATF_TC_HEAD(libbpfjit_alu_mod7609801_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_mod+BPF_K with k=7609801");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod7609801_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(7609801)),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(3039531));
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod80000000_k);
+ATF_TC_HEAD(libbpfjit_alu_mod80000000_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0x80000000");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod80000000_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(0x80000000)),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x7fffffde));
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_and_k);
ATF_TC_HEAD(libbpfjit_alu_and_k, tc)
{
@@ -459,6 +764,36 @@ ATF_TC_BODY(libbpfjit_alu_or_k, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_alu_xor_k);
+ATF_TC_HEAD(libbpfjit_alu_xor_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_K");
+}
+
+ATF_TC_BODY(libbpfjit_alu_xor_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+ BPF_STMT(BPF_ALU+BPF_XOR+BPF_K, 0x0000b1e0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_lsh_k);
ATF_TC_HEAD(libbpfjit_alu_lsh_k, tc)
{
@@ -962,7 +1297,7 @@ ATF_TC_HEAD(libbpfjit_alu_div80000000_x, tc)
ATF_TC_BODY(libbpfjit_alu_div80000000_x, tc)
{
static struct bpf_insn insns[] = {
- BPF_STMT(BPF_LD+BPF_IMM, UINT32_MAX - 33),
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
BPF_STMT(BPF_RET+BPF_A, 0)
@@ -983,6 +1318,253 @@ ATF_TC_BODY(libbpfjit_alu_div80000000_x, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_alu_mod0_x);
+ATF_TC_HEAD(libbpfjit_alu_mod0_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod0_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod1_x);
+ATF_TC_HEAD(libbpfjit_alu_mod1_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=1");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod1_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod2_x);
+ATF_TC_HEAD(libbpfjit_alu_mod2_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=2");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod2_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod4_x);
+ATF_TC_HEAD(libbpfjit_alu_mod4_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=4");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod4_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 3);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod10_x);
+ATF_TC_HEAD(libbpfjit_alu_mod10_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod10_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 9);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod10000_x);
+ATF_TC_HEAD(libbpfjit_alu_mod10000_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10000");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod10000_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10000),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 3849);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod7609801_x);
+ATF_TC_HEAD(libbpfjit_alu_mod7609801_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=7609801");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod7609801_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(7609801)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(3039531));
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod80000000_x);
+ATF_TC_HEAD(libbpfjit_alu_mod80000000_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0x80000000");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod80000000_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x7fffffde));
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_and_x);
ATF_TC_HEAD(libbpfjit_alu_and_x, tc)
{
@@ -1045,6 +1627,37 @@ ATF_TC_BODY(libbpfjit_alu_or_x, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_alu_xor_x);
+ATF_TC_HEAD(libbpfjit_alu_xor_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_X");
+}
+
+ATF_TC_BODY(libbpfjit_alu_xor_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0x0000b1e0),
+ BPF_STMT(BPF_ALU+BPF_XOR+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_lsh_x);
ATF_TC_HEAD(libbpfjit_alu_lsh_x, tc)
{
@@ -1305,6 +1918,54 @@ ATF_TC_BODY(libbpfjit_jmp_ja, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_jmp_ja_invalid);
+ATF_TC_HEAD(libbpfjit_jmp_ja_invalid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test BPF_JMP+BPF_JA to invalid destination");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_ja_invalid, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 4),
+ BPF_STMT(BPF_RET+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_K, 1),
+ BPF_STMT(BPF_RET+BPF_K, 2),
+ BPF_STMT(BPF_RET+BPF_K, 3),
+ };
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(!bpf_validate(insns, insn_count));
+ ATF_CHECK(bpfjit_generate_code(NULL, insns, insn_count) == NULL);
+}
+
+ATF_TC(libbpfjit_jmp_ja_overflow);
+ATF_TC_HEAD(libbpfjit_jmp_ja_overflow, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test BPF_JMP+BPF_JA with negative offset");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_ja_overflow, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 1),
+ BPF_STMT(BPF_RET+BPF_K, 777),
+ BPF_STMT(BPF_JMP+BPF_JA, UINT32_MAX - 1), // -2
+ BPF_STMT(BPF_RET+BPF_K, 0)
+ };
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ /* Jumps with negative offsets work in userspace ... */
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ /* .. but not for bpfjit. */
+ ATF_CHECK(bpfjit_generate_code(NULL, insns, insn_count) == NULL);
+}
+
ATF_TC(libbpfjit_jmp_jgt_k);
ATF_TC_HEAD(libbpfjit_jmp_jgt_k, tc)
{
@@ -1693,26 +2354,26 @@ ATF_TC_BODY(libbpfjit_jmp_jeq_x, tc)
BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
- BPF_STMT(BPF_RET+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_K, 1),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 0),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
- BPF_STMT(BPF_RET+BPF_K, 1),
- BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
BPF_STMT(BPF_RET+BPF_K, 2),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 3),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 3),
- BPF_STMT(BPF_RET+BPF_K, 3),
BPF_STMT(BPF_RET+BPF_K, 4),
BPF_STMT(BPF_RET+BPF_K, 5),
+ BPF_STMT(BPF_RET+BPF_K, 6),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 3, 1),
- BPF_STMT(BPF_RET+BPF_K, 6),
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 0),
BPF_STMT(BPF_RET+BPF_K, 7),
- BPF_STMT(BPF_RET+BPF_K, 8)
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
+ BPF_STMT(BPF_RET+BPF_K, 8),
+ BPF_STMT(BPF_RET+BPF_K, 9)
};
bpfjit_func_t code;
@@ -1725,14 +2386,14 @@ ATF_TC_BODY(libbpfjit_jmp_jeq_x, tc)
code = bpfjit_generate_code(NULL, insns, insn_count);
ATF_REQUIRE(code != NULL);
- ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
- ATF_CHECK(jitcall(code, pkt, 2, 2) == 7);
- ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
- ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
- ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
- ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
- ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
- ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 8);
+ ATF_CHECK(jitcall(code, pkt, 2, 2) == 8);
+ ATF_CHECK(jitcall(code, pkt, 3, 3) == 2);
+ ATF_CHECK(jitcall(code, pkt, 4, 4) == 8);
+ ATF_CHECK(jitcall(code, pkt, 5, 5) == 3);
+ ATF_CHECK(jitcall(code, pkt, 6, 6) == 9);
+ ATF_CHECK(jitcall(code, pkt, 7, 7) == 6);
+ ATF_CHECK(jitcall(code, pkt, 8, 8) == 1);
bpfjit_free_code(code);
}
@@ -1794,6 +2455,98 @@ ATF_TC_BODY(libbpfjit_jmp_jset_x, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_jmp_jeq_x_noinit_ax);
+ATF_TC_HEAD(libbpfjit_jmp_jeq_x_noinit_ax, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised A and X");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_jeq_x_noinit_ax, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 10);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_jmp_jeq_x_noinit_a);
+ATF_TC_HEAD(libbpfjit_jmp_jeq_x_noinit_a, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised A");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_jeq_x_noinit_a, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0), /* X > 0 */
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_jmp_jeq_x_noinit_x);
+ATF_TC_HEAD(libbpfjit_jmp_jeq_x_noinit_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised X");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_jeq_x_noinit_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_LEN, 0), /* A > 0 */
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_jmp_modulo_x);
ATF_TC_HEAD(libbpfjit_jmp_modulo_x, tc)
{
@@ -3883,6 +4636,8 @@ ATF_TP_ADD_TCS(tp)
* to ../../net/bpfjit/t_bpfjit.c
*/
ATF_TP_ADD_TC(tp, libbpfjit_empty);
+ ATF_TP_ADD_TC(tp, libbpfjit_ret_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_bad_ret_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_add_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_sub_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_mul_k);
@@ -3894,8 +4649,17 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, libbpfjit_alu_div10000_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_div7609801_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_div80000000_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod0_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod1_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod2_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod4_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10000_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod7609801_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod80000000_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_and_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_or_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_xor_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh0_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_rsh_k);
@@ -3912,8 +4676,17 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, libbpfjit_alu_div10000_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_div7609801_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_div80000000_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod0_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod1_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod2_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod4_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10000_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod7609801_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod80000000_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_and_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_or_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_xor_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh0_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_rsh_x);
@@ -3921,6 +4694,8 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, libbpfjit_alu_modulo_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_neg);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_ja);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_ja_invalid);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_ja_overflow);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jgt_k);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jge_k);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_k);
@@ -3930,6 +4705,9 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jge_x);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jset_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x_noinit_ax);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x_noinit_a);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x_noinit_x);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_modulo_x);
ATF_TP_ADD_TC(tp, libbpfjit_ld_abs);
ATF_TP_ADD_TC(tp, libbpfjit_ld_abs_k_overflow);
diff --git a/contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S b/contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S
index 5308876..5cb5f39 100644
--- a/contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S
+++ b/contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S
@@ -1,8 +1,11 @@
-/* $NetBSD: return_one.S,v 1.1 2011/07/18 23:16:09 jym Exp $ */
+/* $NetBSD: return_one.S,v 1.2 2016/08/05 15:02:29 scole Exp $ */
#include <machine/asm.h>
-.globl return_one, return_one_end;
+.globl return_one_end
-return_one: return_one_end:
- nop
+ENTRY(return_one,0)
+ mov ret0=1
+ br.ret.sptk.few rp
+return_one_end:
+END(return_one)
diff --git a/contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S b/contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S
index d40298e..10629c5 100644
--- a/contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S
+++ b/contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S
@@ -1,10 +1,11 @@
-/* $NetBSD: return_one.S,v 1.2 2012/03/16 08:51:47 matt Exp $ */
+/* $NetBSD: return_one.S,v 1.3 2015/03/29 00:38:36 matt Exp $ */
#include <machine/asm.h>
-.globl return_one, return_one_end
+.globl return_one_start, return_one_end
_ENTRY(return_one)
+return_one_start:
li %r3, 1
blr
return_one_end:
diff --git a/contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S b/contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S
index 43ddd2c..d393fd1 100644
--- a/contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S
+++ b/contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S
@@ -1,11 +1,11 @@
-/* $NetBSD: return_one.S,v 1.1 2014/09/19 17:36:26 matt Exp $ */
+/* $NetBSD: return_one.S,v 1.2 2015/03/28 07:07:54 matt Exp $ */
#include <machine/asm.h>
.globl return_one_end
ENTRY_NP(return_one)
- li v0, 1
+ li a0, 1
ret
return_one_end:
END(return_one)
diff --git a/contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c b/contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c
index 474cfc7..8ca38b4 100644
--- a/contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c
+++ b/contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c
@@ -1,4 +1,4 @@
-/* $NetBSD: exec_prot_support.c,v 1.1 2011/07/18 23:16:10 jym Exp $ */
+/* $NetBSD: exec_prot_support.c,v 1.2 2016/12/31 11:51:20 martin Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -30,12 +30,13 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: exec_prot_support.c,v 1.1 2011/07/18 23:16:10 jym Exp $");
+__RCSID("$NetBSD: exec_prot_support.c,v 1.2 2016/12/31 11:51:20 martin Exp $");
#include "../../common/exec_prot.h"
int
exec_prot_support(void)
{
- return NOTIMPL;
+
+ return PERPAGE_XP;
}
diff --git a/contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S b/contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S
index 3495260..ec8bcdd 100644
--- a/contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S
+++ b/contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S
@@ -1,8 +1,11 @@
-/* $NetBSD: return_one.S,v 1.1 2011/07/18 23:16:10 jym Exp $ */
+/* $NetBSD: return_one.S,v 1.2 2016/12/31 11:51:20 martin Exp $ */
#include <machine/asm.h>
-.globl return_one, return_one_end;
+.global return_one_end
-return_one: return_one_end:
- nop
+ENTRY(return_one)
+return_one:
+ retl
+ mov 1, %o0
+return_one_end:
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c b/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c
index 99235ea..7de4f61 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_faccessat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_faccessat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_faccessat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_faccessat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_faccessat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/faccessat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c b/contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c
index 6598059..a7bb683 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fchmodat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_fchmodat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fchmodat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_fchmodat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_fchmodat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/fchmodat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_fchownat.c b/contrib/netbsd-tests/lib/libc/c063/t_fchownat.c
index 2ca14cf..631d55a 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_fchownat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_fchownat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fchownat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_fchownat.c,v 1.4 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fchownat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_fchownat.c,v 1.4 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -40,10 +42,6 @@ __RCSID("$NetBSD: t_fchownat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
#include <string.h>
#include <unistd.h>
#include <pwd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/fchownat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_fexecve.c b/contrib/netbsd-tests/lib/libc/c063/t_fexecve.c
index 30b26a7..b9aa017 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_fexecve.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_fexecve.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fexecve.c,v 1.2 2013/03/17 04:35:59 jmmv Exp $ */
+/* $NetBSD: t_fexecve.c,v 1.3 2017/01/10 15:15:09 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fexecve.c,v 1.2 2013/03/17 04:35:59 jmmv Exp $");
+__RCSID("$NetBSD: t_fexecve.c,v 1.3 2017/01/10 15:15:09 christos Exp $");
#include <sys/wait.h>
@@ -70,9 +70,7 @@ ATF_TC_BODY(fexecve, tc)
error = 76;
else
error = EXIT_FAILURE;
-#ifdef __FreeBSD__
(void)close(fd);
-#endif
err(error, "fexecve");
}
}
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c b/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c
index b23f625..c17961f 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fstatat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_fstatat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fstatat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_fstatat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_fstatat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/fstatat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c b/contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c
index 3736dfa..5c496c8 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mkfifoat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_mkfifoat.c,v 1.3 2017/01/10 15:15:09 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mkfifoat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_mkfifoat.c,v 1.3 2017/01/10 15:15:09 christos Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -63,9 +63,7 @@ ATF_TC_BODY(mkfifoat_fd, tc)
ATF_REQUIRE((fd = mkfifoat(dfd, BASEFIFO, mode)) != -1);
ATF_REQUIRE(close(fd) == 0);
ATF_REQUIRE(access(FIFO, F_OK) == 0);
-#ifdef __FreeBSD__
(void)close(dfd);
-#endif
}
ATF_TC(mkfifoat_fdcwd);
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_mknodat.c b/contrib/netbsd-tests/lib/libc/c063/t_mknodat.c
index e8f71cd..7c3ab9b 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_mknodat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_mknodat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mknodat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_mknodat.c,v 1.4 2017/01/10 15:15:09 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mknodat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_mknodat.c,v 1.4 2017/01/10 15:15:09 christos Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -80,9 +80,7 @@ ATF_TC_BODY(mknodat_fd, tc)
ATF_REQUIRE((fd = mknodat(dfd, BASEFILE, mode, dev)) != -1);
ATF_REQUIRE(close(fd) == 0);
ATF_REQUIRE(access(FILE, F_OK) == 0);
-#ifdef __FreeBSD__
(void)close(dfd);
-#endif
}
ATF_TC(mknodat_fdcwd);
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_o_search.c b/contrib/netbsd-tests/lib/libc/c063/t_o_search.c
index d9dbe19..7cefa8b 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_o_search.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_o_search.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_o_search.c,v 1.4 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_o_search.c,v 1.5 2017/01/10 22:25:01 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,9 +29,13 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_o_search.c,v 1.4 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_o_search.c,v 1.5 2017/01/10 22:25:01 christos Exp $");
#include <atf-c.h>
+
+#include <sys/param.h>
+#include <sys/stat.h>
+
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
@@ -40,7 +44,6 @@ __RCSID("$NetBSD: t_o_search.c,v 1.4 2013/03/17 04:46:06 jmmv Exp $");
#include <string.h>
#include <unistd.h>
#include <pwd.h>
-#include <sys/param.h>
/*
* dholland 20130112: disable tests that require O_SEARCH semantics
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_openat.c b/contrib/netbsd-tests/lib/libc/c063/t_openat.c
index 5112efc..f7c8c74 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_openat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_openat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_openat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_openat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_openat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_openat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_openat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/openat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c b/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c
index c9bc267..cf14652 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_readlinkat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_readlinkat.c,v 1.4 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_readlinkat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_readlinkat.c,v 1.4 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_readlinkat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/readlinkat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c b/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c
index 220c4b2..9897b92 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_unlinkat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_unlinkat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_unlinkat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_unlinkat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_unlinkat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/unlinkat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_utimensat.c b/contrib/netbsd-tests/lib/libc/c063/t_utimensat.c
index 9f21fd6..682c2df 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_utimensat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_utimensat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_utimensat.c,v 1.5 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_utimensat.c,v 1.6 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_utimensat.c,v 1.5 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_utimensat.c,v 1.6 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/time.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,8 +42,6 @@ __RCSID("$NetBSD: t_utimensat.c,v 1.5 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#include <sys/time.h>
#define DIR "dir"
#define FILE "dir/utimensat"
diff --git a/contrib/netbsd-tests/lib/libc/db/h_db.c b/contrib/netbsd-tests/lib/libc/db/h_db.c
index dfb1385..dd19a03 100644
--- a/contrib/netbsd-tests/lib/libc/db/h_db.c
+++ b/contrib/netbsd-tests/lib/libc/db/h_db.c
@@ -1,4 +1,4 @@
-/* $NetBSD: h_db.c,v 1.1 2011/01/07 15:05:58 pgoyette Exp $ */
+/* $NetBSD: h_db.c,v 1.3 2016/09/24 21:18:22 christos Exp $ */
/*-
* Copyright (c) 1992, 1993, 1994
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1992, 1993, 1994\
#if 0
static char sccsid[] = "@(#)dbtest.c 8.17 (Berkeley) 9/1/94";
#else
-__RCSID("$NetBSD: h_db.c,v 1.1 2011/01/07 15:05:58 pgoyette Exp $");
+__RCSID("$NetBSD: h_db.c,v 1.3 2016/09/24 21:18:22 christos Exp $");
#endif
#endif /* not lint */
@@ -57,12 +57,13 @@ __RCSID("$NetBSD: h_db.c,v 1.1 2011/01/07 15:05:58 pgoyette Exp $");
#include <unistd.h>
#include <err.h>
#include <db.h>
+#include "btree.h"
enum S { COMMAND, COMPARE, GET, PUT, REMOVE, SEQ, SEQFLAG, KEY, DATA };
static void compare(DBT *, DBT *);
static DBTYPE dbtype(const char *);
-static void dump(DB *, int);
+static void dump(DB *, int, int);
static void get(DB *, DBT *);
static void getdata(DB *, DBT *, DBT *);
static void put(DB *, DBT *, DBT *);
@@ -73,6 +74,9 @@ static void *rfile(char *, size_t *);
static void seq(DB *, DBT *);
static u_int setflags(char *);
static void *setinfo(DBTYPE, char *);
+#ifdef __NetBSD__
+static void unlinkpg(DB *);
+#endif
static void usage(void) __attribute__((__noreturn__));
static void *xcopy(void *, size_t);
static void chkcmd(enum S);
@@ -82,6 +86,9 @@ static void chkkey(enum S);
#ifdef STATISTICS
extern void __bt_stat(DB *);
#endif
+#ifdef __NetBSD__
+extern int __bt_relink(BTREE *, PAGE *);
+#endif
static DBTYPE type; /* Database type. */
static void *infop; /* Iflags. */
@@ -315,8 +322,16 @@ lkey: switch (command) {
}
break;
case 'o':
- dump(dbp, p[1] == 'r');
+ dump(dbp, p[1] == 'r', 0);
+ break;
+#ifdef __NetBSD__
+ case 'O':
+ dump(dbp, p[1] == 'r', 1);
break;
+ case 'u':
+ unlinkpg(dbp);
+ break;
+#endif
default:
errx(1, "line %zu: %s: unknown command character",
lineno, p);
@@ -483,17 +498,25 @@ seq(DB *dbp, DBT *kp)
}
static void
-dump(DB *dbp, int rev)
+dump(DB *dbp, int rev, int recurse)
{
DBT key, data;
int xflags, nflags;
if (rev) {
xflags = R_LAST;
+#ifdef __NetBSD__
+ nflags = recurse ? R_RPREV : R_PREV;
+#else
nflags = R_PREV;
+#endif
} else {
xflags = R_FIRST;
+#ifdef __NetBSD__
+ nflags = recurse ? R_RNEXT : R_NEXT;
+#else
nflags = R_NEXT;
+#endif
}
for (;; xflags = nflags)
switch (dbp->seq(dbp, &key, &data, xflags)) {
@@ -511,6 +534,42 @@ dump(DB *dbp, int rev)
done: return;
}
+#ifdef __NetBSD__
+void
+unlinkpg(DB *dbp)
+{
+ BTREE *t = dbp->internal;
+ PAGE *h = NULL;
+ pgno_t pg;
+
+ for (pg = P_ROOT; pg < t->bt_mp->npages;
+ mpool_put(t->bt_mp, h, 0), pg++) {
+ if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
+ break;
+ /* Look for a nonempty leaf page that has both left
+ * and right siblings. */
+ if (h->prevpg == P_INVALID || h->nextpg == P_INVALID)
+ continue;
+ if (NEXTINDEX(h) == 0)
+ continue;
+ if ((h->flags & (P_BLEAF | P_RLEAF)))
+ break;
+ }
+ if (h == NULL || pg == t->bt_mp->npages) {
+ errx(1, "%s: no appropriate page found", __func__);
+ return;
+ }
+ if (__bt_relink(t, h) != 0) {
+ perror("unlinkpg");
+ goto cleanup;
+ }
+ h->prevpg = P_INVALID;
+ h->nextpg = P_INVALID;
+cleanup:
+ mpool_put(t->bt_mp, h, MPOOL_DIRTY);
+}
+#endif
+
static u_int
setflags(char *s)
{
@@ -725,7 +784,11 @@ static void
usage(void)
{
(void)fprintf(stderr,
- "Usage: %s [-l] [-f file] [-i info] [-o file] type script\n",
- getprogname());
+#ifdef __NetBSD__
+ "Usage: %s [-lu] [-f file] [-i info] [-o file] [-O file] "
+#else
+ "Usage: %s [-l] [-f file] [-i info] [-o file] "
+#endif
+ "type script\n", getprogname());
exit(1);
}
diff --git a/contrib/netbsd-tests/lib/libc/db/h_lfsr.c b/contrib/netbsd-tests/lib/libc/db/h_lfsr.c
new file mode 100644
index 0000000..3f3d712
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/db/h_lfsr.c
@@ -0,0 +1,179 @@
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: h_lfsr.c,v 1.1 2015/11/18 18:35:35 christos Exp $");
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <err.h>
+#include <string.h>
+#include <unistd.h>
+#include <db.h>
+
+#define MAXKEY 0xffff
+#ifdef DEBUG
+#define DPRINTF(...) printf(__VA_ARGS__)
+#else
+#define DPRINTF(...)
+#endif
+
+static uint16_t
+next(uint16_t *cur)
+{
+ uint16_t lsb = *cur & 1;
+ *cur >>= 1;
+ *cur ^= (-lsb) & 0xB400u;
+ return *cur;
+}
+
+int
+main(int argc, char *argv[])
+{
+ char buf[65536];
+ char kb[256];
+ DBT key, val;
+ DB *db;
+ HASHINFO hi;
+ uint8_t c;
+ uint16_t len;
+ uint32_t pagesize = atoi(argv[1]);
+
+ memset(&hi, 0, sizeof(hi));
+ memset(buf, 'a', sizeof(buf));
+ hi.bsize = pagesize;
+ hi.nelem = 65536;
+ hi.ffactor = 128;
+
+ key.data = kb;
+ val.data = buf;
+
+ db = dbopen(NULL, O_CREAT|O_TRUNC|O_RDWR, 0, DB_HASH, &hi);
+ if (db == NULL)
+ err(EXIT_FAILURE, "dbopen");
+
+ len = 0xaec1;
+ for (size_t i = 0; i < MAXKEY; i++) {
+ key.size = (len & 0xff) + 1;
+ c = len >> 8;
+ memset(kb, c, key.size);
+ val.size = (next(&len) & 0xff) + 1;
+ switch ((*db->put)(db, &key, &val, R_NOOVERWRITE)) {
+ case 0:
+ DPRINTF("put %zu %zu %#x\n",
+ key.size, val.size, c);
+ break;
+ case -1:
+ err(EXIT_FAILURE, "put error %zu %zu %#x",
+ key.size, val.size, c);
+ case 1:
+ errx(EXIT_FAILURE, "put overwrite %zu %zu %#x",
+ key.size, val.size, c);
+ default:
+ abort();
+ }
+ }
+
+ len = 0xaec1;
+ for (size_t i = 0; i < MAXKEY; i++) {
+ key.size = (len & 0xff) + 1;
+ c = len >> 8;
+ memset(kb, c, key.size);
+ next(&len);
+ switch ((*db->get)(db, &key, &val, 0)) {
+ case 0:
+ DPRINTF("get %zu %zu %#x\n",
+ key.size, val.size, c);
+ break;
+ case -1:
+ err(EXIT_FAILURE, "get %zu %zu %#x",
+ key.size, val.size, c);
+ case 1:
+ errx(EXIT_FAILURE, "get not found %zu %zu %#x",
+ key.size, val.size, c);
+ default:
+ abort();
+ }
+ if (memcmp(key.data, kb, key.size) != 0)
+ errx(EXIT_FAILURE, "get badkey %zu %zu %#x",
+ key.size, val.size, c);
+ if (val.size != (len & 0xff) + 1U)
+ errx(EXIT_FAILURE, "get badvallen %zu %zu %#x",
+ key.size, val.size, c);
+ if (memcmp(val.data, buf, val.size) != 0)
+ errx(EXIT_FAILURE, "get badval %zu %zu %#x",
+ key.size, val.size, c);
+ }
+
+ len = 0xaec1;
+ for (size_t i = 0; i < MAXKEY; i++) {
+ key.size = (len & 0xff) + 1;
+ c = len >> 8;
+ memset(kb, c, key.size);
+ next(&len);
+ switch ((*db->del)(db, &key, 0)) {
+ case 0:
+ DPRINTF("del %zu %zu %#x\n",
+ key.size, val.size, c);
+ break;
+ case -1:
+ err(EXIT_FAILURE, "del %zu %zu %#x", key.size,
+ val.size, c);
+ case 1:
+ errx(EXIT_FAILURE, "del not found %zu %zu %#x",
+ key.size, val.size, c);
+ default:
+ abort();
+ }
+ }
+
+ len = 0xaec1;
+ for (size_t i = 0; i < MAXKEY; i++) {
+ key.size = (len & 0xff) + 1;
+ c = len >> 8;
+ memset(kb, c, key.size);
+ next(&len);
+ switch ((*db->get)(db, &key, &val, 0)) {
+ case 0:
+ errx(EXIT_FAILURE, "get2 found %zu %zu %#x",
+ key.size, val.size, c);
+ break;
+ case -1:
+ err(EXIT_FAILURE, "get2 %zu %zu %#x",
+ key.size, val.size, c);
+ case 1:
+ DPRINTF("get2 %zu %zu %#x\n",
+ key.size, val.size, c);
+ break;
+ default:
+ abort();
+ }
+ }
+ return 0;
+}
diff --git a/contrib/netbsd-tests/lib/libc/db/t_db.sh b/contrib/netbsd-tests/lib/libc/db/t_db.sh
index d256508..6858e36 100755
--- a/contrib/netbsd-tests/lib/libc/db/t_db.sh
+++ b/contrib/netbsd-tests/lib/libc/db/t_db.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_db.sh,v 1.4 2013/07/29 10:43:15 skrll Exp $
+# $NetBSD: t_db.sh,v 1.7 2016/09/24 20:12:33 christos Exp $
#
# Copyright (c) 2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -25,11 +25,16 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-prog()
+prog_db()
{
echo $(atf_get_srcdir)/h_db
}
+prog_lfsr()
+{
+ echo $(atf_get_srcdir)/h_lfsr
+}
+
dict()
{
if [ -f /usr/share/dict/words ]; then
@@ -37,6 +42,7 @@ dict()
elif [ -f /usr/dict/words ]; then
echo /usr/dict/words
else
+ echo ""
atf_fail "no dictionary found"
fi
}
@@ -44,12 +50,7 @@ dict()
# Begin FreeBSD
dict()
{
- if [ -f /usr/share/dict/words ]; then
- echo /usr/share/dict/words
- else
- echo /nonexistent
- atf_skip "Test requires dict/words"
- fi
+ echo /usr/share/dict/words
}
# End FreeBSD
@@ -62,6 +63,9 @@ small_btree_head()
"Checks btree database using small keys and small data" \
"pairs: takes the first hundred entries in the dictionary," \
"and makes them be key/data pairs."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
small_btree_body()
{
@@ -78,7 +82,7 @@ small_btree_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" btree in
+ atf_check -o file:exp "$(prog_db)" btree in
}
atf_test_case small_hash
@@ -88,6 +92,9 @@ small_hash_head()
"Checks hash database using small keys and small data" \
"pairs: takes the first hundred entries in the dictionary," \
"and makes them be key/data pairs."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
small_hash_body()
{
@@ -104,7 +111,7 @@ small_hash_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" hash in
+ atf_check -o file:exp "$(prog_db)" hash in
}
atf_test_case small_recno
@@ -114,6 +121,9 @@ small_recno_head()
"Checks recno database using small keys and small data" \
"pairs: takes the first hundred entries in the dictionary," \
"and makes them be key/data pairs."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
small_recno_body()
{
@@ -128,7 +138,7 @@ small_recno_body()
printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i);
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case medium_btree
@@ -138,6 +148,9 @@ medium_btree_head()
"Checks btree database using small keys and medium" \
"data pairs: takes the first 200 entries in the" \
"dictionary, and gives them each a medium size data entry."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
medium_btree_body()
{
@@ -156,7 +169,7 @@ medium_btree_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" btree in
+ atf_check -o file:exp "$(prog_db)" btree in
}
atf_test_case medium_hash
@@ -166,6 +179,9 @@ medium_hash_head()
"Checks hash database using small keys and medium" \
"data pairs: takes the first 200 entries in the" \
"dictionary, and gives them each a medium size data entry."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
medium_hash_body()
{
@@ -184,7 +200,7 @@ medium_hash_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" hash in
+ atf_check -o file:exp "$(prog_db)" hash in
}
atf_test_case medium_recno
@@ -209,7 +225,7 @@ medium_recno_body()
printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i);
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case big_btree
@@ -238,7 +254,7 @@ big_btree_body()
echo k$i
done >in
- atf_check "$(prog)" -o out btree in
+ atf_check "$(prog_db)" -o out btree in
cmp -s exp out || atf_fail "test failed for page size: $psize"
done
}
@@ -266,7 +282,7 @@ big_hash_body()
echo k$i
done >in
- atf_check "$(prog)" -o out hash in
+ atf_check "$(prog_db)" -o out hash in
cmp -s exp out || atf_fail "test failed"
}
@@ -294,7 +310,7 @@ big_recno_body()
for psize in 512 16384 65536; do
echo "checking page size: $psize"
- atf_check "$(prog)" -o out recno in
+ atf_check "$(prog_db)" -o out recno in
cmp -s exp out || atf_fail "test failed for page size: $psize"
done
}
@@ -362,7 +378,7 @@ random_recno_body()
printf("g\nk%d\n", i);
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case reverse_recno
@@ -400,7 +416,7 @@ reverse_recno_body()
printf("g\nk%d\n", i);
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case alternate_recno
@@ -452,7 +468,7 @@ alternate_recno_body()
printf("g\nk%d\n", i);
}' >in
- atf_check "$(prog)" -o out recno in
+ atf_check "$(prog_db)" -o out recno in
sort -o exp exp
sort -o out out
@@ -521,7 +537,7 @@ h_delete()
}' >> exp
fi
- atf_check "$(prog)" -o out $type in
+ atf_check "$(prog_db)" -o out $type in
atf_check -o file:exp cat out
}
@@ -547,6 +563,7 @@ delete_recno_body()
h_repeated()
{
+ local type="$1"
TMPDIR="$(pwd)/db_dir"; export TMPDIR
mkdir ${TMPDIR}
@@ -565,7 +582,7 @@ h_repeated()
}
}' >in
- $(prog) btree in
+ $(prog_db) $type in
}
atf_test_case repeated_btree
@@ -620,16 +637,15 @@ duplicate_btree_body()
printf("o\n");
}' >in
- atf_check -o file:exp -x "$(prog) -iflags=1 btree in | sort"
+ atf_check -o file:exp -x "$(prog_db) -iflags=1 btree in | sort"
}
h_cursor_flags()
{
+ local type=$1
TMPDIR="$(pwd)/db_dir"; export TMPDIR
mkdir ${TMPDIR}
- type=$1
-
echo $SEVEN_SEVEN |
awk '{
for (i = 1; i <= 20; ++i)
@@ -649,7 +665,7 @@ h_cursor_flags()
printf("eR_CURSOR SHOULD HAVE FAILED\n");
}' >in
- atf_check -o ignore -e ignore -s ne:0 "$(prog)" -o out $type in
+ atf_check -o ignore -e ignore -s ne:0 "$(prog_db)" -o out $type in
atf_check -s ne:0 test -s out
cat exp |
@@ -663,7 +679,7 @@ h_cursor_flags()
printf("eR_CURSOR SHOULD HAVE FAILED\n");
}' >in
- atf_check -o ignore -e ignore -s ne:0 "$(prog)" -o out $type in
+ atf_check -o ignore -e ignore -s ne:0 "$(prog_db)" -o out $type in
atf_check -s ne:0 test -s out
}
@@ -719,7 +735,7 @@ reverse_order_recno_body()
printf("or\n");
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case small_page_btree
@@ -731,6 +747,9 @@ small_page_btree_head()
"reverses them, and gives them each a small size data" \
"entry. Uses a small page size to make sure the btree" \
"split code gets hammered."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
small_page_btree_body()
{
@@ -749,7 +768,7 @@ small_page_btree_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" -i psize=512 btree in
+ atf_check -o file:exp "$(prog_db)" -i psize=512 btree in
}
h_byte_orders()
@@ -765,18 +784,19 @@ h_byte_orders()
echo p
echo k$i
echo d$i
+ echo S
echo g
echo k$i
done >in
- atf_check -o file:exp "$(prog)" -ilorder=$order -f byte.file $type in
+ atf_check -o file:exp "$(prog_db)" -ilorder=$order -f byte.file $type in
for i in `sed 50q $(dict)`; do
echo g
echo k$i
done >in
- atf_check -o file:exp "$(prog)" -s -ilorder=$order -f byte.file $type in
+ atf_check -o file:exp "$(prog_db)" -s -ilorder=$order -f byte.file $type in
done
}
@@ -784,6 +804,9 @@ atf_test_case byte_orders_btree
byte_orders_btree_head()
{
atf_set "descr" "Checks btree database using differing byte orders"
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
byte_orders_btree_body()
{
@@ -806,16 +829,19 @@ h_bsize_ffactor()
ffactor=$2
echo "bucketsize $bsize, fill factor $ffactor"
- atf_check -o file:exp "$(prog)" "-ibsize=$bsize,\
+ atf_check -o file:exp "$(prog_db)" "-ibsize=$bsize,\
ffactor=$ffactor,nelem=25000,cachesize=65536" hash in
}
atf_test_case bsize_ffactor
bsize_ffactor_head()
{
- atf_set "timeout" "480"
+ atf_set "timeout" "1800"
atf_set "descr" "Checks hash database with various" \
"bucketsizes and fill factors"
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
bsize_ffactor_body()
{
@@ -876,9 +902,27 @@ bsize_ffactor_body()
h_bsize_ffactor 8192 341
h_bsize_ffactor 8192 455
h_bsize_ffactor 8192 683
+
+ h_bsize_ffactor 16384 341
+ h_bsize_ffactor 16384 455
+ h_bsize_ffactor 16384 683
+
+ h_bsize_ffactor 32768 341
+ h_bsize_ffactor 32768 455
+ h_bsize_ffactor 32768 683
+
+ # Begin FreeBSD
+ if false; then
+ # End FreeBSD
+ h_bsize_ffactor 65536 341
+ h_bsize_ffactor 65536 455
+ h_bsize_ffactor 65536 683
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
}
-# FIXME: what does it test?
+# This tests 64K block size addition/removal
atf_test_case four_char_hash
four_char_hash_head()
{
@@ -901,15 +945,328 @@ EOF
# Begin FreeBSD
if true; then
- atf_check "$(prog)" -i bsize=32768 hash in
+ atf_check "$(prog_db)" -i bsize=32768 hash in
else
# End FreeBSD
- atf_check "$(prog)" -i bsize=65536 hash in
+ atf_check "$(prog_db)" -i bsize=65536 hash in
# Begin FreeBSD
fi
# End FreeBSD
}
+
+atf_test_case bsize_torture
+bsize_torture_head()
+{
+ atf_set "timeout" "36000"
+ atf_set "descr" "Checks hash database with various bucket sizes"
+}
+bsize_torture_body()
+{
+ TMPDIR="$(pwd)/db_dir"; export TMPDIR
+ mkdir ${TMPDIR}
+ # Begin FreeBSD
+ #
+ # db(3) doesn't support 64kB bucket sizes
+ for i in 2048 4096 8192 16384 32768 # 65536
+ # End FreeBSD
+ do
+ atf_check "$(prog_lfsr)" $i
+ done
+}
+
+atf_test_case btree_weird_page_split
+btree_weird_page_split_head()
+{
+ atf_set "descr" \
+ "Test for a weird page split condition where an insertion " \
+ "into index 0 of a page that would cause the new item to " \
+ "be the only item on the left page results in index 0 of " \
+ "the right page being erroneously skipped; this only " \
+ "happens with one particular key+data length for each page size."
+}
+btree_weird_page_split_body()
+{
+ for psize in 512 1024 2048 4096 8192; do
+ echo " page size $psize"
+ kdsizes=`awk 'BEGIN {
+ psize = '$psize'; hsize = int(psize/2);
+ for (kdsize = hsize-40; kdsize <= hsize; kdsize++) {
+ print kdsize;
+ }
+ }' /dev/null`
+
+ # Use a series of keylen+datalen values in the right
+ # neighborhood to find the one that triggers the bug.
+ # We could compute the exact size that triggers the
+ # bug but this additional fuzz may be useful.
+
+ # Insert keys in reverse order to maximize the chances
+ # for a split on index 0.
+
+ for kdsize in $kdsizes; do
+ awk 'BEGIN {
+ kdsize = '$kdsize';
+ for (i = 8; i-- > 0; ) {
+ s = sprintf("a%03d:%09d", i, kdsize);
+ for (j = 0; j < kdsize-20; j++) {
+ s = s "x";
+ }
+ printf("p\nka%03d\nd%s\n", i, s);
+ }
+ print "o";
+ }' /dev/null > in
+ sed -n 's/^d//p' in | sort > exp
+ atf_check -o file:exp \
+ "$(prog_db)" -i psize=$psize btree in
+ done
+ done
+}
+
+# Extremely tricky test attempting to replicate some unusual database
+# corruption seen in the field: pieces of the database becoming
+# inaccessible to random access, sequential access, or both. The
+# hypothesis is that at least some of these are triggered by the bug
+# in page splits on index 0 with a particular exact keylen+datalen.
+# (See Test 40.) For psize=4096, this size is exactly 2024.
+
+# The order of operations here relies on very specific knowledge of
+# the internals of the btree access method in order to place records
+# at specific offsets in a page and to create certain keys on internal
+# pages. The to-be-split page immediately prior to the bug-triggering
+# split has the following properties:
+#
+# * is not the leftmost leaf page
+# * key on the parent page is compares less than the key of the item
+# on index 0
+# * triggering record's key also compares greater than the key on the
+# parent page
+
+# Additionally, we prime the mpool LRU chain so that the head page on
+# the chain has the following properties:
+#
+# * record at index 0 is located where it will not get overwritten by
+# items written to the right-hand page during the split
+# * key of the record at index 0 compares less than the key of the
+# bug-triggering record
+
+# If the page-split bug exists, this test appears to create a database
+# where some records are inaccessible to a search, but still remain in
+# the file and are accessible by sequential traversal. At least one
+# record gets duplicated out of sequence.
+
+atf_test_case btree_tricky_page_split
+btree_tricky_page_split_head()
+{
+ atf_set "descr" \
+ "btree: no unsearchables due to page split on index 0"
+}
+btree_tricky_page_split_body()
+{
+ list=`(for i in a b c d; do
+ for j in 990 998 999; do
+ echo g ${i}${j} 1024
+ done
+ done;
+ echo g y997 2014
+ for i in y z; do
+ for j in 998 999; do
+ echo g ${i}${j} 1024
+ done
+ done)`
+ # Exact number for trigger condition accounts for newlines
+ # retained by dbtest with -ofile but not without; we use
+ # -ofile, so count newlines. keylen=5,datalen=5+2014 for
+ # psize=4096 here.
+ (cat - <<EOF
+p z999 1024
+p z998 1024
+p y999 1024
+p y990 1024
+p d999 1024
+p d990 1024
+p c999 1024
+p c990 1024
+p b999 1024
+p b990 1024
+p a999 1024
+p a990 1024
+p y998 1024
+r y990
+p d998 1024
+p d990 1024
+p c998 1024
+p c990 1024
+p b998 1024
+p b990 1024
+p a998 1024
+p a990 1024
+p y997 2014
+S
+o
+EOF
+ echo "$list") |
+ # awk script input:
+ # {p|g|r} key [datasize]
+ awk '/^[pgr]/{
+ printf("%s\nk%s\n", $1, $2);
+ }
+ /^p/{
+ s = $2;
+ for (i = 0; i < $3; i++) {
+ s = s "x";
+ }
+ printf("d%s\n", s);
+ }
+ !/^[pgr]/{
+ print $0;
+ }' > in
+ (echo "$list"; echo "$list") | awk '{
+ s = $2;
+ for (i = 0; i < $3; i++) {
+ s = s "x";
+ }
+ print s;
+ }' > exp
+ atf_check -o file:exp \
+ "$(prog_db)" -i psize=4096 btree in
+}
+
+# Begin FreeBSD
+if false; then
+# End FreeBSD
+atf_test_case btree_recursive_traversal
+btree_recursive_traversal_head()
+{
+ atf_set "descr" \
+ "btree: Test for recursive traversal successfully " \
+ "retrieving records that are inaccessible to normal " \
+ "sequential 'sibling-link' traversal. This works by " \
+ "unlinking a few leaf pages but leaving their parent " \
+ "links intact. To verify that the unlink actually makes " \
+ "records inaccessible, the test first uses 'o' to do a " \
+ "normal sequential traversal, followed by 'O' to do a " \
+ "recursive traversal."
+}
+btree_recursive_traversal_body()
+{
+ fill="abcdefghijklmnopqrstuvwxyzy"
+ script='{
+ for (i = 0; i < 20000; i++) {
+ printf("p\nkAA%05d\nd%05d%s\n", i, i, $0);
+ }
+ print "u";
+ print "u";
+ print "u";
+ print "u";
+ }'
+ (echo $fill | awk "$script"; echo o) > in1
+ echo $fill |
+ awk '{
+ for (i = 0; i < 20000; i++) {
+ if (i >= 5 && i <= 40)
+ continue;
+ printf("%05d%s\n", i, $0);
+ }
+ }' > exp1
+ atf_check -o file:exp1 \
+ "$(prog_db)" -i psize=512 btree in1
+ echo $fill |
+ awk '{
+ for (i = 0; i < 20000; i++) {
+ printf("%05d%s\n", i, $0);
+ }
+ }' > exp2
+ (echo $fill | awk "$script"; echo O) > in2
+ atf_check -o file:exp2 \
+ "$(prog_db)" -i psize=512 btree in2
+}
+# Begin FreeBSD
+fi
+# End FreeBSD
+
+atf_test_case btree_byteswap_unaligned_access_bksd
+btree_byteswap_unaligned_access_bksd_head()
+{
+ atf_set "descr" \
+ "btree: big key, small data, byteswap unaligned access"
+}
+btree_byteswap_unaligned_access_bksd_body()
+{
+ (echo foo; echo bar) |
+ awk '{
+ s = $0
+ for (i = 0; i < 488; i++) {
+ s = s "x";
+ }
+ printf("p\nk%s\ndx\n", s);
+ }' > in
+ for order in 1234 4321; do
+ atf_check \
+ "$(prog_db)" -o out -i psize=512,lorder=$order btree in
+ done
+}
+
+atf_test_case btree_byteswap_unaligned_access_skbd
+btree_byteswap_unaligned_access_skbd_head()
+{
+ atf_set "descr" \
+ "btree: small key, big data, byteswap unaligned access"
+}
+btree_byteswap_unaligned_access_skbd_body()
+{
+ # 484 = 512 - 20 (header) - 7 ("foo1234") - 1 (newline)
+ (echo foo1234; echo bar1234) |
+ awk '{
+ s = $0
+ for (i = 0; i < 484; i++) {
+ s = s "x";
+ }
+ printf("p\nk%s\nd%s\n", $0, s);
+ }' > in
+ for order in 1234 4321; do
+ atf_check \
+ "$(prog_db)" -o out -i psize=512,lorder=$order btree in
+ done
+}
+
+atf_test_case btree_known_byte_order
+btree_known_byte_order_head()
+{
+ atf_set "descr" \
+ "btree: small key, big data, known byte order"
+}
+btree_known_byte_order_body()
+{
+ local a="-i psize=512,lorder="
+
+ (echo foo1234; echo bar1234) |
+ awk '{
+ s = $0
+ for (i = 0; i < 484; i++) {
+ s = s "x";
+ }
+ printf("%s\n", s);
+ }' > exp
+ (echo foo1234; echo bar1234) |
+ awk '{
+ s = $0
+ for (i = 0; i < 484; i++) {
+ s = s "x";
+ }
+ printf("p\nk%s\nd%s\n", $0, s);
+ }' > in1
+ for order in 1234 4321; do
+ atf_check \
+ "$(prog_db)" -f out.$order $a$order btree in1
+ done
+ (echo g; echo kfoo1234; echo g; echo kbar1234) > in2
+ for order in 1234 4321; do
+ atf_check -o file:exp \
+ "$(prog_db)" -s -f out.$order $a$order btree in2
+ done
+}
+
atf_init_test_cases()
{
atf_add_test_case small_btree
@@ -937,4 +1294,17 @@ atf_init_test_cases()
atf_add_test_case byte_orders_hash
atf_add_test_case bsize_ffactor
atf_add_test_case four_char_hash
+ atf_add_test_case bsize_torture
+ atf_add_test_case btree_weird_page_split
+ atf_add_test_case btree_tricky_page_split
+ # Begin FreeBSD
+ if false; then
+ # End FreeBSD
+ atf_add_test_case btree_recursive_traversal
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
+ atf_add_test_case btree_byteswap_unaligned_access_bksd
+ atf_add_test_case btree_byteswap_unaligned_access_skbd
+ atf_add_test_case btree_known_byte_order
}
diff --git a/contrib/netbsd-tests/lib/libc/db/t_db_hash_seq.c b/contrib/netbsd-tests/lib/libc/db/t_db_hash_seq.c
new file mode 100644
index 0000000..6e19e22
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/db/t_db_hash_seq.c
@@ -0,0 +1,343 @@
+/* $NetBSD: t_db_hash_seq.c,v 1.2 2015/06/22 22:35:51 christos Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_db_hash_seq.c,v 1.2 2015/06/22 22:35:51 christos Exp $");
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <db.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <syslog.h>
+#include <netinet/in.h>
+
+#define ATF
+
+struct conf {
+ struct sockaddr_storage c_ss;
+ int c_lmask;
+ int c_port;
+ int c_proto;
+ int c_family;
+ int c_uid;
+ int c_nfail;
+ char c_name[128];
+ int c_rmask;
+ int c_duration;
+};
+
+struct dbinfo {
+ int count;
+ time_t last;
+ char id[64];
+};
+
+#ifdef ATF
+#include <atf-c.h>
+
+#define DO_ERR(msg, ...) ATF_REQUIRE_MSG(0, msg, __VA_ARGS__)
+#define DO_WARNX(msg, ...) ATF_REQUIRE_MSG(0, msg, __VA_ARGS__)
+#else
+#include <err.h>
+
+#define DO_ERR(fmt, ...) err(EXIT_FAILURE, fmt, __VA_ARGS__)
+#define DO_WARNX(fmt, ...) warnx(fmt, __VA_ARGS__)
+#endif
+
+#define DO_DEBUG(fmt, ...) fprintf(stderr, fmt, __VA_ARGS__)
+
+static HASHINFO openinfo = {
+ 4096, /* bsize */
+ 32, /* ffactor */
+ 256, /* nelem */
+ 8 * 1024 * 1024,/* cachesize */
+ NULL, /* hash() */
+ 0 /* lorder */
+};
+
+static int debug = 0;
+
+static int
+state_close(DB *db)
+{
+ if (db == NULL)
+ return -1;
+ if ((*db->close)(db) == -1)
+ DO_ERR("%s: can't close db", __func__);
+ return 0;
+}
+
+static DB *
+state_open(const char *dbname, int flags, mode_t perm)
+{
+ DB *db;
+
+ db = dbopen(dbname, flags, perm, DB_HASH, &openinfo);
+ if (db == NULL) {
+ if (errno == ENOENT && (flags & O_CREAT) == 0)
+ return NULL;
+ DO_ERR("%s: can't open `%s'", __func__, dbname);
+ }
+ return db;
+}
+
+static int
+state_sizecheck(const DBT *t)
+{
+ if (sizeof(struct conf) == t->size)
+ return 0;
+ DO_WARNX("Key size mismatch %zu != %zu", sizeof(struct conf), t->size);
+ return 0;
+}
+
+static int
+state_del(DB *db, const struct conf *c)
+{
+ int rv;
+ DBT k;
+
+ if (db == NULL)
+ return -1;
+
+ k.data = __UNCONST(c);
+ k.size = sizeof(*c);
+
+ switch (rv = (*db->del)(db, &k, 1)) {
+ case 0:
+ case 1:
+ if (debug > 1) {
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ (*db->sync)(db, 0);
+ }
+ return 0;
+ default:
+ DO_ERR("%s: failed", __func__);
+ return -1;
+ }
+}
+
+#if 0
+static int
+state_get(DB *db, const struct conf *c, struct dbinfo *dbi)
+{
+ int rv;
+ DBT k, v;
+
+ if (db == NULL)
+ return -1;
+
+ k.data = __UNCONST(c);
+ k.size = sizeof(*c);
+
+ switch (rv = (*db->get)(db, &k, &v, 0)) {
+ case 0:
+ case 1:
+ if (rv)
+ memset(dbi, 0, sizeof(*dbi));
+ else
+ memcpy(dbi, v.data, sizeof(*dbi));
+ if (debug > 1)
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ return 0;
+ default:
+ DO_ERR("%s: failed", __func__);
+ return -1;
+ }
+}
+#endif
+
+static int
+state_put(DB *db, const struct conf *c, const struct dbinfo *dbi)
+{
+ int rv;
+ DBT k, v;
+
+ if (db == NULL)
+ return -1;
+
+ k.data = __UNCONST(c);
+ k.size = sizeof(*c);
+ v.data = __UNCONST(dbi);
+ v.size = sizeof(*dbi);
+
+ switch (rv = (*db->put)(db, &k, &v, 0)) {
+ case 0:
+ if (debug > 1) {
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ (*db->sync)(db, 0);
+ }
+ return 0;
+ case 1:
+ errno = EEXIST;
+ /*FALLTHROUGH*/
+ default:
+ DO_ERR("%s: failed", __func__);
+ }
+}
+
+static int
+state_iterate(DB *db, struct conf *c, struct dbinfo *dbi, unsigned int first)
+{
+ int rv;
+ DBT k, v;
+
+ if (db == NULL)
+ return -1;
+
+ first = first ? R_FIRST : R_NEXT;
+
+ switch (rv = (*db->seq)(db, &k, &v, first)) {
+ case 0:
+ if (state_sizecheck(&k) == -1)
+ return -1;
+ memcpy(c, k.data, sizeof(*c));
+ memcpy(dbi, v.data, sizeof(*dbi));
+ if (debug > 1)
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ return 1;
+ case 1:
+ if (debug > 1)
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ return 0;
+ default:
+ DO_ERR("%s: failed", __func__);
+ return -1;
+ }
+}
+
+#define MAXB 100
+
+static int
+testdb(int skip)
+{
+ size_t i;
+ int f;
+ char flag[MAXB];
+ DB *db;
+ struct conf c;
+ struct dbinfo d;
+
+ db = state_open(NULL, O_RDWR|O_CREAT|O_TRUNC, 0600);
+ if (db == NULL)
+ DO_ERR("%s: cannot open `%s'", __func__, "foo");
+
+ memset(&c, 0, sizeof(c));
+ memset(&d, 0, sizeof(d));
+ memset(flag, 0, sizeof(flag));
+
+ for (i = 0; i < __arraycount(flag); i++) {
+ c.c_port = i;
+ state_put(db, &c, &d);
+ }
+
+ for (f = 1, i = 0; state_iterate(db, &c, &d, f) == 1; f = 0, i++) {
+ if (debug > 1)
+ DO_DEBUG("%zu %d\n", i, c.c_port);
+ if (flag[c.c_port])
+ DO_WARNX("Already visited %d", c.c_port);
+ flag[c.c_port] = 1;
+ if (skip == 0 || c.c_port % skip != 0)
+ continue;
+ state_del(db, &c);
+ }
+ state_close(db);
+ for (i = 0; i < __arraycount(flag); i++) {
+ if (flag[i] == 0)
+ DO_WARNX("Not visited %zu", i);
+ }
+ return 0;
+}
+
+#ifndef ATF
+int
+main(int argc, char *argv[])
+{
+ return testdb(6);
+}
+#else
+
+ATF_TC(test_hash_del_none);
+ATF_TC_HEAD(test_hash_del_none, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check sequential scan of hash tables deleting none");
+}
+
+ATF_TC_BODY(test_hash_del_none, tc)
+{
+ testdb(0);
+}
+
+ATF_TC(test_hash_del_all);
+ATF_TC_HEAD(test_hash_del_all, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check sequential scan of hash tables deleting all");
+}
+
+ATF_TC_BODY(test_hash_del_all, tc)
+{
+ testdb(1);
+}
+
+ATF_TC(test_hash_del_alt);
+ATF_TC_HEAD(test_hash_del_alt, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check sequential scan of hash tables alternating deletets");
+}
+
+ATF_TC_BODY(test_hash_del_alt, tc)
+{
+ testdb(2);
+}
+
+ATF_TC(test_hash_del_every_7);
+ATF_TC_HEAD(test_hash_del_every_7, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check sequential scan of hash tables deleting every 7 elements");
+}
+
+ATF_TC_BODY(test_hash_del_every_7, tc)
+{
+ testdb(7);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, test_hash_del_none);
+ ATF_TP_ADD_TC(tp, test_hash_del_all);
+ ATF_TP_ADD_TC(tp, test_hash_del_alt);
+ ATF_TP_ADD_TC(tp, test_hash_del_every_7);
+
+ return 0;
+}
+#endif
diff --git a/contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c b/contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c
index 32de6e7..d3752cd 100644
--- a/contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c
+++ b/contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_execve.c,v 1.1 2014/04/29 06:29:02 uebayasi Exp $ */
+/* $NetBSD: t_execve.c,v 1.2 2015/09/12 15:21:33 christos Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -47,7 +47,8 @@ ATF_TC_BODY(t_execve_null, tc)
err = execve(NULL, NULL, NULL);
ATF_REQUIRE(err == -1);
- ATF_REQUIRE(errno == EFAULT);
+ ATF_REQUIRE_MSG(errno == EFAULT,
+ "wrong error returned %d instead of %d", errno, EFAULT);
}
ATF_TP_ADD_TCS(tp)
diff --git a/contrib/netbsd-tests/lib/libc/gen/isqemu.h b/contrib/netbsd-tests/lib/libc/gen/isqemu.h
index 7d73a22..c44ffda 100644
--- a/contrib/netbsd-tests/lib/libc/gen/isqemu.h
+++ b/contrib/netbsd-tests/lib/libc/gen/isqemu.h
@@ -1,4 +1,4 @@
-/* $NetBSD: isqemu.h,v 1.3 2013/04/14 12:46:29 martin Exp $ */
+/* $NetBSD: isqemu.h,v 1.4 2015/01/03 14:21:05 gson Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -34,12 +34,37 @@
#include <sys/param.h>
#include <sys/sysctl.h>
#include <stdbool.h>
+#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <err.h>
static __inline bool
isQEMU(void) {
+#ifdef __FreeBSD__
+ char *vm_guest_name_buf;
+ size_t len;
+ bool is_vm;
+
+ if (sysctlbyname("kern.vm_guest", NULL, &len, NULL, 0) == -1)
+ err(EXIT_FAILURE, "sysctl");
+
+ if ((vm_guest_name_buf = malloc(len)) == NULL)
+ err(EXIT_FAILURE, "malloc");
+
+ if (sysctlbyname("kern.vm_guest", vm_guest_name_buf, &len, NULL, 0)
+ == -1)
+ err(EXIT_FAILURE, "sysctl");
+
+ if (strcmp(vm_guest_name_buf, "none") == 0)
+ is_vm = false;
+ else
+ is_vm = true;
+
+ free(vm_guest_name_buf);
+
+ return is_vm;
+#else
#if defined(__i386__) || defined(__x86_64__)
char name[1024];
size_t len = sizeof(name);
@@ -53,6 +78,7 @@ isQEMU(void) {
#else
return false;
#endif
+#endif
}
#ifdef TEST
diff --git a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c
index 5bbf337..74009a8 100644
--- a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c
+++ b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fileactions.c,v 1.5 2012/04/09 19:42:07 martin Exp $ */
+/* $NetBSD: t_fileactions.c,v 1.6 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -31,10 +31,11 @@
*/
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#include <atf-c.h>
+
+#include <sys/wait.h>
+#include <sys/stat.h>
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -42,7 +43,6 @@
#include <fcntl.h>
#include <spawn.h>
#include <unistd.h>
-#include <sys/wait.h>
ATF_TC(t_spawn_openmode);
diff --git a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c
index 178374b..12f2760 100644
--- a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c
+++ b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_spawn.c,v 1.1 2012/02/13 21:03:08 martin Exp $ */
+/* $NetBSD: t_spawn.c,v 1.2 2014/10/18 08:33:30 snj Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -137,7 +137,7 @@ ATF_TC(t_spawn_child);
ATF_TC_HEAD(t_spawn_child, tc)
{
atf_tc_set_md_var(tc, "descr",
- "posix_spawn a child and get it's return code");
+ "posix_spawn a child and get its return code");
}
ATF_TC_BODY(t_spawn_child, tc)
diff --git a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c
index 78313cd..2085b9e 100644
--- a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c
+++ b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c
@@ -60,16 +60,16 @@ get_different_scheduler(void)
/* get current schedule policy */
scheduler = sched_getscheduler(0);
- for (i = 0; i < nitems(schedulers); i++) {
+ for (i = 0; i < __arraycount(schedulers); i++) {
if (schedulers[i] == scheduler)
break;
}
- ATF_REQUIRE_MSG(i < nitems(schedulers),
+ ATF_REQUIRE_MSG(i < __arraycount(schedulers),
"Unknown current scheduler %d", scheduler);
-
+
/* new scheduler */
i++;
- if (i >= nitems(schedulers))
+ if (i >= __arraycount(schedulers))
i = 0;
return schedulers[i];
}
@@ -85,7 +85,7 @@ get_different_priority(int scheduler)
sched_getparam(0, &param);
priority = param.sched_priority;
-
+
/*
* Change numerical value of the priority, to ensure that it
* was set for the spawned child.
@@ -127,7 +127,7 @@ ATF_TC_BODY(t_spawnattr, tc)
scheduler = get_different_scheduler();
priority = get_different_priority(scheduler);
sp.sched_priority = priority;
-
+
sigemptyset(&sig);
sigaddset(&sig, SIGUSR1);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_assert.c b/contrib/netbsd-tests/lib/libc/gen/t_assert.c
index a09c130..ce73015 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_assert.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_assert.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_assert.c,v 1.2 2011/06/14 05:28:00 jruoho Exp $ */
+/* $NetBSD: t_assert.c,v 1.3 2017/01/10 15:17:57 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,8 +29,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_assert.c,v 1.2 2011/06/14 05:28:00 jruoho Exp $");
+__RCSID("$NetBSD: t_assert.c,v 1.3 2017/01/10 15:17:57 christos Exp $");
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <sys/time.h>
#include <sys/wait.h>
#include <assert.h>
@@ -40,11 +43,6 @@ __RCSID("$NetBSD: t_assert.c,v 1.2 2011/06/14 05:28:00 jruoho Exp $");
#include <string.h>
#include <unistd.h>
-#ifdef __FreeBSD__
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-
static void
disable_corefile(void)
{
@@ -55,7 +53,6 @@ disable_corefile(void)
ATF_REQUIRE(setrlimit(RLIMIT_CORE, &limits) == 0);
}
-#endif
static void handler(int);
@@ -82,9 +79,7 @@ ATF_TC_BODY(assert_false, tc)
if (pid == 0) {
-#ifdef __FreeBSD__
disable_corefile();
-#endif
(void)closefrom(0);
(void)memset(&sa, 0, sizeof(struct sigaction));
@@ -122,9 +117,7 @@ ATF_TC_BODY(assert_true, tc)
if (pid == 0) {
-#ifdef __FreeBSD__
disable_corefile();
-#endif
(void)closefrom(0);
(void)memset(&sa, 0, sizeof(struct sigaction));
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_dir.c b/contrib/netbsd-tests/lib/libc/gen/t_dir.c
index b37d89d..40de116 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_dir.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_dir.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_dir.c,v 1.6 2013/10/19 17:45:00 christos Exp $ */
+/* $NetBSD: t_dir.c,v 1.10 2017/01/11 18:15:02 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -26,22 +26,19 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <atf-c.h>
-
+#include <sys/stat.h>
#include <assert.h>
+#include <atf-c.h>
#include <dirent.h>
#include <err.h>
+#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/stat.h>
-#ifdef __FreeBSD__
-#include <errno.h>
-#endif
ATF_TC(seekdir_basic);
ATF_TC_HEAD(seekdir_basic, tc)
@@ -58,7 +55,6 @@ ATF_TC_BODY(seekdir_basic, tc)
struct dirent *entry;
long here;
-#ifdef __FreeBSD__
#define CREAT(x, m) do { \
int _creat_fd; \
ATF_REQUIRE_MSG((_creat_fd = creat((x), (m))) != -1, \
@@ -72,12 +68,6 @@ ATF_TC_BODY(seekdir_basic, tc)
CREAT("t/a", 0600);
CREAT("t/b", 0600);
CREAT("t/c", 0600);
-#else
- mkdir("t", 0755);
- creat("t/a", 0600);
- creat("t/b", 0600);
- creat("t/c", 0600);
-#endif
dp = opendir("t");
if ( dp == NULL)
@@ -85,35 +75,40 @@ ATF_TC_BODY(seekdir_basic, tc)
/* skip two for . and .. */
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ ".", strerror(errno));
+
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "..", strerror(errno));
/* get first entry */
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "first", strerror(errno));
+
here = telldir(dp);
-#ifdef __FreeBSD__
- ATF_REQUIRE_MSG(here != -1,
- "telldir failed: %s", strerror(errno));
-#endif
+ ATF_REQUIRE_MSG(here != -1, "telldir failed: %s", strerror(errno));
/* get second entry */
entry = readdir(dp);
-#ifdef __FreeBSD__
- ATF_REQUIRE_MSG(entry != NULL,
- "readdir failed: %s", strerror(errno));
-#endif
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "second", strerror(errno));
+
wasname = strdup(entry->d_name);
if (wasname == NULL)
atf_tc_fail("cannot allocate memory");
/* get third entry */
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "third", strerror(errno));
/* try to return to the position after the first entry */
seekdir(dp, here);
entry = readdir(dp);
-
- if (entry == NULL)
- atf_tc_fail("entry 1 not found");
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "first[1]", strerror(errno));
if (strcmp(entry->d_name, wasname) != 0)
atf_tc_fail("1st seekdir found wrong name");
@@ -121,25 +116,22 @@ ATF_TC_BODY(seekdir_basic, tc)
seekdir(dp, here);
here = telldir(dp);
entry = readdir(dp);
-
- if (entry == NULL)
- atf_tc_fail("entry 2 not found");
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "second[1]", strerror(errno));
if (strcmp(entry->d_name, wasname) != 0)
atf_tc_fail("2nd seekdir found wrong name");
/* One more time, to make sure that telldir() doesn't affect result */
seekdir(dp, here);
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "third[1]", strerror(errno));
- if (entry == NULL)
- atf_tc_fail("entry 3 not found");
if (strcmp(entry->d_name, wasname) != 0)
atf_tc_fail("3rd seekdir found wrong name");
closedir(dp);
-#ifdef __FreeBSD__
free(wasname);
-#endif
}
ATF_TC(telldir_leak);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c b/contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c
index ef372f7..c3417bb 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c
@@ -119,6 +119,11 @@ ATF_TC_BODY(floatunditf, tc)
#else
size_t i;
+#if defined(__FreeBSD__) && defined(__i386__)
+ atf_tc_expect_fail("the floating point error on FreeBSD/i386 doesn't "
+ "match the expected floating point error on NetBSD");
+#endif
+
for (i = 0; i < __arraycount(testcases); ++i)
ATF_CHECK_MSG(
testcases[i].ld == (long double)testcases[i].u64,
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c b/contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c
index f90d8cf..69ee8d2 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fnmatch.c,v 1.3 2012/04/08 09:58:59 jruoho Exp $ */
+/* $NetBSD: t_fnmatch.c,v 1.7 2016/10/31 05:08:53 dholland Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fnmatch.c,v 1.3 2012/04/08 09:58:59 jruoho Exp $");
+__RCSID("$NetBSD: t_fnmatch.c,v 1.7 2016/10/31 05:08:53 dholland Exp $");
#include <atf-c.h>
#include <fnmatch.h>
@@ -153,6 +153,31 @@ ATF_TC_BODY(fnmatch_period, tc)
ATF_CHECK(fnmatch("x/*y", "x/.y", FNM_PATHNAME | FNM_PERIOD) != 0);
}
+ATF_TC(fnmatch_initialbracket);
+ATF_TC_HEAD(fnmatch_initialbracket, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test fnmatch with initial [");
+}
+
+ATF_TC_BODY(fnmatch_initialbracket, tc)
+{
+ ATF_CHECK(fnmatch("[[?*\\\\]", "\\", 0) == 0);
+ ATF_CHECK(fnmatch("[]?*\\\\]", "]", 0) == 0);
+ ATF_CHECK(fnmatch("[!]a-]", "b", 0) == 0);
+ ATF_CHECK(fnmatch("[]-_]", "^", 0) == 0); /* range: ']', '^', '_' */
+ ATF_CHECK(fnmatch("[!]-_]", "X", 0) == 0);
+ ATF_CHECK(fnmatch("[A-\\\\]", "[", 0) == 0);
+ ATF_CHECK(fnmatch("[a-z]/[a-z]", "a/b", 0) == 0);
+ ATF_CHECK(fnmatch("[*]/b", "*/b", 0) == 0);
+ ATF_CHECK(fnmatch("[?]/b", "?/b", 0) == 0);
+ ATF_CHECK(fnmatch("[[a]/b", "a/b", 0) == 0);
+ ATF_CHECK(fnmatch("[[a]/b", "[/b", 0) == 0);
+ ATF_CHECK(fnmatch("[/b", "[/b", 0) == 0);
+
+ ATF_CHECK(fnmatch("[*]/b", "a/b", 0) != 0);
+ ATF_CHECK(fnmatch("[?]/b", "a/b", 0) != 0);
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -162,6 +187,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, fnmatch_noescape);
ATF_TP_ADD_TC(tp, fnmatch_pathname);
ATF_TP_ADD_TC(tp, fnmatch_period);
+ ATF_TP_ADD_TC(tp, fnmatch_initialbracket);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c b/contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c
index 3366c1f..5edc583 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fpsetmask.c,v 1.14 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_fpsetmask.c,v 1.16 2016/03/12 11:55:14 martin Exp $ */
/*-
* Copyright (c) 1995 The NetBSD Foundation, Inc.
@@ -58,8 +58,20 @@ ATF_TC_BODY(no_test, tc)
#include <ieeefp.h>
-const char *skip_mesg;
-const char *skip_arch;
+#if __arm__ && !__SOFTFP__
+ /*
+ * Some NEON fpus do not implement IEEE exception handling,
+ * skip these tests if running on them and compiled for
+ * hard float.
+ */
+#define FPU_PREREQ() \
+ if (0 == fpsetmask(fpsetmask(FP_X_INV))) \
+ atf_tc_skip("FPU does not implement exception handling");
+#endif
+
+#ifndef FPU_PREREQ
+#define FPU_PREREQ() /* nothing */
+#endif
void sigfpe(int, siginfo_t *, void *);
@@ -296,6 +308,9 @@ sigfpe(int s, siginfo_t *si, void *c)
\
ATF_TC_BODY(m##_##t, tc) \
{ \
+ \
+ FPU_PREREQ(); \
+ \
if (strcmp(MACHINE, "macppc") == 0) \
atf_tc_expect_fail("PR port-macppc/46319"); \
\
@@ -323,11 +338,13 @@ ATF_TC_BODY(fpsetmask_basic, tc)
size_t i;
fp_except_t msk, lst[] = { FP_X_INV, FP_X_DZ, FP_X_OFL, FP_X_UFL };
+ FPU_PREREQ();
+
msk = fpgetmask();
for (i = 0; i < __arraycount(lst); i++) {
fpsetmask(msk | lst[i]);
ATF_CHECK((fpgetmask() & lst[i]) != 0);
- fpsetmask(msk & lst[i]);
+ fpsetmask(msk & ~lst[i]);
ATF_CHECK((fpgetmask() & lst[i]) == 0);
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_ftok.c b/contrib/netbsd-tests/lib/libc/gen/t_ftok.c
index 718d310..4c1ab18 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_ftok.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_ftok.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ftok.c,v 1.1 2011/11/08 05:47:00 jruoho Exp $ */
+/* $NetBSD: t_ftok.c,v 1.2 2017/01/10 15:19:52 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_ftok.c,v 1.1 2011/11/08 05:47:00 jruoho Exp $");
+__RCSID("$NetBSD: t_ftok.c,v 1.2 2017/01/10 15:19:52 christos Exp $");
#include <sys/types.h>
#include <sys/ipc.h>
@@ -68,9 +68,7 @@ ATF_TC_BODY(ftok_link, tc)
fd = open(path, O_RDONLY | O_CREAT);
ATF_REQUIRE(fd >= 0);
-#ifdef __FreeBSD__
(void)close(fd);
-#endif
ATF_REQUIRE(link(path, hlnk) == 0);
ATF_REQUIRE(symlink(path, slnk) == 0);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c b/contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c
index 5836c86..17eac87 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_humanize_number.c,v 1.8 2012/03/18 07:14:08 jruoho Exp $ */
+/* $NetBSD: t_humanize_number.c,v 1.9 2017/01/10 15:20:44 christos Exp $ */
/*-
* Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
@@ -247,6 +247,7 @@ ATF_TC_BODY(humanize_number_basic, tc)
newline();
atf_tc_fail_nonfatal("Failed for table entry %d", i);
}
+ free(buf);
}
ATF_TC(humanize_number_big);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_nice.c b/contrib/netbsd-tests/lib/libc/gen/t_nice.c
index 10b8df7..9a0eac7 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_nice.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_nice.c
@@ -72,11 +72,6 @@ ATF_TC_BODY(nice_err, tc)
{
int i;
-#ifdef __FreeBSD__
- atf_tc_expect_fail("nice(incr) with incr < 0 fails with unprivileged "
- "users and sets errno == EPERM; see PR # 189821 for more details");
-#endif
-
/*
* The call should fail with EPERM if the
* supplied parameter is negative and the
@@ -130,7 +125,7 @@ ATF_TC_BODY(nice_priority, tc)
if (pid == 0) {
errno = 0;
-#ifdef __FreeBSD__
+#ifdef __NetBSD__
pri = getpriority(PRIO_PROCESS, 0);
#else
pri2 = getpriority(PRIO_PROCESS, 0);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_randomid.c b/contrib/netbsd-tests/lib/libc/gen/t_randomid.c
index 8377806..9ab2cca 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_randomid.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_randomid.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_randomid.c,v 1.3 2011/07/07 09:49:59 jruoho Exp $ */
+/* $NetBSD: t_randomid.c,v 1.5 2015/03/07 09:59:15 isaki Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
#define PERIOD 30000
-uint64_t last[65536];
+uint32_t last[65536];
ATF_TC(randomid_basic);
ATF_TC_HEAD(randomid_basic, tc)
@@ -50,30 +50,30 @@ ATF_TC_HEAD(randomid_basic, tc)
ATF_TC_BODY(randomid_basic, tc)
{
static randomid_t ctx = NULL;
- uint64_t lowest, n, diff;
+ uint32_t lowest, n, diff;
uint16_t id;
memset(last, 0, sizeof(last));
ctx = randomid_new(16, (long)3600);
- lowest = UINT64_MAX;
+ lowest = UINT32_MAX;
- for (n = 0; n < 1000000; n++) {
+ for (n = 0; n < 100000; n++) {
id = randomid(ctx);
if (last[id] > 0) {
diff = n - last[id];
if (diff <= lowest) {
- if (lowest != UINT64_MAX)
- printf("id %5d: last call at %9"PRIu64
- ", current call %9"PRIu64
- " (diff %5"PRIu64"), "
- "lowest %"PRIu64"\n",
+ if (lowest != UINT32_MAX)
+ printf("id %5d: last call at %9"PRIu32
+ ", current call %9"PRIu32
+ " (diff %5"PRIu32"), "
+ "lowest %"PRIu32"\n",
id, last[id], n, diff, lowest);
ATF_REQUIRE_MSG(diff >= PERIOD,
- "diff (%"PRIu64") less than minimum "
+ "diff (%"PRIu32") less than minimum "
"period (%d)", diff, PERIOD);
lowest = diff;
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_siginfo.c b/contrib/netbsd-tests/lib/libc/gen/t_siginfo.c
index 9c9a3c7..64f72ac 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_siginfo.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_siginfo.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_siginfo.c,v 1.24 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_siginfo.c,v 1.30 2015/12/22 14:25:58 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -46,8 +46,9 @@
#include <setjmp.h>
#include <float.h>
-#ifdef HAVE_FENV
#include <fenv.h>
+#ifdef __HAVE_FENV
+#include <ieeefp.h> /* only need for ARM Cortex/Neon hack */
#elif defined(_FLOAT_IEEE754)
#include <ieeefp.h>
#endif
@@ -316,13 +317,21 @@ ATF_TC_BODY(sigfpe_flt, tc)
atf_tc_skip("Test does not run correctly under QEMU");
#if defined(__powerpc__)
atf_tc_skip("Test not valid on powerpc");
+#elif defined(__arm__) && !__SOFTFP__
+ /*
+ * Some NEON fpus do not implement IEEE exception handling,
+ * skip these tests if running on them and compiled for
+ * hard float.
+ */
+ if (0 == fpsetmask(fpsetmask(FP_X_INV)))
+ atf_tc_skip("FPU does not implement exception handling");
#endif
if (sigsetjmp(sigfpe_flt_env, 0) == 0) {
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = sigfpe_flt_action;
sigemptyset(&sa.sa_mask);
sigaction(SIGFPE, &sa, NULL);
-#ifdef HAVE_FENV
+#ifdef __HAVE_FENV
feenableexcept(FE_ALL_EXCEPT);
#elif defined(_FLOAT_IEEE754)
fpsetmask(FP_X_INV|FP_X_DZ|FP_X_OFL|FP_X_UFL|FP_X_IMP);
@@ -373,7 +382,7 @@ ATF_TC_BODY(sigfpe_int, tc)
sa.sa_sigaction = sigfpe_int_action;
sigemptyset(&sa.sa_mask);
sigaction(SIGFPE, &sa, NULL);
-#ifdef HAVE_FENV
+#ifdef __HAVE_FENV
feenableexcept(FE_ALL_EXCEPT);
#elif defined(_FLOAT_IEEE754)
fpsetmask(FP_X_INV|FP_X_DZ|FP_X_OFL|FP_X_UFL|FP_X_IMP);
@@ -454,15 +463,19 @@ ATF_TC_BODY(sigbus_adraln, tc)
{
struct sigaction sa;
-#if defined(__alpha__)
+#if defined(__alpha__) || defined(__arm__)
int rv, val;
size_t len = sizeof(val);
rv = sysctlbyname("machdep.unaligned_sigbus", &val, &len, NULL, 0);
ATF_REQUIRE(rv == 0);
if (val == 0)
- atf_tc_skip("SIGBUS signal not enabled for unaligned accesses");
+ atf_tc_skip("No SIGBUS signal for unaligned accesses");
#endif
+ /* m68k (except sun2) never issue SIGBUS (PR lib/49653) */
+ if (strcmp(MACHINE_ARCH, "m68k") == 0)
+ atf_tc_skip("No SIGBUS signal for unaligned accesses");
+
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = sigbus_action;
sigemptyset(&sa.sa_mask);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_sleep.c b/contrib/netbsd-tests/lib/libc/gen/t_sleep.c
index f722ec9..e85867a 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_sleep.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_sleep.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_sleep.c,v 1.8 2014/07/15 14:56:34 gson Exp $ */
+/* $NetBSD: t_sleep.c,v 1.11 2017/01/10 15:43:59 maya Exp $ */
/*-
* Copyright (c) 2006 Frank Kardel
@@ -26,8 +26,18 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#ifdef __FreeBSD__
+/* kqueue(2) on FreeBSD requires sys/types.h for uintptr_t; NetBSD doesn't. */
+#include <sys/types.h>
+#endif
+#include <sys/cdefs.h>
+#include <sys/event.h>
+#include <sys/signal.h>
+#include <sys/time.h> /* for TIMESPEC_TO_TIMEVAL on FreeBSD */
+
#include <atf-c.h>
#include <errno.h>
+#include <inttypes.h>
#include <poll.h>
#include <stdio.h>
#include <stdlib.h>
@@ -35,10 +45,6 @@
#include <time.h>
#include <unistd.h>
-#include <sys/cdefs.h>
-#include <sys/event.h>
-#include <sys/signal.h>
-
#include "isqemu.h"
#define BILLION 1000000000LL /* nano-seconds per second */
@@ -49,11 +55,6 @@
#define KEVNT_TIMEOUT 10300 /* measured in milli-seconds */
#define FUZZ (40 * MILLION) /* scheduling fuzz accepted - 40 ms */
-#ifdef __FreeBSD__
-#include <sys/time.h>
-#include <inttypes.h>
-#endif
-
/*
* Timer notes
*
@@ -180,7 +181,8 @@ do_kevent(struct timespec *delay, struct timespec *remain)
(void)close(kq);
if (rtc == -1) {
- ATF_REQUIRE_MSG(kerrno == EINTR, "kevent: %s", strerror(errno));
+ ATF_REQUIRE_MSG(kerrno == EINTR, "kevent: %s",
+ strerror(kerrno));
return 0;
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_time.c b/contrib/netbsd-tests/lib/libc/gen/t_time.c
index 790f3ca..15a8d58 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_time.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_time.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_time.c,v 1.2 2011/11/11 05:03:38 jruoho Exp $ */
+/* $NetBSD: t_time.c,v 1.4 2017/01/10 15:32:46 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,11 +29,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_time.c,v 1.2 2011/11/11 05:03:38 jruoho Exp $");
+__RCSID("$NetBSD: t_time.c,v 1.4 2017/01/10 15:32:46 christos Exp $");
-#ifdef __FreeBSD__
-#include <sys/time.h>
-#endif
#include <atf-c.h>
#include <errno.h>
#include <inttypes.h>
@@ -41,6 +38,7 @@ __RCSID("$NetBSD: t_time.c,v 1.2 2011/11/11 05:03:38 jruoho Exp $");
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
+#include <sys/time.h>
#include <unistd.h>
ATF_TC(time_copy);
@@ -94,15 +92,16 @@ ATF_TC_HEAD(time_timeofday, tc)
ATF_TC_BODY(time_timeofday, tc)
{
struct timeval tv = { 0, 0 };
- time_t t;
+ time_t t1, t2;
- t = time(NULL);
+ t1 = time(NULL);
ATF_REQUIRE(gettimeofday(&tv, NULL) == 0);
+ t2 = time(NULL);
(void)fprintf(stderr, "%"PRId64" vs. %"PRId64"\n",
- (int64_t)t, (int64_t)tv.tv_sec);
+ (int64_t)t1, (int64_t)tv.tv_sec);
- if (t != tv.tv_sec)
+ if (t1 > tv.tv_sec || t2 < tv.tv_sec)
atf_tc_fail("time(3) and gettimeofday(2) differ");
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_ttyname.c b/contrib/netbsd-tests/lib/libc/gen/t_ttyname.c
index 1c813fb..61121b8 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_ttyname.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_ttyname.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ttyname.c,v 1.3 2011/05/01 18:14:01 jruoho Exp $ */
+/* $NetBSD: t_ttyname.c,v 1.4 2017/01/10 15:33:40 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_ttyname.c,v 1.3 2011/05/01 18:14:01 jruoho Exp $");
+__RCSID("$NetBSD: t_ttyname.c,v 1.4 2017/01/10 15:33:40 christos Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -78,9 +78,7 @@ ATF_TC_BODY(ttyname_err, tc)
ATF_REQUIRE(ttyname(fd) == NULL);
ATF_REQUIRE(errno == ENOTTY);
-#ifdef __FreeBSD__
(void)close(fd);
-#endif
}
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_vis.c b/contrib/netbsd-tests/lib/libc/gen/t_vis.c
index 525bafa..adb0930 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_vis.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_vis.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_vis.c,v 1.7 2014/09/08 19:01:03 christos Exp $ */
+/* $NetBSD: t_vis.c,v 1.9 2017/01/10 15:16:57 christos Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -32,6 +32,7 @@
#include <string.h>
#include <stdlib.h>
+#include <locale.h>
#include <err.h>
#include <vis.h>
@@ -143,6 +144,37 @@ ATF_TC_BODY(strunvis_hex, tc)
}
}
+#ifdef VIS_NOLOCALE
+ATF_TC(strvis_locale);
+ATF_TC_HEAD(strvis_locale, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test strvis(3) with locale");
+}
+
+ATF_TC_BODY(strvis_locale, tc)
+{
+ char s[256], cd[sizeof(s) * 4 + 1], jd[sizeof(cd)], *ol;
+ int jr, cr;
+
+ for (size_t i = 0; i < sizeof(s) - 1; i++)
+ s[i] = i + 1;
+ s[sizeof(s) - 1] = '\0';
+
+ ol = setlocale(LC_CTYPE, "ja_JP.UTF-8");
+ ATF_REQUIRE(ol != NULL);
+ jr = strvisx(jd, s, sizeof(s), VIS_WHITE | VIS_NOLOCALE);
+ ATF_REQUIRE(jr != -1);
+ ol = strdup(ol);
+ ATF_REQUIRE(ol != NULL);
+ ATF_REQUIRE(setlocale(LC_CTYPE, "C") != NULL);
+ cr = strvisx(cd, s, sizeof(s), VIS_WHITE);
+ ATF_REQUIRE(jr == cr);
+ ATF_REQUIRE(memcmp(jd, cd, jr) == 0);
+ setlocale(LC_CTYPE, ol);
+ free(ol);
+}
+#endif /* VIS_NOLOCALE */
+
ATF_TP_ADD_TCS(tp)
{
@@ -150,6 +182,9 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, strvis_null);
ATF_TP_ADD_TC(tp, strvis_empty);
ATF_TP_ADD_TC(tp, strunvis_hex);
+#ifdef VIS_NOLOCALE
+ ATF_TP_ADD_TC(tp, strvis_locale);
+#endif /* VIS_NOLOCALE */
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/inet/t_inet_addr.c b/contrib/netbsd-tests/lib/libc/inet/t_inet_addr.c
new file mode 100644
index 0000000..d7547fd
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/inet/t_inet_addr.c
@@ -0,0 +1,109 @@
+/* $NetBSD: t_inet_addr.c,v 1.1 2015/04/09 16:47:56 ginsbach Exp $ */
+
+/*
+ * Copyright (c) 2011 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__COPYRIGHT("@(#) Copyright (c) 2011\
+ The NetBSD Foundation, inc. All rights reserved.");
+__RCSID("$NetBSD: t_inet_addr.c,v 1.1 2015/04/09 16:47:56 ginsbach Exp $");
+
+#include <arpa/inet.h>
+
+#include <atf-c.h>
+#include <stdio.h>
+#include <string.h>
+
+ATF_TC(inet_addr_basic);
+ATF_TC_HEAD(inet_addr_basic, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks inet_addr(3)");
+}
+
+ATF_TC_BODY(inet_addr_basic, tc)
+{
+ static const char *addrs[] = {
+ "127.0.0.1", "99.99.99.99", "0.0.0.0", "255.255.255.255" };
+
+ struct in_addr ia;
+ const char *ian;
+ in_addr_t addr;
+ size_t i;
+
+ for (i = 0; i < __arraycount(addrs); i++) {
+
+ (void)fprintf(stderr, "checking %s\n", addrs[i]);;
+
+ addr = inet_addr(addrs[i]);
+ ia.s_addr = addr;
+ ian = inet_ntoa(ia);
+
+ ATF_REQUIRE(ian != NULL);
+ ATF_CHECK(strcmp(ian, addrs[i]) == 0);
+ }
+}
+
+ATF_TC(inet_addr_err);
+ATF_TC_HEAD(inet_addr_err, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Invalid addresses with inet_addr(3)");
+}
+
+ATF_TC_BODY(inet_addr_err, tc)
+{
+ static const char *addrs[] = {
+ ". . . .", "1.2.3.", "0.0.0.256", "255.255.255.256",
+ "................................................",
+ "a.b.c.d", "0x0.0x1.0x2.0x3", "-1.-1.-1.-1", "", " "};
+
+ struct in_addr ia;
+ const char *ian;
+ in_addr_t addr;
+ size_t i;
+
+ for (i = 0; i < __arraycount(addrs); i++) {
+
+ (void)fprintf(stderr, "checking %s\n", addrs[i]);;
+
+ addr = inet_addr(addrs[i]);
+ ia.s_addr = addr;
+ ian = inet_ntoa(ia);
+
+ ATF_REQUIRE(ian != NULL);
+ ATF_CHECK(strcmp(ian, addrs[i]) != 0);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, inet_addr_basic);
+ ATF_TP_ADD_TC(tp, inet_addr_err);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/inet/t_inet_network.c b/contrib/netbsd-tests/lib/libc/inet/t_inet_network.c
index a6a6c62..c44fe11 100644
--- a/contrib/netbsd-tests/lib/libc/inet/t_inet_network.c
+++ b/contrib/netbsd-tests/lib/libc/inet/t_inet_network.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_inet_network.c,v 1.3 2011/07/15 11:27:23 jruoho Exp $ */
+/* $NetBSD: t_inet_network.c,v 1.4 2015/04/09 16:47:56 ginsbach Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -32,79 +32,17 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_inet_network.c,v 1.3 2011/07/15 11:27:23 jruoho Exp $");
+__RCSID("$NetBSD: t_inet_network.c,v 1.4 2015/04/09 16:47:56 ginsbach Exp $");
#include <arpa/inet.h>
#include <atf-c.h>
-#include <stdio.h>
-#include <string.h>
#define H_REQUIRE(input, expected) \
ATF_REQUIRE_EQ_MSG(inet_network(input), (in_addr_t) expected, \
"inet_network(%s) returned: 0x%08X, expected: %s", #input, \
inet_network(input), #expected)
-ATF_TC(inet_addr_basic);
-ATF_TC_HEAD(inet_addr_basic, tc)
-{
- atf_tc_set_md_var(tc, "descr", "Checks inet_addr(3)");
-}
-
-ATF_TC_BODY(inet_addr_basic, tc)
-{
- static const char *addrs[] = {
- "127.0.0.1", "99.99.99.99", "0.0.0.0", "255.255.255.255" };
-
- struct in_addr ia;
- const char *ian;
- in_addr_t addr;
- size_t i;
-
- for (i = 0; i < __arraycount(addrs); i++) {
-
- (void)fprintf(stderr, "checking %s\n", addrs[i]);;
-
- addr = inet_addr(addrs[i]);
- ia.s_addr = addr;
- ian = inet_ntoa(ia);
-
- ATF_REQUIRE(ian != NULL);
- ATF_CHECK(strcmp(ian, addrs[i]) == 0);
- }
-}
-
-ATF_TC(inet_addr_err);
-ATF_TC_HEAD(inet_addr_err, tc)
-{
- atf_tc_set_md_var(tc, "descr", "Invalid addresses with inet_addr(3)");
-}
-
-ATF_TC_BODY(inet_addr_err, tc)
-{
- static const char *addrs[] = {
- ". . . .", "1.2.3.", "0.0.0.256", "255.255.255.256",
- "................................................",
- "a.b.c.d", "0x0.0x1.0x2.0x3", "-1.-1.-1.-1", "", " "};
-
- struct in_addr ia;
- const char *ian;
- in_addr_t addr;
- size_t i;
-
- for (i = 0; i < __arraycount(addrs); i++) {
-
- (void)fprintf(stderr, "checking %s\n", addrs[i]);;
-
- addr = inet_addr(addrs[i]);
- ia.s_addr = addr;
- ian = inet_ntoa(ia);
-
- ATF_REQUIRE(ian != NULL);
- ATF_CHECK(strcmp(ian, addrs[i]) != 0);
- }
-}
-
ATF_TC(inet_network_basic);
ATF_TC_HEAD(inet_network_basic, tc)
{
@@ -165,8 +103,6 @@ ATF_TC_BODY(inet_network_err, tc)
ATF_TP_ADD_TCS(tp)
{
- ATF_TP_ADD_TC(tp, inet_addr_basic);
- ATF_TP_ADD_TC(tp, inet_addr_err);
ATF_TP_ADD_TC(tp, inet_network_basic);
ATF_TP_ADD_TC(tp, inet_network_err);
diff --git a/contrib/netbsd-tests/lib/libc/net/t_servent.sh b/contrib/netbsd-tests/lib/libc/net/t_servent.sh
index 0979eb3..4c23f00 100755
--- a/contrib/netbsd-tests/lib/libc/net/t_servent.sh
+++ b/contrib/netbsd-tests/lib/libc/net/t_servent.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_servent.sh,v 1.1 2011/01/12 17:32:27 pgoyette Exp $
+# $NetBSD: t_servent.sh,v 1.2 2016/03/08 08:34:17 joerg Exp $
#
# Copyright (c) 2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -29,6 +29,8 @@ atf_test_case servent
servent_head()
{
atf_set "descr" "Checks {get,set,end}servent(3)"
+ # libc doesn't include aliases
+ atf_set "require.files" "/var/db/services.cdb"
}
servent_body()
{
diff --git a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
index a9715cf..9c14a22 100644
--- a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
+++ b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
@@ -1,18 +1,19 @@
-/* $NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $ */
+/* $NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $ */
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $");
+__RCSID("$NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $");
#include <sys/types.h>
#include <sys/socket.h>
#include <rpc/rpc.h>
#include <stdlib.h>
+#include <string.h>
#include <err.h>
#include <netdb.h>
#include <stdio.h>
+#include <errno.h>
#include <unistd.h>
-
#ifndef TEST
#include <atf-c.h>
@@ -20,17 +21,36 @@ __RCSID("$NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $");
#define SKIPX(ev, msg, ...) do { \
atf_tc_skip(msg, __VA_ARGS__); \
- return; \
+ return ev; \
+} while(/*CONSTCOND*/0)
+
+#ifdef __FreeBSD__
+#define SKIPXI(ev, msg, ...) do { \
+ atf_tc_skip(msg, __VA_ARGS__); \
+ return ev; \
} while(/*CONSTCOND*/0)
+#endif
#else
-#define ERRX(ev, msg, ...) errx(ev, msg, __VA_ARGS__)
-#define SKIPX(ev, msg, ...) errx(ev, msg, __VA_ARGS__)
+#define ERRX(ev, msg, ...) errx(EXIT_FAILURE, msg, __VA_ARGS__)
+#define SKIPX(ev, msg, ...) errx(EXIT_FAILURE, msg, __VA_ARGS__)
+#endif
+
+#ifdef DEBUG
+#define DPRINTF(...) printf(__VA_ARGS__)
+#else
+#define DPRINTF(...)
#endif
#define RPCBPROC_NULL 0
+/* XXX (ngie): for clarity on what needs to be reverted later. */
+#define __FreeBSD_bug_216954__
+#ifdef __FreeBSD_bug_216954__
+#include <signal.h>
+#endif
+
static int
reply(caddr_t replyp, struct netbuf * raddrp, struct netconfig * nconf)
{
@@ -51,7 +71,7 @@ reply(caddr_t replyp, struct netbuf * raddrp, struct netconfig * nconf)
#define __rpc_control rpc_control
#endif
-extern bool __rpc_control(int, void *);
+extern bool_t __rpc_control(int, void *);
static void
onehost(const char *host, const char *transp)
@@ -69,7 +89,7 @@ onehost(const char *host, const char *transp)
__rpc_control(CLCR_SET_RPCB_TIMEOUT, &tv);
if ((clnt = clnt_create(host, RPCBPROG, RPCBVERS, transp)) == NULL)
- SKIPX(EXIT_FAILURE, "clnt_create (%s)", clnt_spcreateerror(""));
+ SKIPX(, "clnt_create (%s)", clnt_spcreateerror(""));
tv.tv_sec = 1;
tv.tv_usec = 0;
@@ -81,14 +101,147 @@ onehost(const char *host, const char *transp)
if (clnt_call(clnt, RPCBPROC_NULL, xdr_void, NULL, xdr_void, NULL, tv)
!= RPC_SUCCESS)
#endif
- ERRX(EXIT_FAILURE, "clnt_call (%s)", clnt_sperror(clnt, ""));
+ ERRX(, "clnt_call (%s)", clnt_sperror(clnt, ""));
clnt_control(clnt, CLGET_SVC_ADDR, (char *) &addr);
reply(NULL, &addr, NULL);
}
+#define PROGNUM 0x81
+#define VERSNUM 0x01
+#define PLUSONE 1
+#define DESTROY 2
+
+static struct timeval tout = {1, 0};
+
+static void
+server(struct svc_req *rqstp, SVCXPRT *transp)
+{
+ int num;
+
+ DPRINTF("Starting server\n");
+
+ switch (rqstp->rq_proc) {
+ case NULLPROC:
+ if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
+ ERRX(, "svc_sendreply failed %d", 0);
+ return;
+ case PLUSONE:
+ break;
+ case DESTROY:
+ if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
+ ERRX(, "svc_sendreply failed %d", 0);
+ svc_destroy(transp);
+ exit(0);
+ default:
+ svcerr_noproc(transp);
+ return;
+ }
+
+ if (!svc_getargs(transp, (xdrproc_t)xdr_int, (void *)&num)) {
+ svcerr_decode(transp);
+ return;
+ }
+ DPRINTF("About to increment\n");
+ num++;
+ if (!svc_sendreply(transp, (xdrproc_t)xdr_int, (void *)&num))
+ ERRX(, "svc_sendreply failed %d", 1);
+ DPRINTF("Leaving server procedure.\n");
+}
+
+static int
+rawtest(const char *arg)
+{
+ CLIENT *clnt;
+ SVCXPRT *svc;
+ int num, resp;
+ enum clnt_stat rv;
+
+ if (arg)
+ num = atoi(arg);
+ else
+ num = 0;
+
+ svc = svc_raw_create();
+ if (svc == NULL)
+ ERRX(EXIT_FAILURE, "Cannot create server %d", num);
+ if (!svc_reg(svc, PROGNUM, VERSNUM, server, NULL))
+ ERRX(EXIT_FAILURE, "Cannot register server %d", num);
+
+ clnt = clnt_raw_create(PROGNUM, VERSNUM);
+ if (clnt == NULL)
+ ERRX(EXIT_FAILURE, "%s",
+ clnt_spcreateerror("clnt_raw_create"));
+ rv = clnt_call(clnt, PLUSONE, (xdrproc_t)xdr_int, (void *)&num,
+ (xdrproc_t)xdr_int, (void *)&resp, tout);
+ if (rv != RPC_SUCCESS)
+ ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
+ DPRINTF("Got %d\n", resp);
+ clnt_destroy(clnt);
+ svc_destroy(svc);
+ if (++num != resp)
+ ERRX(EXIT_FAILURE, "expected %d got %d", num, resp);
+
+ return EXIT_SUCCESS;
+}
+
+static int
+regtest(const char *hostname, const char *transp, const char *arg, int p)
+{
+ CLIENT *clnt;
+ int num, resp;
+ enum clnt_stat rv;
+ pid_t pid;
+
+ if (arg)
+ num = atoi(arg);
+ else
+ num = 0;
+
+#ifdef __NetBSD__
+ svc_fdset_init(p ? SVC_FDSET_POLL : 0);
+#endif
+ if (!svc_create(server, PROGNUM, VERSNUM, transp))
+ {
+ SKIPXI(EXIT_FAILURE, "Cannot create server %d", num);
+ }
+
+ switch ((pid = fork())) {
+ case 0:
+ DPRINTF("Calling svc_run\n");
+ svc_run();
+ ERRX(EXIT_FAILURE, "svc_run returned %d!", num);
+ case -1:
+ ERRX(EXIT_FAILURE, "Fork failed (%s)", strerror(errno));
+ default:
+ sleep(1);
+ break;
+ }
+
+ DPRINTF("Initializing client\n");
+ clnt = clnt_create(hostname, PROGNUM, VERSNUM, transp);
+ if (clnt == NULL)
+ ERRX(EXIT_FAILURE, "%s",
+ clnt_spcreateerror("clnt_raw_create"));
+ rv = clnt_call(clnt, PLUSONE, (xdrproc_t)xdr_int, (void *)&num,
+ (xdrproc_t)xdr_int, (void *)&resp, tout);
+ if (rv != RPC_SUCCESS)
+ ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
+ DPRINTF("Got %d\n", resp);
+ if (++num != resp)
+ ERRX(EXIT_FAILURE, "expected %d got %d", num, resp);
+ rv = clnt_call(clnt, DESTROY, (xdrproc_t)xdr_void, NULL,
+ (xdrproc_t)xdr_void, NULL, tout);
+ if (rv != RPC_SUCCESS)
+ ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
+ clnt_destroy(clnt);
+
+ return EXIT_SUCCESS;
+}
+
+
#ifdef TEST
static void
-allhosts(void)
+allhosts(const char *transp)
{
enum clnt_stat clnt_stat;
@@ -103,28 +256,49 @@ int
main(int argc, char *argv[])
{
int ch;
+ int s, p;
const char *transp = "udp";
-
- while ((ch = getopt(argc, argv, "ut")) != -1)
+ p = s = 0;
+ while ((ch = getopt(argc, argv, "prstu")) != -1)
switch (ch) {
+ case 'p':
+ p = 1;
+ break;
+ case 's':
+ s = 1;
+ break;
case 't':
transp = "tcp";
break;
case 'u':
transp = "udp";
break;
+ case 'r':
+ transp = NULL;
+ break;
default:
- fprintf(stderr, "Usage: %s -[t|u] [<hostname>...]\n",
+ fprintf(stderr,
+ "Usage: %s -[r|s|t|u] [<hostname>...]\n",
getprogname());
return EXIT_FAILURE;
}
- if (argc == optind)
- allhosts();
- else
- for (; optind < argc; optind++)
- onehost(argv[optind], transp);
+ if (argc == optind) {
+ if (transp)
+ allhosts(transp);
+ else
+ rawtest(NULL);
+ } else {
+ for (; optind < argc; optind++) {
+ if (transp)
+ s == 0 ?
+ onehost(argv[optind], transp) :
+ regtest(argv[optind], transp, "1", p);
+ else
+ rawtest(argv[optind]);
+ }
+ }
return EXIT_SUCCESS;
}
@@ -156,10 +330,96 @@ ATF_TC_BODY(get_svc_addr_udp, tc)
}
+ATF_TC(raw);
+ATF_TC_HEAD(raw, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc raw");
+}
+
+ATF_TC_BODY(raw, tc)
+{
+#ifdef __FreeBSD__
+#ifdef __FreeBSD_bug_216954__
+ atf_tc_expect_signal(SIGSEGV,
+ "fails with SIGSEGV only on ^/stable/10 -- bug # 216954");
+#else
+ atf_tc_expect_fail("fails with: clnt_call: "
+ "RPC: Can't decode result -- PR # 211804");
+#endif
+#endif
+ rawtest(NULL);
+
+}
+
+ATF_TC(tcp);
+ATF_TC_HEAD(tcp, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc tcp (select)");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
+}
+
+ATF_TC_BODY(tcp, tc)
+{
+ regtest("localhost", "tcp", "1", 0);
+
+}
+
+ATF_TC(udp);
+ATF_TC_HEAD(udp, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc udp (select)");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
+}
+
+ATF_TC_BODY(udp, tc)
+{
+ regtest("localhost", "udp", "1", 0);
+
+}
+
+ATF_TC(tcp_poll);
+ATF_TC_HEAD(tcp_poll, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc tcp (poll)");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
+}
+
+ATF_TC_BODY(tcp_poll, tc)
+{
+ regtest("localhost", "tcp", "1", 1);
+
+}
+
+ATF_TC(udp_poll);
+ATF_TC_HEAD(udp_poll, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc udp (poll)");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
+}
+
+ATF_TC_BODY(udp_poll, tc)
+{
+ regtest("localhost", "udp", "1", 1);
+
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, get_svc_addr_udp);
ATF_TP_ADD_TC(tp, get_svc_addr_tcp);
+ ATF_TP_ADD_TC(tp, raw);
+ ATF_TP_ADD_TC(tp, tcp);
+ ATF_TP_ADD_TC(tp, udp);
+ ATF_TP_ADD_TC(tp, tcp_poll);
+ ATF_TP_ADD_TC(tp, udp_poll);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c b/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
index 4d2a93b..34fd5cc 100644
--- a/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
+++ b/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
@@ -87,7 +87,7 @@ __RCSID("$NetBSD: t_setjmp.c,v 1.1 2010/12/27 19:35:31 pgoyette Exp $");
static int expectsignal;
static void
-aborthandler(int signo)
+aborthandler(int signo __unused)
{
ATF_REQUIRE_MSG(expectsignal, "kill(SIGABRT) succeeded");
atf_tc_pass();
diff --git a/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c b/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
index 4437c92..2014470 100644
--- a/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
+++ b/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
@@ -91,7 +91,7 @@ static pthread_t myself = NULL;
static int expectsignal;
static void
-aborthandler(int signo)
+aborthandler(int signo __unused)
{
ATF_REQUIRE(myself == pthread_self());
ATF_REQUIRE_MSG(expectsignal, "kill(SIGABRT) succeeded");
diff --git a/contrib/netbsd-tests/lib/libc/ssp/t_ssp.sh b/contrib/netbsd-tests/lib/libc/ssp/t_ssp.sh
index 2986ccf..e535e3e 100755
--- a/contrib/netbsd-tests/lib/libc/ssp/t_ssp.sh
+++ b/contrib/netbsd-tests/lib/libc/ssp/t_ssp.sh
@@ -361,6 +361,9 @@ raw_head()
raw_body()
{
prog="$(atf_get_srcdir)/h_raw"
+ # Begin FreeBSD
+ [ -x $prog ] || atf_skip "$prog is missing; skipping testcase"
+ # End FreeBSD
h_pass "$prog 9"
# Begin FreeBSD
diff --git a/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c b/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c
new file mode 100644
index 0000000..950a258
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c
@@ -0,0 +1,96 @@
+/*
+ * Based on the OpenBSD test
+ * Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_open_memstream.c,v 1.2 2014/10/19 11:17:43 justin Exp $");
+
+#include <atf-c.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+ATF_TC(test_open_memstream);
+ATF_TC_HEAD(test_open_memstream, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test open_memstream functionality");
+}
+
+#define OFFSET 16384
+
+const char start[] = "start";
+const char hello[] = "hello";
+
+ATF_TC_BODY(test_open_memstream, tc)
+{
+ FILE *fp;
+ char *buf = (char *)0xff;
+ size_t size = 0;
+ off_t off;
+ int i;
+
+ fp = open_memstream(&buf, &size);
+ ATF_REQUIRE(fp != NULL);
+
+ off = ftello(fp);
+ ATF_CHECK(off == 0);
+
+ ATF_CHECK(fflush(fp) == 0);
+ ATF_CHECK(size == 0);
+ ATF_CHECK(buf != (char *)0xff);
+ ATF_CHECK(fseek(fp, -6, SEEK_SET) == -1);
+ ATF_CHECK(fseek(fp, OFFSET, SEEK_SET) == 0);
+ ATF_CHECK(fprintf(fp, hello) != EOF);
+ ATF_CHECK(fflush(fp) != EOF);
+ ATF_CHECK(size == OFFSET + sizeof(hello)-1);
+ ATF_CHECK(fseek(fp, 0, SEEK_SET) == 0);
+ ATF_CHECK(fprintf(fp, start) != EOF);
+ ATF_CHECK(fflush(fp) != EOF);
+ ATF_CHECK(size == sizeof(start)-1);
+
+ /* Needed for sparse files */
+ ATF_CHECK(strncmp(buf, start, sizeof(start)-1) == 0);
+ for (i = sizeof(start)-1; i < OFFSET; i++)
+ ATF_CHECK(buf[i] == '\0');
+
+ ATF_CHECK(memcmp(buf + OFFSET, hello, sizeof(hello)-1) == 0);
+
+ /* verify that simply seeking past the end doesn't increase the size */
+ ATF_CHECK(fseek(fp, 100, SEEK_END) == 0);
+ ATF_CHECK(fflush(fp) != EOF);
+ ATF_CHECK(size == OFFSET + sizeof(hello)-1);
+ ATF_CHECK(fseek(fp, 8, SEEK_SET) == 0);
+ ATF_CHECK(ftell(fp) == 8);
+
+ /* Try to seek backward */
+ ATF_CHECK(fseek(fp, -1, SEEK_CUR) == 0);
+ ATF_CHECK(ftell(fp) == 7);
+ ATF_CHECK(fseek(fp, 5, SEEK_CUR) == 0);
+ ATF_CHECK(fclose(fp) != EOF);
+ ATF_CHECK(size == 12);
+
+ free(buf);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, test_open_memstream);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c b/contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c
index 5a8fa28..7e29778 100644
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_getenv.c,v 1.2 2011/07/15 13:54:31 jruoho Exp $ */
+/* $NetBSD: t_getenv.c,v 1.3 2015/02/27 08:55:35 martin Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_getenv.c,v 1.2 2011/07/15 13:54:31 jruoho Exp $");
+__RCSID("$NetBSD: t_getenv.c,v 1.3 2015/02/27 08:55:35 martin Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -123,7 +123,7 @@ ATF_TC_HEAD(setenv_basic, tc)
{
atf_tc_set_md_var(tc, "descr",
"Test setenv(3), getenv(3), unsetenv(3)");
- atf_tc_set_md_var(tc, "timeout", "300");
+ atf_tc_set_md_var(tc, "timeout", "600");
}
ATF_TC_BODY(setenv_basic, tc)
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c b/contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c
index 47afb84..8db7880 100644
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_posix_memalign.c,v 1.2 2011/07/07 11:12:18 jruoho Exp $ */
+/* $NetBSD: t_posix_memalign.c,v 1.4 2015/11/07 17:35:31 nros Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -32,11 +32,12 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_posix_memalign.c,v 1.2 2011/07/07 11:12:18 jruoho Exp $");
+__RCSID("$NetBSD: t_posix_memalign.c,v 1.4 2015/11/07 17:35:31 nros Exp $");
#include <atf-c.h>
#include <errno.h>
+#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -49,10 +50,10 @@ ATF_TC_HEAD(posix_memalign_basic, tc)
}
ATF_TC_BODY(posix_memalign_basic, tc)
{
- size_t size[] = {
+ static const size_t size[] = {
1, 2, 3, 4, 10, 100, 16384, 32768, 65536
};
- size_t align[] = {
+ static const size_t align[] = {
512, 1024, 16, 32, 64, 4, 2048, 16, 2
};
@@ -63,7 +64,7 @@ ATF_TC_BODY(posix_memalign_basic, tc)
int ret;
p = (void*)0x1;
- (void)printf("Checking posix_memalign(&p, %zd, %zd)...\n",
+ (void)printf("Checking posix_memalign(&p, %zu, %zu)...\n",
align[i], size[i]);
ret = posix_memalign(&p, align[i], size[i]);
@@ -80,9 +81,71 @@ ATF_TC_BODY(posix_memalign_basic, tc)
}
}
+
+ATF_TC(aligned_alloc_basic);
+ATF_TC_HEAD(aligned_alloc_basic, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks aligned_alloc(3)");
+}
+ATF_TC_BODY(aligned_alloc_basic, tc)
+{
+ static const size_t size[] = {
+ 1, 2, 3, 4, 10, 100, 16384, 32768, 65536, 10000, 0
+ };
+ static const size_t align[] = {
+ 512, 1024, 16, 32, 64, 4, 2048, 16, 2, 2048, 0
+ };
+
+ size_t i;
+ void *p;
+
+ for (i = 0; i < __arraycount(size); i++) {
+ (void)printf("Checking aligned_alloc(%zu, %zu)...\n",
+ align[i], size[i]);
+ p = aligned_alloc(align[i], size[i]);
+ if (p == NULL) {
+ if (align[i] == 0 || ((align[i] - 1) & align[i]) != 0 ||
+ size[i] % align[i] != 0) {
+ ATF_REQUIRE_EQ_MSG(errno, EINVAL,
+ "aligned_alloc: %s", strerror(errno));
+ }
+ else {
+ ATF_REQUIRE_EQ_MSG(errno, ENOMEM,
+ "aligned_alloc: %s", strerror(errno));
+ }
+ }
+ else {
+ ATF_REQUIRE_EQ_MSG(align[i] == 0, false,
+ "aligned_alloc: success when alignment was not "
+ "a power of 2");
+ ATF_REQUIRE_EQ_MSG((align[i] - 1) & align[i], 0,
+ "aligned_alloc: success when alignment was not "
+ "a power of 2");
+#ifdef __NetBSD__
+ /*
+ * NetBSD-specific invariant
+ *
+ * From aligned_alloc(3) on FreeBSD:
+ *
+ * Behavior is undefined if size is not an integral
+ * multiple of alignment.
+ */
+ ATF_REQUIRE_EQ_MSG(size[i] % align[i], 0,
+ "aligned_alloc: success when size was not an "
+ "integer multiple of alignment");
+#endif
+ ATF_REQUIRE_EQ_MSG(((intptr_t)p) & (align[i] - 1), 0,
+ "p = %p", p);
+ free(p);
+ }
+ }
+}
+
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, posix_memalign_basic);
-
+ ATF_TP_ADD_TC(tp, aligned_alloc_basic);
+
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c b/contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c
index 8f0f899..06f2de0 100644
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strtod.c,v 1.32 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_strtod.c,v 1.34 2015/12/22 14:19:25 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
/* Public domain, Otto Moerbeek <otto@drijf.net>, 2006. */
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_strtod.c,v 1.32 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_strtod.c,v 1.34 2015/12/22 14:19:25 christos Exp $");
#include <errno.h>
#include <math.h>
@@ -42,9 +42,7 @@ __RCSID("$NetBSD: t_strtod.c,v 1.32 2014/11/04 00:20:19 justin Exp $");
#include <atf-c.h>
-#if defined(__i386__) || defined(__amd64__) || defined(__sparc__)
#include <fenv.h>
-#endif
#if !defined(__vax__)
static const char * const inf_strings[] =
@@ -53,10 +51,6 @@ static const char * const inf_strings[] =
const char *nan_string = "NaN(x)y";
#endif
-#ifdef __FreeBSD__
-#define __HAVE_LONG_DOUBLE
-#endif
-
ATF_TC(strtod_basic);
ATF_TC_HEAD(strtod_basic, tc)
{
@@ -246,7 +240,7 @@ ATF_TC_HEAD(strtod_round, tc)
ATF_TC_BODY(strtod_round, tc)
{
-#if defined(__i386__) || defined(__amd64__) || defined(__sparc__)
+#ifdef __HAVE_FENV
/*
* Test that strtod(3) honors the current rounding mode.
@@ -270,7 +264,7 @@ ATF_TC_BODY(strtod_round, tc)
atf_tc_fail("strtod(3) did not honor fesetround(3)");
}
#else
- atf_tc_skip("Requires one of i386, amd64 or sparc");
+ atf_tc_skip("Requires <fenv.h> support");
#endif
}
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_strtoi.c b/contrib/netbsd-tests/lib/libc/stdlib/t_strtoi.c
new file mode 100644
index 0000000..bf958a1
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_strtoi.c
@@ -0,0 +1,304 @@
+/* $NetBSD: t_strtoi.c,v 1.1 2015/05/01 14:17:56 christos Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jukka Ruohonen.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Created by Kamil Rytarowski, vesed on ID:
+ * NetBSD: t_strtol.c,v 1.5 2011/06/14 02:45:58 jruoho Exp
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_strtoi.c,v 1.1 2015/05/01 14:17:56 christos Exp $");
+
+#include <atf-c.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+struct test {
+ const char *str;
+ intmax_t res;
+ int base;
+ const char *end;
+ intmax_t lo;
+ intmax_t hi;
+ int rstatus;
+};
+
+static void check(struct test *, intmax_t, char *, int);
+
+static void
+check(struct test *t, intmax_t rv, char *end, int rstatus)
+{
+
+ if (rv != t->res)
+ atf_tc_fail_nonfatal("strtoi(%s, &end, %d, %jd, %jd, &rstatus)"
+ " failed (rv = %jd)", t->str, t->base, t->lo, t->hi, rv);
+
+ if (rstatus != t->rstatus)
+ atf_tc_fail_nonfatal("strtoi(%s, &end, %d, %jd, %jd, &rstatus)"
+ " failed (rstatus: %d ('%s'))",
+ t->str, t->base, t->lo, t->hi, rstatus, strerror(rstatus));
+
+ if ((t->end != NULL && strcmp(t->end, end) != 0) ||
+ (t->end == NULL && *end != '\0'))
+ atf_tc_fail_nonfatal("invalid end pointer ('%s') from "
+ "strtoi(%s, &end, %d, %jd, %jd, &rstatus)",
+ end, t->str, t->base, t->lo, t->hi);
+}
+
+ATF_TC(strtoi_base);
+ATF_TC_HEAD(strtoi_base, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test strtoi(3) with different bases");
+}
+
+ATF_TC_BODY(strtoi_base, tc)
+{
+ struct test t[] = {
+ { "123456789", 123456789, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "111010110111100110100010101",123456789, 2, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "22121022020212200", 123456789, 3, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "13112330310111", 123456789, 4, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "223101104124", 123456789, 5, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "20130035113", 123456789, 6, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "3026236221", 123456789, 7, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "726746425", 123456789, 8, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "277266780", 123456789, 9, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "123456789", 123456789, 10, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "63762A05", 123456789, 11, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "35418A99", 123456789, 12, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "1C767471", 123456789, 13, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "12579781", 123456789, 14, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "AC89BC9", 123456789, 15, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "75BCD15", 123456789, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "1234567", 342391, 8, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "01234567", 342391, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "0123456789", 123456789, 10, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "0x75bcd15", 123456789, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ };
+
+ intmax_t rv;
+ char *end;
+ int e;
+ size_t i;
+
+ for (i = 0; i < __arraycount(t); i++) {
+
+ errno = 0;
+ rv = strtoi(t[i].str, &end, t[i].base, t[i].lo, t[i].hi, &e);
+
+ if (errno != 0)
+ atf_tc_fail("strtoi(3) changed errno to %d ('%s')",
+ e, strerror(e));
+
+ check(&t[i], rv, end, e);
+ }
+}
+
+ATF_TC(strtoi_case);
+ATF_TC_HEAD(strtoi_case, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Case insensitivity with strtoi(3)");
+}
+
+ATF_TC_BODY(strtoi_case, tc)
+{
+ struct test t[] = {
+ { "abcd", 0xabcd, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { " dcba", 0xdcba, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "abcd dcba", 0xabcd, 16, " dcba",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "abc0x123", 0xabc0, 16, "x123",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "abcd\0x123", 0xabcd, 16, "\0x123",
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "ABCD", 0xabcd, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "aBcD", 0xabcd, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "0xABCD", 0xabcd, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "0xABCDX", 0xabcd, 16, "X",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP},
+ };
+
+ intmax_t rv;
+ char *end;
+ int e;
+ size_t i;
+
+ for (i = 0; i < __arraycount(t); i++) {
+
+ errno = 0;
+ rv = strtoi(t[i].str, &end, t[i].base, t[i].lo, t[i].hi, &e);
+
+ if (errno != 0)
+ atf_tc_fail("strtoi(3) changed errno to %d ('%s')",
+ e, strerror(e));
+
+ check(&t[i], rv, end, e);
+ }
+}
+
+ATF_TC(strtoi_range);
+ATF_TC_HEAD(strtoi_range, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test ERANGE from strtoi(3)");
+}
+
+ATF_TC_BODY(strtoi_range, tc)
+{
+ struct test t[] = {
+#if INTMAX_MAX == 0x7fffffffffffffff
+ { "1000000000000000000000", INTMAX_MAX, 8, NULL,
+ INTMAX_MIN, INTMAX_MAX, ERANGE },
+ { "9223372036854775808", INTMAX_MAX, 10, NULL,
+ INTMAX_MIN, INTMAX_MAX, ERANGE },
+ { "8000000000000000", INTMAX_MAX, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, ERANGE },
+#else
+#error extend this test to your platform!
+#endif
+ { "10", 1, 10, NULL,
+ -1, 1, ERANGE },
+ { "10", 11, 10, NULL,
+ 11, 20, ERANGE },
+ };
+
+ intmax_t rv;
+ char *end;
+ int e;
+ size_t i;
+
+ for (i = 0; i < __arraycount(t); i++) {
+
+ errno = 0;
+ rv = strtoi(t[i].str, &end, t[i].base, t[i].lo, t[i].hi, &e);
+
+ if (errno != 0)
+ atf_tc_fail("strtoi(3) changed errno to %d ('%s')",
+ e, strerror(e));
+
+ check(&t[i], rv, end, e);
+ }
+}
+
+ATF_TC(strtoi_signed);
+ATF_TC_HEAD(strtoi_signed, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "A basic test of strtoi(3)");
+}
+
+ATF_TC_BODY(strtoi_signed, tc)
+{
+ struct test t[] = {
+ { "1", 1, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { " 2", 2, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { " 3", 3, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { " -3", -3, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "--1", 0, 0, "--1",
+ INTMAX_MIN, INTMAX_MAX, ECANCELED },
+ { "+-2", 0, 0, "+-2",
+ INTMAX_MIN, INTMAX_MAX, ECANCELED },
+ { "++3", 0, 0, "++3",
+ INTMAX_MIN, INTMAX_MAX, ECANCELED },
+ { "+9", 9, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "+123", 123, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "-1 3", -1, 0, " 3",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "-1.3", -1, 0, ".3",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "- 3", 0, 0, "- 3",
+ INTMAX_MIN, INTMAX_MAX, ECANCELED },
+ { "+33.", 33, 0, ".",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "30x0", 30, 0, "x0",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ };
+
+ intmax_t rv;
+ char *end;
+ int e;
+ size_t i;
+
+ for (i = 0; i < __arraycount(t); i++) {
+
+ errno = 0;
+ rv = strtoi(t[i].str, &end, t[i].base, t[i].lo, t[i].hi, &e);
+
+ if (errno != 0)
+ atf_tc_fail("strtoi(3) changed errno to %d ('%s')",
+ e, strerror(e));
+
+ check(&t[i], rv, end, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, strtoi_base);
+ ATF_TP_ADD_TC(tp, strtoi_case);
+ ATF_TP_ADD_TC(tp, strtoi_range);
+ ATF_TP_ADD_TC(tp, strtoi_signed);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c b/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
index 5a0c6d0..54e1907 100644
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strtol.c,v 1.5 2011/06/14 02:45:58 jruoho Exp $ */
+/* $NetBSD: t_strtol.c,v 1.6 2016/06/01 01:12:02 pgoyette Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_strtol.c,v 1.5 2011/06/14 02:45:58 jruoho Exp $");
+__RCSID("$NetBSD: t_strtol.c,v 1.6 2016/06/01 01:12:02 pgoyette Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -59,7 +59,8 @@ check(struct test *t, long int li, long long int lli, char *end)
atf_tc_fail_nonfatal("strtoll(%s, NULL, %d) failed "
"(rv = %lld)", t->str, t->base, lli);
- if (t->end != NULL && strcmp(t->end, end) != 0)
+ if ((t->end != NULL && strcmp(t->end, end) != 0) ||
+ (t->end == NULL && *end != '\0'))
atf_tc_fail_nonfatal("invalid end pointer ('%s') from "
"strtol(%s, &end, %d)", end, t->str, t->base);
}
@@ -89,8 +90,8 @@ ATF_TC_BODY(strtol_base, tc)
{ "12579781", 123456789, 14, NULL },
{ "AC89BC9", 123456789, 15, NULL },
{ "75BCD15", 123456789, 16, NULL },
- { "123456789", 342391, 8, NULL },
- { "0123456789", 342391, 0, NULL },
+ { "1234567", 342391, 8, NULL },
+ { "01234567", 342391, 0, NULL },
{ "0123456789", 123456789, 10, NULL },
{ "0x75bcd15", 123456789, 0, NULL },
};
@@ -121,7 +122,7 @@ ATF_TC_BODY(strtol_case, tc)
{ "abcd", 0xabcd, 16, NULL },
{ " dcba", 0xdcba, 16, NULL },
{ "abcd dcba", 0xabcd, 16, " dcba" },
- { "abc0x123", 0xabc0, 16, NULL },
+ { "abc0x123", 0xabc0, 16, "x123" },
{ "abcd\0x123", 0xabcd, 16, "\0x123" },
{ "ABCD", 0xabcd, 16, NULL },
{ "aBcD", 0xabcd, 16, NULL },
diff --git a/contrib/netbsd-tests/lib/libc/string/t_memcpy.c b/contrib/netbsd-tests/lib/libc/string/t_memcpy.c
index 5bbd924..64cdb29 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_memcpy.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_memcpy.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_memcpy.c,v 1.5 2013/03/17 02:23:31 christos Exp $ */
+/* $NetBSD: t_memcpy.c,v 1.6 2017/01/11 18:05:54 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -108,12 +108,8 @@ ATF_TC_BODY(memcpy_basic, tc)
if (i != j)
runTest(start[i], start[j]);
MD5End(mc, result);
-#ifdef __NetBSD__
- ATF_REQUIRE_EQ(strcmp(result, goodResult), 0);
-#else
ATF_REQUIRE_EQ_MSG(strcmp(result, goodResult), 0, "%s != %s",
result, goodResult);
-#endif
}
ATF_TC(memccpy_simple);
diff --git a/contrib/netbsd-tests/lib/libc/string/t_memmem.c b/contrib/netbsd-tests/lib/libc/string/t_memmem.c
index 8734bc3..5bf60ce 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_memmem.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_memmem.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_memmem.c,v 1.2 2011/07/07 08:27:36 jruoho Exp $ */
+/* $NetBSD: t_memmem.c,v 1.3 2017/01/11 18:07:37 christos Exp $ */
/*-
* Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -51,6 +51,8 @@ char p6[] = "9";
int lp6 = 1;
char p7[] = "654";
int lp7 = 3;
+char p8[] = "89abc";
+int lp8 = 5;
char b0[] = "";
int lb0 = 0;
@@ -75,7 +77,7 @@ ATF_TC_HEAD(memmem_basic, tc)
ATF_TC_BODY(memmem_basic, tc)
{
-#if defined(__darwin__) || defined(__FreeBSD__)
+#if defined(__darwin__)
expect(memmem(b2, lb2, p0, lp0) == NULL);
expect(memmem(b0, lb0, p0, lp0) == NULL);
#else
@@ -94,6 +96,7 @@ ATF_TC_BODY(memmem_basic, tc)
expect(memmem(b2, lb2, p4, lp4) == NULL);
expect(memmem(b2, lb2, p7, lp7) == NULL);
+ expect(memmem(b2, lb2, p8, lp8) == NULL);
}
ATF_TP_ADD_TCS(tp)
diff --git a/contrib/netbsd-tests/lib/libc/string/t_memset.c b/contrib/netbsd-tests/lib/libc/string/t_memset.c
index c1fb385..5a2be28 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_memset.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_memset.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_memset.c,v 1.3 2013/03/17 02:23:31 christos Exp $ */
+/* $NetBSD: t_memset.c,v 1.4 2015/09/11 09:25:52 martin Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_memset.c,v 1.3 2013/03/17 02:23:31 christos Exp $");
+__RCSID("$NetBSD: t_memset.c,v 1.4 2015/09/11 09:25:52 martin Exp $");
#include <sys/stat.h>
@@ -42,6 +42,8 @@ static long page = 0;
static void fill(char *, size_t, char);
static bool check(char *, size_t, char);
+int zero; /* always zero, but the compiler does not know */
+
ATF_TC(memset_array);
ATF_TC_HEAD(memset_array, tc)
{
@@ -133,6 +135,50 @@ ATF_TC_BODY(memset_nonzero, tc)
free(buf);
}
+ATF_TC(memset_zero_size);
+
+ATF_TC_HEAD(memset_zero_size, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test memset(3) with zero size");
+}
+
+ATF_TC_BODY(memset_zero_size, tc)
+{
+ char buf[1024];
+
+ (void)memset(buf, 'x', sizeof(buf));
+
+ if (check(buf, sizeof(buf), 'x') != true)
+ atf_tc_fail("memset(3) did not fill a static buffer");
+
+ (void)memset(buf+sizeof(buf)/2, 0, zero);
+
+ if (check(buf, sizeof(buf), 'x') != true)
+ atf_tc_fail("memset(3) with 0 size did change the buffer");
+}
+
+ATF_TC(bzero_zero_size);
+
+ATF_TC_HEAD(bzero_zero_size, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test bzero(3) with zero size");
+}
+
+ATF_TC_BODY(bzero_zero_size, tc)
+{
+ char buf[1024];
+
+ (void)memset(buf, 'x', sizeof(buf));
+
+ if (check(buf, sizeof(buf), 'x') != true)
+ atf_tc_fail("memset(3) did not fill a static buffer");
+
+ (void)bzero(buf+sizeof(buf)/2, zero);
+
+ if (check(buf, sizeof(buf), 'x') != true)
+ atf_tc_fail("bzero(3) with 0 size did change the buffer");
+}
+
ATF_TC(memset_struct);
ATF_TC_HEAD(memset_struct, tc)
{
@@ -202,6 +248,8 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, memset_nonzero);
ATF_TP_ADD_TC(tp, memset_struct);
ATF_TP_ADD_TC(tp, memset_return);
+ ATF_TP_ADD_TC(tp, memset_zero_size);
+ ATF_TP_ADD_TC(tp, bzero_zero_size);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/string/t_strchr.c b/contrib/netbsd-tests/lib/libc/string/t_strchr.c
index 4556b2c..5dd9a62 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_strchr.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_strchr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strchr.c,v 1.1 2011/07/07 08:59:33 jruoho Exp $ */
+/* $NetBSD: t_strchr.c,v 1.2 2017/01/10 15:34:49 christos Exp $ */
/*
* Written by J.T. Conklin <jtc@acorntoolworks.com>
@@ -58,12 +58,10 @@ ATF_TC_HEAD(strchr_basic, tc)
ATF_TC_BODY(strchr_basic, tc)
{
-#ifdef __FreeBSD__
void *dl_handle;
-#endif
- unsigned int t, a;
char *off;
char buf[32];
+ unsigned int t, a;
const char *tab[] = {
"",
@@ -248,12 +246,8 @@ ATF_TC_BODY(strchr_basic, tc)
"abcdefgh/abcdefgh/",
};
-#ifdef __FreeBSD__
dl_handle = dlopen(NULL, RTLD_LAZY);
strchr_fn = dlsym(dl_handle, "test_strlen");
-#else
- strchr_fn = dlsym(dlopen(0, RTLD_LAZY), "test_strchr");
-#endif
if (!strchr_fn)
strchr_fn = strchr;
@@ -288,9 +282,7 @@ ATF_TC_BODY(strchr_basic, tc)
verify_strchr(buf + a, 0xff, t, a);
}
}
-#ifdef __FreeBSD__
(void)dlclose(dl_handle);
-#endif
}
ATF_TP_ADD_TCS(tp)
diff --git a/contrib/netbsd-tests/lib/libc/string/t_strerror.c b/contrib/netbsd-tests/lib/libc/string/t_strerror.c
index 888a826..99b95b4 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_strerror.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_strerror.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strerror.c,v 1.3 2011/05/10 06:55:27 jruoho Exp $ */
+/* $NetBSD: t_strerror.c,v 1.4 2017/01/10 20:35:49 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,18 +29,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_strerror.c,v 1.3 2011/05/10 06:55:27 jruoho Exp $");
+__RCSID("$NetBSD: t_strerror.c,v 1.4 2017/01/10 20:35:49 christos Exp $");
#include <atf-c.h>
#include <errno.h>
+#include <stdio.h> /* Needed for sys_nerr on FreeBSD */
#include <limits.h>
#include <locale.h>
#include <string.h>
-#ifdef __FreeBSD__
-#include <stdio.h>
-#endif
-
ATF_TC(strerror_basic);
ATF_TC_HEAD(strerror_basic, tc)
{
diff --git a/contrib/netbsd-tests/lib/libc/sync/cpp_atomic_ops_linkable.cc b/contrib/netbsd-tests/lib/libc/sync/cpp_atomic_ops_linkable.cc
new file mode 100644
index 0000000..e7822b7
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sync/cpp_atomic_ops_linkable.cc
@@ -0,0 +1,107 @@
+/* $NetBSD: cpp_atomic_ops_linkable.cc,v 1.5 2017/01/11 12:10:26 joerg Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Martin Husemann <martin@NetBSD.org>.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This is a simple link-time test to verify all builtin atomic sync
+ * operations for C++ <atomic> are available.
+ */
+
+#include <atomic>
+#include <machine/types.h> // for __HAVE_ATOMIC64_OPS
+
+template <class T>
+class ATest {
+public:
+ ATest() : m_val(0)
+ {
+ m_val.exchange(std::atomic<T>(8));
+ m_val--;
+ m_val++;
+ m_val ^= 0x0f;
+ m_val &= 0x0f;
+ m_val |= 2;
+
+ T tval(1), other(42);
+ m_val.compare_exchange_weak(tval, other,
+ std::memory_order_release, std::memory_order_relaxed);
+ }
+
+private:
+ volatile std::atomic<T> m_val;
+};
+
+int main(int argc, char **argv)
+{
+ ATest<char>();
+ ATest<signed char>();
+ ATest<unsigned char>();
+ ATest<short>();
+ ATest<unsigned short>();
+ ATest<int>();
+ ATest<unsigned int>();
+ ATest<long>();
+ ATest<unsigned long>();
+#ifdef __HAVE_ATOMIC64_OPS
+ ATest<long long>();
+ ATest<unsigned long long>();
+#endif
+ ATest<char16_t>();
+ ATest<char32_t>();
+ ATest<wchar_t>();
+ ATest<int_least8_t>();
+ ATest<uint_least8_t>();
+ ATest<int_least16_t>();
+ ATest<uint_least16_t>();
+ ATest<int_least32_t>();
+ ATest<uint_least32_t>();
+#ifdef __HAVE_ATOMIC64_OPS
+ ATest<int_least64_t>();
+ ATest<uint_least64_t>();
+#endif
+ ATest<int_fast8_t>();
+ ATest<uint_fast8_t>();
+ ATest<int_fast16_t>();
+ ATest<uint_fast16_t>();
+ ATest<int_fast32_t>();
+ ATest<uint_fast32_t>();
+#ifdef __HAVE_ATOMIC64_OPS
+ ATest<int_fast64_t>();
+ ATest<uint_fast64_t>();
+#endif
+ ATest<intptr_t>();
+ ATest<uintptr_t>();
+ ATest<std::size_t>();
+ ATest<std::ptrdiff_t>();
+#ifdef __HAVE_ATOMIC64_OPS
+ ATest<intmax_t>();
+ ATest<uintmax_t>();
+#endif
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_access.c b/contrib/netbsd-tests/lib/libc/sys/t_access.c
index 69d2df2..c537eca 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_access.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_access.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_access.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $ */
+/* $NetBSD: t_access.c,v 2.2 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_access.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
+__RCSID("$NetBSD: t_access.c,v 1.2 2017/01/10 22:36:29 christos Exp $");
+
+#ifdef __FreeBSD__
+#include <sys/param.h> /* For __FreeBSD_version */
+#endif
+
+#include <atf-c.h>
+
+#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
@@ -38,13 +46,6 @@ __RCSID("$NetBSD: t_access.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
#include <stdlib.h>
#include <unistd.h>
-#include <atf-c.h>
-
-#ifdef __FreeBSD__
-#include <sys/param.h>
-#include <sys/stat.h>
-#endif
-
static const char path[] = "access";
static const int mode[4] = { R_OK, W_OK, X_OK, F_OK };
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_bind.c b/contrib/netbsd-tests/lib/libc/sys/t_bind.c
new file mode 100644
index 0000000..0c6027c
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_bind.c
@@ -0,0 +1,78 @@
+/* $NetBSD: t_bind.c,v 1.3 2015/04/05 23:28:10 rtr Exp $ */
+/*
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
+ * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <unistd.h>
+
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+
+#include <atf-c.h>
+
+ATF_TC(bind_foreign_family);
+
+ATF_TC_HEAD(bind_foreign_family, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks that binding a socket "
+ "with a different address family fails");
+}
+
+ATF_TC_BODY(bind_foreign_family, tc)
+{
+ struct sockaddr_in addr;
+
+ /* addr.sin_family = AF_UNSPEC = 0 */
+ memset(&addr, 0, sizeof(addr));
+
+ /*
+ * it is not necessary to initialize sin_{addr,port} since
+ * those structure members shall not be accessed if bind
+ * fails correctly.
+ */
+
+ int sock = socket(AF_LOCAL, SOCK_STREAM, 0);
+ ATF_REQUIRE(sock != -1);
+
+ /* should fail but currently doesn't */
+ ATF_REQUIRE(-1 == bind(sock, (struct sockaddr *)&addr, sizeof(addr)));
+ ATF_REQUIRE(EAFNOSUPPORT == errno);
+
+ close(sock);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, bind_foreign_family);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_chroot.c b/contrib/netbsd-tests/lib/libc/sys/t_chroot.c
index 651dc10..1f1c49b 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_chroot.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_chroot.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_chroot.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $ */
+/* $NetBSD: t_chroot.c,v 1.2 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,9 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_chroot.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
+__RCSID("$NetBSD: t_chroot.c,v 1.2 2017/01/10 22:36:29 christos Exp $");
#include <sys/wait.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
@@ -42,10 +43,6 @@ __RCSID("$NetBSD: t_chroot.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
#include <string.h>
#include <unistd.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
-
ATF_TC(chroot_basic);
ATF_TC_HEAD(chroot_basic, tc)
{
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c b/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c
new file mode 100644
index 0000000..8c1fd03
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c
@@ -0,0 +1,63 @@
+/* $NetBSD: t_clock_nanosleep.c,v 1.1 2016/11/11 15:30:44 njoly Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_clock_nanosleep.c,v 1.1 2016/11/11 15:30:44 njoly Exp $");
+
+#include <atf-c.h>
+#include <time.h>
+
+ATF_TC(clock_nanosleep_remain);
+ATF_TC_HEAD(clock_nanosleep_remain, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Check clock_nanosleep(2) remaining time");
+}
+
+ATF_TC_BODY(clock_nanosleep_remain, tc)
+{
+ struct timespec rqtp, rmtp;
+
+ rqtp.tv_sec = 0; rqtp.tv_nsec = 0;
+ rmtp.tv_sec = -1; rmtp.tv_nsec = -1;
+ ATF_REQUIRE(clock_nanosleep(CLOCK_REALTIME, 0, &rqtp, &rmtp) == 0);
+ ATF_CHECK(rmtp.tv_sec == 0 && rmtp.tv_nsec == 0);
+
+ ATF_REQUIRE(clock_gettime(CLOCK_REALTIME, &rqtp) == 0);
+ rmtp.tv_sec = -1; rmtp.tv_nsec = -1;
+ ATF_REQUIRE(clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &rqtp, &rmtp) == 0);
+ ATF_CHECK(rmtp.tv_sec == -1 && rmtp.tv_nsec == -1);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, clock_nanosleep_remain);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_connect.c b/contrib/netbsd-tests/lib/libc/sys/t_connect.c
index 896b490..672a022 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_connect.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_connect.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_connect.c,v 1.1 2011/11/05 18:19:02 jruoho Exp $ */
+/* $NetBSD: t_connect.c,v 1.2 2015/04/05 23:17:41 rtr Exp $ */
/*
* Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -102,10 +102,39 @@ ATF_TC_BODY(connect_low_port, tc)
#endif
}
+ATF_TC(connect_foreign_family);
+ATF_TC_HEAD(connect_foreign_family, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks that connecting a socket "
+ "with a different address family fails");
+}
+ATF_TC_BODY(connect_foreign_family, tc)
+{
+ struct sockaddr_in addr;
+
+ /* addr.sin_family = AF_UNSPEC = 0 */
+ memset(&addr, 0, sizeof(addr));
+
+ /*
+ * it is not necessary to initialize sin_{addr,port} since
+ * those structure members shall not be accessed if connect
+ * fails correctly.
+ */
+
+ int sock = socket(AF_LOCAL, SOCK_STREAM, 0);
+ ATF_REQUIRE(sock != -1);
+
+ ATF_REQUIRE(-1 == connect(sock, (struct sockaddr *)&addr, sizeof(addr)));
+ ATF_REQUIRE(EAFNOSUPPORT == errno);
+
+ close(sock);
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, connect_low_port);
+ ATF_TP_ADD_TC(tp, connect_foreign_family);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c b/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c
index 46c0ff1..9f21b3e 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c
@@ -53,6 +53,10 @@ run(int n, ...)
va_start(va, n);
#if defined(__FreeBSD__) && defined(__amd64__)
for (i = 0; i < 5; i++) {
+#elif defined(__FreeBSD__) && defined(__aarch64__)
+ for (i = 0; i < 7; i++) {
+#elif defined(__FreeBSD__) && defined(__mips__)
+ for (i = 0; i < 5; i++) {
#else
for (i = 0; i < 9; i++) {
#endif
@@ -116,6 +120,14 @@ ATF_TC_BODY(setcontext_link, tc)
/* FreeBSD/amd64 only permits up to 6 arguments. */
makecontext(&uc[i], (void *)run, 6, i,
0, 1, 2, 3, 4);
+#elif defined(__FreeBSD__) && defined(__aarch64__)
+ /* FreeBSD/arm64 only permits up to 8 arguments. */
+ makecontext(&uc[i], (void *)run, 8, i,
+ 0, 1, 2, 3, 4, 5, 6);
+#elif defined(__FreeBSD__) && defined(__mips__)
+ /* FreeBSD/mips only permits up to 6 arguments. */
+ makecontext(&uc[i], (void *)run, 6, i,
+ 0, 1, 2, 3, 4);
#else
makecontext(&uc[i], (void *)run, 10, i,
0, 1, 2, 3, 4, 5, 6, 7, 8);
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_getrusage.c b/contrib/netbsd-tests/lib/libc/sys/t_getrusage.c
index 85eeac6..f4ee96b 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_getrusage.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_getrusage.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_getrusage.c,v 1.3 2014/09/03 19:24:12 matt Exp $ */
+/* $NetBSD: t_getrusage.c,v 1.4 2016/08/05 15:01:39 scole Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_getrusage.c,v 1.3 2014/09/03 19:24:12 matt Exp $");
+__RCSID("$NetBSD: t_getrusage.c,v 1.4 2016/08/05 15:01:39 scole Exp $");
#include <sys/resource.h>
#include <sys/time.h>
@@ -56,6 +56,10 @@ sighandler(int signo)
/* Nothing. */
}
+#ifdef __FreeBSD__
+#define asm __asm
+#endif
+
static void
work(void)
{
@@ -64,6 +68,8 @@ work(void)
while (n > 0) {
#ifdef __or1k__
asm volatile("l.nop"); /* Do something. */
+#elif defined(__ia64__)
+ asm volatile("nop 0"); /* Do something. */
#else
asm volatile("nop"); /* Do something. */
#endif
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_getsockname.c b/contrib/netbsd-tests/lib/libc/sys/t_getsockname.c
new file mode 100644
index 0000000..01b1f8a
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_getsockname.c
@@ -0,0 +1,82 @@
+/* $NetBSD: t_getsockname.c,v 1.1 2016/07/30 11:03:54 njoly Exp $ */
+/*
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
+ * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <string.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+ATF_TC(getsockname_unix);
+
+ATF_TC_HEAD(getsockname_unix, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks getsockname with UNIX domain");
+}
+
+ATF_TC_BODY(getsockname_unix, tc)
+{
+ const char *path = "sock.unix";
+ int sd;
+ socklen_t len;
+ struct sockaddr_un sun;
+
+ sd = socket(AF_UNIX, SOCK_STREAM, 0);
+ ATF_REQUIRE(sd != -1);
+
+ len = sizeof(sun);
+ memset(&sun, 0, sizeof(sun));
+ ATF_REQUIRE(getsockname(sd, (struct sockaddr *)&sun, &len) != -1);
+ ATF_CHECK(sun.sun_family == AF_UNIX);
+ ATF_CHECK(strcmp(sun.sun_path, "") == 0);
+
+ len = sizeof(sun);
+ memset(&sun, 0, sizeof(sun));
+ sun.sun_family = AF_UNIX;
+ strcpy(sun.sun_path, path);
+ ATF_REQUIRE(bind(sd, (struct sockaddr *)&sun, len) != -1);
+
+ len = sizeof(sun);
+ memset(&sun, 0, sizeof(sun));
+ ATF_REQUIRE(getsockname(sd, (struct sockaddr *)&sun, &len) != -1);
+ ATF_CHECK(sun.sun_family == AF_UNIX);
+ ATF_CHECK(strcmp(sun.sun_path, path) == 0);
+
+ ATF_REQUIRE(close(sd) != -1);
+ ATF_REQUIRE(unlink(path) != -1);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, getsockname_unix);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_kevent.c b/contrib/netbsd-tests/lib/libc/sys/t_kevent.c
index c2fef44..8a20d63 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_kevent.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_kevent.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_kevent.c,v 1.6 2012/11/29 09:13:44 martin Exp $ */
+/* $NetBSD: t_kevent.c,v 1.7 2015/02/05 13:55:37 isaki Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_kevent.c,v 1.6 2012/11/29 09:13:44 martin Exp $");
+__RCSID("$NetBSD: t_kevent.c,v 1.7 2015/02/05 13:55:37 isaki Exp $");
#include <sys/types.h>
#include <sys/event.h>
@@ -182,8 +182,14 @@ ATF_TC_BODY(kqueue_unsupported_fd, tc)
struct kevent ev;
fd = open(DRVCTLDEV, O_RDONLY);
- if (fd == -1 && errno == ENOENT)
- atf_tc_skip("no " DRVCTLDEV " available for testing");
+ if (fd == -1) {
+ switch (errno) {
+ case ENOENT:
+ case ENXIO:
+ atf_tc_skip("no " DRVCTLDEV " available for testing");
+ break;
+ }
+ }
ATF_REQUIRE(fd != -1);
ATF_REQUIRE((kq = kqueue()) != -1);
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_mincore.c b/contrib/netbsd-tests/lib/libc/sys/t_mincore.c
index c31170f..ab8c33f 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_mincore.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_mincore.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mincore.c,v 1.8 2012/06/08 07:18:58 martin Exp $ */
+/* $NetBSD: t_mincore.c,v 1.9 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -59,9 +59,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mincore.c,v 1.8 2012/06/08 07:18:58 martin Exp $");
+__RCSID("$NetBSD: t_mincore.c,v 1.9 2017/01/10 22:36:29 christos Exp $");
#include <sys/mman.h>
+#include <sys/stat.h>
#include <sys/shm.h>
#include <atf-c.h>
@@ -74,10 +75,6 @@ __RCSID("$NetBSD: t_mincore.c,v 1.8 2012/06/08 07:18:58 martin Exp $");
#include <unistd.h>
#include <sys/resource.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
-
static long page = 0;
static const char path[] = "mincore";
static size_t check_residency(void *, size_t);
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_mlock.c b/contrib/netbsd-tests/lib/libc/sys/t_mlock.c
index 85d82c7..dcfba2b 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_mlock.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_mlock.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mlock.c,v 1.5 2014/02/26 20:49:26 martin Exp $ */
+/* $NetBSD: t_mlock.c,v 1.6 2016/08/09 12:02:44 kre Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mlock.c,v 1.5 2014/02/26 20:49:26 martin Exp $");
+__RCSID("$NetBSD: t_mlock.c,v 1.6 2016/08/09 12:02:44 kre Exp $");
#ifdef __FreeBSD__
#include <sys/types.h>
@@ -50,86 +50,13 @@ __RCSID("$NetBSD: t_mlock.c,v 1.5 2014/02/26 20:49:26 martin Exp $");
#include <limits.h>
#define _KMEMUSER
#include <machine/vmparam.h>
+
+void set_vm_max_wired(int);
+void restore_vm_max_wired(void);
#endif
static long page = 0;
-#ifdef __FreeBSD__
-#define VM_MAX_WIRED "vm.max_wired"
-
-static void
-vm_max_wired_sysctl(int *old_value, int *new_value)
-{
- size_t old_len;
- size_t new_len = (new_value == NULL ? 0 : sizeof(int));
-
- if (old_value == NULL)
- printf("Setting the new value to %d\n", *new_value);
- else {
- ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, NULL, &old_len,
- new_value, new_len) == 0,
- "sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno));
- }
-
- ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, old_value, &old_len,
- new_value, new_len) == 0,
- "sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno));
-
- if (old_value != NULL)
- printf("Saved the old value (%d)\n", *old_value);
-}
-
-static void
-set_vm_max_wired(int new_value)
-{
- FILE *fp;
- int old_value;
-
- fp = fopen(VM_MAX_WIRED, "w");
- if (fp == NULL) {
- atf_tc_skip("could not open %s for writing: %s",
- VM_MAX_WIRED, strerror(errno));
- return;
- }
-
- vm_max_wired_sysctl(&old_value, NULL);
-
- ATF_REQUIRE_MSG(fprintf(fp, "%d", old_value) > 0,
- "saving %s failed", VM_MAX_WIRED);
-
- fclose(fp);
-
- vm_max_wired_sysctl(NULL, &new_value);
-}
-
-static void
-restore_vm_max_wired(void)
-{
- FILE *fp;
- int saved_max_wired;
-
- fp = fopen(VM_MAX_WIRED, "r");
- if (fp == NULL) {
- perror("fopen failed\n");
- return;
- }
-
- if (fscanf(fp, "%d", &saved_max_wired) != 1) {
- perror("fscanf failed\n");
- fclose(fp);
- return;
- }
-
- fclose(fp);
- printf("old value in %s: %d\n", VM_MAX_WIRED, saved_max_wired);
-
- if (saved_max_wired == 0) /* This will cripple the test host */
- return;
-
- vm_max_wired_sysctl(NULL, &saved_max_wired);
-}
-#endif
-
ATF_TC(mlock_clip);
ATF_TC_HEAD(mlock_clip, tc)
{
@@ -178,6 +105,7 @@ ATF_TC_BODY(mlock_err, tc)
#endif
void *invalid_ptr;
int null_errno = ENOMEM; /* error expected for NULL */
+ void *buf;
#ifdef __FreeBSD__
#ifdef VM_MIN_ADDRESS
@@ -189,28 +117,48 @@ ATF_TC_BODY(mlock_err, tc)
#else
if (sysctlbyname("vm.minaddress", &vmin, &len, NULL, 0) != 0)
atf_tc_fail("failed to read vm.minaddress");
+ /*
+ * Any bad address must return ENOMEM (for lock & unlock)
+ */
+ errno = 0;
+ ATF_REQUIRE_ERRNO(ENOMEM, mlock(NULL, page) == -1);
if (vmin > 0)
null_errno = EINVAL; /* NULL is not inside user VM */
#endif
errno = 0;
- ATF_REQUIRE_ERRNO(null_errno, mlock(NULL, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, mlock((char *)0, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(null_errno, mlock((char *)0, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, mlock((char *)-1, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(EINVAL, mlock((char *)-1, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock(NULL, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(null_errno, munlock(NULL, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock((char *)0, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(null_errno, munlock((char *)0, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock((char *)-1, page) == -1);
+
+ buf = malloc(page);
+ ATF_REQUIRE(buf != NULL);
+
+ /*
+ * unlocking memory that is not locked is an error...
+ */
errno = 0;
- ATF_REQUIRE_ERRNO(EINVAL, munlock((char *)-1, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock(buf, page) == -1);
+
+ /*
+ * These are permitted to fail (EINVAL) but do not on NetBSD
+ */
+ ATF_REQUIRE(mlock((void *)(((uintptr_t)buf) + page/3), page/5) == 0);
+ ATF_REQUIRE(munlock((void *)(((uintptr_t)buf) + page/3), page/5) == 0);
+
+ (void)free(buf);
/*
* Try to create a pointer to an unmapped page - first after current
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_mmap.c b/contrib/netbsd-tests/lib/libc/sys/t_mmap.c
index 5d821ec..738758c 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_mmap.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_mmap.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mmap.c,v 1.7 2012/06/14 17:47:58 bouyer Exp $ */
+/* $NetBSD: t_mmap.c,v 1.10 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -55,10 +55,11 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mmap.c,v 1.7 2012/06/14 17:47:58 bouyer Exp $");
+__RCSID("$NetBSD: t_mmap.c,v 1.10 2017/01/10 22:36:29 christos Exp $");
#include <sys/param.h>
#include <sys/mman.h>
+#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/wait.h>
@@ -78,7 +79,6 @@ __RCSID("$NetBSD: t_mmap.c,v 1.7 2012/06/14 17:47:58 bouyer Exp $");
#ifdef __FreeBSD__
#include <sys/disklabel.h>
-#include <sys/stat.h>
#include <stdint.h>
#endif
@@ -381,9 +381,13 @@ ATF_TC_BODY(mmap_prot_3, tc)
* the access should generate SIGSEGV.
*/
fd = open(path, O_RDWR | O_CREAT, 0700);
-
if (fd < 0)
+#ifdef __FreeBSD__
+ atf_tc_skip("opening %s failed; skipping testcase: %s",
+ path, strerror(errno));
+#else
return;
+#endif
ATF_REQUIRE(write(fd, "XXX", 3) == 3);
ATF_REQUIRE(close(fd) == 0);
@@ -409,6 +413,9 @@ ATF_TC_BODY(mmap_prot_3, tc)
ATF_REQUIRE(WIFEXITED(sta) != 0);
ATF_REQUIRE(WEXITSTATUS(sta) == SIGSEGV);
ATF_REQUIRE(munmap(map, 3) == 0);
+#ifdef __FreeBSD__
+ (void)close(fd);
+#endif
}
ATF_TC_CLEANUP(mmap_prot_3, tc)
@@ -453,6 +460,9 @@ ATF_TC_BODY(mmap_truncate, tc)
ATF_REQUIRE(ftruncate(fd, page / 12) == 0);
ATF_REQUIRE(ftruncate(fd, page / 64) == 0);
+#ifdef __FreeBSD__
+ (void)munmap(map, page);
+#endif
ATF_REQUIRE(close(fd) == 0);
}
@@ -461,6 +471,76 @@ ATF_TC_CLEANUP(mmap_truncate, tc)
(void)unlink(path);
}
+ATF_TC_WITH_CLEANUP(mmap_truncate_signal);
+ATF_TC_HEAD(mmap_truncate_signal, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test mmap(2) ftruncate(2) causing signal");
+}
+
+ATF_TC_BODY(mmap_truncate_signal, tc)
+{
+ char *map;
+ long i;
+ int fd, sta;
+ pid_t pid;
+
+#ifdef __FreeBSD__
+ atf_tc_expect_fail("testcase fails with SIGSEGV on FreeBSD; bug # 211924");
+#endif
+
+ fd = open(path, O_RDWR | O_CREAT, 0700);
+
+ if (fd < 0)
+ return;
+
+ ATF_REQUIRE(write(fd, "foo\n", 5) == 5);
+
+ map = mmap(NULL, page, PROT_READ, MAP_FILE|MAP_PRIVATE, fd, 0);
+ ATF_REQUIRE(map != MAP_FAILED);
+
+ sta = 0;
+ for (i = 0; i < 5; i++)
+ sta += map[i];
+ ATF_REQUIRE(sta == 334);
+
+ ATF_REQUIRE(ftruncate(fd, 0) == 0);
+ pid = fork();
+ ATF_REQUIRE(pid >= 0);
+
+ if (pid == 0) {
+ ATF_REQUIRE(signal(SIGBUS, map_sighandler) != SIG_ERR);
+ ATF_REQUIRE(signal(SIGSEGV, map_sighandler) != SIG_ERR);
+ sta = 0;
+ for (i = 0; i < page; i++)
+ sta += map[i];
+ /* child never will get this far, but the compiler will
+ not know, so better use the values calculated to
+ prevent the access to be optimized out */
+ ATF_REQUIRE(i == 0);
+ ATF_REQUIRE(sta == 0);
+#ifdef __FreeBSD__
+ (void)munmap(map, page);
+ (void)close(fd);
+#endif
+ return;
+ }
+
+ (void)wait(&sta);
+
+ ATF_REQUIRE(WIFEXITED(sta) != 0);
+ if (WEXITSTATUS(sta) == SIGSEGV)
+ atf_tc_fail("child process got SIGSEGV instead of SIGBUS");
+ ATF_REQUIRE(WEXITSTATUS(sta) == SIGBUS);
+ ATF_REQUIRE(munmap(map, page) == 0);
+ ATF_REQUIRE(close(fd) == 0);
+}
+
+ATF_TC_CLEANUP(mmap_truncate_signal, tc)
+{
+ (void)unlink(path);
+}
+
ATF_TC(mmap_va0);
ATF_TC_HEAD(mmap_va0, tc)
{
@@ -518,6 +598,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, mmap_prot_2);
ATF_TP_ADD_TC(tp, mmap_prot_3);
ATF_TP_ADD_TC(tp, mmap_truncate);
+ ATF_TP_ADD_TC(tp, mmap_truncate_signal);
ATF_TP_ADD_TC(tp, mmap_va0);
return atf_no_error();
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_mprotect.c b/contrib/netbsd-tests/lib/libc/sys/t_mprotect.c
index ee345aa..5dc3eae 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_mprotect.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_mprotect.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mprotect.c,v 1.3 2011/07/20 22:53:44 jym Exp $ */
+/* $NetBSD: t_mprotect.c,v 1.4 2016/05/28 14:34:49 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mprotect.c,v 1.3 2011/07/20 22:53:44 jym Exp $");
+__RCSID("$NetBSD: t_mprotect.c,v 1.4 2016/05/28 14:34:49 christos Exp $");
#include <sys/param.h>
#include <sys/mman.h>
@@ -78,10 +78,7 @@ paxinit(void)
rv = sysctlbyname("security.pax.mprotect.enabled",
&pax_enabled, &len, NULL, 0);
- if (rv != 0)
- return false;
-
- return paxset(1, 1);
+ return rv == 0;
}
static bool
@@ -194,6 +191,12 @@ ATF_TC_BODY(mprotect_exec, tc)
break;
}
+ if (!paxinit())
+ return;
+ if (pax_enabled == 1 && pax_global == 1)
+ atf_tc_skip("PaX MPROTECT restrictions enabled");
+
+
/*
* Map a page read/write and copy a trivial assembly function inside.
* We will then change the mapping rights:
@@ -262,7 +265,7 @@ ATF_TC_BODY(mprotect_pax, tc)
size_t i;
int rv;
- if (paxinit() != true)
+ if (!paxinit() || !paxset(1, 1))
return;
/*
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_posix_fallocate.c b/contrib/netbsd-tests/lib/libc/sys/t_posix_fallocate.c
new file mode 100644
index 0000000..b931ebd
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_posix_fallocate.c
@@ -0,0 +1,63 @@
+/* $NetBSD: t_posix_fallocate.c,v 1.1 2015/01/31 23:06:57 christos Exp $ */
+
+/*-
+ * Copyright 2015, Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Google nor the names of its contributors may
+ * be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_posix_fallocate.c,v 1.1 2015/01/31 23:06:57 christos Exp $");
+
+#include <atf-c.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+ATF_TC_WITHOUT_HEAD(ebadf);
+ATF_TC_BODY(ebadf, tc)
+{
+ int rc, saved;
+
+ errno = 1111;
+ rc = posix_fallocate(-1, 0, 4096);
+ saved = errno;
+ if (rc == -1 && saved != 1111)
+ atf_tc_fail("Should return error %s without setting errno.",
+ strerror(saved));
+ if (rc != EBADF)
+ atf_tc_fail("returned %s but expected %s.",
+ strerror(saved), strerror(EBADF));
+ if (saved != 1111)
+ atf_tc_fail("errno should be %d but got changed to %d.",
+ 1111, saved);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, ebadf);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c b/contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c
index 4b21860..31db878 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_setrlimit.c,v 1.4 2012/06/12 23:56:19 christos Exp $ */
+/* $NetBSD: t_setrlimit.c,v 1.5 2016/07/13 09:53:16 njoly Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_setrlimit.c,v 1.4 2012/06/12 23:56:19 christos Exp $");
+__RCSID("$NetBSD: t_setrlimit.c,v 1.5 2016/07/13 09:53:16 njoly Exp $");
#include <sys/resource.h>
#include <sys/mman.h>
@@ -50,6 +50,11 @@ __RCSID("$NetBSD: t_setrlimit.c,v 1.4 2012/06/12 23:56:19 christos Exp $");
#include <ucontext.h>
#include <unistd.h>
+#ifdef __FreeBSD__
+void set_vm_max_wired(int);
+void restore_vm_max_wired(void);
+#endif
+
static void sighandler(int);
static const char path[] = "setrlimit";
@@ -238,10 +243,18 @@ sighandler(int signo)
_exit(EXIT_SUCCESS);
}
+#ifdef __FreeBSD__
+ATF_TC_WITH_CLEANUP(setrlimit_memlock);
+#else
ATF_TC(setrlimit_memlock);
+#endif
ATF_TC_HEAD(setrlimit_memlock, tc)
{
atf_tc_set_md_var(tc, "descr", "Test setrlimit(2), RLIMIT_MEMLOCK");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.config", "allow_sysctl_side_effects");
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
}
ATF_TC_BODY(setrlimit_memlock, tc)
@@ -252,6 +265,11 @@ ATF_TC_BODY(setrlimit_memlock, tc)
pid_t pid;
int sta;
+#ifdef __FreeBSD__
+ /* Set max_wired really really high to avoid EAGAIN */
+ set_vm_max_wired(INT_MAX);
+#endif
+
page = sysconf(_SC_PAGESIZE);
ATF_REQUIRE(page >= 0);
@@ -295,6 +313,14 @@ ATF_TC_BODY(setrlimit_memlock, tc)
atf_tc_fail("RLIMIT_MEMLOCK not enforced");
}
+#ifdef __FreeBSD__
+ATF_TC_CLEANUP(setrlimit_memlock, tc)
+{
+
+ restore_vm_max_wired();
+}
+#endif
+
ATF_TC(setrlimit_nofile_1);
ATF_TC_HEAD(setrlimit_nofile_1, tc)
{
@@ -515,6 +541,25 @@ ATF_TC_BODY(setrlimit_perm, tc)
}
}
+ATF_TC(setrlimit_stack);
+ATF_TC_HEAD(setrlimit_stack, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test setrlimit(2), RLIMIT_STACK");
+ atf_tc_set_md_var(tc, "require.user", "unprivileged");
+}
+
+ATF_TC_BODY(setrlimit_stack, tc)
+{
+ struct rlimit res;
+
+ /* Ensure soft limit is not bigger than hard limit */
+ res.rlim_cur = res.rlim_max = 4192256;
+ ATF_REQUIRE(setrlimit(RLIMIT_STACK, &res) == 0);
+ ATF_REQUIRE(getrlimit(RLIMIT_STACK, &res) == 0);
+ ATF_CHECK(res.rlim_cur <= res.rlim_max);
+
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -530,6 +575,7 @@ ATF_TP_ADD_TCS(tp)
#ifdef __NetBSD__
ATF_TP_ADD_TC(tp, setrlimit_nthr);
#endif
+ ATF_TP_ADD_TC(tp, setrlimit_stack);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c b/contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c
index 6686f02..e911d42 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_sigqueue.c,v 1.4 2011/07/07 16:31:11 jruoho Exp $ */
+/* $NetBSD: t_sigqueue.c,v 1.6 2016/08/04 06:43:43 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -30,8 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_sigqueue.c,v 1.4 2011/07/07 16:31:11 jruoho Exp $");
-
+__RCSID("$NetBSD: t_sigqueue.c,v 1.6 2016/08/04 06:43:43 christos Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -40,6 +39,11 @@ __RCSID("$NetBSD: t_sigqueue.c,v 1.4 2011/07/07 16:31:11 jruoho Exp $");
#include <sched.h>
#include <unistd.h>
+#ifdef __FreeBSD__
+#include <err.h>
+#include <stdio.h>
+#endif
+
static void handler(int, siginfo_t *, void *);
#define VALUE (int)0xc001dad1
@@ -77,7 +81,7 @@ ATF_TC_BODY(sigqueue_basic, tc)
sv.sival_int = VALUE;
#ifdef __FreeBSD__
- /*
+ /*
* From kern_sig.c:
* Specification says sigqueue can only send signal to single process.
*/
@@ -99,17 +103,158 @@ ATF_TC_HEAD(sigqueue_err, tc)
ATF_TC_BODY(sigqueue_err, tc)
{
- union sigval sv;
+ static union sigval sv;
errno = 0;
ATF_REQUIRE_ERRNO(EINVAL, sigqueue(getpid(), -1, sv) == -1);
}
+static int signals[] = {
+ SIGINT, SIGRTMIN + 1, SIGINT, SIGRTMIN + 0, SIGRTMIN + 2,
+ SIGQUIT, SIGRTMIN + 1
+};
+#ifdef __arraycount
+#define CNT __arraycount(signals)
+#else
+#define CNT (sizeof(signals) / sizeof(signals[0]))
+#endif
+
+static sig_atomic_t count = 0;
+static int delivered[CNT];
+
+static void
+myhandler(int signo, siginfo_t *info, void *context)
+{
+ delivered[count++] = signo;
+#ifdef __FreeBSD__
+ printf("Signal #%zu: signo: %d\n", (size_t)count, signo);
+#endif
+}
+
+static int
+asc(const void *a, const void *b)
+{
+ const int *ia = a, *ib = b;
+ return *ib - *ia;
+}
+
+/*
+ * given a array of signals to be delivered in tosend of size len
+ * place in ordered the signals to be delivered in delivery order
+ * and return the number of signals that should be delivered
+ */
+static size_t
+sigorder(int *ordered, const int *tosend, size_t len)
+{
+ memcpy(ordered, tosend, len * sizeof(*tosend));
+ qsort(ordered, len, sizeof(*ordered), asc);
+ if (len == 1)
+ return len;
+
+#ifdef __FreeBSD__
+ /*
+ * Don't dedupe signal numbers (bug 212173)
+ *
+ * Per kib's comment..
+ *
+ * "
+ * OTOH, FreeBSD behaviour is to treat all signals as realtime while
+ * there is no mem shortage and siginfo can be allocated. In
+ * particular, signals < SIGRTMIN are not collapsed when queued more
+ * than once.
+ * "
+ */
+
+ return len;
+#else
+
+ size_t i, j;
+ for (i = 0, j = 0; i < len - 1; i++) {
+ if (ordered[i] >= SIGRTMIN)
+ continue;
+ if (j == 0)
+ j = i + 1;
+ while (ordered[i] == ordered[j] && j < len)
+ j++;
+ if (j == len)
+ break;
+ ordered[i + 1] = ordered[j];
+ }
+ return i + 1;
+#endif
+}
+
+ATF_TC(sigqueue_rt);
+ATF_TC_HEAD(sigqueue_rt, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test queuing of real-time signals");
+}
+
+ATF_TC_BODY(sigqueue_rt, tc)
+{
+ pid_t pid;
+ union sigval val;
+ struct sigaction act;
+ int ordered[CNT];
+ struct sigaction oact[CNT];
+ size_t ndelivered;
+
+ ndelivered = sigorder(ordered, signals, CNT);
+
+ act.sa_flags = SA_SIGINFO;
+ act.sa_sigaction = myhandler;
+ sigemptyset(&act.sa_mask);
+ for (size_t i = 0; i < ndelivered; i++)
+ ATF_REQUIRE(sigaction(ordered[i], &act, &oact[i]) != -1);
+
+ val.sival_int = 0;
+ pid = getpid();
+
+ sigset_t mask, orig;
+ sigemptyset(&mask);
+ for (size_t i = 0; i < CNT; i++)
+#ifdef __FreeBSD__
+ if (sigaddset(&mask, signals[i]) == -1)
+ warn("sigaddset");
+#else
+ sigaddset(&mask, signals[i]);
+#endif
+
+ ATF_REQUIRE(sigprocmask(SIG_BLOCK, &mask, &orig) != -1);
+
+ for (size_t i = 0; i < CNT; i++)
+ ATF_REQUIRE(sigqueue(pid, signals[i], val) != -1);
+
+ ATF_REQUIRE(sigprocmask(SIG_UNBLOCK, &mask, &orig) != -1);
+ sleep(1);
+#ifdef __FreeBSD__
+ ATF_CHECK_MSG((size_t)count == ndelivered,
+ "count %zu != ndelivered %zu", (size_t)count, ndelivered);
+#else
+ ATF_REQUIRE_MSG((size_t)count == ndelivered,
+ "count %zu != ndelivered %zu", (size_t)count, ndelivered);
+#endif
+ for (size_t i = 0; i < ndelivered; i++)
+ ATF_REQUIRE_MSG(ordered[i] == delivered[i],
+ "%zu: ordered %d != delivered %d",
+ i, ordered[i], delivered[i]);
+
+#ifdef __FreeBSD__
+ if (count > ndelivered)
+ for (size_t i = ndelivered; i < count; i++)
+ printf("Undelivered signal #%zu: %d\n", i, ordered[i]);
+#endif
+
+ for (size_t i = 0; i < ndelivered; i++)
+ ATF_REQUIRE(sigaction(signals[i], &oact[i], NULL) != -1);
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, sigqueue_basic);
ATF_TP_ADD_TC(tp, sigqueue_err);
+ ATF_TP_ADD_TC(tp, sigqueue_rt);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_timer_create.c b/contrib/netbsd-tests/lib/libc/sys/t_timer_create.c
index cc85307..364daaa 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_timer_create.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_timer_create.c
@@ -116,6 +116,61 @@ timer_signal_create(clockid_t cid, bool expire)
ATF_REQUIRE(timer_delete(t) == 0);
}
+#ifdef __FreeBSD__
+static void
+timer_callback(union sigval value)
+{
+ timer_t *tp;
+
+ tp = value.sival_ptr;
+
+ if (*tp == t)
+ fail = false;
+}
+
+static void
+timer_thread_create(clockid_t cid, bool expire)
+{
+ struct itimerspec tim;
+ struct sigevent evt;
+
+ t = 0;
+ fail = true;
+
+ (void)memset(&evt, 0, sizeof(struct sigevent));
+ (void)memset(&tim, 0, sizeof(struct itimerspec));
+
+ /*
+ * Create the timer (SIGEV_THREAD).
+ */
+ evt.sigev_notify_function = timer_callback;
+ evt.sigev_value.sival_ptr = &t;
+ evt.sigev_notify = SIGEV_THREAD;
+
+ ATF_REQUIRE(timer_create(cid, &evt, &t) == 0);
+
+ /*
+ * Start the timer.
+ */
+ tim.it_value.tv_sec = expire ? 5 : 1;
+ tim.it_value.tv_nsec = 0;
+
+ ATF_REQUIRE(timer_settime(t, 0, &tim, NULL) == 0);
+
+ (void)sleep(2);
+
+ if (expire) {
+ if (!fail)
+ atf_tc_fail("timer fired too soon");
+ } else {
+ if (fail)
+ atf_tc_fail("timer failed to fire");
+ }
+
+ ATF_REQUIRE(timer_delete(t) == 0);
+}
+#endif
+
ATF_TC(timer_create_err);
ATF_TC_HEAD(timer_create_err, tc)
{
@@ -198,6 +253,64 @@ ATF_TC_BODY(timer_create_mono_expire, tc)
timer_signal_create(CLOCK_MONOTONIC, true);
}
+ATF_TC(timer_thread_create_real);
+ATF_TC_HEAD(timer_thread_create_real, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timer_create(2) with CLOCK_REALTIME and sigevent(3), "
+ "SIGEV_THREAD");
+}
+
+#ifdef __FreeBSD__
+ATF_TC_BODY(timer_thread_create_real, tc)
+{
+ timer_thread_create(CLOCK_REALTIME, false);
+}
+
+ATF_TC(timer_thread_create_mono);
+ATF_TC_HEAD(timer_thread_create_mono, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timer_create(2) with CLOCK_MONOTONIC and sigevent(3), "
+ "SIGEV_THREAD");
+}
+
+ATF_TC_BODY(timer_thread_create_mono, tc)
+{
+ timer_thread_create(CLOCK_MONOTONIC, false);
+}
+
+ATF_TC(timer_thread_create_real_expire);
+ATF_TC_HEAD(timer_thread_create_real_expire, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timer_create(2) with CLOCK_REALTIME and sigevent(3), "
+ "SIGEV_THREAD, with expiration");
+}
+
+ATF_TC_BODY(timer_thread_create_real_expire, tc)
+{
+ timer_thread_create(CLOCK_REALTIME, true);
+}
+
+ATF_TC(timer_thread_create_mono_expire);
+ATF_TC_HEAD(timer_thread_create_mono_expire, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timer_create(2) with CLOCK_MONOTONIC and sigevent(3), "
+ "SIGEV_THREAD, with expiration");
+}
+
+ATF_TC_BODY(timer_thread_create_mono_expire, tc)
+{
+ timer_thread_create(CLOCK_MONOTONIC, true);
+}
+#endif
+
ATF_TP_ADD_TCS(tp)
{
@@ -206,6 +319,12 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, timer_create_mono);
ATF_TP_ADD_TC(tp, timer_create_real_expire);
ATF_TP_ADD_TC(tp, timer_create_mono_expire);
+#ifdef __FreeBSD__
+ ATF_TP_ADD_TC(tp, timer_thread_create_real);
+ ATF_TP_ADD_TC(tp, timer_thread_create_mono);
+ ATF_TP_ADD_TC(tp, timer_thread_create_real_expire);
+ ATF_TP_ADD_TC(tp, timer_thread_create_mono_expire);
+#endif
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_wait.c b/contrib/netbsd-tests/lib/libc/sys/t_wait.c
new file mode 100644
index 0000000..8653265
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_wait.c
@@ -0,0 +1,323 @@
+/* $NetBSD: t_wait.c,v 1.7 2016/11/06 15:04:14 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_wait.c,v 1.7 2016/11/06 15:04:14 kamil Exp $");
+
+#include <sys/wait.h>
+#include <sys/resource.h>
+
+#include <stdio.h>
+#include <errno.h>
+#include <limits.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+#ifdef __FreeBSD__
+#define wrusage __wrusage
+#endif
+
+ATF_TC(wait6_invalid);
+ATF_TC_HEAD(wait6_invalid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) returns EINVAL with 0 options");
+}
+
+ATF_TC_BODY(wait6_invalid, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ ATF_REQUIRE(wait6(P_ALL, 0, &st, 0, &wru, &si) == -1
+ && errno == EINVAL);
+}
+
+ATF_TC(wait6_exited);
+ATF_TC_HEAD(wait6_exited, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled exiting process and code");
+}
+
+ATF_TC_BODY(wait6_exited, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+
+ switch (pid = fork()) {
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ case 0:
+ exit(0x5a5a5a5a);
+ /*NOTREACHED*/
+ default:
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(WIFEXITED(st) && WEXITSTATUS(st) == 0x5a);
+ ATF_REQUIRE(si.si_status = 0x5a5a5a5a);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_EXITED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+ break;
+ }
+}
+
+ATF_TC(wait6_terminated);
+ATF_TC_HEAD(wait6_terminated, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled terminated process and code");
+}
+
+ATF_TC_BODY(wait6_terminated, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+
+ switch (pid = fork()) {
+ case 0:
+ sleep(100);
+ /*FALLTHROUGH*/
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ default:
+ ATF_REQUIRE(kill(pid, SIGTERM) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(WIFSIGNALED(st) && WTERMSIG(st) == SIGTERM);
+ ATF_REQUIRE(si.si_status == SIGTERM);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_KILLED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+ break;
+ }
+}
+
+ATF_TC(wait6_coredumped);
+ATF_TC_HEAD(wait6_coredumped, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled coredumped process and code");
+}
+
+ATF_TC_BODY(wait6_coredumped, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+ static const struct rlimit rl = { RLIM_INFINITY, RLIM_INFINITY };
+
+ switch (pid = fork()) {
+ case 0:
+ ATF_REQUIRE(setrlimit(RLIMIT_CORE, &rl) == 0);
+ *(char *)8 = 0;
+ /*FALLTHROUGH*/
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ default:
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(WIFSIGNALED(st) && WTERMSIG(st) == SIGSEGV
+ && WCOREDUMP(st));
+ ATF_REQUIRE(si.si_status == SIGSEGV);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_DUMPED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+ break;
+ }
+}
+
+ATF_TC(wait6_stop_and_go);
+ATF_TC_HEAD(wait6_stop_and_go, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled stopped/continued process and code");
+}
+
+ATF_TC_BODY(wait6_stop_and_go, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+ static const struct rlimit rl = { 0, 0 };
+
+ ATF_REQUIRE(setrlimit(RLIMIT_CORE, &rl) == 0);
+ switch (pid = fork()) {
+ case 0:
+ sleep(100);
+ /*FALLTHROUGH*/
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ default:
+ ATF_REQUIRE(kill(pid, SIGSTOP) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WSTOPPED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(!WIFSIGNALED(st));
+ ATF_REQUIRE(WIFSTOPPED(st) && WSTOPSIG(st) == SIGSTOP);
+ ATF_REQUIRE(!WIFCONTINUED(st));
+ ATF_REQUIRE(si.si_status == SIGSTOP);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_STOPPED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+
+ ATF_REQUIRE(kill(pid, SIGCONT) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WCONTINUED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(!WIFSIGNALED(st));
+ ATF_REQUIRE(WIFCONTINUED(st));
+ ATF_REQUIRE(!WIFSTOPPED(st));
+ ATF_REQUIRE(si.si_status == SIGCONT);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_CONTINUED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+
+ ATF_REQUIRE(kill(pid, SIGQUIT) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(WIFSIGNALED(st) && WTERMSIG(st) == SIGQUIT);
+ ATF_REQUIRE(!WIFSTOPPED(st));
+ ATF_REQUIRE(!WIFCONTINUED(st));
+ ATF_REQUIRE(si.si_status == SIGQUIT);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_KILLED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+ break;
+ }
+}
+
+ATF_TC(wait6_stopgo_loop);
+ATF_TC_HEAD(wait6_stopgo_loop, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled stopped/continued process loop");
+}
+
+ATF_TC_BODY(wait6_stopgo_loop, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+ static const struct rlimit rl = { 0, 0 };
+ size_t N = 100;
+
+ ATF_REQUIRE(setrlimit(RLIMIT_CORE, &rl) == 0);
+ switch (pid = fork()) {
+ case 0:
+ sleep(100);
+ /*FALLTHROUGH*/
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ }
+
+ printf("Before loop of SIGSTOP/SIGCONT sequence %zu times\n", N);
+ while (N --> 0) {
+ ATF_REQUIRE(kill(pid, SIGSTOP) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WSTOPPED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(!WIFSIGNALED(st));
+ ATF_REQUIRE(WIFSTOPPED(st) && WSTOPSIG(st) == SIGSTOP);
+ ATF_REQUIRE(!WIFCONTINUED(st));
+ ATF_REQUIRE(si.si_status == SIGSTOP);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_STOPPED);
+
+ ATF_REQUIRE(kill(pid, SIGCONT) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WCONTINUED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(!WIFSIGNALED(st));
+ ATF_REQUIRE(WIFCONTINUED(st));
+ ATF_REQUIRE(!WIFSTOPPED(st));
+ ATF_REQUIRE(si.si_status == SIGCONT);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_CONTINUED);
+ }
+ ATF_REQUIRE(kill(pid, SIGQUIT) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(WIFSIGNALED(st) && WTERMSIG(st) == SIGQUIT);
+ ATF_REQUIRE(!WIFSTOPPED(st));
+ ATF_REQUIRE(!WIFCONTINUED(st));
+ ATF_REQUIRE(si.si_status == SIGQUIT);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_KILLED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, wait6_invalid);
+ ATF_TP_ADD_TC(tp, wait6_exited);
+ ATF_TP_ADD_TC(tp, wait6_terminated);
+ ATF_TP_ADD_TC(tp, wait6_coredumped);
+ ATF_TP_ADD_TC(tp, wait6_stop_and_go);
+ ATF_TP_ADD_TC(tp, wait6_stopgo_loop);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c b/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c
new file mode 100644
index 0000000..e5ddcbd
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c
@@ -0,0 +1,345 @@
+/* $NetBSD: t_wait_noproc.c,v 1.5 2016/11/09 17:50:19 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_wait_noproc.c,v 1.5 2016/11/09 17:50:19 kamil Exp $");
+
+#ifdef __FreeBSD__
+#include <sys/param.h> /* For NBBY -- it's in sys/types.h on NetBSD */
+#endif
+#include <sys/wait.h>
+#include <sys/resource.h>
+
+#include <errno.h>
+#include <stdio.h>
+
+#include <atf-c.h>
+
+#ifndef TWAIT_OPTION
+#define TWAIT_OPTION 0
+#endif
+
+#if TWAIT_OPTION == 0
+ATF_TC(wait);
+ATF_TC_HEAD(wait, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait(2) returns ECHILD for no child");
+}
+
+ATF_TC_BODY(wait, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD, wait(NULL) == -1);
+}
+#endif
+
+ATF_TC(waitpid);
+ATF_TC_HEAD(waitpid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that waitpid(2) returns ECHILD for WAIT_ANY and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(waitpid, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD, waitpid(WAIT_ANY, NULL, TWAIT_OPTION) == -1);
+}
+
+ATF_TC(waitid);
+ATF_TC_HEAD(waitid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that waitid(2) returns ECHILD for P_ALL and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(waitid, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD,
+ waitid(P_ALL, 0, NULL,
+ WTRAPPED | WEXITED | TWAIT_OPTION) == -1);
+}
+
+ATF_TC(wait3);
+ATF_TC_HEAD(wait3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait3(2) returns ECHILD for no child");
+}
+
+ATF_TC_BODY(wait3, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD, wait3(NULL, TWAIT_OPTION, NULL) == -1);
+}
+
+ATF_TC(wait4);
+ATF_TC_HEAD(wait4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait4(2) returns ECHILD for WAIT_ANY and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(wait4, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait4(WAIT_ANY, NULL, TWAIT_OPTION, NULL) == -1);
+}
+
+ATF_TC(wait6);
+ATF_TC_HEAD(wait6, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) returns ECHILD for P_ALL and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(wait6, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait6(P_ALL, 0, NULL,
+ WTRAPPED | WEXITED | TWAIT_OPTION, NULL, NULL) == -1);
+}
+
+/*
+ * Generator of valid combinations of options
+ * Usage: i = 0; while ((o = get_options_wait6(i++)) != -1) {}
+ */
+static int
+get_options6(size_t pos)
+{
+ int rv = 0;
+ size_t n;
+
+ /*
+ * waitid(2) must specify at least one of WEXITED, WUNTRACED,
+ * WSTOPPED, WTRAPPED or WCONTINUED. Single option WNOWAIT
+ * isn't valid.
+ */
+
+ const int matrix[] = {
+ WNOWAIT, /* First in order to blacklist it easily */
+ WEXITED,
+ WUNTRACED,
+ WSTOPPED, /* SUS compatibility, equal to WUNTRACED */
+ WTRAPPED,
+ WCONTINUED
+ };
+
+ const size_t M = (1 << __arraycount(matrix)) - 1;
+
+ /* Skip empty and sole WNOWAIT option */
+ pos+=2;
+
+ if (pos > M)
+ return -1;
+
+ for (n = 0; n < __arraycount(matrix); n++) {
+ if (pos & __BIT(n))
+ rv |= matrix[n];
+ }
+
+ return rv;
+}
+
+/*
+ * Generator of valid combinations of options
+ * Usage: i = 0; while ((o = get_options_wait4(i++)) != -1) {}
+ */
+static int
+get_options4(size_t pos)
+{
+ int rv = 0;
+ size_t n;
+
+ const int special[] = {
+ 0,
+#ifdef __NetBSD__
+ WALLSIG,
+ WALTSIG,
+ __WALL, /* Linux compatibility, equal to WALLSIG */
+ __WCLONE /* Linux compatibility, equal to WALTSIG */
+#endif
+ };
+
+ const int matrix[] = {
+ WNOWAIT,
+ WEXITED,
+ WUNTRACED,
+ WSTOPPED, /* SUS compatibility, equal to WUNTRACED */
+ WTRAPPED,
+ WCONTINUED
+ };
+
+ const size_t M = (1 << __arraycount(special)) - 1;
+
+ if (pos < __arraycount(special))
+ return special[pos];
+
+ pos -= __arraycount(special);
+
+ ++pos; /* Don't start with empty mask */
+
+ if (pos > M)
+ return -1;
+
+ for (n = 0; n < __arraycount(special); n++) {
+ if (pos & __BIT(n))
+ rv |= matrix[n];
+ }
+
+ return rv;
+}
+
+ATF_TC(waitpid_options);
+ATF_TC_HEAD(waitpid_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that waitpid(2) returns ECHILD for WAIT_ANY and valid "
+ "combination of options with%s WNOHANG",
+ TWAIT_OPTION == 0 ? "out" : "");
+}
+
+ATF_TC_BODY(waitpid_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options4(i++)) != -1) {
+ printf("Testing waitpid(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ waitpid(WAIT_ANY, NULL, o | TWAIT_OPTION) == -1);
+ }
+}
+
+ATF_TC(waitid_options);
+ATF_TC_HEAD(waitid_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that waitid(2) returns ECHILD for P_ALL and valid "
+ "combination of options with%s WNOHANG",
+ TWAIT_OPTION == 0 ? "out" : "");
+}
+
+ATF_TC_BODY(waitid_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options6(i++)) != -1) {
+ printf("Testing waitid(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ waitid(P_ALL, 0, NULL, o | TWAIT_OPTION) == -1);
+ }
+}
+
+ATF_TC(wait3_options);
+ATF_TC_HEAD(wait3_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait3(2) returns ECHILD for no child");
+}
+
+ATF_TC_BODY(wait3_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options4(i++)) != -1) {
+ printf("Testing wait3(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait3(NULL, o | TWAIT_OPTION, NULL) == -1);
+ }
+}
+
+ATF_TC(wait4_options);
+ATF_TC_HEAD(wait4_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait4(2) returns ECHILD for WAIT_ANY and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(wait4_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options4(i++)) != -1) {
+ printf("Testing wait4(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait4(WAIT_ANY, NULL, o | TWAIT_OPTION, NULL) == -1);
+ }
+}
+
+ATF_TC(wait6_options);
+ATF_TC_HEAD(wait6_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) returns ECHILD for P_ALL and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(wait6_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options6(i++)) != -1) {
+ printf("Testing wait6(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait6(P_ALL, 0, NULL, o | TWAIT_OPTION, NULL, NULL) == -1);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+#if TWAIT_OPTION == 0
+ ATF_TP_ADD_TC(tp, wait);
+#endif
+ ATF_TP_ADD_TC(tp, waitpid);
+ ATF_TP_ADD_TC(tp, waitid);
+ ATF_TP_ADD_TC(tp, wait3);
+ ATF_TP_ADD_TC(tp, wait4);
+ ATF_TP_ADD_TC(tp, wait6);
+
+ ATF_TP_ADD_TC(tp, waitpid_options);
+ ATF_TP_ADD_TC(tp, waitid_options);
+ ATF_TP_ADD_TC(tp, wait3_options);
+ ATF_TP_ADD_TC(tp, wait4_options);
+ ATF_TP_ADD_TC(tp, wait6_options);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc_wnohang.c b/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc_wnohang.c
new file mode 100644
index 0000000..45a9998
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc_wnohang.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_wait_noproc_wnohang.c,v 1.1 2016/11/06 15:03:30 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_OPTION WNOHANG
+#include "t_wait_noproc.c"
diff --git a/contrib/netbsd-tests/lib/libc/t_cdb.c b/contrib/netbsd-tests/lib/libc/t_cdb.c
index 5e88e65..97da4a3 100644
--- a/contrib/netbsd-tests/lib/libc/t_cdb.c
+++ b/contrib/netbsd-tests/lib/libc/t_cdb.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_cdb.c,v 1.1 2012/09/27 00:38:57 joerg Exp $ */
+/* $NetBSD: t_cdb.c,v 1.2 2017/01/10 22:24:29 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -32,9 +32,12 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_cdb.c,v 1.1 2012/09/27 00:38:57 joerg Exp $");
+__RCSID("$NetBSD: t_cdb.c,v 1.2 2017/01/10 22:24:29 christos Exp $");
#include <atf-c.h>
+
+#include <sys/stat.h>
+
#include <assert.h>
#include <cdbr.h>
#include <cdbw.h>
diff --git a/contrib/netbsd-tests/lib/libc/time/t_strptime.c b/contrib/netbsd-tests/lib/libc/time/t_strptime.c
index 99871ff..863df36e 100644
--- a/contrib/netbsd-tests/lib/libc/time/t_strptime.c
+++ b/contrib/netbsd-tests/lib/libc/time/t_strptime.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strptime.c,v 1.1 2011/01/13 00:14:10 pgoyette Exp $ */
+/* $NetBSD: t_strptime.c,v 1.12 2015/10/31 02:25:11 christos Exp $ */
/*-
* Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@@ -32,9 +32,11 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_strptime.c,v 1.1 2011/01/13 00:14:10 pgoyette Exp $");
+__RCSID("$NetBSD: t_strptime.c,v 1.12 2015/10/31 02:25:11 christos Exp $");
#include <time.h>
+#include <stdlib.h>
+#include <stdio.h>
#include <atf-c.h>
@@ -97,6 +99,124 @@ h_fail(const char *buf, const char *fmt)
#endif
}
+static struct {
+ const char *name;
+ long offs;
+} zt[] = {
+ { "Z", 0 },
+ { "UT", 0 },
+ { "UTC", 0 },
+ { "GMT", 0 },
+ { "EST", -18000 },
+ { "EDT", -14400 },
+ { "CST", -21600 },
+ { "CDT", -18000 },
+ { "MST", -25200 },
+ { "MDT", -21600 },
+ { "PST", -28800 },
+ { "PDT", -25200 },
+
+ { "VST", -1 },
+ { "VDT", -1 },
+
+ { "+03", 10800 },
+ { "-03", -10800 },
+ { "+0403", 14580 },
+ { "-0403", -14580 },
+ { "+04:03", 14580 },
+ { "-04:03", -14580 },
+ { "+14:00", 50400 },
+ { "-14:00", -50400 },
+ { "+23:59", 86340 },
+ { "-23:59", -86340 },
+
+ { "1", -1 },
+ { "03", -1 },
+ { "0304", -1 },
+ { "+1", -1 },
+ { "-203", -1 },
+ { "+12345", -1 },
+ { "+12:345", -1 },
+ { "+123:45", -1 },
+ { "+2400", -1 },
+ { "-2400", -1 },
+ { "+1060", -1 },
+ { "-1060", -1 },
+
+ { "A", -3600 },
+ { "B", -7200 },
+ { "C", -10800 },
+ { "D", -14400 },
+ { "E", -18000 },
+ { "F", -21600 },
+ { "G", -25200 },
+ { "H", -28800 },
+ { "I", -32400 },
+ { "L", -39600 },
+ { "M", -43200 },
+ { "N", 3600 },
+ { "O", 7200 },
+ { "P", 10800 },
+ { "Q", 14400 },
+ { "R", 18000 },
+ { "T", 25200 },
+ { "U", 28800 },
+ { "V", 32400 },
+ { "W", 36000 },
+ { "X", 39600 },
+ { "Y", 43200 },
+
+ { "J", -2 },
+
+ { "America/Los_Angeles", -28800 },
+ { "America/New_York", -18000 },
+ { "EST4EDT", -14400 },
+
+ { "Bogus", -1 },
+};
+
+static void
+ztest1(const char *name, const char *fmt, long value)
+{
+ struct tm tm;
+ char *rv;
+
+ memset(&tm, 0, sizeof(tm));
+ if ((rv = strptime(name, fmt, &tm)) == NULL)
+ tm.tm_gmtoff = -1;
+ else if (rv == name && fmt[1] == 'Z')
+ value = 0;
+
+ switch (value) {
+ case -2:
+ value = -timezone;
+ break;
+ case -1:
+ if (fmt[1] == 'Z')
+ value = 0;
+ break;
+ default:
+ break;
+ }
+
+ ATF_REQUIRE_MSG(tm.tm_gmtoff == value,
+ "strptime(\"%s\", \"%s\", &tm): "
+ "expected: tm.tm_gmtoff=%ld, got: tm.tm_gmtoff=%ld",
+ name, fmt, value, tm.tm_gmtoff);
+ printf("%s %s %ld\n", name, fmt, tm.tm_gmtoff);
+}
+
+static void
+ztest(const char *fmt)
+{
+ setenv("TZ", "US/Eastern", 1);
+ ztest1("GMT", fmt, 0);
+ ztest1("UTC", fmt, 0);
+ ztest1("US/Eastern", fmt, -18000);
+ for (size_t i = 0; i < __arraycount(zt); i++)
+ ztest1(zt[i].name, fmt, zt[i].offs);
+}
+
ATF_TC(common);
ATF_TC_HEAD(common, tc)
@@ -113,33 +233,17 @@ ATF_TC_BODY(common, tc)
#endif
h_pass("Tue Jan 20 23:27:46 1998", "%a %b %d %T %Y",
- 24, 46, 27, 23, 20, 0, 98, 2, -1);
+ 24, 46, 27, 23, 20, 0, 98, 2, 19);
h_pass("Tue Jan 20 23:27:46 1998", "%a %b %d %H:%M:%S %Y",
- 24, 46, 27, 23, 20, 0, 98, 2, -1);
+ 24, 46, 27, 23, 20, 0, 98, 2, 19);
h_pass("Tue Jan 20 23:27:46 1998", "%c",
- 24, 46, 27, 23, 20, 0, 98, 2, -1);
+ 24, 46, 27, 23, 20, 0, 98, 2, 19);
h_pass("Fri Mar 4 20:05:34 2005", "%a %b %e %H:%M:%S %Y",
- 24, 34, 5, 20, 4, 2, 105, 5, -1);
+ 24, 34, 5, 20, 4, 2, 105, 5, 62);
h_pass("5\t3 4 8pm:05:34 2005", "%w%n%m%t%d%n%k%p:%M:%S %Y",
- 21, 34, 5, 20, 4, 2, 105, 5, -1);
+ 21, 34, 5, 20, 4, 2, 105, 5, 62);
h_pass("Fri Mar 4 20:05:34 2005", "%c",
- 24, 34, 5, 20, 4, 2, 105, 5, -1);
-
- h_pass("x20y", "x%Cy", 4, -1, -1, -1, -1, -1, 100, -1, -1);
- h_pass("x84y", "x%yy", 4, -1, -1, -1, -1, -1, 84, -1, -1);
- h_pass("x2084y", "x%C%yy", 6, -1, -1, -1, -1, -1, 184, -1, -1);
- h_pass("x8420y", "x%y%Cy", 6, -1, -1, -1, -1, -1, 184, -1, -1);
- h_pass("%20845", "%%%C%y5", 6, -1, -1, -1, -1, -1, 184, -1, -1);
- h_fail("%", "%E%");
-
- h_pass("1980", "%Y", 4, -1, -1, -1, -1, -1, 80, -1, -1);
- h_pass("1980", "%EY", 4, -1, -1, -1, -1, -1, 80, -1, -1);
-
- h_pass("0", "%S", 1, 0, -1, -1, -1, -1, -1, -1, -1);
- h_pass("59", "%S", 2, 59, -1, -1, -1, -1, -1, -1, -1);
- h_pass("60", "%S", 2, 60, -1, -1, -1, -1, -1, -1, -1);
- h_pass("61", "%S", 2, 61, -1, -1, -1, -1, -1, -1, -1);
- h_fail("62", "%S");
+ 24, 34, 5, 20, 4, 2, 105, 5, 62);
}
ATF_TC(day);
@@ -147,7 +251,8 @@ ATF_TC(day);
ATF_TC_HEAD(day, tc)
{
- atf_tc_set_md_var(tc, "descr", "Checks strptime(3): day names");
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) day name conversions [aA]");
}
ATF_TC_BODY(day, tc)
@@ -202,12 +307,35 @@ ATF_TC_BODY(day, tc)
#endif
}
+ATF_TC(hour);
+
+ATF_TC_HEAD(hour, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) hour conversions [IH]");
+}
+
+ATF_TC_BODY(hour, tc)
+{
+
+ h_fail("00", "%I");
+ h_fail("13", "%I");
+
+ h_pass("00", "%H", 2, -1, -1, 0, -1, -1, -1, -1, -1);
+ h_pass("12", "%H", 2, -1, -1, 12, -1, -1, -1, -1, -1);
+ h_pass("23", "%H", 2, -1, -1, 23, -1, -1, -1, -1, -1);
+ h_fail("24", "%H");
+}
+
+
ATF_TC(month);
ATF_TC_HEAD(month, tc)
{
- atf_tc_set_md_var(tc, "descr", "Checks strptime(3): month names");
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) month name conversions [bB]");
}
ATF_TC_BODY(month, tc)
@@ -270,12 +398,89 @@ ATF_TC_BODY(month, tc)
h_pass("septembe", "%B", 3, -1, -1, -1, -1, 8, -1, -1, -1);
}
+ATF_TC(seconds);
+
+ATF_TC_HEAD(seconds, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) seconds conversions [S]");
+}
+
+ATF_TC_BODY(seconds, tc)
+{
+
+ h_pass("0", "%S", 1, 0, -1, -1, -1, -1, -1, -1, -1);
+ h_pass("59", "%S", 2, 59, -1, -1, -1, -1, -1, -1, -1);
+ h_pass("60", "%S", 2, 60, -1, -1, -1, -1, -1, -1, -1);
+ h_pass("61", "%S", 2, 61, -1, -1, -1, -1, -1, -1, -1);
+ h_fail("62", "%S");
+}
+
+ATF_TC(year);
+
+ATF_TC_HEAD(year, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) century/year conversions [CyY]");
+}
+
+ATF_TC_BODY(year, tc)
+{
+
+ h_pass("x20y", "x%Cy", 4, -1, -1, -1, -1, -1, 100, -1, -1);
+ h_pass("x84y", "x%yy", 4, -1, -1, -1, -1, -1, 84, -1, -1);
+ h_pass("x2084y", "x%C%yy", 6, -1, -1, -1, -1, -1, 184, -1, -1);
+ h_pass("x8420y", "x%y%Cy", 6, -1, -1, -1, -1, -1, 184, -1, -1);
+ h_pass("%20845", "%%%C%y5", 6, -1, -1, -1, -1, -1, 184, -1, -1);
+ h_fail("%", "%E%");
+
+ h_pass("1980", "%Y", 4, -1, -1, -1, -1, -1, 80, -1, -1);
+ h_pass("1980", "%EY", 4, -1, -1, -1, -1, -1, 80, -1, -1);
+}
+
+ATF_TC(zone);
+
+ATF_TC_HEAD(zone, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) timezone conversion [z]");
+}
+
+
+ATF_TC_BODY(zone, tc)
+{
+ ztest("%z");
+}
+
+ATF_TC(Zone);
+
+ATF_TC_HEAD(Zone, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) timezone conversion [Z]");
+}
+
+
+ATF_TC_BODY(Zone, tc)
+{
+ ztest("%z");
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, common);
ATF_TP_ADD_TC(tp, day);
+ ATF_TP_ADD_TC(tp, hour);
ATF_TP_ADD_TC(tp, month);
+ ATF_TP_ADD_TC(tp, seconds);
+ ATF_TP_ADD_TC(tp, year);
+ ATF_TP_ADD_TC(tp, zone);
+ ATF_TP_ADD_TC(tp, Zone);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y b/contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y
index 37c813f..75aaf62 100644
--- a/contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y
+++ b/contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: testlang_parse.y,v 1.13 2012/09/19 11:51:56 blymn Exp $ */
+/* $NetBSD: testlang_parse.y,v 1.14 2015/01/04 20:19:46 christos Exp $ */
/*-
* Copyright 2009 Brett Lymn <blymn@NetBSD.org>
@@ -39,7 +39,8 @@
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
-#include <sys/syslimits.h>
+#include <stdlib.h>
+#include <limits.h>
#include <time.h>
#include <vis.h>
#include <stdint.h>
diff --git a/contrib/netbsd-tests/lib/libm/t_casinh.c b/contrib/netbsd-tests/lib/libm/t_casinh.c
new file mode 100644
index 0000000..f9f93c3
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_casinh.c
@@ -0,0 +1,81 @@
+/* $NetBSD: t_casinh.c,v 1.2 2016/09/20 17:19:28 christos Exp $ */
+
+/*
+ * Written by Maya Rashish
+ * Public domain.
+ *
+ * Testing special values of casinh
+ * Values from ISO/IEC 9899:201x G.6.2.2
+ */
+
+#include <atf-c.h>
+#include <complex.h>
+#include <math.h>
+
+#define RE(z) (((double *)(&z))[0])
+#define IM(z) (((double *)(&z))[1])
+
+static const struct {
+ double input_re;
+ double input_im;
+ double result_re;
+ double result_im;
+} values[] = {
+ { +0, +0, +0, +0},
+ { +5.032E3, +INFINITY, +INFINITY, +M_PI/2},
+ { +INFINITY, +5.023E3, +INFINITY, +0},
+ { +INFINITY, +INFINITY, +INFINITY, +M_PI/4},
+#ifdef __HAVE_NANF
+ { +INFINITY, +NAN, +INFINITY, +NAN},
+ { +5.032E3, +NAN, +NAN, +NAN}, /* + FE_INVALID optionally raised */
+ { +NAN, +0, +NAN, +0},
+ { +NAN, -5.023E3, +NAN, +NAN}, /* + FE_INVALID optionally raised */
+ { +NAN, +INFINITY, +INFINITY, +NAN}, /* sign of real part of result unspecified */
+ { +NAN, +NAN, +NAN, +NAN},
+#endif
+};
+
+#ifdef __HAVE_NANF
+#define both_nan(a,b) (isnan(a) && isnan(b))
+#else
+#define both_nan(a,b) 0
+#endif
+
+#define crude_equality(a,b) ((a == b) || both_nan(a,b))
+
+#define ATF_COMPLEX_EQUAL(a,b) do { \
+ complex double ci = casinh(a); \
+ ATF_CHECK_MSG(crude_equality(creal(ci),creal(b)) && \
+ crude_equality(cimag(ci), cimag(b)), \
+ "for casinh([%g,%g]) = [%g,%g] != [%g,%g]", \
+ creal(a), cimag(a), creal(ci), cimag(ci), creal(b), cimag(b)); \
+} while (0/*CONSTCOND*/)
+
+
+ATF_TC(casinh);
+ATF_TC_HEAD(casinh, tc)
+{
+ atf_tc_set_md_var(tc, "descr","Check casinh family - special values");
+}
+
+ATF_TC_BODY(casinh, tc)
+{
+ complex double input;
+ complex double result;
+ unsigned int i;
+ for (i = 0; i < __arraycount(values); i++) {
+ RE(input) = values[i].input_re;
+ IM(input) = values[i].input_im;
+ RE(result) = values[i].result_re;
+ IM(result) = values[i].result_im;
+ ATF_COMPLEX_EQUAL(input, result);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, casinh);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libm/t_exp.c b/contrib/netbsd-tests/lib/libm/t_exp.c
index 7a8e9f8..0eb6412 100644
--- a/contrib/netbsd-tests/lib/libm/t_exp.c
+++ b/contrib/netbsd-tests/lib/libm/t_exp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_exp.c,v 1.7 2014/03/17 11:08:11 martin Exp $ */
+/* $NetBSD: t_exp.c,v 1.8 2014/10/07 16:53:44 gson Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -145,47 +145,40 @@ ATF_LIBM_TEST(exp2_values, "Test exp2(x) is correct for some x")
{
static const struct {
double x;
- double y;
+ double d_y;
+ float f_y;
double d_eps;
double f_eps;
} v[] = {
#if __DBL_MAX_EXP__ > 128
/* The largest double constant */
- { 0x1.fffffffffffffp9, 0x1.ffffffffffd3ap1023,
+ { 0x1.fffffffffffffp9, 0x1.ffffffffffd3ap1023, 0.00,
0x1p969, 0.0 },
/* The largest float constant */
- { 0x1.fffffep6, 0x1.ffff4ep+127, 6e30, 0.0 },
+ { 0x1.fffffep6, 0x1.ffff4ep+127, 0x1.ffff4ep+127, 6e30, 0.0 },
#endif
#ifdef T_LIBM_PLUS_INF
- { T_LIBM_PLUS_INF, T_LIBM_PLUS_INF, 0.0, 0.0 },
+ { T_LIBM_PLUS_INF, T_LIBM_PLUS_INF, T_LIBM_PLUS_INF, 0.0, 0.0 },
#endif
/* The few values from the old tests */
/* Results from i386/amd64, d_eps needed on i386 */
- { 1.1, 0x1.125fbee250664p+1, 0x1p-52, 0x1.8p-22 },
- { 2.2, 0x1.2611186bae675p+2, 0x1p-51, 0x1.8p-21 },
- { 3.3, 0x1.3b2c47bff8328p+3, 0x1p-50, 0x1.8p-20 },
- { 4.4, 0x1.51cb453b9536ep+4, 0x1p-49, 0x1.8p-19 },
- { 5.5, 0x1.6a09e667f3bcdp+5, 0x1p-48, 0x1.8p-18 },
- { 6.6, 0x1.8406003b2ae5bp+6, 0x1p-47, 0x1.8p-17 },
- /*
- * These two currently fail for 'float'.
- * 8.8 is definitely out by more than it should be.
- */
- { 7.7, 0x1.9fdf8bcce533ep+7, 0x1p-46, 0x1.8p-16 },
- { 8.8, 0x1.bdb8cdadbe124p+8, 0x1p-45, 0x1.8p-15 },
+ /* f_y values calculated using py-mpmath */
+ { 1.1, 0x1.125fbee250664p+1, 0x1.125fc0p+1, 0x1p-52, 0x1.8p-22 },
+ { 2.2, 0x1.2611186bae675p+2, 0x1.26111ap+2, 0x1p-51, 0x1.8p-21 },
+ { 3.3, 0x1.3b2c47bff8328p+3, 0x1.3b2c48p+3, 0x1p-50, 0x1.8p-20 },
+ { 4.4, 0x1.51cb453b9536ep+4, 0x1.51cb46p+4, 0x1p-49, 0x1.8p-19 },
+ { 5.5, 0x1.6a09e667f3bcdp+5, 0x1.6a09e6p+5, 0x1p-48, 0x1.8p-18 },
+ { 6.6, 0x1.8406003b2ae5bp+6, 0x1.8405fep+6, 0x1p-47, 0x1.8p-17 },
+ { 7.7, 0x1.9fdf8bcce533ep+7, 0x1.9fdf88p+7, 0x1p-46, 0x1.8p-16 },
+ { 8.8, 0x1.bdb8cdadbe124p+8, 0x1.bdb8d2p+8, 0x1p-45, 0x1.8p-15 },
};
unsigned int i;
-#ifdef __FreeBSD__
- atf_tc_expect_fail("Some of the cases produce failures on FreeBSD "
- "due to the error epsilon being so small");
-#endif
-
for (i = 0; i < __arraycount(v); i++) {
- T_LIBM_CHECK(i, exp2, v[i].x, v[i].y, v[i].d_eps);
+ T_LIBM_CHECK(i, exp2, v[i].x, v[i].d_y, v[i].d_eps);
if (i > 1)
- T_LIBM_CHECK(i, exp2f, v[i].x, v[i].y, v[i].f_eps);
+ T_LIBM_CHECK(i, exp2f, v[i].x, v[i].f_y, v[i].f_eps);
}
}
diff --git a/contrib/netbsd-tests/lib/libm/t_fe_round.c b/contrib/netbsd-tests/lib/libm/t_fe_round.c
new file mode 100644
index 0000000..fe805b4
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_fe_round.c
@@ -0,0 +1,124 @@
+/*
+ * Written by Maya Rashish <maya@NetBSD.org>
+ * Public domain.
+ *
+ * Testing IEEE-754 rounding modes (and lrint)
+ */
+
+#include <atf-c.h>
+#include <fenv.h>
+#ifdef __HAVE_FENV
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/*#pragma STDC FENV_ACCESS ON gcc?? */
+
+#define INT 9223L
+
+#define EPSILON 0.001
+
+static const struct {
+ int round_mode;
+ double input;
+ long int expected;
+} values[] = {
+ { FE_DOWNWARD, 3.7, 3},
+ { FE_DOWNWARD, -3.7, -4},
+ { FE_DOWNWARD, +0, 0},
+ { FE_DOWNWARD, -INT-0.01, -INT-1},
+ { FE_DOWNWARD, +INT-0.01, INT-1},
+ { FE_DOWNWARD, -INT+0.01, -INT},
+ { FE_DOWNWARD, +INT+0.01, INT},
+#if 0 /* cpu bugs? */
+ { FE_DOWNWARD, -0, -1},
+
+ { FE_UPWARD, +0, 1},
+#endif
+ { FE_UPWARD, -0, 0},
+ { FE_UPWARD, -123.7, -123},
+ { FE_UPWARD, 123.999, 124},
+ { FE_UPWARD, -INT-0.01, -INT},
+ { FE_UPWARD, +INT-0.01, INT},
+ { FE_UPWARD, -INT+0.01, -INT+1},
+ { FE_UPWARD, +INT+0.01, INT+1},
+
+ { FE_TOWARDZERO, 1.99, 1},
+ { FE_TOWARDZERO, -1.99, -1},
+ { FE_TOWARDZERO, 0.2, 0},
+ { FE_TOWARDZERO, INT+0.01, INT},
+ { FE_TOWARDZERO, INT-0.01, INT - 1},
+ { FE_TOWARDZERO, -INT+0.01, -INT + 1},
+ { FE_TOWARDZERO, +0, 0},
+ { FE_TOWARDZERO, -0, 0},
+
+ { FE_TONEAREST, -INT-0.01, -INT},
+ { FE_TONEAREST, +INT-0.01, INT},
+ { FE_TONEAREST, -INT+0.01, -INT},
+ { FE_TONEAREST, +INT+0.01, INT},
+ { FE_TONEAREST, -INT-0.501, -INT-1},
+ { FE_TONEAREST, +INT-0.501, INT-1},
+ { FE_TONEAREST, -INT+0.501, -INT+1},
+ { FE_TONEAREST, +INT+0.501, INT+1},
+ { FE_TONEAREST, +0, 0},
+ { FE_TONEAREST, -0, 0},
+};
+
+ATF_TC(fe_round);
+ATF_TC_HEAD(fe_round, tc)
+{
+ atf_tc_set_md_var(tc, "descr","Checking IEEE 754 rounding modes using lrint");
+}
+
+ATF_TC_BODY(fe_round, tc)
+{
+ long int received;
+
+ for (unsigned int i = 0; i < __arraycount(values); i++) {
+ fesetround(values[i].round_mode);
+
+ received = lrint(values[i].input);
+ ATF_CHECK_MSG(
+ (labs(received - values[i].expected) < EPSILON),
+ "lrint rounding wrong, difference too large\n"
+ "input: %f (index %d): got %ld, expected %ld\n",
+ values[i].input, i, received, values[i].expected);
+
+ /* Do we get the same rounding mode out? */
+ ATF_CHECK_MSG(
+ (fegetround() == values[i].round_mode),
+ "Didn't get the same rounding mode out!\n"
+ "(index %d) fed in %d rounding mode, got %d out\n",
+ i, fegetround(), values[i].round_mode);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, fe_round);
+
+ return atf_no_error();
+}
+#else
+ATF_TC(t_nofe_round);
+
+ATF_TC_HEAD(t_nofe_round, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "dummy test case - no fenv.h support");
+}
+
+
+ATF_TC_BODY(t_nofe_round, tc)
+{
+ atf_tc_skip("no fenv.h support on this architecture");
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, t_nofe_round);
+ return atf_no_error();
+}
+
+#endif
diff --git a/contrib/netbsd-tests/lib/libm/t_fenv.c b/contrib/netbsd-tests/lib/libm/t_fenv.c
new file mode 100644
index 0000000..5445036
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_fenv.c
@@ -0,0 +1,220 @@
+/* $NetBSD: t_fenv.c,v 1.3 2015/12/22 14:20:59 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Martin Husemann.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_fenv.c,v 1.3 2015/12/22 14:20:59 christos Exp $");
+
+#include <atf-c.h>
+
+#include <fenv.h>
+#ifdef __HAVE_FENV
+
+#include <ieeefp.h>
+#include <stdlib.h>
+
+
+#if __arm__ && !__SOFTFP__
+ /*
+ * Some NEON fpus do not implement IEEE exception handling,
+ * skip these tests if running on them and compiled for
+ * hard float.
+ */
+#define FPU_EXC_PREREQ() \
+ if (0 == fpsetmask(fpsetmask(FP_X_INV))) \
+ atf_tc_skip("FPU does not implement exception handling");
+
+ /*
+ * Same as above: some don't allow configuring the rounding mode.
+ */
+#define FPU_RND_PREREQ() \
+ if (0 == fpsetround(fpsetround(FP_RZ))) \
+ atf_tc_skip("FPU does not implement configurable " \
+ "rounding modes");
+#endif
+
+#ifndef FPU_EXC_PREREQ
+#define FPU_EXC_PREREQ() /* nothing */
+#endif
+#ifndef FPU_RND_PREREQ
+#define FPU_RND_PREREQ() /* nothing */
+#endif
+
+
+ATF_TC(fegetround);
+
+ATF_TC_HEAD(fegetround, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "verify the fegetround() function agrees with the legacy "
+ "fpsetround");
+}
+
+ATF_TC_BODY(fegetround, tc)
+{
+ FPU_RND_PREREQ();
+
+ fpsetround(FP_RZ);
+ ATF_CHECK(fegetround() == FE_TOWARDZERO);
+ fpsetround(FP_RM);
+ ATF_CHECK(fegetround() == FE_DOWNWARD);
+ fpsetround(FP_RN);
+ ATF_CHECK(fegetround() == FE_TONEAREST);
+ fpsetround(FP_RP);
+ ATF_CHECK(fegetround() == FE_UPWARD);
+}
+
+ATF_TC(fesetround);
+
+ATF_TC_HEAD(fesetround, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "verify the fesetround() function agrees with the legacy "
+ "fpgetround");
+}
+
+ATF_TC_BODY(fesetround, tc)
+{
+ FPU_RND_PREREQ();
+
+ fesetround(FE_TOWARDZERO);
+ ATF_CHECK(fpgetround() == FP_RZ);
+ fesetround(FE_DOWNWARD);
+ ATF_CHECK(fpgetround() == FP_RM);
+ fesetround(FE_TONEAREST);
+ ATF_CHECK(fpgetround() == FP_RN);
+ fesetround(FE_UPWARD);
+ ATF_CHECK(fpgetround() == FP_RP);
+}
+
+ATF_TC(fegetexcept);
+
+ATF_TC_HEAD(fegetexcept, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "verify the fegetexcept() function agrees with the legacy "
+ "fpsetmask()");
+}
+
+ATF_TC_BODY(fegetexcept, tc)
+{
+ FPU_EXC_PREREQ();
+
+ fpsetmask(0);
+ ATF_CHECK(fegetexcept() == 0);
+
+ fpsetmask(FP_X_INV|FP_X_DZ|FP_X_OFL|FP_X_UFL|FP_X_IMP);
+ ATF_CHECK(fegetexcept() == (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW
+ |FE_UNDERFLOW|FE_INEXACT));
+
+ fpsetmask(FP_X_INV);
+ ATF_CHECK(fegetexcept() == FE_INVALID);
+
+ fpsetmask(FP_X_DZ);
+ ATF_CHECK(fegetexcept() == FE_DIVBYZERO);
+
+ fpsetmask(FP_X_OFL);
+ ATF_CHECK(fegetexcept() == FE_OVERFLOW);
+
+ fpsetmask(FP_X_UFL);
+ ATF_CHECK(fegetexcept() == FE_UNDERFLOW);
+
+ fpsetmask(FP_X_IMP);
+ ATF_CHECK(fegetexcept() == FE_INEXACT);
+}
+
+ATF_TC(feenableexcept);
+
+ATF_TC_HEAD(feenableexcept, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "verify the feenableexcept() function agrees with the legacy "
+ "fpgetmask()");
+}
+
+ATF_TC_BODY(feenableexcept, tc)
+{
+ FPU_EXC_PREREQ();
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ ATF_CHECK(fpgetmask() == 0);
+
+ feenableexcept(FE_UNDERFLOW);
+ ATF_CHECK(fpgetmask() == FP_X_UFL);
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(FE_OVERFLOW);
+ ATF_CHECK(fpgetmask() == FP_X_OFL);
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(FE_DIVBYZERO);
+ ATF_CHECK(fpgetmask() == FP_X_DZ);
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(FE_INEXACT);
+ ATF_CHECK(fpgetmask() == FP_X_IMP);
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(FE_INVALID);
+ ATF_CHECK(fpgetmask() == FP_X_INV);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, fegetround);
+ ATF_TP_ADD_TC(tp, fesetround);
+ ATF_TP_ADD_TC(tp, fegetexcept);
+ ATF_TP_ADD_TC(tp, feenableexcept);
+
+ return atf_no_error();
+}
+
+#else /* no fenv.h support */
+
+ATF_TC(t_nofenv);
+
+ATF_TC_HEAD(t_nofenv, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "dummy test case - no fenv.h support");
+}
+
+
+ATF_TC_BODY(t_nofenv, tc)
+{
+ atf_tc_skip("no fenv.h support on this architecture");
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, t_nofenv);
+ return atf_no_error();
+}
+
+#endif
diff --git a/contrib/netbsd-tests/lib/libm/t_fmod.c b/contrib/netbsd-tests/lib/libm/t_fmod.c
index 837e9b2..2a221f5 100644
--- a/contrib/netbsd-tests/lib/libm/t_fmod.c
+++ b/contrib/netbsd-tests/lib/libm/t_fmod.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fmod.c,v 1.2 2014/02/27 17:26:02 joerg Exp $ */
+/* $NetBSD: t_fmod.c,v 1.3 2015/01/03 14:23:53 gson Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -33,6 +33,8 @@
#include <float.h>
#include <math.h>
+#include "isqemu.h"
+
ATF_TC(fmod);
ATF_TC_HEAD(fmod, tc)
{
@@ -41,6 +43,11 @@ ATF_TC_HEAD(fmod, tc)
ATF_TC_BODY(fmod, tc)
{
+#ifdef __NetBSD__
+ if (isQEMU())
+ atf_tc_expect_fail("PR misc/44767");
+#endif
+
ATF_CHECK(fmodf(2.0, 1.0) == 0);
ATF_CHECK(fmod(2.0, 1.0) == 0);
#if !defined(__FreeBSD__) || LDBL_PREC != 53
diff --git a/contrib/netbsd-tests/lib/libm/t_hypot.c b/contrib/netbsd-tests/lib/libm/t_hypot.c
new file mode 100644
index 0000000..deb7e86
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_hypot.c
@@ -0,0 +1,81 @@
+/* $NetBSD: t_hypot.c,v 1.1 2016/01/24 20:26:47 gson Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <atf-c.h>
+#include <math.h>
+
+ATF_TC(hypot_integer);
+ATF_TC_HEAD(hypot_integer, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test hypot with integer args");
+}
+
+ATF_TC_BODY(hypot_integer, tc)
+{
+ /* volatile so hypotf() won't be evaluated at compile time */
+ volatile double a = 5;
+ volatile double b = 12;
+ ATF_CHECK(hypot(a, b) == 13.0);
+}
+
+ATF_TC(hypotf_integer);
+ATF_TC_HEAD(hypotf_integer, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test hypotf with integer args");
+}
+
+ATF_TC_BODY(hypotf_integer, tc)
+{
+ volatile float a = 5;
+ volatile float b = 12;
+ ATF_CHECK(hypotf(a, b) == 13.0f);
+}
+
+ATF_TC(pr50698);
+ATF_TC_HEAD(pr50698, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check for the bug of PR 50698");
+}
+
+ATF_TC_BODY(pr50698, tc)
+{
+ volatile float a = 1e-18f;
+ float val = hypotf(a, a);
+ ATF_CHECK(!isinf(val));
+ ATF_CHECK(!isnan(val));
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, hypot_integer);
+ ATF_TP_ADD_TC(tp, hypotf_integer);
+ ATF_TP_ADD_TC(tp, pr50698);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libm/t_ilogb.c b/contrib/netbsd-tests/lib/libm/t_ilogb.c
new file mode 100644
index 0000000..b3c2126
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_ilogb.c
@@ -0,0 +1,130 @@
+/* $NetBSD: t_ilogb.c,v 1.6 2016/08/26 08:01:55 christos Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Maya Rashish.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef __FreeBSD__
+#include <limits.h>
+#endif
+#include <atf-c.h>
+#include <fenv.h>
+#include <math.h>
+
+#ifndef __HAVE_FENV
+
+# define ATF_CHECK_RAISED_INVALID
+# define ATF_CHECK_RAISED_NOTHING
+
+#else
+# define ATF_CHECK_RAISED_INVALID do { \
+ int r = fetestexcept(FE_ALL_EXCEPT); \
+ ATF_CHECK_MSG(r == FE_INVALID, "r=%#x != %#x\n", r, FE_INVALID); \
+ (void)feclearexcept(FE_ALL_EXCEPT); \
+} while (/*CONSTCOND*/0)
+
+# define ATF_CHECK_RAISED_NOTHING do { \
+ int r = fetestexcept(FE_ALL_EXCEPT); \
+ ATF_CHECK_MSG(r == 0, "r=%#x != 0\n", r); \
+ (void)feclearexcept(FE_ALL_EXCEPT); \
+} while (/*CONSTCOND*/0)
+#endif
+
+ATF_TC(ilogb);
+ATF_TC_HEAD(ilogb, tc)
+{
+ atf_tc_set_md_var(tc, "descr","Check ilogb family");
+}
+
+ATF_TC_BODY(ilogb, tc)
+{
+
+ ATF_CHECK(ilogbf(0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+
+ ATF_CHECK(ilogbf(-0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(-0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(-0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+
+ ATF_CHECK(ilogbf(INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+
+ ATF_CHECK(ilogbf(-INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(-INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(-INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+
+ ATF_CHECK(ilogbf(1024) == 10);
+ ATF_CHECK_RAISED_NOTHING;
+ ATF_CHECK(ilogb(1024) == 10);
+ ATF_CHECK_RAISED_NOTHING;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(1024) == 10);
+ ATF_CHECK_RAISED_NOTHING;
+#endif
+
+#ifndef __vax__
+ ATF_CHECK(ilogbf(NAN) == FP_ILOGBNAN);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(NAN) == FP_ILOGBNAN);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(NAN) == FP_ILOGBNAN);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+#endif
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, ilogb);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libm/t_ldexp.c b/contrib/netbsd-tests/lib/libm/t_ldexp.c
index eaf8a4b..251f2ae 100644
--- a/contrib/netbsd-tests/lib/libm/t_ldexp.c
+++ b/contrib/netbsd-tests/lib/libm/t_ldexp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ldexp.c,v 1.14 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_ldexp.c,v 1.16 2016/08/25 00:32:31 maya Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_ldexp.c,v 1.14 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_ldexp.c,v 1.16 2016/08/25 00:32:31 maya Exp $");
#include <sys/param.h>
@@ -96,10 +96,12 @@ struct ldexp_test ldexp_overflow[] = {
{ 1.0, 1023, 1, " inf" },
{ 1.0, -1022, 2046, " inf" },
{ 1.0, 1025, SKIP, " inf" },
+ { 2.0, INT_MAX,SKIP, " inf" },
{ -1.0, 1024, SKIP, " -inf" },
{ -1.0, 1023, 1, " -inf" },
{ -1.0, -1022, 2046, " -inf" },
{ -1.0, 1025, SKIP, " -inf" },
+ { -2.0, INT_MAX,SKIP, " -inf" },
{ 0, 0, 0, NULL }
};
@@ -170,10 +172,8 @@ run_test(struct ldexp_test *table)
v = ldexp(table->x, table->exp1);
- if (table->exp2 == SKIP)
- continue;
-
- v = ldexp(v, table->exp2);
+ if (table->exp2 != SKIP)
+ v = ldexp(v, table->exp2);
(void)snprintf(outbuf, sizeof(outbuf), FORMAT, v);
diff --git a/contrib/netbsd-tests/lib/libm/t_log.c b/contrib/netbsd-tests/lib/libm/t_log.c
index 0164233..756efcf 100644
--- a/contrib/netbsd-tests/lib/libm/t_log.c
+++ b/contrib/netbsd-tests/lib/libm/t_log.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_log.c,v 1.12 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_log.c,v 1.13 2015/02/09 19:39:48 martin Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_log.c,v 1.12 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_log.c,v 1.13 2015/02/09 19:39:48 martin Exp $");
#include <atf-c.h>
@@ -186,10 +186,6 @@ ATF_TC_BODY(log10f_inf_pos, tc)
{
const float x = 1.0L / 0.0L;
-#if defined(__alpha__)
- atf_tc_expect_fail("PR port-alpha/46301");
-#endif
-
ATF_CHECK(log10f(x) == x);
}
@@ -562,10 +558,6 @@ ATF_TC_BODY(log2f_inf_pos, tc)
{
const float x = 1.0L / 0.0L;
-#if defined(__alpha__)
- atf_tc_expect_fail("PR port-alpha/46301");
-#endif
-
ATF_CHECK(log2f(x) == x);
}
@@ -766,10 +758,6 @@ ATF_TC_BODY(logf_inf_pos, tc)
{
const float x = 1.0L / 0.0L;
-#if defined(__alpha__)
- atf_tc_expect_fail("PR port-alpha/46301");
-#endif
-
ATF_CHECK(logf(x) == x);
}
diff --git a/contrib/netbsd-tests/lib/libm/t_pow.c b/contrib/netbsd-tests/lib/libm/t_pow.c
index a8ae6f0..fbdb984 100644
--- a/contrib/netbsd-tests/lib/libm/t_pow.c
+++ b/contrib/netbsd-tests/lib/libm/t_pow.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_pow.c,v 1.3 2014/03/03 10:39:08 martin Exp $ */
+/* $NetBSD: t_pow.c,v 1.4 2015/09/08 05:24:27 dholland Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_pow.c,v 1.3 2014/03/03 10:39:08 martin Exp $");
+__RCSID("$NetBSD: t_pow.c,v 1.4 2015/09/08 05:24:27 dholland Exp $");
#include <atf-c.h>
#include <math.h>
@@ -284,21 +284,18 @@ ATF_TC_BODY(pow_zero_x, tc)
z = pow(+0.0, -4.0);
if (z != HUGE_VAL) {
- atf_tc_expect_fail("PR port-amd64/45391");
atf_tc_fail_nonfatal("pow(+0.0, -4.0) != HUGE_VAL");
}
z = pow(-0.0, -4.0);
if (z != HUGE_VAL) {
- atf_tc_expect_fail("PR port-amd64/45391");
atf_tc_fail_nonfatal("pow(-0.0, -4.0) != HUGE_VAL");
}
z = pow(+0.0, -5.0);
if (z != HUGE_VAL) {
- atf_tc_expect_fail("PR port-amd64/45391");
atf_tc_fail_nonfatal("pow(+0.0, -5.0) != HUGE_VAL");
}
diff --git a/contrib/netbsd-tests/lib/libm/t_precision.c b/contrib/netbsd-tests/lib/libm/t_precision.c
index c01deba..df2d8a3 100644
--- a/contrib/netbsd-tests/lib/libm/t_precision.c
+++ b/contrib/netbsd-tests/lib/libm/t_precision.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_precision.c,v 1.2 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_precision.c,v 1.3 2016/08/27 10:07:05 christos Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_precision.c,v 1.2 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_precision.c,v 1.3 2016/08/27 10:07:05 christos Exp $");
#include <atf-c.h>
@@ -45,7 +45,9 @@ ATF_TC_HEAD(t_precision, tc)
}
volatile double x = 1;
+#if __HAVE_LONG_DOUBLE
volatile long double y = 1;
+#endif
ATF_TC_BODY(t_precision, tc)
{
@@ -58,7 +60,7 @@ ATF_TC_BODY(t_precision, tc)
x += DBL_EPSILON;
ATF_CHECK(x == 2.0);
-#if !defined(__FreeBSD__) || !defined(__i386__)
+#if __HAVE_LONG_DOUBLE
y += LDBL_EPSILON;
ATF_CHECK(y != 1.0L);
y -= 1;
diff --git a/contrib/netbsd-tests/lib/libpthread/h_common.h b/contrib/netbsd-tests/lib/libpthread/h_common.h
index f4d03bc..2e8b0a1 100644
--- a/contrib/netbsd-tests/lib/libpthread/h_common.h
+++ b/contrib/netbsd-tests/lib/libpthread/h_common.h
@@ -9,4 +9,10 @@
ATF_REQUIRE_MSG(ret == 0, "%s: %s", #x, strerror(ret)); \
} while (0)
+#define PTHREAD_REQUIRE_STATUS(x, v) \
+ do { \
+ int ret = (x); \
+ ATF_REQUIRE_MSG(ret == (v), "%s: %s", #x, strerror(ret)); \
+ } while (0)
+
#endif // H_COMMON_H
diff --git a/contrib/netbsd-tests/lib/libpthread/t_cond.c b/contrib/netbsd-tests/lib/libpthread/t_cond.c
index 9f33c9e..83a3833 100644
--- a/contrib/netbsd-tests/lib/libpthread/t_cond.c
+++ b/contrib/netbsd-tests/lib/libpthread/t_cond.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_cond.c,v 1.6 2014/09/03 16:23:24 gson Exp $ */
+/* $NetBSD: t_cond.c,v 1.7 2016/07/03 14:24:59 christos Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_cond.c,v 1.6 2014/09/03 16:23:24 gson Exp $");
+__RCSID("$NetBSD: t_cond.c,v 1.7 2016/07/03 14:24:59 christos Exp $");
#include <sys/time.h>
@@ -547,6 +547,26 @@ ATF_TC_BODY(destroy_after_cancel, tc)
PTHREAD_REQUIRE(pthread_mutex_destroy(&mutex));
}
+ATF_TC(condattr);
+ATF_TC_HEAD(condattr, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks Condattr");
+}
+ATF_TC_BODY(condattr, tc)
+{
+ pthread_condattr_t condattr;
+ clockid_t clockid;
+
+ PTHREAD_REQUIRE(pthread_condattr_init(&condattr));
+ PTHREAD_REQUIRE(pthread_condattr_setclock(&condattr, CLOCK_REALTIME));
+ PTHREAD_REQUIRE(pthread_condattr_getclock(&condattr, &clockid));
+ ATF_REQUIRE_EQ(clockid, CLOCK_REALTIME);
+
+ PTHREAD_REQUIRE(pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC));
+ PTHREAD_REQUIRE(pthread_condattr_getclock(&condattr, &clockid));
+ ATF_REQUIRE_EQ(clockid, CLOCK_MONOTONIC);
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -558,6 +578,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, broadcast);
ATF_TP_ADD_TC(tp, bogus_timedwaits);
ATF_TP_ADD_TC(tp, destroy_after_cancel);
+ ATF_TP_ADD_TC(tp, condattr);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libpthread/t_mutex.c b/contrib/netbsd-tests/lib/libpthread/t_mutex.c
index eb371fa..b8d60e6 100644
--- a/contrib/netbsd-tests/lib/libpthread/t_mutex.c
+++ b/contrib/netbsd-tests/lib/libpthread/t_mutex.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mutex.c,v 1.7 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_mutex.c,v 1.14 2016/10/31 23:51:20 christos Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -29,12 +29,20 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_mutex.c,v 1.7 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_mutex.c,v 1.14 2016/10/31 23:51:20 christos Exp $");
+#ifdef __FreeBSD__
+#include <sys/time.h> /* For timespecadd */
+#include <inttypes.h> /* For UINT16_MAX */
+#endif
#include <pthread.h>
#include <stdio.h>
#include <string.h>
+#include <errno.h>
+#include <time.h>
#include <unistd.h>
+#include <sys/sched.h>
+#include <sys/param.h>
#include <atf-c.h>
@@ -44,6 +52,31 @@ static pthread_mutex_t mutex;
static pthread_mutex_t static_mutex = PTHREAD_MUTEX_INITIALIZER;
static int global_x;
+#ifdef TIMEDMUTEX
+/* This code is used for verifying non-timed specific code */
+static struct timespec ts_lengthy = {
+ .tv_sec = UINT16_MAX,
+ .tv_nsec = 0
+};
+/* This code is used for verifying timed-only specific code */
+static struct timespec ts_shortlived = {
+ .tv_sec = 0,
+ .tv_nsec = 120
+};
+
+static int
+mutex_lock(pthread_mutex_t *m, const struct timespec *ts)
+{
+ struct timespec ts_wait;
+ ATF_REQUIRE(clock_gettime(CLOCK_REALTIME, &ts_wait) != -1);
+ timespecadd(&ts_wait, ts, &ts_wait);
+
+ return pthread_mutex_timedlock(m, &ts_wait);
+}
+#else
+#define mutex_lock(a, b) pthread_mutex_lock(a)
+#endif
+
static void *
mutex1_threadfunc(void *arg)
{
@@ -53,7 +86,7 @@ mutex1_threadfunc(void *arg)
param = arg;
printf("2: Locking mutex\n");
- pthread_mutex_lock(&mutex);
+ mutex_lock(&mutex, &ts_lengthy);
printf("2: Got mutex. *param = %d\n", *param);
ATF_REQUIRE_EQ(*param, 20);
(*param)++;
@@ -78,7 +111,7 @@ ATF_TC_BODY(mutex1, tc)
PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
x = 1;
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
PTHREAD_REQUIRE(pthread_create(&new, NULL, mutex1_threadfunc, &x));
printf("1: Before changing the value.\n");
sleep(2);
@@ -89,7 +122,7 @@ ATF_TC_BODY(mutex1, tc)
printf("1: After releasing the mutex.\n");
PTHREAD_REQUIRE(pthread_join(new, &joinval));
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("1: Thread joined. X was %d. Return value (int) was %d\n",
x, *(int *)joinval);
ATF_REQUIRE_EQ(x, 21);
@@ -105,7 +138,7 @@ mutex2_threadfunc(void *arg)
printf("2: Second thread (%p). Count is %ld\n", pthread_self(), count);
while (count--) {
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
global_x++;
PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
}
@@ -142,7 +175,7 @@ ATF_TC_BODY(mutex2, tc)
global_x = 0;
count = count2 = 10000000;
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
PTHREAD_REQUIRE(pthread_create(&new, NULL, mutex2_threadfunc, &count2));
printf("1: Thread %p\n", pthread_self());
@@ -150,14 +183,14 @@ ATF_TC_BODY(mutex2, tc)
PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
while (count--) {
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
global_x++;
PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
}
PTHREAD_REQUIRE(pthread_join(new, &joinval));
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("1: Thread joined. X was %d. Return value (long) was %ld\n",
global_x, (long)joinval);
ATF_REQUIRE_EQ(global_x, 20000000);
@@ -181,7 +214,7 @@ mutex3_threadfunc(void *arg)
printf("2: Second thread (%p). Count is %ld\n", pthread_self(), count);
while (count--) {
- PTHREAD_REQUIRE(pthread_mutex_lock(&static_mutex));
+ PTHREAD_REQUIRE(mutex_lock(&static_mutex, &ts_lengthy));
global_x++;
PTHREAD_REQUIRE(pthread_mutex_unlock(&static_mutex));
}
@@ -217,7 +250,7 @@ ATF_TC_BODY(mutex3, tc)
global_x = 0;
count = count2 = 10000000;
- PTHREAD_REQUIRE(pthread_mutex_lock(&static_mutex));
+ PTHREAD_REQUIRE(mutex_lock(&static_mutex, &ts_lengthy));
PTHREAD_REQUIRE(pthread_create(&new, NULL, mutex3_threadfunc, &count2));
printf("1: Thread %p\n", pthread_self());
@@ -225,14 +258,14 @@ ATF_TC_BODY(mutex3, tc)
PTHREAD_REQUIRE(pthread_mutex_unlock(&static_mutex));
while (count--) {
- PTHREAD_REQUIRE(pthread_mutex_lock(&static_mutex));
+ PTHREAD_REQUIRE(mutex_lock(&static_mutex, &ts_lengthy));
global_x++;
PTHREAD_REQUIRE(pthread_mutex_unlock(&static_mutex));
}
PTHREAD_REQUIRE(pthread_join(new, &joinval));
- PTHREAD_REQUIRE(pthread_mutex_lock(&static_mutex));
+ PTHREAD_REQUIRE(mutex_lock(&static_mutex, &ts_lengthy));
printf("1: Thread joined. X was %d. Return value (long) was %ld\n",
global_x, (long)joinval);
ATF_REQUIRE_EQ(global_x, 20000000);
@@ -257,7 +290,7 @@ mutex4_threadfunc(void *arg)
param = arg;
printf("2: Locking mutex\n");
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("2: Got mutex. *param = %d\n", *param);
(*param)++;
@@ -288,11 +321,11 @@ ATF_TC_BODY(mutex4, tc)
PTHREAD_REQUIRE(pthread_mutexattr_destroy(&mattr));
x = 1;
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
PTHREAD_REQUIRE(pthread_create(&new, NULL, mutex4_threadfunc, &x));
printf("1: Before recursively acquiring the mutex.\n");
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("1: Before releasing the mutex once.\n");
sleep(2);
@@ -308,7 +341,7 @@ ATF_TC_BODY(mutex4, tc)
PTHREAD_REQUIRE(pthread_join(new, &joinval));
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("1: Thread joined. X was %d. Return value (int) was %d\n",
x, *(int *)joinval);
ATF_REQUIRE_EQ(x, 21);
@@ -316,12 +349,405 @@ ATF_TC_BODY(mutex4, tc)
PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
}
+#ifdef __NetBSD__
+static pthread_mutexattr_t attr5;
+static pthread_mutex_t mutex5;
+static int min_fifo_prio, max_fifo_prio;
+
+static void *
+child_func(void* arg)
+{
+ int res;
+
+ printf("child is waiting\n");
+ res = _sched_protect(-2);
+ ATF_REQUIRE_EQ_MSG(res, -1, "sched_protect returned %d", res);
+ ATF_REQUIRE_EQ(errno, ENOENT);
+ PTHREAD_REQUIRE(mutex_lock(&mutex5, &ts_lengthy));
+ printf("child is owning resource\n");
+ res = _sched_protect(-2);
+ ATF_REQUIRE_EQ(res, max_fifo_prio);
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex5));
+ printf("child is done\n");
+
+ return 0;
+}
+
+ATF_TC(mutex5);
+ATF_TC_HEAD(mutex5, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks mutexes for priority setting");
+ atf_tc_set_md_var(tc, "require.user", "root");
+}
+
+ATF_TC_BODY(mutex5, tc)
+{
+ int res;
+ struct sched_param param;
+ pthread_t child;
+
+ min_fifo_prio = sched_get_priority_min(SCHED_FIFO);
+ max_fifo_prio = sched_get_priority_max(SCHED_FIFO);
+ printf("min prio for FIFO = %d\n", min_fifo_prio);
+ param.sched_priority = min_fifo_prio;
+
+ /* = 0 OTHER, 1 FIFO, 2 RR, -1 NONE */
+ res = sched_setscheduler(getpid(), SCHED_FIFO, &param);
+ printf("previous policy used = %d\n", res);
+
+ res = sched_getscheduler(getpid());
+ ATF_REQUIRE_EQ_MSG(res, SCHED_FIFO, "sched %d != FIFO %d", res,
+ SCHED_FIFO);
+
+ PTHREAD_REQUIRE(pthread_mutexattr_init(&attr5));
+ PTHREAD_REQUIRE(pthread_mutexattr_setprotocol(&attr5,
+ PTHREAD_PRIO_PROTECT));
+ PTHREAD_REQUIRE(pthread_mutexattr_setprioceiling(&attr5,
+ max_fifo_prio));
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex5, &attr5));
+ PTHREAD_REQUIRE(mutex_lock(&mutex5, &ts_lengthy));
+ printf("enter critical section for main\n");
+ PTHREAD_REQUIRE(pthread_create(&child, NULL, child_func, NULL));
+ printf("main starts to sleep\n");
+ sleep(10);
+ printf("main completes\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex5));
+ PTHREAD_REQUIRE(pthread_join(child, NULL));
+}
+
+static pthread_mutex_t mutex6;
+static int start = 0;
+static uintmax_t high_cnt = 0, low_cnt = 0, MAX_LOOP = 100000000;
+
+static void *
+high_prio(void* arg)
+{
+ struct sched_param param;
+ int policy;
+ param.sched_priority = min_fifo_prio + 10;
+ pthread_t childid = pthread_self();
+
+ PTHREAD_REQUIRE(pthread_setschedparam(childid, 1, &param));
+ PTHREAD_REQUIRE(pthread_getschedparam(childid, &policy, &param));
+ printf("high protect = %d, prio = %d\n",
+ _sched_protect(-2), param.sched_priority);
+ ATF_REQUIRE_EQ(policy, 1);
+ printf("high prio = %d\n", param.sched_priority);
+ sleep(1);
+ long tmp = 0;
+ for (int i = 0; i < 20; i++) {
+ while (high_cnt < MAX_LOOP) {
+ tmp += (123456789 % 1234) * (987654321 % 54321);
+ high_cnt += 1;
+ }
+ high_cnt = 0;
+ sleep(1);
+ }
+ PTHREAD_REQUIRE(mutex_lock(&mutex6, &ts_lengthy));
+ if (start == 0) start = 2;
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex6));
+
+ return 0;
+}
+
+static void *
+low_prio(void* arg)
+{
+ struct sched_param param;
+ int policy;
+ param.sched_priority = min_fifo_prio;
+ pthread_t childid = pthread_self();
+ int res = _sched_protect(max_fifo_prio);
+ ATF_REQUIRE_EQ(res, 0);
+ PTHREAD_REQUIRE(pthread_setschedparam(childid, 1, &param));
+ PTHREAD_REQUIRE(pthread_getschedparam(childid, &policy, &param));
+ printf("low protect = %d, prio = %d\n", _sched_protect(-2),
+ param.sched_priority);
+ ATF_REQUIRE_EQ(policy, 1);
+ printf("low prio = %d\n", param.sched_priority);
+ sleep(1);
+ long tmp = 0;
+ for (int i = 0; i < 20; i++) {
+ while (low_cnt < MAX_LOOP) {
+ tmp += (123456789 % 1234) * (987654321 % 54321);
+ low_cnt += 1;
+ }
+ low_cnt = 0;
+ sleep(1);
+ }
+ PTHREAD_REQUIRE(mutex_lock(&mutex6, &ts_lengthy));
+ if (start == 0)
+ start = 1;
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex6));
+
+ return 0;
+}
+
+ATF_TC(mutex6);
+ATF_TC_HEAD(mutex6, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Checks scheduling for priority ceiling");
+ atf_tc_set_md_var(tc, "require.user", "root");
+}
+
+/*
+ * 1. main thread sets itself to be a realtime task and launched two tasks,
+ * one has higher priority and the other has lower priority.
+ * 2. each child thread(low and high priority thread) sets its scheduler and
+ * priority.
+ * 3. each child thread did several rounds of computation, after each round it
+ * sleep 1 second.
+ * 4. the child thread with low priority will call _sched_protect to increase
+ * its protect priority.
+ * 5. We verify the thread with low priority runs first.
+ *
+ * Why does it work? From the main thread, we launched the high
+ * priority thread first. This gives this thread the benefit of
+ * starting first. The low priority thread did not call _sched_protect(2).
+ * The high priority thread should finish the task first. After each
+ * round of computation, we call sleep, to put the task into the
+ * sleep queue, and wake up again after the timer expires. This
+ * gives the scheduler the chance to decide which task to run. So,
+ * the thread with real high priority will always block the thread
+ * with real low priority.
+ *
+ */
+ATF_TC_BODY(mutex6, tc)
+{
+ struct sched_param param;
+ int res;
+ pthread_t high, low;
+
+ min_fifo_prio = sched_get_priority_min(SCHED_FIFO);
+ max_fifo_prio = sched_get_priority_max(SCHED_FIFO);
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+ printf("min_fifo_prio = %d, max_fifo_info = %d\n", min_fifo_prio,
+ max_fifo_prio);
+
+ param.sched_priority = min_fifo_prio;
+ res = sched_setscheduler(getpid(), SCHED_FIFO, &param);
+ printf("previous policy used = %d\n", res);
+
+ res = sched_getscheduler(getpid());
+ ATF_REQUIRE_EQ(res, 1);
+ PTHREAD_REQUIRE(pthread_create(&high, NULL, high_prio, NULL));
+ PTHREAD_REQUIRE(pthread_create(&low, NULL, low_prio, NULL));
+ sleep(5);
+ PTHREAD_REQUIRE(pthread_join(low, NULL));
+ PTHREAD_REQUIRE(pthread_join(high, NULL));
+
+ ATF_REQUIRE_EQ(start, 1);
+}
+#endif
+
+ATF_TC(mutexattr1);
+ATF_TC_HEAD(mutexattr1, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks mutexattr");
+}
+
+ATF_TC_BODY(mutexattr1, tc)
+{
+ pthread_mutexattr_t mattr;
+ int protocol, target;
+
+ PTHREAD_REQUIRE(pthread_mutexattr_init(&mattr));
+
+ target = PTHREAD_PRIO_NONE;
+ PTHREAD_REQUIRE(pthread_mutexattr_setprotocol(&mattr, target));
+ PTHREAD_REQUIRE(pthread_mutexattr_getprotocol(&mattr, &protocol));
+ ATF_REQUIRE_EQ(protocol, target);
+
+ /*
+ target = PTHREAD_PRIO_INHERIT;
+ PTHREAD_REQUIRE(pthread_mutexattr_setprotocol(&mattr, target));
+ PTHREAD_REQUIRE(pthread_mutexattr_getprotocol(&mattr, &protocol));
+ ATF_REQUIRE_EQ(protocol, target);
+ */
+
+ target = PTHREAD_PRIO_PROTECT;
+ PTHREAD_REQUIRE(pthread_mutexattr_setprotocol(&mattr, target));
+ PTHREAD_REQUIRE(pthread_mutexattr_getprotocol(&mattr, &protocol));
+ ATF_REQUIRE_EQ(protocol, target);
+}
+
+ATF_TC(mutexattr2);
+ATF_TC_HEAD(mutexattr2, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks mutexattr");
+}
+
+ATF_TC_BODY(mutexattr2, tc)
+{
+ pthread_mutexattr_t mattr;
+
+#ifdef __FreeBSD__
+ atf_tc_expect_fail("fails on i == 0 with: "
+ "pthread_mutexattr_setprioceiling(&mattr, i): Invalid argument "
+ "-- PR # 211802");
+#endif
+
+ PTHREAD_REQUIRE(pthread_mutexattr_init(&mattr));
+ int max_prio = sched_get_priority_max(SCHED_FIFO);
+ int min_prio = sched_get_priority_min(SCHED_FIFO);
+ for (int i = min_prio; i <= max_prio; i++) {
+ int prioceiling;
+#ifdef __FreeBSD__
+ int protocol;
+
+ PTHREAD_REQUIRE(pthread_mutexattr_getprotocol(&mattr,
+ &protocol));
+
+ printf("priority: %d\nprotocol: %d\n", i, protocol);
+#endif
+ PTHREAD_REQUIRE(pthread_mutexattr_setprioceiling(&mattr, i));
+ PTHREAD_REQUIRE(pthread_mutexattr_getprioceiling(&mattr,
+ &prioceiling));
+#ifdef __FreeBSD__
+ printf("prioceiling: %d\n", prioceiling);
+#endif
+ ATF_REQUIRE_EQ(i, prioceiling);
+ }
+}
+
+#ifdef TIMEDMUTEX
+ATF_TC(timedmutex1);
+ATF_TC_HEAD(timedmutex1, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks timeout on selflock");
+}
+
+ATF_TC_BODY(timedmutex1, tc)
+{
+
+ printf("Timed mutex-test 1\n");
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+
+ printf("Before acquiring mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+
+ printf("Before endeavor to reacquire timed-mutex (timeout expected)\n");
+ PTHREAD_REQUIRE_STATUS(mutex_lock(&mutex, &ts_shortlived),
+ ETIMEDOUT);
+
+ printf("Unlocking mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
+}
+
+ATF_TC(timedmutex2);
+ATF_TC_HEAD(timedmutex2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timeout on selflock with timedlock");
+}
+
+ATF_TC_BODY(timedmutex2, tc)
+{
+
+ printf("Timed mutex-test 2\n");
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+
+ printf("Before acquiring mutex with timedlock\n");
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
+
+ printf("Before endeavor to reacquire timed-mutex (timeout expected)\n");
+ PTHREAD_REQUIRE_STATUS(mutex_lock(&mutex, &ts_shortlived),
+ ETIMEDOUT);
+
+ printf("Unlocking mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
+}
+
+ATF_TC(timedmutex3);
+ATF_TC_HEAD(timedmutex3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timeout on selflock in a new thread");
+}
+
+static void *
+timedmtx_thrdfunc(void *arg)
+{
+ printf("Before endeavor to reacquire timed-mutex (timeout expected)\n");
+ PTHREAD_REQUIRE_STATUS(mutex_lock(&mutex, &ts_shortlived),
+ ETIMEDOUT);
+
+ return NULL;
+}
+
+ATF_TC_BODY(timedmutex3, tc)
+{
+ pthread_t new;
+
+ printf("Timed mutex-test 3\n");
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+
+ printf("Before acquiring mutex with timedlock\n");
+ PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+
+ printf("Before creating new thread\n");
+ PTHREAD_REQUIRE(pthread_create(&new, NULL, timedmtx_thrdfunc, NULL));
+
+ printf("Before joining the mutex\n");
+ PTHREAD_REQUIRE(pthread_join(new, NULL));
+
+ printf("Unlocking mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
+}
+
+ATF_TC(timedmutex4);
+ATF_TC_HEAD(timedmutex4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timeout on selflock with timedlock in a new thread");
+}
+
+ATF_TC_BODY(timedmutex4, tc)
+{
+ pthread_t new;
+
+ printf("Timed mutex-test 4\n");
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+
+ printf("Before acquiring mutex with timedlock\n");
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
+
+ printf("Before creating new thread\n");
+ PTHREAD_REQUIRE(pthread_create(&new, NULL, timedmtx_thrdfunc, NULL));
+
+ printf("Before joining the mutex\n");
+ PTHREAD_REQUIRE(pthread_join(new, NULL));
+
+ printf("Unlocking mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
+}
+#endif
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, mutex1);
ATF_TP_ADD_TC(tp, mutex2);
ATF_TP_ADD_TC(tp, mutex3);
ATF_TP_ADD_TC(tp, mutex4);
+#ifdef __NetBSD__
+ ATF_TP_ADD_TC(tp, mutex5);
+ ATF_TP_ADD_TC(tp, mutex6);
+#endif
+ ATF_TP_ADD_TC(tp, mutexattr1);
+ ATF_TP_ADD_TC(tp, mutexattr2);
+
+#ifdef TIMEDMUTEX
+ ATF_TP_ADD_TC(tp, timedmutex1);
+ ATF_TP_ADD_TC(tp, timedmutex2);
+ ATF_TP_ADD_TC(tp, timedmutex3);
+ ATF_TP_ADD_TC(tp, timedmutex4);
+#endif
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libpthread/t_rwlock.c b/contrib/netbsd-tests/lib/libpthread/t_rwlock.c
index b2a3d6f..81f8c58 100644
--- a/contrib/netbsd-tests/lib/libpthread/t_rwlock.c
+++ b/contrib/netbsd-tests/lib/libpthread/t_rwlock.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_rwlock.c,v 1.1 2010/07/16 15:42:53 jmmv Exp $ */
+/* $NetBSD: t_rwlock.c,v 1.2 2015/06/26 11:07:20 pooka Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -55,7 +55,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_rwlock.c,v 1.1 2010/07/16 15:42:53 jmmv Exp $");
+__RCSID("$NetBSD: t_rwlock.c,v 1.2 2015/06/26 11:07:20 pooka Exp $");
#include <errno.h>
#include <pthread.h>
@@ -70,6 +70,8 @@ pthread_rwlock_t lk;
struct timespec to;
+static pthread_rwlock_t static_rwlock = PTHREAD_RWLOCK_INITIALIZER;
+
/* ARGSUSED */
static void *
do_nothing(void *dummy)
@@ -117,9 +119,23 @@ ATF_TC_BODY(rwlock1, tc)
"%s", strerror(error));
}
+ATF_TC(rwlock_static);
+ATF_TC_HEAD(rwlock_static, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "rwlock w/ static initializer");
+}
+ATF_TC_BODY(rwlock_static, tc)
+{
+
+ PTHREAD_REQUIRE(pthread_rwlock_rdlock(&static_rwlock));
+ PTHREAD_REQUIRE(pthread_rwlock_unlock(&static_rwlock));
+ PTHREAD_REQUIRE(pthread_rwlock_destroy(&static_rwlock));
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, rwlock1);
+ ATF_TP_ADD_TC(tp, rwlock_static);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libpthread/t_swapcontext.c b/contrib/netbsd-tests/lib/libpthread/t_swapcontext.c
index a18ac2f..8536846 100644
--- a/contrib/netbsd-tests/lib/libpthread/t_swapcontext.c
+++ b/contrib/netbsd-tests/lib/libpthread/t_swapcontext.c
@@ -104,6 +104,15 @@ ATF_TC_BODY(swapcontext1, tc)
{
pthread_t thread;
+#if defined(__FreeBSD__) && defined(__mips__)
+ /*
+ * MIPS modifies TLS pointer in set_mcontext(), so
+ * swapping contexts obtained from different threads
+ * gives us different pthread_self() return value.
+ */
+ atf_tc_skip("Platform is not supported.");
+#endif
+
oself = (void *)&val1;
nself = (void *)&val2;
diff --git a/contrib/netbsd-tests/lib/libpthread/t_timedmutex.c b/contrib/netbsd-tests/lib/libpthread/t_timedmutex.c
new file mode 100644
index 0000000..4f71acd
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libpthread/t_timedmutex.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_timedmutex.c,v 1.2 2016/10/31 16:21:23 christos Exp $ */
+
+/*
+ * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TIMEDMUTEX
+#include "t_mutex.c"
diff --git a/contrib/netbsd-tests/lib/librumpclient/h_execthr.c b/contrib/netbsd-tests/lib/librumpclient/h_execthr.c
index f653fe6..c209375 100644
--- a/contrib/netbsd-tests/lib/librumpclient/h_execthr.c
+++ b/contrib/netbsd-tests/lib/librumpclient/h_execthr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: h_execthr.c,v 1.3 2014/08/13 00:03:00 pooka Exp $ */
+/* $NetBSD: h_execthr.c,v 1.7 2016/11/24 00:37:29 dholland Exp $ */
/*
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -42,6 +42,14 @@
#include <rump/rumpclient.h>
#include <rump/rump_syscalls.h>
+//#define VERBOSE
+
+#ifdef VERBOSE
+#define SAY(...) printf(__VA_ARGS__)
+#else
+#define SAY(...)
+#endif
+
static int canreturn = 0;
/*
@@ -103,6 +111,7 @@ main(int argc, char *argv[], char *envp[])
else
execd = 0;
sprintf(nexec, "%d", execd+1);
+ SAY("execd: %d\n", execd);
if (rumpclient_init() == -1) {
if (execd)
@@ -111,33 +120,43 @@ main(int argc, char *argv[], char *envp[])
err(1, "init");
}
mypid = rump_sys_getpid();
+ SAY("rumpclient_init finished.\n");
if (execd) {
canreturn = 1;
- if (pthread_create(&pt, NULL,
- wrk, (void *)(uintptr_t)P2_0) != 0)
- errx(1, "exec pthread_create");
+ errno = pthread_create(&pt, NULL,
+ wrk, (void *)(uintptr_t)P2_0);
+ if (errno != 0)
+ err(1, "exec pthread_create");
+ SAY("startup pthread_create finished.\n");
i = 37;
rump_sys_write(P2_1, &i, sizeof(i));
pthread_join(pt, NULL);
+ SAY("startup pthread_join finished.\n");
n = rump_sys_read(P1_0, &i, sizeof(i));
if (n != -1 || errno != EBADF)
errx(1, "post-exec cloexec works");
+ SAY("startup rump_sys_read finished.\n");
getproc(mypid, &p);
+ SAY("startup getproc finished.\n");
if (p.p_nlwps != 2)
errx(1, "invalid nlwps: %lld", (long long)p.p_nlwps);
/* we passed? */
- if (execd > 10)
+ if (execd > 10) {
+ SAY("done.\n");
exit(0);
+ }
rump_sys_close(P2_0);
rump_sys_close(P2_1);
}
+ SAY("making pipes...\n");
+
if (rump_sys_pipe(p1) == -1)
err(1, "pipe1");
if (p1[0] != P1_0 || p1[1] != P1_1)
@@ -151,32 +170,47 @@ main(int argc, char *argv[], char *envp[])
if (rump_sys_fcntl(p1[1], F_SETFD, FD_CLOEXEC) == -1)
err(1, "cloexec");
- for (i = 0; i < NTHR; i++)
- if (pthread_create(&pt, NULL,
- wrk, (void *)(uintptr_t)p1[0]) != 0)
- errx(1, "pthread_create 1 %d", i);
+ SAY("making threads...\n");
+
+ for (i = 0; i < NTHR; i++) {
+ errno = pthread_create(&pt, NULL,
+ wrk, (void *)(uintptr_t)p1[0]);
+ if (errno != 0)
+ err(1, "pthread_create 1 %d", i);
+ }
+
+ for (i = 0; i < NTHR; i++) {
+ errno = pthread_create(&pt, NULL,
+ wrk, (void *)(uintptr_t)p2[0]);
+ if (errno != 0)
+ err(1, "pthread_create 2 %d", i);
+ }
- for (i = 0; i < NTHR; i++)
- if (pthread_create(&pt, NULL,
- wrk, (void *)(uintptr_t)p2[0]) != 0)
- errx(1, "pthread_create 2 %d", i);
+ SAY("waiting for threads to start...\n");
/* wait for all the threads to be enjoying themselves */
for (;;) {
getproc(mypid, &p);
+ SAY("getproc finished.\n");
if (p.p_nlwps == 2*NTHR + 2)
break;
usleep(10000);
}
+ SAY("making some more threads start...\n");
+
/*
* load up one more (big) set. these won't start executing, though,
* but we're interested in if they create blockage
*/
- for (i = 0; i < 3*NTHR; i++)
- if (pthread_create(&pt, NULL,
- wrk, (void *)(uintptr_t)p1[0]) != 0)
- errx(1, "pthread_create 1 %d", i);
+ for (i = 0; i < 3*NTHR; i++) {
+ errno = pthread_create(&pt, NULL,
+ wrk, (void *)(uintptr_t)p1[0]);
+ if (errno != 0)
+ err(1, "pthread_create 3 %d", i);
+ }
+
+ SAY("calling exec...\n");
/* then, we exec! */
execarg[0] = argv[0];
diff --git a/contrib/netbsd-tests/lib/librumpclient/t_exec.sh b/contrib/netbsd-tests/lib/librumpclient/t_exec.sh
index 661a3b9..a07af0c 100755
--- a/contrib/netbsd-tests/lib/librumpclient/t_exec.sh
+++ b/contrib/netbsd-tests/lib/librumpclient/t_exec.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_exec.sh,v 1.8 2011/03/08 12:40:25 pooka Exp $
+# $NetBSD: t_exec.sh,v 1.9 2016/08/10 21:10:18 kre Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -25,7 +25,7 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-rumpsrv='rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet'
+rumpsrv='rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpdev -lrumpvfs'
export RUMP_SERVER=unix://csock
export RUMPHIJACK_RETRYCONNECT='die'
diff --git a/contrib/netbsd-tests/lib/librumpclient/t_fd.c b/contrib/netbsd-tests/lib/librumpclient/t_fd.c
index aa0d1cc..6e6d947 100644
--- a/contrib/netbsd-tests/lib/librumpclient/t_fd.c
+++ b/contrib/netbsd-tests/lib/librumpclient/t_fd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fd.c,v 1.4 2011/08/25 18:46:01 hannken Exp $ */
+/* $NetBSD: t_fd.c,v 1.5 2016/08/10 21:10:18 kre Exp $ */
/*
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -110,7 +110,7 @@ ATF_TC_BODY(sigio, tc)
signal(SIGIO, gotsig);
RZ(system("rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet "
- RUMPSERV));
+ "-lrumpdev -lrumpvfs " RUMPSERV));
RL(setenv("RUMP_SERVER", RUMPSERV, 1));
RL(rumpclient_init());
diff --git a/contrib/netbsd-tests/lib/librumphijack/t_tcpip.sh b/contrib/netbsd-tests/lib/librumphijack/t_tcpip.sh
index d6a16fa..411be33 100755
--- a/contrib/netbsd-tests/lib/librumphijack/t_tcpip.sh
+++ b/contrib/netbsd-tests/lib/librumphijack/t_tcpip.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_tcpip.sh,v 1.13 2014/01/03 13:18:00 pooka Exp $
+# $NetBSD: t_tcpip.sh,v 1.18 2016/08/13 11:22:11 christos Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -25,7 +25,8 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-rumpnetsrv='rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet'
+rumpnetlibs="-lrumpnet -lrumpnet_net -lrumpnet_netinet6 -lrumpnet_netinet"
+rumpnetsrv="rump_server $rumpnetlibs -lrumpdev"
export RUMP_SERVER=unix://csock
atf_test_case http cleanup
@@ -37,7 +38,7 @@ http_head()
http_body()
{
- atf_check -s exit:0 ${rumpnetsrv} -lrumpnet_netinet6 ${RUMP_SERVER}
+ atf_check -s exit:0 ${rumpnetsrv} ${RUMP_SERVER}
# start bozo in daemon mode
atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
@@ -53,8 +54,9 @@ http_body()
# check that we got what we wanted
atf_check -o match:'HTTP/1.0 200 OK' cat webfile
atf_check -o match:'Content-Length: 95' cat webfile
+ blank_line_re="$(printf '^\r$')" # matches a line with only <CR><LF>
atf_check -o file:"$(atf_get_srcdir)/index.html" \
- sed -n '1,/^$/!p' webfile
+ sed -n "1,/${blank_line_re}/!p" webfile
}
http_cleanup()
@@ -121,6 +123,7 @@ ssh_head()
ssh_body()
{
+ atf_expect_fail "PR lib/50174"
atf_check -s exit:0 ${rumpnetsrv} ${RUMP_SERVER}
# make sure clients die after we nuke the server
@@ -177,6 +180,8 @@ test_nfs()
'echo "/export -noresvport -noresvmnt 10.1.1.100" | \
dd of=/rump/etc/exports 2> /dev/null'
+ atf_check -s exit:0 rump.sysctl -q -w kern.module.autoload=1
+
atf_check -s exit:0 -e ignore mount_ffs /dk /rump/export
atf_check -s exit:0 -x "echo ${magicstr} > /rump/export/im_alive"
@@ -201,7 +206,7 @@ test_nfs()
unset LD_PRELOAD
# at least the kernel server is easier
- atf_check -s exit:0 rump_server -lrumpvfs -lrumpnet \
+ atf_check -s exit:0 rump_server -lrumpvfs -lrumpnet -lrumpdev \
-lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpfs_nfs\
${RUMP_SERVER}
@@ -228,7 +233,7 @@ nfs_head()
nfs_body()
{
test_nfs -lrumpvfs -lrumpdev -lrumpnet -lrumpnet_net \
- -lrumpnet_netinet -lrumpnet_local -lrumpnet_shmif \
+ -lrumpnet_netinet -lrumpnet_local -lrumpnet_shmif -lrumpdev \
-lrumpdev_disk -lrumpfs_ffs -lrumpfs_nfs -lrumpfs_nfsserver \
-d key=/dk,hostpath=ffs.img,size=host
}
@@ -250,7 +255,7 @@ nfs_autoload_body()
{
[ `uname -m` = "i386" ] || atf_skip "test currently valid only on i386"
test_nfs -lrumpvfs -lrumpdev -lrumpnet -lrumpnet_net \
- -lrumpnet_netinet -lrumpnet_local -lrumpnet_shmif \
+ -lrumpnet_netinet -lrumpnet_local -lrumpnet_shmif -lrumpdev \
-lrumpdev_disk -d key=/dk,hostpath=ffs.img,size=host
}
diff --git a/contrib/netbsd-tests/lib/libusbhid/hid_test_data.c b/contrib/netbsd-tests/lib/libusbhid/hid_test_data.c
new file mode 100644
index 0000000..dedcb11
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libusbhid/hid_test_data.c
@@ -0,0 +1,137 @@
+/* $NetBSD: hid_test_data.c,v 1.2 2016/01/07 15:58:23 jakllsch Exp $ */
+
+/*
+ * Copyright (c) 2016 Jonathan A. Kollasch
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+static const uint8_t range_test_report_descriptor[] = {
+ 0x0b, 0x03, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x20, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum
+ 0x27, 0xff, 0xff, 0xff, 0x7f, // Logical Maximum
+ 0x37, 0x00, 0x00, 0x00, 0x80, // Physical Minimum
+ 0x47, 0xff, 0xff, 0xff, 0x7f, // Physical Maximum
+ 0x81, 0x00, // Input
+
+ 0x0b, 0x02, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x10, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x16, 0x00, 0x80, // Logical Minimum
+ 0x26, 0xff, 0x7f, // Logical Maximum
+ 0x36, 0x00, 0x80, // Physical Minimum
+ 0x46, 0xff, 0x7f, // Physical Maximum
+ 0x81, 0x00, // Input
+
+ 0x0b, 0x01, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x08, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x15, 0x80, // Logical Minimum
+ 0x25, 0x7f, // Logical Maximum
+ 0x35, 0x80, // Physical Minimum
+ 0x45, 0x7f, // Physical Maximum
+ 0x81, 0x00, // Input
+};
+
+static const uint8_t range_test_minimum_report[7] = {
+ 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x80,
+ 0x80,
+};
+
+static const uint8_t range_test_negative_one_report[7] = {
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff,
+ 0xff,
+};
+
+static const uint8_t range_test_positive_one_report[7] = {
+ 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00,
+ 0x01,
+};
+
+static const uint8_t range_test_maximum_report[7] = {
+ 0xff, 0xff, 0xff, 0x7f,
+ 0xff, 0x7f,
+ 0x7f,
+};
+
+static const uint8_t unsigned_range_test_report_descriptor[] = {
+ 0x0b, 0x13, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x20, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x17, 0x00, 0x00, 0x00, 0x00, // Logical Minimum
+ 0x27, 0xff, 0xff, 0xff, 0xff, // Logical Maximum
+ 0x37, 0x00, 0x00, 0x00, 0x00, // Physical Minimum
+ 0x47, 0xff, 0xff, 0xff, 0xff, // Physical Maximum
+ 0x81, 0x00, // Input
+
+ 0x0b, 0x12, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x10, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x16, 0x00, 0x00, // Logical Minimum
+ 0x26, 0xff, 0xff, // Logical Maximum
+ 0x36, 0x00, 0x00, // Physical Minimum
+ 0x46, 0xff, 0xff, // Physical Maximum
+ 0x81, 0x00, // Input
+
+ 0x0b, 0x11, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x08, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x15, 0x00, // Logical Minimum
+ 0x25, 0xff, // Logical Maximum
+ 0x35, 0x00, // Physical Minimum
+ 0x45, 0xff, // Physical Maximum
+ 0x81, 0x00, // Input
+};
+
+static const uint8_t unsigned_range_test_minimum_report[7] = {
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00,
+};
+
+static const uint8_t unsigned_range_test_positive_one_report[7] = {
+ 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00,
+ 0x01,
+};
+
+static const uint8_t unsigned_range_test_negative_one_report[7] = {
+ 0xfe, 0xff, 0xff, 0xff,
+ 0xfe, 0xff,
+ 0xfe,
+};
+
+static const uint8_t unsigned_range_test_maximum_report[7] = {
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff,
+ 0xff,
+};
+
+static const uint8_t just_pop_report_descriptor[] = {
+ 0xb4,
+};
diff --git a/contrib/netbsd-tests/lib/libusbhid/t_usbhid.c b/contrib/netbsd-tests/lib/libusbhid/t_usbhid.c
new file mode 100644
index 0000000..2766da2
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libusbhid/t_usbhid.c
@@ -0,0 +1,452 @@
+/* $NetBSD: t_usbhid.c,v 1.12 2016/08/17 12:10:42 jakllsch Exp $ */
+
+/*
+ * Copyright (c) 2016 Jonathan A. Kollasch
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_usbhid.c,v 1.12 2016/08/17 12:10:42 jakllsch Exp $");
+
+#include <atf-c.h>
+
+#include <inttypes.h>
+#include <usbhid.h>
+#include <string.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <limits.h>
+
+ATF_TC(check_hid_logical_range);
+ATF_TC(check_hid_physical_range);
+ATF_TC(check_hid_usage);
+ATF_TC(check_hid_get_data);
+ATF_TC(check_hid_set_data);
+ATF_TC(check_parse_just_pop);
+
+#define MYd_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %d", (d))
+
+#define MYu_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %u", (d))
+
+#define MYx_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== 0x%x", (d))
+
+#include "hid_test_data.c"
+
+ATF_TC_HEAD(check_hid_usage, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test libusbhid usage.c");
+}
+
+ATF_TC_BODY(check_hid_usage, tc)
+{
+ char usages_path[PATH_MAX];
+
+ (void)strlcpy(usages_path, atf_tc_get_config_var(tc, "srcdir"),
+ sizeof(usages_path));
+ (void)strlcat(usages_path, "/test_usb_hid_usages",
+ sizeof(usages_path));
+
+ hid_init(usages_path);
+
+ ATF_CHECK_STREQ("t_usbhid_page", hid_usage_page(0xff1b));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_page("t_usbhid_page"), 0xff1b);
+
+ ATF_CHECK_STREQ("t_usbhid_usage", hid_usage_in_page(0xff1bff2a));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
+ "t_usbhid_page:t_usbhid_usage"), 0xff1bff2a);
+
+ ATF_CHECK_STREQ("Quick_zephyrs_blow_vexing_daft_Jim_",
+ hid_usage_page(0xff2a));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_page(
+ "Quick_zephyrs_blow_vexing_daft_Jim_"), 0xff2a);
+
+ ATF_CHECK_STREQ("Usage_ID_Zero_%", hid_usage_in_page(0xff2a0000));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
+ "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_Zero_%"),
+ 0xff2a0000);
+
+ //ATF_CHECK_STREQ("Usage_ID_0_%", hid_usage_in_page(0xff2a0000));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
+ "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_0_%"), 0xff2a0000);
+
+ ATF_CHECK_STREQ("Usage_ID_65535_%", hid_usage_in_page(0xff2affff));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
+ "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_65535_%"),
+ 0xff2affff);
+
+ MYx_ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page("0xff2a:0xff1b"),
+ 0xff2aff1b);
+}
+
+ATF_TC_HEAD(check_hid_logical_range, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test hid_get_item "
+ "Logical Minimum/Maximum results");
+}
+
+ATF_TC_BODY(check_hid_logical_range, tc)
+{
+ report_desc_t hrd;
+ hid_item_t hi;
+ uint32_t minimum, maximum;
+
+ atf_tc_expect_fail("only the 32-bit opcode works, "
+ "8 and 16-bit is broken");
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -128);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 127);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -32768);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 32767);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -2147483648);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 2147483647);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ unsigned_range_test_report_descriptor,
+ __arraycount(unsigned_range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
+ minimum = (uint32_t)hi.logical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = (uint32_t)hi.logical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 255);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
+ minimum = hi.logical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = hi.logical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 65535);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
+ minimum = hi.logical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = hi.logical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 4294967295);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TC_HEAD(check_hid_physical_range, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test hid_get_item "
+ "Physical Minimum/Maximum results");
+}
+
+ATF_TC_BODY(check_hid_physical_range, tc)
+{
+ report_desc_t hrd;
+ hid_item_t hi;
+ uint32_t minimum, maximum;
+
+ atf_tc_expect_fail("only the 32-bit opcode works, "
+ "8 and 16-bit is broken");
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -128);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 127);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -32768);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 32767);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -2147483648);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 2147483647);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ unsigned_range_test_report_descriptor,
+ __arraycount(unsigned_range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
+ minimum = (uint32_t)hi.physical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = (uint32_t)hi.physical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 255);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
+ minimum = hi.physical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = hi.physical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 65535);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
+ minimum = hi.physical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = hi.physical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 4294967295);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TC_HEAD(check_hid_get_data, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test hid_get_data results");
+}
+
+ATF_TC_BODY(check_hid_get_data, tc)
+{
+ report_desc_t hrd;
+ hid_item_t hi;
+ int32_t data;
+ uint32_t udat;
+
+ atf_tc_expect_fail("only the 32-bit opcode works, "
+ "8 and 16-bit is broken");
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ data = hid_get_data(range_test_minimum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -128);
+ data = hid_get_data(range_test_negative_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -1);
+ data = hid_get_data(range_test_positive_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 1);
+ data = hid_get_data(range_test_maximum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 127);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ data = hid_get_data(range_test_minimum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -32768);
+ data = hid_get_data(range_test_negative_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -1);
+ data = hid_get_data(range_test_positive_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 1);
+ data = hid_get_data(range_test_maximum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 32767);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ data = hid_get_data(range_test_minimum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -2147483648);
+ data = hid_get_data(range_test_negative_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -1);
+ data = hid_get_data(range_test_positive_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 1);
+ data = hid_get_data(range_test_maximum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 2147483647);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ unsigned_range_test_report_descriptor,
+ __arraycount(unsigned_range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 0);
+ udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 1);
+ udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 254);
+ udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 255);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 0);
+ udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 1);
+ udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 65534);
+ udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 65535);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 0);
+ udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 1);
+ udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 4294967294);
+ udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 4294967295);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TC_HEAD(check_hid_set_data, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test hid_set_data results");
+}
+
+ATF_TC_BODY(check_hid_set_data, tc)
+{
+ report_desc_t hrd;
+ hid_item_t hi;
+ uint8_t test_data_minimum[7];
+ uint8_t test_data_negative_one[7];
+ uint8_t test_data_positive_one[7];
+ uint8_t test_data_maximum[7];
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, -128);
+ hid_set_data(test_data_negative_one, &hi, -1);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_maximum, &hi, 127);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, -32768);
+ hid_set_data(test_data_negative_one, &hi, -1);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_maximum, &hi, 32767);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, -2147483648);
+ hid_set_data(test_data_negative_one, &hi, -1);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_maximum, &hi, 2147483647);
+ ATF_CHECK(memcmp(test_data_minimum, range_test_minimum_report,
+ sizeof test_data_minimum) == 0);
+ ATF_CHECK(memcmp(test_data_negative_one,
+ range_test_negative_one_report,
+ sizeof test_data_negative_one) == 0);
+ ATF_CHECK(memcmp(test_data_positive_one,
+ range_test_positive_one_report,
+ sizeof test_data_positive_one) == 0);
+ ATF_CHECK(memcmp(test_data_maximum, range_test_maximum_report,
+ sizeof test_data_maximum) == 0);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ unsigned_range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, 0);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_negative_one, &hi, 0xfffffffe);
+ hid_set_data(test_data_maximum, &hi, 0xffffffff);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, 0);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_negative_one, &hi, 0xfffe);
+ hid_set_data(test_data_maximum, &hi, 0xffff);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, 0);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_negative_one, &hi, 0xfffffffe);
+ hid_set_data(test_data_maximum, &hi, 0xffffffff);
+ ATF_CHECK(memcmp(test_data_minimum,
+ unsigned_range_test_minimum_report,
+ sizeof test_data_minimum) == 0);
+ ATF_CHECK(memcmp(test_data_negative_one,
+ unsigned_range_test_negative_one_report,
+ sizeof test_data_negative_one) == 0);
+ ATF_CHECK(memcmp(test_data_positive_one,
+ unsigned_range_test_positive_one_report,
+ sizeof test_data_positive_one) == 0);
+ ATF_CHECK(memcmp(test_data_maximum,
+ unsigned_range_test_maximum_report,
+ sizeof test_data_maximum) == 0);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TC_HEAD(check_parse_just_pop, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "check Pop on empty stack bug");
+}
+
+ATF_TC_BODY(check_parse_just_pop, tc)
+{
+ report_desc_t hrd;
+ hid_data_t hd;
+ hid_item_t hi;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ just_pop_report_descriptor,
+ sizeof just_pop_report_descriptor)) != NULL);
+ hd = hid_start_parse(hrd, 0, NO_REPORT_ID);
+ while (hid_get_item(hd, &hi) > 0) {
+ }
+ hid_end_parse(hd);
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, check_hid_logical_range);
+ ATF_TP_ADD_TC(tp, check_hid_physical_range);
+ ATF_TP_ADD_TC(tp, check_hid_usage);
+ ATF_TP_ADD_TC(tp, check_hid_get_data);
+ ATF_TP_ADD_TC(tp, check_hid_set_data);
+ ATF_TP_ADD_TC(tp, check_parse_just_pop);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libusbhid/test_usb_hid_usages b/contrib/netbsd-tests/lib/libusbhid/test_usb_hid_usages
new file mode 100644
index 0000000..2444ef2
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libusbhid/test_usb_hid_usages
@@ -0,0 +1,17 @@
+# $NetBSD: test_usb_hid_usages,v 1.1 2016/01/01 21:38:54 jakllsch Exp $
+#
+# USB HID usage table (for t_usbhid)
+# Syntax:
+# - lines that do not start with a white space give the number and name of
+# a usage page.
+# - lines that start with a white space give the number and name of
+# a usage with the last given page.
+# If the number is * then the line matches all usages and the name
+# is a printf formatting string that will be given the usage number.
+#
+0xff1b t_usbhid page
+ 0xff2a t_usbhid usage
+
+0xff2a Quick zephyrs blow vexing daft Jim.
+ 0 Usage ID Zero %
+ * Usage ID %u %%
diff --git a/contrib/netbsd-tests/lib/libutil/t_parsedate.c b/contrib/netbsd-tests/lib/libutil/t_parsedate.c
index ec035a6..c78df58 100644
--- a/contrib/netbsd-tests/lib/libutil/t_parsedate.c
+++ b/contrib/netbsd-tests/lib/libutil/t_parsedate.c
@@ -1,6 +1,6 @@
-/* $NetBSD: t_parsedate.c,v 1.7 2013/01/19 15:21:43 apb Exp $ */
+/* $NetBSD: t_parsedate.c,v 1.25 2016/06/22 15:01:38 kre Exp $ */
/*-
- * Copyright (c) 2010 The NetBSD Foundation, Inc.
+ * Copyright (c) 2010, 2015 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,14 +29,88 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_parsedate.c,v 1.7 2013/01/19 15:21:43 apb Exp $");
+__RCSID("$NetBSD: t_parsedate.c,v 1.25 2016/06/22 15:01:38 kre Exp $");
#include <atf-c.h>
#include <errno.h>
+#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <util.h>
+/*
+ * ANY is used as a placeholder for values that do not need to be
+ * checked. The actual value is arbitrary. We don't use -1
+ * because some tests might want to use -1 as a literal value.
+ */
+#define ANY -30215
+
+/* parsecheck --
+ * call parsedate(), then call time_to_tm() on the result,
+ * and check that year/month/day/hour/minute/second are as expected.
+ *
+ * time_to_tm should usually be localtime_r or gmtime_r.
+ *
+ * Don't check values specified as ANY.
+ */
+static void
+parsecheck(const char *datestr, const time_t *reftime, const int *zoff,
+ struct tm * time_to_tm(const time_t *, struct tm *),
+ int year, int month, int day, int hour, int minute, int second)
+{
+ time_t t;
+ struct tm tm;
+ char argstr[128];
+
+ /*
+ * printable version of the args.
+ *
+ * Note that printf("%.*d", 0, 0)) prints nothing at all,
+ * while printf("%.*d", 1, val) prints the value as usual.
+ */
+ snprintf(argstr, sizeof(argstr), "%s%s%s, %s%.*jd, %s%.*d",
+ /* NULL or \"<datestr>\" */
+ (datestr ? "\"" : ""),
+ (datestr ? datestr : "NULL"),
+ (datestr ? "\"" : ""),
+ /* NULL or *reftime */
+ (reftime ? "" : "NULL"),
+ (reftime ? 1 : 0),
+ (reftime ? (intmax_t)*reftime : (intmax_t)0),
+ /* NULL or *zoff */
+ (zoff ? "" : "NULL"),
+ (zoff ? 1 : 0),
+ (zoff ? *zoff : 0));
+
+ ATF_CHECK_MSG((t = parsedate(datestr, reftime, zoff)) != -1,
+ "parsedate(%s) returned -1\n", argstr);
+ ATF_CHECK(time_to_tm(&t, &tm) != NULL);
+ if (year != ANY)
+ ATF_CHECK_MSG(tm.tm_year + 1900 == year,
+ "parsedate(%s) expected year %d got %d (+1900)\n",
+ argstr, year, (int)tm.tm_year);
+ if (month != ANY)
+ ATF_CHECK_MSG(tm.tm_mon + 1 == month,
+ "parsedate(%s) expected month %d got %d (+1)\n",
+ argstr, month, (int)tm.tm_mon);
+ if (day != ANY)
+ ATF_CHECK_MSG(tm.tm_mday == day,
+ "parsedate(%s) expected day %d got %d\n",
+ argstr, day, (int)tm.tm_mday);
+ if (hour != ANY)
+ ATF_CHECK_MSG(tm.tm_hour == hour,
+ "parsedate(%s) expected hour %d got %d\n",
+ argstr, hour, (int)tm.tm_hour);
+ if (minute != ANY)
+ ATF_CHECK_MSG(tm.tm_min == minute,
+ "parsedate(%s) expected minute %d got %d\n",
+ argstr, minute, (int)tm.tm_min);
+ if (second != ANY)
+ ATF_CHECK_MSG(tm.tm_sec == second,
+ "parsedate(%s) expected second %d got %d\n",
+ argstr, second, (int)tm.tm_sec);
+}
+
ATF_TC(dates);
ATF_TC_HEAD(dates, tc)
@@ -48,15 +122,34 @@ ATF_TC_HEAD(dates, tc)
ATF_TC_BODY(dates, tc)
{
- ATF_CHECK(parsedate("69-09-10", NULL, NULL) != -1);
- ATF_CHECK(parsedate("2006-11-17", NULL, NULL) != -1);
- ATF_CHECK(parsedate("10/1/2000", NULL, NULL) != -1);
- ATF_CHECK(parsedate("20 Jun 1994", NULL, NULL) != -1);
- ATF_CHECK(parsedate("23jun2001", NULL, NULL) != -1);
- ATF_CHECK(parsedate("1-sep-06", NULL, NULL) != -1);
- ATF_CHECK(parsedate("1/11", NULL, NULL) != -1);
- ATF_CHECK(parsedate("1500-01-02", NULL, NULL) != -1);
- ATF_CHECK(parsedate("9999-12-21", NULL, NULL) != -1);
+ parsecheck("9/10/69", NULL, NULL, localtime_r,
+ 2069, 9, 10, 0, 0, 0); /* year < 70: add 2000 */
+ parsecheck("9/10/70", NULL, NULL, localtime_r,
+ 1970, 9, 10, 0, 0, 0); /* 70 <= year < 100: add 1900 */
+ parsecheck("69-09-10", NULL, NULL, localtime_r,
+ 69, 9, 10, 0, 0, 0); /* ISO8601 year remains unchanged */
+ parsecheck("70-09-10", NULL, NULL, localtime_r,
+ 70, 9, 10, 0, 0, 0); /* ISO8601 year remains unchanged */
+ parsecheck("2006-11-17", NULL, NULL, localtime_r,
+ 2006, 11, 17, 0, 0, 0);
+ parsecheck("10/1/2000", NULL, NULL, localtime_r,
+ 2000, 10, 1, 0, 0, 0); /* month/day/year */
+ parsecheck("20 Jun 1994", NULL, NULL, localtime_r,
+ 1994, 6, 20, 0, 0, 0);
+ parsecheck("97 September 2", NULL, NULL, localtime_r,
+ 1997, 9, 2, 0, 0, 0);
+ parsecheck("23jun2001", NULL, NULL, localtime_r,
+ 2001, 6, 23, 0, 0, 0);
+ parsecheck("1-sep-06", NULL, NULL, localtime_r,
+ 2006, 9, 1, 0, 0, 0);
+ parsecheck("1/11", NULL, NULL, localtime_r,
+ ANY, 1, 11, 0, 0, 0); /* month/day */
+ parsecheck("1500-01-02", NULL, NULL, localtime_r,
+ 1500, 1, 2, 0, 0, 0);
+ parsecheck("9999-12-21", NULL, NULL, localtime_r,
+ 9999, 12, 21, 0, 0, 0);
+ parsecheck("2015.12.07.08.07.35", NULL, NULL, localtime_r,
+ 2015, 12, 7, 8, 7, 35);
}
ATF_TC(times);
@@ -70,10 +163,66 @@ ATF_TC_HEAD(times, tc)
ATF_TC_BODY(times, tc)
{
- ATF_CHECK(parsedate("10:01", NULL, NULL) != -1);
- ATF_CHECK(parsedate("10:12pm", NULL, NULL) != -1);
- ATF_CHECK(parsedate("12:11:01.000012", NULL, NULL) != -1);
- ATF_CHECK(parsedate("12:21-0500", NULL, NULL) != -1);
+ parsecheck("10:01", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 10, 1, 0);
+ parsecheck("10:12pm", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 22, 12, 0);
+ parsecheck("12:11:01.000012", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 12, 11, 1);
+ parsecheck("12:21-0500", NULL, NULL, gmtime_r,
+ ANY, ANY, ANY, 12+5, 21, 0);
+ /* numeric zones not permitted with am/pm ... */
+ parsecheck("7 a.m. ICT", NULL, NULL, gmtime_r,
+ ANY, ANY, ANY, 7-7, 0, 0);
+ parsecheck("midnight", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 0, 0, 0);
+ parsecheck("mn", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 0, 0, 0);
+ parsecheck("noon", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 12, 0, 0);
+}
+
+ATF_TC(dsttimes);
+
+ATF_TC_HEAD(dsttimes, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test DST transition times"
+ " (PR lib/47916)");
+}
+
+ATF_TC_BODY(dsttimes, tc)
+{
+ struct tm tm;
+ time_t t;
+ int tzoff;
+
+ putenv(__UNCONST("TZ=EST"));
+ tzset();
+ parsecheck("12:0", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 12, 0, 0);
+
+ putenv(__UNCONST("TZ=Asia/Tokyo"));
+ tzset();
+ parsecheck("12:0", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 12, 0, 0);
+
+ /*
+ * When the effective local time is Tue Jul 9 13:21:53 BST 2013,
+ * check mktime("14:00")
+ */
+ putenv(__UNCONST("TZ=Europe/London"));
+ tzset();
+ tm = (struct tm){
+ .tm_year = 2013-1900, .tm_mon = 7-1, .tm_mday = 9,
+ .tm_hour = 13, .tm_min = 21, .tm_sec = 53,
+ .tm_isdst = 0 };
+ t = mktime(&tm);
+ ATF_CHECK(t != (time_t)-1);
+ parsecheck("14:00", &t, NULL, localtime_r,
+ 2013, 7, 9, 14, 0, 0);
+ tzoff = -60; /* British Summer Time */
+ parsecheck("14:00", &t, &tzoff, localtime_r,
+ 2013, 7, 9, 14, 0, 0);
}
ATF_TC(relative);
@@ -86,6 +235,23 @@ ATF_TC_HEAD(relative, tc)
ATF_TC_BODY(relative, tc)
{
+ struct tm tm;
+ time_t now;
+
+#define REL_CHECK(s, now, tm) do { \
+ time_t p, q; \
+ char nb[30], pb[30], qb[30]; \
+ p = parsedate(s, &now, NULL); \
+ q = mktime(&tm); \
+ ATF_CHECK_EQ_MSG(p, q, \
+ "From %jd (%24.24s) using \"%s\", obtained %jd (%24.24s); expected %jd (%24.24s)", \
+ (uintmax_t)now, ctime_r(&now, nb), \
+ s, (uintmax_t)p, ctime_r(&p, pb), (uintmax_t)q, \
+ ctime_r(&q, qb)); \
+ } while (/*CONSTCOND*/0)
+
+#define isleap(yr) (((yr) & 3) == 0 && (((yr) % 100) != 0 || \
+ ((1900+(yr)) % 400) == 0))
ATF_CHECK(parsedate("-1 month", NULL, NULL) != -1);
ATF_CHECK(parsedate("last friday", NULL, NULL) != -1);
@@ -93,6 +259,169 @@ ATF_TC_BODY(relative, tc)
ATF_CHECK(parsedate("this thursday", NULL, NULL) != -1);
ATF_CHECK(parsedate("next sunday", NULL, NULL) != -1);
ATF_CHECK(parsedate("+2 years", NULL, NULL) != -1);
+
+ /*
+ * Test relative to a number of fixed dates. Avoid the
+ * edges of the time_t range to avert under- or overflow
+ * of the relative date, and use a prime step for maximum
+ * coverage of different times of day/week/month/year.
+ */
+ for (now = 0x00FFFFFF; now < 0xFF000000; now += 3777779) {
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mday--;
+ /* "yesterday" leaves time untouched */
+ tm.tm_isdst = -1;
+ REL_CHECK("yesterday", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mday++;
+ /* as does "tomorrow" */
+ tm.tm_isdst = -1;
+ REL_CHECK("tomorrow", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday > 4)
+ tm.tm_mday += 7;
+ tm.tm_mday += 4 - tm.tm_wday;
+ /* if a day name is mentioned, it means midnight (by default) */
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ tm.tm_isdst = -1;
+ REL_CHECK("this thursday", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mday += 14 - (tm.tm_wday ? tm.tm_wday : 7);
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ tm.tm_isdst = -1;
+ REL_CHECK("next sunday", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday <= 5)
+ tm.tm_mday -= 7;
+ tm.tm_mday += 5 - tm.tm_wday;
+ tm.tm_sec = tm.tm_min = 0;
+ tm.tm_hour = 16;
+ tm.tm_isdst = -1;
+ REL_CHECK("last friday 4 p.m.", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mday += 14;
+ if (tm.tm_wday > 3)
+ tm.tm_mday += 7;
+ tm.tm_mday += 3 - tm.tm_wday;
+ tm.tm_sec = tm.tm_min = 0;
+ tm.tm_hour = 3;
+ tm.tm_isdst = -1;
+ REL_CHECK("we fortnight 3 a.m.", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_min -= 5;
+ tm.tm_isdst = -1;
+ REL_CHECK("5 minutes ago", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_hour++;
+ tm.tm_min += 37;
+ tm.tm_isdst = -1;
+ REL_CHECK("97 minutes", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon++;
+ if (tm.tm_mon == 1 &&
+ tm.tm_mday > 28 + isleap(tm.tm_year))
+ tm.tm_mday = 28 + isleap(tm.tm_year);
+ else if ((tm.tm_mon == 3 || tm.tm_mon == 5 ||
+ tm.tm_mon == 8 || tm.tm_mon == 10) && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_isdst = -1;
+ REL_CHECK("month", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon += 2; /* "next" means add 2 ... */
+ if (tm.tm_mon == 13 &&
+ tm.tm_mday > 28 + isleap(tm.tm_year + 1))
+ tm.tm_mday = 28 + isleap(tm.tm_year + 1);
+ else if (tm.tm_mon == 8 && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_isdst = -1;
+ REL_CHECK("next month", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon--;
+ if (tm.tm_mon == 1 &&
+ tm.tm_mday > 28 + isleap(tm.tm_year))
+ tm.tm_mday = 28 + isleap(tm.tm_year);
+ else if ((tm.tm_mon == 3 || tm.tm_mon == 5 ||
+ tm.tm_mon == 8 || tm.tm_mon == 10) && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_isdst = -1;
+ REL_CHECK("last month", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon += 6;
+ if (tm.tm_mon == 13 &&
+ tm.tm_mday > 28 + isleap(tm.tm_year + 1))
+ tm.tm_mday = 28 + isleap(tm.tm_year + 1);
+ else if ((tm.tm_mon == 15 || tm.tm_mon == 17 ||
+ tm.tm_mon == 8 || tm.tm_mon == 10) && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_mday += 2;
+ tm.tm_isdst = -1;
+ REL_CHECK("+6 months 2 days", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon -= 9;
+ if (tm.tm_mon == 1 && tm.tm_mday > 28 + isleap(tm.tm_year))
+ tm.tm_mday = 28 + isleap(tm.tm_year);
+ else if ((tm.tm_mon == -9 || tm.tm_mon == -7 ||
+ tm.tm_mon == -2) && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_isdst = -1;
+ REL_CHECK("9 months ago", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday <= 2)
+ tm.tm_mday -= 7;
+ tm.tm_mday += 2 - tm.tm_wday;
+ tm.tm_isdst = -1;
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ REL_CHECK("1 week ago Tu", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_isdst = -1;
+ tm.tm_mday++;
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ REL_CHECK("midnight tomorrow", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_isdst = -1;
+ tm.tm_mday++;
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ REL_CHECK("tomorrow midnight", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_isdst = -1;
+ tm.tm_mday++;
+ tm.tm_hour = 12;
+ tm.tm_min = tm.tm_sec = 0;
+ REL_CHECK("noon tomorrow", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday > 2)
+ tm.tm_mday += 7;
+ tm.tm_mday += 2 - tm.tm_wday;
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ tm.tm_isdst = -1;
+ REL_CHECK("midnight Tuesday", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday > 2 + 1)
+ tm.tm_mday += 7;
+ tm.tm_mday += 2 - tm.tm_wday;
+ tm.tm_mday++; /* xxx midnight --> the next day */
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ tm.tm_isdst = -1;
+ REL_CHECK("Tuesday midnight", now, tm);
+ }
}
ATF_TC(atsecs);
@@ -131,12 +460,124 @@ ATF_TC_BODY(atsecs, tc)
ATF_CHECK(parsedate("@junk", NULL, NULL) == (time_t)-1 && errno != 0);
}
+ATF_TC(zones);
+
+ATF_TC_HEAD(zones, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test parsing dates with zones");
+}
+
+ATF_TC_BODY(zones, tc)
+{
+ parsecheck("2015-12-06 16:11:48 UTC", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 16, 11, 48);
+ parsecheck("2015-12-06 16:11:48 UT", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 16, 11, 48);
+ parsecheck("2015-12-06 16:11:48 GMT", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 16, 11, 48);
+ parsecheck("2015-12-06 16:11:48 +0000", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 16, 11, 48);
+
+ parsecheck("2015-12-06 16:11:48 -0500", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 21, 11, 48);
+ parsecheck("2015-12-06 16:11:48 EST", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 21, 11, 48);
+ parsecheck("2015-12-06 16:11:48 EDT", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 20, 11, 48);
+ parsecheck("2015-12-06 16:11:48 +0500", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 11, 11, 48);
+
+ parsecheck("2015-12-06 16:11:48 +1000", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 6, 11, 48);
+ parsecheck("2015-12-06 16:11:48 AEST", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 6, 11, 48);
+ parsecheck("2015-12-06 16:11:48 -1000", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 2, 11, 48);
+ parsecheck("2015-12-06 16:11:48 HST", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 2, 11, 48);
+
+ parsecheck("2015-12-06 16:11:48 AWST", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 8, 11, 48);
+ parsecheck("2015-12-06 16:11:48 NZDT", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 3, 11, 48);
+
+ parsecheck("Sun, 6 Dec 2015 09:43:16 -0500", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 14, 43, 16);
+ parsecheck("Mon Dec 7 03:13:31 ICT 2015", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 20, 13, 31);
+ /* the day name is ignored when a day of month (etc) is given... */
+ parsecheck("Sat Dec 7 03:13:31 ICT 2015", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 20, 13, 31);
+
+
+ parsecheck("2015-12-06 12:00:00 IDLW", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 0, 0, 0);
+ parsecheck("2015-12-06 12:00:00 IDLE", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 0, 0, 0);
+
+ parsecheck("2015-12-06 21:17:33 NFT", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 0, 47, 33);
+ parsecheck("2015-12-06 21:17:33 ACST", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 11, 47, 33);
+ parsecheck("2015-12-06 21:17:33 +0717", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 14, 0, 33);
+
+ parsecheck("2015-12-06 21:21:21 Z", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 21, 21, 21);
+ parsecheck("2015-12-06 21:21:21 A", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 22, 21, 21);
+ parsecheck("2015-12-06 21:21:21 G", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 4, 21, 21);
+ parsecheck("2015-12-06 21:21:21 M", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 9, 21, 21);
+ parsecheck("2015-12-06 21:21:21 N", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 20, 21, 21);
+ parsecheck("2015-12-06 21:21:21 T", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 14, 21, 21);
+ parsecheck("2015-12-06 21:21:21 Y", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 9, 21, 21);
+
+}
+
+ATF_TC(gibberish);
+
+ATF_TC_HEAD(gibberish, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test (not) parsing nonsense");
+}
+
+ATF_TC_BODY(gibberish, tc)
+{
+ errno = 0;
+ ATF_CHECK(parsedate("invalid nonsense", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("12th day of Christmas", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("2015-31-07 15:00", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("2015-02-29 10:01", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("2015-12-06 24:01", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("2015-12-06 14:61", NULL, NULL) == (time_t)-1
+ && errno != 0);
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, dates);
ATF_TP_ADD_TC(tp, times);
+ ATF_TP_ADD_TC(tp, dsttimes);
ATF_TP_ADD_TC(tp, relative);
ATF_TP_ADD_TC(tp, atsecs);
+ ATF_TP_ADD_TC(tp, zones);
+ ATF_TP_ADD_TC(tp, gibberish);
return atf_no_error();
}
+
diff --git a/contrib/netbsd-tests/net/arp/t_arp.sh b/contrib/netbsd-tests/net/arp/t_arp.sh
new file mode 100755
index 0000000..04e2f70
--- /dev/null
+++ b/contrib/netbsd-tests/net/arp/t_arp.sh
@@ -0,0 +1,612 @@
+# $NetBSD: t_arp.sh,v 1.22 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKSRC=unix://commsock1
+SOCKDST=unix://commsock2
+IP4SRC=10.0.1.1
+IP4DST=10.0.1.2
+IP4DST_PROXYARP1=10.0.1.3
+IP4DST_PROXYARP2=10.0.1.4
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=1
+
+atf_test_case arp_cache_expiration_5s cleanup
+atf_test_case arp_cache_expiration_10s cleanup
+atf_test_case arp_command cleanup
+atf_test_case arp_garp cleanup
+atf_test_case arp_cache_overwriting cleanup
+atf_test_case arp_proxy_arp_pub cleanup
+atf_test_case arp_proxy_arp_pubproxy cleanup
+atf_test_case arp_link_activation cleanup
+atf_test_case arp_static cleanup
+
+arp_cache_expiration_5s_head()
+{
+ atf_set "descr" "Tests for ARP cache expiration (5s)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_cache_expiration_10s_head()
+{
+ atf_set "descr" "Tests for ARP cache expiration (10s)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_command_head()
+{
+ atf_set "descr" "Tests for arp_commands of arp(8)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_garp_head()
+{
+ atf_set "descr" "Tests for GARP"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_cache_overwriting_head()
+{
+ atf_set "descr" "Tests for behavior of overwriting ARP caches"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_proxy_arp_pub_head()
+{
+ atf_set "descr" "Tests for Proxy ARP (pub)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_proxy_arp_pubproxy_head()
+{
+ atf_set "descr" "Tests for Proxy ARP (pub proxy)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_link_activation_head()
+{
+ atf_set "descr" "Tests for activating a new MAC address"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_static_head()
+{
+
+ atf_set "descr" "Tests for static ARP entries"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_dst_server()
+{
+
+ rump_server_add_iface $SOCKDST shmif0 bus1
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4DST/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && rump.arp -n -a
+}
+
+setup_src_server()
+{
+ local keep=$1
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # Adjust ARP parameters
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.arp.keep=$keep
+
+ # Setup an interface
+ rump_server_add_iface $SOCKSRC shmif0 bus1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4SRC/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Sanity check
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
+ atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
+}
+
+test_cache_expiration()
+{
+ local arp_keep=$1
+ local bonus=2
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ #
+ # Check if a cache is expired expectedly
+ #
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
+
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
+ # Should be cached
+ atf_check -s exit:0 -o ignore rump.arp -n $IP4DST
+
+ atf_check -s exit:0 sleep $(($arp_keep + $bonus))
+
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
+ # Should be expired
+ atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
+}
+
+arp_cache_expiration_5s_body()
+{
+
+ test_cache_expiration 5
+ rump_server_destroy_ifaces
+}
+
+arp_cache_expiration_10s_body()
+{
+
+ test_cache_expiration 10
+ rump_server_destroy_ifaces
+}
+
+arp_command_body()
+{
+ local arp_keep=5
+ local bonus=2
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # We can delete the entry for the interface's IP address
+ atf_check -s exit:0 -o ignore rump.arp -d $IP4SRC
+
+ # Add and delete a static entry
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.10
+ atf_check -s exit:0 -o ignore rump.arp -d 10.0.1.10
+ $DEBUG && rump.arp -n -a
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
+
+ # Add multiple entries via a file
+ cat - > ./list <<-EOF
+ 10.0.1.11 b2:a0:20:00:00:11
+ 10.0.1.12 b2:a0:20:00:00:12
+ 10.0.1.13 b2:a0:20:00:00:13
+ 10.0.1.14 b2:a0:20:00:00:14
+ 10.0.1.15 b2:a0:20:00:00:15
+ EOF
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -f ./list
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:11' rump.arp -n 10.0.1.11
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.11
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:12' rump.arp -n 10.0.1.12
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.12
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:13' rump.arp -n 10.0.1.13
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.13
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:14' rump.arp -n 10.0.1.14
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.14
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:15' rump.arp -n 10.0.1.15
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.15
+
+ # Test arp -a
+ atf_check -s exit:0 -o match:'10.0.1.11' rump.arp -n -a
+ atf_check -s exit:0 -o match:'10.0.1.12' rump.arp -n -a
+ atf_check -s exit:0 -o match:'10.0.1.13' rump.arp -n -a
+ atf_check -s exit:0 -o match:'10.0.1.14' rump.arp -n -a
+ atf_check -s exit:0 -o match:'10.0.1.15' rump.arp -n -a
+
+ # Flush all entries
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -d -a
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.11
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.12
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.13
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.14
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.15
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.1
+
+ # Test temp option
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
+ atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10
+
+ # Hm? the cache doesn't expire...
+ atf_check -s exit:0 sleep $(($arp_keep + $bonus))
+ $DEBUG && rump.arp -n -a
+ #atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
+
+ rump_server_destroy_ifaces
+}
+
+make_pkt_str_arpreq()
+{
+ local target=$1
+ local sender=$2
+ pkt="> ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42:"
+ pkt="$pkt Request who-has $target tell $sender, length 28"
+ echo $pkt
+}
+
+arp_garp_body()
+{
+ local pkt=
+
+ rump_server_start $SOCKSRC
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # Setup an interface
+ rump_server_add_iface $SOCKSRC shmif0 bus1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ $DEBUG && rump.ifconfig shmif0
+
+ atf_check -s exit:0 sleep 1
+ shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out
+
+ # A GARP packet is sent for the primary address
+ pkt=$(make_pkt_str_arpreq 10.0.0.1 10.0.0.1)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # No GARP packet is sent for the alias address
+ pkt=$(make_pkt_str_arpreq 10.0.0.2 10.0.0.2)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.3/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.4/24 alias
+
+ # No GARP packets are sent during IFF_UP
+ shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out
+ pkt=$(make_pkt_str_arpreq 10.0.0.3 10.0.0.3)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+ pkt=$(make_pkt_str_arpreq 10.0.0.4 10.0.0.4)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ rump_server_destroy_ifaces
+}
+
+arp_cache_overwriting_body()
+{
+ local arp_keep=5
+ local bonus=2
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # Cannot overwrite a permanent cache
+ atf_check -s not-exit:0 -e match:'File exists' \
+ rump.arp -s $IP4SRC b2:a0:20:00:00:ff
+ $DEBUG && rump.arp -n -a
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
+ $DEBUG && rump.arp -n -a
+ # Can overwrite a dynamic cache
+ atf_check -s exit:0 -o ignore rump.arp -s $IP4DST b2:a0:20:00:00:00
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:00' rump.arp -n $IP4DST
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n $IP4DST
+
+ atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
+ atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10
+ # Can overwrite a temp cache
+ atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:ff
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:ff' rump.arp -n 10.0.1.10
+ $DEBUG && rump.arp -n -a
+
+ rump_server_destroy_ifaces
+}
+
+make_pkt_str_arprep()
+{
+ local ip=$1
+ local mac=$2
+ pkt="ethertype ARP (0x0806), length 42: "
+ pkt="Reply $ip is-at $mac, length 28"
+ echo $pkt
+}
+
+make_pkt_str_garp()
+{
+ local ip=$1
+ local mac=$2
+ local pkt=
+ pkt="$mac > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),"
+ pkt="$pkt length 42: Request who-has $ip tell $ip, length 28"
+ echo $pkt
+}
+
+test_proxy_arp()
+{
+ local arp_keep=5
+ local opts= title= flags=
+ local type=$1
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST tap
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1
+ macaddr_dst=$(get_macaddr $SOCKDST shmif0)
+
+ if [ "$type" = "pub" ]; then
+ opts="pub"
+ title="permanent published"
+ else
+ opts="pub proxy"
+ title='permanent published \(proxy only\)'
+ fi
+
+ #
+ # Test#1: First setup an endpoint then create proxy arp entry
+ #
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 rump.ifconfig tap1 create
+ atf_check -s exit:0 rump.ifconfig tap1 $IP4DST_PROXYARP1/24 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Try to ping (should fail w/o proxy arp)
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
+
+ # Flushing
+ extract_new_packets bus1 > ./out
+
+ # Set up proxy ARP entry
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore \
+ rump.arp -s $IP4DST_PROXYARP1 $macaddr_dst $opts
+ atf_check -s exit:0 -o match:"$title" rump.arp -n $IP4DST_PROXYARP1
+
+ # Try to ping
+ export RUMP_SERVER=$SOCKSRC
+ if [ "$type" = "pub" ]; then
+ # XXX fails
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
+ else
+ atf_check -s exit:0 -o ignore \
+ rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
+ fi
+
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ pkt1=$(make_pkt_str_arprep $IP4DST_PROXYARP1 $macaddr_dst)
+ pkt2=$(make_pkt_str_garp $IP4DST_PROXYARP1 $macaddr_dst)
+ if [ "$type" = "pub" ]; then
+ atf_check -s not-exit:0 -x \
+ "cat ./out |grep -q -e '$pkt1' -e '$pkt2'"
+ else
+ atf_check -s exit:0 -x "cat ./out |grep -q -e '$pkt1' -e '$pkt2'"
+ fi
+
+ #
+ # Test#2: Create proxy arp entry then set up an endpoint
+ #
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore \
+ rump.arp -s $IP4DST_PROXYARP2 $macaddr_dst $opts
+ atf_check -s exit:0 -o match:"$title" rump.arp -n $IP4DST_PROXYARP2
+ $DEBUG && rump.netstat -nr -f inet
+
+ # Try to ping (should fail because no endpoint exists)
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP2
+
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # ARP reply should be sent
+ pkt=$(make_pkt_str_arprep $IP4DST_PROXYARP2 $macaddr_dst)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 rump.ifconfig tap2 create
+ atf_check -s exit:0 rump.ifconfig tap2 $IP4DST_PROXYARP2/24 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Try to ping
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP2
+}
+
+arp_proxy_arp_pub_body()
+{
+
+ test_proxy_arp pub
+ rump_server_destroy_ifaces
+}
+
+arp_proxy_arp_pubproxy_body()
+{
+
+ test_proxy_arp pubproxy
+ rump_server_destroy_ifaces
+}
+
+arp_link_activation_body()
+{
+ local arp_keep=5
+ local bonus=2
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ # flush old packets
+ extract_new_packets bus1 > ./out
+
+ export RUMP_SERVER=$SOCKSRC
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
+ b2:a1:00:00:00:01
+
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
+ b2:a1:00:00:00:02 active
+
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC)
+ atf_check -s exit:0 -x \
+ "cat ./out |grep '$pkt' |grep -q 'b2:a1:00:00:00:02'"
+
+ rump_server_destroy_ifaces
+}
+
+arp_static_body()
+{
+ local arp_keep=5
+ local macaddr_src=
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ macaddr_src=$(get_macaddr $SOCKSRC shmif0)
+
+ # Set a (valid) static ARP entry for the src server
+ export RUMP_SERVER=$SOCKDST
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -s $IP4SRC $macaddr_src
+ $DEBUG && rump.arp -n -a
+
+ # Test receiving an ARP request with the static ARP entry (as spa/sha)
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST
+
+ rump_server_destroy_ifaces
+}
+
+arp_cache_expiration_5s_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_cache_expiration_10s_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_command_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_garp_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_cache_overwriting_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_proxy_arp_pub_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_proxy_arp_pubproxy_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_link_activation_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_static_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case arp_cache_expiration_5s
+ atf_add_test_case arp_cache_expiration_10s
+ atf_add_test_case arp_command
+ atf_add_test_case arp_garp
+ atf_add_test_case arp_cache_overwriting
+ atf_add_test_case arp_proxy_arp_pub
+ atf_add_test_case arp_proxy_arp_pubproxy
+ atf_add_test_case arp_link_activation
+ atf_add_test_case arp_static
+}
diff --git a/contrib/netbsd-tests/net/arp/t_dad.sh b/contrib/netbsd-tests/net/arp/t_dad.sh
new file mode 100755
index 0000000..57a7d4b0
--- /dev/null
+++ b/contrib/netbsd-tests/net/arp/t_dad.sh
@@ -0,0 +1,201 @@
+# $NetBSD: t_dad.sh,v 1.13 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKLOCAL=unix://commsock1
+SOCKPEER=unix://commsock2
+
+DEBUG=${DEBUG:-false}
+
+atf_test_case dad_basic cleanup
+atf_test_case dad_duplicated cleanup
+
+dad_basic_head()
+{
+ atf_set "descr" "Tests for IPv4 DAD basic behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+dad_duplicated_head()
+{
+ atf_set "descr" "Tests for IPv4 DAD duplicated state"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_server()
+{
+ local sock=$1
+ local ip=$2
+
+ rump_server_add_iface $sock shmif0 bus1
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $ip/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+}
+
+make_pkt_str()
+{
+ local target=$1
+ local sender=$2
+ pkt="> ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42:"
+ pkt="$pkt Request who-has $target tell $sender, length 28"
+ echo $pkt
+}
+
+dad_basic_body()
+{
+ local pkt=
+
+ rump_server_start $SOCKLOCAL
+ rump_server_add_iface $SOCKLOCAL shmif0 bus1
+
+ export RUMP_SERVER=$SOCKLOCAL
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias
+ $DEBUG && rump.ifconfig shmif0
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ rump.ifconfig shmif0 > ./out
+ $DEBUG && cat ./out
+
+ # The primary address doesn't start with tentative state
+ atf_check -s not-exit:0 -x "cat ./out |grep 10.0.0.1 |grep -iq tentative"
+ # The alias address starts with tentative state
+ # XXX we have no stable way to check this, so skip for now
+ #atf_check -s exit:0 -x "cat ./out |grep 10.0.0.2 |grep -iq tentative"
+
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # Check DAD probe packets
+ pkt=$(make_pkt_str 10.0.0.2 0.0.0.0)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # No DAD for the primary address
+ pkt=$(make_pkt_str 10.0.0.1 0.0.0.0)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 10
+ # Give a chance to send a DAD announce packet
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # Check the DAD announce packet
+ pkt=$(make_pkt_str 10.0.0.2 10.0.0.2)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # The alias address left tentative
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep 10.0.0.2 |grep -iq tentative"
+
+ #
+ # Add a new address on the fly
+ #
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.3/24 alias
+
+ # The new address starts with tentative state
+ # XXX we have no stable way to check this, so skip for now
+ #atf_check -s exit:0 -x "rump.ifconfig shmif0 |grep 10.0.0.3 |grep -iq tentative"
+
+ # Check DAD probe packets
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+ pkt=$(make_pkt_str 10.0.0.3 0.0.0.0)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 10
+ # Give a chance to send a DAD announce packet
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # Check the DAD announce packet
+ pkt=$(make_pkt_str 10.0.0.3 10.0.0.3)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # The new address left tentative
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep 10.0.0.3 |grep -iq tentative"
+
+ rump_server_destroy_ifaces
+}
+
+dad_duplicated_body()
+{
+ local localip1=10.0.1.1
+ local localip2=10.0.1.11
+ local peerip=10.0.1.2
+
+ rump_server_start $SOCKLOCAL
+ rump_server_start $SOCKPEER
+
+ setup_server $SOCKLOCAL $localip1
+ setup_server $SOCKPEER $peerip
+
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # The primary address isn't marked as duplicated
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip1 |grep -iq duplicated"
+
+ #
+ # Add a new address duplicated with the peer server
+ #
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $peerip alias
+ atf_check -s exit:0 sleep 1
+
+ # The new address is marked as duplicated
+ atf_check -s exit:0 -x "rump.ifconfig shmif0 |grep $peerip |grep -iq duplicated"
+
+ # A unique address isn't marked as duplicated
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $localip2 alias
+ atf_check -s exit:0 sleep 1
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip2 |grep -iq duplicated"
+
+ rump_server_destroy_ifaces
+}
+
+dad_basic_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+dad_duplicated_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case dad_basic
+ atf_add_test_case dad_duplicated
+}
diff --git a/contrib/netbsd-tests/net/bpfilter/t_bpfilter.c b/contrib/netbsd-tests/net/bpfilter/t_bpfilter.c
index 9d8d56f..460b43e 100644
--- a/contrib/netbsd-tests/net/bpfilter/t_bpfilter.c
+++ b/contrib/netbsd-tests/net/bpfilter/t_bpfilter.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_bpfilter.c,v 1.8 2014/06/24 11:32:36 alnsn Exp $ */
+/* $NetBSD: t_bpfilter.c,v 1.10 2015/02/11 23:39:07 alnsn Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -25,7 +25,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_bpfilter.c,v 1.8 2014/06/24 11:32:36 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfilter.c,v 1.10 2015/02/11 23:39:07 alnsn Exp $");
#include <sys/param.h>
#include <sys/ioctl.h>
@@ -115,6 +115,21 @@ static struct bpf_insn noinitX_prog[] = {
BPF_STMT(BPF_RET+BPF_A, 0),
};
+static struct bpf_insn badjmp_prog[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 5),
+ BPF_STMT(BPF_RET+BPF_A, 0),
+};
+
+static struct bpf_insn negjmp_prog[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 0),
+ BPF_STMT(BPF_JMP+BPF_JA, UINT32_MAX - 1), // -2
+ BPF_STMT(BPF_RET+BPF_A, 0),
+};
+
+static struct bpf_insn badret_prog[] = {
+ BPF_STMT(BPF_RET+BPF_A+0x8000, 0),
+};
+
static uint16_t
in_cksum(void *data, size_t len)
{
@@ -387,6 +402,70 @@ ATF_TC_BODY(bpfilternoinitX, tc)
RL(send_bpf_prog("bpfilternoinitX", &prog));
}
+ATF_TC(bpfilterbadjmp);
+ATF_TC_HEAD(bpfilterbadjmp, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Checks that bpf program that "
+ "jumps to invalid destination is rejected by the kernel");
+ atf_tc_set_md_var(tc, "timeout", "30");
+}
+
+ATF_TC_BODY(bpfilterbadjmp, tc)
+{
+ struct bpf_program prog;
+
+ prog.bf_len = __arraycount(badjmp_prog);
+ prog.bf_insns = badjmp_prog;
+ ATF_CHECK_ERRNO(EINVAL, send_bpf_prog("bpfilterbadjmp", &prog) == -1);
+}
+
+ATF_TC(bpfilternegjmp);
+ATF_TC_HEAD(bpfilternegjmp, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Checks that bpf program that "
+ "jumps backwards is rejected by the kernel");
+ atf_tc_set_md_var(tc, "timeout", "30");
+}
+
+ATF_TC_BODY(bpfilternegjmp, tc)
+{
+ struct bpf_program prog;
+
+ prog.bf_len = __arraycount(negjmp_prog);
+ prog.bf_insns = negjmp_prog;
+ ATF_CHECK_ERRNO(EINVAL, send_bpf_prog("bpfilternegjmp", &prog) == -1);
+}
+
+ATF_TC(bpfilterbadret);
+ATF_TC_HEAD(bpfilterbadret, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Checks that bpf program that "
+ "ends with invalid BPF_RET instruction is rejected by the kernel");
+ atf_tc_set_md_var(tc, "timeout", "30");
+}
+
+ATF_TC_BODY(bpfilterbadret, tc)
+{
+ struct bpf_program prog;
+ struct bpf_insn *last;
+
+ prog.bf_len = __arraycount(badret_prog);
+ prog.bf_insns = badret_prog;
+
+ /*
+ * The point of this test is checking a bad instruction of
+ * a valid class and with a valid BPF_RVAL data.
+ */
+ last = &prog.bf_insns[prog.bf_len - 1];
+ ATF_CHECK(BPF_CLASS(last->code) == BPF_RET &&
+ (BPF_RVAL(last->code) == BPF_K || BPF_RVAL(last->code) == BPF_A));
+
+ ATF_CHECK_ERRNO(EINVAL, send_bpf_prog("bpfilterbadret", &prog) == -1);
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -395,6 +474,9 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfilterbadmem);
ATF_TP_ADD_TC(tp, bpfilternoinitA);
ATF_TP_ADD_TC(tp, bpfilternoinitX);
+ ATF_TP_ADD_TC(tp, bpfilterbadjmp);
+ ATF_TP_ADD_TC(tp, bpfilternegjmp);
+ ATF_TP_ADD_TC(tp, bpfilterbadret);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/net/bpfjit/t_bpfjit.c b/contrib/netbsd-tests/net/bpfjit/t_bpfjit.c
index a9f8f41..58db1e0 100644
--- a/contrib/netbsd-tests/net/bpfjit/t_bpfjit.c
+++ b/contrib/netbsd-tests/net/bpfjit/t_bpfjit.c
@@ -1,7 +1,7 @@
-/* $NetBSD: t_bpfjit.c,v 1.2 2014/07/08 21:44:26 alnsn Exp $ */
+/* $NetBSD: t_bpfjit.c,v 1.11 2015/02/14 22:34:33 alnsn Exp $ */
/*-
- * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
+ * Copyright (c) 2011-2012, 2014-2015 Alexander Nasonov.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_bpfjit.c,v 1.2 2014/07/08 21:44:26 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.11 2015/02/14 22:34:33 alnsn Exp $");
#include <sys/param.h>
#include <sys/mbuf.h>
@@ -79,15 +79,73 @@ ATF_TC_HEAD(bpfjit_empty, tc)
ATF_TC_BODY(bpfjit_empty, tc)
{
struct bpf_insn dummy;
- bpfjit_func_t fn;
+ bpfjit_func_t code;
RZ(rump_init());
+ ATF_CHECK(!prog_validate(&dummy, 0));
+
rump_schedule();
- fn = rumpns_bpfjit_generate_code(NULL, &dummy, 0);
+ code = rumpns_bpfjit_generate_code(NULL, &dummy, 0);
rump_unschedule();
- ATF_CHECK(fn == NULL);
+ ATF_CHECK(code == NULL);
+}
+
+ATF_TC(bpfjit_ret_k);
+ATF_TC_HEAD(bpfjit_ret_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of a trivial bpf program");
+}
+
+ATF_TC_BODY(bpfjit_ret_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_RET+BPF_K, 17)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 17);
+}
+
+ATF_TC(bpfjit_bad_ret_k);
+ATF_TC_HEAD(bpfjit_bad_ret_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that JIT compilation of a program with bad BPF_RET fails");
+}
+
+ATF_TC_BODY(bpfjit_bad_ret_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_RET+BPF_K+0x8000, 13)
+ };
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ /*
+ * The point of this test is checking a bad instruction of
+ * a valid class and with a valid BPF_RVAL data.
+ */
+ const uint16_t rcode = insns[0].code;
+ ATF_CHECK(BPF_CLASS(rcode) == BPF_RET &&
+ (BPF_RVAL(rcode) == BPF_K || BPF_RVAL(rcode) == BPF_A));
+
+ RZ(rump_init());
+
+ ATF_CHECK(!prog_validate(insns, insn_count));
+
+ /* Current implementation generates code. */
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 13);
}
ATF_TC(bpfjit_alu_add_k);
@@ -364,6 +422,205 @@ ATF_TC_BODY(bpfjit_alu_div80000000_k, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
}
+ATF_TC(bpfjit_alu_mod0_k);
+ATF_TC_HEAD(bpfjit_alu_mod0_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod0_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ //ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod1_k);
+ATF_TC_HEAD(bpfjit_alu_mod1_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=1");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod1_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 1),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod2_k);
+ATF_TC_HEAD(bpfjit_alu_mod2_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=2");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod2_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 2),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
+}
+
+ATF_TC(bpfjit_alu_mod4_k);
+ATF_TC_HEAD(bpfjit_alu_mod4_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=4");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod4_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 4),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3);
+}
+
+ATF_TC(bpfjit_alu_mod10_k);
+ATF_TC_HEAD(bpfjit_alu_mod10_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 9);
+}
+
+ATF_TC(bpfjit_alu_mod10000_k);
+ATF_TC_HEAD(bpfjit_alu_mod10000_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10000");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10000_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10000),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3849);
+}
+
+ATF_TC(bpfjit_alu_mod7609801_k);
+ATF_TC_HEAD(bpfjit_alu_mod7609801_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=7609801");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod7609801_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(7609801)),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3039531);
+}
+
+ATF_TC(bpfjit_alu_mod80000000_k);
+ATF_TC_HEAD(bpfjit_alu_mod80000000_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0x80000000");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod80000000_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(0x80000000)),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == UINT32_C(0x7fffffde));
+}
+
ATF_TC(bpfjit_alu_and_k);
ATF_TC_HEAD(bpfjit_alu_and_k, tc)
{
@@ -414,6 +671,31 @@ ATF_TC_BODY(bpfjit_alu_or_k, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
}
+ATF_TC(bpfjit_alu_xor_k);
+ATF_TC_HEAD(bpfjit_alu_xor_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_K");
+}
+
+ATF_TC_BODY(bpfjit_alu_xor_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+ BPF_STMT(BPF_ALU+BPF_XOR+BPF_K, 0x0000b1e0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
+}
+
ATF_TC(bpfjit_alu_lsh_k);
ATF_TC_HEAD(bpfjit_alu_lsh_k, tc)
{
@@ -852,7 +1134,7 @@ ATF_TC_HEAD(bpfjit_alu_div80000000_x, tc)
ATF_TC_BODY(bpfjit_alu_div80000000_x, tc)
{
static struct bpf_insn insns[] = {
- BPF_STMT(BPF_LD+BPF_IMM, UINT32_MAX - 33),
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
BPF_STMT(BPF_RET+BPF_A, 0)
@@ -868,6 +1150,213 @@ ATF_TC_BODY(bpfjit_alu_div80000000_x, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
}
+ATF_TC(bpfjit_alu_mod0_x);
+ATF_TC_HEAD(bpfjit_alu_mod0_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod0_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod1_x);
+ATF_TC_HEAD(bpfjit_alu_mod1_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=1");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod1_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod2_x);
+ATF_TC_HEAD(bpfjit_alu_mod2_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=2");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod2_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
+}
+
+ATF_TC(bpfjit_alu_mod4_x);
+ATF_TC_HEAD(bpfjit_alu_mod4_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=4");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod4_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3);
+}
+
+ATF_TC(bpfjit_alu_mod10_x);
+ATF_TC_HEAD(bpfjit_alu_mod10_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 9);
+}
+
+ATF_TC(bpfjit_alu_mod10000_x);
+ATF_TC_HEAD(bpfjit_alu_mod10000_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10000");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10000_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10000),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3849);
+}
+
+ATF_TC(bpfjit_alu_mod7609801_x);
+ATF_TC_HEAD(bpfjit_alu_mod7609801_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=7609801");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod7609801_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(7609801)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3039531);
+}
+
+ATF_TC(bpfjit_alu_mod80000000_x);
+ATF_TC_HEAD(bpfjit_alu_mod80000000_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0x80000000");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod80000000_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == UINT32_C(0x7fffffde));
+}
+
ATF_TC(bpfjit_alu_and_x);
ATF_TC_HEAD(bpfjit_alu_and_x, tc)
{
@@ -920,6 +1409,32 @@ ATF_TC_BODY(bpfjit_alu_or_x, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
}
+ATF_TC(bpfjit_alu_xor_x);
+ATF_TC_HEAD(bpfjit_alu_xor_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_X");
+}
+
+ATF_TC_BODY(bpfjit_alu_xor_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0x0000b1e0),
+ BPF_STMT(BPF_ALU+BPF_XOR+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
+}
+
ATF_TC(bpfjit_alu_lsh_x);
ATF_TC_HEAD(bpfjit_alu_lsh_x, tc)
{
@@ -1155,6 +1670,66 @@ ATF_TC_BODY(bpfjit_jmp_ja, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == UINT32_MAX);
}
+ATF_TC(bpfjit_jmp_ja_invalid);
+ATF_TC_HEAD(bpfjit_jmp_ja_invalid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test BPF_JMP+BPF_JA to invalid destination");
+}
+
+ATF_TC_BODY(bpfjit_jmp_ja_invalid, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 4),
+ BPF_STMT(BPF_RET+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_K, 1),
+ BPF_STMT(BPF_RET+BPF_K, 2),
+ BPF_STMT(BPF_RET+BPF_K, 3),
+ };
+
+ bpfjit_func_t code;
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(!prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_CHECK(code == NULL);
+}
+
+ATF_TC(bpfjit_jmp_ja_overflow);
+ATF_TC_HEAD(bpfjit_jmp_ja_overflow, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test BPF_JMP+BPF_JA with negative offset");
+}
+
+ATF_TC_BODY(bpfjit_jmp_ja_overflow, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 1),
+ BPF_STMT(BPF_RET+BPF_K, 777),
+ BPF_STMT(BPF_JMP+BPF_JA, UINT32_MAX - 1), // -2
+ BPF_STMT(BPF_RET+BPF_K, 0)
+ };
+
+ bpfjit_func_t code;
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ /* Jumps with negative offsets work only in userspace. */
+ ATF_CHECK(!prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_CHECK(code == NULL);
+}
+
ATF_TC(bpfjit_jmp_jgt_k);
ATF_TC_HEAD(bpfjit_jmp_jgt_k, tc)
{
@@ -1574,26 +2149,26 @@ ATF_TC_BODY(bpfjit_jmp_jeq_x, tc)
BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
- BPF_STMT(BPF_RET+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_K, 1),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 0),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
- BPF_STMT(BPF_RET+BPF_K, 1),
- BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
BPF_STMT(BPF_RET+BPF_K, 2),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 3),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 3),
- BPF_STMT(BPF_RET+BPF_K, 3),
BPF_STMT(BPF_RET+BPF_K, 4),
BPF_STMT(BPF_RET+BPF_K, 5),
+ BPF_STMT(BPF_RET+BPF_K, 6),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 3, 1),
- BPF_STMT(BPF_RET+BPF_K, 6),
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 0),
BPF_STMT(BPF_RET+BPF_K, 7),
- BPF_STMT(BPF_RET+BPF_K, 8)
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
+ BPF_STMT(BPF_RET+BPF_K, 8),
+ BPF_STMT(BPF_RET+BPF_K, 9)
};
bpfjit_func_t code;
@@ -1610,14 +2185,14 @@ ATF_TC_BODY(bpfjit_jmp_jeq_x, tc)
rump_unschedule();
ATF_REQUIRE(code != NULL);
- ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
- ATF_CHECK(jitcall(code, pkt, 2, 2) == 7);
- ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
- ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
- ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
- ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
- ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
- ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 8);
+ ATF_CHECK(jitcall(code, pkt, 2, 2) == 8);
+ ATF_CHECK(jitcall(code, pkt, 3, 3) == 2);
+ ATF_CHECK(jitcall(code, pkt, 4, 4) == 8);
+ ATF_CHECK(jitcall(code, pkt, 5, 5) == 3);
+ ATF_CHECK(jitcall(code, pkt, 6, 6) == 9);
+ ATF_CHECK(jitcall(code, pkt, 7, 7) == 6);
+ ATF_CHECK(jitcall(code, pkt, 8, 8) == 1);
rump_schedule();
rumpns_bpfjit_free_code(code);
@@ -1687,6 +2262,116 @@ ATF_TC_BODY(bpfjit_jmp_jset_x, tc)
rump_unschedule();
}
+ATF_TC(bpfjit_jmp_jeq_x_noinit_ax);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_ax, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised A and X");
+}
+
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_ax, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 10);
+
+ rump_schedule();
+ rumpns_bpfjit_free_code(code);
+ rump_unschedule();
+}
+
+ATF_TC(bpfjit_jmp_jeq_x_noinit_a);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_a, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised A");
+}
+
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_a, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0), /* X > 0 */
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+ rump_schedule();
+ rumpns_bpfjit_free_code(code);
+ rump_unschedule();
+}
+
+ATF_TC(bpfjit_jmp_jeq_x_noinit_x);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised X");
+}
+
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_LEN, 0), /* A > 0 */
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+ rump_schedule();
+ rumpns_bpfjit_free_code(code);
+ rump_unschedule();
+}
+
ATF_TC(bpfjit_jmp_modulo_x);
ATF_TC_HEAD(bpfjit_jmp_modulo_x, tc)
{
@@ -3887,6 +4572,8 @@ ATF_TP_ADD_TCS(tp)
* to ../../lib/libbpfjit/t_bpfjit.c
*/
ATF_TP_ADD_TC(tp, bpfjit_empty);
+ ATF_TP_ADD_TC(tp, bpfjit_ret_k);
+ ATF_TP_ADD_TC(tp, bpfjit_bad_ret_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_add_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_sub_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_mul_k);
@@ -3898,8 +4585,17 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfjit_alu_div10000_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_div7609801_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_div80000000_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod0_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod1_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod2_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod4_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod10_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod10000_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod7609801_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod80000000_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_and_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_or_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_xor_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_lsh_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_lsh0_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_rsh_k);
@@ -3916,8 +4612,17 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfjit_alu_div10000_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_div7609801_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_div80000000_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod0_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod1_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod2_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod4_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod10_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod10000_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod7609801_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod80000000_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_and_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_or_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_xor_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_lsh_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_lsh0_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_rsh_x);
@@ -3925,6 +4630,8 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfjit_alu_modulo_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_neg);
ATF_TP_ADD_TC(tp, bpfjit_jmp_ja);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_ja_invalid);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_ja_overflow);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jgt_k);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_k);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_k);
@@ -3934,6 +4641,9 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_x);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jset_x);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_ax);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_a);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_x);
ATF_TP_ADD_TC(tp, bpfjit_jmp_modulo_x);
ATF_TP_ADD_TC(tp, bpfjit_ld_abs);
ATF_TP_ADD_TC(tp, bpfjit_ld_abs_k_overflow);
diff --git a/contrib/netbsd-tests/net/icmp/t_forward.c b/contrib/netbsd-tests/net/icmp/t_forward.c
index d0c23cc..d418027 100644
--- a/contrib/netbsd-tests/net/icmp/t_forward.c
+++ b/contrib/netbsd-tests/net/icmp/t_forward.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_forward.c,v 1.8 2012/03/18 09:46:50 jruoho Exp $ */
+/* $NetBSD: t_forward.c,v 1.9 2015/02/26 13:03:21 martin Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: t_forward.c,v 1.8 2012/03/18 09:46:50 jruoho Exp $");
+__RCSID("$NetBSD: t_forward.c,v 1.9 2015/02/26 13:03:21 martin Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -129,7 +129,7 @@ ATF_TC_HEAD(returndatabytes, tc)
atf_tc_set_md_var(tc, "descr", "icmp.returndatabytes with certain "
"packets can cause kernel panic (PR kern/43548)");
- atf_tc_set_md_var(tc, "timeout", "4"); /* just in case */
+ atf_tc_set_md_var(tc, "timeout", "20"); /* just in case */
}
ATF_TC_BODY(returndatabytes, tc)
diff --git a/contrib/netbsd-tests/net/icmp/t_icmp6_redirect.sh b/contrib/netbsd-tests/net/icmp/t_icmp6_redirect.sh
new file mode 100755
index 0000000..5dcdc9c
--- /dev/null
+++ b/contrib/netbsd-tests/net/icmp/t_icmp6_redirect.sh
@@ -0,0 +1,152 @@
+# $NetBSD: t_icmp6_redirect.sh,v 1.7 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+SOCK_PEER=unix://commsock2
+SOCK_GW1=unix://commsock3
+SOCK_GW2=unix://commsock4
+
+BUS1=bus1
+BUS2=bus2
+IP6BUS1=fc00:1::/64
+IP6BUS2=fc00:2::/64
+IP6IF0_LOCAL=fc00:1::2
+IP6IF0_PEER=fc00:2::2
+IP6IF0_GW1=fc00:1::1
+IP6IF1_GW1=fc00:2::1
+IP6IF0_GW2=fc00:1::3
+
+REDIRECT_TIMEOUT=5
+
+DEBUG=${DEBUG:-true}
+
+atf_test_case icmp6_redirect_basic cleanup
+
+icmp6_redirect_basic_head()
+{
+
+ atf_set "descr" "Test for the basically function of the ICMP6 redirect"
+ atf_set "require.progs" "rump_server rump.route rump.ping rump.ifconfig"
+}
+
+icmp6_redirect_basic_body()
+{
+ local gw1_lladdr0=
+ local gw1_lladdr1=
+ local gw2_lladdr0=
+
+ rump_server_start $SOCK_LOCAL netinet6
+ rump_server_start $SOCK_PEER netinet6
+ rump_server_start $SOCK_GW1 netinet6
+ rump_server_start $SOCK_GW2 netinet6
+
+ #
+ # Setup
+ #
+ # Setup gateway #1 (real gateway)
+ export RUMP_SERVER=${SOCK_GW1}
+ rump_server_add_iface $SOCK_GW1 shmif0 $BUS1
+ rump_server_add_iface $SOCK_GW1 shmif1 $BUS2
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_GW1}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6IF1_GW1}
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w \
+ net.inet6.ip6.forwarding=1
+ unset RUMP_SERVER
+
+ gw1_lladdr0=`get_linklocal_addr ${SOCK_GW1} shmif0`
+ gw1_lladdr1=`get_linklocal_addr ${SOCK_GW1} shmif1`
+
+ # Setup a peer behind gateway #1
+ export RUMP_SERVER=${SOCK_PEER}
+ rump_server_add_iface $SOCK_PEER shmif0 $BUS2
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_PEER}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.route add \
+ -inet6 default ${gw1_lladdr1}%shmif0
+ unset RUMP_SERVER
+
+ # Setup gateway #2 (fake gateway)
+ export RUMP_SERVER=${SOCK_GW2}
+ rump_server_add_iface $SOCK_GW2 shmif0 $BUS1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_GW2}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore rump.route add \
+ -inet6 ${IP6BUS2} ${gw1_lladdr0}%shmif0
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w \
+ net.inet6.ip6.forwarding=1
+ unset RUMP_SERVER
+
+ gw2_lladdr0=`get_linklocal_addr ${SOCK_GW2} shmif0`
+
+ export RUMP_SERVER=${SOCK_LOCAL}
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_LOCAL}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ # Teach the fake gateway as the default gateway
+ atf_check -s exit:0 -o ignore rump.route add \
+ -inet6 default ${gw2_lladdr0}%shmif0
+ $DEBUG && rump.route get -inet6 ${IP6IF0_PEER}
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet6.icmp6.redirtimeout=$REDIRECT_TIMEOUT
+
+ #
+ # Tests
+ #
+ atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n ${IP6IF0_PEER}
+ $DEBUG && rump.route show -inet6
+ # Check if a created route is correctly redirected to gateway #1
+ atf_check -s exit:0 -o match:"gateway: ${gw1_lladdr0}" rump.route get \
+ -inet6 ${IP6IF0_PEER}
+
+ atf_check -s exit:0 sleep $((REDIRECT_TIMEOUT + 2))
+ $DEBUG && rump.route show -inet6
+ # Check if the created route is expired
+ atf_check -s exit:0 -o not-match:"gateway: ${gw1_lladdr0}" rump.route get \
+ -inet6 ${IP6IF0_PEER}
+
+ rump_server_destroy_ifaces
+}
+
+icmp6_redirect_basic_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case icmp6_redirect_basic
+}
diff --git a/contrib/netbsd-tests/net/icmp/t_icmp_redirect.sh b/contrib/netbsd-tests/net/icmp/t_icmp_redirect.sh
new file mode 100755
index 0000000..6697216
--- /dev/null
+++ b/contrib/netbsd-tests/net/icmp/t_icmp_redirect.sh
@@ -0,0 +1,285 @@
+# $NetBSD: t_icmp_redirect.sh,v 1.6 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Most codes are derived from tests/net/route/t_flags.sh
+
+SOCK_LOCAL=unix://commsock1
+SOCK_PEER=unix://commsock2
+SOCK_GW=unix://commsock3
+BUS=bus1
+BUS2=bus2
+REDIRECT_TIMEOUT=5
+
+DEBUG=${DEBUG:-false}
+
+atf_test_case icmp_redirect_timeout cleanup
+
+icmp_redirect_timeout_head()
+{
+
+ atf_set "descr" "Tests for ICMP redirect timeout";
+ atf_set "require.progs" "rump_server";
+}
+
+setup_local()
+{
+
+ rump_server_start $SOCK_LOCAL
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet.icmp.redirtimeout=$REDIRECT_TIMEOUT
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+setup_peer()
+{
+
+ rump_server_start $SOCK_PEER
+ rump_server_add_iface $SOCK_PEER shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+setup_gw()
+{
+
+ rump_server_start $SOCK_GW
+ rump_server_add_iface $SOCK_GW shmif0 $BUS
+ rump_server_add_iface $SOCK_GW shmif1 $BUS2
+
+ export RUMP_SERVER=$SOCK_GW
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
+
+ # Wait until DAD completes (10 sec at most)
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative"
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+icmp_redirect_timeout_body()
+{
+
+ $DEBUG && ulimit -c unlimited
+
+ setup_local
+ setup_peer
+
+ ### Testing Dynamic flag ###
+
+ #
+ # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it.
+ #
+ setup_gw
+
+ #
+ # Teach the peer that 10.0.2.* is behind 10.0.0.254
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254
+ # Up, Gateway, Static
+ check_route_flags 10.0.2/24 UGS
+
+ #
+ # Setup the default gateway to the peer, 10.0.0.1
+ #
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ # Up, Gateway, Static
+ check_route_flags default UGS
+
+ # Try ping 10.0.2.1
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Dynamic
+ check_route_flags 10.0.2.1 UGHD
+ check_route_gw 10.0.2.1 10.0.0.254
+
+ atf_check -s exit:0 sleep $((REDIRECT_TIMEOUT + 2))
+
+ # The dynamic entry should be expired and removed
+ check_route_no_entry 10.0.2.1
+
+ export RUMP_SERVER=$SOCK_PEER
+ $DEBUG && rump.netstat -rn -f inet
+
+ rump_server_destroy_ifaces
+}
+
+icmp_redirect_timeout_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case icmp_redirect cleanup
+
+icmp_redirect_head()
+{
+
+ atf_set "descr" "Tests for icmp redirect";
+ atf_set "require.progs" "rump_server";
+}
+
+setup_redirect()
+{
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet.ip.redirect=1
+}
+
+teardown_redirect()
+{
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet.ip.redirect=0
+}
+
+icmp_redirect_body()
+{
+
+ $DEBUG && ulimit -c unlimited
+
+ setup_local
+ setup_peer
+
+ #
+ # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it.
+ #
+ setup_gw
+
+ #
+ # Teach the peer that 10.0.2.* is behind 10.0.0.254
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254
+ # Up, Gateway, Static
+ check_route_flags 10.0.2/24 UGS
+
+ #
+ # Setup the default gateway to the peer, 10.0.0.1
+ #
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ # Up, Gateway, Static
+ check_route_flags default UGS
+
+
+ ### ICMP redirects are NOT sent by the peer ###
+
+ #
+ # Disable net.inet.ip.redirect
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ teardown_redirect
+
+ # Try ping 10.0.2.1
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # A direct route shouldn't be created
+ check_route_no_entry 10.0.2.1
+
+
+ ### ICMP redirects are sent by the peer ###
+
+ #
+ # Enable net.inet.ip.redirect
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ setup_redirect
+
+ # Try ping 10.0.2.1
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Dynamic
+ check_route_flags 10.0.2.1 UGHD
+ check_route_gw 10.0.2.1 10.0.0.254
+
+ export RUMP_SERVER=$SOCK_PEER
+ $DEBUG && rump.netstat -rn -f inet
+
+
+ # cleanup
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route delete 10.0.2.1
+ check_route_no_entry 10.0.2.1
+
+
+ ### ICMP redirects are NOT sent by the peer (again) ###
+
+ #
+ # Disable net.inet.ip.redirect
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ teardown_redirect
+
+ # Try ping 10.0.2.1
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # A direct route shouldn't be created
+ check_route_no_entry 10.0.2.1
+
+ rump_server_destroy_ifaces
+}
+
+icmp_redirect_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case icmp_redirect
+ atf_add_test_case icmp_redirect_timeout
+}
diff --git a/contrib/netbsd-tests/net/icmp/t_ping.c b/contrib/netbsd-tests/net/icmp/t_ping.c
index fd8067c..68a00c7 100644
--- a/contrib/netbsd-tests/net/icmp/t_ping.c
+++ b/contrib/netbsd-tests/net/icmp/t_ping.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ping.c,v 1.15 2012/09/04 22:31:58 alnsn Exp $ */
+/* $NetBSD: t_ping.c,v 1.16 2015/02/26 13:06:10 martin Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: t_ping.c,v 1.15 2012/09/04 22:31:58 alnsn Exp $");
+__RCSID("$NetBSD: t_ping.c,v 1.16 2015/02/26 13:06:10 martin Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -60,7 +60,7 @@ ATF_TC_HEAD(simpleping, tc)
{
atf_tc_set_md_var(tc, "descr", "check that kernel responds to ping");
- atf_tc_set_md_var(tc, "timeout", "2");
+ atf_tc_set_md_var(tc, "timeout", "20");
}
ATF_TC_BODY(simpleping, tc)
@@ -316,7 +316,7 @@ ATF_TC_HEAD(ping_of_death, tc)
{
atf_tc_set_md_var(tc, "descr", "send a \"ping of death\"");
- atf_tc_set_md_var(tc, "timeout", "2");
+ atf_tc_set_md_var(tc, "timeout", "20");
}
ATF_TC_BODY(ping_of_death, tc)
diff --git a/contrib/netbsd-tests/net/icmp/t_ping2.sh b/contrib/netbsd-tests/net/icmp/t_ping2.sh
index 30ff73b..fc75196 100755
--- a/contrib/netbsd-tests/net/icmp/t_ping2.sh
+++ b/contrib/netbsd-tests/net/icmp/t_ping2.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_ping2.sh,v 1.4 2010/12/30 16:58:07 pooka Exp $
+# $NetBSD: t_ping2.sh,v 1.5 2016/08/10 22:17:44 kre Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -26,7 +26,7 @@
#
netserver=\
-"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
+"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
atf_test_case basic cleanup
basic_head()
diff --git a/contrib/netbsd-tests/net/if/ifconf.c b/contrib/netbsd-tests/net/if/ifconf.c
new file mode 100644
index 0000000..424c5e8
--- /dev/null
+++ b/contrib/netbsd-tests/net/if/ifconf.c
@@ -0,0 +1,134 @@
+/* $NetBSD: ifconf.c,v 1.1 2014/12/08 04:23:03 ozaki-r Exp $ */
+/*
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: ifconf.c,v 1.1 2014/12/08 04:23:03 ozaki-r Exp $");
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/ioctl.h>
+
+#include <net/if.h>
+
+#include <stdio.h>
+#include <err.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+static void
+help(void)
+{
+ fprintf(stderr, "usage:\n\t%s total\n\t%s list [<nifreqs>]\n",
+ getprogname(), getprogname());
+ exit(EXIT_FAILURE);
+}
+
+static int
+get_number_of_entries(void)
+{
+ int fd, r;
+ struct ifconf ifc;
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (fd == -1)
+ err(EXIT_FAILURE, "socket");
+
+ ifc.ifc_len = 0;
+ ifc.ifc_buf = NULL;
+
+ r = ioctl(fd, SIOCGIFCONF, &ifc);
+ if (r == -1)
+ err(EXIT_FAILURE, "ioctl");
+
+ close(fd);
+
+ return ifc.ifc_len / sizeof(struct ifreq);
+}
+
+static void
+show_number_of_entries(void)
+{
+ printf("%d\n", get_number_of_entries());
+}
+
+static void
+show_interfaces(int nifreqs)
+{
+ int i, fd, r;
+ struct ifconf ifc;
+ struct ifreq *ifreqs;
+
+ if (nifreqs == 0)
+ nifreqs = get_number_of_entries();
+
+ if (nifreqs <= 0)
+ errx(EXIT_FAILURE, "nifreqs=%d", nifreqs);
+
+ ifreqs = malloc(sizeof(struct ifreq) * nifreqs);
+ if (ifreqs == NULL)
+ err(EXIT_FAILURE, "malloc(sizeof(ifreq) * %d)", nifreqs);
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (fd == -1)
+ err(EXIT_FAILURE, "socket");
+
+ ifc.ifc_len = sizeof(struct ifreq) * nifreqs;
+ ifc.ifc_req = ifreqs;
+
+ r = ioctl(fd, SIOCGIFCONF, &ifc);
+ if (r == -1)
+ err(EXIT_FAILURE, "ioctl");
+ close(fd);
+
+ for (i=0; i < (int)(ifc.ifc_len / sizeof(struct ifreq)); i++) {
+ printf("%s: af=%hhu socklen=%hhu\n", ifreqs[i].ifr_name,
+ ifreqs[i].ifr_addr.sa_family, ifreqs[i].ifr_addr.sa_len);
+ }
+
+ free(ifreqs);
+}
+
+int
+main(int argc, char *argv[])
+{
+ if (argc < 2)
+ help();
+
+ if (strcmp(argv[1], "total") == 0) {
+ show_number_of_entries();
+ } else if (strcmp(argv[1], "list") == 0) {
+ if (argc == 2)
+ show_interfaces(0);
+ else if (argc == 3)
+ show_interfaces(atoi(argv[2]));
+ else
+ help();
+ } else
+ help();
+
+ return EXIT_SUCCESS;
+}
diff --git a/contrib/netbsd-tests/net/if/t_compat.c b/contrib/netbsd-tests/net/if/t_compat.c
index 4798034..9eb84a3 100644
--- a/contrib/netbsd-tests/net/if/t_compat.c
+++ b/contrib/netbsd-tests/net/if/t_compat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_compat.c,v 1.1 2010/11/07 19:53:42 pooka Exp $ */
+/* $NetBSD: t_compat.c,v 1.4 2016/11/12 15:12:59 kre Exp $ */
#include <sys/socket.h>
#include <sys/ioctl.h>
@@ -65,6 +65,8 @@ ATF_TC_BODY(OOSIOCGIFBRDADDR, tc)
sprintf(ifreq.ifr_name, "shmif%d", ifnum);
netcfg_rump_if(ifreq.ifr_name, "1.7.64.10", "255.255.0.0");
+ atf_tc_expect_fail("PR kern/51610: rump does not include COMPAT_43");
+
/* query kernel for iface bcast */
RL(fd = rump_sys_socket(AF_INET, SOCK_DGRAM, 0));
RL(rump_sys_ioctl(fd, OOSIOCGIFBRDADDR, &ifreq));
diff --git a/contrib/netbsd-tests/net/if/t_ifconf.sh b/contrib/netbsd-tests/net/if/t_ifconf.sh
new file mode 100755
index 0000000..f56e9e3
--- /dev/null
+++ b/contrib/netbsd-tests/net/if/t_ifconf.sh
@@ -0,0 +1,100 @@
+# $NetBSD: t_ifconf.sh,v 1.3 2016/08/10 22:30:02 kre Exp $
+#
+# Copyright (c) 2014 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+RUMP_SERVER1=unix://./r1
+
+RUMP_FLAGS=\
+"-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
+
+atf_test_case basic cleanup
+basic_head()
+{
+
+ atf_set "descr" "basic ifconf (SIOCGIFCONF) test"
+ atf_set "require.progs" "rump_server"
+}
+
+basic_body()
+{
+ local ifconf="$(atf_get_srcdir)/ifconf"
+
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+
+ # lo0 (127.0.0.1 and link local)
+ atf_check -s exit:0 -o match:'^2$' "$ifconf" total
+ atf_check -s exit:0 -o match:'lo0' "$ifconf" list
+
+ # Add shmif0 (no address)
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 -o match:'^3$' "$ifconf" total
+ atf_check -s exit:0 -o match:'shmif0' "$ifconf" list
+
+ # Add shmif1 (no address)
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 -o match:'^4$' "$ifconf" total
+ atf_check -s exit:0 -o match:'shmif1' "$ifconf" list
+
+ # Add an address to shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24
+ atf_check -s exit:0 -o match:'^5$' "$ifconf" total
+
+ # Vary the number of requesting interfaces
+ atf_check -s exit:0 -o match:1 -x "$ifconf list 1 | wc -l"
+ atf_check -s exit:0 -o match:2 -x "$ifconf list 2 | wc -l"
+ atf_check -s exit:0 -o match:3 -x "$ifconf list 3 | wc -l"
+ atf_check -s exit:0 -o match:4 -x "$ifconf list 4 | wc -l"
+ atf_check -s exit:0 -o match:5 -x "$ifconf list 5 | wc -l"
+ atf_check -s exit:0 -o match:5 -x "$ifconf list 6 | wc -l"
+
+ # Check if removing an interface is reflected
+ atf_check -s exit:0 rump.ifconfig shmif0 destroy
+ atf_check -s exit:0 -o match:'^3$' "$ifconf" total
+ atf_check -s exit:0 -o not-match:'shmif0' "$ifconf" list
+ atf_check -s exit:0 -o match:1 -x "$ifconf list 1 | wc -l"
+ atf_check -s exit:0 -o match:2 -x "$ifconf list 2 | wc -l"
+ atf_check -s exit:0 -o match:3 -x "$ifconf list 3 | wc -l"
+ atf_check -s exit:0 -o match:3 -x "$ifconf list 4 | wc -l"
+
+ unset LD_PRELOAD
+ unset RUMP_SERVER
+}
+
+basic_cleanup()
+{
+
+ RUMP_SERVER=${RUMP_SERVER1} rump.halt
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case basic
+}
diff --git a/contrib/netbsd-tests/net/if/t_ifconfig.sh b/contrib/netbsd-tests/net/if/t_ifconfig.sh
new file mode 100755
index 0000000..a610017
--- /dev/null
+++ b/contrib/netbsd-tests/net/if/t_ifconfig.sh
@@ -0,0 +1,333 @@
+# $NetBSD: t_ifconfig.sh,v 1.14 2016/10/01 22:15:04 kre Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+RUMP_SERVER1=unix://./r1
+RUMP_SERVER2=unix://./r2
+
+RUMP_FLAGS=\
+"-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif"
+RUMP_FLAGS="${RUMP_FLAGS} -lrumpdev"
+
+TIMEOUT=3
+
+anycast="[Aa][Nn][Yy][Cc][Aa][Ss][Tt]"
+deprecated="[Dd][Ee][Pp][Rr][Ee][Cc][Aa][Tt][Ee][Dd]"
+
+atf_test_case ifconfig_create_destroy cleanup
+ifconfig_create_destroy_head()
+{
+
+ atf_set "descr" "tests of ifconfig create and destroy"
+ atf_set "require.progs" "rump_server"
+}
+
+ifconfig_create_destroy_body()
+{
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+
+ # Create and destroy (no address)
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 destroy
+
+ # Create and destroy (with an IPv4 address)
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif0 destroy
+
+ # Create and destroy (with an IPv6 address)
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif0 destroy
+
+ unset RUMP_SERVER
+}
+
+ifconfig_create_destroy_cleanup()
+{
+
+ RUMP_SERVER=${RUMP_SERVER1} rump.halt
+}
+
+atf_test_case ifconfig_options cleanup
+ifconfig_options_head()
+{
+
+ atf_set "descr" "tests of ifconfig options"
+ atf_set "require.progs" "rump_server"
+}
+
+ifconfig_options_body()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 rump_server $RUMP_FLAGS $RUMP_SERVER1
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr bus1
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet 10.0.0.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 fc00::1/64
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ $DEBUG && rump.ifconfig shmif0
+
+ # ifconfig [-N] interface address_family
+ # -N resolves hostnames
+ atf_check -s exit:0 -o match:'inet 127.0.0.1' rump.ifconfig lo0 inet
+ atf_check -s exit:0 -o match:'inet localhost' rump.ifconfig -N lo0 inet
+ atf_check -s exit:0 -o match:'inet6 ::1' rump.ifconfig lo0 inet6
+ atf_check -s exit:0 -o match:'inet6 localhost' rump.ifconfig -N lo0 inet6
+ atf_check -s not-exit:0 -e match:'not supported' rump.ifconfig lo0 atalk
+ atf_check -s not-exit:0 -e match:'not supported' rump.ifconfig -N lo0 atalk
+ atf_check -s exit:0 -o ignore rump.ifconfig lo0 link
+ atf_check -s exit:0 -o ignore rump.ifconfig -N lo0 link
+
+ # ifconfig [-hLmNvz] interface
+ # -h -v shows statistics in human readable format
+ atf_check -s exit:0 -o ignore rump.ifconfig -h -v lo0
+ # -L shows IPv6 lifetime
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 fc00::2 \
+ pltime 100
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'vltime' rump.ifconfig -L shmif0
+ # -m shows all of the supported media (not supported in shmif)
+ $DEBUG && rump.ifconfig -m shmif0
+ atf_check -s exit:0 -o ignore rump.ifconfig -m shmif0
+ atf_check -s exit:0 -o match:'localhost' rump.ifconfig -N lo0
+ atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -v lo0
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT localhost
+ # -z clears and shows statistics at that point
+ atf_check -s exit:0 -o match:'2 packets' rump.ifconfig -z lo0
+ atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -v lo0
+
+ # ifconfig -a [-bdhLNmsuvz]
+ # -a shows all interfaces in the system
+ $DEBUG && rump.ifconfig -a
+ atf_check -s exit:0 -o match:'shmif0' -o match:'lo0' rump.ifconfig -a
+ # -a -b shows only broadcast interfaces
+ atf_check -s exit:0 -o match:'shmif0' -o not-match:'lo0' rump.ifconfig -a -b
+ # -a -d shows only down interfaces
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -a -d
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig -a -d
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -a -L
+ atf_check -s exit:0 -o match:'vltime' rump.ifconfig -a -L
+ atf_check -s exit:0 -o match:'localhost' rump.ifconfig -a -N
+ atf_check -s exit:0 -o ignore rump.ifconfig -a -m
+ # -a -s shows only interfaces connected to a network
+ # (shmif is always connected)
+ $DEBUG && rump.ifconfig -a -s
+ atf_check -s exit:0 -o ignore rump.ifconfig -a -s
+ # -a -u shows only up interfaces
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -a -u
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
+ atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig -a -u
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -a -v
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT localhost
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
+ atf_check -s exit:0 -o match:'2 packets' rump.ifconfig -a -z
+ atf_check -s exit:0 -o not-match:'2 packets' rump.ifconfig -a -v
+ atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -a -v
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ # ifconfig -l [-bdsu]
+ # -l shows only inteface names
+ atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -b
+ atf_check -s exit:0 -o not-match:'lo0' rump.ifconfig -l -b
+ atf_check -s exit:0 -o ignore rump.ifconfig -l -d
+ atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l -s
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -s
+ atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l -u
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -u
+
+ # ifconfig -s interface
+ # -s interface exists with 0 / 1 if connected / disconnected
+ atf_check -s exit:0 -o empty rump.ifconfig -s lo0
+ atf_check -s exit:0 -o empty rump.ifconfig -s shmif0
+
+ # ifconfig -C
+ # -C shows all of the interface cloners available on the system
+ atf_check -s exit:0 -o match:'shmif lo carp' rump.ifconfig -C
+
+ unset RUMP_SERVER
+}
+
+ifconfig_options_cleanup()
+{
+
+ env RUMP_SERVER=${RUMP_SERVER1} rump.halt
+}
+
+
+atf_test_case ifconfig_parameters cleanup
+ifconfig_parameters_head()
+{
+ atf_set "descr" "tests of interface parameters"
+ atf_set "require.progs" "rump_server"
+}
+
+ifconfig_parameters_body()
+{
+ local interval=
+
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER2}
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.2/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.3/24 alias
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+
+ # active
+ atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:01 active
+ atf_check -s exit:0 -o match:'address:.b2:a0:75:00:00:01' \
+ rump.ifconfig shmif0
+ # down, up
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ping -c 1 \
+ -w $TIMEOUT -n 192.168.0.2
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT -n 192.168.0.2
+
+ # alias
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1/24 alias
+ atf_check -s exit:0 -o match:'192.168.1.1/24' rump.ifconfig shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1/24 -alias
+ atf_check -s exit:0 -o not-match:'192.168.1.1/24' rump.ifconfig shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2
+ atf_check -s exit:0 -o match:'fc00::1' rump.ifconfig shmif0 inet6
+ atf_check -s exit:0 -o match:'fc00::2' rump.ifconfig shmif0 inet6
+
+ # delete
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1 alias
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1 delete
+ atf_check -s exit:0 -o not-match:'192.168.1.1' rump.ifconfig shmif0 inet
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.1 delete
+ atf_check -s exit:0 -o not-match:'192.168.0.1' rump.ifconfig shmif0 inet
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 delete
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 delete
+ atf_check -s exit:0 -o not-match:'fc00::1' rump.ifconfig shmif0 inet6
+ atf_check -s exit:0 -o not-match:'fc00::2' rump.ifconfig shmif0 inet6
+ # can delete inactive link
+ atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:02
+ atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:02 delete
+ # cannot delete active link
+ atf_check -s not-exit:0 -e match:'SIOCDLIFADDR: Device busy' \
+ rump.ifconfig shmif0 link b2:a0:75:00:00:01 delete
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.1/24
+
+ # arp
+ atf_check -s exit:0 rump.ifconfig shmif0 -arp
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -c 1 -w $TIMEOUT -n 192.168.0.3
+ atf_check -s exit:0 -o not-match:'192.168.0.3' rump.arp -an
+ # The entry shouldn't appear in the routing table anymore
+ atf_check -s exit:0 -o not-match:'192.168.0.3' rump.netstat -nr
+
+ # netmask
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 netmask 255.255.255.0 alias
+ atf_check -s exit:0 -o match:'172.16.0/24' rump.netstat -rn -f inet
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 delete
+
+ # broadcast (does it not work?)
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 \
+ broadcast 255.255.255.255 alias
+ atf_check -s exit:0 -o match:'broadcast 255.255.255.255' \
+ rump.ifconfig shmif0 inet
+
+ # metric (external only)
+ atf_check -s exit:0 rump.ifconfig shmif0 metric 10
+ atf_check -s exit:0 rump.ifconfig shmif0 metric 0
+
+ # prefixlen
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 prefixlen 70
+ atf_check -s exit:0 -o match:'fc00::/70' rump.netstat -rn -f inet6
+
+ # anycast
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 anycast
+ atf_check -s exit:0 -o match:"fc00::2.+$anycast" rump.ifconfig shmif0 inet6
+
+ # deprecated
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 deprecated
+ # Not deprecated immediately. Need to wait nd6_timer that does it is scheduled.
+ interval=$(sysctl -n net.inet6.icmp6.nd6_prune)
+ atf_check -s exit:0 sleep $((interval + 1))
+ atf_check -s exit:0 -o match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 -deprecated
+ atf_check -s exit:0 -o not-match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
+
+ # pltime
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 pltime 3
+ atf_check -s exit:0 -o not-match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
+ atf_check -s exit:0 sleep 5
+ atf_check -s exit:0 -o match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
+
+ # eui64
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00:1::0 eui64
+ atf_check -s exit:0 -o match:'fc00:1::' rump.ifconfig shmif0 inet6
+
+ unset RUMP_SERVER
+}
+
+ifconfig_parameters_cleanup()
+{
+ env RUMP_SERVER=${RUMP_SERVER1} rump.halt
+ env RUMP_SERVER=${RUMP_SERVER2} rump.halt
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case ifconfig_create_destroy
+ atf_add_test_case ifconfig_options
+ atf_add_test_case ifconfig_parameters
+}
diff --git a/contrib/netbsd-tests/net/if_bridge/t_bridge.sh b/contrib/netbsd-tests/net/if_bridge/t_bridge.sh
index 5fbafc7..25edb35 100755
--- a/contrib/netbsd-tests/net/if_bridge/t_bridge.sh
+++ b/contrib/netbsd-tests/net/if_bridge/t_bridge.sh
@@ -1,5 +1,4 @@
-#! /usr/bin/atf-sh
-# $NetBSD: t_bridge.sh,v 1.1 2014/09/18 15:13:27 ozaki-r Exp $
+# $NetBSD: t_bridge.sh,v 1.16 2016/11/25 08:51:16 ozaki-r Exp $
#
# Copyright (c) 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -26,9 +25,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_bridge -lrumpnet_shmif"
-inet6server="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_bridge -lrumpnet_shmif"
-
SOCK1=unix://commsock1
SOCK2=unix://commsock2
SOCK3=unix://commsock3
@@ -36,22 +32,50 @@ IP1=10.0.0.1
IP2=10.0.0.2
IP61=fc00::1
IP62=fc00::2
+IPBR1=10.0.0.11
+IPBR2=10.0.0.12
+IP6BR1=fc00::11
+IP6BR2=fc00::12
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=5
-atf_test_case basic cleanup
-atf_test_case basic6 cleanup
+atf_test_case bridge_ipv4 cleanup
+atf_test_case bridge_ipv6 cleanup
+atf_test_case bridge_rtable cleanup
+atf_test_case bridge_member_ipv4 cleanup
+atf_test_case bridge_member_ipv6 cleanup
-basic_head()
+bridge_ipv4_head()
{
atf_set "descr" "Does simple if_bridge tests"
atf_set "require.progs" "rump_server"
}
-basic6_head()
+bridge_ipv6_head()
{
atf_set "descr" "Does simple if_bridge tests (IPv6)"
atf_set "require.progs" "rump_server"
}
+bridge_rtable_head()
+{
+ atf_set "descr" "Tests route table operations of if_bridge"
+ atf_set "require.progs" "rump_server"
+}
+
+bridge_member_ipv4_head()
+{
+ atf_set "descr" "Tests if_bridge with members with an IP address"
+ atf_set "require.progs" "rump_server"
+}
+
+bridge_member_ipv6_head()
+{
+ atf_set "descr" "Tests if_bridge with members with an IP address (IPv6)"
+ atf_set "require.progs" "rump_server"
+}
+
setup_endpoint()
{
sock=${1}
@@ -59,9 +83,8 @@ setup_endpoint()
bus=${3}
mode=${4}
+ rump_server_add_iface $sock shmif0 $bus
export RUMP_SERVER=${sock}
- atf_check -s exit:0 rump.ifconfig shmif0 create
- atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${bus}
if [ $mode = "ipv6" ]; then
atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
else
@@ -69,7 +92,7 @@ setup_endpoint()
fi
atf_check -s exit:0 rump.ifconfig shmif0 up
- rump.ifconfig shmif0
+ $DEBUG && rump.ifconfig shmif0
}
test_endpoint()
@@ -82,22 +105,12 @@ test_endpoint()
export RUMP_SERVER=${sock}
atf_check -s exit:0 -o match:shmif0 rump.ifconfig
if [ $mode = "ipv6" ]; then
- export LD_PRELOAD=/usr/lib/librumphijack.so
- atf_check -s exit:0 -o ignore ping6 -n -c 1 ${addr}
- unset LD_PRELOAD
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
else
- atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 ${addr}
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
fi
}
-show_endpoint()
-{
- sock=${1}
-
- export RUMP_SERVER=${sock}
- rump.ifconfig -v shmif0
-}
-
test_setup()
{
test_endpoint $SOCK1 $IP1 bus1 ipv4
@@ -120,21 +133,20 @@ test_setup6()
setup_bridge_server()
{
+
+ rump_server_add_iface $SOCK2 shmif0 bus1
+ rump_server_add_iface $SOCK2 shmif1 bus2
export RUMP_SERVER=$SOCK2
- atf_check -s exit:0 rump.ifconfig shmif0 create
- atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
atf_check -s exit:0 rump.ifconfig shmif0 up
-
- atf_check -s exit:0 rump.ifconfig shmif1 create
- atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus2
atf_check -s exit:0 rump.ifconfig shmif1 up
}
setup()
{
- atf_check -s exit:0 ${inetserver} $SOCK1
- atf_check -s exit:0 ${inetserver} $SOCK2
- atf_check -s exit:0 ${inetserver} $SOCK3
+
+ rump_server_start $SOCK1 bridge
+ rump_server_start $SOCK2 bridge
+ rump_server_start $SOCK3 bridge
setup_endpoint $SOCK1 $IP1 bus1 ipv4
setup_endpoint $SOCK3 $IP2 bus2 ipv4
@@ -143,9 +155,10 @@ setup()
setup6()
{
- atf_check -s exit:0 ${inet6server} $SOCK1
- atf_check -s exit:0 ${inet6server} $SOCK2
- atf_check -s exit:0 ${inet6server} $SOCK3
+
+ rump_server_start $SOCK1 netinet6 bridge
+ rump_server_start $SOCK2 netinet6 bridge
+ rump_server_start $SOCK3 netinet6 bridge
setup_endpoint $SOCK1 $IP61 bus1 ipv6
setup_endpoint $SOCK3 $IP62 bus2 ipv6
@@ -167,6 +180,32 @@ setup_bridge()
rump.ifconfig shmif1
}
+setup_member_ip()
+{
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24
+ atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24
+ atf_check -s exit:0 rump.ifconfig -w 10
+ /sbin/brconfig bridge0
+ unset LD_PRELOAD
+ rump.ifconfig shmif0
+ rump.ifconfig shmif1
+}
+
+setup_member_ip6()
+{
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2
+ atf_check -s exit:0 rump.ifconfig -w 10
+ /sbin/brconfig bridge0
+ unset LD_PRELOAD
+ rump.ifconfig shmif0
+ rump.ifconfig shmif1
+}
+
teardown_bridge()
{
export RUMP_SERVER=$SOCK2
@@ -190,19 +229,6 @@ test_setup_bridge()
unset LD_PRELOAD
}
-cleanup()
-{
- env RUMP_SERVER=$SOCK1 rump.halt
- env RUMP_SERVER=$SOCK2 rump.halt
- env RUMP_SERVER=$SOCK3 rump.halt
-}
-
-dump_bus()
-{
- /usr/bin/shmif_dumpbus -p - bus1 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
- /usr/bin/shmif_dumpbus -p - bus2 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
-}
-
down_up_interfaces()
{
export RUMP_SERVER=$SOCK1
@@ -216,97 +242,332 @@ down_up_interfaces()
test_ping_failure()
{
export RUMP_SERVER=$SOCK1
- atf_check -s not-exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP2
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
export RUMP_SERVER=$SOCK3
- atf_check -s not-exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP1
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
}
test_ping_success()
{
export RUMP_SERVER=$SOCK1
rump.ifconfig -v shmif0
- atf_check -s exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP2
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
rump.ifconfig -v shmif0
export RUMP_SERVER=$SOCK3
rump.ifconfig -v shmif0
- atf_check -s exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP1
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
rump.ifconfig -v shmif0
}
test_ping6_failure()
{
- export LD_PRELOAD=/usr/lib/librumphijack.so
export RUMP_SERVER=$SOCK1
- atf_check -s not-exit:0 -o ignore ping6 -q -n -c 1 $IP62
+ atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
export RUMP_SERVER=$SOCK3
- atf_check -s not-exit:0 -o ignore ping6 -q -n -c 1 $IP61
- unset LD_PRELOAD
+ atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
}
test_ping6_success()
{
export RUMP_SERVER=$SOCK1
rump.ifconfig -v shmif0
- export LD_PRELOAD=/usr/lib/librumphijack.so
- atf_check -s exit:0 -o ignore ping6 -q -n -c 1 $IP62
- unset LD_PRELOAD
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
+ rump.ifconfig -v shmif0
+
+ export RUMP_SERVER=$SOCK3
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
+ rump.ifconfig -v shmif0
+}
+
+test_ping_member()
+{
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
+ rump.ifconfig -v shmif0
+ # Test for PR#48104
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
+ rump.ifconfig -v shmif0
+
+ export RUMP_SERVER=$SOCK3
+ rump.ifconfig -v shmif0
+ # Test for PR#48104
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
+ rump.ifconfig -v shmif0
+}
+
+test_ping6_member()
+{
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
+ rump.ifconfig -v shmif0
+ # Test for PR#48104
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
rump.ifconfig -v shmif0
export RUMP_SERVER=$SOCK3
rump.ifconfig -v shmif0
+ # Test for PR#48104
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
+ rump.ifconfig -v shmif0
+}
+
+get_number_of_caches()
+{
+ export RUMP_SERVER=$SOCK2
export LD_PRELOAD=/usr/lib/librumphijack.so
- atf_check -s exit:0 -o ignore ping6 -q -n -c 1 $IP61
+ echo $(($(/sbin/brconfig bridge0 |grep -A 100 "Address cache" |wc -l) - 1))
+ unset LD_PRELOAD
+}
+
+test_brconfig_maxaddr()
+{
+ addr1= addr3= n=
+
+ # Get MAC addresses of the endpoints.
+ addr1=$(get_macaddr $SOCK1 shmif0)
+ addr3=$(get_macaddr $SOCK3 shmif0)
+
+ # Refill the MAC addresses of the endpoints.
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
+
+ # Check the default # of caches is 100
+ atf_check -s exit:0 -o match:"max cache: 100" /sbin/brconfig bridge0
+
+ # Test two MAC addresses are cached
+ n=$(get_number_of_caches)
+ atf_check_equal $n 2
+
+ # Limit # of caches to one
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1
+ atf_check -s exit:0 -o match:"max cache: 1" /sbin/brconfig bridge0
+ /sbin/brconfig bridge0
+
+ # Test just one address is cached
+ n=$(get_number_of_caches)
+ atf_check_equal $n 1
+
+ # Increase # of caches to two
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 2
+ atf_check -s exit:0 -o match:"max cache: 2" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Test we can cache two addresses again
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
unset LD_PRELOAD
- rump.ifconfig -v shmif0
}
-basic_body()
+bridge_ipv4_body()
{
setup
test_setup
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
+
setup_bridge
+ sleep 1
test_setup_bridge
-
test_ping_success
teardown_bridge
test_ping_failure
+
+ rump_server_destroy_ifaces
}
-basic6_body()
+bridge_ipv6_body()
{
setup6
test_setup6
- # TODO: enable once ping6 implements timeout feature
- #test_ping6_failure
+ test_ping6_failure
+
+ setup_bridge
+ sleep 1
+ test_setup_bridge
+ test_ping6_success
+
+ teardown_bridge
+ test_ping6_failure
+
+ rump_server_destroy_ifaces
+}
+
+bridge_rtable_body()
+{
+ addr1= addr3=
+
+ setup
+ setup_bridge
+
+ # Get MAC addresses of the endpoints.
+ addr1=$(get_macaddr $SOCK1 shmif0)
+ addr3=$(get_macaddr $SOCK3 shmif0)
+
+ # Confirm there is no MAC address caches.
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ $DEBUG && /sbin/brconfig bridge0
+ atf_check -s exit:0 -o not-match:"$addr1" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o not-match:"$addr3" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Make the bridge learn the MAC addresses of the endpoints.
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
+ unset RUMP_SERVER
+
+ # Tests the addresses are in the cache.
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ $DEBUG && /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
+
+ # Tests brconfig deladdr
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr1"
+ atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr3"
+ atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Refill the MAC addresses of the endpoints.
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
+ unset RUMP_SERVER
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ $DEBUG && /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
+
+ # Tests brconfig flush.
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush
+ atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Tests brconfig timeout.
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 -o match:"timeout: 1200" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 timeout 10
+ atf_check -s exit:0 -o match:"timeout: 10" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Tests brconfig maxaddr.
+ test_brconfig_maxaddr
+
+ # TODO: brconfig static/flushall/discover/learn
+ # TODO: cache expiration; it takes 5 minutes at least and we want to
+ # wait here so long. Should we have a sysctl to change the period?
+
+ rump_server_destroy_ifaces
+}
+
+bridge_member_ipv4_body()
+{
+ setup
+ test_setup
+
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
setup_bridge
+ sleep 1
test_setup_bridge
+ test_ping_success
+
+ setup_member_ip
+ test_ping_member
+
+ teardown_bridge
+ test_ping_failure
+
+ rump_server_destroy_ifaces
+}
+
+bridge_member_ipv6_body()
+{
+ setup6
+ test_setup6
+
+ test_ping6_failure
+ setup_bridge
+ sleep 1
+ test_setup_bridge
test_ping6_success
+ setup_member_ip6
+ test_ping6_member
+
teardown_bridge
- # TODO: enable once ping6 implements timeout feature
- #test_ping6_failure
+ test_ping6_failure
+
+ rump_server_destroy_ifaces
}
-basic_cleanup()
+bridge_ipv4_cleanup()
{
- dump_bus
+
+ $DEBUG && dump
+ cleanup
+}
+
+bridge_ipv6_cleanup()
+{
+
+ $DEBUG && dump
cleanup
}
-basic6_cleanup()
+bridge_rtable_cleanup()
{
- dump_bus
+
+ $DEBUG && dump
+ cleanup
+}
+
+bridge_member_ipv4_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+bridge_member_ipv6_cleanup()
+{
+
+ $DEBUG && dump
cleanup
}
atf_init_test_cases()
{
- atf_add_test_case basic
- atf_add_test_case basic6
+ atf_add_test_case bridge_ipv4
+ atf_add_test_case bridge_ipv6
+ atf_add_test_case bridge_rtable
+ atf_add_test_case bridge_member_ipv4
+ atf_add_test_case bridge_member_ipv6
}
diff --git a/contrib/netbsd-tests/net/if_gif/t_gif.sh b/contrib/netbsd-tests/net/if_gif/t_gif.sh
new file mode 100755
index 0000000..8690d78
--- /dev/null
+++ b/contrib/netbsd-tests/net/if_gif/t_gif.sh
@@ -0,0 +1,763 @@
+# $NetBSD: t_gif.sh,v 1.9 2016/12/21 09:46:39 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK1=unix://commsock1 # for ROUTER1
+SOCK2=unix://commsock2 # for ROUTER2
+ROUTER1_LANIP=192.168.1.1
+ROUTER1_LANNET=192.168.1.0/24
+ROUTER1_WANIP=10.0.0.1
+ROUTER1_GIFIP=172.16.1.1
+ROUTER1_WANIP_DUMMY=10.0.0.11
+ROUTER1_GIFIP_DUMMY=172.16.11.1
+ROUTER1_GIFIP_RECURSIVE1=172.16.101.1
+ROUTER1_GIFIP_RECURSIVE2=172.16.201.1
+ROUTER2_LANIP=192.168.2.1
+ROUTER2_LANNET=192.168.2.0/24
+ROUTER2_WANIP=10.0.0.2
+ROUTER2_GIFIP=172.16.2.1
+ROUTER2_WANIP_DUMMY=10.0.0.12
+ROUTER2_GIFIP_DUMMY=172.16.12.1
+ROUTER2_GIFIP_RECURSIVE1=172.16.102.1
+ROUTER2_GIFIP_RECURSIVE2=172.16.202.1
+
+ROUTER1_LANIP6=fc00:1::1
+ROUTER1_LANNET6=fc00:1::/64
+ROUTER1_WANIP6=fc00::1
+ROUTER1_GIFIP6=fc00:3::1
+ROUTER1_WANIP6_DUMMY=fc00::11
+ROUTER1_GIFIP6_DUMMY=fc00:13::1
+ROUTER1_GIFIP6_RECURSIVE1=fc00:103::1
+ROUTER1_GIFIP6_RECURSIVE2=fc00:203::1
+ROUTER2_LANIP6=fc00:2::1
+ROUTER2_LANNET6=fc00:2::/64
+ROUTER2_WANIP6=fc00::2
+ROUTER2_GIFIP6=fc00:4::1
+ROUTER2_WANIP6_DUMMY=fc00::12
+ROUTER2_GIFIP6_DUMMY=fc00:14::1
+ROUTER2_GIFIP6_RECURSIVE1=fc00:104::1
+ROUTER2_GIFIP6_RECURSIVE2=fc00:204::1
+
+DEBUG=${DEBUG:-true}
+TIMEOUT=5
+
+setup_router()
+{
+ sock=${1}
+ lan=${2}
+ lan_mode=${3}
+ wan=${4}
+ wan_mode=${5}
+
+ rump_server_add_iface $sock shmif0 bus0
+ rump_server_add_iface $sock shmif1 bus1
+
+ export RUMP_SERVER=${sock}
+ if [ ${lan_mode} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ rump.ifconfig shmif0
+
+ if [ ${wan_mode} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ rump.ifconfig shmif1
+}
+
+test_router()
+{
+ sock=${1}
+ lan=${2}
+ lan_mode=${3}
+ wan=${4}
+ wan_mode=${5}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 -o match:shmif0 rump.ifconfig
+ if [ ${lan_mode} = "ipv6" ]; then
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan}
+ else
+ atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan}
+ fi
+
+ atf_check -s exit:0 -o match:shmif1 rump.ifconfig
+ if [ ${wan_mode} = "ipv6" ]; then
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan}
+ else
+ atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan}
+ fi
+}
+
+setup()
+{
+ inner=${1}
+ outer=${2}
+
+ rump_server_start $SOCK1 netinet6 gif
+ rump_server_start $SOCK2 netinet6 gif
+
+ router1_lan=""
+ router1_lan_mode=""
+ router2_lan=""
+ router2_lan_mode=""
+ if [ ${inner} = "ipv6" ]; then
+ router1_lan=$ROUTER1_LANIP6
+ router1_lan_mode="ipv6"
+ router2_lan=$ROUTER2_LANIP6
+ router2_lan_mode="ipv6"
+ else
+ router1_lan=$ROUTER1_LANIP
+ router1_lan_mode="ipv4"
+ router2_lan=$ROUTER2_LANIP
+ router2_lan_mode="ipv4"
+ fi
+
+ if [ ${outer} = "ipv6" ]; then
+ setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
+ $ROUTER1_WANIP6 ipv6
+ setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
+ $ROUTER2_WANIP6 ipv6
+ else
+ setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
+ $ROUTER1_WANIP ipv4
+ setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
+ $ROUTER2_WANIP ipv4
+ fi
+}
+
+test_setup()
+{
+ inner=${1}
+ outer=${2}
+
+ router1_lan=""
+ router1_lan_mode=""
+ router2_lan=""
+ router2_lan_mode=""
+ if [ ${inner} = "ipv6" ]; then
+ router1_lan=$ROUTER1_LANIP6
+ router1_lan_mode="ipv6"
+ router2_lan=$ROUTER2_LANIP6
+ router2_lan_mode="ipv6"
+ else
+ router1_lan=$ROUTER1_LANIP
+ router1_lan_mode="ipv4"
+ router2_lan=$ROUTER2_LANIP
+ router2_lan_mode="ipv4"
+ fi
+ if [ ${outer} = "ipv6" ]; then
+ test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
+ $ROUTER1_WANIP6 ipv6
+ test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
+ $ROUTER2_WANIP6 ipv6
+ else
+ test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
+ $ROUTER1_WANIP ipv4
+ test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
+ $ROUTER2_WANIP ipv4
+ fi
+}
+
+setup_if_gif()
+{
+ sock=${1}
+ addr=${2}
+ remote=${3}
+ inner=${4}
+ src=${5}
+ dst=${6}
+ peernet=${7}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 rump.ifconfig gif0 create
+ atf_check -s exit:0 rump.ifconfig gif0 tunnel ${src} ${dst}
+ if [ ${inner} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig gif0 inet6 ${addr}/128 ${remote}
+ atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr}
+ else
+ atf_check -s exit:0 rump.ifconfig gif0 inet ${addr}/32 ${remote}
+ atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr}
+ fi
+
+ rump.ifconfig gif0
+ rump.route -nL show
+}
+
+setup_tunnel()
+{
+ inner=${1}
+ outer=${2}
+
+ addr=""
+ remote=""
+ src=""
+ dst=""
+ peernet=""
+
+ if [ ${inner} = "ipv6" ]; then
+ addr=$ROUTER1_GIFIP6
+ remote=$ROUTER2_GIFIP6
+ peernet=$ROUTER2_LANNET6
+ else
+ addr=$ROUTER1_GIFIP
+ remote=$ROUTER2_GIFIP
+ peernet=$ROUTER2_LANNET
+ fi
+ if [ ${outer} = "ipv6" ]; then
+ src=$ROUTER1_WANIP6
+ dst=$ROUTER2_WANIP6
+ else
+ src=$ROUTER1_WANIP
+ dst=$ROUTER2_WANIP
+ fi
+ setup_if_gif $SOCK1 ${addr} ${remote} ${inner} \
+ ${src} ${dst} ${peernet}
+
+ if [ $inner = "ipv6" ]; then
+ addr=$ROUTER2_GIFIP6
+ remote=$ROUTER1_GIFIP6
+ peernet=$ROUTER1_LANNET6
+ else
+ addr=$ROUTER2_GIFIP
+ remote=$ROUTER1_GIFIP
+ peernet=$ROUTER1_LANNET
+ fi
+ if [ $outer = "ipv6" ]; then
+ src=$ROUTER2_WANIP6
+ dst=$ROUTER1_WANIP6
+ else
+ src=$ROUTER2_WANIP
+ dst=$ROUTER1_WANIP
+ fi
+ setup_if_gif $SOCK2 ${addr} ${remote} ${inner} \
+ ${src} ${dst} ${peernet}
+}
+
+test_setup_tunnel()
+{
+ mode=${1}
+
+ peernet=""
+ opt=""
+ if [ ${mode} = "ipv6" ]; then
+ peernet=$ROUTER2_LANNET6
+ opt="-inet6"
+ else
+ peernet=$ROUTER2_LANNET
+ opt="-inet"
+ fi
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o match:gif0 rump.ifconfig
+ atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
+
+ if [ ${mode} = "ipv6" ]; then
+ peernet=$ROUTER1_LANNET6
+ opt="-inet6"
+ else
+ peernet=$ROUTER1_LANNET
+ opt="-inet"
+ fi
+ export RUMP_SERVER=$SOCK2
+ atf_check -s exit:0 -o match:gif0 rump.ifconfig
+ atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
+}
+
+teardown_tunnel()
+{
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif0 destroy
+
+ export RUMP_SERVER=$SOCK2
+ atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif0 destroy
+}
+
+setup_dummy_if_gif()
+{
+ sock=${1}
+ addr=${2}
+ remote=${3}
+ inner=${4}
+ src=${5}
+ dst=${6}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 rump.ifconfig gif1 create
+ atf_check -s exit:0 rump.ifconfig gif1 tunnel ${src} ${dst}
+ if [ ${inner} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig gif1 inet6 ${addr}/128 ${remote}
+ else
+ atf_check -s exit:0 rump.ifconfig gif1 inet ${addr}/32 ${remote}
+ fi
+
+ rump.ifconfig gif1
+}
+
+setup_dummy_tunnel()
+{
+ inner=${1}
+ outer=${2}
+
+ addr=""
+ remote=""
+ src=""
+ dst=""
+
+ if [ ${inner} = "ipv6" ]; then
+ addr=$ROUTER1_GIFIP6_DUMMY
+ remote=$ROUTER2_GIFIP6_DUMMY
+ else
+ addr=$ROUTER1_GIFIP_DUMMY
+ remote=$ROUTER2_GIFIP_DUMMY
+ fi
+ if [ ${outer} = "ipv6" ]; then
+ src=$ROUTER1_WANIP6_DUMMY
+ dst=$ROUTER2_WANIP6_DUMMY
+ else
+ src=$ROUTER1_WANIP_DUMMY
+ dst=$ROUTER2_WANIP_DUMMY
+ fi
+ setup_dummy_if_gif $SOCK1 ${addr} ${remote} ${inner} \
+ ${src} ${dst}
+
+ if [ $inner = "ipv6" ]; then
+ addr=$ROUTER2_GIFIP6_DUMMY
+ remote=$ROUTER1_GIFIP6_DUMMY
+ else
+ addr=$ROUTER2_GIFIP_DUMMY
+ remote=$ROUTER1_GIFIP_DUMMY
+ fi
+ if [ $outer = "ipv6" ]; then
+ src=$ROUTER2_WANIP6_DUMMY
+ dst=$ROUTER1_WANIP6_DUMMY
+ else
+ src=$ROUTER2_WANIP_DUMMY
+ dst=$ROUTER1_WANIP_DUMMY
+ fi
+ setup_dummy_if_gif $SOCK2 ${addr} ${remote} ${inner} \
+ ${src} ${dst}
+}
+
+test_setup_dummy_tunnel()
+{
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o match:gif1 rump.ifconfig
+
+ export RUMP_SERVER=$SOCK2
+ atf_check -s exit:0 -o match:gif1 rump.ifconfig
+}
+
+teardown_dummy_tunnel()
+{
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif1 destroy
+
+ export RUMP_SERVER=$SOCK2
+ atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif1 destroy
+}
+
+setup_recursive_if_gif()
+{
+ sock=${1}
+ gif=${2}
+ addr=${3}
+ remote=${4}
+ inner=${5}
+ src=${6}
+ dst=${7}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 rump.ifconfig ${gif} create
+ atf_check -s exit:0 rump.ifconfig ${gif} tunnel ${src} ${dst}
+ if [ ${inner} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig ${gif} inet6 ${addr}/128 ${remote}
+ else
+ atf_check -s exit:0 rump.ifconfig ${gif} inet ${addr}/32 ${remote}
+ fi
+
+ rump.ifconfig ${gif}
+}
+
+# test in ROUTER1 only
+setup_recursive_tunnels()
+{
+ mode=${1}
+
+ addr=""
+ remote=""
+ src=""
+ dst=""
+
+ if [ ${mode} = "ipv6" ]; then
+ addr=$ROUTER1_GIFIP6_RECURSIVE1
+ remote=$ROUTER2_GIFIP6_RECURSIVE1
+ src=$ROUTER1_GIFIP6
+ dst=$ROUTER2_GIFIP6
+ else
+ addr=$ROUTER1_GIFIP_RECURSIVE1
+ remote=$ROUTER2_GIFIP_RECURSIVE1
+ src=$ROUTER1_GIFIP
+ dst=$ROUTER2_GIFIP
+ fi
+ setup_recursive_if_gif $SOCK1 gif1 ${addr} ${remote} ${mode} \
+ ${src} ${dst}
+
+ if [ ${mode} = "ipv6" ]; then
+ addr=$ROUTER1_GIFIP6_RECURSIVE2
+ remote=$ROUTER2_GIFIP6_RECURSIVE2
+ src=$ROUTER1_GIFIP6_RECURSIVE1
+ dst=$ROUTER2_GIFIP6_RECURSIVE1
+ else
+ addr=$ROUTER1_GIFIP_RECURSIVE2
+ remote=$ROUTER2_GIFIP_RECURSIVE2
+ src=$ROUTER1_GIFIP_RECURSIVE1
+ dst=$ROUTER2_GIFIP_RECURSIVE1
+ fi
+ setup_recursive_if_gif $SOCK1 gif2 ${addr} ${remote} ${mode} \
+ ${src} ${dst}
+}
+
+# test in router1 only
+test_recursive_check()
+{
+ mode=$1
+
+ export RUMP_SERVER=$SOCK1
+ if [ ${mode} = "ipv6" ]; then
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_GIFIP6_RECURSIVE2
+ else
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_GIFIP_RECURSIVE2
+ fi
+
+ atf_check -o match:'gif0: recursively called too many times' \
+ -x "$HIJACKING dmesg"
+
+ $HIJACKING dmesg
+}
+
+teardown_recursive_tunnels()
+{
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif1 destroy
+ atf_check -s exit:0 rump.ifconfig gif2 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif2 destroy
+}
+
+test_ping_failure()
+{
+ mode=$1
+
+ export RUMP_SERVER=$SOCK1
+ if [ ${mode} = "ipv6" ]; then
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
+ $ROUTER2_LANIP6
+ else
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
+ $ROUTER2_LANIP
+ fi
+
+ export RUMP_SERVER=$SOCK2
+ if [ ${mode} = "ipv6" ]; then
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
+ $ROUTER1_LANIP6
+ else
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
+ $ROUTER2_LANIP
+ fi
+}
+
+test_ping_success()
+{
+ mode=$1
+
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v gif0
+ if [ ${mode} = "ipv6" ]; then
+ # XXX
+ # rump.ping6 rarely fails with the message that
+ # "failed to get receiving hop limit".
+ # This is a known issue being analyzed.
+ atf_check -s exit:0 -o ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
+ $ROUTER2_LANIP6
+ else
+ atf_check -s exit:0 -o ignore \
+ rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
+ $ROUTER2_LANIP
+ fi
+ rump.ifconfig -v gif0
+
+ export RUMP_SERVER=$SOCK2
+ rump.ifconfig -v gif0
+ if [ ${mode} = "ipv6" ]; then
+ atf_check -s exit:0 -o ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
+ $ROUTER1_LANIP6
+ else
+ atf_check -s exit:0 -o ignore \
+ rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \
+ $ROUTER1_LANIP
+ fi
+ rump.ifconfig -v gif0
+}
+
+test_change_tunnel_duplicate()
+{
+ mode=$1
+
+ newsrc=""
+ newdst=""
+ if [ ${mode} = "ipv6" ]; then
+ newsrc=$ROUTER1_WANIP6_DUMMY
+ newdst=$ROUTER2_WANIP6_DUMMY
+ else
+ newsrc=$ROUTER1_WANIP_DUMMY
+ newdst=$ROUTER2_WANIP_DUMMY
+ fi
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v gif0
+ rump.ifconfig -v gif1
+ atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
+ rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
+ rump.ifconfig -v gif0
+ rump.ifconfig -v gif1
+
+ if [ ${mode} = "ipv6" ]; then
+ newsrc=$ROUTER2_WANIP6_DUMMY
+ newdst=$ROUTER1_WANIP6_DUMMY
+ else
+ newsrc=$ROUTER2_WANIP_DUMMY
+ newdst=$ROUTER1_WANIP_DUMMY
+ fi
+ export RUMP_SERVER=$SOCK2
+ rump.ifconfig -v gif0
+ rump.ifconfig -v gif1
+ atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
+ rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
+ rump.ifconfig -v gif0
+ rump.ifconfig -v gif1
+}
+
+test_change_tunnel_success()
+{
+ mode=$1
+
+ newsrc=""
+ newdst=""
+ if [ ${mode} = "ipv6" ]; then
+ newsrc=$ROUTER1_WANIP6_DUMMY
+ newdst=$ROUTER2_WANIP6_DUMMY
+ else
+ newsrc=$ROUTER1_WANIP_DUMMY
+ newdst=$ROUTER2_WANIP_DUMMY
+ fi
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v gif0
+ atf_check -s exit:0 \
+ rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
+ rump.ifconfig -v gif0
+
+ if [ ${mode} = "ipv6" ]; then
+ newsrc=$ROUTER2_WANIP6_DUMMY
+ newdst=$ROUTER1_WANIP6_DUMMY
+ else
+ newsrc=$ROUTER2_WANIP_DUMMY
+ newdst=$ROUTER1_WANIP_DUMMY
+ fi
+ export RUMP_SERVER=$SOCK2
+ rump.ifconfig -v gif0
+ atf_check -s exit:0 \
+ rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
+ rump.ifconfig -v gif0
+}
+
+basic_setup()
+{
+ inner=$1
+ outer=$2
+
+ setup ${inner} ${outer}
+ test_setup ${inner} ${outer}
+
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
+
+ setup_tunnel ${inner} ${outer}
+ sleep 1
+ test_setup_tunnel ${inner}
+}
+
+basic_test()
+{
+ inner=$1
+ outer=$2 # not use
+
+ test_ping_success ${inner}
+}
+
+basic_teardown()
+{
+ inner=$1
+ outer=$2 # not use
+
+ teardown_tunnel
+ test_ping_failure ${inner}
+}
+
+ioctl_setup()
+{
+ inner=$1
+ outer=$2
+
+ setup ${inner} ${outer}
+ test_setup ${inner} ${outer}
+
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
+
+ setup_tunnel ${inner} ${outer}
+ setup_dummy_tunnel ${inner} ${outer}
+ sleep 1
+ test_setup_tunnel ${inner}
+}
+
+ioctl_test()
+{
+ inner=$1
+ outer=$2
+
+ test_ping_success ${inner}
+
+ test_change_tunnel_duplicate ${outer}
+
+ teardown_dummy_tunnel
+ test_change_tunnel_success ${outer}
+}
+
+ioctl_teardown()
+{
+ inner=$1
+ outer=$2 # not use
+
+ teardown_tunnel
+ test_ping_failure ${inner}
+}
+
+recursive_setup()
+{
+ inner=$1
+ outer=$2
+
+ setup ${inner} ${outer}
+ test_setup ${inner} ${outer}
+
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
+
+ setup_tunnel ${inner} ${outer}
+ setup_recursive_tunnels ${inner}
+ sleep 1
+ test_setup_tunnel ${inner}
+}
+
+recursive_test()
+{
+ inner=$1
+ outer=$2 # not use
+
+ test_recursive_check ${inner}
+}
+
+recursive_teardown()
+{
+ inner=$1 # not use
+ outer=$2 # not use
+
+ teardown_recursive_tunnels
+ teardown_tunnel
+}
+
+add_test()
+{
+ category=$1
+ desc=$2
+ inner=$3
+ outer=$4
+
+ name="gif_${category}_${inner}over${outer}"
+ fulldesc="Does ${inner} over ${outer} if_gif ${desc}"
+
+ atf_test_case ${name} cleanup
+ eval "${name}_head() { \
+ atf_set \"descr\" \"${fulldesc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ ${name}_body() { \
+ ${category}_setup ${inner} ${outer}; \
+ ${category}_test ${inner} ${outer}; \
+ ${category}_teardown ${inner} ${outer}; \
+ rump_server_destroy_ifaces; \
+ }; \
+ ${name}_cleanup() { \
+ $DEBUG && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case ${name}
+}
+
+add_test_allproto()
+{
+ category=$1
+ desc=$2
+
+ add_test ${category} "${desc}" ipv4 ipv4
+ add_test ${category} "${desc}" ipv4 ipv6
+ add_test ${category} "${desc}" ipv6 ipv4
+ add_test ${category} "${desc}" ipv6 ipv6
+}
+
+atf_init_test_cases()
+{
+ add_test_allproto basic "basic tests"
+ add_test_allproto ioctl "ioctl tests"
+ add_test_allproto recursive "recursive check tests"
+}
diff --git a/contrib/netbsd-tests/net/if_pppoe/t_pppoe.sh b/contrib/netbsd-tests/net/if_pppoe/t_pppoe.sh
new file mode 100755
index 0000000..8d9d5c2
--- /dev/null
+++ b/contrib/netbsd-tests/net/if_pppoe/t_pppoe.sh
@@ -0,0 +1,416 @@
+# $NetBSD: t_pppoe.sh,v 1.16 2016/12/14 03:30:30 knakahara Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+server="rump_server -lrump -lrumpnet -lrumpnet_net -lrumpnet_netinet \
+ -lrumpnet_netinet6 -lrumpnet_shmif -lrumpdev \
+ -lrumpnet_pppoe"
+# pppoectl doesn't work with RUMPHIJACK=sysctl=yes
+HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so"
+
+SERVER=unix://commsock1
+CLIENT=unix://commsock2
+
+SERVER_IP=10.3.3.1
+CLIENT_IP=10.3.3.3
+SERVER_IP6=fc00::1
+CLIENT_IP6=fc00::3
+AUTHNAME=foobar@baz.com
+SECRET=oink
+BUS=bus0
+TIMEOUT=3
+WAITTIME=10
+DEBUG=${DEBUG:-false}
+
+setup()
+{
+ inet=true
+
+ if [ $# -ne 0 ]; then
+ eval $@
+ fi
+
+ atf_check -s exit:0 ${server} $SERVER
+ atf_check -s exit:0 ${server} $CLIENT
+
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 rump.ifconfig pppoe0 create
+ $inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
+ inet $SERVER_IP $CLIENT_IP down
+ atf_check -s exit:0 rump.ifconfig pppoe0 link0
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+
+ atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 rump.ifconfig pppoe0 create
+ $inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
+ inet 0.0.0.0 0.0.0.1 down
+
+ atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
+ unset RUMP_SERVER
+}
+
+cleanup()
+{
+ env RUMP_SERVER=$SERVER rump.halt
+ env RUMP_SERVER=$CLIENT rump.halt
+}
+
+
+wait_for_session_established()
+{
+ local dontfail=$1
+ local n=$WAITTIME
+
+ for i in $(seq $n); do
+ $HIJACKING pppoectl -d pppoe0 |grep -q "state = session"
+ [ $? = 0 ] && return
+ sleep 1
+ done
+
+ if [ "$dontfail" != "dontfail" ]; then
+ atf_fail "Couldn't connect to the server for $n seconds."
+ fi
+}
+
+wait_for_disconnected()
+{
+ local dontfail=$1
+ local n=$WAITTIME
+
+ for i in $(seq $n); do
+ $HIJACKING pppoectl -d pppoe0 | grep -q "state = initial"
+ [ $? = 0 ] && return
+ # If PPPoE client is disconnected by PPPoE server and then
+ # the client kicks callout of pppoe_timeout(), the client
+ # state is changed to PPPOE_STATE_PADI_SENT while padi retrying.
+ $HIJACKING pppoectl -d pppoe0 | grep -q "state = PADI sent"
+ [ $? = 0 ] && return
+
+ sleep 1
+ done
+
+ if [ "$dontfail" != "dontfail" ]; then
+ atf_fail "Couldn't disconnect for $n seconds."
+ fi
+}
+
+run_test()
+{
+ local auth=$1
+ setup
+
+ # As pppoe client doesn't support rechallenge yet.
+ local server_optparam=""
+ if [ $auth = "chap" ]; then
+ server_optparam="norechallenge"
+ fi
+
+ export RUMP_SERVER=$SERVER
+ local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
+ 'hisauthname=$AUTHNAME' \
+ 'hisauthsecret=$SECRET' \
+ 'myauthproto=none' \
+ $server_optparam"
+ atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$CLIENT
+ local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
+ 'myauthname=$AUTHNAME' \
+ 'myauthsecret=$SECRET' \
+ 'hisauthproto=none'"
+ atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ $DEBUG && rump.ifconfig
+ wait_for_session_established
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
+ unset RUMP_SERVER
+
+ # test for disconnection from server
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ export RUMP_SERVER=$CLIENT
+ wait_for_disconnected
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -c 1 -w $TIMEOUT $SERVER_IP
+ atf_check -s exit:0 -o match:'PADI sent' -x "$HIJACKING pppoectl -d pppoe0"
+ unset RUMP_SERVER
+
+ # test for recoonecting
+ atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
+ export RUMP_SERVER=$CLIENT
+ wait_for_session_established
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
+ unset RUMP_SERVER
+
+ # test for disconnection from client
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 -x rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ export RUMP_SERVER=$SERVER
+ wait_for_disconnected
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
+ atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
+ unset RUMP_SERVER
+
+ # test for reconnecting
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 -x rump.ifconfig pppoe0 up
+ wait_for_session_established
+ $DEBUG && rump.ifconfig pppoe0
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
+ atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
+ $DEBUG && HIJACKING pppoectl -d pppoe0
+ unset RUMP_SERVER
+
+ # test for invalid password
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
+ 'myauthname=$AUTHNAME' \
+ 'myauthsecret=invalidsecret' \
+ 'hisauthproto=none'"
+ atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ wait_for_session_established dontfail
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -c 1 -w $TIMEOUT $SERVER_IP
+ atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
+ unset RUMP_SERVER
+}
+
+atf_test_case pppoe_pap cleanup
+
+pppoe_pap_head()
+{
+ atf_set "descr" "Does simple pap tests"
+ atf_set "require.progs" "rump_server pppoectl"
+}
+
+pppoe_pap_body()
+{
+ run_test pap
+}
+
+pppoe_pap_cleanup()
+{
+ cleanup
+}
+
+atf_test_case pppoe_chap cleanup
+
+pppoe_chap_head()
+{
+ atf_set "descr" "Does simple chap tests"
+ atf_set "require.progs" "rump_server pppoectl"
+}
+
+pppoe_chap_body()
+{
+ run_test chap
+}
+
+pppoe_chap_cleanup()
+{
+ cleanup
+}
+
+run_test6()
+{
+ local auth=$1
+ setup "inet=false"
+
+ # As pppoe client doesn't support rechallenge yet.
+ local server_optparam=""
+ if [ $auth = "chap" ]; then
+ server_optparam="norechallenge"
+ fi
+
+ export RUMP_SERVER=$SERVER
+ local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
+ 'hisauthname=$AUTHNAME' \
+ 'hisauthsecret=$SECRET' \
+ 'myauthproto=none' \
+ $server_optparam"
+ atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $SERVER_IP6/64 down
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$CLIENT
+ local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
+ 'myauthname=$AUTHNAME' \
+ 'myauthsecret=$SECRET' \
+ 'hisauthproto=none'"
+ atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $CLIENT_IP6/64 down
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ $DEBUG && rump.ifconfig
+ wait_for_session_established
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
+ unset RUMP_SERVER
+
+ # test for disconnection from server
+ export RUMP_SERVER=$SERVER
+ session_id=`$HIJACKING pppoectl -d pppoe0 | grep state`
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ export RUMP_SERVER=$CLIENT
+ wait_for_disconnected
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
+ atf_check -s exit:0 -o not-match:"$session_id" -x "$HIJACKING pppoectl -d pppoe0"
+ unset RUMP_SERVER
+
+ # test for recoonecting
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ wait_for_session_established
+ atf_check -s exit:0 rump.ifconfig -w 10
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ $DEBUG && rump.ifconfig pppoe0
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
+ unset RUMP_SERVER
+
+ # test for disconnection from client
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+
+ export RUMP_SERVER=$SERVER
+ wait_for_disconnected
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
+ atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
+ unset RUMP_SERVER
+
+ # test for reconnecting
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ wait_for_session_established
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig pppoe0
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
+ atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
+ $DEBUG && HIJACKING pppoectl -d pppoe0
+ unset RUMP_SERVER
+
+ # test for invalid password
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
+ 'myauthname=$AUTHNAME' \
+ 'myauthsecret=invalidsecret' \
+ 'hisauthproto=none'"
+ atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ wait_for_session_established dontfail
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
+ atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
+ unset RUMP_SERVER
+}
+
+atf_test_case pppoe6_pap cleanup
+
+pppoe6_pap_head()
+{
+ atf_set "descr" "Does simple pap using IPv6 tests"
+ atf_set "require.progs" "rump_server pppoectl"
+}
+
+pppoe6_pap_body()
+{
+ run_test6 pap
+}
+
+pppoe6_pap_cleanup()
+{
+ cleanup
+}
+
+atf_test_case pppoe6_chap cleanup
+
+pppoe6_chap_head()
+{
+ atf_set "descr" "Does simple chap using IPv6 tests"
+ atf_set "require.progs" "rump_server pppoectl"
+}
+
+pppoe6_chap_body()
+{
+ run_test6 chap
+}
+
+pppoe6_chap_cleanup()
+{
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case pppoe_pap
+ atf_add_test_case pppoe_chap
+ atf_add_test_case pppoe6_pap
+ atf_add_test_case pppoe6_chap
+}
diff --git a/contrib/netbsd-tests/net/if_tap/t_tap.sh b/contrib/netbsd-tests/net/if_tap/t_tap.sh
new file mode 100755
index 0000000..4b1ce25
--- /dev/null
+++ b/contrib/netbsd-tests/net/if_tap/t_tap.sh
@@ -0,0 +1,198 @@
+# $NetBSD: t_tap.sh,v 1.6 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+SOCK_REMOTE=unix://commsock2
+BUS=bus1
+IP4_LOCAL=10.0.0.1
+IP4_TAP=10.0.0.2
+IP4_REMOTE=10.0.0.3
+IP6_LOCAL=fc00::1
+IP6_TAP=fc00::2
+IP6_REMOTE=fc00::3
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=1
+
+atf_test_case tap_create_destroy cleanup
+tap_create_destroy_head()
+{
+
+ atf_set "descr" "tests of creation and deletion of tap interface"
+ atf_set "require.progs" "rump_server"
+}
+
+tap_create_destroy_body()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6 tap
+
+ export RUMP_SERVER=${SOCK_LOCAL}
+
+ # Create and destroy (no address)
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 destroy
+
+ # Create and destroy (with an IPv4 address)
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 up
+ atf_check -s exit:0 rump.ifconfig tap0 destroy
+
+ # Create and destroy (with an IPv6 address)
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 up
+ atf_check -s exit:0 rump.ifconfig tap0 destroy
+}
+
+tap_create_destroy_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case tap_stand_alone cleanup
+tap_create_destroy_head()
+{
+
+ atf_set "descr" "tests of alone tap interface"
+ atf_set "require.progs" "rump_server"
+}
+
+tap_stand_alone_body()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6 tap
+ rump_server_start $SOCK_REMOTE netinet6 tap
+
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+ rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+ export RUMP_SERVER=${SOCK_LOCAL}
+ atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ export RUMP_SERVER=${SOCK_REMOTE}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL
+ # Cannot reach to an alone tap
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL
+ # Cannot reach to an alone tap
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
+
+ rump_server_destroy_ifaces
+}
+
+tap_stand_alone_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case tap_bridged cleanup
+tap_bridged_head()
+{
+
+ atf_set "descr" "tests of alone tap interface"
+ atf_set "require.progs" "rump_server"
+}
+
+tap_bridged_body()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6 tap bridge
+ rump_server_start $SOCK_REMOTE netinet6 tap
+
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+ rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+ export RUMP_SERVER=${SOCK_LOCAL}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ atf_check -s exit:0 rump.ifconfig bridge0 create
+ atf_check -s exit:0 rump.ifconfig bridge0 up
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 brconfig bridge0 add shmif0
+ atf_check -s exit:0 brconfig bridge0 add tap0
+ unset LD_PRELOAD
+
+ export RUMP_SERVER=${SOCK_REMOTE}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
+
+ rump_server_destroy_ifaces
+}
+
+tap_bridged_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case tap_create_destroy
+ atf_add_test_case tap_stand_alone
+ atf_add_test_case tap_bridged
+}
diff --git a/contrib/netbsd-tests/net/in_cksum/assym.h b/contrib/netbsd-tests/net/in_cksum/assym.h
new file mode 100644
index 0000000..60aa41f
--- /dev/null
+++ b/contrib/netbsd-tests/net/in_cksum/assym.h
@@ -0,0 +1,10 @@
+/* XXX: Depends on m_hdr */
+#ifdef _LP64
+#define M_NEXT 0
+#define M_DATA 16
+#define M_LEN 32
+#else
+#define M_NEXT 0
+#define M_DATA 8
+#define M_LEN 16
+#endif
diff --git a/contrib/netbsd-tests/net/in_cksum/in_cksum.c b/contrib/netbsd-tests/net/in_cksum/in_cksum.c
new file mode 100644
index 0000000..4bdaf5b
--- /dev/null
+++ b/contrib/netbsd-tests/net/in_cksum/in_cksum.c
@@ -0,0 +1,270 @@
+/* $NetBSD: in_cksum.c,v 1.5 2015/10/18 18:27:25 christos Exp $ */
+/*-
+ * Copyright (c) 2008 Joerg Sonnenberger <joerg@NetBSD.org>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: in_cksum.c,v 1.5 2015/10/18 18:27:25 christos Exp $");
+
+#include <sys/param.h>
+#include <sys/mbuf.h>
+#include <sys/resource.h>
+#include <err.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define cpu_in_cksum portable_cpu_in_cksum
+#include "cpu_in_cksum.c"
+
+#ifdef HAVE_CPU_IN_CKSUM
+#undef cpu_in_cksum
+int cpu_in_cksum(struct mbuf*, int, int, uint32_t);
+#endif
+
+static bool random_aligned;
+
+void panic(const char *, ...) __printflike(1, 2);
+void
+panic(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ verrx(1, fmt, ap);
+ va_end(ap);
+}
+
+static void
+free_mbuf_chain(struct mbuf *m)
+{
+ struct mbuf *next;
+
+ if (m == NULL)
+ return;
+
+ next = m->m_next;
+ free(m);
+ free_mbuf_chain(next);
+}
+
+static struct mbuf *
+allocate_mbuf_chain(char **lens)
+{
+ int len, off;
+ struct mbuf *m;
+
+ if (*lens == NULL)
+ return NULL;
+
+ len = atoi(*lens);
+ off = random_aligned ? rand() % 64 : 0;
+
+ m = malloc(sizeof(struct m_hdr) + len + off);
+ if (m == NULL)
+ err(EXIT_FAILURE, "malloc failed");
+
+ m->m_data = (char *)m + sizeof(struct m_hdr) + off;
+ m->m_len = len;
+
+ m->m_next = allocate_mbuf_chain(lens + 1);
+
+ return m;
+}
+
+#ifdef MBUFDUMP
+static void
+dump_mbuf(const struct mbuf *m, int len, int off)
+{
+ int x = 0;
+ if (len <= 0)
+ return;
+
+ printf("Starting len=%d off=%d:\n", len, off);
+ if (off > 0) {
+ for (; m; m = m->m_next)
+ if (off > m->m_len)
+ off -= m->m_len;
+ else
+ break;
+ if (m == NULL || off > m->m_len)
+ errx(1, "out of data");
+ }
+
+ unsigned char *ptr = mtod(m, unsigned char *) + off;
+ unsigned char *eptr = ptr + m->m_len;
+ printf("[");
+ for (;;) {
+ if (ptr == eptr) {
+ m = m->m_next;
+ if (m == NULL)
+ errx(1, "out of data");
+ ptr = mtod(m, unsigned char *);
+ eptr = ptr + m->m_len;
+ printf("]\n[");
+ x = 0;
+ }
+ printf("%.2x ", *ptr++);
+ if (++x % 16 == 0)
+ printf("\n");
+ if (--len == 0)
+ break;
+ }
+ printf("]\n");
+ fflush(stdout);
+}
+#endif
+
+static void
+randomise_mbuf_chain(struct mbuf *m)
+{
+ int i, data, len;
+
+ for (i = 0; i < m->m_len; i += sizeof(int)) {
+ data = rand();
+ if (i + sizeof(int) < (size_t)m->m_len)
+ len = sizeof(int);
+ else
+ len = m->m_len - i;
+ memcpy(m->m_data + i, &data, len);
+ }
+ if (m->m_next)
+ randomise_mbuf_chain(m->m_next);
+}
+
+static int
+mbuf_len(struct mbuf *m)
+{
+ return m == NULL ? 0 : m->m_len + mbuf_len(m->m_next);
+}
+
+int in_cksum_portable(struct mbuf *, int);
+int in_cksum(struct mbuf *, int);
+
+int
+main(int argc, char **argv)
+{
+ struct rusage res;
+ struct timeval tv, old_tv;
+ int loops, old_sum, off, len;
+#ifdef HAVE_CPU_IN_CKSUM
+ int new_sum;
+#endif
+ long i, iterations;
+ uint32_t init_sum;
+ struct mbuf *m;
+ bool verbose;
+ int c;
+
+ loops = 16;
+ verbose = false;
+ random_aligned = 0;
+ iterations = 100000;
+
+ while ((c = getopt(argc, argv, "i:l:u:v")) != -1) {
+ switch (c) {
+ case 'i':
+ iterations = atoi(optarg);
+ break;
+ case 'l':
+ loops = atoi(optarg);
+ break;
+ case 'u':
+ random_aligned = atoi(optarg);
+ break;
+ case 'v':
+ verbose = true;
+ break;
+ default:
+ errx(1, "%s [-l <loops>] [-u <unalign> [-i <iterations> "
+ "[<mbuf-size> ...]", getprogname());
+ }
+ }
+
+ for (; loops; --loops) {
+ if ((m = allocate_mbuf_chain(argv + 4)) == NULL)
+ continue;
+ randomise_mbuf_chain(m);
+ init_sum = rand();
+ len = mbuf_len(m);
+
+ /* force one loop over all data */
+ if (loops == 1)
+ off = 0;
+ else
+ off = len ? rand() % len : 0;
+
+ len -= off;
+ old_sum = portable_cpu_in_cksum(m, len, off, init_sum);
+#ifdef HAVE_CPU_IN_CKSUM
+#ifdef MBUFDUMP
+ printf("m->m_len=%d len=%d off=%d\n", m->m_len, len, off);
+ dump_mbuf(m, len, off);
+#endif
+ new_sum = cpu_in_cksum(m, len, off, init_sum);
+ if (old_sum != new_sum)
+ errx(1, "comparison failed: %x %x", old_sum, new_sum);
+#else
+ __USE(old_sum);
+#endif
+
+ if (iterations == 0)
+ continue;
+
+ getrusage(RUSAGE_SELF, &res);
+ tv = res.ru_utime;
+ for (i = iterations; i; --i)
+ (void)portable_cpu_in_cksum(m, len, off, init_sum);
+ getrusage(RUSAGE_SELF, &res);
+ timersub(&res.ru_utime, &tv, &old_tv);
+ if (verbose)
+ printf("portable version: %jd.%06jd\n",
+ (intmax_t)old_tv.tv_sec, (intmax_t)old_tv.tv_usec);
+
+#ifdef HAVE_CPU_IN_CKSUM
+ getrusage(RUSAGE_SELF, &res);
+ tv = res.ru_utime;
+ for (i = iterations; i; --i)
+ (void)cpu_in_cksum(m, len, off, init_sum);
+ getrusage(RUSAGE_SELF, &res);
+ timersub(&res.ru_utime, &tv, &tv);
+ if (verbose) {
+ printf("test version: %jd.%06jd\n",
+ (intmax_t)tv.tv_sec, (intmax_t)tv.tv_usec);
+ printf("relative time: %3.g%%\n",
+ 100 * ((double)tv.tv_sec * 1e6 + tv.tv_usec) /
+ ((double)old_tv.tv_sec * 1e6 + old_tv.tv_usec + 1));
+ }
+#endif
+ free_mbuf_chain(m);
+ }
+
+ return 0;
+}
diff --git a/contrib/netbsd-tests/net/in_cksum/t_in_cksum.sh b/contrib/netbsd-tests/net/in_cksum/t_in_cksum.sh
new file mode 100755
index 0000000..a342403
--- /dev/null
+++ b/contrib/netbsd-tests/net/in_cksum/t_in_cksum.sh
@@ -0,0 +1,78 @@
+#! /usr/bin/atf-sh
+# $NetBSD: t_in_cksum.sh,v 1.2 2015/01/06 15:13:16 martin Exp $
+#
+
+TIMING_LOOPS=10000
+incksum="$(atf_get_srcdir)/in_cksum"
+
+fail() {
+ atf_fail "see output for details"
+}
+
+mbufs() {
+ ${incksum} -l 16 -u $0 -i ${TIMING_LOOPS} \
+ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 \
+ || fail
+ ${incksum} -l 16 -u $0 -i ${TIMING_LOOPS} \
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+ || fail
+ ${incksum} -l 64 -u $0 -i ${TIMING_LOOPS} \
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+ || fail
+ ${incksum} -l 16 -u $0 -i ${TIMING_LOOPS} \
+ 1 3 1 3 1 3 1 \
+ || fail
+}
+
+sizes() {
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 2048 || fail
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 40 || fail
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 1536 || fail
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 576 || fail
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 1536 1536 1536 1536 1536 640 \
+ || fail
+}
+
+atf_test_case mbufs_aligned
+
+mbufs_aligned_head() {
+ atf_set "descr" "Test in_cksum mbuf chains aligned"
+}
+
+mbufs_aligned_body() {
+ mbufs 0
+}
+
+mbufs_unaligned_head() {
+ atf_set "descr" "Test in_cksum mbuf chains unaligned"
+}
+
+mbufs_unaligned_body() {
+ mbufs 1
+}
+
+sizes_aligned_head() {
+ atf_set "descr" "Test in_cksum sizes aligned"
+}
+
+sizes_aligned_body() {
+ sizes 0
+}
+
+sizes_unaligned_head() {
+ atf_set "descr" "Test in_cksum sizes unaligned"
+}
+
+sizes_unaligned_body() {
+ sizes 1
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case mbufs_aligned
+ atf_add_test_case mbufs_unaligned
+ atf_add_test_case sizes_aligned
+ atf_add_test_case sizes_unaligned
+}
diff --git a/contrib/netbsd-tests/net/mcast/mcast.c b/contrib/netbsd-tests/net/mcast/mcast.c
new file mode 100644
index 0000000..ad2c9b3
--- /dev/null
+++ b/contrib/netbsd-tests/net/mcast/mcast.c
@@ -0,0 +1,559 @@
+/* $NetBSD: mcast.c,v 1.3 2015/05/28 10:19:17 ozaki-r Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+#ifdef __RCSID
+__RCSID("$NetBSD: mcast.c,v 1.3 2015/05/28 10:19:17 ozaki-r Exp $");
+#else
+extern const char *__progname;
+#define getprogname() __progname
+#endif
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <sys/time.h>
+#include <netinet/in.h>
+
+#include <assert.h>
+#include <netdb.h>
+#include <time.h>
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <err.h>
+#include <errno.h>
+#include <poll.h>
+#include <stdbool.h>
+
+#ifdef ATF
+#include <atf-c.h>
+
+#define ERRX(ev, msg, ...) ATF_REQUIRE_MSG(0, msg, __VA_ARGS__)
+#define ERRX0(ev, msg) ATF_REQUIRE_MSG(0, msg)
+
+#define SKIPX(ev, msg, ...) do { \
+ atf_tc_skip(msg, __VA_ARGS__); \
+ return; \
+} while(/*CONSTCOND*/0)
+
+#else
+#define ERRX(ev, msg, ...) errx(ev, msg, __VA_ARGS__)
+#define ERRX0(ev, msg) errx(ev, msg)
+#define SKIPX(ev, msg, ...) errx(ev, msg, __VA_ARGS__)
+#endif
+
+static int debug;
+
+#define TOTAL 10
+#define PORT_V4MAPPED "6666"
+#define HOST_V4MAPPED "::FFFF:239.1.1.1"
+#define PORT_V4 "6666"
+#define HOST_V4 "239.1.1.1"
+#define PORT_V6 "6666"
+#define HOST_V6 "FF05:1:0:0:0:0:0:1"
+
+struct message {
+ size_t seq;
+ struct timespec ts;
+};
+
+static int
+addmc(int s, struct addrinfo *ai, bool bug)
+{
+ struct ip_mreq m4;
+ struct ipv6_mreq m6;
+ struct sockaddr_in *s4;
+ struct sockaddr_in6 *s6;
+ unsigned int ifc;
+
+ switch (ai->ai_family) {
+ case AF_INET:
+ s4 = (void *)ai->ai_addr;
+ assert(sizeof(*s4) == ai->ai_addrlen);
+ m4.imr_multiaddr = s4->sin_addr;
+ m4.imr_interface.s_addr = htonl(INADDR_ANY);
+ return setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
+ &m4, sizeof(m4));
+ case AF_INET6:
+ s6 = (void *)ai->ai_addr;
+ /*
+ * Linux: Does not support the v6 ioctls on v4 mapped
+ * sockets but it does support the v4 ones and
+ * it works.
+ * MacOS/X: Supports the v6 ioctls on v4 mapped sockets,
+ * but does not work and also does not support
+ * the v4 ioctls. So no way to make multicasting
+ * work with mapped addresses.
+ * NetBSD: Supports both and works for both.
+ */
+ if (bug && IN6_IS_ADDR_V4MAPPED(&s6->sin6_addr)) {
+ memcpy(&m4.imr_multiaddr, &s6->sin6_addr.s6_addr[12],
+ sizeof(m4.imr_multiaddr));
+ m4.imr_interface.s_addr = htonl(INADDR_ANY);
+ return setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
+ &m4, sizeof(m4));
+ }
+ assert(sizeof(*s6) == ai->ai_addrlen);
+ memset(&m6, 0, sizeof(m6));
+#if 0
+ ifc = 1;
+ if (setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
+ &ifc, sizeof(ifc)) == -1)
+ return -1;
+ ifc = 224;
+ if (setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
+ &ifc, sizeof(ifc)) == -1)
+ return -1;
+ ifc = 1; /* XXX should pick a proper interface */
+ if (setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_IF, &ifc,
+ sizeof(ifc)) == -1)
+ return -1;
+#else
+ ifc = 0; /* Let pick an appropriate interface */
+#endif
+ m6.ipv6mr_interface = ifc;
+ m6.ipv6mr_multiaddr = s6->sin6_addr;
+ return setsockopt(s, IPPROTO_IPV6, IPV6_JOIN_GROUP,
+ &m6, sizeof(m6));
+ default:
+ errno = EOPNOTSUPP;
+ return -1;
+ }
+}
+
+static int
+allowv4mapped(int s, struct addrinfo *ai)
+{
+ struct sockaddr_in6 *s6;
+ int zero = 0;
+
+ if (ai->ai_family != AF_INET6)
+ return 0;
+
+ s6 = (void *)ai->ai_addr;
+
+ if (!IN6_IS_ADDR_V4MAPPED(&s6->sin6_addr))
+ return 0;
+ return setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero));
+}
+
+static struct sockaddr_storage ss;
+static int
+connector(int fd, const struct sockaddr *sa, socklen_t slen)
+{
+ assert(sizeof(ss) > slen);
+ memcpy(&ss, sa, slen);
+ return 0;
+}
+
+static void
+show(const char *prefix, const struct message *msg)
+{
+ printf("%10.10s: %zu [%jd.%ld]\n", prefix, msg->seq, (intmax_t)
+ msg->ts.tv_sec, msg->ts.tv_nsec);
+}
+
+static int
+getsocket(const char *host, const char *port,
+ int (*f)(int, const struct sockaddr *, socklen_t), socklen_t *slen,
+ bool bug)
+{
+ int e, s, lasterrno = 0;
+ struct addrinfo hints, *ai0, *ai;
+ const char *cause = "?";
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_DGRAM;
+ e = getaddrinfo(host, port, &hints, &ai0);
+ if (e)
+ ERRX(EXIT_FAILURE, "Can't resolve %s:%s (%s)", host, port,
+ gai_strerror(e));
+
+ s = -1;
+ for (ai = ai0; ai; ai = ai->ai_next) {
+ s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+ if (s == -1) {
+ lasterrno = errno;
+ cause = "socket";
+ continue;
+ }
+ if (allowv4mapped(s, ai) == -1) {
+ cause = "allow v4 mapped";
+ goto out;
+ }
+ if ((*f)(s, ai->ai_addr, ai->ai_addrlen) == -1) {
+ cause = f == bind ? "bind" : "connect";
+ goto out;
+ }
+ if ((f == bind || f == connector) && addmc(s, ai, bug) == -1) {
+ cause = "join group";
+ goto out;
+ }
+ *slen = ai->ai_addrlen;
+ break;
+out:
+ lasterrno = errno;
+ close(s);
+ s = -1;
+ continue;
+ }
+ freeaddrinfo(ai0);
+ if (s == -1)
+ ERRX(EXIT_FAILURE, "%s (%s)", cause, strerror(lasterrno));
+ return s;
+}
+
+static int
+synchronize(const int fd, bool waiter)
+{
+ int syncmsg = 0;
+ int r;
+ struct pollfd pfd;
+
+ if (waiter) {
+ pfd.fd = fd;
+ pfd.events = POLLIN;
+
+ /* We use poll to avoid lock up when the peer died unexpectedly */
+ r = poll(&pfd, 1, 10000);
+ if (r == -1)
+ ERRX(EXIT_FAILURE, "poll (%s)", strerror(errno));
+ if (r == 0)
+ /* Timed out */
+ return -1;
+
+ if (read(fd, &syncmsg, sizeof(syncmsg)) == -1)
+ ERRX(EXIT_FAILURE, "read (%s)", strerror(errno));
+ } else {
+ if (write(fd, &syncmsg, sizeof(syncmsg)) == -1)
+ ERRX(EXIT_FAILURE, "write (%s)", strerror(errno));
+ }
+
+ return 0;
+}
+
+static int
+sender(const int fd, const char *host, const char *port, size_t n, bool conn,
+ bool bug)
+{
+ int s;
+ ssize_t l;
+ struct message msg;
+
+ socklen_t slen;
+
+ s = getsocket(host, port, conn ? connect : connector, &slen, bug);
+
+ /* Wait until receiver gets ready. */
+ if (synchronize(fd, true) == -1)
+ return -1;
+
+ for (msg.seq = 0; msg.seq < n; msg.seq++) {
+#ifdef CLOCK_MONOTONIC
+ if (clock_gettime(CLOCK_MONOTONIC, &msg.ts) == -1)
+ ERRX(EXIT_FAILURE, "clock (%s)", strerror(errno));
+#else
+ struct timeval tv;
+ if (gettimeofday(&tv, NULL) == -1)
+ ERRX(EXIT_FAILURE, "clock (%s)", strerror(errno));
+ msg.ts.tv_sec = tv.tv_sec;
+ msg.ts.tv_nsec = tv.tv_usec * 1000;
+#endif
+ if (debug)
+ show("sending", &msg);
+ l = conn ? send(s, &msg, sizeof(msg), 0) :
+ sendto(s, &msg, sizeof(msg), 0, (void *)&ss, slen);
+ if (l == -1)
+ ERRX(EXIT_FAILURE, "send (%s)", strerror(errno));
+ usleep(100);
+ }
+
+ /* Wait until receiver finishes its work. */
+ if (synchronize(fd, true) == -1)
+ return -1;
+
+ return 0;
+}
+
+static void
+receiver(const int fd, const char *host, const char *port, size_t n, bool conn,
+ bool bug)
+{
+ int s;
+ ssize_t l;
+ size_t seq;
+ struct message msg;
+ struct pollfd pfd;
+ socklen_t slen;
+
+ s = getsocket(host, port, bind, &slen, bug);
+ pfd.fd = s;
+ pfd.events = POLLIN;
+
+ /* Tell I'm ready */
+ synchronize(fd, false);
+
+ for (seq = 0; seq < n; seq++) {
+ if (poll(&pfd, 1, 10000) == -1)
+ ERRX(EXIT_FAILURE, "poll (%s)", strerror(errno));
+ l = conn ? recv(s, &msg, sizeof(msg), 0) :
+ recvfrom(s, &msg, sizeof(msg), 0, (void *)&ss, &slen);
+ if (l == -1)
+ ERRX(EXIT_FAILURE, "recv (%s)", strerror(errno));
+ if (debug)
+ show("got", &msg);
+ if (seq != msg.seq)
+ ERRX(EXIT_FAILURE, "seq: expect=%zu actual=%zu",
+ seq, msg.seq);
+ }
+
+ /* Tell I'm finished */
+ synchronize(fd, false);
+}
+
+static void
+run(const char *host, const char *port, size_t n, bool conn, bool bug)
+{
+ pid_t pid;
+ int status;
+ int syncfds[2];
+ int error;
+
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, syncfds) == -1)
+ ERRX(EXIT_FAILURE, "socketpair (%s)", strerror(errno));
+
+ switch ((pid = fork())) {
+ case 0:
+ receiver(syncfds[0], host, port, n, conn, bug);
+ return;
+ case -1:
+ ERRX(EXIT_FAILURE, "fork (%s)", strerror(errno));
+ default:
+ error = sender(syncfds[1], host, port, n, conn, bug);
+ again:
+ switch (waitpid(pid, &status, WNOHANG)) {
+ case -1:
+ ERRX(EXIT_FAILURE, "wait (%s)", strerror(errno));
+ case 0:
+ if (error == 0)
+ /*
+ * Receiver is still alive, but we know
+ * it will exit soon.
+ */
+ goto again;
+
+ if (kill(pid, SIGTERM) == -1)
+ ERRX(EXIT_FAILURE, "kill (%s)",
+ strerror(errno));
+ goto again;
+ default:
+ if (WIFSIGNALED(status)) {
+ if (WTERMSIG(status) == SIGTERM)
+ ERRX0(EXIT_FAILURE,
+ "receiver failed and was killed" \
+ "by sender");
+ else
+ ERRX(EXIT_FAILURE,
+ "receiver got signaled (%s)",
+ strsignal(WTERMSIG(status)));
+ } else if (WIFEXITED(status)) {
+ if (WEXITSTATUS(status) != 0)
+ ERRX(EXIT_FAILURE,
+ "receiver exited with status %d",
+ WEXITSTATUS(status));
+ } else {
+ ERRX(EXIT_FAILURE,
+ "receiver exited with unexpected status %d",
+ status);
+ }
+ break;
+ }
+ return;
+ }
+}
+
+#ifndef ATF
+int
+main(int argc, char *argv[])
+{
+ const char *host, *port;
+ int c;
+ size_t n;
+ bool conn, bug;
+
+ host = HOST_V4;
+ port = PORT_V4;
+ n = TOTAL;
+ bug = conn = false;
+
+ while ((c = getopt(argc, argv, "46bcdmn:")) != -1)
+ switch (c) {
+ case '4':
+ host = HOST_V4;
+ port = PORT_V4;
+ break;
+ case '6':
+ host = HOST_V6;
+ port = PORT_V6;
+ break;
+ case 'b':
+ bug = true;
+ break;
+ case 'c':
+ conn = true;
+ break;
+ case 'd':
+ debug++;
+ break;
+ case 'm':
+ host = HOST_V4MAPPED;
+ port = PORT_V4MAPPED;
+ break;
+ case 'n':
+ n = atoi(optarg);
+ break;
+ default:
+ fprintf(stderr, "Usage: %s [-cdm46] [-n <tot>]",
+ getprogname());
+ return 1;
+ }
+
+ run(host, port, n, conn, bug);
+ return 0;
+}
+#else
+
+ATF_TC(conninet4);
+ATF_TC_HEAD(conninet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks connected multicast for ipv4");
+}
+
+ATF_TC_BODY(conninet4, tc)
+{
+ run(HOST_V4, PORT_V4, TOTAL, true, false);
+}
+
+ATF_TC(connmappedinet4);
+ATF_TC_HEAD(connmappedinet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks connected multicast for mapped ipv4");
+}
+
+ATF_TC_BODY(connmappedinet4, tc)
+{
+ run(HOST_V4MAPPED, PORT_V4MAPPED, TOTAL, true, false);
+}
+
+ATF_TC(connmappedbuginet4);
+ATF_TC_HEAD(connmappedbuginet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks connected multicast for mapped ipv4 using the v4 ioctls");
+}
+
+ATF_TC_BODY(connmappedbuginet4, tc)
+{
+ run(HOST_V4MAPPED, PORT_V4MAPPED, TOTAL, true, true);
+}
+
+ATF_TC(conninet6);
+ATF_TC_HEAD(conninet6, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks connected multicast for ipv6");
+}
+
+ATF_TC_BODY(conninet6, tc)
+{
+ run(HOST_V6, PORT_V6, TOTAL, true, false);
+}
+
+ATF_TC(unconninet4);
+ATF_TC_HEAD(unconninet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks unconnected multicast for ipv4");
+}
+
+ATF_TC_BODY(unconninet4, tc)
+{
+ run(HOST_V4, PORT_V4, TOTAL, false, false);
+}
+
+ATF_TC(unconnmappedinet4);
+ATF_TC_HEAD(unconnmappedinet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks unconnected multicast for mapped ipv4");
+}
+
+ATF_TC_BODY(unconnmappedinet4, tc)
+{
+ run(HOST_V4MAPPED, PORT_V4MAPPED, TOTAL, false, false);
+}
+
+ATF_TC(unconnmappedbuginet4);
+ATF_TC_HEAD(unconnmappedbuginet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks unconnected multicast for mapped ipv4 using the v4 ioctls");
+}
+
+ATF_TC_BODY(unconnmappedbuginet4, tc)
+{
+ run(HOST_V4MAPPED, PORT_V4MAPPED, TOTAL, false, true);
+}
+
+ATF_TC(unconninet6);
+ATF_TC_HEAD(unconninet6, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks unconnected multicast for ipv6");
+}
+
+ATF_TC_BODY(unconninet6, tc)
+{
+ run(HOST_V6, PORT_V6, TOTAL, false, false);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ debug++;
+ ATF_TP_ADD_TC(tp, conninet4);
+ ATF_TP_ADD_TC(tp, connmappedinet4);
+ ATF_TP_ADD_TC(tp, connmappedbuginet4);
+ ATF_TP_ADD_TC(tp, conninet6);
+ ATF_TP_ADD_TC(tp, unconninet4);
+ ATF_TP_ADD_TC(tp, unconnmappedinet4);
+ ATF_TP_ADD_TC(tp, unconnmappedbuginet4);
+ ATF_TP_ADD_TC(tp, unconninet6);
+
+ return atf_no_error();
+}
+#endif
diff --git a/contrib/netbsd-tests/net/mcast/t_mcast.sh b/contrib/netbsd-tests/net/mcast/t_mcast.sh
new file mode 100755
index 0000000..aeb7000
--- /dev/null
+++ b/contrib/netbsd-tests/net/mcast/t_mcast.sh
@@ -0,0 +1,106 @@
+# $NetBSD: t_mcast.sh,v 1.4 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+export RUMP_SERVER=unix://commsock
+
+DEBUG=${DEBUG:-false}
+
+run_test()
+{
+ local name="$1"
+ local opts="$2"
+ local mcast="$(atf_get_srcdir)/mcast"
+
+ rump_server_start $RUMP_SERVER netinet6
+ rump_server_add_iface $RUMP_SERVER shmif0 bus1
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.2/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2/64
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep -q tentative"
+
+ # A route to the mcast address is required to join the mcast group
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default fc00::1
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -nr
+
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ #$DEBUG && /usr/sbin/ifmcstat # Not yet run on rump kernel
+ if $DEBUG; then
+ atf_check -s exit:0 -o ignore $mcast -d ${opts}
+ else
+ atf_check -s exit:0 $mcast ${opts}
+ fi
+ #$DEBUG && /usr/sbin/ifmcstat # Not yet run on rump kernel
+ unset LD_PRELOAD
+}
+
+add_test()
+{
+ local name=$1
+ local opts="$2"
+ local desc="$3"
+
+ atf_test_case "mcast_${name}" cleanup
+ eval "mcast_${name}_head() { \
+ atf_set \"descr\" \"${desc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ mcast_${name}_body() { \
+ run_test \"${name}\" \"${opts}\"; \
+ rump_server_destroy_ifaces; \
+ }; \
+ mcast_${name}_cleanup() { \
+ ${DEBUG} && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case "mcast_${name}"
+}
+
+atf_init_test_cases()
+{
+
+ add_test conninet4 "-c -4" \
+ "Checks connected multicast for ipv4"
+ add_test connmappedinet4 "-c -m -4" \
+ "Checks connected multicast for mapped ipv4"
+ add_test connmappedbuginet4 "-c -m -b -4" \
+ "Checks connected multicast for mapped ipv4 using the v4 ioctls"
+ add_test conninet6 "-c -6" \
+ "Checks connected multicast for ipv6"
+ add_test unconninet4 "-4" \
+ "Checks unconnected multicast for ipv4"
+ add_test unconnmappedinet4 "-m -4" \
+ "Checks unconnected multicast for mapped ipv4"
+ add_test unconnmappedbuginet4 "-m -b -4" \
+ "Checks unconnected multicast for mapped ipv4 using the v4 ioctls"
+ add_test unconninet6 "-6" \
+ "Checks unconnected multicast for ipv6"
+}
diff --git a/contrib/netbsd-tests/net/mpls/t_ldp_regen.sh b/contrib/netbsd-tests/net/mpls/t_ldp_regen.sh
index 65fc29f..964b9ef 100755
--- a/contrib/netbsd-tests/net/mpls/t_ldp_regen.sh
+++ b/contrib/netbsd-tests/net/mpls/t_ldp_regen.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_ldp_regen.sh,v 1.4 2014/09/01 06:38:35 gson Exp $
+# $NetBSD: t_ldp_regen.sh,v 1.7 2016/08/10 07:50:37 ozaki-r Exp $
#
# Copyright (c) 2013 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -41,7 +41,8 @@ RUMP_SERVER2=unix://./r2
RUMP_SERVER3=unix://./r3
RUMP_SERVER4=unix://./r4
-RUMP_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netmpls -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif"
+RUMP_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 \
+ -lrumpdev -lrumpnet_netmpls -lrumpnet_shmif"
LDP_FLAGS=""
atf_test_case ldp_regen cleanup
@@ -57,6 +58,8 @@ newaddr_and_ping() {
# Add new address on R4
RUMP_SERVER=${RUMP_SERVER4} atf_check -s exit:0 \
rump.ifconfig shmif1 10.0.5.1/24 alias
+ RUMP_SERVER=${RUMP_SERVER4} atf_check -s exit:0 \
+ rump.ifconfig -w 60
# Now ldpd on R5 should take notice of the new route and announce it
# to R4's ldpd. ldpd on R4 should verify that the next hop
@@ -145,6 +148,8 @@ create_servers() {
wait_ldp_ok() {
RUMP_SERVER=${RUMP_SERVER1} atf_check -s exit:0 -o ignore -e ignore \
+ rump.ifconfig -w 60
+ RUMP_SERVER=${RUMP_SERVER1} atf_check -s exit:0 -o ignore -e ignore \
rump.ping -o -w 60 10.0.4.1
}
@@ -158,7 +163,7 @@ docleanup() {
ldp_regen_body() {
- if sysctl machdep.cpu_brand | grep QEMU >/dev/null 2>&1
+ if sysctl machdep.cpu_brand 2>/dev/null | grep QEMU >/dev/null 2>&1
then
atf_skip "unreliable under qemu, skip until PR kern/43997 fixed"
fi
diff --git a/contrib/netbsd-tests/net/mpls/t_mpls_fw.sh b/contrib/netbsd-tests/net/mpls/t_mpls_fw.sh
index ddd42df..f974b44 100755
--- a/contrib/netbsd-tests/net/mpls/t_mpls_fw.sh
+++ b/contrib/netbsd-tests/net/mpls/t_mpls_fw.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_mpls_fw.sh,v 1.4 2014/03/18 18:20:44 riastradh Exp $
+# $NetBSD: t_mpls_fw.sh,v 1.5 2016/08/10 07:50:37 ozaki-r Exp $
#
# Copyright (c) 2013 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -42,8 +42,8 @@ RUMP_SERVER2=unix://./r2
RUMP_SERVER3=unix://./r3
RUMP_SERVER4=unix://./r4
-RUMP_FLAGS=\
-"-lrumpnet -lrumpnet_net -lrumpnet_netmpls -lrumpnet_netinet -lrumpnet_shmif"
+RUMP_FLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet \
+ -lrumpdev -lrumpnet_netmpls -lrumpnet_shmif"
atf_test_case mplsfw4 cleanup
mplsfw4_head()
diff --git a/contrib/netbsd-tests/net/mpls/t_mpls_fw6.sh b/contrib/netbsd-tests/net/mpls/t_mpls_fw6.sh
new file mode 100755
index 0000000..b9ac6cd
--- /dev/null
+++ b/contrib/netbsd-tests/net/mpls/t_mpls_fw6.sh
@@ -0,0 +1,220 @@
+# $NetBSD: t_mpls_fw6.sh,v 1.3 2016/08/10 07:50:37 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Test MPLS encap/decap and forwarding using INET6 as encapsulated protocol
+# Setup four routers connected like this: R1---R2---R3---R4--
+# Goal is to be able to ping from R1 the outermost interface of R4
+# Disable net.inet6.ip6.forwarding, enable net.mpls.forwarding
+# Add route on R1 in order to encapsulate into MPLS the IP6 packets with
+# destination equal to R4 right hand side interface
+# Add MPLS routes on R2 in order to forward frames belonging to that FEC to R3
+# Add MPLS "POP" route on R3 for that FEC, pointing to R4
+# Do the same for the reverse direction (R4 to R1)
+# ping6 from R1 to R4 right hand side interface
+#
+# redo the test using IPv6 explicit null label
+
+RUMP_SERVER1=unix://./r1
+RUMP_SERVER2=unix://./r2
+RUMP_SERVER3=unix://./r3
+RUMP_SERVER4=unix://./r4
+
+RUMP_FLAGS6="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 \
+ -lrumpdev -lrumpnet_shmif -lrumpnet_netmpls"
+
+atf_test_case mplsfw6 cleanup
+mplsfw6_head()
+{
+
+ atf_set "descr" "IP6/MPLS forwarding test using PHP"
+ atf_set "require.progs" "rump_server"
+}
+
+startservers()
+{
+
+ ulimit -r 300
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER1}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER2}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER3}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER4}
+}
+
+configservers()
+{
+
+ # Setup the first server
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -inet6 fd00:1234:0:3::/64 \
+ -ifa fd00:1234::1 \
+ -ifp mpls0 -tag 25 -inet6 fd00:1234::2
+
+ # Setup the second server
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom2
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:1::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -mpls 25 -tag 30 \
+ -inet6 fd00:1234:0:1::2
+ atf_check -s exit:0 rump.route -q add -mpls 27 -tag ${1} -inet6 \
+ fd00:1234::1
+
+ # Setup the third server
+ export RUMP_SERVER=${RUMP_SERVER3}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom2
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234:0:1::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom3
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:2::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -mpls 30 -tag ${1} \
+ -inet6 fd00:1234:0:2::2
+ atf_check -s exit:0 rump.route -q add -mpls 26 -tag 27 \
+ -inet6 fd00:1234:0:1::1
+
+ # Setup the fourth server
+ export RUMP_SERVER=${RUMP_SERVER4}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom3
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234:0:2::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom4
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:3::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -inet6 fd00:1234::/64 \
+ -ifa fd00:1234:0:2::2 \
+ -ifp mpls0 -tag 26 -inet6 fd00:1234:0:2::1
+
+ unset RUMP_SERVER
+}
+
+doping()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234::2
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:1::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:1::2
+ export RUMP_SERVER=${RUMP_SERVER3}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:2::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:2::2
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:3::1, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:3::1
+ unset RUMP_SERVER
+}
+
+do_check_route()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:"^fd00:1234:0:3::/64.+fd00:1234::2.+25.+mpls0" \
+ rump.netstat -nrT
+ unset RUMP_SERVER
+}
+
+docleanup()
+{
+
+ RUMP_SERVER=${RUMP_SERVER1} rump.halt
+ RUMP_SERVER=${RUMP_SERVER2} rump.halt
+ RUMP_SERVER=${RUMP_SERVER3} rump.halt
+ RUMP_SERVER=${RUMP_SERVER4} rump.halt
+}
+
+mplsfw6_body()
+{
+
+ startservers
+ configservers 3
+ do_check_route
+ doping
+}
+
+mplsfw6_cleanup()
+{
+
+ docleanup
+}
+
+
+atf_test_case mplsfw6_expl cleanup
+mplsfw4_expl_head()
+{
+
+ atf_set "descr" "IP6/MPLS forwarding test using explicit NULL labels"
+ atf_set "require.progs" "rump_server"
+}
+
+mplsfw6_expl_body()
+{
+
+ startservers
+ configservers 2
+ do_check_route
+ doping
+}
+
+mplsfw6_expl_cleanup()
+{
+
+ docleanup
+}
+
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case mplsfw6
+ atf_add_test_case mplsfw6_expl
+}
diff --git a/contrib/netbsd-tests/net/mpls/t_mpls_fw64.sh b/contrib/netbsd-tests/net/mpls/t_mpls_fw64.sh
new file mode 100755
index 0000000..9df3aa7
--- /dev/null
+++ b/contrib/netbsd-tests/net/mpls/t_mpls_fw64.sh
@@ -0,0 +1,226 @@
+# $NetBSD: t_mpls_fw64.sh,v 1.3 2016/08/10 07:50:37 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Test MPLS encap/decap and forwarding using INET6 as encapsulated protocol
+# Setup four routers connected like this: R1---R2---R3---R4--
+# Goal is to be able to ping from R1 the outermost interface of R4
+# Disable net.inet[6].ip[6].forwarding, enable net.mpls.forwarding
+# Use IPv6 between R1-R2-R3 and IPv4 between R3-R4
+# As we use IPv4 on last link we should use only expl.null there
+# because implicit null will assume IPv4 (as the next-hop)
+# But we can use impl null on R2-R1 link because stack will correctly
+# guess IPv6 (from next-hop)
+# Add route on R1 in order to encapsulate into MPLS the IP6 packets with
+# destination equal to R4 right hand side interface
+# Add MPLS routes on R2 in order to forward frames belonging to that FEC to R3
+# Add MPLS expl.null route on R3 for that FEC, pointing to R4
+# Do the same for the reverse direction (R4 to R1)
+# ping6 from R1 to R4 right hand side interface
+
+
+RUMP_SERVER1=unix://./r1
+RUMP_SERVER2=unix://./r2
+RUMP_SERVER3=unix://./r3
+RUMP_SERVER4=unix://./r4
+
+RUMP_FLAGS6="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 \
+ -lrumpdev -lrumpnet_shmif -lrumpnet_netmpls"
+
+startservers()
+{
+
+ ulimit -r 300
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER1}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER2}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER3}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER4}
+}
+
+configservers()
+{
+
+ # Setup the first server
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -inet6 fd00:1234:0:3::/64 \
+ -ifa fd00:1234::1 \
+ -ifp mpls0 -tag 25 -inet6 fd00:1234::2
+
+ # Setup the second server
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom2
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:1::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -mpls 25 -tag 30 \
+ -inet6 fd00:1234:0:1::2
+ atf_check -s exit:0 rump.route -q add -mpls 27 -tag ${1} -inet6 \
+ fd00:1234::1
+
+ # Setup the third server
+ export RUMP_SERVER=${RUMP_SERVER3}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom2
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234:0:1::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom3
+ atf_check -s exit:0 rump.ifconfig shmif1 inet 10.0.3.1/24
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
+ atf_check -s exit:0 rump.route -q add -mpls 30 -tag 2 \
+ -inet 10.0.3.2
+ atf_check -s exit:0 rump.route -q add -mpls 26 -tag 27 \
+ -inet6 fd00:1234:0:1::1
+
+ # Setup the fourth server
+ export RUMP_SERVER=${RUMP_SERVER4}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom3
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.3.2
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom4
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:3::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
+ atf_check -s exit:0 rump.route -q add -inet6 fd00:1234::/64 \
+ -ifa fd00:1234:0:3::1 \
+ -ifp mpls0 -tag 26 -inet 10.0.3.1
+
+ unset RUMP_SERVER
+}
+
+doping()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234::2
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:1::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:1::2
+ export RUMP_SERVER=${RUMP_SERVER3}
+ atf_check -s exit:0 \
+ -o match:" bytes from 10.0.3.2: icmp_seq" \
+ rump.ping -n -o -w 2 10.0.3.2
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:3::1, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:3::1
+ unset RUMP_SERVER
+}
+
+do_check_route()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:"^fd00:1234:0:3::/64.+fd00:1234::2.+25.+mpls0" \
+ rump.netstat -nrT
+ unset RUMP_SERVER
+}
+
+docleanup()
+{
+
+ RUMP_SERVER=${RUMP_SERVER1} rump.halt
+ RUMP_SERVER=${RUMP_SERVER2} rump.halt
+ RUMP_SERVER=${RUMP_SERVER3} rump.halt
+ RUMP_SERVER=${RUMP_SERVER4} rump.halt
+}
+
+atf_test_case mplsfw64_impl cleanup
+mplsfw64_impl_head()
+{
+
+ atf_set "descr" "IP6/MPLS test using impl. NULL labels in mixed env."
+ atf_set "require.progs" "rump_server"
+}
+
+mplsfw64_impl_body()
+{
+
+ startservers
+ configservers 3
+ do_check_route
+ doping
+}
+
+mplsfw64_impl_cleanup()
+{
+
+ docleanup
+}
+
+
+atf_test_case mplsfw64_expl cleanup
+mplsfw64_expl_head()
+{
+
+ atf_set "descr" "IP6/MPLS test using explicit NULL labels in mixed env."
+ atf_set "require.progs" "rump_server"
+}
+
+mplsfw64_expl_body()
+{
+
+ startservers
+ configservers 2
+ do_check_route
+ doping
+}
+
+mplsfw64_expl_cleanup()
+{
+
+ docleanup
+}
+
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case mplsfw64_impl
+ atf_add_test_case mplsfw64_expl
+}
diff --git a/contrib/netbsd-tests/net/mpls/t_rfc4182.sh b/contrib/netbsd-tests/net/mpls/t_rfc4182.sh
index 8c166f9..558f7fd 100755
--- a/contrib/netbsd-tests/net/mpls/t_rfc4182.sh
+++ b/contrib/netbsd-tests/net/mpls/t_rfc4182.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_rfc4182.sh,v 1.3 2014/03/18 18:20:44 riastradh Exp $
+# $NetBSD: t_rfc4182.sh,v 1.4 2016/08/10 07:50:37 ozaki-r Exp $
#
# Copyright (c) 2013 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -44,8 +44,8 @@ RUMP_SERVER2=unix://./r2
RUMP_SERVER3=unix://./r3
RUMP_SERVER4=unix://./r4
-RUMP_FLAGS=\
-"-lrumpnet -lrumpnet_net -lrumpnet_netmpls -lrumpnet_netinet -lrumpnet_shmif"
+RUMP_FLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet \
+ -lrumpdev -lrumpnet_netmpls -lrumpnet_shmif"
atf_test_case rfc4182 cleanup
rfc4182_head()
diff --git a/contrib/netbsd-tests/net/ndp/t_dad.sh b/contrib/netbsd-tests/net/ndp/t_dad.sh
new file mode 100755
index 0000000..50ec933
--- /dev/null
+++ b/contrib/netbsd-tests/net/ndp/t_dad.sh
@@ -0,0 +1,276 @@
+# $NetBSD: t_dad.sh,v 1.12 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKLOCAL=unix://commsock1
+SOCKPEER=unix://commsock2
+
+DEBUG=${DEBUG:-false}
+
+duplicated="[Dd][Uu][Pp][Ll][Ii][Cc][Aa][Tt][Ee][Dd]"
+
+atf_test_case dad_basic cleanup
+atf_test_case dad_duplicated cleanup
+atf_test_case dad_count cleanup
+
+dad_basic_head()
+{
+ atf_set "descr" "Tests for IPv6 DAD basic behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+dad_duplicated_head()
+{
+ atf_set "descr" "Tests for IPv6 DAD duplicated state"
+ atf_set "require.progs" "rump_server"
+}
+
+dad_count_head()
+{
+ atf_set "descr" "Tests for IPv6 DAD count behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_server()
+{
+ local sock=$1
+ local ip=$2
+
+ rump_server_add_iface $sock shmif0 bus1
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+}
+
+make_ns_pkt_str()
+{
+ local id=$1
+ local target=$2
+ pkt="33:33:ff:00:00:0${id}, ethertype IPv6 (0x86dd), length 78: ::"
+ pkt="$pkt > ff02::1:ff00:${id}: ICMP6, neighbor solicitation,"
+ pkt="$pkt who has $target, length 24"
+ echo $pkt
+}
+
+dad_basic_body()
+{
+ local pkt=
+ local localip1=fc00::1
+ local localip2=fc00::2
+ local localip3=fc00::3
+
+ rump_server_start $SOCKLOCAL netinet6
+ rump_server_add_iface $SOCKLOCAL shmif0 bus1
+
+ export RUMP_SERVER=$SOCKLOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip2
+ $DEBUG && rump.ifconfig shmif0
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ rump.ifconfig shmif0 > ./out
+ $DEBUG && cat ./out
+
+ # The primary address doesn't start with tentative state
+ atf_check -s not-exit:0 -x "cat ./out |grep $localip1 |grep -q tentative"
+ # The alias address starts with tentative state
+ # XXX we have no stable way to check this, so skip for now
+ #atf_check -s exit:0 -x "cat ./out |grep $localip2 |grep -q tentative"
+
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # Check DAD probe packets (Neighbor Solicitation Message)
+ pkt=$(make_ns_pkt_str 2 $localip2)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # No DAD for the primary address
+ pkt=$(make_ns_pkt_str 1 $localip1)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 10
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # IPv6 DAD doesn't announce (Neighbor Advertisement Message)
+
+ # The alias address left tentative
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip2 |grep -q tentative"
+
+ #
+ # Add a new address on the fly
+ #
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip3
+
+ # The new address starts with tentative state
+ # XXX we have no stable way to check this, so skip for now
+ #atf_check -s exit:0 -x "rump.ifconfig shmif0 |grep $localip3 |grep -q tentative"
+
+ # Check DAD probe packets (Neighbor Solicitation Message)
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+ pkt=$(make_ns_pkt_str 3 $localip3)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 10
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # IPv6 DAD doesn't announce (Neighbor Advertisement Message)
+
+ # The new address left tentative
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip3 |grep -q tentative"
+
+ rump_server_destroy_ifaces
+}
+
+dad_duplicated_body()
+{
+ local localip1=fc00::1
+ local localip2=fc00::11
+ local peerip=fc00::2
+
+ rump_server_start $SOCKLOCAL netinet6
+ rump_server_start $SOCKPEER netinet6
+
+ setup_server $SOCKLOCAL $localip1
+ setup_server $SOCKPEER $peerip
+
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # The primary address isn't marked as duplicated
+ atf_check -s exit:0 -o not-match:"$localip1.+$duplicated" \
+ rump.ifconfig shmif0
+
+ #
+ # Add a new address duplicated with the peer server
+ #
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $peerip
+ atf_check -s exit:0 sleep 1
+
+ # The new address is marked as duplicated
+ atf_check -s exit:0 -o match:"$peerip.+$duplicated" \
+ rump.ifconfig shmif0
+
+ # A unique address isn't marked as duplicated
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip2
+ atf_check -s exit:0 sleep 1
+ atf_check -s exit:0 -o not-match:"$localip2.+$duplicated" \
+ rump.ifconfig shmif0
+
+ rump_server_destroy_ifaces
+}
+
+dad_count_test()
+{
+ local pkt=
+ local count=$1
+ local id=$2
+ local target=$3
+
+ #
+ # Set DAD count to $count
+ #
+ atf_check -s exit:0 rump.sysctl -w -q net.inet6.ip6.dad_count=$count
+
+ # Add a new address
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $target
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 20
+
+ # Check the number of DAD probe packets (Neighbor Solicitation Message)
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+ pkt=$(make_ns_pkt_str $id $target)
+ atf_check -s exit:0 -o match:"$count" \
+ -x "cat ./out |grep '$pkt' | wc -l | tr -d ' '"
+}
+
+dad_count_body()
+{
+ local localip1=fc00::1
+ local localip2=fc00::2
+
+ rump_server_start $SOCKLOCAL netinet6
+ rump_server_add_iface $SOCKLOCAL shmif0 bus1
+
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # Check default value
+ atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet6.ip6.dad_count
+
+ # Setup interface
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 sleep 2
+ rump.ifconfig shmif0 > ./out
+ $DEBUG && cat ./out
+
+ #
+ # Set and test DAD count (count=1)
+ #
+ dad_count_test 1 1 $localip1
+
+ #
+ # Set and test DAD count (count=8)
+ #
+ dad_count_test 8 2 $localip2
+
+ rump_server_destroy_ifaces
+}
+
+dad_basic_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+dad_duplicated_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+dad_count_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case dad_basic
+ atf_add_test_case dad_duplicated
+ atf_add_test_case dad_count
+}
diff --git a/contrib/netbsd-tests/net/ndp/t_ndp.sh b/contrib/netbsd-tests/net/ndp/t_ndp.sh
new file mode 100755
index 0000000..aa96390
--- /dev/null
+++ b/contrib/netbsd-tests/net/ndp/t_ndp.sh
@@ -0,0 +1,406 @@
+# $NetBSD: t_ndp.sh,v 1.17 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKSRC=unix://commsock1
+SOCKDST=unix://commsock2
+IP6SRC=fc00::1
+IP6DST=fc00::2
+
+DEBUG=${DEBUG:-true}
+TIMEOUT=1
+
+atf_test_case ndp_cache_expiration cleanup
+atf_test_case ndp_commands cleanup
+atf_test_case ndp_cache_overwriting cleanup
+atf_test_case ndp_neighborgcthresh cleanup
+atf_test_case ndp_link_activation cleanup
+
+ndp_cache_expiration_head()
+{
+ atf_set "descr" "Tests for NDP cache expiration"
+ atf_set "require.progs" "rump_server"
+}
+
+ndp_commands_head()
+{
+ atf_set "descr" "Tests for commands of ndp(8)"
+ atf_set "require.progs" "rump_server"
+}
+
+ndp_cache_overwriting_head()
+{
+ atf_set "descr" "Tests for behavior of overwriting NDP caches"
+ atf_set "require.progs" "rump_server"
+}
+
+ndp_neighborgcthresh_head()
+{
+ atf_set "descr" "Tests for GC of neighbor caches"
+ atf_set "require.progs" "rump_server"
+}
+
+ndp_link_activation_head()
+{
+ atf_set "descr" "Tests for activating a new MAC address"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_dst_server()
+{
+ local assign_ip=$1
+
+ rump_server_add_iface $SOCKDST shmif0 bus1
+ export RUMP_SERVER=$SOCKDST
+ if [ "$assign_ip" != no ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6DST
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && rump.ndp -n -a
+}
+
+setup_src_server()
+{
+ $DEBUG && ulimit -c unlimited
+ export RUMP_SERVER=$SOCKSRC
+
+ # Setup an interface
+ rump_server_add_iface $SOCKSRC shmif0 bus1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Sanity check
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o ignore rump.ndp -n $IP6SRC
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST
+}
+
+get_timeout()
+{
+ local timeout=$(env RUMP_SERVER=$SOCKSRC rump.ndp -n $IP6DST |grep $IP6DST|awk '{print $4;}')
+ timeout=${timeout%s}
+ echo $timeout
+}
+
+ndp_cache_expiration_body()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server
+ setup_src_server
+
+ #
+ # Check if a cache is expired expectedly
+ #
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
+
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
+ # Should be cached
+ atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST
+
+ timeout=$(get_timeout $IP6DST)
+
+ atf_check -s exit:0 sleep $(($timeout + 1))
+
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
+ # Expired but remains until GC sweaps it (1 day)
+ atf_check -s exit:0 -o match:'(1d0h0m|23h59m)' rump.ndp -n $IP6DST
+
+ rump_server_destroy_ifaces
+}
+
+ifdown_dst_server()
+{
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ export RUMP_SERVER=$SOCKSRC
+}
+
+ndp_commands_body()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server
+ setup_src_server
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # We can delete the entry for the interface's IP address
+ atf_check -s exit:0 -o match:"$IP6SRC" rump.ndp -d $IP6SRC
+
+ # Add and delete a static entry
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::10
+ atf_check -s exit:0 -o match:'deleted' rump.ndp -d fc00::10
+ $DEBUG && rump.ndp -n -a
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n fc00::10
+
+ # Add multiple entries via a file (XXX not implemented)
+ #cat - > ./list <<-EOF
+ #fc00::11 b2:a0:20:00:00:11
+ #fc00::12 b2:a0:20:00:00:12
+ #fc00::13 b2:a0:20:00:00:13
+ #fc00::14 b2:a0:20:00:00:14
+ #fc00::15 b2:a0:20:00:00:15
+ #EOF
+ #$DEBUG && rump.ndp -n -a
+ #atf_check -s exit:0 -o ignore rump.ndp -f ./list
+ #$DEBUG && rump.ndp -n -a
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
+ atf_check -s exit:0 -o ignore rump.ndp -s fc00::11 b2:a0:20:00:00:11
+ atf_check -s exit:0 -o ignore rump.ndp -s fc00::12 b2:a0:20:00:00:12
+
+ atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::11
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::12
+
+ # Test ndp -a
+ atf_check -s exit:0 -o match:'fc00::11' rump.ndp -n -a
+ atf_check -s exit:0 -o match:'fc00::12' rump.ndp -n -a
+
+ # Ensure no packet upsets the src server
+ ifdown_dst_server
+
+ # Flush all entries (-c)
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o ignore rump.ndp -c
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6SRC
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST
+ # Only the static caches are not deleted
+ atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::11
+ atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::12
+
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
+ rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10
+
+ rump_server_destroy_ifaces
+}
+
+ndp_cache_overwriting_body()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server
+ setup_src_server
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # Cannot overwrite a permanent cache
+ atf_check -s not-exit:0 -e ignore rump.ndp -s $IP6SRC b2:a0:20:00:00:ff
+ $DEBUG && rump.ndp -n -a
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
+ $DEBUG && rump.ndp -n -a
+ # Can overwrite a dynamic cache
+ atf_check -s exit:0 -o ignore rump.ndp -s $IP6DST b2:a0:20:00:00:00
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6DST
+
+ # Test temp option (XXX it doesn't work; expire time isn't set)
+ #atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
+ #$DEBUG && rump.ndp -n -a
+ #atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10
+ # Cannot overwrite a temp cache
+ #atf_check -s not-exit:0 -e ignore rump.ndp -s fc00::10 b2:a0:20:00:00:ff
+ #$DEBUG && rump.ndp -n -a
+
+ rump_server_destroy_ifaces
+}
+
+get_n_caches()
+{
+
+ echo $(rump.ndp -a -n |grep -v -e Neighbor -e permanent |wc -l)
+}
+
+ndp_neighborgcthresh_body()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server no
+ setup_src_server
+
+ export RUMP_SERVER=$SOCKDST
+ for i in $(seq 0 9); do
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6DST}$i
+ done
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # ping to 3 destinations
+ $DEBUG && rump.ndp -n -a
+ for i in $(seq 0 2); do
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
+ ${IP6DST}$i
+ done
+ $DEBUG && rump.ndp -n -a
+
+ # 3 caches should be created
+ atf_check_equal $(get_n_caches) 3
+
+ # ping to additional 3 destinations
+ for i in $(seq 3 5); do
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
+ ${IP6DST}$i
+ done
+ $DEBUG && rump.ndp -n -a
+
+ # 6 caches should be created in total
+ atf_check_equal $(get_n_caches) 6
+
+ # Limit the number of neighbor caches to 5
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet6.ip6.neighborgcthresh=5
+
+ # ping to additional 4 destinations
+ for i in $(seq 6 9); do
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
+ ${IP6DST}$i
+ done
+
+ # More than 5 caches should be created in total, but exceeded caches
+ # should be GC-ed
+ if [ "$(get_n_caches)" -gt 5 ]; then
+ atf_fail "Neighbor caches are not GC-ed"
+ fi
+
+ rump_server_destroy_ifaces
+}
+
+make_pkt_str_na()
+{
+ local ip=$1
+ local mac=$2
+ local pkt=
+ pkt="$mac > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 86:"
+ pkt="$pkt $ip > ff02::1: ICMP6, neighbor advertisement"
+ echo $pkt
+}
+
+ndp_link_activation_body()
+{
+ local linklocal=
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server
+ setup_src_server
+
+ # flush old packets
+ extract_new_packets bus1 > ./out
+
+ export RUMP_SERVER=$SOCKSRC
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
+ b2:a1:00:00:00:01
+
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}')
+ $DEBUG && echo $linklocal
+
+ pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:01)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
+ b2:a1:00:00:00:02 active
+
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}')
+ $DEBUG && echo $linklocal
+
+ pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:02)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ rump_server_destroy_ifaces
+}
+
+ndp_cache_expiration_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ndp_commands_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ndp_cache_overwriting_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ndp_neighborgcthresh_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ndp_link_activation_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case ndp_cache_expiration
+ atf_add_test_case ndp_commands
+ atf_add_test_case ndp_cache_overwriting
+ atf_add_test_case ndp_neighborgcthresh
+ atf_add_test_case ndp_link_activation
+}
diff --git a/contrib/netbsd-tests/net/ndp/t_ra.sh b/contrib/netbsd-tests/net/ndp/t_ra.sh
new file mode 100755
index 0000000..b234570
--- /dev/null
+++ b/contrib/netbsd-tests/net/ndp/t_ra.sh
@@ -0,0 +1,687 @@
+# $NetBSD: t_ra.sh,v 1.20 2017/01/11 03:15:44 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+RUMPSRV=unix://r1
+RUMPSRV1_2=unix://r12
+RUMPCLI=unix://r2
+RUMPSRV3=unix://r3
+RUMPSRV4=unix://r4
+IP6SRV=fc00:1::1
+IP6SRV1_2=fc00:1::2
+IP6SRV_PREFIX=fc00:1:
+IP6CLI=fc00:2::2
+IP6SRV3=fc00:3::1
+IP6SRV3_PREFIX=fc00:3:
+IP6SRV4=fc00:4::1
+IP6SRV4_PREFIX=fc00:4:
+PIDFILE=./rump.rtadvd.pid
+PIDFILE1_2=./rump.rtadvd.pid12
+PIDFILE3=./rump.rtadvd.pid3
+PIDFILE4=./rump.rtadvd.pid4
+CONFIG=./rtadvd.conf
+WAITTIME=2
+DEBUG=${DEBUG:-true}
+
+init_server()
+{
+
+ export RUMP_SERVER=$1
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd
+ unset LD_PRELOAD
+ unset RUMP_SERVER
+}
+
+setup_shmif0()
+{
+ local sock=$1
+ local IP6ADDR=$2
+
+ rump_server_add_iface $sock shmif0 bus1
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+}
+
+wait_term()
+{
+ local PIDFILE=${1}
+ shift
+
+ while [ -f ${PIDFILE} ]
+ do
+ sleep 0.2
+ done
+
+ return 0
+}
+
+create_rtadvdconfig()
+{
+
+ cat << _EOF > ${CONFIG}
+shmif0:\
+ :mtu#1300:maxinterval#4:mininterval#3:
+_EOF
+}
+
+start_rtadvd()
+{
+ local sock=$1
+ local pidfile=$2
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.rtadvd -c ${CONFIG} -p $pidfile shmif0
+ while [ ! -f $pidfile ]; do
+ sleep 0.2
+ done
+ unset RUMP_SERVER
+}
+
+check_entries()
+{
+ local cli=$1
+ local srv=$2
+ local addr_prefix=$3
+ local mac_srv= ll_srv=
+
+ ll_srv=$(get_linklocal_addr $srv shmif0)
+ mac_srv=$(get_macaddr $srv shmif0)
+
+ export RUMP_SERVER=$cli
+ $DEBUG && dump_entries
+ atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r
+ atf_check -s exit:0 -o match:'advertised' rump.ndp -p
+ atf_check -s exit:0 -o match:"${ll_srv}%shmif0 \(reachable\)" rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
+ atf_check -s exit:0 \
+ -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +(23h59m|1d0h0m)..s S R" \
+ rump.ndp -n -a
+ atf_check -s exit:0 -o match:$addr_prefix rump.ndp -n -a
+ atf_check -s exit:0 -o match:"$addr_prefix.+<AUTOCONF>" \
+ rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+}
+
+dump_entries()
+{
+
+ echo ndp -n -a
+ rump.ndp -n -a
+ echo ndp -p
+ rump.ndp -p
+ echo ndp -r
+ rump.ndp -r
+}
+
+atf_test_case ra_basic cleanup
+ra_basic_head()
+{
+
+ atf_set "descr" "Tests for basic functions of router advaertisement(RA)"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_basic_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ init_server $RUMPSRV
+
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+ export RUMP_SERVER=${RUMPCLI}
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv
+ unset RUMP_SERVER
+
+ create_rtadvdconfig
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o empty rump.ndp -r
+ atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0
+ atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ rump_server_destroy_ifaces
+}
+
+ra_basic_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_flush_prefix_entries cleanup
+ra_flush_prefix_entries_head()
+{
+
+ atf_set "descr" "Tests for flushing prefixes (ndp -P)"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_flush_prefix_entries_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ export RUMP_SERVER=${RUMPCLI}
+
+ # Terminate rtadvd to prevent new RA messages from coming
+ # Note that ifconfig down; kill -TERM doesn't work
+ kill -KILL `cat ${PIDFILE}`
+
+ # Flush all the entries in the prefix list
+ atf_check -s exit:0 rump.ndp -P
+
+ $DEBUG && dump_entries
+ atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r
+ atf_check -s exit:0 -o empty rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
+ atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a
+ atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ rump_server_destroy_ifaces
+}
+
+ra_flush_prefix_entries_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_flush_defrouter_entries cleanup
+ra_flush_defrouter_entries_head()
+{
+
+ atf_set "descr" "Tests for flushing default routers (ndp -R)"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_flush_defrouter_entries_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ export RUMP_SERVER=${RUMPCLI}
+
+ # Terminate rtadvd to prevent new RA messages from coming
+ # Note that ifconfig down; kill -TERM doesn't work
+ kill -KILL `cat ${PIDFILE}`
+
+ # Flush all the entries in the default router list
+ atf_check -s exit:0 rump.ndp -R
+
+ $DEBUG && dump_entries
+ atf_check -s exit:0 -o empty rump.ndp -r
+ atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
+ atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a
+ atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
+ atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ rump_server_destroy_ifaces
+}
+
+ra_flush_defrouter_entries_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_delete_address cleanup
+ra_delete_address_head()
+{
+
+ atf_set "descr" "Tests for deleting auto-configured address"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_delete_address_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ export RUMP_SERVER=${RUMPCLI}
+ $DEBUG && rump.ifconfig shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 \
+ $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ rump_server_destroy_ifaces
+}
+
+ra_delete_address_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_multiple_routers cleanup
+ra_multiple_routers_head()
+{
+
+ atf_set "descr" "Tests for multiple routers"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_multiple_routers_body()
+{
+ local n=
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_fs_start $RUMPSRV3 netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPSRV3} ${IP6SRV3}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+ init_server $RUMPSRV3
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ start_rtadvd $RUMPSRV3 $PIDFILE3
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+ check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX
+
+ export RUMP_SERVER=$RUMPCLI
+ # Two prefixes are advertised by differnt two routers
+ n=$(rump.ndp -p |grep 'advertised by' |wc -l)
+ atf_check_equal $n 2
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}`
+ wait_term ${PIDFILE3}
+
+ rump_server_destroy_ifaces
+}
+
+ra_multiple_routers_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+ if [ -f ${PIDFILE3} ]; then
+ kill -TERM `cat ${PIDFILE3}`
+ wait_term ${PIDFILE3}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_multiple_routers_single_prefix cleanup
+ra_multiple_routers_single_prefix_head()
+{
+
+ atf_set "descr" "Tests for multiple routers with a single prefix"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_multiple_routers_single_prefix_body()
+{
+ local n=
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_fs_start $RUMPSRV1_2 netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPSRV1_2} ${IP6SRV1_2}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+ init_server $RUMPSRV1_2
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ start_rtadvd $RUMPSRV1_2 $PIDFILE1_2
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+ check_entries $RUMPCLI $RUMPSRV1_2 $IP6SRV_PREFIX
+
+ export RUMP_SERVER=$RUMPCLI
+ # One prefix is advertised by differnt two routers
+ n=$(rump.ndp -p |grep 'advertised by' |wc -l)
+ atf_check_equal $n 1
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE1_2}`
+ wait_term ${PIDFILE1_2}
+
+ rump_server_destroy_ifaces
+}
+
+ra_multiple_routers_single_prefix_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+ if [ -f ${PIDFILE1_2} ]; then
+ kill -TERM `cat ${PIDFILE1_2}`
+ wait_term ${PIDFILE1_2}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_multiple_routers_maxifprefixes cleanup
+ra_multiple_routers_maxifprefixes_head()
+{
+
+ atf_set "descr" "Tests for exceeding the number of maximum prefixes"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_multiple_routers_maxifprefixes_body()
+{
+ local n=
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_fs_start $RUMPSRV3 netinet6
+ rump_server_fs_start $RUMPSRV4 netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPSRV3} ${IP6SRV3}
+ setup_shmif0 ${RUMPSRV4} ${IP6SRV4}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+ init_server $RUMPSRV3
+ init_server $RUMPSRV4
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' \
+ rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ # Limit the maximum number of prefix entries to 2
+ atf_check -s exit:0 -o match:'16.->.2' \
+ rump.sysctl -w net.inet6.ip6.maxifprefixes=2
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ start_rtadvd $RUMPSRV3 $PIDFILE3
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+ check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX
+
+ start_rtadvd $RUMPSRV4 $PIDFILE4
+ sleep $WAITTIME
+
+ export RUMP_SERVER=${RUMPCLI}
+ $DEBUG && dump_entries
+ # There should remain two prefixes
+ n=$(rump.ndp -p |grep 'advertised by' |wc -l)
+ atf_check_equal $n 2
+ # TODO check other conditions
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}`
+ wait_term ${PIDFILE3}
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE4}`
+ wait_term ${PIDFILE4}
+
+ rump_server_destroy_ifaces
+}
+
+ra_multiple_routers_maxifprefixes_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+ if [ -f ${PIDFILE3} ]; then
+ kill -TERM `cat ${PIDFILE3}`
+ wait_term ${PIDFILE3}
+ fi
+ if [ -f ${PIDFILE4} ]; then
+ kill -TERM `cat ${PIDFILE4}`
+ wait_term ${PIDFILE4}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_temporary_address cleanup
+ra_temporary_address_head()
+{
+
+ atf_set "descr" "Tests for IPv6 temporary address"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_temporary_address_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ init_server $RUMPSRV
+
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+ export RUMP_SERVER=${RUMPCLI}
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'= 0' \
+ rump.sysctl net.inet6.ip6.accept_rtadv
+ atf_check -s exit:0 -o match:'= 0' \
+ rump.sysctl net.inet6.ip6.use_tempaddr
+ unset RUMP_SERVER
+
+ create_rtadvdconfig
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o empty rump.ndp -r
+ atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0
+ atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' \
+ rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ atf_check -s exit:0 -o match:'0.->.1' \
+ rump.sysctl -w net.inet6.ip6.use_tempaddr=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ # Check temporary address
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:"$IP6SRV_PREFIX.+<AUTOCONF,TEMPORARY>" \
+ rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ rump_server_destroy_ifaces
+}
+
+ra_temporary_address_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case ra_basic
+ atf_add_test_case ra_flush_prefix_entries
+ atf_add_test_case ra_flush_defrouter_entries
+ atf_add_test_case ra_delete_address
+ atf_add_test_case ra_multiple_routers
+ atf_add_test_case ra_multiple_routers_single_prefix
+ atf_add_test_case ra_multiple_routers_maxifprefixes
+ atf_add_test_case ra_temporary_address
+}
diff --git a/contrib/netbsd-tests/net/net/t_forwarding.sh b/contrib/netbsd-tests/net/net/t_forwarding.sh
new file mode 100755
index 0000000..fc30530
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_forwarding.sh
@@ -0,0 +1,530 @@
+# $NetBSD: t_forwarding.sh,v 1.19 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKSRC=unix://commsock1
+SOCKFWD=unix://commsock2
+SOCKDST=unix://commsock3
+IP4SRC=10.0.1.2
+IP4SRCGW=10.0.1.1
+IP4DSTGW=10.0.2.1
+IP4DST=10.0.2.2
+IP4DST_BCAST=10.0.2.255
+IP6SRC=fc00:0:0:1::2
+IP6SRCGW=fc00:0:0:1::1
+IP6DSTGW=fc00:0:0:2::1
+IP6DST=fc00:0:0:2::2
+HTML_FILE=index.html
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=5
+
+atf_test_case ipforwarding_v4 cleanup
+atf_test_case ipforwarding_v6 cleanup
+atf_test_case ipforwarding_fastforward_v4 cleanup
+atf_test_case ipforwarding_fastforward_v6 cleanup
+atf_test_case ipforwarding_misc cleanup
+
+ipforwarding_v4_head()
+{
+ atf_set "descr" "Does IPv4 forwarding tests"
+ atf_set "require.progs" "rump_server"
+}
+
+ipforwarding_v6_head()
+{
+ atf_set "descr" "Does IPv6 forwarding tests"
+ atf_set "require.progs" "rump_server"
+}
+
+ipforwarding_fastforward_v4_head()
+{
+ atf_set "descr" "Tests for IPv4 fastforward"
+ atf_set "require.progs" "rump_server"
+}
+
+ipforwarding_fastforward_v6_head()
+{
+ atf_set "descr" "Tests for IPv6 fastfoward"
+ atf_set "require.progs" "rump_server"
+}
+
+ipforwarding_misc_head()
+{
+ atf_set "descr" "Does IPv4 forwarding tests"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_endpoint()
+{
+ sock=${1}
+ addr=${2}
+ bus=${3}
+ mode=${4}
+ gw=${5}
+
+ rump_server_add_iface $sock shmif0 $bus
+
+ export RUMP_SERVER=${sock}
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
+ atf_check -s exit:0 -o ignore rump.route add default ${gw}
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ if $DEBUG; then
+ rump.ifconfig shmif0
+ rump.netstat -nr
+ fi
+}
+
+test_endpoint()
+{
+ sock=${1}
+ addr=${2}
+ bus=${3}
+ mode=${4}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 -o match:shmif0 rump.ifconfig
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
+ else
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
+ fi
+}
+
+setup_forwarder()
+{
+ mode=${1}
+
+ rump_server_add_iface $SOCKFWD shmif0 bus1
+ rump_server_add_iface $SOCKFWD shmif1 bus2
+
+ export RUMP_SERVER=$SOCKFWD
+
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${IP4SRCGW} netmask 0xffffff00
+ atf_check -s exit:0 rump.ifconfig shmif1 inet ${IP4DSTGW} netmask 0xffffff00
+ fi
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+
+ if $DEBUG; then
+ rump.netstat -nr
+ if [ $mode = "ipv6" ]; then
+ rump.sysctl net.inet6.ip6.forwarding
+ else
+ rump.sysctl net.inet.ip.forwarding
+ fi
+ fi
+}
+
+setup()
+{
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKFWD
+ rump_server_start $SOCKDST
+
+ setup_endpoint $SOCKSRC $IP4SRC bus1 ipv4 $IP4SRCGW
+ setup_endpoint $SOCKDST $IP4DST bus2 ipv4 $IP4DSTGW
+ setup_forwarder ipv4
+}
+
+setup6()
+{
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKFWD netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_endpoint $SOCKSRC $IP6SRC bus1 ipv6 $IP6SRCGW
+ setup_endpoint $SOCKDST $IP6DST bus2 ipv6 $IP6DSTGW
+ setup_forwarder ipv6
+}
+
+test_http_get()
+{
+ local ip=$1
+
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 rump.arp -d -a
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # get the webpage
+ atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $TIMEOUT -o out http://$ip/$HTML_FILE
+}
+
+test_setup()
+{
+ test_endpoint $SOCKSRC $IP4SRC bus1 ipv4
+ test_endpoint $SOCKDST $IP4DST bus2 ipv4
+
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:shmif0 rump.ifconfig
+ atf_check -s exit:0 -o match:shmif1 rump.ifconfig
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${IP4SRCGW}
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${IP4DSTGW}
+}
+
+test_setup6()
+{
+ test_endpoint $SOCKSRC $IP6SRC bus1 ipv6
+ test_endpoint $SOCKDST $IP6DST bus2 ipv6
+
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:shmif0 rump.ifconfig
+ atf_check -s exit:0 -o match:shmif1 rump.ifconfig
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${IP6SRCGW}
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${IP6DSTGW}
+}
+
+setup_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1
+}
+
+setup_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1
+}
+
+setup_directed_broadcast()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.directed-broadcast=1
+}
+
+setup_icmp_bmcastecho()
+{
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.icmp.bmcastecho=1
+}
+
+teardown_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=0
+}
+
+teardown_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=0
+}
+
+teardown_directed_broadcast()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.directed-broadcast=0
+}
+
+teardown_icmp_bmcastecho()
+{
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.icmp.bmcastecho=0
+}
+
+teardown_interfaces()
+{
+
+ rump_server_destroy_ifaces
+}
+
+test_setup_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:"net.inet.ip.forwarding = 1" \
+ rump.sysctl net.inet.ip.forwarding
+}
+test_setup_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:"net.inet6.ip6.forwarding = 1" \
+ rump.sysctl net.inet6.ip6.forwarding
+}
+
+test_teardown_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:"net.inet.ip.forwarding = 0" \
+ rump.sysctl net.inet.ip.forwarding
+}
+test_teardown_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:"net.inet6.ip6.forwarding = 0" \
+ rump.sysctl net.inet6.ip6.forwarding
+}
+
+test_ping_failure()
+{
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DST
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRC
+}
+
+test_ping_success()
+{
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRCGW
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DST
+ $DEBUG && rump.ifconfig -v shmif0
+
+ export RUMP_SERVER=$SOCKDST
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DSTGW
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRC
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+test_ping_ttl()
+{
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 -T 1 $IP4SRCGW
+ atf_check -s not-exit:0 -o match:'Time To Live exceeded' \
+ rump.ping -v -n -w $TIMEOUT -c 1 -T 1 $IP4DST
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 -T 2 $IP4DST
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+test_sysctl_ttl()
+{
+ local ip=$1
+
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.ttl=1
+ # get the webpage
+ atf_check -s not-exit:0 -e match:'timed out' \
+ env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $TIMEOUT -o out http://$ip/$HTML_FILE
+
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.ttl=2
+ # get the webpage
+ atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $TIMEOUT -o out http://$ip/$HTML_FILE
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.ttl=64
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+test_directed_broadcast()
+{
+ setup_icmp_bmcastecho
+
+ setup_directed_broadcast
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DST_BCAST
+
+ teardown_directed_broadcast
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DST_BCAST
+
+ teardown_icmp_bmcastecho
+}
+
+test_ping6_failure()
+{
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6DST
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6SRC
+}
+
+test_ping6_success()
+{
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6SRCGW
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6DST
+ $DEBUG && rump.ifconfig -v shmif0
+
+ export RUMP_SERVER=$SOCKDST
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6DSTGW
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6SRC
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+test_hoplimit()
+{
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -h 1 -X $TIMEOUT $IP6SRCGW
+ atf_check -s not-exit:0 -o match:'Time to live exceeded' \
+ rump.ping6 -v -n -c 1 -h 1 -X $TIMEOUT $IP6DST
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -h 2 -X $TIMEOUT $IP6DST
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+ipforwarding_v4_body()
+{
+ setup
+ test_setup
+
+ setup_forwarding
+ test_setup_forwarding
+ test_ping_success
+
+ teardown_forwarding
+ test_teardown_forwarding
+ test_ping_failure
+
+ teardown_interfaces
+}
+
+ipforwarding_v6_body()
+{
+ setup6
+ test_setup6
+
+ setup_forwarding6
+ test_setup_forwarding6
+ test_ping6_success
+ test_hoplimit
+
+ teardown_forwarding6
+ test_teardown_forwarding6
+ test_ping6_failure
+
+ teardown_interfaces
+}
+
+ipforwarding_fastforward_v4_body()
+{
+ setup
+ test_setup
+
+ setup_forwarding
+ test_setup_forwarding
+
+ touch $HTML_FILE
+ start_httpd $SOCKDST $IP4DST
+ $DEBUG && rump.netstat -a
+
+ test_http_get $IP4DST
+
+ teardown_interfaces
+}
+
+ipforwarding_fastforward_v6_body()
+{
+ setup6
+ test_setup6
+
+ setup_forwarding6
+ test_setup_forwarding6
+
+ touch $HTML_FILE
+ start_httpd $SOCKDST $IP6DST
+ $DEBUG && rump.netstat -a
+
+ test_http_get "[$IP6DST]"
+
+ teardown_interfaces
+}
+
+ipforwarding_misc_body()
+{
+ setup
+ test_setup
+
+ setup_forwarding
+ test_setup_forwarding
+
+ test_ping_ttl
+
+ test_directed_broadcast
+
+ touch $HTML_FILE
+ start_httpd $SOCKDST $IP4DST
+ $DEBUG && rump.netstat -a
+
+ test_sysctl_ttl $IP4DST
+
+ teardown_interfaces
+ return 0
+}
+
+ipforwarding_v4_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ipforwarding_v6_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ipforwarding_fastforward_v4_cleanup()
+{
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+ipforwarding_fastforward_v6_cleanup()
+{
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+ipforwarding_misc_cleanup()
+{
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case ipforwarding_v4
+ atf_add_test_case ipforwarding_v6
+ atf_add_test_case ipforwarding_fastforward_v4
+ atf_add_test_case ipforwarding_fastforward_v6
+ atf_add_test_case ipforwarding_misc
+}
diff --git a/contrib/netbsd-tests/net/net/t_ipaddress.sh b/contrib/netbsd-tests/net/net/t_ipaddress.sh
new file mode 100755
index 0000000..4cdd954
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_ipaddress.sh
@@ -0,0 +1,193 @@
+# $NetBSD: t_ipaddress.sh,v 1.9 2016/12/15 02:43:56 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+BUS=bus
+
+DEBUG=${DEBUG:-false}
+
+test_same_address()
+{
+ local ip=10.0.0.1
+ local net=10.0.0/24
+
+ rump_server_start $SOCK_LOCAL
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ check_route $ip 'link#2' UHl lo0
+ check_route $net 'link#2' UC shmif0
+
+ # Delete the address
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip delete
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ check_route_no_entry $ip
+ check_route_no_entry $net
+
+ # Assign the same address again
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip/24
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ check_route $ip 'link#2' UHl lo0
+ check_route $net 'link#2' UC shmif0
+
+ # Delete the address again
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip delete
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ check_route_no_entry $ip
+ check_route_no_entry $net
+
+ rump_server_destroy_ifaces
+}
+
+test_same_address6()
+{
+ local ip=fc00::1
+ local net=fc00::/64
+
+ rump_server_start $SOCK_LOCAL netinet6
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet6
+
+ check_route $ip 'link#2' UHl lo0
+ check_route $net 'link#2' UC shmif0
+
+ # Delete the address
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip delete
+
+ $DEBUG && rump.netstat -nr -f inet6
+
+ check_route_no_entry $ip
+ check_route_no_entry $net
+
+ # Assign the same address again
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet6
+
+ check_route $ip 'link#2' UHl lo0
+ check_route $net 'link#2' UC shmif0
+
+ # Delete the address again
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip delete
+
+ $DEBUG && rump.netstat -nr -f inet6
+
+ check_route_no_entry $ip
+ check_route_no_entry $net
+
+ rump_server_destroy_ifaces
+}
+
+test_auto_linklocal()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ #
+ # Test enabled auto linklocal
+ #
+
+ # Check default value
+ atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet6.ip6.auto_linklocal
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ # IPv6 link-local address is set
+ atf_check -s exit:0 -o match:"inet6 fe80::" rump.ifconfig shmif0
+
+ #
+ # Test disabled auto linklocal
+ #
+ atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet6.ip6.auto_linklocal=0
+
+ rump_server_add_iface $SOCK_LOCAL shmif1 $BUS
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ # IPv6 link-local address is not set
+ atf_check -s exit:0 -o not-match:"inet6 fe80::" rump.ifconfig shmif1
+
+ rump_server_destroy_ifaces
+}
+
+add_test()
+{
+ local name=$1
+ local desc="$2"
+
+ atf_test_case "ipaddr_${name}" cleanup
+ eval "ipaddr_${name}_head() { \
+ atf_set \"descr\" \"${desc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ ipaddr_${name}_body() { \
+ test_${name}; \
+ }; \
+ ipaddr_${name}_cleanup() { \
+ $DEBUG && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case "ipaddr_${name}"
+}
+
+atf_init_test_cases()
+{
+
+ add_test same_address "Assigning/deleting an IP address twice"
+ add_test same_address6 "Assigning/deleting an IPv6 address twice"
+ add_test auto_linklocal "Assigning an IPv6 link-local address automatically"
+}
diff --git a/contrib/netbsd-tests/net/net/t_ipv6_lifetime.sh b/contrib/netbsd-tests/net/net/t_ipv6_lifetime.sh
new file mode 100755
index 0000000..10e50fd
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_ipv6_lifetime.sh
@@ -0,0 +1,127 @@
+# $NetBSD: t_ipv6_lifetime.sh,v 1.6 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK=unix://sock
+BUS=./bus
+
+DEBUG=${DEBUG:-false}
+
+deprecated="[Dd][Ee][Pp][Rr][Ee][Cc][Aa][Tt][Ee][Dd]"
+
+atf_test_case basic cleanup
+
+basic_head()
+{
+ atf_set "descr" "Tests for IPv6 address lifetime"
+ atf_set "require.progs" "rump_server"
+}
+
+basic_body()
+{
+ local time=5
+ local bonus=2
+ local ip="fc00::1"
+
+ rump_server_start $SOCK netinet6
+ rump_server_add_iface $SOCK shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ # A normal IP address doesn't contain preferred/valid lifetime
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o not-match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o not-match:'vltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip delete
+
+ # Setting only a preferred lifetime
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip pltime $time
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'vltime infty' rump.ifconfig -L shmif0
+ atf_check -s exit:0 sleep $(($time + $bonus))
+ $DEBUG && rump.ifconfig -L shmif0
+ # Should remain but marked as deprecated
+ atf_check -s exit:0 -o match:"$ip.+$deprecated" rump.ifconfig -L shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip delete
+
+ # Setting only a valid lifetime (invalid)
+ atf_check -s not-exit:0 -e match:'Invalid argument' \
+ rump.ifconfig shmif0 inet6 $ip vltime $time
+
+ # Setting both preferred and valid lifetimes (same value)
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip \
+ pltime $time vltime $time
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'vltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 sleep $(($time + $bonus))
+ $DEBUG && rump.ifconfig -L shmif0
+ # Shouldn't remain anymore
+ atf_check -s exit:0 -o not-match:"$ip" rump.ifconfig -L shmif0
+
+ # Setting both preferred and valid lifetimes (pltime > vltime)
+ atf_check -s not-exit:0 -e match:'Invalid argument' rump.ifconfig \
+ shmif0 inet6 $ip pltime $(($time * 2)) vltime $time
+
+ # Setting both preferred and valid lifetimes (pltime < vltime)
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip \
+ pltime $time vltime $((time * 2))
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'vltime' rump.ifconfig -L shmif0
+
+ if sysctl machdep.cpu_brand 2>/dev/null | grep QEMU >/dev/null 2>&1
+ then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip delete
+ atf_skip "unreliable under qemu, skip until PR kern/43997 fixed"
+ fi
+
+ atf_check -s exit:0 sleep $(($time + $bonus))
+ $DEBUG && rump.ifconfig -L shmif0
+ # Should remain but marked as deprecated
+ atf_check -s exit:0 -o match:"$ip.+$deprecated" rump.ifconfig -L shmif0
+ atf_check -s exit:0 sleep $(($time + $bonus))
+ $DEBUG && rump.ifconfig -L shmif0
+ # Shouldn't remain anymore
+ atf_check -s exit:0 -o not-match:"$ip" rump.ifconfig -L shmif0
+
+ rump_server_destroy_ifaces
+}
+
+basic_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case basic
+}
diff --git a/contrib/netbsd-tests/net/net/t_ipv6address.sh b/contrib/netbsd-tests/net/net/t_ipv6address.sh
new file mode 100755
index 0000000..539a16d
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_ipv6address.sh
@@ -0,0 +1,387 @@
+# $NetBSD: t_ipv6address.sh,v 1.12 2016/12/14 02:50:42 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+SERVER="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet"
+SERVER="${SERVER} -lrumpnet_shmif -lrumpdev"
+SERVER6="${SERVER} -lrumpnet_netinet6"
+
+SOCKSRC=unix://commsock1
+SOCKFWD=unix://commsock2
+SOCKDST=unix://commsock3
+IP6SRCNW=fc00:1::0/64
+IP6SRC=fc00:1::1
+IP6DSTNW=fc00:2::0/64
+IP6DST=fc00:2::1
+IP6FWD0=fc00:3::1
+BUS1=bus1
+BUS2=bus2
+BUSSRC=bus_src
+BUSDST=bus_dst
+
+DEBUG=${DEBUG:-true}
+TIMEOUT=3
+
+atf_test_case linklocal cleanup
+atf_test_case linklocal_ops cleanup
+
+setup()
+{
+ atf_check -s exit:0 ${SERVER6} ${SOCKSRC}
+ atf_check -s exit:0 ${SERVER6} ${SOCKFWD}
+ atf_check -s exit:0 ${SERVER6} ${SOCKDST}
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 -o match:"0 -> 1" rump.sysctl \
+ -w net.inet6.ip6.forwarding=1
+ unset RUMP_SERVER
+
+ setup_ifcfg
+
+ export RUMP_SERVER=${SOCKSRC}
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+}
+setup_ifcfg()
+{
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS1}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ${BUSSRC}
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS2}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ${BUSDST}
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS1}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ${BUS2}
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ unset RUMP_SERVER
+}
+
+setup_route()
+{
+ local tmp_rump_server=$RUMP_SERVER
+
+ local src_if0_lladdr=`get_linklocal_addr ${SOCKSRC} shmif0`
+ local dst_if0_lladdr=`get_linklocal_addr ${SOCKDST} shmif0`
+ local fwd_if0_lladdr=`get_linklocal_addr ${SOCKFWD} shmif0`
+ local fwd_if1_lladdr=`get_linklocal_addr ${SOCKFWD} shmif1`
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s ignore -o ignore -e ignore \
+ rump.route delete -inet6 default ${fwd_if0_lladdr}%shmif0
+ atf_check -s exit:0 -o match:"add net default:" \
+ rump.route add -inet6 default ${fwd_if0_lladdr}%shmif0
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6SRC}
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ atf_check -s ignore -o ignore -e ignore \
+ rump.route delete -inet6 default ${fwd_if1_lladdr}%shmif0
+ atf_check -s exit:0 -o match:"add net default:" \
+ rump.route add -inet6 default ${fwd_if1_lladdr}%shmif0
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DST}
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s ignore -o ignore -e ignore \
+ rump.route delete -inet6 ${IP6SRCNW} ${src_if0_lladdr}%shmif0
+ atf_check -s exit:0 -o match:"add net" \
+ rump.route add -inet6 ${IP6SRCNW} ${src_if0_lladdr}%shmif0
+
+ atf_check -s ignore -o ignore -e ignore \
+ rump.route delete -inet6 ${IP6DSTNW} ${dst_if0_lladdr}%shmif1
+ atf_check -s exit:0 -o match:"add net" \
+ rump.route add -inet6 ${IP6DSTNW} ${dst_if0_lladdr}%shmif1
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$tmp_rump_server
+}
+
+cleanup_bus()
+{
+ local tmp_rump_server=$RUMP_SERVER
+
+ $DEBUG && dump_bus
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ atf_check -s exit:0 rump.ifconfig shmif0 -linkstr
+ atf_check -s exit:0 rump.ifconfig shmif1 down
+ atf_check -s exit:0 rump.ifconfig shmif1 -linkstr
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ atf_check -s exit:0 rump.ifconfig shmif0 -linkstr
+ atf_check -s exit:0 rump.ifconfig shmif1 down
+ atf_check -s exit:0 rump.ifconfig shmif1 -linkstr
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ atf_check -s exit:0 rump.ifconfig shmif0 -linkstr
+ atf_check -s exit:0 rump.ifconfig shmif1 down
+ atf_check -s exit:0 rump.ifconfig shmif1 -linkstr
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 rm ${BUSSRC}
+ atf_check -s exit:0 rm ${BUSDST}
+ atf_check -s exit:0 rm ${BUS1}
+ atf_check -s exit:0 rm ${BUS2}
+
+ setup_ifcfg
+
+ export RUMP_SERVER=$tmp_rump_server
+}
+
+cleanup_rump_servers()
+{
+
+ env RUMP_SERVER=${SOCKSRC} rump.halt
+ env RUMP_SERVER=${SOCKDST} rump.halt
+ env RUMP_SERVER=${SOCKFWD} rump.halt
+}
+
+dump_bus()
+{
+
+ shmif_dumpbus -p - ${BUSSRC} 2>/dev/null| tcpdump -n -e -r -
+ shmif_dumpbus -p - ${BUSDST} 2>/dev/null| tcpdump -n -e -r -
+ shmif_dumpbus -p - ${BUS1} 2>/dev/null| tcpdump -n -e -r -
+ shmif_dumpbus -p - ${BUS2} 2>/dev/null| tcpdump -n -e -r -
+}
+
+_dump()
+{
+
+ export RUMP_SERVER=${SOCKSRC}
+ rump.ndp -n -a
+ rump.netstat -nr -f inet6
+ export RUMP_SERVER=${SOCKDST}
+ rump.ndp -n -a
+ rump.netstat -nr -f inet6
+ export RUMP_SERVER=${SOCKFWD}
+ rump.ndp -n -a
+ rump.netstat -nr -f inet6
+ unset RUMP_SERVER
+}
+
+linklocal_head()
+{
+ atf_set "descr" \
+ "Test for bassically function of the IPv6 linklocal address"
+ atf_set "require.progs" \
+ "rump_server rump.route rump.ifconfig rump.ping6"
+}
+
+linklocal_body()
+{
+ setup
+
+ local src_if0_lladdr=`get_linklocal_addr ${SOCKSRC} shmif0`
+ local src_if1_lladdr=`get_linklocal_addr ${SOCKSRC} shmif1`
+ local dst_if0_lladdr=`get_linklocal_addr ${SOCKDST} shmif0`
+ local fwd_if0_lladdr=`get_linklocal_addr ${SOCKFWD} shmif0`
+ local fwd_if1_lladdr=`get_linklocal_addr ${SOCKFWD} shmif1`
+
+ export RUMP_SERVER=${SOCKSRC}
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # link local address to link local address
+
+ atf_check -s not-exit:0 -e match:"No route to host" \
+ rump.ping6 -c 1 -X $TIMEOUT -n ${fwd_if0_lladdr}
+
+ atf_check -s exit:0 -o match:"0.0% packet loss" \
+ rump.ping6 -c 1 -X $TIMEOUT -n ${fwd_if0_lladdr}%shmif0
+
+ atf_check -s ignore -o empty -e ignore \
+ -x "shmif_dumpbus -p - ${BUSSRC} | tcpdump -r - -n -p icmp6"
+ atf_check -s ignore -o not-empty -e ignore \
+ -x "shmif_dumpbus -p - ${BUS1} | tcpdump -r - -n -p icmp6"
+
+ cleanup_bus
+
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -c 1 -X $TIMEOUT -n -S ${src_if1_lladdr}%shmif1 \
+ ${fwd_if0_lladdr}%shmif0
+ atf_check -s ignore -o not-match:"${src_if1_lladdr}" -e ignore \
+ -x "shmif_dumpbus -p - ${BUS1} | tcpdump -r - -n -p icmp6"
+ $DEBUG && shmif_dumpbus -p - ${BUS1} | tcpdump -r - -n -p icmp6
+ unset RUMP_SERVER
+
+ # link local address to host address
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6FWD0}
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 -o match:"add net default:" \
+ rump.route add -inet6 default ${fwd_if0_lladdr}%shmif0
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && _dump
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 -o match:"0.0% packet loss" \
+ rump.ping6 -c 1 -X $TIMEOUT -n -S ${src_if0_lladdr}%shmif0 ${IP6FWD0}
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ # host address to link local address
+ atf_check -s exit:0 -o match:"0.0% packet loss" \
+ rump.ping6 -c 1 -X $TIMEOUT -n ${src_if0_lladdr}%shmif0
+ atf_check -s not-exit:0 -o match:"100.0% packet loss" \
+ rump.ping6 -c 1 -X $TIMEOUT -n ${src_if1_lladdr}%shmif0
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6FWD0} delete
+
+ unset RUMP_SERVER
+
+ # forwarding with link local address
+ setup_route
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 -o match:"0.0% packet loss" rump.ping6 -c 1 \
+ -X $TIMEOUT -n -S ${IP6SRC} ${IP6DST}
+
+ cleanup_bus
+ $DEBUG && rump.ifconfig shmif0
+ atf_check -s not-exit:0 -o match:"100.0% packet loss" rump.ping6 -c 1 \
+ -X $TIMEOUT -n -S ${src_if0_lladdr}%shmif0 ${IP6DST}
+ atf_check -s ignore -o not-match:"${src_if0_lladdr}" -e ignore \
+ -x "shmif_dumpbus -p - ${BUS2} | tcpdump -r - -n -p icmp6"
+
+ cleanup_bus
+ atf_check -s not-exit:0 -o match:"100.0% packet loss" rump.ping6 -c 1 \
+ -X $TIMEOUT -n -S ${IP6SRC} ${dst_if0_lladdr}%shmif0
+ atf_check -s ignore -o not-empty -e ignore \
+ -x "shmif_dumpbus -p - ${BUS2} | tcpdump -r - -n -p icmp6"
+
+ unset RUMP_SERVER
+
+}
+
+linklocal_cleanup()
+{
+
+ $DEBUG && _dump
+ $DEBUG && dump_bus
+ cleanup_rump_servers
+}
+
+linklocal_ops_head()
+{
+
+ atf_set "descr" \
+ "Test for various operations to IPv6 linklocal addresses"
+ atf_set "require.progs" "rump_server rump.route rump.ndp"
+}
+
+linklocal_ops_body()
+{
+ local src_if0_lladdr=
+
+ setup
+
+ src_if0_lladdr=`get_linklocal_addr ${SOCKSRC} shmif0`
+
+ export RUMP_SERVER=${SOCKSRC}
+
+ # route get
+ atf_check -s exit:0 -o match:"${src_if0_lladdr}" \
+ rump.route get -inet6 ${src_if0_lladdr}%shmif0
+
+ # route get without an interface name (zone index)
+ atf_check -s not-exit:0 -e match:"not in table" \
+ rump.route get -inet6 ${src_if0_lladdr}
+
+ # ndp
+ atf_check -s exit:0 -o match:"${src_if0_lladdr}" \
+ rump.ndp -n ${src_if0_lladdr}%shmif0
+
+ # ndp without an interface name (zone index)
+ atf_check -s not-exit:0 -o ignore -e match:"no entry" \
+ rump.ndp -n ${src_if0_lladdr}
+}
+
+
+linklocal_ops_cleanup()
+{
+
+ cleanup_rump_servers
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case linklocal
+ atf_add_test_case linklocal_ops
+}
diff --git a/contrib/netbsd-tests/net/net/t_mtudisc.sh b/contrib/netbsd-tests/net/net/t_mtudisc.sh
new file mode 100755
index 0000000..a99d652
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_mtudisc.sh
@@ -0,0 +1,192 @@
+# $NetBSD: t_mtudisc.sh,v 1.8 2016/12/21 01:16:18 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKLOCAL=unix://commsock1
+SOCKGATEWAY=unix://commsock2
+SOCKREMOTE=unix://commsock3
+HTML_FILE=index.html
+
+DEBUG=${DEBUG:-false}
+
+atf_test_case mtudisc_basic cleanup
+
+mtudisc_basic_head()
+{
+ atf_set "descr" "Tests for IPv4 Path MTU Dicorvery basic behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_server()
+{
+ local sock=$1
+ local if=$2
+ local bus=$3
+ local ip=$4
+
+ rump_server_add_iface $sock $if $bus
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig $if $ip
+ atf_check -s exit:0 rump.ifconfig $if up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig $if
+}
+
+prepare_download_file()
+{
+ local file=$1
+ local data="0123456789"
+
+ touch $file
+ for i in `seq 1 512`
+ do
+ echo $data >> $file
+ done
+}
+
+do_http_get()
+{
+ local ip=$1
+ local ret=$2
+ local timeout=5
+
+ # get the webpage
+ atf_check -s exit:$ret env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $timeout -o ./out http://$ip/$HTML_FILE
+}
+
+mtudisc_basic_body()
+{
+ local pkt=
+ local local_ip=10.0.0.2
+ local gateway_local_ip=10.0.0.1
+ local gateway_remote_ip=10.0.1.1
+ local remote_ip=10.0.1.2
+ local prefixlen=24
+
+ rump_server_start $SOCKLOCAL
+ rump_server_start $SOCKGATEWAY
+ rump_server_start $SOCKREMOTE
+
+ #
+ # Setup servers
+ #
+ # [local server] [gateway server] [remote server with httpd]
+ # | 10.0.0.2 10.0.0.1 | | 10.0.1.1 10.0.1.2 |
+ # shmif0(mtu=1500) ----- shmif1(mtu=1280) shmif0(mtu=1500) ----- shmif0(mtu=1500)
+ #
+
+ # Assign IP addresses
+ setup_server $SOCKLOCAL shmif0 bus1 $local_ip/$prefixlen
+ setup_server $SOCKGATEWAY shmif0 bus1 $gateway_local_ip/$prefixlen
+ setup_server $SOCKGATEWAY shmif1 bus2 $gateway_remote_ip/$prefixlen
+ setup_server $SOCKREMOTE shmif0 bus2 $remote_ip/$prefixlen
+
+ ### Setup gateway server
+ export RUMP_SERVER=$SOCKGATEWAY
+
+ # Set mtu of shmif0 to 1280
+ export RUMP_SERVER=$SOCKGATEWAY
+ atf_check -s exit:0 rump.ifconfig shmif0 mtu 1280
+
+ # Enable IPv4 forwarding
+ atf_check -s exit:0 rump.sysctl -w -q net.inet.ip.forwarding=1
+
+ ### Setup remote server
+ export RUMP_SERVER=$SOCKREMOTE
+
+ # Check default value
+ atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet.ip.mtudisc
+
+ # Start httpd daemon
+ prepare_download_file $HTML_FILE
+ start_httpd $SOCKREMOTE $remote_ip
+ $DEBUG && rump.netstat -a -f inet
+
+ # Teach the peer thar 10.0.0.2(local serer) is behind 10.0.1.1(gateway server)
+ atf_check -s exit:0 -o ignore rump.route add $local_ip/32 $gateway_remote_ip
+
+ ### Setup local server
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # Teach the peer thar 10.0.1.2(remote serer) is behind 10.0.0.1(gateway server)
+ atf_check -s exit:0 -o ignore rump.route add $remote_ip/32 $gateway_local_ip
+
+ # Don't accept fragmented packets
+ atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet.ip.maxfragpackets=0
+
+ #
+ # Test disabled path mtu discorvery
+ #
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet.ip.mtudisc=0
+
+ # Get the webpage (expect: failed)
+ export RUMP_SERVER=$SOCKLOCAL
+ do_http_get $remote_ip 1
+ $DEBUG && extract_new_packets bus2 > ./out
+ $DEBUG && cat ./out
+
+ # Check path mtu size on remote server
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 \
+ -o match:"^10.0.0.2 +10.0.1.1 +UGHS +- +- +- +shmif0" \
+ rump.netstat -nr -f inet
+
+ #
+ # Test enabled path mtu discorvery
+ #
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet.ip.mtudisc=1
+
+ # Get the webpage (expect: success)
+ export RUMP_SERVER=$SOCKLOCAL
+ do_http_get $remote_ip 0
+ $DEBUG && extract_new_packets bus2 > ./out
+ $DEBUG && cat ./out
+
+ # Check path mtu size on remote server
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 \
+ -o match:"^10.0.0.2 +10.0.1.1 +UGHS +- +- +1280 +shmif0" \
+ rump.netstat -nr -f inet
+
+ rump_server_destroy_ifaces
+}
+
+mtudisc_basic_cleanup()
+{
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case mtudisc_basic
+}
diff --git a/contrib/netbsd-tests/net/net/t_mtudisc6.sh b/contrib/netbsd-tests/net/net/t_mtudisc6.sh
new file mode 100755
index 0000000..93bc12e
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_mtudisc6.sh
@@ -0,0 +1,179 @@
+# $NetBSD: t_mtudisc6.sh,v 1.5 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKLOCAL=unix://commsock1
+SOCKGATEWAY=unix://commsock2
+SOCKREMOTE=unix://commsock3
+HTML_FILE=index.html
+
+DEBUG=${DEBUG:-false}
+
+atf_test_case mtudisc6_basic cleanup
+
+mtudisc6_basic_head()
+{
+
+ atf_set "descr" "Tests for IPv6 Path MTU Dicorvery basic behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_server()
+{
+ local sock=$1
+ local if=$2
+ local bus=$3
+ local ip=$4
+
+ rump_server_add_iface $sock $if $bus
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig $if inet6 $ip
+ atf_check -s exit:0 rump.ifconfig $if up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig $if
+}
+
+prepare_download_file()
+{
+ local file=$1
+ local data="0123456789"
+
+ touch $file
+ for i in `seq 1 512`
+ do
+ echo $data >> $file
+ done
+}
+
+do_http_get()
+{
+ local ip=$1
+ local ret=$2
+ local timeout=5
+
+ # get the webpage
+ atf_check -s exit:$ret env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $timeout -o ./out "http://[$ip]/$HTML_FILE"
+}
+
+mtudisc6_basic_body()
+{
+ local pkt=
+ local local_ip=fc00:0:0:1::2
+ local gateway_local_ip=fc00:0:0:1::1
+ local gateway_remote_ip=fc00:0:0:2::1
+ local remote_ip=fc00:0:0:2::2
+ local prefixlen=64
+
+ rump_server_start $SOCKLOCAL netinet6
+ rump_server_start $SOCKGATEWAY netinet6
+ rump_server_start $SOCKREMOTE netinet6
+
+ #
+ # Setup servers
+ #
+ # [local server] [gateway server] [remote server]
+ # | | | |
+ # shmif0(1500) -- shmif1(1280) shmif0(1500) -- shmif0(1500)
+ #
+
+ # Assign IP addresses
+ setup_server $SOCKLOCAL shmif0 bus1 $local_ip/$prefixlen
+ setup_server $SOCKGATEWAY shmif0 bus1 $gateway_local_ip/$prefixlen
+ setup_server $SOCKGATEWAY shmif1 bus2 $gateway_remote_ip/$prefixlen
+ setup_server $SOCKREMOTE shmif0 bus2 $remote_ip/$prefixlen
+
+ ### Setup gateway server
+ export RUMP_SERVER=$SOCKGATEWAY
+
+ # Set MTU of shmif0 to 1280
+ export RUMP_SERVER=$SOCKGATEWAY
+ atf_check -s exit:0 rump.ifconfig shmif0 mtu 1280
+
+ # Enable IPv6 forwarding
+ atf_check -s exit:0 rump.sysctl -w -q net.inet6.ip6.forwarding=1
+
+ ### Setup remote server
+ export RUMP_SERVER=$SOCKREMOTE
+
+ # Start httpd daemon
+ prepare_download_file $HTML_FILE
+ start_httpd $SOCKREMOTE $remote_ip
+ $DEBUG && rump.netstat -a
+
+ # Teach the peer that local serer is behind gateway server
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 $local_ip/128 $gateway_remote_ip
+
+ # Check path MTU size on remote server
+ atf_check -s exit:0 \
+ -o match:"^$local_ip +$gateway_remote_ip +UGHS +- +- +- +shmif0" \
+ rump.netstat -nr -f inet6
+
+ ### Setup local server
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # Teach the peer that remote serer is behind gateway server
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 $remote_ip/128 $gateway_local_ip
+
+ # Don't accept fragmented packets
+ atf_check -s exit:0 -o ignore \
+ rump.sysctl -w -q net.inet6.ip6.maxfragpackets=0
+
+ #
+ # Test enabled path MTU discorvery
+ #
+ # Get the webpage (expect: success)
+ export RUMP_SERVER=$SOCKLOCAL
+ do_http_get $remote_ip 0
+ $DEBUG && extract_new_packets bus2 > ./out
+ $DEBUG && cat ./out
+
+ # Check path MTU size on remote server
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 \
+ -o match:"^$local_ip +$gateway_remote_ip +UGHS +- +- +1280 +shmif0" \
+ rump.netstat -nr -f inet6
+
+ rump_server_destroy_ifaces
+}
+
+mtudisc6_basic_cleanup()
+{
+
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case mtudisc6_basic
+}
diff --git a/contrib/netbsd-tests/net/net/t_ping6_opts.sh b/contrib/netbsd-tests/net/net/t_ping6_opts.sh
new file mode 100755
index 0000000..e2e774e
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_ping6_opts.sh
@@ -0,0 +1,380 @@
+# $NetBSD: t_ping6_opts.sh,v 1.8 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKSRC=unix://commsock1
+SOCKFWD=unix://commsock2
+SOCKDST=unix://commsock3
+IP6SRC=fc00:0:0:1::2
+IP6SRCGW=fc00:0:0:1::1
+IP6DSTGW=fc00:0:0:2::1
+IP6DST=fc00:0:0:2::2
+BUS_SRCGW=bus1
+BUS_DSTGW=bus2
+
+IP6SRC2=fc00:0:0:1::3
+IP6SRCGW2=fc00:0:0:1::254
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=1
+
+#
+# Utility functions
+#
+setup_endpoint()
+{
+ local sock=${1}
+ local addr=${2}
+ local bus=${3}
+ local gw=${4}
+
+ rump_server_add_iface $sock shmif0 $bus
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ if $DEBUG; then
+ rump.ifconfig shmif0
+ rump.netstat -nr
+ fi
+}
+
+setup_forwarder()
+{
+
+ rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW
+ rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW
+
+ export RUMP_SERVER=$SOCKFWD
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ if $DEBUG; then
+ rump.netstat -nr
+ rump.sysctl net.inet6.ip6.forwarding
+ fi
+}
+
+setup_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1
+}
+
+setup6()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKFWD netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW $IP6SRCGW
+ setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW $IP6DSTGW
+ setup_forwarder
+}
+
+check_echo_request_pkt()
+{
+ local pkt="$1 > $2: .+ echo request"
+
+ extract_new_packets $BUS_SRCGW > ./out
+ $DEBUG && echo $pkt
+ $DEBUG && cat ./out
+ atf_check -s exit:0 -o match:"$pkt" cat ./out
+}
+
+check_echo_request_pkt_with_macaddr()
+{
+ local pkt="$1 > $2, .+ $3 > $4: .+ echo request"
+
+ extract_new_packets $BUS_SRCGW > ./out
+ $DEBUG && echo $pkt
+ $DEBUG && cat ./out
+ atf_check -s exit:0 -o match:"$pkt" cat ./out
+}
+
+check_echo_request_pkt_with_macaddr_and_rthdr0()
+{
+ local pkt=
+
+ pkt="$1 > $2, .+ $3 > $4:"
+ pkt="$pkt srcrt \\(len=2, type=0, segleft=1, \\[0\\]$5\\)"
+ pkt="$pkt .+ echo request"
+
+ extract_new_packets $BUS_SRCGW > ./out
+ $DEBUG && echo $pkt
+ $DEBUG && cat ./out
+ atf_check -s exit:0 -o match:"$pkt" cat ./out
+}
+
+#
+# Tests
+#
+atf_test_case ping6_opts_sourceaddr cleanup
+ping6_opts_sourceaddr_head()
+{
+
+ atf_set "descr" "tests of ping6 -S option"
+ atf_set "require.progs" "rump_server"
+}
+
+ping6_opts_sourceaddr_body()
+{
+
+ setup6
+ setup_forwarding6
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt $IP6SRC $IP6DST
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC2
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt $IP6SRC $IP6DST
+
+ # ping6 -S <sourceaddr>
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -S $IP6SRC $IP6DST
+ check_echo_request_pkt $IP6SRC $IP6DST
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -S $IP6SRC2 $IP6DST
+ check_echo_request_pkt $IP6SRC2 $IP6DST
+
+ rump_server_destroy_ifaces
+}
+
+ping6_opts_sourceaddr_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ping6_opts_interface cleanup
+ping6_opts_interface_head()
+{
+
+ atf_set "descr" "tests of ping6 -I option"
+ atf_set "require.progs" "rump_server"
+}
+
+ping6_opts_interface_body()
+{
+ local shmif0_lladdr=
+ local shmif1_lladdr=
+ local gw_lladdr=
+
+ setup6
+ setup_forwarding6
+
+ shmif0_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif0)
+ gw_lladdr=$(get_linklocal_addr ${SOCKFWD} shmif0)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr
+ check_echo_request_pkt $shmif0_lladdr $gw_lladdr
+
+ rump_server_add_iface $SOCKSRC shmif1 $BUS_SRCGW
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+ shmif1_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif1)
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr
+ check_echo_request_pkt $shmif0_lladdr $gw_lladdr
+
+ # ping6 -I <interface>
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -I shmif0 $gw_lladdr
+ check_echo_request_pkt $shmif0_lladdr $gw_lladdr
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -I shmif1 $gw_lladdr
+ check_echo_request_pkt $shmif1_lladdr $gw_lladdr
+
+ rump_server_destroy_ifaces
+}
+
+ping6_opts_interface_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ping6_opts_gateway cleanup
+ping6_opts_gateway_head()
+{
+
+ atf_set "descr" "tests of ping6 -g option"
+ atf_set "require.progs" "rump_server"
+}
+
+ping6_opts_gateway_body()
+{
+ local my_macaddr=
+ local gw_shmif0_macaddr=
+ local gw_shmif2_macaddr=
+
+ setup6
+ setup_forwarding6
+
+ my_macaddr=$(get_macaddr ${SOCKSRC} shmif0)
+ gw_shmif0_macaddr=$(get_macaddr ${SOCKFWD} shmif0)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ rump_server_add_iface $SOCKFWD shmif2 $BUS_SRCGW
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 rump.ifconfig shmif2 inet6 $IP6SRCGW2
+ atf_check -s exit:0 rump.ifconfig -w 10
+ gw_shmif2_macaddr=$(get_macaddr ${SOCKFWD} shmif2)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ # ping6 -g <gateway>
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW2 $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6DST
+
+ rump_server_destroy_ifaces
+}
+
+ping6_opts_gateway_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ping6_opts_hops cleanup
+ping6_opts_hops_head()
+{
+
+ atf_set "descr" "tests of ping6 hops (Type 0 Routing Header)"
+ atf_set "require.progs" "rump_server"
+}
+
+ping6_opts_hops_body()
+{
+ local my_macaddr=
+ local gw_shmif0_macaddr=
+ local gw_shmif2_macaddr=
+
+ setup6
+ setup_forwarding6
+
+ my_macaddr=$(get_macaddr ${SOCKSRC} shmif0)
+ gw_shmif0_macaddr=$(get_macaddr ${SOCKFWD} shmif0)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ rump_server_add_iface $SOCKFWD shmif2 $BUS_SRCGW
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 rump.ifconfig shmif2 inet6 $IP6SRCGW2
+ atf_check -s exit:0 rump.ifconfig -w 10
+ gw_shmif2_macaddr=$(get_macaddr ${SOCKFWD} shmif2)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ # ping6 hops
+
+ # ping6 fails expectedly because the kernel doesn't support
+ # to receive packets with type 0 routing headers, but we can
+ # check whether a sent packet is correct.
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ $IP6SRCGW $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6SRCGW $IP6DST
+
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ $IP6SRCGW2 $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6SRCGW2 $IP6DST
+
+ # ping6 -g <gateway> hops
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW $IP6SRCGW $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6SRCGW $IP6DST
+
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW2 $IP6SRCGW2 $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6SRCGW2 $IP6DST
+
+ # ping6 -g <gateway> hops, but different nexthops (is it valid?)
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW $IP6SRCGW2 $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6SRCGW2 $IP6DST
+
+ rump_server_destroy_ifaces
+}
+
+ping6_opts_hops_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case ping6_opts_sourceaddr
+ atf_add_test_case ping6_opts_interface
+ atf_add_test_case ping6_opts_gateway
+ atf_add_test_case ping6_opts_hops
+}
diff --git a/contrib/netbsd-tests/net/net/t_tcp.c b/contrib/netbsd-tests/net/net/t_tcp.c
index 8972a0f..fd1f1e9 100644
--- a/contrib/netbsd-tests/net/net/t_tcp.c
+++ b/contrib/netbsd-tests/net/net/t_tcp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_tcp.c,v 1.3 2013/10/17 12:53:28 christos Exp $ */
+/* $NetBSD: t_tcp.c,v 1.4 2016/03/04 18:52:01 christos Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#ifdef __RCSID
-__RCSID("$Id: t_tcp.c,v 1.3 2013/10/17 12:53:28 christos Exp $");
+__RCSID("$Id: t_tcp.c,v 1.4 2016/03/04 18:52:01 christos Exp $");
#endif
/* Example code. Should block; does with accept not paccept. */
@@ -61,6 +61,10 @@ __RCSID("$Id: t_tcp.c,v 1.3 2013/10/17 12:53:28 christos Exp $");
#define FAIL(msg, ...) ATF_CHECK_MSG(0, msg, ## __VA_ARGS__); goto fail
#endif
+#ifdef __linux__
+#define paccept(a, b, c, d, e) accept4((a), (b), (c), (e))
+#endif
+
static void
ding(int al)
{
@@ -70,7 +74,8 @@ static void
paccept_block(bool pacceptblock, bool fcntlblock)
{
int srvr = -1, clnt = -1, as = -1;
- int ok, fl, n;
+ int ok, fl;
+ ssize_t n;
char buf[10];
struct sockaddr_in sin, ba;
struct sigaction sa;
@@ -105,10 +110,12 @@ paccept_block(bool pacceptblock, bool fcntlblock)
/* may not connect first time */
ok = connect(clnt, (struct sockaddr *) &ba, addrlen);
+ if (ok != -1 || errno != EINPROGRESS)
+ FAIL("expected connect to fail");
as = paccept(srvr, NULL, NULL, NULL, pacceptblock ? 0 : SOCK_NONBLOCK);
ok = connect(clnt, (struct sockaddr *) &ba, addrlen);
if (ok == -1 && errno != EISCONN)
- FAIL("both connects failed");
+ FAIL("connect failed");
#if 0
fl = fcntl(srvr, F_GETFL, 0);
diff --git a/contrib/netbsd-tests/net/net_common.sh b/contrib/netbsd-tests/net/net_common.sh
new file mode 100755
index 0000000..df21a88
--- /dev/null
+++ b/contrib/netbsd-tests/net/net_common.sh
@@ -0,0 +1,314 @@
+# $NetBSD: net_common.sh,v 1.11 2017/01/10 05:55:34 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+#
+# Common utility functions for tests/net
+#
+
+HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes"
+
+extract_new_packets()
+{
+ local bus=$1
+ local old=./.__old
+
+ if [ ! -f $old ]; then
+ old=/dev/null
+ fi
+
+ shmif_dumpbus -p - $bus 2>/dev/null| \
+ tcpdump -n -e -r - 2>/dev/null > ./.__new
+ diff -u $old ./.__new |grep '^+' |cut -d '+' -f 2 > ./.__diff
+ mv -f ./.__new ./.__old
+ cat ./.__diff
+}
+
+check_route()
+{
+ local target=$1
+ local gw=$2
+ local flags=${3:-\.\+}
+ local ifname=${4:-\.\+}
+
+ target=$(echo $target |sed 's/\./\\./g')
+ if [ "$gw" = "" ]; then
+ gw=".+"
+ else
+ gw=$(echo $gw |sed 's/\./\\./g')
+ fi
+
+ atf_check -s exit:0 -e ignore \
+ -o match:"^$target +$gw +$flags +- +- +.+ +$ifname" \
+ rump.netstat -rn
+}
+
+check_route_flags()
+{
+
+ check_route "$1" "" "$2" ""
+}
+
+check_route_gw()
+{
+
+ check_route "$1" "$2" "" ""
+}
+
+check_route_no_entry()
+{
+ local target=$(echo $1 |sed 's/\./\\./g')
+
+ atf_check -s exit:0 -e ignore -o not-match:"^$target" \
+ rump.netstat -rn
+}
+
+get_linklocal_addr()
+{
+
+ export RUMP_SERVER=${1}
+ rump.ifconfig ${2} inet6 |
+ awk "/fe80/ {sub(/%$2/, \"\"); sub(/\\/[0-9]*/, \"\"); print \$2;}"
+ unset RUMP_SERVER
+
+ return 0
+}
+
+get_macaddr()
+{
+
+ env RUMP_SERVER=${1} \
+ rump.ifconfig ${2} |awk '/address/ {print $2;}'
+}
+
+HTTPD_PID=./.__httpd.pid
+start_httpd()
+{
+ local sock=$1
+ local ip=$2
+ local backup=$RUMP_SERVER
+
+ export RUMP_SERVER=$sock
+
+ # start httpd in daemon mode
+ atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
+ /usr/libexec/httpd -P $HTTPD_PID -i $ip -b -s $(pwd)
+
+ export RUMP_SERVER=$backup
+
+ sleep 3
+}
+
+stop_httpd()
+{
+
+ if [ -f $HTTPD_PID ]; then
+ kill -9 $(cat $HTTPD_PID)
+ rm -f $HTTPD_PID
+ sleep 1
+ fi
+}
+
+BASIC_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netinet \
+ -lrumpnet_shmif -lrumpdev"
+FS_LIBS="$BASIC_LIBS -lrumpvfs -lrumpfs_ffs"
+
+# We cannot keep variables between test phases, so need to store in files
+_rump_server_socks=./.__socks
+_rump_server_ifaces=./.__ifaces
+_rump_server_buses=./.__buses
+
+_rump_server_start_common()
+{
+ local sock=$1
+ local libs=
+
+ shift 1
+ libs="$*"
+
+ atf_check -s exit:0 rump_server $libs $sock
+
+ echo $sock >> $_rump_server_socks
+ $DEBUG && cat $_rump_server_socks
+}
+
+rump_server_start()
+{
+ local sock=$1
+ local _libs=
+ local libs="$BASIC_LIBS"
+
+ shift 1
+ _libs="$*"
+
+ for lib in $_libs; do
+ libs="$libs -lrumpnet_$lib"
+ done
+
+ _rump_server_start_common $sock $libs
+
+ return 0
+}
+
+rump_server_fs_start()
+{
+ local sock=$1
+ local _libs=
+ local libs="$FS_LIBS"
+
+ shift 1
+ _libs="$*"
+
+ for lib in $_libs; do
+ libs="$libs -lrumpnet_$lib"
+ done
+
+ _rump_server_start_common $sock $libs
+
+ return 0
+}
+
+rump_server_add_iface()
+{
+ local sock=$1
+ local ifname=$2
+ local bus=$3
+ local backup=$RUMP_SERVER
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig $ifname create
+ atf_check -s exit:0 rump.ifconfig $ifname linkstr $bus
+ export RUMP_SERVER=$backup
+
+ echo $sock $ifname >> $_rump_server_ifaces
+ $DEBUG && cat $_rump_server_ifaces
+
+ echo $bus >> $_rump_server_buses
+ cat $_rump_server_buses |sort -u >./.__tmp
+ mv -f ./.__tmp $_rump_server_buses
+ $DEBUG && cat $_rump_server_buses
+
+ return 0
+}
+
+rump_server_destroy_ifaces()
+{
+ local backup=$RUMP_SERVER
+
+ $DEBUG && cat $_rump_server_ifaces
+
+ # Try to dump states before destroying interfaces
+ for sock in $(cat $_rump_server_socks); do
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 -o ignore rump.ifconfig
+ atf_check -s exit:0 -o ignore rump.netstat -nr
+ # XXX still need hijacking
+ atf_check -s exit:0 -o ignore $HIJACKING rump.netstat -i -a
+ atf_check -s exit:0 -o ignore rump.arp -na
+ atf_check -s exit:0 -o ignore rump.ndp -na
+ atf_check -s exit:0 -o ignore $HIJACKING ifmcstat
+ done
+
+ # XXX using pipe doesn't work. See PR bin/51667
+ #cat $_rump_server_ifaces | while read sock ifname; do
+ while read sock ifname; do
+ export RUMP_SERVER=$sock
+ if rump.ifconfig -l |grep -q $ifname; then
+ atf_check -s exit:0 rump.ifconfig $ifname destroy
+ fi
+ atf_check -s exit:0 -o ignore rump.ifconfig
+ done < $_rump_server_ifaces
+ export RUMP_SERVER=$backup
+
+ return 0
+}
+
+rump_server_halt_servers()
+{
+ local backup=$RUMP_SERVER
+
+ $DEBUG && cat $_rump_server_socks
+ for sock in $(cat $_rump_server_socks); do
+ env RUMP_SERVER=$sock rump.halt
+ done
+ export RUMP_SERVER=$backup
+
+ return 0
+}
+
+rump_server_dump_servers()
+{
+ local backup=$RUMP_SERVER
+
+ $DEBUG && cat $_rump_server_socks
+ for sock in $(cat $_rump_server_socks); do
+ echo "### Dumping $sock"
+ export RUMP_SERVER=$sock
+ rump.ifconfig
+ rump.netstat -nr
+ # XXX still need hijacking
+ $HIJACKING rump.netstat -i -a
+ rump.arp -na
+ rump.ndp -na
+ $HIJACKING ifmcstat
+ $HIJACKING dmesg
+ done
+ export RUMP_SERVER=$backup
+
+ if [ -f rump_server.core ]; then
+ gdb -ex bt /usr/bin/rump_server rump_server.core
+ strings rump_server.core |grep panic
+ fi
+ return 0
+}
+
+rump_server_dump_buses()
+{
+
+ if [ ! -f $_rump_server_buses ]; then
+ return 0
+ fi
+
+ $DEBUG && cat $_rump_server_buses
+ for bus in $(cat $_rump_server_buses); do
+ echo "### Dumping $bus"
+ shmif_dumpbus -p - $bus 2>/dev/null| tcpdump -n -e -r -
+ done
+ return 0
+}
+
+cleanup()
+{
+
+ rump_server_halt_servers
+}
+
+dump()
+{
+
+ rump_server_dump_servers
+ rump_server_dump_buses
+}
diff --git a/contrib/netbsd-tests/net/route/t_change.sh b/contrib/netbsd-tests/net/route/t_change.sh
index 3618aee..260cad0 100755
--- a/contrib/netbsd-tests/net/route/t_change.sh
+++ b/contrib/netbsd-tests/net/route/t_change.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_change.sh,v 1.4 2013/02/19 21:08:25 joerg Exp $
+# $NetBSD: t_change.sh,v 1.9 2016/11/07 05:25:37 ozaki-r Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -26,18 +26,21 @@
#
netserver=\
-"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet"
+"rump_server -lrumpdev -lrumpnet -lrumpnet_net \
+ -lrumpnet_netinet -lrumpnet_shmif"
export RUMP_SERVER=unix://commsock
-atf_test_case reject2blackhole cleanup
-reject2blackhole_head()
+DEBUG=${DEBUG:-false}
+
+atf_test_case route_change_reject2blackhole cleanup
+route_change_reject2blackhole_head()
{
atf_set "descr" "Change a reject route to blackhole"
atf_set "require.progs" "rump_server"
}
-reject2blackhole_body()
+route_change_reject2blackhole_body()
{
atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
@@ -49,10 +52,242 @@ reject2blackhole_body()
atf_check -s exit:0 -o ignore \
rump.route change 207.46.197.32 127.0.0.1 -blackhole
atf_check -s exit:0 -o match:' UGHBS ' -e ignore -x \
- "rump.netstat -rn -f inet | grep ^207.46| grep ^207.46"
+ "rump.netstat -rn -f inet | grep ^207.46"
+}
+
+route_change_reject2blackhole_cleanup()
+{
+
+ env RUMP_SERVER=unix://commsock rump.halt
+}
+
+atf_test_case route_change_gateway cleanup
+route_change_gateway_head()
+{
+
+ atf_set "descr" "Change the gateway of a route"
+ atf_set "require.progs" "rump_server"
+}
+
+route_change_gateway_body()
+{
+
+ atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 192.168.0.0/24 10.0.0.1
+ atf_check -s exit:0 -o match:'10.0.0.1' -x \
+ "rump.route -n show -inet | grep ^192.168"
+ atf_check -s exit:0 -o ignore \
+ rump.route change -net 192.168.0.0/24 10.0.0.254
+ atf_check -s exit:0 -o match:'10.0.0.254' -x \
+ "rump.route -n show -inet | grep ^192.168"
+}
+
+route_change_gateway_cleanup()
+{
+
+ env RUMP_SERVER=unix://commsock rump.halt
+}
+
+atf_test_case route_change_ifa cleanup
+route_change_ifa_head()
+{
+
+ atf_set "descr" "Change the ifa (local address) of a route"
+ atf_set "require.progs" "rump_server"
+}
+
+route_change_ifa_body()
+{
+
+ atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24
+ atf_check -s exit:0 rump.ifconfig shmif0 alias 10.0.0.11/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 192.168.0.0/24 10.0.0.1
+ atf_check -s exit:0 -o match:'10.0.0.1' -x \
+ "rump.route -n show -inet | grep ^192.168"
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.10
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Change the local address of the route
+ atf_check -s exit:0 -o ignore \
+ rump.route change -net 192.168.0.0/24 10.0.0.1 -ifa 10.0.0.11
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.11
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+}
+
+route_change_ifa_cleanup()
+{
+
+ env RUMP_SERVER=unix://commsock rump.halt
+}
+
+atf_test_case route_change_ifp cleanup
+route_change_ifp_head()
+{
+
+ atf_set "descr" "Change a route based on an interface (ifp)"
+ atf_set "require.progs" "rump_server"
+}
+
+route_change_ifp_body()
+{
+
+ atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
+
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 up
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 192.168.0.0/24 10.0.0.1
+ atf_check -s exit:0 -o match:'10.0.0.1' -x \
+ "rump.route -n show -inet | grep ^192.168"
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.10
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Change a route based on an interface
+ atf_check -s exit:0 -o ignore \
+ rump.route change -net 192.168.0.0/24 10.0.0.1 -ifp shmif1
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.11
+ interface: shmif1
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+}
+
+route_change_ifp_cleanup()
+{
+
+ env RUMP_SERVER=unix://commsock rump.halt
+}
+
+atf_test_case route_change_ifp_ifa cleanup
+route_change_ifp_head()
+{
+
+ atf_set "descr" "Change a route with -ifp and -ifa"
+ atf_set "require.progs" "rump_server"
+}
+
+route_change_ifp_ifa_body()
+{
+
+ atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
+
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 up
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 192.168.0.0/24 10.0.0.1
+ atf_check -s exit:0 -o match:'10.0.0.1' -x \
+ "rump.route -n show -inet | grep ^192.168"
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.10
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Change a route with -ifa and -ifp
+ atf_check -s exit:0 -o ignore \
+ rump.route change -net 192.168.0.0/24 -ifa 10.0.0.1 -ifp shmif1
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.11
+ interface: shmif1
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
}
-reject2blackhole_cleanup()
+route_change_ifp_ifa_cleanup()
{
env RUMP_SERVER=unix://commsock rump.halt
@@ -61,5 +296,9 @@ reject2blackhole_cleanup()
atf_init_test_cases()
{
- atf_add_test_case reject2blackhole
+ atf_add_test_case route_change_reject2blackhole
+ atf_add_test_case route_change_gateway
+ atf_add_test_case route_change_ifa
+ atf_add_test_case route_change_ifp
+ atf_add_test_case route_change_ifp_ifa
}
diff --git a/contrib/netbsd-tests/net/route/t_flags.sh b/contrib/netbsd-tests/net/route/t_flags.sh
new file mode 100755
index 0000000..457e3f5
--- /dev/null
+++ b/contrib/netbsd-tests/net/route/t_flags.sh
@@ -0,0 +1,334 @@
+# $NetBSD: t_flags.sh,v 1.15 2016/12/21 02:46:08 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+SOCK_PEER=unix://commsock2
+SOCK_GW=unix://commsock3
+BUS=bus1
+BUS2=bus2
+
+DEBUG=${DEBUG:-false}
+
+setup_local()
+{
+
+ rump_server_start $SOCK_LOCAL
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+setup_peer()
+{
+
+ rump_server_start $SOCK_PEER
+ rump_server_add_iface $SOCK_PEER shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+setup_gw()
+{
+
+ rump_server_start $SOCK_GW
+ rump_server_add_iface $SOCK_GW shmif0 $BUS
+ rump_server_add_iface $SOCK_GW shmif1 $BUS2
+
+ export RUMP_SERVER=$SOCK_GW
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
+
+ # Wait until DAD completes (10 sec at most)
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative"
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+test_lo()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Up, Host, local
+ check_route_flags 127.0.0.1 UHl
+}
+
+test_connected()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Up, Host, LLINFO, local
+ check_route_flags 10.0.0.2 UHl
+
+ # Up, Cloning
+ check_route_flags 10.0.0/24 UC
+}
+
+test_default_gateway()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Static
+ check_route_flags default UGS
+}
+
+test_static()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Static route to host
+ atf_check -s exit:0 -o ignore rump.route add 10.0.1.1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Static
+ check_route_flags 10.0.1.1 UGHS
+
+ # Static route to network
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Static
+ check_route_flags 10.0.2/24 UGS
+}
+
+test_blackhole()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ # Gateway must be lo0
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 10.0.0.0/24 127.0.0.1 -blackhole
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Blackhole, Static
+ check_route_flags 10.0.0/24 UGBS
+
+ atf_check -s not-exit:0 -o match:'100.0% packet loss' \
+ rump.ping -n -w 1 -c 1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Shouldn't be created
+ check_route_no_entry 10.0.0.1
+}
+
+test_reject()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -reject
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Reject, Static
+ check_route_flags 10.0.0/24 UGRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
+ rump.ping -n -w 1 -c 1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Shouldn't be created
+ check_route_no_entry 10.0.0.1
+
+ # Gateway is lo0 (RTF_GATEWAY)
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 10.0.0.0/24 127.0.0.1 -reject
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Reject, Static
+ check_route_flags 10.0.0/24 UGRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \
+ rump.ping -n -w 1 -c 1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Shouldn't be created
+ check_route_no_entry 10.0.0.1
+
+ # Gateway is lo0 (RTF_HOST)
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -host 10.0.0.1/24 127.0.0.1 -iface -reject
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Host, Reject, Static
+ check_route_flags 10.0.0.1 UHRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
+ rump.ping -n -w 1 -c 1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ return 0
+}
+
+test_icmp_redirect()
+{
+
+ ### Testing Dynamic flag ###
+
+ #
+ # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it.
+ #
+ setup_gw
+
+ #
+ # Teach the peer that 10.0.2.* is behind 10.0.0.254
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254
+ # Up, Gateway, Static
+ check_route_flags 10.0.2/24 UGS
+
+ #
+ # Setup the default gateway to the peer, 10.0.0.1
+ #
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ # Up, Gateway, Static
+ check_route_flags default UGS
+
+ # Try ping 10.0.2.1
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Dynamic
+ check_route_flags 10.0.2.1 UGHD
+ check_route_gw 10.0.2.1 10.0.0.254
+
+ export RUMP_SERVER=$SOCK_PEER
+ $DEBUG && rump.netstat -rn -f inet
+
+ ### Testing Modified flag ###
+
+ #
+ # Teach a wrong route to 10.0.2.2
+ #
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route add 10.0.2.2 10.0.0.1
+ # Up, Gateway, Host, Static
+ check_route_flags 10.0.2.2 UGHS
+ check_route_gw 10.0.2.2 10.0.0.1
+
+ # Try ping 10.0.2.2
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.2
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Modified, Static
+ check_route_flags 10.0.2.2 UGHMS
+ check_route_gw 10.0.2.2 10.0.0.254
+}
+
+test_announce()
+{
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -proxy
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Static, proxy
+ check_route_flags 10.0.0/24 UGSp
+
+ # TODO test its behavior
+}
+
+add_test()
+{
+ local name=$1
+ local desc="$2"
+
+ atf_test_case "route_flags_${name}" cleanup
+ eval "route_flags_${name}_head() { \
+ atf_set \"descr\" \"${desc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ route_flags_${name}_body() { \
+ setup_local; \
+ setup_peer; \
+ test_${name}; \
+ rump_server_destroy_ifaces; \
+ }; \
+ route_flags_${name}_cleanup() { \
+ $DEBUG && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case "route_flags_${name}"
+}
+
+atf_init_test_cases()
+{
+
+ add_test lo "Tests route flags: loop back interface"
+ add_test connected "Tests route flags: connected route"
+ add_test default_gateway "Tests route flags: default gateway"
+ add_test static "Tests route flags: static route"
+ add_test blackhole "Tests route flags: blackhole route"
+ add_test reject "Tests route flags: reject route"
+ add_test icmp_redirect "Tests route flags: icmp redirect"
+ add_test announce "Tests route flags: announce flag"
+}
diff --git a/contrib/netbsd-tests/net/route/t_flags6.sh b/contrib/netbsd-tests/net/route/t_flags6.sh
new file mode 100755
index 0000000..e570829
--- /dev/null
+++ b/contrib/netbsd-tests/net/route/t_flags6.sh
@@ -0,0 +1,268 @@
+# $NetBSD: t_flags6.sh,v 1.12 2016/12/21 02:46:08 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+SOCK_PEER=unix://commsock2
+SOCK_GW=unix://commsock3
+BUS=bus1
+BUS2=bus2
+
+IP6_LOCAL=fc00::2
+IP6_PEER=fc00::1
+
+DEBUG=${DEBUG:-false}
+
+setup_local()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_LOCAL
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+}
+
+setup_peer()
+{
+
+ rump_server_start $SOCK_PEER netinet6
+ rump_server_add_iface $SOCK_PEER shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_PEER
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+}
+
+test_lo6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Up, Host, local
+ check_route_flags fe80::1 UHl
+
+ # Up, Host, local
+ check_route_flags ::1 UHl
+}
+
+test_connected6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Up, Host, local
+ check_route_flags $IP6_LOCAL UHl
+
+ # Up, Connected
+ check_route_flags fc00::/64 UC
+}
+
+test_default_gateway6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Static
+ check_route_flags default UGS
+}
+
+test_static6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Static route to host
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 fc00::1:1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Host, Static
+ check_route_flags fc00::1:1 UGHS
+
+ # Static route to network
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/24 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Static
+ check_route_flags fc00::/24 UGS
+}
+
+test_blackhole6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X 1 -c 1 $IP6_PEER
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ # Gateway must be lo0
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/64 ::1 -blackhole
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Blackhole, Static
+ check_route_flags fc00::/64 UGBS
+
+ atf_check -s not-exit:0 -o match:'100.0% packet loss' \
+ rump.ping6 -n -X 1 -c 1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Shouldn't be created
+ check_route_no_entry $IP6_PEER
+}
+
+test_reject6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/64 $IP6_PEER -reject
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Reject, Static
+ check_route_flags fc00::/64 UGRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
+ rump.ping6 -n -X 1 -c 1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Shouldn't be created
+ check_route_no_entry $IP6_PEER
+
+ # Gateway is lo0 (RTF_GATEWAY)
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/64 ::1 -reject
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Reject, Static
+ check_route_flags fc00::/64 UGRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \
+ rump.ping6 -n -X 1 -c 1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Shouldn't be created
+ check_route_no_entry $IP6_PEER
+
+ # Gateway is lo0 (RTF_HOST)
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -host fc00::/64 ::1 -iface -reject
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Host, Reject, Static
+ check_route_flags fc00:: UHRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
+ rump.ping6 -n -X 1 -c 1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ return 0
+}
+
+test_announce6()
+{
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/64 $IP6_PEER -proxy
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Static, proxy
+ check_route_flags fc00::/64 UGSp
+
+ # TODO test its behavior
+}
+
+add_test()
+{
+ local name=$1
+ local desc="$2"
+
+ atf_test_case "route_flags_${name}" cleanup
+ eval "route_flags_${name}_head() { \
+ atf_set \"descr\" \"${desc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ route_flags_${name}_body() { \
+ setup_local; \
+ setup_peer; \
+ test_${name}; \
+ rump_server_destroy_ifaces; \
+ }; \
+ route_flags_${name}_cleanup() { \
+ $DEBUG && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case "route_flags_${name}"
+}
+
+atf_init_test_cases()
+{
+
+ add_test lo6 "Tests route flags: loop back interface"
+ add_test connected6 "Tests route flags: connected route"
+ add_test default_gateway6 "Tests route flags: default gateway"
+ add_test static6 "Tests route flags: static route"
+ add_test blackhole6 "Tests route flags: blackhole route"
+ add_test reject6 "Tests route flags: reject route"
+ add_test announce6 "Tests route flags: announce flag"
+}
diff --git a/contrib/netbsd-tests/net/route/t_route.sh b/contrib/netbsd-tests/net/route/t_route.sh
new file mode 100755
index 0000000..053f48f
--- /dev/null
+++ b/contrib/netbsd-tests/net/route/t_route.sh
@@ -0,0 +1,406 @@
+# $NetBSD: t_route.sh,v 1.10 2016/12/21 02:46:08 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# non_subnet_gateway
+SOCK_CLIENT=unix://commsock1
+SOCK_GW=unix://commsock2
+BUS=bus1
+
+# command_get
+SOCKSRC=unix://commsock1
+SOCKFWD=unix://commsock2
+SOCKDST=unix://commsock3
+IP4SRC=10.0.1.2
+IP4SRCGW=10.0.1.1
+IP4DSTGW=10.0.2.1
+IP4DST=10.0.2.2
+IP4DST_BCAST=10.0.2.255
+IP6SRC=fc00:0:0:1::2
+IP6SRCGW=fc00:0:0:1::1
+IP6DSTGW=fc00:0:0:2::1
+IP6DST=fc00:0:0:2::2
+BUS_SRCGW=bus1
+BUS_DSTGW=bus2
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=1
+PING_OPTS="-n -c 1 -w $TIMEOUT"
+
+atf_test_case route_non_subnet_gateway cleanup
+route_non_subnet_gateway_head()
+{
+
+ atf_set "descr" "tests of a gateway not on the local subnet"
+ atf_set "require.progs" "rump_server"
+}
+
+route_non_subnet_gateway_body()
+{
+
+ rump_server_start $SOCK_CLIENT
+ rump_server_start $SOCK_GW
+
+ export RUMP_SERVER=${SOCK_GW}
+ rump_server_add_iface $SOCK_GW shmif0 $BUS
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ # The gateway knows the client
+ atf_check -s exit:0 -o match:'add net 10.0.0.1: gateway shmif0' \
+ rump.route add -net 10.0.0.1/32 -link -cloning -iface shmif0
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ export RUMP_SERVER=${SOCK_CLIENT}
+ rump_server_add_iface $SOCK_CLIENT shmif0 $BUS
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.1/32
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ # Don't know a route to the gateway yet
+ atf_check -s not-exit:0 -o match:'100.0% packet loss' \
+ -e match:'No route to host' rump.ping $PING_OPTS 192.168.0.1
+
+ # Teach a route to the gateway
+ atf_check -s exit:0 -o match:'add net 192.168.0.1: gateway shmif0' \
+ rump.route add -net 192.168.0.1/32 -link -cloning -iface shmif0
+ atf_check -s exit:0 -o match:'add net default: gateway 192.168.0.1' \
+ rump.route add default -ifa 10.0.0.1 192.168.0.1
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ # Be reachable to the gateway
+ atf_check -s exit:0 -o ignore rump.ping $PING_OPTS 192.168.0.1
+
+ rump_server_destroy_ifaces
+}
+
+route_non_subnet_gateway_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case route_command_get cleanup
+atf_test_case route_command_get6 cleanup
+route_command_get_head()
+{
+
+ atf_set "descr" "tests of route get command"
+ atf_set "require.progs" "rump_server"
+}
+
+route_command_get6_head()
+{
+
+ atf_set "descr" "tests of route get command (IPv6)"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_endpoint()
+{
+ local sock=${1}
+ local addr=${2}
+ local bus=${3}
+ local mode=${4}
+ local gw=${5}
+
+ export RUMP_SERVER=${sock}
+ rump_server_add_iface $sock shmif0 $bus
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
+ atf_check -s exit:0 -o ignore rump.route add default ${gw}
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ if $DEBUG; then
+ rump.ifconfig shmif0
+ rump.netstat -nr
+ fi
+}
+
+setup_forwarder()
+{
+ mode=${1}
+
+ rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW
+ rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW
+
+ export RUMP_SERVER=$SOCKFWD
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${IP4SRCGW} netmask 0xffffff00
+ atf_check -s exit:0 rump.ifconfig shmif1 inet ${IP4DSTGW} netmask 0xffffff00
+ fi
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ if $DEBUG; then
+ rump.netstat -nr
+ if [ $mode = "ipv6" ]; then
+ rump.sysctl net.inet6.ip6.forwarding
+ else
+ rump.sysctl net.inet.ip.forwarding
+ fi
+ fi
+}
+
+setup_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1
+}
+
+setup_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1
+}
+
+setup()
+{
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKFWD
+ rump_server_start $SOCKDST
+
+ setup_endpoint $SOCKSRC $IP4SRC $BUS_SRCGW ipv4 $IP4SRCGW
+ setup_endpoint $SOCKDST $IP4DST $BUS_DSTGW ipv4 $IP4DSTGW
+ setup_forwarder ipv4
+}
+
+setup6()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKFWD netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW ipv6 $IP6SRCGW
+ setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW ipv6 $IP6DSTGW
+ setup_forwarder ipv6
+}
+
+test_route_get()
+{
+
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.netstat -nr -f inet
+ $DEBUG && rump.arp -n -a
+
+ # Make sure an ARP cache to the gateway doesn't exist
+ rump.arp -d $IP4SRCGW
+
+ # Local
+ cat >./expect <<-EOF
+ route to: 10.0.1.2
+destination: 10.0.1.2
+ local addr: 10.0.1.2
+ interface: lo0
+ flags: <UP,HOST,DONE,LLINFO,LOCAL>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get $IP4SRC > ./output
+ $DEBUG && cat ./expect ./output
+ # XXX: omit the last line because expire is unstable on rump kernel.
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Neighbor
+ cat >./expect <<-EOF
+ route to: 10.0.1.1
+destination: 10.0.1.0
+ mask: 255.255.255.0
+ local addr: 10.0.1.2
+ interface: shmif0
+ flags: <UP,DONE,CONNECTED>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get $IP4SRCGW > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Remote host
+ cat >./expect <<-EOF
+ route to: 10.0.2.2
+destination: default
+ mask: default
+ gateway: 10.0.1.1
+ local addr: 10.0.1.2
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get $IP4DST > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Create a ARP cache
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRCGW
+
+ # Neighbor with a cache (no different from w/o cache)
+ cat >./expect <<-EOF
+ route to: 10.0.1.1
+destination: 10.0.1.0
+ mask: 255.255.255.0
+ local addr: 10.0.1.2
+ interface: shmif0
+ flags: <UP,DONE,CONNECTED>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get $IP4SRCGW > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+}
+
+test_route_get6()
+{
+
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.netstat -nr -f inet
+ $DEBUG && rump.ndp -n -a
+
+ # Make sure an ARP cache to the gateway doesn't exist
+ rump.ndp -d $IP6SRCGW
+
+ # Local
+ cat >./expect <<-EOF
+ route to: fc00:0:0:1::2
+destination: fc00:0:0:1::2
+ local addr: fc00:0:0:1::2
+ interface: lo0
+ flags: <UP,HOST,DONE,LLINFO,LOCAL>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get -inet6 $IP6SRC > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Neighbor
+ cat >./expect <<-EOF
+ route to: fc00:0:0:1::1
+destination: fc00:0:0:1::
+ mask: ffff:ffff:ffff:ffff::
+ local addr: fc00:0:0:1::2
+ interface: shmif0
+ flags: <UP,DONE,CONNECTED>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get -inet6 $IP6SRCGW > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Remote host
+ cat >./expect <<-EOF
+ route to: fc00:0:0:2::2
+destination: ::
+ mask: default
+ gateway: fc00:0:0:1::1
+ local addr: fc00:0:0:1::2
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get -inet6 $IP6DST > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Create a NDP cache
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6SRCGW
+
+ # Neighbor with a cache (no different from w/o cache)
+ cat >./expect <<-EOF
+ route to: fc00:0:0:1::1
+destination: fc00:0:0:1::
+ mask: ffff:ffff:ffff:ffff::
+ local addr: fc00:0:0:1::2
+ interface: shmif0
+ flags: <UP,DONE,CONNECTED>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get -inet6 $IP6SRCGW > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+}
+
+route_command_get_body()
+{
+
+ setup
+ setup_forwarding
+ test_route_get
+ rump_server_destroy_ifaces
+}
+
+route_command_get6_body()
+{
+
+ setup6
+ setup_forwarding6
+ test_route_get6
+ rump_server_destroy_ifaces
+}
+
+route_command_get_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+route_command_get6_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case route_non_subnet_gateway
+ atf_add_test_case route_command_get
+ atf_add_test_case route_command_get6
+}
diff --git a/contrib/netbsd-tests/rump/modautoload/t_modautoload.c b/contrib/netbsd-tests/rump/modautoload/t_modautoload.c
index f28ad55..2c21a90 100644
--- a/contrib/netbsd-tests/rump/modautoload/t_modautoload.c
+++ b/contrib/netbsd-tests/rump/modautoload/t_modautoload.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_modautoload.c,v 1.2 2014/03/10 22:38:53 pooka Exp $ */
+/* $NetBSD: t_modautoload.c,v 1.5 2016/09/14 03:19:11 ozaki-r Exp $ */
#include <sys/types.h>
#include <sys/mount.h>
@@ -33,6 +33,9 @@ ATF_TC_HEAD(modautoload, tc)
static void
mountkernfs(void)
{
+ bool old_autoload, new_autoload;
+ size_t old_len, new_len;
+ int error;
if (!rump_nativeabi_p())
atf_tc_skip("host kernel modules not supported");
@@ -41,6 +44,16 @@ mountkernfs(void)
if (rump_sys_mkdir("/kern", 0777) == -1)
atf_tc_fail_errno("mkdir /kern");
+
+ new_autoload = true;
+ old_len = sizeof(old_autoload);
+ new_len = sizeof(new_autoload);
+ error = sysctlbyname("kern.module.autoload",
+ &old_autoload, &old_len,
+ &new_autoload, new_len);
+ if (error != 0)
+ atf_tc_fail_errno("could not enable module autoload");
+
if (rump_sys_mount(MOUNT_KERNFS, "/kern", 0, NULL, 0) == -1)
atf_tc_fail_errno("could not mount kernfs");
}
diff --git a/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c b/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c
index 4e04c22..0ab3958 100644
--- a/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c
+++ b/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c
@@ -1,10 +1,11 @@
-/* $NetBSD: h_simpleserver.c,v 1.3 2011/01/14 13:23:15 pooka Exp $ */
+/* $NetBSD: h_simpleserver.c,v 1.4 2016/01/25 12:21:42 pooka Exp $ */
#include <sys/types.h>
#include <rump/rump.h>
#include <err.h>
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/contrib/netbsd-tests/rump/rumpkern/t_lwproc.c b/contrib/netbsd-tests/rump/rumpkern/t_lwproc.c
index dcdfdb6..6e78d02 100644
--- a/contrib/netbsd-tests/rump/rumpkern/t_lwproc.c
+++ b/contrib/netbsd-tests/rump/rumpkern/t_lwproc.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_lwproc.c,v 1.5 2011/01/02 12:58:17 pooka Exp $ */
+/* $NetBSD: t_lwproc.c,v 1.8 2017/01/10 22:36:29 christos Exp $ */
/*
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -29,6 +29,7 @@
#include <sys/types.h>
#include <sys/wait.h>
+#include <sys/stat.h>
#include <rump/rump.h>
#include <rump/rump_syscalls.h>
@@ -88,6 +89,7 @@ ATF_TC_BODY(proccreds, tc)
rump_init();
RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG));
l1 = rump_pub_lwproc_curlwp();
+ RZ(rump_pub_lwproc_newlwp(rump_sys_getpid()));
RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG));
l2 = rump_pub_lwproc_curlwp();
diff --git a/contrib/netbsd-tests/rump/rumpkern/t_sp.sh b/contrib/netbsd-tests/rump/rumpkern/t_sp.sh
index 9d11d2a..2c4404a 100755
--- a/contrib/netbsd-tests/rump/rumpkern/t_sp.sh
+++ b/contrib/netbsd-tests/rump/rumpkern/t_sp.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_sp.sh,v 1.12 2014/08/30 12:14:17 gson Exp $
+# $NetBSD: t_sp.sh,v 1.13 2016/08/10 23:47:14 kre Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -73,7 +73,8 @@ stress()
export RUMP_SERVER=unix://commsock
atf_check -s exit:0 rump_server \
- -lrumpvfs -lrumpnet -lrumpnet_net -lrumpnet_netinet ${RUMP_SERVER}
+ -lrumpvfs -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpdev \
+ ${RUMP_SERVER}
atf_check -s exit:0 -e ignore $(atf_get_srcdir)/h_client/h_stresscli $@
}
@@ -81,7 +82,7 @@ fork()
{
export RUMP_SERVER=unix://commsock
- atf_check -s exit:0 rump_server -lrumpvfs ${RUMP_SERVER}
+ atf_check -s exit:0 rump_server -lrumpvfs -lrumpdev ${RUMP_SERVER}
atf_check -s exit:0 $(atf_get_srcdir)/h_client/h_forkcli ${1}
}
diff --git a/contrib/netbsd-tests/rump/rumpnet/t_shmif.sh b/contrib/netbsd-tests/rump/rumpnet/t_shmif.sh
index dc463f2..4de8b4f 100755
--- a/contrib/netbsd-tests/rump/rumpnet/t_shmif.sh
+++ b/contrib/netbsd-tests/rump/rumpnet/t_shmif.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_shmif.sh,v 1.2 2013/09/09 19:27:49 pooka Exp $
+# $NetBSD: t_shmif.sh,v 1.3 2016/08/10 23:49:03 kre Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -39,7 +39,7 @@ startserver()
export RUMP_SERVER=unix://sock${1}
atf_check -s exit:0 rump_server -lrumpnet -lrumpnet_net \
- -lrumpnet_netinet -lrumpnet_shmif ${RUMP_SERVER}
+ -lrumpnet_netinet -lrumpnet_shmif -lrumpdev ${RUMP_SERVER}
atf_check -s exit:0 rump.ifconfig shmif0 create
atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
atf_check -s exit:0 rump.ifconfig shmif0 inet 1.1.1.${1}
diff --git a/contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c b/contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c
index 735c607..c94e5e1 100644
--- a/contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c
+++ b/contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_p2kifs.c,v 1.4 2014/02/07 15:29:23 hannken Exp $ */
+/* $NetBSD: t_p2kifs.c,v 1.5 2016/01/25 11:45:57 pooka Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -32,6 +32,7 @@
#include <sys/sysctl.h>
#include <rump/rump.h>
+#include <rump/rumpvnode_if.h>
#include <rump/rump_syscalls.h>
#include <atf-c.h>
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.label b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.label
new file mode 100644
index 0000000..dfb2b99
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.label
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - potato
+ 1058 9150 2 GPT part - tomato
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.normal
new file mode 100644
index 0000000..667c4d8
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.normal
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - EFI System
+ 1058 9150 2 GPT part - NetBSD FFSv1/FFSv2
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.uuid b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.uuid
new file mode 100644
index 0000000..77c41cc
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.uuid
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - c12a7328-f81f-11d2-ba4b-00a0c93ec93b
+ 1058 9150 2 GPT part - 49f48d5a-b10e-11dc-b99b-0019d1879648
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.backup b/contrib/netbsd-tests/sbin/gpt/gpt.backup
new file mode 100644
index 0000000..8c57949
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.backup
@@ -0,0 +1,1851 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>GPT_HDR</key>
+ <dict>
+ <key>entries</key>
+ <integer>128</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>revision</key>
+ <integer>0x10000</integer>
+ </dict>
+ <key>GPT_TBL</key>
+ <dict>
+ <key>gpt_array</key>
+ <array>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x421</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>1</integer>
+ <key>start</key>
+ <integer>0x22</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x27df</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>2</integer>
+ <key>start</key>
+ <integer>0x422</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>3</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>4</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>5</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>6</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>7</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>8</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>9</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>10</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>11</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>12</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>13</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>14</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>15</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>16</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>17</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>18</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>19</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>20</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>21</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>22</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>23</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>24</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>25</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>26</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>27</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>28</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>29</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>30</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>31</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>32</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>33</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>34</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>35</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>36</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>37</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>38</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>39</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>40</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>41</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>42</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>43</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>44</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>45</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>46</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>47</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>48</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>49</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>50</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>51</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>52</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>53</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>54</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>55</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>56</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>57</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>58</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>59</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>60</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>61</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>62</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>63</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>64</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>65</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>66</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>67</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>68</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>69</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>70</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>71</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>72</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>73</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>74</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>75</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>76</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>77</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>78</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>79</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>80</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>81</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>82</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>83</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>84</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>85</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>86</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>87</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>88</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>89</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>90</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>91</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>92</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>93</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>94</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>95</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>96</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>97</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>98</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>99</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>100</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>101</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>102</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>103</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>104</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>105</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>106</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>107</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>108</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>109</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>110</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>111</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>112</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>113</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>114</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>115</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>116</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>117</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>118</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>119</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>120</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>121</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>122</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>123</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>124</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>125</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>126</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>127</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>128</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ </array>
+ </dict>
+ <key>MBR</key>
+ <dict>
+ <key>code</key>
+ <data>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</data>
+ <key>mbr_array</key>
+ <array>
+ <dict>
+ <key>end_cylinder</key>
+ <integer>0xff</integer>
+ <key>end_head</key>
+ <integer>0xfe</integer>
+ <key>end_sector</key>
+ <integer>0xff</integer>
+ <key>flag</key>
+ <integer>0x0</integer>
+ <key>index</key>
+ <integer>0</integer>
+ <key>lba_size_high</key>
+ <integer>0x0</integer>
+ <key>lba_size_low</key>
+ <integer>0x2800</integer>
+ <key>lba_start_high</key>
+ <integer>0x0</integer>
+ <key>lba_start_low</key>
+ <integer>0x1</integer>
+ <key>start_cylinder</key>
+ <integer>0x0</integer>
+ <key>start_head</key>
+ <integer>0x0</integer>
+ <key>start_sector</key>
+ <integer>0x2</integer>
+ <key>type</key>
+ <integer>0xee</integer>
+ </dict>
+ </array>
+ </dict>
+ <key>sector_size</key>
+ <integer>512</integer>
+</dict>
+</plist>
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.disklabel b/contrib/netbsd-tests/sbin/gpt/gpt.disklabel
new file mode 100644
index 0000000..4a598ee
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.disklabel
@@ -0,0 +1,27 @@
+# gpt.disk:
+type: ESDI
+disk: WDC WD2500SD-01K
+label: fictitious
+flags:
+bytes/sector: 512
+sectors/track: 63
+tracks/cylinder: 16
+sectors/cylinder: 1000
+cylinders: 10
+total sectors: 10000
+rpm: 3600
+interleave: 1
+trackskew: 0
+cylinderskew: 0
+headswitch: 0 # microseconds
+track-to-track seek: 0 # microseconds
+drivedata: 0
+
+6 partitions:
+# size offset fstype [fsize bsize cpg/sgs]
+ a: 500 63 4.2BSD 1024 8192 0 # (Cyl. 0*- 0*)
+ b: 1000 563 swap # (Cyl. 0*- 1*)
+ c: 1000 63 unused 0 0 # (Cyl. 0*- 1*)
+ d: 1063 0 unused 0 0 # (Cyl. 0 - 1*)
+ e: 1000 1563 4.2BSD 1024 8192 0 # (Cyl. 1*- 2*)
+ f: 400 2563 MSDOS # (Cyl. 2*- 2*)
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.disklabel.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.disklabel.show.normal
new file mode 100644
index 0000000..5d93707
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.disklabel.show.normal
@@ -0,0 +1,12 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 29 Unused
+ 63 500 1 GPT part - NetBSD FFSv1/FFSv2
+ 563 1000 2 GPT part - NetBSD swap
+ 1563 1000 3 GPT part - NetBSD FFSv1/FFSv2
+ 2563 400 4 GPT part - Windows basic data
+ 2963 7245 Unused
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.empty.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.empty.show.normal
new file mode 100644
index 0000000..e55c5a9
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.empty.show.normal
@@ -0,0 +1,7 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 10174 Unused
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.removepart.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.removepart.show.normal
new file mode 100644
index 0000000..bf89431
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.removepart.show.normal
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 Unused
+ 1058 9150 2 GPT part - NetBSD FFSv1/FFSv2
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.resizedisk.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.resizedisk.show.normal
new file mode 100644
index 0000000..a328028
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.resizedisk.show.normal
@@ -0,0 +1,9 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - EFI System
+ 1058 9150 2 GPT part - NetBSD FFSv1/FFSv2
+ 10208 10240 Unused
+ 20448 32 Sec GPT table
+ 20480 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.resizepart.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.resizepart.show.normal
new file mode 100644
index 0000000..6228a63
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.resizepart.show.normal
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - EFI System
+ 1058 19390 2 GPT part - NetBSD FFSv1/FFSv2
+ 20448 32 Sec GPT table
+ 20480 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/t_gpt.sh b/contrib/netbsd-tests/sbin/gpt/t_gpt.sh
new file mode 100755
index 0000000..0381313
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/t_gpt.sh
@@ -0,0 +1,318 @@
+# $NetBSD: t_gpt.sh,v 1.15 2016/03/08 08:04:48 joerg Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Christos Zoulas
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+bootblk=/usr/mdec/gptmbr.bin
+size=10240
+newsize=20480
+shdr=34
+disk=gpt.disk
+uuid="........-....-....-....-............"
+zero="00000000-0000-0000-0000-000000000000"
+src=$(atf_get_srcdir)
+
+silence() {
+ atf_check -s exit:0 -o empty -e empty "$@"
+}
+
+inline() {
+ local inline="$1"
+ shift
+ atf_check -s exit:0 -e empty -o inline:"$inline" "$@"
+}
+
+match() {
+ local match="$1"
+ shift
+ atf_check -s exit:0 -e empty -o match:"$match" "$@"
+}
+
+matcherr() {
+ local match="$1"
+ shift
+ atf_check -s exit:0 -o empty -e match:"$match" "$@"
+}
+
+file() {
+ local file="$1"
+ shift
+ atf_check -s exit:0 -e empty -o file:"$file" "$@"
+}
+
+save() {
+ local save="$1"
+ shift
+ atf_check -s exit:0 -e empty -o save:"$save" "$@"
+}
+
+zerodd() {
+ silence dd conv=notrunc msgfmt=quiet if=/dev/zero of="$disk" "$@"
+}
+
+prepare() {
+ rm -f "$disk"
+ zerodd seek="$size" count=1
+}
+
+prepare_2part() {
+ prepare
+ silence gpt create "$disk"
+ match "$(partaddmsg 1 34 1024)" gpt add -t efi -s 1024 "$disk"
+ match "$(partaddmsg 2 1058 9150)" gpt add "$disk"
+}
+
+# Calling this from tests does not work. BUG!
+check_2part() {
+ file "$src/gpt.2part.show.normal" gpt show "$disk"
+ file "$src/gpt.2part.show.uuid" gpt show -u "$disk"
+}
+
+partaddmsg() {
+ echo "^$disk: Partition $1 added: $uuid $2 $3\$"
+}
+
+partresmsg() {
+ echo "^$disk: Partition $1 resized: $2 $3\$"
+}
+
+partremmsg() {
+ echo "^$disk: Partition $1 removed\$"
+}
+
+partlblmsg() {
+ echo "^$disk: Partition $1 label changed\$"
+}
+
+partbootmsg() {
+ echo "^$disk: Partition $1 marked as bootable\$"
+}
+
+recovermsg() {
+ echo "^$disk: Recovered $1 GPT [a-z]* from $2\$"
+}
+
+migratemsg() {
+ echo -n "^gpt: $disk: Partition $1 unknown type MSDOS, "
+ echo 'using "Microsoft Basic Data"$'
+}
+
+attrmsg() {
+ echo "^$disk: Partition $1 attributes updated\$"
+}
+
+typemsg() {
+ echo "^$disk: Partition $1 type changed\$"
+}
+
+atf_test_case create_empty
+create_empty_head() {
+ atf_set "descr" "Create empty disk"
+}
+
+create_empty_body() {
+ prepare
+ silence gpt create "$disk"
+ file "$src/gpt.empty.show.normal" gpt show "$disk"
+}
+
+atf_test_case create_2part
+create_2part_head() {
+ atf_set "descr" "Create 2 partition disk"
+}
+
+create_2part_body() {
+ prepare_2part
+ check_2part
+}
+
+atf_test_case change_attr_2part
+change_attr_2part_head() {
+ atf_set "descr" "Change the attribute of 2 partition disk"
+}
+
+change_attr_2part_body() {
+ prepare_2part
+ match "$(attrmsg 1)" gpt set -i 1 -a biosboot,bootme "$disk"
+ save attr gpt show -i 1 "$disk"
+ match "^Attributes: biosboot, bootme\$" tail -1 attr
+ match "$(attrmsg 1)" gpt unset -i 1 -a biosboot,bootme "$disk"
+ save attr gpt show -i 1 "$disk"
+ match "^Attributes: None\$" tail -1 attr
+}
+
+atf_test_case change_type_2part
+change_type_2part_head() {
+ atf_set "descr" "Change the partition type type of 2 partition disk"
+}
+
+change_type_2part_body() {
+ prepare_2part
+ match "$(typemsg 1)" gpt type -i 1 -T apple "$disk"
+ save type gpt show -i 1 "$disk"
+ inline "Type: apple (48465300-0000-11aa-aa11-00306543ecac)\n" \
+ grep "^Type:" type
+ match "$(typemsg 1)" gpt type -i 1 -T efi "$disk"
+ save type gpt show -i 1 "$disk"
+ inline "Type: efi (c12a7328-f81f-11d2-ba4b-00a0c93ec93b)\n" \
+ grep "^Type:" type
+}
+
+atf_test_case backup_2part
+backup_2part_head() {
+ atf_set "descr" "Backup 2 partition disk"
+}
+
+backup_2part_body() {
+ prepare_2part
+ save test.backup gpt backup "$disk"
+ file "$src/gpt.backup" sed -e "s/$uuid/$zero/g" "test.backup"
+}
+
+atf_test_case restore_2part
+restore_2part_head() {
+ atf_set "descr" "Restore 2 partition disk"
+}
+
+restore_2part_body() {
+ prepare_2part
+ save test.backup gpt backup "$disk"
+ prepare
+ silence gpt restore -i test.backup "$disk"
+ check_2part
+}
+
+atf_test_case recover_backup
+recover_backup_head() {
+ atf_set "descr" "Recover the backup GPT header and table"
+}
+
+recover_backup_body() {
+ prepare_2part
+ zerodd seek="$((size - shdr))" count="$shdr"
+ match "$(recovermsg secondary primary)" gpt recover "$disk"
+ check_2part
+}
+
+atf_test_case recover_primary
+recover_primary_head() {
+ atf_set "descr" "Recover the primary GPT header and table"
+}
+
+recover_primary_body() {
+ prepare_2part
+ zerodd seek=1 count="$shdr"
+ match "$(recovermsg primary secondary)" gpt recover "$disk"
+ check_2part
+}
+
+atf_test_case resize_2part
+resize_2part_head() {
+ atf_set "descr" "Resize a 2 partition disk and partition"
+}
+
+resize_2part_body() {
+ prepare_2part
+ zerodd seek="$newsize" count=1
+ silence gpt resizedisk "$disk"
+ file "$src/gpt.resizedisk.show.normal" gpt show "$disk"
+ match "$(partresmsg 2 1058 19390)" gpt resize -i 2 "$disk"
+ file "$src/gpt.resizepart.show.normal" gpt show "$disk"
+}
+
+atf_test_case remove_2part
+remove_2part_head() {
+ atf_set "descr" "Remove a partition from a 2 partition disk"
+}
+
+remove_2part_body() {
+ prepare_2part
+ match "$(partremmsg 1)" -e empty gpt remove \
+ -i 1 "$disk"
+ file "$src/gpt.removepart.show.normal" \
+ gpt show "$disk"
+}
+
+atf_test_case label_2part
+label_2part_head() {
+ atf_set "descr" "Label partitions in a 2 partition disk"
+}
+
+label_2part_body() {
+ prepare_2part
+ match "$(partlblmsg 1)" gpt label -i 1 -l potato "$disk"
+ match "$(partlblmsg 2)" gpt label -i 2 -l tomato "$disk"
+ file "$src/gpt.2part.show.label" \
+ gpt show -l "$disk"
+}
+
+atf_test_case bootable_2part
+bootable_2part_head() {
+ atf_set "descr" "Make partition 2 bootable in a 2 partition disk"
+ atf_set "require.files" "$bootblk"
+}
+
+bootable_2part_body() {
+ prepare_2part
+ match "$(partbootmsg 2)" gpt biosboot -i 2 "$disk"
+ local bootsz="$(ls -l "$bootblk" | awk '{ print $5 }')"
+ silence dd msgfmt=quiet if="$disk" of=bootblk bs=1 count="$bootsz"
+ silence cmp "$bootblk" bootblk
+ save bootattr gpt show -i 2 "$disk"
+ match "^Attributes: biosboot\$" tail -1 bootattr
+}
+
+atf_test_case migrate_disklabel
+migrate_disklabel_head() {
+ atf_set "descr" "Migrate an MBR+disklabel disk to GPT"
+}
+
+migrate_disklabel_body() {
+ prepare
+ silence fdisk -fi "$disk"
+ silence fdisk -fu0s "169/63/$((size / 10))" "$disk"
+ silence disklabel -R "$disk" "$src/gpt.disklabel"
+ matcherr "$(migratemsg 5)" gpt migrate "$disk"
+ file "$src/gpt.disklabel.show.normal" gpt show "$disk"
+}
+
+atf_init_test_cases() {
+ atf_add_test_case create_empty
+ atf_add_test_case create_2part
+ atf_add_test_case change_attr_2part
+ atf_add_test_case change_type_2part
+ atf_add_test_case backup_2part
+ atf_add_test_case remove_2part
+ atf_add_test_case restore_2part
+ atf_add_test_case recover_backup
+ atf_add_test_case recover_primary
+ atf_add_test_case resize_2part
+ atf_add_test_case label_2part
+ atf_add_test_case bootable_2part
+ atf_add_test_case migrate_disklabel
+}
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/common.sh b/contrib/netbsd-tests/sbin/resize_ffs/common.sh
index 1b1d5da..80ebc65 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/common.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/common.sh
@@ -146,6 +146,8 @@ resize_ffs()
fi
umount mnt
+ # Check that resize needed
+ atf_check -s exit:0 -o ignore resize_ffs -c -y -s ${nsize} ${IMG}
atf_check -s exit:0 -o ignore resize_ffs -y -s ${nsize} ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
atf_check -s exit:0 -e ignore rump_ffs ${IMG} mnt
@@ -155,5 +157,7 @@ resize_ffs()
# checking everything because we don't delete on grow
check_data_range 1 ${numdata}
fi
+ # Check that no resize needed
+ atf_check -s exit:1 -o ignore resize_ffs -c -y -s ${nsize} ${IMG}
umount mnt
}
diff --git a/contrib/netbsd-tests/bin/sh/t_compexit.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_check.sh
index 019b740..5b92292 100755
--- a/contrib/netbsd-tests/bin/sh/t_compexit.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_check.sh
@@ -1,8 +1,11 @@
-# $NetBSD: t_compexit.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_check.sh,v 1.1 2015/03/29 19:37:02 chopps Exp $
#
-# Copyright (c) 2007 The NetBSD Foundation, Inc.
+# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Christian E. Hopps
+#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
@@ -25,39 +28,29 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-# The standard
-# http://www.opengroup.org/onlinepubs/007904975/utilities/set.html
-# says:
-#
-# -e
-#
-# When this option is on, if a simple command fails for any of the
-# reasons listed in Consequences of Shell Errors or returns an exit
-# status value >0, and is not part of the compound list following a
-# while, until, or if keyword, and is not a part of an AND or OR list,
-# and is not a pipeline preceded by the ! reserved word, then the shell
-# shall immediately exit.
+atf_test_case check_grow
-crud() {
- set -e
- for x in a
- do
- BAR="foo"
- false && echo true
- echo mumble
- done
+check_grow_head() {
+ atf_set "descr" "Tests check for room to grow in image"
+ atf_set "require.user" "root"
}
-atf_test_case set_e
-set_e_head() {
- atf_set "descr" "Tests that 'set -e' turns on error detection" \
- "and that it behaves as defined by the standard"
-}
-set_e_body() {
- foo=`crud`
- atf_check_equal 'x$foo' 'xmumble'
+check_grow_body() {
+ echo "***resize_ffs check grow test"
+
+ atf_check -o ignore -e ignore newfs -V1 -s 6144 -F ${IMG}
+ dd if=/dev/zero count=2048 >> ${IMG}
+
+ # test room to grow, grow then check that we did.
+ atf_check -s exit:0 -o match:"newsize: 8192 oldsize: 6144" resize_ffs -v -c -y ${IMG}
+ atf_check -s exit:0 -o ignore resize_ffs -y ${IMG}
+ atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 -o match:"already 8192 blocks" \
+ resize_ffs -v -c -y ${IMG}
}
-atf_init_test_cases() {
- atf_add_test_case set_e
+atf_init_test_cases()
+{
+ setupvars
+ atf_add_test_case check_grow
}
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/t_grow.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_grow.sh
index 31d117b..08512d1 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/t_grow.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_grow.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_grow.sh,v 1.8 2011/01/11 00:50:02 riz Exp $
+# $NetBSD: t_grow.sh,v 1.9 2015/03/29 19:37:02 chopps Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -131,8 +131,10 @@ grow_ffsv1_partial_cg_body()
atf_check -o ignore -e ignore newfs -V1 -s 4000 -F ${IMG}
# size to grow to is chosen to cause partial cg
+ atf_check -s exit:0 -o ignore resize_ffs -c -y -s 5760 ${IMG}
atf_check -s exit:0 -o ignore resize_ffs -y -s 5760 ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 -o ignore resize_ffs -c -y -s 5760 ${IMG}
}
atf_init_test_cases()
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh
index 07dc514..3dba236 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_grow_swapped.sh,v 1.2 2011/01/11 00:50:02 riz Exp $
+# $NetBSD: t_grow_swapped.sh,v 1.3 2015/03/29 19:37:02 chopps Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -130,8 +130,10 @@ grow_ffsv1_partial_cg_body()
atf_check -o ignore -e ignore newfs -B be -V1 -s 4000 -F ${IMG}
# size to grow to is chosen to cause partial cg
+ atf_check -s exit:0 -o ignore resize_ffs -c -y -s 5760 ${IMG}
atf_check -s exit:0 -o ignore resize_ffs -y -s 5760 ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 -o ignore resize_ffs -c -y -s 5760 ${IMG}
}
atf_init_test_cases()
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh
index 1b66759..8a9cf19 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_shrink.sh,v 1.7 2011/01/05 02:25:27 riz Exp $
+# $NetBSD: t_shrink.sh,v 1.8 2015/03/29 19:37:02 chopps Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -112,8 +112,10 @@ shrink_ffsv1_partial_cg_body()
atf_check -o ignore -e ignore newfs -V1 -F -s 5760 ${IMG}
# shrink so there's a partial cg at the end
+ atf_check -s exit:0 resize_ffs -c -s 4000 -y ${IMG}
atf_check -s exit:0 resize_ffs -s 4000 -y ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 resize_ffs -c -s 4000 -y ${IMG}
}
atf_init_test_cases()
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh
index 30e4add..50dc436 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_shrink_swapped.sh,v 1.1 2011/01/05 02:25:27 riz Exp $
+# $NetBSD: t_shrink_swapped.sh,v 1.2 2015/03/29 19:37:02 chopps Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -112,8 +112,10 @@ shrink_ffsv1_partial_cg_body()
atf_check -o ignore -e ignore newfs -V1 -F -s 5760 ${IMG}
# shrink so there's a partial cg at the end
+ atf_check -s exit:0 resize_ffs -c -s 4000 -y ${IMG}
atf_check -s exit:0 resize_ffs -s 4000 -y ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 resize_ffs -c -s 4000 -y ${IMG}
}
atf_init_test_cases()
diff --git a/contrib/netbsd-tests/sbin/sysctl/t_perm.sh b/contrib/netbsd-tests/sbin/sysctl/t_perm.sh
index 6acfd19..25b2975 100755
--- a/contrib/netbsd-tests/sbin/sysctl/t_perm.sh
+++ b/contrib/netbsd-tests/sbin/sysctl/t_perm.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_perm.sh,v 1.6 2012/03/18 09:46:50 jruoho Exp $
+# $NetBSD: t_perm.sh,v 1.7 2016/06/17 03:55:35 pgoyette Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -39,6 +39,7 @@ clean() {
sysctl_write() {
deadbeef="3735928559"
+ deadbeef_signed="-559038737"
sysctl $1 | cut -d= -f1 > $file
@@ -63,7 +64,7 @@ sysctl_write() {
# A functional verification that $deadbeef
# was not actually written to the node.
#
- if [ ! -z $(sysctl $1 | grep $deadbeef) ]; then
+ if [ ! -z $(sysctl $1 | grep -e $deadbeef -e $deadbeef_signed) ]; then
atf_fail "value was written"
fi
}
diff --git a/contrib/netbsd-tests/share/mk/t_lib.sh b/contrib/netbsd-tests/share/mk/t_lib.sh
index 5f18e14..0187aa2 100755
--- a/contrib/netbsd-tests/share/mk/t_lib.sh
+++ b/contrib/netbsd-tests/share/mk/t_lib.sh
@@ -31,6 +31,12 @@ defaults__build_and_install_body() {
create_c_module module1 first
create_c_module module2 second
+ CC=gcc
+ if [ ! -e /usr/bin/gcc -a -e /usr/bin/clang ]; then
+ export HAVE_LLVM=yes
+ CC=clang
+ fi
+
cat >Makefile <<EOF
LIB = two-modules
SRCS = module1.c module2.c
@@ -44,7 +50,7 @@ EOF
atf_check -o ignore make install
create_main_using_modules main.c module1.h:first module2.h:second
- atf_check -o ignore gcc -I. -Lroot/usr/lib -o main main.c -ltwo-modules
+ atf_check -o ignore ${CC} -I. -Lroot/usr/lib -o main main.c -ltwo-modules
atf_check -o inline:'module1\nmodule2\n' ./main
}
diff --git a/contrib/netbsd-tests/share/mk/t_prog.sh b/contrib/netbsd-tests/share/mk/t_prog.sh
index d004070..e21f1f6 100755
--- a/contrib/netbsd-tests/share/mk/t_prog.sh
+++ b/contrib/netbsd-tests/share/mk/t_prog.sh
@@ -31,6 +31,10 @@ defaults__build_and_install_head() {
atf_set "require.progs" "/usr/bin/mandoc"
}
defaults__build_and_install_body() {
+ if [ ! -e /usr/bin/gcc -a -e /usr/bin/clang ]; then
+ export HAVE_LLVM=yes
+ fi
+
cat >hello.c <<EOF
#include <stdio.h>
int main(void) { printf("Hello, test!\n"); return 0; }
@@ -61,6 +65,10 @@ EOF
atf_test_case without_man__build_and_install
without_man__build_and_install_body() {
+ if [ ! -e /usr/bin/gcc -a -e /usr/bin/clang ]; then
+ export HAVE_LLVM=yes
+ fi
+
cat >hello.c <<EOF
#include <stdio.h>
int main(void) { printf("Hello, test!\n"); return 0; }
diff --git a/contrib/netbsd-tests/share/mk/t_test.sh b/contrib/netbsd-tests/share/mk/t_test.sh
index c8bb1f3..08681d8 100755
--- a/contrib/netbsd-tests/share/mk/t_test.sh
+++ b/contrib/netbsd-tests/share/mk/t_test.sh
@@ -34,6 +34,10 @@
# The second argument is the name of the test program, without an extension.
# The corresponding source file must exist in the current directory.
one_test() {
+
+ if [ ! -e /usr/bin/gcc -a -e /usr/bin/clang ]; then
+ export HAVE_LLVM=yes
+ fi
local lang="${1}"; shift
local name="${1}"; shift
diff --git a/contrib/netbsd-tests/sys/net/t_print.c b/contrib/netbsd-tests/sys/net/t_print.c
new file mode 100644
index 0000000..ff17895
--- /dev/null
+++ b/contrib/netbsd-tests/sys/net/t_print.c
@@ -0,0 +1,178 @@
+/* $NetBSD: t_print.c,v 1.2 2016/08/27 11:30:49 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_print.c,v 1.2 2016/08/27 11:30:49 christos Exp $");
+
+#include "net/dl_print.c"
+
+#include <atf-c.h>
+
+static const struct {
+ struct dl_addr ia;
+ const char *str;
+ int len;
+} tst[] = {
+ {
+ {
+ .dl_type = 6,
+ .dl_nlen = 0,
+ .dl_alen = 6,
+ .dl_slen = 0,
+ .dl_data = {
+ (char)0x01, (char)0xa2, (char)0x03,
+ (char)0xc4, (char)0x05, (char)0xf6,
+ },
+ },
+ "/6#01:a2:03:c4:05:f6",
+ 20,
+ },
+ {
+ {
+ .dl_type = 24,
+ .dl_nlen = 3,
+ .dl_alen = 6,
+ .dl_slen = 0,
+ .dl_data = {
+ 'l', 'o', '0',
+ (char)0x11, (char)0x22, (char)0x33,
+ (char)0x44, (char)0x55, (char)0x66,
+ },
+ },
+ "lo0/24#11:22:33:44:55:66",
+ 24,
+ },
+ {
+ {
+ .dl_type = 24,
+ .dl_nlen = 7,
+ .dl_alen = 1,
+ .dl_slen = 0,
+ .dl_data = {
+ 'n', 'p', 'f', 'l', 'o', 'g', '0', (char)0xa5,
+ },
+ },
+ "npflog0/24#a5",
+ 13,
+ },
+ {
+ {
+ .dl_type = 0,
+ .dl_nlen = 0,
+ .dl_alen = 0,
+ .dl_slen = 0,
+ .dl_data = {
+ '\0'
+ },
+ },
+ "/0#",
+ 3,
+ },
+};
+
+
+ATF_TC(dl_print);
+ATF_TC_HEAD(dl_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of link address");
+}
+
+ATF_TC_BODY(dl_print, tc)
+{
+ char buf[LINK_ADDRSTRLEN];
+ int r;
+ size_t l = sizeof(buf);
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = dl_print(buf, l, &tst[i].ia);
+ ATF_REQUIRE_STREQ(buf, tst[i].str);
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+
+ l = 4;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = dl_print(buf, l, &tst[i].ia);
+ ATF_CHECK(strncmp(buf, tst[i].str, l - 1) == 0);
+ if (r > (int)l)
+ ATF_REQUIRE_EQ(buf[l - 1], '\0');
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+}
+
+ATF_TC(sdl_print);
+ATF_TC_HEAD(sdl_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of sockaddr_dl");
+}
+
+ATF_TC_BODY(sdl_print, tc)
+{
+ char buf[1024];
+ char res[1024];
+ int r, e;
+ size_t l = sizeof(buf);
+ struct sockaddr_dl sdl;
+
+ memset(&sdl, 0, sizeof(sdl));
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ memcpy(&sdl.sdl_addr, &tst[i].ia, sizeof(sdl.sdl_addr));
+ sdl.sdl_index = (uint16_t)i;
+ r = sdl_print(buf, l, &sdl);
+ if (i == 3)
+ e = snprintf(res, l, "link#%zu", i);
+ else
+ e = snprintf(res, l, "[%s]:%zu", tst[i].str, i);
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+
+ l = 8;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ memcpy(&sdl.sdl_addr, &tst[i].ia, sizeof(sdl.sdl_addr));
+ sdl.sdl_index = (uint16_t)i;
+ r = sdl_print(buf, l, &sdl);
+ if (i == 3)
+ e = snprintf(res, l, "link#%zu", i);
+ else
+ e = snprintf(res, l, "[%s]:%zu", tst[i].str, i);
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, dl_print);
+ ATF_TP_ADD_TC(tp, sdl_print);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/sys/netatalk/t_print.c b/contrib/netbsd-tests/sys/netatalk/t_print.c
new file mode 100644
index 0000000..2e506c6
--- /dev/null
+++ b/contrib/netbsd-tests/sys/netatalk/t_print.c
@@ -0,0 +1,135 @@
+/* $NetBSD: t_print.c,v 1.1 2014/12/02 19:48:21 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_print.c,v 1.1 2014/12/02 19:48:21 christos Exp $");
+
+#include "netatalk/at_print.c"
+
+#include <atf-c.h>
+
+static const struct {
+ struct at_addr ia;
+ const char *str;
+ int len;
+} tst[] = {
+ {
+ { 0, 0 },
+ "0.0",
+ 3,
+ },
+ {
+ { htons(3), 255 },
+ "3.255",
+ 5,
+ },
+};
+
+
+ATF_TC(at_print);
+ATF_TC_HEAD(at_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of struct at_addr");
+}
+
+ATF_TC_BODY(at_print, tc)
+{
+ char buf[ATALK_ADDRSTRLEN];
+ int r;
+ size_t l = sizeof(buf);
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = at_print(buf, l, &tst[i].ia);
+ ATF_REQUIRE_STREQ(buf, tst[i].str);
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+
+ l = 4;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = at_print(buf, l, &tst[i].ia);
+ ATF_CHECK(strncmp(buf, tst[i].str, l - 1) == 0);
+ if (r > (int)l)
+ ATF_REQUIRE_EQ(buf[l - 1], '\0');
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+}
+
+ATF_TC(sat_print);
+ATF_TC_HEAD(sat_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of sockaddr_at");
+}
+
+ATF_TC_BODY(sat_print, tc)
+{
+ char buf[1024];
+ char res[1024];
+ int r, e;
+ size_t l = sizeof(buf);
+ struct sockaddr_at sat;
+
+ memset(&sat, 0, sizeof(sat));
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sat.sat_addr = tst[i].ia;
+ sat.sat_port = (uint8_t)i;
+ r = sat_print(buf, l, &sat);
+ if (i == 0)
+ e = snprintf(res, sizeof(res), "%s", tst[i].str);
+ else
+ e = snprintf(res, sizeof(res), "%s:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+
+ l = 8;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sat.sat_addr = tst[i].ia;
+ sat.sat_port = (uint8_t)i;
+ r = sat_print(buf, l, &sat);
+ if (i == 0)
+ e = snprintf(res, l, "%s", tst[i].str);
+ else
+ e = snprintf(res, l, "%s:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, at_print);
+ ATF_TP_ADD_TC(tp, sat_print);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/sys/netinet/t_print.c b/contrib/netbsd-tests/sys/netinet/t_print.c
new file mode 100644
index 0000000..6a0d913a
--- /dev/null
+++ b/contrib/netbsd-tests/sys/netinet/t_print.c
@@ -0,0 +1,144 @@
+/* $NetBSD: t_print.c,v 1.2 2014/12/03 13:10:49 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_print.c,v 1.2 2014/12/03 13:10:49 christos Exp $");
+
+#include "netinet/in_print.c"
+
+#include <atf-c.h>
+
+static const struct {
+ struct in_addr ia;
+ const char *str;
+ int len;
+} tst[] = {
+ {
+ { .s_addr = ntohl(INADDR_LOOPBACK) },
+ "127.0.0.1",
+ 9,
+ },
+ {
+ { .s_addr = ntohl(INADDR_ANY) },
+ "0.0.0.0",
+ 7,
+ },
+ {
+ { .s_addr = ntohl(IN_CLASSC_NET) },
+ "255.255.255.0",
+ 13,
+ },
+ {
+ { .s_addr = ntohl(INADDR_ALLHOSTS_GROUP) },
+ "224.0.0.1",
+ 9,
+ },
+};
+
+
+ATF_TC(in_print);
+ATF_TC_HEAD(in_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of struct in_addr");
+}
+
+ATF_TC_BODY(in_print, tc)
+{
+ char buf[INET_ADDRSTRLEN];
+ int r;
+ size_t l = sizeof(buf);
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = in_print(buf, l, &tst[i].ia);
+ ATF_REQUIRE_STREQ(buf, tst[i].str);
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+
+ l = 8;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = in_print(buf, l, &tst[i].ia);
+ ATF_CHECK(strncmp(buf, tst[i].str, l - 1) == 0);
+ ATF_REQUIRE_EQ(buf[l - 1], '\0');
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+}
+
+ATF_TC(sin_print);
+ATF_TC_HEAD(sin_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of sockaddr_in");
+}
+
+ATF_TC_BODY(sin_print, tc)
+{
+ char buf[1024];
+ char res[1024];
+ int r, e;
+ size_t l = sizeof(buf);
+ struct sockaddr_in sin;
+ memset(&sin, 0, sizeof(sin));
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sin.sin_addr = tst[i].ia;
+ sin.sin_port = (in_port_t)htons(i);
+ r = sin_print(buf, l, &sin);
+ if (i == 0)
+ e = snprintf(res, sizeof(res), "%s", tst[i].str);
+ else
+ e = snprintf(res, sizeof(res), "%s:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+
+ l = 14;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sin.sin_addr = tst[i].ia;
+ sin.sin_port = (in_port_t)htons(i);
+ r = sin_print(buf, l, &sin);
+ if (i == 0)
+ e = snprintf(res, l, "%s", tst[i].str);
+ else
+ e = snprintf(res, l, "%s:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, in_print);
+ ATF_TP_ADD_TC(tp, sin_print);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/sys/netinet6/t_print.c b/contrib/netbsd-tests/sys/netinet6/t_print.c
new file mode 100644
index 0000000..629c23f
--- /dev/null
+++ b/contrib/netbsd-tests/sys/netinet6/t_print.c
@@ -0,0 +1,154 @@
+/* $NetBSD: t_print.c,v 1.2 2014/12/03 13:10:49 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_print.c,v 1.2 2014/12/03 13:10:49 christos Exp $");
+
+#include "netinet6/in6_print.c"
+#include "netinet/in_print.c"
+
+#include <atf-c.h>
+
+static const struct {
+ struct in6_addr ia;
+ const char *str;
+ int len;
+} tst[] = {
+ {
+ IN6ADDR_ANY_INIT,
+ "::",
+ 2,
+ },
+ {
+ IN6ADDR_LOOPBACK_INIT,
+ "::1",
+ 3,
+ },
+ {
+ IN6ADDR_NODELOCAL_ALLNODES_INIT,
+ "ff01::1",
+ 7,
+ },
+ {
+ {{{ 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }}},
+ "1020:3040:5060:7080:102:304:506:708",
+ 35,
+ },
+ {
+ {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0x88, 0x44, 0x22, 0x11 }}},
+ "::ffff:136.68.34.17",
+ 19,
+ },
+};
+
+
+ATF_TC(in6_print);
+ATF_TC_HEAD(in6_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of struct in6_addr");
+}
+
+ATF_TC_BODY(in6_print, tc)
+{
+ char buf[INET6_ADDRSTRLEN];
+ int r;
+ size_t l = sizeof(buf);
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = in6_print(buf, l, &tst[i].ia);
+ ATF_REQUIRE_STREQ(buf, tst[i].str);
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+
+ l = 12;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = in6_print(buf, l, &tst[i].ia);
+ ATF_CHECK(strncmp(buf, tst[i].str, l - 1) == 0);
+ if (r > (int)l)
+ ATF_REQUIRE_EQ(buf[l - 1], '\0');
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+}
+
+ATF_TC(sin6_print);
+ATF_TC_HEAD(sin6_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of sockaddr_in6");
+}
+
+ATF_TC_BODY(sin6_print, tc)
+{
+ char buf[1024];
+ char res[1024];
+ int r, e;
+ size_t l = sizeof(buf);
+ struct sockaddr_in6 sin6;
+ memset(&sin6, 0, sizeof(sin6));
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sin6.sin6_addr = tst[i].ia;
+ sin6.sin6_port = (in_port_t)htons(i);
+ r = sin6_print(buf, l, &sin6);
+ if (i == 0)
+ e = snprintf(res, sizeof(res), "%s", tst[i].str);
+ else
+ e = snprintf(res, sizeof(res), "[%s]:%zu",
+ tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+
+ l = 14;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sin6.sin6_addr = tst[i].ia;
+ sin6.sin6_port = (in_port_t)htons(i);
+ r = sin6_print(buf, l, &sin6);
+ if (i == 0)
+ e = snprintf(res, l, "%s", tst[i].str);
+ else
+ e = snprintf(res, l, "[%s]:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, in6_print);
+ ATF_TP_ADD_TC(tp, sin6_print);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/usr.bin/cc/t_hello.sh b/contrib/netbsd-tests/usr.bin/cc/t_hello.sh
index 9fa1352..6edc58b 100755
--- a/contrib/netbsd-tests/usr.bin/cc/t_hello.sh
+++ b/contrib/netbsd-tests/usr.bin/cc/t_hello.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_hello.sh,v 1.2 2012/07/21 12:30:55 martin Exp $
+# $NetBSD: t_hello.sh,v 1.3 2016/04/03 14:41:30 gson Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -39,7 +39,7 @@ hello_pic_head() {
atf_test_case hello_pie
hello_pie_head() {
- atf_set "descr" "compile and run position independend (PIE) \"hello world\""
+ atf_set "descr" "compile and run position independent (PIE) \"hello world\""
atf_set "require.progs" "cc"
}
diff --git a/contrib/netbsd-tests/usr.bin/config/d_min b/contrib/netbsd-tests/usr.bin/config/d_min
new file mode 100644
index 0000000..4ccdbfc
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/config/d_min
@@ -0,0 +1,6 @@
+include "arch/regress/conf/std.regress"
+maxusers 4
+
+master0 at root
+
+config regress root on ?
diff --git a/contrib/netbsd-tests/usr.bin/config/support/conf/files b/contrib/netbsd-tests/usr.bin/config/support/conf/files
index d525782..01022ee 100644
--- a/contrib/netbsd-tests/usr.bin/config/support/conf/files
+++ b/contrib/netbsd-tests/usr.bin/config/support/conf/files
@@ -24,3 +24,18 @@ device loopbaby
attach loopbaby at loopchild
defpseudo pseudodev: hook
+
+define a
+file a.c a
+
+define b: a
+file b.c b
+
+define c: b
+file c.c c
+
+define i {}
+
+device d: i
+attach d at root
+file d.c d
diff --git a/contrib/netbsd-tests/usr.bin/config/t_config.sh b/contrib/netbsd-tests/usr.bin/config/t_config.sh
index 9f97b5e..55af069 100755
--- a/contrib/netbsd-tests/usr.bin/config/t_config.sh
+++ b/contrib/netbsd-tests/usr.bin/config/t_config.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_config.sh,v 1.1 2012/03/17 16:33:12 jruoho Exp $
+# $NetBSD: t_config.sh,v 1.8 2016/08/27 12:08:14 christos Exp $
#
# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -25,15 +25,62 @@
# POSSIBILITY OF SUCH DAMAGE.
#
+srcdir=..
+merge_backslash()
+{
+ sed '
+: again
+/\\$/ {
+ N
+ s/\\\n//
+ t again
+}
+' "$1"
+}
+run_and_check_prep()
+{
+ local name="${1}"; shift
+
+ mkdir -p compile
+ srcdir="$(atf_get_srcdir)"
+ if [ ! -d "${srcdir}/support" ]; then
+ srcdir="$(dirname "${srcdir}")"
+ if [ ! -d "${srcdir}/support" ]; then
+ atf_fail "bad source directory ${srcdir}"
+ exit 1
+ fi
+ fi
+ supportdir="${srcdir}/support"
+
+ local config_str
+ eval config_str=\$${name}_config_str
+ if [ -n "$config_str" ]; then
+ config="d_${name}"
+ printf "$config_str" >"${config}"
+ else
+ config="${srcdir}/d_${name}"
+ fi
+}
+
run_and_check_pass()
{
local name="${1}"; shift
- mkdir compile
- supportdir="$(atf_get_srcdir)/support"
- config="$(atf_get_srcdir)/d_${name}"
+ run_and_check_prep "${name}"
+
+ atf_check -o ignore -s eq:0 \
+ config -s "${supportdir}" -b "compile/${name}" "${config}"
+}
+
+run_and_check_warn()
+{
+ local name="${1}"; shift
+
+ run_and_check_prep "${name}"
- atf_check -o ignore \
+ local stderr
+ eval stderr=\$${name}_stderr
+ atf_check -o ignore -e "${stderr}" -s eq:0 \
config -s "${supportdir}" -b "compile/${name}" "${config}"
}
@@ -41,14 +88,28 @@ run_and_check_fail()
{
local name="${1}"; shift
- mkdir compile
- supportdir="$(atf_get_srcdir)/support"
- config="$(atf_get_srcdir)/d_${name}"
+ run_and_check_prep "${name}"
atf_check -o ignore -e ignore -s ne:0 \
config -s "${supportdir}" -b "compile/${name}" "${config}"
}
+test_output()
+{
+ local name="${1}"; shift
+ local res=1
+
+ run_and_check_prep "${name}"
+
+ config -s "${supportdir}" -b compile/"${name}" "${config}" >/dev/null &&
+ cd compile/"${name}" &&
+ check_${name} &&
+ cd $OLDPWD &&
+ res=0
+
+ atf_check test $res -eq 0
+}
+
# Defines a test case for config(1).
test_case()
{
@@ -79,6 +140,126 @@ test_case no_pseudo fail "Checks that config catches ommited 'pseudo-device'" \
test_case deffs_redef fail "Checks that config doesn't allow a deffs to use" \
"the same name as a previous defflag/defparam"
+# Selecting an undefined option.
+undefined_opt_config_str="
+include \"${srcdir}/d_min\"
+options UNDEFINED
+"
+test_case undefined_opt pass \
+ "Checks that config allows a selection for an undefined options"
+
+# Negating an undefined option.
+no_undefined_opt_config_str="
+include \"${srcdir}/d_min\"
+no options UNDEFINED
+"
+no_undefined_opt_stderr='match:UNDEFINED'
+test_case no_undefined_opt warn \
+ "Checks that config allows a negation for an undefined options"
+
+# Attribute selection
+test_case select pass "Attribute selection"
+select_config_str="
+include \"${srcdir}/d_min\"
+select c
+"
+check_select()
+{
+ local f=Makefile
+
+ grep -q '^ a\.c ' $f &&
+ grep -q '^ b\.c ' $f &&
+ grep -q '^ c\.c ' $f &&
+ :
+}
+select_body() {
+ test_output select
+}
+
+# Attribute negation
+test_case no_select pass "Attribute negation"
+no_select_config_str="
+include \"${srcdir}/d_min\"
+select c
+no select a
+"
+check_no_select()
+{
+ local f=Makefile
+
+ : >tmp
+ grep -q '^a\.o:' $f >>tmp
+ grep -q '^b\.o:' $f >>tmp
+ grep -q '^c\.o:' $f >>tmp
+
+ [ ! -s tmp ] &&
+ :
+}
+no_select_body() {
+ test_output no_select
+}
+
+# Device instance
+test_case devi pass "Device instance"
+devi_config_str="
+include \"${srcdir}/d_min\"
+d0 at root
+"
+check_devi()
+{
+ local f=ioconf.c
+
+ sed -ne '/^struct cfdriver \* const cfdriver_list_initial\[\]/,/^};/p' $f >tmp.cfdriver
+ sed -ne '/^struct cfdata cfdata\[\]/,/^};/p' $f >tmp.cfdata
+
+ grep -q '^CFDRIVER_DECL(d, ' $f &&
+ grep -q '&d_cd,' tmp.cfdriver &&
+ grep -q '^extern struct cfattach d_ca;$' $f &&
+ grep -q '^static const struct cfiattrdata \* const d_attrs\[\]' $f &&
+ grep -q '^static const struct cfiattrdata icf_iattrdata' $f &&
+ grep -q '{ "d",' tmp.cfdata &&
+ :
+}
+devi_body() {
+ test_output devi
+}
+
+# Check minimal kernel config(1) output
+test_case min pass "Minimal config"
+check_min_files()
+{
+ test -e Makefile &&
+ test -e config_file.h &&
+ test -e config_time.src &&
+ test -e ioconf.c &&
+ test -e ioconf.h &&
+ test -e locators.h &&
+ test -e swapregress.c &&
+ test -h machine &&
+ test -h regress &&
+ :
+}
+check_min_makefile()
+{
+ local f=Makefile
+
+ grep -q '^%' $f >tmp.template
+
+ grep -q '^MACHINE=regress$' $f &&
+ (merge_backslash $f | grep -q '^IDENT=[ ]*-DMAXUSERS="4"') &&
+ [ ! -s tmp.template ] &&
+ :
+}
+check_min()
+{
+ check_min_files &&
+ check_min_makefile &&
+ :
+}
+min_body() {
+ test_output min
+}
+
atf_init_test_cases()
{
atf_add_test_case shadow_instance
@@ -88,4 +269,10 @@ atf_init_test_cases()
atf_add_test_case postponed_orphan
atf_add_test_case no_pseudo
atf_add_test_case deffs_redef
+ atf_add_test_case undefined_opt
+ atf_add_test_case no_undefined_opt
+ atf_add_test_case select
+ atf_add_test_case no_select
+ atf_add_test_case devi
+ atf_add_test_case min
}
diff --git a/contrib/netbsd-tests/usr.bin/gdb/t_regress.sh b/contrib/netbsd-tests/usr.bin/gdb/t_regress.sh
new file mode 100755
index 0000000..5ea8713
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/gdb/t_regress.sh
@@ -0,0 +1,77 @@
+# $NetBSD: t_regress.sh,v 1.1 2016/04/08 10:09:16 gson Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Regression tests for some GDB PRs
+
+# PR 47430
+
+atf_test_case threads
+threads_head() {
+ atf_set "descr" "Test that gdb works with threaded programs"
+ atf_set "require.progs" "gdb"
+}
+threads_body() {
+ # Dig at an unused IP address so that dig fails the
+ # same way on machines with Internet connectivity
+ # as on those without.
+ cat <<EOF >test.gdb
+run +time=1 +tries=1 @127.0.0.177
+cont
+cont
+cont
+cont
+cont
+EOF
+ gdb --batch -x test.gdb dig >gdb.out
+ atf_check -s exit:1 -o ignore -e ignore grep "Program received signal SIGTRAP" gdb.out
+}
+
+# PR 48250
+
+atf_test_case pie
+pie_head() {
+ atf_set "descr" "Test that gdb works with PIE executables"
+ atf_set "require.progs" "cc gdb"
+}
+pie_body() {
+ cat <<\EOF >test.c
+#include <stdio.h>
+int main(int argc, char **argv) { printf ("hello\n"); return 0; }
+EOF
+ cc -fpie -pie -g test.c -o test
+ cat <<EOF >test.gdb
+break main
+run
+EOF
+ gdb --batch -x test.gdb ./test >gdb.out 2>&1
+ atf_check -s exit:1 -o ignore -e ignore grep "annot access memory" gdb.out
+}
+
+atf_init_test_cases() {
+ atf_add_test_case threads
+ atf_add_test_case pie
+}
diff --git a/contrib/netbsd-tests/usr.bin/ld/t_script.sh b/contrib/netbsd-tests/usr.bin/ld/t_script.sh
new file mode 100755
index 0000000..6262dac
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/ld/t_script.sh
@@ -0,0 +1,230 @@
+# $NetBSD: t_script.sh,v 1.7 2014/11/16 04:47:18 uebayasi Exp $
+#
+# Copyright (c) 2014 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+################################################################################
+
+atf_test_case order_default
+order_default_head() {
+ atf_set "descr" "check if default object ordering works"
+ atf_set "require.progs" "cc" "ld" "readelf" "nm" "sed" "grep"
+}
+
+order_default_body() {
+ cat > test.x << EOF
+SECTIONS {
+ /* do nothing; but ld has implicit scripts internally */
+ /* which usually do: *(.data) *(.data.*) */
+}
+EOF
+ order_assert_descending
+}
+
+################################################################################
+
+atf_test_case order_merge
+order_merge_head() {
+ atf_set "descr" "check if glob merge keeps object ordering"
+ atf_set "require.progs" ${order_require_progs}
+}
+
+order_merge_body() {
+ cat > test.x << EOF
+SECTIONS {
+ .data : {
+ *(.data .data.*)
+ }
+}
+EOF
+ order_assert_descending
+}
+
+################################################################################
+
+atf_test_case order_reorder
+order_reorder_head() {
+ atf_set "descr" "check if object reordering works"
+ atf_set "require.progs" ${order_require_progs}
+}
+
+order_reorder_body() {
+ cat > test.x << EOF
+SECTIONS {
+ .data : {
+ *(.data)
+ *(.data.a)
+ *(.data.b)
+ *(.data.c)
+ }
+}
+EOF
+ order_assert_ascending
+}
+
+################################################################################
+
+atf_test_case order_sort
+order_sort_head() {
+ atf_set "descr" "check if object sort works"
+ atf_set "require.progs" ${order_require_progs}
+}
+
+order_sort_body() {
+ cat > test.x << EOF
+SECTIONS {
+ .data : {
+ *(.data)
+ /* SORT_BY_NAME */
+ SORT(*)(.data.*)
+ }
+}
+EOF
+ order_assert_ascending
+}
+
+################################################################################
+
+atf_test_case multisec
+multisec_head() {
+ atf_set "descr" "check if multiple SECTIONS commands work"
+ atf_set "require.progs" ${order_require_progs}
+}
+
+multisec_body() {
+ cat > test.c << EOF
+#include <sys/cdefs.h>
+char a __section(".data.a") = 'a';
+char b __section(".data.b") = 'b';
+char c __section(".data.c") = 'c';
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -c test.c
+
+ cat > test.x << EOF
+SECTIONS {
+ .data : {
+ *(.data)
+ *(.data.a)
+ }
+}
+SECTIONS {
+ .data : {
+ *(.data)
+ *(.data.b)
+ }
+}
+EOF
+ atf_check -s exit:0 -o ignore -e ignore \
+ ld -r -T test.x -Map test.map -o test.ro test.o
+ extract_section_names test.ro >test.secs
+ extract_symbol_names test.ro >test.syms
+ assert_nosec '\.data\.a'
+ assert_nosec '\.data\.b'
+ assert_sec '\.data\.c'
+}
+
+################################################################################
+
+order_require_progs="cc ld readelf nm sed grep"
+
+order_assert_ascending() {
+ order_assert_order a b c
+}
+
+order_assert_descending() {
+ order_assert_order c b a
+}
+
+order_assert_order() {
+ order_compile
+ order_link
+ {
+ match $1 && match $2 && match $3
+ } <test.syms
+ atf_check test "$?" -eq 0
+}
+
+order_compile() {
+ for i in a b c; do
+ cat > $i.c << EOF
+#include <sys/cdefs.h>
+char $i __section(".data.$i") = '$i';
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -c $i.c
+ done
+ cat > test.c << EOF
+int main(void) { return 0; }
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -c test.c
+}
+
+order_link() {
+ # c -> b -> a
+ atf_check -s exit:0 -o ignore -e ignore \
+ ld -r -T test.x -Map test.map -o x.o c.o b.o a.o
+ atf_check -s exit:0 -o ignore -e ignore \
+ cc -o test test.o x.o
+ extract_symbol_names test |
+ grep '^[abc]$' >test.syms
+}
+
+extract_section_names() {
+ readelf -S "$1" |
+ sed -ne '/\] \./ { s/^.*\] //; s/ .*$//; p }'
+}
+
+extract_symbol_names() {
+ nm -n "$1" |
+ sed -e 's/^.* //'
+}
+
+match() {
+ read line
+ case "$line" in
+ *"$1"*) return 0;
+ esac
+ return 1
+}
+
+assert_sec() {
+ atf_check -s exit:0 -o ignore -e ignore \
+ grep "^$1\$" test.secs
+}
+
+assert_nosec() {
+ atf_check -s exit:1 -o ignore -e ignore \
+ grep "^$1\$" test.secs
+}
+
+################################################################################
+
+atf_init_test_cases()
+{
+ atf_add_test_case order_default
+ atf_add_test_case order_merge
+ atf_add_test_case order_reorder
+ atf_add_test_case order_sort
+ atf_add_test_case multisec
+}
diff --git a/contrib/netbsd-tests/usr.bin/ld/t_section.sh b/contrib/netbsd-tests/usr.bin/ld/t_section.sh
new file mode 100755
index 0000000..03c12e4
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/ld/t_section.sh
@@ -0,0 +1,100 @@
+# $NetBSD: t_section.sh,v 1.4 2015/02/17 11:51:04 martin Exp $
+#
+# Copyright (c) 2014 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+################################################################################
+
+atf_test_case startstop
+startstop_head() {
+ atf_set "descr" "check if __start_*/__stop_* symbols are generated"
+ atf_set "require.progs" "cc"
+}
+
+startstop_body() {
+ cat > test.c << EOF
+#include <sys/cdefs.h>
+int i __section("hoge");
+extern int __start_hoge[], __stop_hoge[];
+int main(void) { return __start_hoge[0] + __stop_hoge[0]; }
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -o test test.c
+}
+
+################################################################################
+
+atf_test_case orphan
+orphan_head() {
+ atf_set "descr" "check orphan section placement"
+ atf_set "require.progs" "cc" "readelf" "grep"
+}
+
+orphan_body() {
+ cat > test.c << EOF
+#include <sys/cdefs.h>
+/* read-only orphan */
+const char a[] __section("hoge") = "hoge";
+/* read-write orphan */
+char b[] __section("fuga") = { 'f', 'u', 'g', 'a', '\0' };
+/* .data */
+int c[1024] = { 123, 20, 1, 0 };
+/* .bss */
+int d = 0;
+/* .text */
+int main(void) { return 0; }
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -o test test.c
+ readelf -S test |
+ grep ' \.text\| hoge\| \.data\| fuga\| \.bss' >test.secs
+ {
+ # Read-only orphan sections are placed after well-known
+ # read-only sections (.text, .rodata) but before .data.
+ match ".text" &&
+ match "hoge" &&
+ # Read-write orphan sections are placed after well-known
+ # read-write sections (.data) but before .bss.
+ match ".data" &&
+ match "fuga" &&
+ match ".bss" &&
+ :
+ } < test.secs
+ atf_check test "$?" -eq 0
+}
+
+match() {
+ read line
+ case "$line" in
+ *"$1"*) return 0;
+ esac
+ return 1
+}
+
+################################################################################
+
+atf_init_test_cases()
+{
+ atf_add_test_case startstop
+ atf_add_test_case orphan
+}
diff --git a/contrib/netbsd-tests/usr.bin/make/t_make.sh b/contrib/netbsd-tests/usr.bin/make/t_make.sh
index 70c3ead..42fd795 100755
--- a/contrib/netbsd-tests/usr.bin/make/t_make.sh
+++ b/contrib/netbsd-tests/usr.bin/make/t_make.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_make.sh,v 1.6 2014/08/23 16:26:13 apb Exp $
+# $NetBSD: t_make.sh,v 1.7 2015/01/27 12:57:14 martin Exp $
#
# Copyright (c) 2008, 2010, 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -31,6 +31,17 @@ run_and_check()
local atfname="${1}"; shift
local makename="${1}"; shift
+ # these tests fail since the backout of the patch in PR
+ # 49085 - adjust for more concrete PR if there is one
+ case ${makename} in
+ escape) atf_expect_fail "see PR toolchain/49085";;
+ impsrc) atf_expect_fail "see PR toolchain/49085";;
+ phony*) atf_expect_fail "see PR toolchain/49085";;
+ posix1) atf_expect_fail "see PR toolchain/49085";;
+ suffixes) atf_expect_fail "see PR toolchain/49085"
+ atf_fail "this uses up all memory and then fails";;
+ esac
+
local srcdir="$(atf_get_srcdir)"
local testdir="$(atf_get_srcdir)/unit-tests"
diff --git a/contrib/netbsd-tests/usr.bin/netpgpverify/Testspec b/contrib/netbsd-tests/usr.bin/netpgpverify/Testspec
new file mode 100644
index 0000000..d04f4ad
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/netpgpverify/Testspec
@@ -0,0 +1,114 @@
+#! /bin/sh
+
+# $NetBSD: Testspec,v 1.2 2016/06/01 14:52:56 agc Exp $
+
+# Copyright (c) 2016 Alistair Crooks <agc@NetBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+TESTNAME=netpgpverify
+
+TESTSET_1_NAME=rsa_signatures
+TESTSET_1_FILES='
+a.gpg
+b.gpg
+det
+det.sig
+jj.asc
+pubring.gpg
+NetBSD-6.0_hashes.asc:gzip
+expected16
+expected17
+expected18
+expected19
+expected20
+expected21
+expected22
+expected23
+expected24
+expected25
+expected26
+expected27
+expected28
+expected29
+expected30
+expected31
+expected32
+expected33
+expected34
+expected35
+'
+TESTSET_1_CASE_1="-s eq:0 -o file:1.expected -e empty b2e < 1.in"
+TESTSET_1_CASE_2="-s eq:0 -o file:2.expected -e empty b2e < 2.in"
+
+TESTSET_1_CASE_1="-s eq:0 -o file:expected16 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c verify b.gpg"
+DISABLE_TESTSET_1_CASE_2="-s eq:0 -o file:expected17 -e empty netpgpverify -c verify a.gpg"
+TESTSET_1_CASE_3="-s eq:0 -o file:expected18 -e empty env TZ=US/Pacific netpgpverify -c verify a.gpg"
+TESTSET_1_CASE_4="-s eq:0 -o file:expected19 -e empty env TZ=US/Pacific netpgpverify -c verify NetBSD-6.0_RC2_hashes.asc"
+TESTSET_1_CASE_5="-s eq:0 -o file:expected20 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat jj.asc"
+TESTSET_1_CASE_6="-s eq:0 -o file:expected21 -e empty env TZ=US/Pacific netpgpverify < a.gpg"
+TESTSET_1_CASE_7="-s eq:0 -o file:expected22 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < jj.asc"
+TESTSET_1_CASE_8="-s eq:0 -o file:expected23 -e empty env TZ=US/Pacific netpgpverify < NetBSD-6.0_RC2_hashes.asc"
+TESTSET_1_CASE_9="-s eq:0 -o file:expected24 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < b.gpg"
+DISABLE_TESTSET_1_CASE_10="-s eq:0 -o file:expected25 -e empty netpgpverify NetBSD-6.0_RC1_hashes.gpg"
+DISABLE_TESTSET_1_CASE_11="-s eq:0 -o file:expected26 -e empty netpgpverify < NetBSD-6.0_RC1_hashes.gpg"
+TESTSET_1_CASE_12="-s eq:0 -o file:expected27 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < NetBSD-6.0_hashes.asc"
+TESTSET_1_CASE_13="-s eq:0 -o file:expected28 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg NetBSD-6.0_hashes.asc"
+DISABLE_TESTSET_1_CASE_14="-s eq:0 -o file:expected29 -e empty netpgpverify NetBSD-6.0_RC1_hashes_ascii.gpg"
+DISABLE_TESTSET_1_CASE_15="-s eq:0 -o file:expected30 -e empty netpgpverify < NetBSD-6.0_RC1_hashes_ascii.gpg"
+TESTSET_1_CASE_16="-s eq:0 -o file:expected31 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat b.gpg b.gpg b.gpg"
+TESTSET_1_CASE_17="-s eq:0 -o file:expected32 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg b.gpg b.gpg b.gpg"
+TESTSET_1_CASE_18="-s eq:0 -o file:expected33 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat b.gpg jj.asc b.gpg"
+TESTSET_1_CASE_19="-s eq:0 -o file:expected34 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg det.sig"
+TESTSET_1_CASE_20="-s eq:0 -o file:expected35 -e empty env TZ=US/Pacific netpgpverify -c cat -k pubring.gpg det.sig"
+DISABLE_TESTSET_1_CASE_21="-s eq:0 -o file:expected46 -e empty netpgpverify -k problem-pubring.gpg NetBSD-6.0_hashes.asc"
+
+TESTSET_2_NAME=dsa_signatures
+TESTSET_2_FILES='
+dsa-pubring.gpg
+in1.gpg
+in1.asc
+in2.gpg
+in2.asc
+expected36
+expected37
+expected38
+expected39
+expected40
+expected41
+expected42
+expected43
+expected44
+expected45
+expected46
+'
+TESTSET_2_CASE_1="-s eq:0 -o file:expected36 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in1.gpg"
+TESTSET_2_CASE_2="-s eq:0 -o file:expected37 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg < in1.gpg"
+TESTSET_2_CASE_3="-s eq:0 -o file:expected38 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in1.asc"
+TESTSET_2_CASE_4="-s eq:0 -o file:expected39 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg < in1.asc"
+TESTSET_2_CASE_5="-s eq:0 -o file:expected40 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg -c cat in1.gpg"
+TESTSET_2_CASE_6="-s eq:0 -o file:expected41 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg -c cat < in1.gpg"
+TESTSET_2_CASE_7="-s eq:0 -o file:expected42 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg -c cat in1.asc"
+TESTSET_2_CASE_8="-s eq:0 -o file:expected43 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg -c cat < in1.asc"
+TESTSET_2_CASE_9="-s eq:0 -o file:expected44 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in2.gpg"
+TESTSET_2_CASE_10="-s eq:0 -o file:expected45 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in2.asc"
diff --git a/contrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh b/contrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh
index 110761c..2d532c0 100755
--- a/contrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh
+++ b/contrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh
@@ -1,10 +1,14 @@
#! /bin/sh
-# $NetBSD: t_netpgpverify.sh,v 1.1 2012/11/20 07:55:54 agc Exp $
+# $NetBSD: t_netpgpverify.sh,v 1.4 2016/08/28 15:59:15 christos Exp $
-# Copyright (c) 2012 Alistair Crooks <agc@NetBSD.org>
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
# All rights reserved.
#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Alistair Crooks (agc@NetBSD.org)
+#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
@@ -14,25 +18,53 @@
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
-atf_test_case netpgpverify_case
+# Define test sets with atf_test_case
+# There may well be only one test set - these are tests for different
+# functionality, so netpgpverify has 2 sets, 1 for RSA and 1 for DSA
+# each test set has a
+# + *_head() function, to define the set, and
+# + *_body(), to set up the supporting input and expected output files
+# and some atf_check calls, which actually carry out the tests
-netpgpverify_rsa_head() {
- atf_set "descr" "RSA signatures for netpgpverify"
-}
+# any binary files should be uuencoded
+# we need to give the input and expected output files like this as tests
+# take place in a clean directory, so we need to be able to set them up
+# from the shell script
-netpgpverify_rsa_body() {
+# Test set 1 (rsa_signatures) for netpgpverify
+atf_test_case netpgpverify_testset_1_rsa_signatures
+
+netpgpverify_testset_1_rsa_signatures_head() {
+ atf_set "descr" "Test set 1 (rsa_signatures) for netpgpverify"
+}
+netpgpverify_testset_1_rsa_signatures_body() {
+ uudecode << EOF
+begin-base64 644 a.gpg
+owGbwMvMwMQonXHnz4HIDGXGNduSGBPD/Rq2KSuo+KWWOAW7WCn4JmanpmXmpOqU
+KRjqGSoYGRga6Rsa6hsZKBiYW5maWpmaKCSmJyu4VhQoqHBx6WXmJeeUpqQq2CQV
+p+jll+fp5WbbcXGFuAaHBLt4BtkqqFSD2U6Owa61+qXFRXpJmXn6eaklBekFZalF
+mWmVUMXxwR7atgol8ahSqMaXpBaXgM3vZJRhYWBkYmBjZQK5noGLUwDmp2X32f/X
+n4pynyaz+0jbeluli8/NgkI2bK65Ud+ecUelqkvNaXlNVo3TKyX9TuNUpmX3l7l2
+t2xy4e8veH8/OpurgK9V4EXAB98rbddTgtpzTxhuWH5x0Qf3O0xOzL5MR5SfLH7/
+zJMl72uqUExspt5UJuXIEw+LTj2JKfA7Mcl219+lKebOVlfqpA20HzSeXmaatynY
+NrX2BWfpS++vxxJiWL/wtLvzSVk/uZVunlXBsfDV/rbUxFDGPdMuNT/98f6cQ1Fz
+/+nLOY84rsk7K/NnulZuvNzb9jw3Qv58qPvep1saRDy6XhcUxhwOmZvh1DvLz/HG
+HNZMdVcl/iahoFURvHryU72zzz5eKXgoSc0SAA==
+====
+EOF
uudecode << EOF
begin-base64 644 b.gpg
xA0DAAgBG2jc/MBZaCMBy4tiAAAAAABQUk9HPXAKU1JDUz1wYXJzZS5jCldBUk5T
@@ -47,23 +79,14 @@ XxejP0Thtft0T+AKTANVrtx+aTseVt4CR3jBt0n4CJjTTRQwnIYxGML3ddgMXSPT
0c4J/4dwyMqdDuhby//52Nw=
====
EOF
- cat >det << EOF
-To Do
-=====
-tests with -k sig
-detached sigs
-DSA
-
-Done
+ uudecode << EOF
+begin-base64 644 det
+VG8gRG8KPT09PT0KdGVzdHMgd2l0aCAtayBzaWcKZGV0YWNoZWQgc2lncwpEU0EK
+CkRvbmUKPT09PQpiYXNpY3MKbG9jYWxpc2UgcGdwX3JlYWRfcGFja2V0cwpmaXgg
+bGludApXQVJOUz01CmxpYiBtYW4gcGFnZQpwcm9nIG1hbiBwYWdlCmRvIHdlIGRv
+IGl0IHN0YXRpY2FsbHkgbGlua2VkIGFzIHdlbGw/Cm11bHRpcGxlIGZpbGVzIGlu
+IG5ldHBncHZlcmlmeQo=
====
-basics
-localise pgp_read_packets
-fix lint
-WARNS=5
-lib man page
-prog man page
-do we do it statically linked as well?
-multiple files in netpgpverify
EOF
uudecode << EOF
begin-base64 644 det.sig
@@ -75,39 +98,24 @@ X66bHxCHtRyGcWsHU8Ab2fJCvsCbBBMtg3JjZ7+VgDoZqPqBgIkhmppqC05vU5QR
leNo8g9OwiJ6fMtdwTMsFkxqjjVKk5//X/6jQd/mf55XcxLOw4UK4ev5ADExnOU=
====
EOF
- cat >jj.asc << EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-1. tag & 0x3f
-2. len
-
-one pass (tag 4)
-========
-b version:3
-b sig type
-b hash alg
-b pubkey alg
-8b keyid
-
-literal data (tag 11)
-=============
-b binary/text
-b length
-c string
-L mtime
-text
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (NetBSD)
-
-iQEcBAEBAgAGBQJQaIZcAAoJEBto3PzAWWgj678IALbDHon3Rm6qUhn7k1TFT6D3
-yi/jzf3piSJGsgUg2wEghs175edC/cJK3lG9Gx/3/uQq06R9g37nVRX8I0sK7yT2
-XgR+RHoGh/b+CQxdRNC+ub5QoNb8LcmCb/MQGq2KK9otSExiy4WMUP4K1DblaK5L
-+Hg4VTooMot1NVqyFSoB2aZauXc2F4ZVh5q0fn8w5GEw45P+AUUbmzpgbLwXbl+I
-tMsX54V1dxyDcCYUs0xUH/VxJUQEeIlDbCOXYMbCVtggYRqKksTr+u/riw/Llnql
-jQdq5rBRW1SlD7Ll6z/LF2WBJOWtHzp4qbnBGSq5uB1q37H3mWL28f1tL//TUjM=
-=EX8W
------END PGP SIGNATURE-----
+ uudecode << EOF
+begin-base64 644 jj.asc
+LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBTSEExCgox
+LiB0YWcgJiAweDNmCjIuIGxlbgoKb25lIHBhc3MgKHRhZyA0KQo9PT09PT09PQpi
+IHZlcnNpb246MwpiIHNpZyB0eXBlCmIgaGFzaCBhbGcKYiBwdWJrZXkgYWxnCjhi
+IGtleWlkCgpsaXRlcmFsIGRhdGEgKHRhZyAxMSkKPT09PT09PT09PT09PQpiIGJp
+bmFyeS90ZXh0CmIgbGVuZ3RoCmMgc3RyaW5nCkwgbXRpbWUKdGV4dAotLS0tLUJF
+R0lOIFBHUCBTSUdOQVRVUkUtLS0tLQpWZXJzaW9uOiBHbnVQRyB2MS40LjExIChO
+ZXRCU0QpCgppUUVjQkFFQkFnQUdCUUpRYUlaY0FBb0pFQnRvM1B6QVdXZ2o2NzhJ
+QUxiREhvbjNSbTZxVWhuN2sxVEZUNkQzCnlpL2p6ZjNwaVNKR3NnVWcyd0VnaHMx
+NzVlZEMvY0pLM2xHOUd4LzMvdVFxMDZSOWczN25WUlg4STBzSzd5VDIKWGdSK1JI
+b0doL2IrQ1F4ZFJOQyt1YjVRb05iOExjbUNiL01RR3EyS0s5b3RTRXhpeTRXTVVQ
+NEsxRGJsYUs1TAorSGc0VlRvb01vdDFOVnF5RlNvQjJhWmF1WGMyRjRaVmg1cTBm
+bjh3NUdFdzQ1UCtBVVVibXpwZ2JMd1hibCtJCnRNc1g1NFYxZHh5RGNDWVVzMHhV
+SC9WeEpVUUVlSWxEYkNPWFlNYkNWdGdnWVJxS2tzVHIrdS9yaXcvTGxucWwKalFk
+cTVyQlJXMVNsRDdMbDZ6L0xGMldCSk9XdEh6cDRxYm5CR1NxNXVCMXEzN0gzbVdM
+MjhmMXRMLy9UVWpNPQo9RVg4VwotLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0K
+====
EOF
uudecode << EOF
begin-base64 644 pubring.gpg
@@ -515,8074 +523,6599 @@ ijaSDfX/EpCVyoua0S63m4xuuOp5bPsgKs0EMOWVlVhKDfxAQNDh9I+Rh3TSDlo9
StZtC+VbuN66pfHwsAIAAw==
====
EOF
- cat >NetBSD-6.0_hashes.asc << EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-
-
-The following is a complete list of distribution files for NetBSD-6.0
-
-This includes all binary distributions, kernels, install images,
-source tarballs, release notes and related files. Multiple hash
-formats are used for each file.
-
-Signatures will be made available for any additional install media as
-they are published.
-
-UPDATE: the macppc ISO was replaced, the mac68k and source ISOs were added,
-and a new signature was generated for this hashes file on 15 October 2012.
-
- NetBSD Security-Officer
- security-officer@NetBSD.org
-
-SHA1 (NetBSD-6.0/CHANGES) = 44ed658e4f8c813d67613497afdc6656470aab00
-SHA512 (NetBSD-6.0/CHANGES) = ababa97f9674bfaa4d941515cff2b98a1c254221394e10f3060f456474f6888f5e79aa6480bebb6f69dc1e682cd8f4c450feee91c0da1a2ed1fc805bd1dec273
-RMD160 (NetBSD-6.0/CHANGES) = 2a0ed7457dfe13229bb72cfde66668ffff4ec7ff
-MD5 (NetBSD-6.0/CHANGES) = 63363144027cac2345030caf2d934d05
-SHA1 (NetBSD-6.0/CHANGES-6.0) = 159eef1002f7e904954fb3bd9490ac2e5391fdbb
-SHA512 (NetBSD-6.0/CHANGES-6.0) = f09bf320629f6db65a469c4220eebd8db668a81fcc1a8d41b9fb06bbadbcdafd76c9d6372d8d9e5258af8424abf648d1114da2eef3ae9b396642b9b3aba434ec
-RMD160 (NetBSD-6.0/CHANGES-6.0) = b03df64c3b4081c56578066c23a24db14ae935e1
-MD5 (NetBSD-6.0/CHANGES-6.0) = 92a82839d67702799f45da9167b0a60e
-SHA1 (NetBSD-6.0/CHANGES.prev) = 25bdfe4a49acc75ee3a59ca04dc3b3c7c71a4563
-SHA512 (NetBSD-6.0/CHANGES.prev) = 73057475c27c98d729dc97f6203f89f39459405c74f7abd7b18d4382f7c5ad6c3f598989cecdd5013ba4b77d66e694c05e3fcd51fd9776fde908513ea70e63d5
-RMD160 (NetBSD-6.0/CHANGES.prev) = 38f959a7c9d0c8da19eeb1740126b04dbb71a90e
-MD5 (NetBSD-6.0/CHANGES.prev) = 0a50635a033237b439f5d7ef4c29b802
-SHA1 (NetBSD-6.0/LAST_MINUTE) = 49f8a218ff6657e0d30449a87b7c4f65ccf6115b
-SHA512 (NetBSD-6.0/LAST_MINUTE) = d6b47cdd24a6be60d68f867c361106da69dea5f9b7f4f9764d1bd0f706e8fc9d604a6b89b95eb2829dba78df936f824be3dec21318da495705796a1882ee9277
-RMD160 (NetBSD-6.0/LAST_MINUTE) = ba07328d66f7955cc9fcb402e461871bfcf2aad3
-MD5 (NetBSD-6.0/LAST_MINUTE) = fb247c08580991ef0cc5f126b62f3b6e
-SHA1 (NetBSD-6.0/README.files) = 183b12bef627768c595ab7df30bc038952166809
-SHA512 (NetBSD-6.0/README.files) = 9aacd7e1042c7579309ed9ec1ee0fb017803f967be04e51f08e78fd56537ceae6ee79ed0bd3250994e4c16dd7de6995c1be3a301aeb95a500bbc77f6915ecb31
-RMD160 (NetBSD-6.0/README.files) = 61301ea3ffe6a3e1c415ce00cfe6d22b2d544365
-MD5 (NetBSD-6.0/README.files) = 7e47e7eb92db7cb8b8ce39ceb5986847
-SHA1 (NetBSD-6.0/acorn26/binary/kernel/netbsd-FOURMEG.gz) = e127c41d5e332c75e79f5ca0e72ba250ef3c739a
-SHA512 (NetBSD-6.0/acorn26/binary/kernel/netbsd-FOURMEG.gz) = 7487273a4289d2f1dd69fb0230c263ac4fd198aac5399de043e1416834ea4b0bb4970129886223b9c5090ea9526dd765e6152f89ccfa58d4c8ba95597a845a34
-RMD160 (NetBSD-6.0/acorn26/binary/kernel/netbsd-FOURMEG.gz) = 09dcd3b8f9be85b99ed094fefc6a88e27be9b91d
-MD5 (NetBSD-6.0/acorn26/binary/kernel/netbsd-FOURMEG.gz) = 5aef629404b3d65f15bc44554b948145
-SHA1 (NetBSD-6.0/acorn26/binary/kernel/netbsd-GENERIC.gz) = c6362b83dbc496509c4e539cca33924b14318804
-SHA512 (NetBSD-6.0/acorn26/binary/kernel/netbsd-GENERIC.gz) = da75edae5fcd456028c5699d3872ac6e9c041aafb37141cfbf6b5f374f5c69d21979d23709f7e82a9198580e6f5c3c50060b9d1cd3dcac74c1e2530131c5e892
-RMD160 (NetBSD-6.0/acorn26/binary/kernel/netbsd-GENERIC.gz) = 6caa2f5e65c871664b1af2dd2a5eceb8b64f2212
-MD5 (NetBSD-6.0/acorn26/binary/kernel/netbsd-GENERIC.gz) = b14bd857ffbe97a3601f91bc0a1b388d
-SHA1 (NetBSD-6.0/acorn26/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/acorn26/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/acorn26/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/acorn26/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/acorn26/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/acorn26/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/acorn26/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/acorn26/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/acorn26/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/acorn26/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/acorn26/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/acorn26/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xbase.tgz) = 875fd641f969ec00f854ca1334d084947450c740
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xbase.tgz) = 75d0c9e9685b6b7bb706df7427c8b52f59c4fc4d0e725b02ee18024f75a546dc41de5f1a5d8552a8d2c84bdf87856e5857b0f12914801ca7b36b69536d617b4e
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xbase.tgz) = 1a4d099d59b2bd882e99f1b2df1c7bf22b890d48
-MD5 (NetBSD-6.0/acorn26/binary/sets/xbase.tgz) = 5eb9c573c5a0c96701f268a3470a58b9
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/acorn26/binary/sets/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/acorn26/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/acorn26/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xserver.tgz) = 4ccfef1d49179603286042088bec0218c6b2031d
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xserver.tgz) = 809fc0a9065c1b9e7cd17aeb0d41cfd3158efd6c585556af01c4a3c93f0df3646a2ff77c6994449a703a408c0988fc1aa68cf34c7e297a3056d73ded57034c12
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xserver.tgz) = 403604404261764c74f10fab774c4653fd20cc9b
-MD5 (NetBSD-6.0/acorn26/binary/sets/xserver.tgz) = 914f909b6878cef16a92765a8cbb52ca
-SHA1 (NetBSD-6.0/acorn26/binary/sets/kern-FOURMEG.tgz) = 3e74d7ca4f0ad181d8f37a28fc179fe4fdc3521f
-SHA512 (NetBSD-6.0/acorn26/binary/sets/kern-FOURMEG.tgz) = 794689c5f293ed453fe424f3e1cd45bdf6127a08da0e6ded9b6f3c8afe0af6f65b1ca1aca96db5b8a4891102f38b2895aca82bba0dce8ee1389f2eb439ce11b7
-RMD160 (NetBSD-6.0/acorn26/binary/sets/kern-FOURMEG.tgz) = 66e7db127f67cf318789d74d7bdf5a57fdb922ed
-MD5 (NetBSD-6.0/acorn26/binary/sets/kern-FOURMEG.tgz) = f26ed42c971ee7ce64682f5fa5a5c2b5
-SHA1 (NetBSD-6.0/acorn26/binary/sets/base.tgz) = 48cf8b5b14a8a61a85bf8bfa1ae739ef599a17e6
-SHA512 (NetBSD-6.0/acorn26/binary/sets/base.tgz) = f68d2d3e80b88fad8ff98a9bfdac7cc039d51e766130d3cade364a83bede6c6984c0cbcc56588f81760e6754ebbb08ad444fe4dd006e8ef91a3bc4e66c777e4a
-RMD160 (NetBSD-6.0/acorn26/binary/sets/base.tgz) = 090a8ef5abfede25635b86e1ed989bd8c7b988e5
-MD5 (NetBSD-6.0/acorn26/binary/sets/base.tgz) = 6ea39b172012faf2bdbcb861d0de443c
-SHA1 (NetBSD-6.0/acorn26/binary/sets/comp.tgz) = 8d6222fb0ba80750737719e3c9eb4d42aef1c92e
-SHA512 (NetBSD-6.0/acorn26/binary/sets/comp.tgz) = eeacb62b5075abfd130a4ee4bcc8b3ada6fe2e3b4ad95cfa65fb45e61956092368c9e7dd90b7fbfefd7d96162890d23872d3bc4ad92488d92a50738d59629f9c
-RMD160 (NetBSD-6.0/acorn26/binary/sets/comp.tgz) = adc77379342aa005884eb58a65a8d57d07e63853
-MD5 (NetBSD-6.0/acorn26/binary/sets/comp.tgz) = a660a76cb874c828690f5a128ff61501
-SHA1 (NetBSD-6.0/acorn26/binary/sets/etc.tgz) = 183e6af0c9ddf7c62218f3616129ed1223e0fd0b
-SHA512 (NetBSD-6.0/acorn26/binary/sets/etc.tgz) = 0c9967126ddf9cdfdf568b6a7183bd9a17a119798f318f511ec9b9351770ffb8a394d57ccf09ce1e38b4e56d836f4ab61c943e81d932007e8726819733b0b108
-RMD160 (NetBSD-6.0/acorn26/binary/sets/etc.tgz) = 92fab0f295c28c53f693444918b12bc026596a3f
-MD5 (NetBSD-6.0/acorn26/binary/sets/etc.tgz) = 1c4124013d68bbf2b85d3025aab1a0a9
-SHA1 (NetBSD-6.0/acorn26/binary/sets/kern-GENERIC.tgz) = 86de3875a3df7b400d86d2f97ea02067dac49288
-SHA512 (NetBSD-6.0/acorn26/binary/sets/kern-GENERIC.tgz) = c3eb9e9e696c7f166c9da1acdbf14b314863f68a5af5786c9d79c5e2ffd9c70ad366a6cec7ff0858ffae2ab8e028c0224b091de5bfcfad6a4ae5327709c7981e
-RMD160 (NetBSD-6.0/acorn26/binary/sets/kern-GENERIC.tgz) = f2b59e92e18402c2e96a4b254fa18f21b339629c
-MD5 (NetBSD-6.0/acorn26/binary/sets/kern-GENERIC.tgz) = 107061f8599c58b8a982c7f6b96e0fd3
-SHA1 (NetBSD-6.0/acorn26/binary/sets/modules.tgz) = 2e72e54d98a0bae829f2fdd53a9a927a4269fe83
-SHA512 (NetBSD-6.0/acorn26/binary/sets/modules.tgz) = 560d27968ab9740b7fec62e5afefddc5d6db9ebb73b79c38c34ab4d609fc4cfebe8bef7e05eb5fdacc17502236ae95675e2db87e5a8c258a3633f93635fe5aae
-RMD160 (NetBSD-6.0/acorn26/binary/sets/modules.tgz) = eee9e83fc9e9936b93f382beb4f619c0d7010cd8
-MD5 (NetBSD-6.0/acorn26/binary/sets/modules.tgz) = 3e0985108f65114c721c3672279d28cb
-SHA1 (NetBSD-6.0/acorn26/binary/sets/tests.tgz) = 72b14d964822d8a2e03c4d3855c33b2d5a02bcf5
-SHA512 (NetBSD-6.0/acorn26/binary/sets/tests.tgz) = 1b87e9174bb22df4c6b894fb731c53df03af87e6dbb8b2488fec832721c3ef3508c7dac35a2f51f144c6e726a8fff61d6f66d6a5c354c11ca2f2c8fe31a7d7a8
-RMD160 (NetBSD-6.0/acorn26/binary/sets/tests.tgz) = aa26cbefa7b2891c0d2e51a5f59c123c223721ff
-MD5 (NetBSD-6.0/acorn26/binary/sets/tests.tgz) = a69e9d96707beccb4149aed72d701bfa
-SHA1 (NetBSD-6.0/acorn26/binary/sets/text.tgz) = b4974a12425354e1d6dbe8e1e7def8ca2c8bea5a
-SHA512 (NetBSD-6.0/acorn26/binary/sets/text.tgz) = 360652de2f694807759927e57beff0e60fae7855d4ab55a574e8c2d9cab25bf76bf1b880dd419c4bef6339dc72a16959f563e964644d64a81029354c87fb1b08
-RMD160 (NetBSD-6.0/acorn26/binary/sets/text.tgz) = e40abdac843b3ac9055fdacff0c74d259609886d
-MD5 (NetBSD-6.0/acorn26/binary/sets/text.tgz) = e1ad13174b20a114fd74863b8a5a0399
-SHA1 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.gz) = e7fda95700ee86c95cb2135c841840b815319eb5
-SHA512 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.gz) = 79c810a6e1f7221aacd1e7b7edca4064ec6c3b7b99bbbe7282bdec0354c9387f9170019c7e6df5ec049497d8b0a69c07aaf485dfd286069437c16b7a44dd04ab
-RMD160 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.gz) = 68c551c4746c765068cc39e81eff40d13065ac19
-MD5 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.gz) = 2f3714cfea4b8ace15469ca877ddcaf2
-SHA1 (NetBSD-6.0/acorn26/installation/misc/boot26,ffa) = 983591033b4f5301e5c3f9696b3e9037aaa11047
-SHA512 (NetBSD-6.0/acorn26/installation/misc/boot26,ffa) = 16ef2baf8d00639c68dafbf42a563815ca6a0cc51c1083820c47d10c06422abfa8257d25be675024bf674d70def6747cb70a45d2a8451551e0b7ac6915057bfe
-RMD160 (NetBSD-6.0/acorn26/installation/misc/boot26,ffa) = a517e705c94bf87b617648aee6542e8194ad29b4
-MD5 (NetBSD-6.0/acorn26/installation/misc/boot26,ffa) = ed0fd36ea9ed9893250d9f588d5c358c
-SHA1 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.symbols.gz) = 3eca116cb41df17471b9e24e453c3164bc2f6fee
-SHA512 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.symbols.gz) = e2fce3e17958cd1865c584fa3a97a061f8fef09a8793f61018144e753d4667026349747ac7d9dfa6ad70afe2c4dbfeaef1f5718430947958f34785858e2424e3
-RMD160 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.symbols.gz) = 9f25df06373241ff5dfaafa250311a4bc5020197
-MD5 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.symbols.gz) = 4daa298789745793c9f9f1a03c4ecdb5
-SHA1 (NetBSD-6.0/acorn26/INSTALL.html) = e1896519f52cf8b3574c2ddad19d135e837ff05b
-SHA512 (NetBSD-6.0/acorn26/INSTALL.html) = 9951385e876eed0126a9706c5c075453fd27ef0eb8fc42fa1bdca0e100a04d5f2d269145040eaffcfb683ef63f51a574254ce02cd3d0d3449ef867205e55c49a
-RMD160 (NetBSD-6.0/acorn26/INSTALL.html) = 4e81e718d1526b61a1ebfc3dde631cc1c4f1998d
-MD5 (NetBSD-6.0/acorn26/INSTALL.html) = e77700615f6d71545079d4f98be4fda3
-SHA1 (NetBSD-6.0/acorn26/INSTALL.more) = 31ce17bd0e1a3eb8956f06af4a2635a8cea3693e
-SHA512 (NetBSD-6.0/acorn26/INSTALL.more) = c9693333dbbde859f3f8e1f5cb571e43eeac2a1727ce7e4681b4dacda1e145a54bacbb16346bed669a0f83e3592e7b824b66d0e0a2a0f39ab41891a0bee78ca5
-RMD160 (NetBSD-6.0/acorn26/INSTALL.more) = 12606307f5f4314a84d4401c5297bcf701fc1dcb
-MD5 (NetBSD-6.0/acorn26/INSTALL.more) = 2104dbaa19182d2de7416aa62b7de537
-SHA1 (NetBSD-6.0/acorn26/INSTALL.ps) = 61b3e6838c01429478fd78f84fc380a320f1b2ba
-SHA512 (NetBSD-6.0/acorn26/INSTALL.ps) = d96d21356a59e59ab344d4e4b720e9425b3e7a3f926e8e7d453f33c907eff12c9dfdb8a97133d77bafc30a7fdf5fb63ab529a73facbad6ac8f9a36c63a236db5
-RMD160 (NetBSD-6.0/acorn26/INSTALL.ps) = 50c971d098fc714fb2efe2f3e2cf49351a0f8fc5
-MD5 (NetBSD-6.0/acorn26/INSTALL.ps) = f0d32affe70e695f4bcbe2df304f6a65
-SHA1 (NetBSD-6.0/acorn26/INSTALL.txt) = 00ac475ec70626dc1041211ecd0e5c7e213af948
-SHA512 (NetBSD-6.0/acorn26/INSTALL.txt) = 816c536f0caacbf292b9b54e812dc474299ee6a1084682321039bb1d3fd725523d76666fc14c772951ca45409550a25b5b74cefa0bf3f7539a17995a56df9756
-RMD160 (NetBSD-6.0/acorn26/INSTALL.txt) = c4618e23cd501a7520502285a24dc8813e1a4913
-MD5 (NetBSD-6.0/acorn26/INSTALL.txt) = f02c846c660d531f87f85271e991c77b
-SHA1 (NetBSD-6.0/acorn32/binary/kernel/netbsd-GENERIC.gz) = 8d2b1f19b2ba2231aba8e20c14ab5fd83dde59ae
-SHA512 (NetBSD-6.0/acorn32/binary/kernel/netbsd-GENERIC.gz) = 364ad36c66788c822a3cbfd0ddffafc6d19f9bb82144be988848970b7e0b6d11c2afaf4784f2132affe6ca052c69a4595181b1c37363637bb54f849e5bf4a1dd
-RMD160 (NetBSD-6.0/acorn32/binary/kernel/netbsd-GENERIC.gz) = 02d7f52cc0c15ff1039f3767cfa3840e5551e03a
-MD5 (NetBSD-6.0/acorn32/binary/kernel/netbsd-GENERIC.gz) = 96f504edccc8d4f5657c1837cdfd2aaa
-SHA1 (NetBSD-6.0/acorn32/binary/kernel/netbsd-NC.gz) = fc98fecc5548fde9220873e791d4d4846cefe4b3
-SHA512 (NetBSD-6.0/acorn32/binary/kernel/netbsd-NC.gz) = ff106589ca7b58c2ef3146a93be72b73987c221694400f3a2256728e618a7b486f32020f031e68edade5d13b3b9584a18ca88ce3fed71f06f9b494b3cb6eb844
-RMD160 (NetBSD-6.0/acorn32/binary/kernel/netbsd-NC.gz) = 4ff74a916d3283eb80e77739fd31dcda4890658b
-MD5 (NetBSD-6.0/acorn32/binary/kernel/netbsd-NC.gz) = f3a826b7eea3f009868a5ad419b69c3c
-SHA1 (NetBSD-6.0/acorn32/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/acorn32/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/acorn32/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/acorn32/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/acorn32/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/acorn32/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/acorn32/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/acorn32/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/acorn32/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/acorn32/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/acorn32/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/acorn32/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/acorn32/binary/sets/kern-GENERIC.tgz) = 0ec8993d446ad847bf7a6154a19c638d944bd24b
-SHA512 (NetBSD-6.0/acorn32/binary/sets/kern-GENERIC.tgz) = bed0345f83d42ee18b1cb1fab95e6780a217edda00c0c548aeb99323327493d1720b615d746a4e364a5217f963f24ae55142fc943a0d95aec65d8ddff2d36045
-RMD160 (NetBSD-6.0/acorn32/binary/sets/kern-GENERIC.tgz) = 2f27e6f036ad4fb08171f93e21324b9f901b781a
-MD5 (NetBSD-6.0/acorn32/binary/sets/kern-GENERIC.tgz) = 5eed762a46bf55d66491dab47bd40f23
-SHA1 (NetBSD-6.0/acorn32/binary/sets/base.tgz) = 519435bdcdffa41f24c56796558ad43ba6c89f31
-SHA512 (NetBSD-6.0/acorn32/binary/sets/base.tgz) = b7a3f4a5627790133104674c25e434d16a0e706006352f0032a4672f624c7fbf37b0678f72f593c5e17dea469afc03e09ac914eb4a02acb47b9a5673bd7e9777
-RMD160 (NetBSD-6.0/acorn32/binary/sets/base.tgz) = caf168bcd8c374896c8a0408e3d34e9c7e6f2c7b
-MD5 (NetBSD-6.0/acorn32/binary/sets/base.tgz) = b221228a61e59d66f1b457f5dcb1b5cc
-SHA1 (NetBSD-6.0/acorn32/binary/sets/comp.tgz) = 54b3cdd58c6db224ec42033f1f40842e55625e9f
-SHA512 (NetBSD-6.0/acorn32/binary/sets/comp.tgz) = a32e6f39ea01c783e1ff603c8774130698db0056923ef4c029f29f0df20f6b63885f33a50586774bc7c12b392f278344afd3aca42112bed8a3cd14d6ef72ff7e
-RMD160 (NetBSD-6.0/acorn32/binary/sets/comp.tgz) = cde7f725c376e8c0633d821357033e742358bb28
-MD5 (NetBSD-6.0/acorn32/binary/sets/comp.tgz) = c3866ce0cbc35fc4ffc58b14cc72ed31
-SHA1 (NetBSD-6.0/acorn32/binary/sets/etc.tgz) = e7c005ca92edbf1b8225f951b95b5938a94ee651
-SHA512 (NetBSD-6.0/acorn32/binary/sets/etc.tgz) = 01b47e91a0969eb2c3d7fd7f73563e98201ab401b9069b6d5e64e878757761410b8a181fcd04b141168c851d466e6d4e1b48b540e654d1831195deecbe5c23f7
-RMD160 (NetBSD-6.0/acorn32/binary/sets/etc.tgz) = f654da0c3fa14a8d8dc3a0cdb977d98b07b0d4ac
-MD5 (NetBSD-6.0/acorn32/binary/sets/etc.tgz) = 295b42a630082e4db876d35a7e5a204c
-SHA1 (NetBSD-6.0/acorn32/binary/sets/kern-NC.tgz) = e0744de8e7bc2a5808e603563cd8201de0601323
-SHA512 (NetBSD-6.0/acorn32/binary/sets/kern-NC.tgz) = 93c2fda5dd5a16eab210f74c0cf749fd013ec3488d6424fea84d404b2db5555a449a6a0ce9d936d7e18ec93216b1fa7a914e951dba3f223ac6b4de27d1f8cd32
-RMD160 (NetBSD-6.0/acorn32/binary/sets/kern-NC.tgz) = b0be18f3134075df50daec32dc87e30f370f7531
-MD5 (NetBSD-6.0/acorn32/binary/sets/kern-NC.tgz) = 5b8eb4b95fa6151bfbcaf0f72a6f6abb
-SHA1 (NetBSD-6.0/acorn32/binary/sets/modules.tgz) = 7df712c3742771ef53b42065426e7761020cf439
-SHA512 (NetBSD-6.0/acorn32/binary/sets/modules.tgz) = 3c682c61bca3059470ea6ceaf5e40314cc1876b9b183910692a1664a975aacae619c2214695a92f68463142940640042ba48f9acb39488fddfa757ffb74eb6e4
-RMD160 (NetBSD-6.0/acorn32/binary/sets/modules.tgz) = 35fc06c8194cb14f2258ce805c1e4fb8097669d0
-MD5 (NetBSD-6.0/acorn32/binary/sets/modules.tgz) = ffbd55bff72382bbc82342bacf6840ba
-SHA1 (NetBSD-6.0/acorn32/binary/sets/tests.tgz) = 68dae6dac916379bb48be79e8b2fe49898c4cfe5
-SHA512 (NetBSD-6.0/acorn32/binary/sets/tests.tgz) = b06a5ac96d76e0521e2d6666518a1549975a4d11767264c7d3b0d3dd8afe8aaa8e4f3113095d18d74146ee7e4c17a8d8a180bb4367c9aff6359b60ec06107970
-RMD160 (NetBSD-6.0/acorn32/binary/sets/tests.tgz) = 5a4c05ecc975a7ee61eda422a7dc7a5b1084424f
-MD5 (NetBSD-6.0/acorn32/binary/sets/tests.tgz) = ef0313ce1e3aec16c96660fc0b8e691b
-SHA1 (NetBSD-6.0/acorn32/binary/sets/text.tgz) = bb5835aee28d492add5e601c1323c4c1f0ac09e0
-SHA512 (NetBSD-6.0/acorn32/binary/sets/text.tgz) = ac45662324b717ccc775d4f4adfaf6623e8383fea5c5d4177fe21f8799a2a7534faff515c979f85cac6de86f166a0fcbc1021a8b8ff2a2c787fd341a4e6a6c91
-RMD160 (NetBSD-6.0/acorn32/binary/sets/text.tgz) = 96fbbe37b32d596fad17af067c28acf08eaaaa57
-MD5 (NetBSD-6.0/acorn32/binary/sets/text.tgz) = 1ff71742549a26794970d5aaef2c5f09
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xbase.tgz) = 150aad78ea2477c5c1b395bda15bae8f0f72d36c
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xbase.tgz) = 7ff70ee14b5943899517b4a7b2422ba1c62468399f55905e595d50de15fcfa2e89281a917c96d6d36e2dec519162227f7e6809c9a1da475c68982216d9acb242
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xbase.tgz) = 0411d8686275c3d1146e42ddb69a0080bc82d950
-MD5 (NetBSD-6.0/acorn32/binary/sets/xbase.tgz) = 97aec1ef3a6ef744c85a7eaa6c403c1a
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xcomp.tgz) = 9847900750d33556792e7b62e3e0ffc3f3ea625f
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xcomp.tgz) = 010fc75bcd0355d1ea09cd8ddba94b16fab7224bec4aba26d07bf43f259b47b564fe008e6c477ce4a41161ae76dbd26d89f894ec5bf2ea7193cab2965d96de50
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xcomp.tgz) = 975dbb1ec0a8f32cee4bfe55b4adb9f617d917be
-MD5 (NetBSD-6.0/acorn32/binary/sets/xcomp.tgz) = 7e761d7288845752bf05af5ac943d158
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xetc.tgz) = 6b7815869c1c48a2efb0dfcdaae373700d5da8d9
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xetc.tgz) = 42cbbc48a006498d46221eff6403acceeaf20ee5cb4a4f368b74e5b4599cccbd54f3d83b4a55359622599184f376f6bea2f2ad0feb364ce7d0293c3fb9d5b32d
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xetc.tgz) = a60ea2e898741a2d009ca8c6c621fbcae1f1efce
-MD5 (NetBSD-6.0/acorn32/binary/sets/xetc.tgz) = 16cc8b76db930a1eb7b009e7776e2881
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xfont.tgz) = 558af1104a11439ab8c868728c55027dd5862ce8
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xfont.tgz) = fb28abf27b6cadadc9c0ca82df3025e22d4e0661dcc0488083c7339c5372acf0adea8edc848b7cea50980d971aa24f81bbda068b4b4bed6ac4cf26cc4f5b35bf
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xfont.tgz) = f6df63aefaa5c459b2c86ae79fc7b07253424c97
-MD5 (NetBSD-6.0/acorn32/binary/sets/xfont.tgz) = 498abc855e6717ab51d5d0be8fa5662d
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xserver.tgz) = 292d81e44c40c73e8341d59175695b649f839baa
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xserver.tgz) = 3593eeeda7a9f55ff29622c2a95672c746f9235e007b3d8e81e33829fa655d0f6bc8ba90f6ef53baad1b25789fd656d5d8ea14152a9b41abf1a1bfbd2b11937f
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xserver.tgz) = e0e2425da086891061ddae334fd8e98d77c519c9
-MD5 (NetBSD-6.0/acorn32/binary/sets/xserver.tgz) = bd36f768d1488956ea90a9f13ac8929c
-SHA1 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.symbols.gz) = b155be9bb81a3c15abe2b6732d48e8bfe53abc53
-SHA512 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.symbols.gz) = a3a1c068acbe2d634da3442aac4de7107dfcaf3634be291f9c3285aeb9fa680e59acb9273774e6317f71d6f9be2e1851a0e0f60b3cc83972f3e185f3e8237522
-RMD160 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.symbols.gz) = 3ac12cb07a5e8b9810946c489b9a4c3b9aecdcbc
-MD5 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.symbols.gz) = 1fe3c151480781a09a6f642ab87b9495
-SHA1 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.gz) = dc38de07bef2736068ee9cd3103f87ea6938fd6d
-SHA512 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.gz) = 11b29549b4b8232380eb6db4bf89a979e9b2a2726a3c7ff51ab059fd4f8b6a979d2cb7fe6d0c1802e345c445989655339a9a8b8d4a10f728ac7a24bae9f1830f
-RMD160 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.gz) = 605df2071d2e590be8a4d0f83c9a55a140066bc5
-MD5 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.gz) = dbc61ce2c5adf5f8e18441138aa4ae5a
-SHA1 (NetBSD-6.0/acorn32/installation/misc/BtNetBSD.spk) = 12dac3d0059f8eef736a378bb6e026166694c1a5
-SHA512 (NetBSD-6.0/acorn32/installation/misc/BtNetBSD.spk) = f54991c3e27613ac735b1a10d5ffcc102799417a68415b74c9557657c0e714fd7faa381a3945991bd80b49cefa2ec01395d88d0e935d063ff91174a8e12887ee
-RMD160 (NetBSD-6.0/acorn32/installation/misc/BtNetBSD.spk) = 02e5c2a9d751d8236ebbd0d4151f687fdd896735
-MD5 (NetBSD-6.0/acorn32/installation/misc/BtNetBSD.spk) = 4b3907f57b03d49765f92ffff178ef40
-SHA1 (NetBSD-6.0/acorn32/installation/misc/ramdisk.fs.gz) = 73ae7358fb27f8d227e253b6f43e5fcbdd7cb5f3
-SHA512 (NetBSD-6.0/acorn32/installation/misc/ramdisk.fs.gz) = 3c68e80766ae3603b289f11469c2c80ba1ffb5eb30f323fee016d992d7d226bf1984f487ee486cb3d0b1739bf45ae3ad52ddeb5f90ff2d0abd08cafc1a181ccf
-RMD160 (NetBSD-6.0/acorn32/installation/misc/ramdisk.fs.gz) = 3320c3a2a2d0e60d55b4612811d1870a4e8b9ec1
-MD5 (NetBSD-6.0/acorn32/installation/misc/ramdisk.fs.gz) = 70f0aee2f9cfc56744c50b3bed23b5a5
-SHA1 (NetBSD-6.0/acorn32/installation/misc/boot32,ffa) = 1a8c3e3a8950e68d6fd3d22ccf985814f67e00c1
-SHA512 (NetBSD-6.0/acorn32/installation/misc/boot32,ffa) = 2f7091d17fc4c910846f5cdc8cd267eb7d4056e281175c00407ab958548c62af4936394a04bde6549223fc874df72c5c46b0d11ae32ea6970c17326b0cedc6af
-RMD160 (NetBSD-6.0/acorn32/installation/misc/boot32,ffa) = 5821041d9dff2485cba9ab49e289a0bd479fc63d
-MD5 (NetBSD-6.0/acorn32/installation/misc/boot32,ffa) = 0f03b946d6479db2aaf8088dba4632ed
-SHA1 (NetBSD-6.0/acorn32/installation/misc/splug.bas) = 19015ba8a9efd73fea65fe180596271640893d1b
-SHA512 (NetBSD-6.0/acorn32/installation/misc/splug.bas) = ef38a1da79c93ff798c858f02d3d13e88d24bd0b56808ddb71b3dd577203195a60f601aa52e37892ab164ef7dd0cd490995ac9cd689fe33282fb49435f4c4d56
-RMD160 (NetBSD-6.0/acorn32/installation/misc/splug.bas) = 3080fc8d5ff946754a33bc41e7ad83cbe1eaa0b5
-MD5 (NetBSD-6.0/acorn32/installation/misc/splug.bas) = 5596dc5df580ceb656d040393e778087
-SHA1 (NetBSD-6.0/acorn32/INSTALL.html) = d16bd043227b34d9a9c3c69f380c6c42b50d080c
-SHA512 (NetBSD-6.0/acorn32/INSTALL.html) = 629401693cb91992f46b839a34bf4c4ac704194fd8aa6be3aa51e405920b697fe961fa7320eef7a4cf804dad96891b38ca57c61ef3c0c6096bb6bc71f58e55a9
-RMD160 (NetBSD-6.0/acorn32/INSTALL.html) = 222b9b590667b0a6dfe2717bb6dc94e95a485174
-MD5 (NetBSD-6.0/acorn32/INSTALL.html) = 07466bc8646d08bee6c7030d00cc9173
-SHA1 (NetBSD-6.0/acorn32/INSTALL.more) = 011db6fc8ab7b724dc66eafb3b712e9202bb2174
-SHA512 (NetBSD-6.0/acorn32/INSTALL.more) = d13335bfe65882608362fda44f89091113e3bffb53893f15bb747aaa72eefbb24ca3fd3d72017cfc446ba49ad7c00f34436e859f71727f9e6a182766a1810a13
-RMD160 (NetBSD-6.0/acorn32/INSTALL.more) = aaa800047583e64496187a80e54d0ac3bf4c851c
-MD5 (NetBSD-6.0/acorn32/INSTALL.more) = c45c7b7fd7522e41a977ffa6a58b5a4d
-SHA1 (NetBSD-6.0/acorn32/INSTALL.ps) = 78d2daf3255e7bc61b5682d5fcfd853d7dd25883
-SHA512 (NetBSD-6.0/acorn32/INSTALL.ps) = 4aec0769a5827735e13ab61dd80b5c7254561786afe0c95ff76796a8b29ae2284c064a1a1c523120366e37197bcbfd3d588985dbaae62c9848a4669d8c797714
-RMD160 (NetBSD-6.0/acorn32/INSTALL.ps) = 764dc8cc82d5623174886f98f77d808650ef90d1
-MD5 (NetBSD-6.0/acorn32/INSTALL.ps) = fc4371f1451a03c4ea429fe029e46d9c
-SHA1 (NetBSD-6.0/acorn32/INSTALL.txt) = 9d1ed61f6916645ffa30e66b23da2d0d24e18582
-SHA512 (NetBSD-6.0/acorn32/INSTALL.txt) = 10763c9164aeb2d4070f1677b0f97ca8263ec1b9d9c017fbcf348ce302d7d846fa669b741031eef4b12c27a7d077f6af9073f7668244b1b4daa39ab426d79ec7
-RMD160 (NetBSD-6.0/acorn32/INSTALL.txt) = 755fbe335d76c9b549fae4d01120cbe00290e8ca
-MD5 (NetBSD-6.0/acorn32/INSTALL.txt) = 1a6f36bd9f77e0773aeae95de9ceed8f
-SHA1 (NetBSD-6.0/acorn32/prep.RISCOS) = 269ee721985cbc44a8056ca4804f8b2d70d52a3e
-SHA512 (NetBSD-6.0/acorn32/prep.RISCOS) = 54923d8dc59e6a3852ceab25adbced3e545de19458c412552ef0cb47534303d812e8860662025b1aa9ddf9a99bb139f4be75656ef109546a328ba57985ec2cfa
-RMD160 (NetBSD-6.0/acorn32/prep.RISCOS) = 8e3acd93d35d85062996b061cff5d7293f46ee1f
-MD5 (NetBSD-6.0/acorn32/prep.RISCOS) = 3c0e290b44f735728abd3bda8bd96a0f
-SHA1 (NetBSD-6.0/algor/binary/kernel/netbsd-P4032.gz) = e9df71ffe487dd98c1aae0c6e79fbf8e4780340a
-SHA512 (NetBSD-6.0/algor/binary/kernel/netbsd-P4032.gz) = 48673b13075fc7694dccb1a31b6121281c5c0e85c5d7107a4f9414e9888c19f07133a07e43400495dd9e11757acc2fa2269458ae4b091900772c49a944624465
-RMD160 (NetBSD-6.0/algor/binary/kernel/netbsd-P4032.gz) = 85b0c6fde5bd0f4a02f71c30ccaf35d9bc29ac19
-MD5 (NetBSD-6.0/algor/binary/kernel/netbsd-P4032.gz) = 2f041466a193e263576e80bfca3ce8ef
-SHA1 (NetBSD-6.0/algor/binary/kernel/netbsd-P5064.gz) = f230eefee689dff40a0aca1983191c2e21c7dbde
-SHA512 (NetBSD-6.0/algor/binary/kernel/netbsd-P5064.gz) = eb7fea73f29d2141f508743785ee865bd5f7ce23477fc1bf256e40a0f47de76a7cdb22bfac0cb9dce94c0e1694b1c84b1760db13ab1b34248a6e04367817214d
-RMD160 (NetBSD-6.0/algor/binary/kernel/netbsd-P5064.gz) = 355d23c8cbde9c1a92bf5f1eb4e1f1890603e7f7
-MD5 (NetBSD-6.0/algor/binary/kernel/netbsd-P5064.gz) = 5ebc249debbe1797d915529f1d469f8b
-SHA1 (NetBSD-6.0/algor/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/algor/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/algor/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/algor/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/algor/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/algor/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/algor/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/algor/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/algor/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/algor/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/algor/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/algor/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/algor/binary/sets/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/algor/binary/sets/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/algor/binary/sets/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/algor/binary/sets/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/algor/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/algor/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/algor/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/algor/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/algor/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/algor/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/algor/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/algor/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/algor/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/algor/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/algor/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/algor/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/algor/binary/sets/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/algor/binary/sets/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/algor/binary/sets/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/algor/binary/sets/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/algor/binary/sets/kern-P4032.tgz) = 810ebe688c1817dcfd7cab153a6d9997900555b8
-SHA512 (NetBSD-6.0/algor/binary/sets/kern-P4032.tgz) = 8846047a1a93d3ba853e235b2169286e09f5955d3116bd2bdb18f0d252c8b0ae0d310f3ccf6d30244d089f7b077579e8246ddb27f32ddcee26e6b7b7b2266aaa
-RMD160 (NetBSD-6.0/algor/binary/sets/kern-P4032.tgz) = 039bc25b47bc29648ebb86fad5fb52852badc0fc
-MD5 (NetBSD-6.0/algor/binary/sets/kern-P4032.tgz) = f8011c18eab0acde582df5ddda0d3a57
-SHA1 (NetBSD-6.0/algor/binary/sets/base.tgz) = 1cacc62a3d246592b148a70bef11a751b63a4810
-SHA512 (NetBSD-6.0/algor/binary/sets/base.tgz) = cd448e4f0533c50daf74ed21467409013d512e128b177c9b9ab47771d3d2cffcbe403ba207309af77eb6712d316d9db2923205765be8d9045e2b2216f94774d4
-RMD160 (NetBSD-6.0/algor/binary/sets/base.tgz) = c78efd1403b1cb3af77f5a0cbddbd095505d4f65
-MD5 (NetBSD-6.0/algor/binary/sets/base.tgz) = 33b467da96b628c9b68cd57209d353b7
-SHA1 (NetBSD-6.0/algor/binary/sets/comp.tgz) = 3e955d4a87fe115e37da729b9d2474a775614d30
-SHA512 (NetBSD-6.0/algor/binary/sets/comp.tgz) = 12ce5ac677ba9f44944f57859218d668d3d2bc3323ac5793545ca7de849480dc093f03226fed4dac42bf7a4ee69fc998b4a5e2c62607d754e0b58a3cc73d3d9d
-RMD160 (NetBSD-6.0/algor/binary/sets/comp.tgz) = 106fbdfddd7c9bd13d1b5d2111b39d4338bd8c10
-MD5 (NetBSD-6.0/algor/binary/sets/comp.tgz) = 8d493a09f9e5580f830f15a3c0b12d84
-SHA1 (NetBSD-6.0/algor/binary/sets/etc.tgz) = c0511cfd28c1b22e71166507a0f564c24015f025
-SHA512 (NetBSD-6.0/algor/binary/sets/etc.tgz) = d47fee208d0d59cf0edbbf2c75bbe404a176f66f0058db93ba553fffdc31d5b5ed6c2ba2df505f7b1576cd06cc27de5da3dfda1230927c2ac603a326aff688b2
-RMD160 (NetBSD-6.0/algor/binary/sets/etc.tgz) = 09d069cea8b5a133736d483097bcf24649f0d52a
-MD5 (NetBSD-6.0/algor/binary/sets/etc.tgz) = 4ce17fdd45c77f0d8632a836463db036
-SHA1 (NetBSD-6.0/algor/binary/sets/kern-P5064.tgz) = 1fa8786b3038a1bc218f5e8280ae3871f5687e4c
-SHA512 (NetBSD-6.0/algor/binary/sets/kern-P5064.tgz) = 0977b6911d05ee98e53841af3acff6b5f751c93841c96f3869cfad0e978596204cb22d3a1608842c36d24a50f16a35d0ec00288d56fd69e6cd33d8b2b1dc37c6
-RMD160 (NetBSD-6.0/algor/binary/sets/kern-P5064.tgz) = 8fd50961f224a94e272a15df2061f226d0d2456a
-MD5 (NetBSD-6.0/algor/binary/sets/kern-P5064.tgz) = 7932f7ce7a89995425a3e97319de27b7
-SHA1 (NetBSD-6.0/algor/binary/sets/modules.tgz) = 3627b369e3392221946d517d950da8bb6c3b6170
-SHA512 (NetBSD-6.0/algor/binary/sets/modules.tgz) = bbdaa688d423fce2ba3513727b4fd0758cb3c6b6db3147b09319990270380b4cf8feede38a2b57757095627356d6955a30d647d770d67a2bf97e66f0673e4770
-RMD160 (NetBSD-6.0/algor/binary/sets/modules.tgz) = 5040267ebae4a2069ad1b9168b31d568d2f81fca
-MD5 (NetBSD-6.0/algor/binary/sets/modules.tgz) = d3e9a884b3cef9a6ee2dd6b8c715901a
-SHA1 (NetBSD-6.0/algor/binary/sets/tests.tgz) = 76544bff809ab691a739a3ffebc3988b1473fdc2
-SHA512 (NetBSD-6.0/algor/binary/sets/tests.tgz) = 5e5709ec49a4e20f253ed5686f9fc62300b3c0aa70bc2cf036a41130803c578cc692b89fc234334723bc39f74cb0a8bd9e9be88cfa692213554713766c9a3b7b
-RMD160 (NetBSD-6.0/algor/binary/sets/tests.tgz) = 66eb344c33b3c463c3a6c3af96af263d8cb6dfe0
-MD5 (NetBSD-6.0/algor/binary/sets/tests.tgz) = 3ae196d57949ee2cb682ab871c9ef316
-SHA1 (NetBSD-6.0/algor/binary/sets/text.tgz) = fe2e0c01c5af66987eab5bb59b06fba32c006be2
-SHA512 (NetBSD-6.0/algor/binary/sets/text.tgz) = 3fdd84b91bc54bb3f045bf068d01b4b67fe35a62deffdf8b5964f5dc978d55b58b5b592c9fc9a05d40b305914ce7465981b4d55ec95571203c54f240a2bdff4c
-RMD160 (NetBSD-6.0/algor/binary/sets/text.tgz) = 420dc3d206809ea2438b82c912a041637e4d0949
-MD5 (NetBSD-6.0/algor/binary/sets/text.tgz) = b421f4428b8e52bb19e997954cb1d0ca
-SHA1 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.MP.gz) = 20bd351669d8b8c5e6ed9726567516aa2b20e101
-SHA512 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.MP.gz) = 16699cd9ff46de1282439235429a63aa38ad6eae8197f037e7f8bd2324ff696a04d4b2008723edb8bdae8e55f139024c55e3858670a3db4f6ff317fef3d39919
-RMD160 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.MP.gz) = 5897524a8bc830e819894c17803a141c65b4f417
-MD5 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.MP.gz) = 0ab46adc2ba2d37bfaac5fe5296fe616
-SHA1 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.gz) = daee92c8428d90796700da80702277f38afd7c78
-SHA512 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.gz) = 658bcdb3fe7c015e0de0d6fd795e9a9033618eb193c6e81b179b978836c93cd3b6a09f79ff4405f831f81e003bd190e91534112e9a923d10c3fb094478f4421a
-RMD160 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.gz) = 2bbdd4f11b998dbe08e2076e895785e90f17b192
-MD5 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.gz) = 12d571967266dbdce4d9c0b02cda4718
-SHA1 (NetBSD-6.0/alpha/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/alpha/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/alpha/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/alpha/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/alpha/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/alpha/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/alpha/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/alpha/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.MP.tgz) = bef91c02bdb6ebd5e578bae73acbcbc5d9fcb47b
-SHA512 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.MP.tgz) = 0800ef43e76c838a4f91535fbad30adee37a4be94d01220ce3d0ca898204ef4b9140d753853faa29944ef1f0b7feff2a54551633ed10293751d0fb5c2134c858
-RMD160 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.MP.tgz) = bbc5e568ee1036473614f45ce443ae6129c2afb1
-MD5 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.MP.tgz) = 255686b1fa7b97a53599c7759fad4843
-SHA1 (NetBSD-6.0/alpha/binary/sets/base.tgz) = d6a62bc7f515a3cf470fe4298045346f79dbdfb8
-SHA512 (NetBSD-6.0/alpha/binary/sets/base.tgz) = b3eee92239be76b17cf36cf49d845123dd26853ec162d2f340338fff172af3ca20d6c85025e9a5fbc085d8522d331ecec488acc034c757f7a44d885b8f31ec41
-RMD160 (NetBSD-6.0/alpha/binary/sets/base.tgz) = 447c0754e06c36c2844563722dfd727938b7fdb5
-MD5 (NetBSD-6.0/alpha/binary/sets/base.tgz) = e898499ce51685436186e3be5227184a
-SHA1 (NetBSD-6.0/alpha/binary/sets/comp.tgz) = 3cd2356501ebeb4190de3596453b045f694f69de
-SHA512 (NetBSD-6.0/alpha/binary/sets/comp.tgz) = 51a526038f6e9cf7d787b86997abee47e9735a56f02215cd8f3260e50d2d3bd7a17d11b2f80b2010fd52640aab0afe074fa8997c3522ccf1a8463854bab9ee0b
-RMD160 (NetBSD-6.0/alpha/binary/sets/comp.tgz) = 5fd982783cb934f260a96a0f85279b07deb2b505
-MD5 (NetBSD-6.0/alpha/binary/sets/comp.tgz) = c5deb3e315f875050362df56411badcf
-SHA1 (NetBSD-6.0/alpha/binary/sets/etc.tgz) = b525757e8a68fee704bc4845c411c6e9ab06db01
-SHA512 (NetBSD-6.0/alpha/binary/sets/etc.tgz) = 4c881736688636b7376dc7f255266f606678d7fe57a9a787275dc78bbafb8c0f36948bc6b06ea853bd7d1e2dc3de90693fc518c3ffe57aa831777229d910b8c3
-RMD160 (NetBSD-6.0/alpha/binary/sets/etc.tgz) = bbacdc2a3adc49d3772faa1e60227d3f20357220
-MD5 (NetBSD-6.0/alpha/binary/sets/etc.tgz) = 5975a4d5767d0d68fd4371e32f1ebd40
-SHA1 (NetBSD-6.0/alpha/binary/sets/games.tgz) = f3c81c83cd5dd29ff44eeff54a39bc22e1739b43
-SHA512 (NetBSD-6.0/alpha/binary/sets/games.tgz) = f773dfef7f2449a7ea804e756181ea622428becff7cd86e227f8d9c33a343ea097a191c08b73f258e236695ac37df6af80ffcc930ae75a3f6bc4a542a0797673
-RMD160 (NetBSD-6.0/alpha/binary/sets/games.tgz) = 079affe9e062a8f418e15fc69dae6b19722d8e43
-MD5 (NetBSD-6.0/alpha/binary/sets/games.tgz) = 1bdf16fbef7c6ee4bc1e8f6e99cbe649
-SHA1 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.tgz) = e6e00d7a0d440b435c65b34ba6e5ea156f123f18
-SHA512 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.tgz) = b5a99efe112a3d00b4108dc632a2413c0edc72c8a4fdd4daba1c974b5f1233d48e21964e4e1f7588430d01b0813767861bc0a700910a1e288493fccf269255f3
-RMD160 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.tgz) = ccba42305acbf2080751f1b35c23a8bd2464d1c6
-MD5 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.tgz) = b05f2ce6966e37b9dd3018930753f14c
-SHA1 (NetBSD-6.0/alpha/binary/sets/modules.tgz) = 2ed2d5d8a1054fac920b44123147d1f445a8cd20
-SHA512 (NetBSD-6.0/alpha/binary/sets/modules.tgz) = e85332336dd7091fecb0d48aa772ec0f9890fae90a71bf3e79178cc319a32c7320e7e6357d4355292335809d12499875357583179199f9b0c94dedcce2bffee8
-RMD160 (NetBSD-6.0/alpha/binary/sets/modules.tgz) = 286d34676fdeb368fe4146a636878026b678afad
-MD5 (NetBSD-6.0/alpha/binary/sets/modules.tgz) = 31ddea9a696f752f01db0c8910252dbe
-SHA1 (NetBSD-6.0/alpha/binary/sets/tests.tgz) = 5a71181696e124159891257ed04551ca0fac96ed
-SHA512 (NetBSD-6.0/alpha/binary/sets/tests.tgz) = a62eb137237ed94f16b759f4b836932caf06f4fa4215126db879918e38b993349962b6cd63dc06b2516cccb2604208d12df0b599ae64c4b5bfacd8d51618be0c
-RMD160 (NetBSD-6.0/alpha/binary/sets/tests.tgz) = baaa5152926a07e890f3c6ab2e2ba0123e132d62
-MD5 (NetBSD-6.0/alpha/binary/sets/tests.tgz) = a3bfffe6cbdb12c847a397c474996dbd
-SHA1 (NetBSD-6.0/alpha/binary/sets/text.tgz) = 4087ff757867de3d1e48c7edcd0a1f63879141a2
-SHA512 (NetBSD-6.0/alpha/binary/sets/text.tgz) = 396175d3caa9afb10f69ca6724fe1544b685863edb272a36e46c6164f8a5ce8099d9ce98c988fc691e61cafa0741053b31f46af6d87873e7473ee2c7db05c5e2
-RMD160 (NetBSD-6.0/alpha/binary/sets/text.tgz) = 84877daedd720eaae66d03670b5391586cb5818d
-MD5 (NetBSD-6.0/alpha/binary/sets/text.tgz) = 3ad58e3441e75733d2bd172cc03d96c2
-SHA1 (NetBSD-6.0/alpha/binary/sets/xbase.tgz) = 8cb5878605114e42a100af9f6000da692936b458
-SHA512 (NetBSD-6.0/alpha/binary/sets/xbase.tgz) = 55901d2b29117e70ee9f60bca845a291f73c827b82a6d79d2035e8e861cc6d3553e9b698a2573af458ba7ff7f0d66c1b904e0510aac5391a768a7e85c8dcafa5
-RMD160 (NetBSD-6.0/alpha/binary/sets/xbase.tgz) = 27a6b757c2c136eb48d35e996bebae1154691620
-MD5 (NetBSD-6.0/alpha/binary/sets/xbase.tgz) = 7599e1da98dc669a5915742f46819445
-SHA1 (NetBSD-6.0/alpha/binary/sets/xcomp.tgz) = 0f7cf0e0611671bcc8763c66b6ddb96ba2b84cbc
-SHA512 (NetBSD-6.0/alpha/binary/sets/xcomp.tgz) = cabd0398fbb72d9d2c833a56c5ff77e5fcef535dd4ebb7ecf482fc278c6a05d9bdc4d0e443b2eaa9c1ba2ba6044cb066b9c10de8377bf754c3b2fde1925e90e8
-RMD160 (NetBSD-6.0/alpha/binary/sets/xcomp.tgz) = 0e6f7dfd1b78eed02bfedd4e354017d4ca193d3f
-MD5 (NetBSD-6.0/alpha/binary/sets/xcomp.tgz) = f830daacbaca8ab9bc135239ee1568ec
-SHA1 (NetBSD-6.0/alpha/binary/sets/xetc.tgz) = 392c70eb80215d3165d545e40212a8b5d0e071e1
-SHA512 (NetBSD-6.0/alpha/binary/sets/xetc.tgz) = 54d20a3d9023cb964eac1ea822cab4648ee70d4ddd4e45779077f9ee7bfeb895f06adf2ec5e6f63869c4746d89aaefad17837afe43023631a204b1e536b15447
-RMD160 (NetBSD-6.0/alpha/binary/sets/xetc.tgz) = 6308c2a5326f2e8dc958195e9c98e151c9727b06
-MD5 (NetBSD-6.0/alpha/binary/sets/xetc.tgz) = a591745a497f419dd0d277d43c2e7e1c
-SHA1 (NetBSD-6.0/alpha/binary/sets/xfont.tgz) = da7a98e196e0630e68572a298db959c1ad9e5cac
-SHA512 (NetBSD-6.0/alpha/binary/sets/xfont.tgz) = 6304ec4f69e76faaaea07f0ee720bc90dbbcb620d8980dedb6966767cd58be9ba2c8c4a7f977f4a4b9293f40dc267f7d1a92ced290e704ea6cab7f512a2e21eb
-RMD160 (NetBSD-6.0/alpha/binary/sets/xfont.tgz) = 51c4aeaae821cb352d3249f2894bbd4b90884e5b
-MD5 (NetBSD-6.0/alpha/binary/sets/xfont.tgz) = 18fdd4a9bed7c69c840cd8591c17670a
-SHA1 (NetBSD-6.0/alpha/binary/sets/xserver.tgz) = 32e0112e7e65de8beda18c41e9ddd18db5d586c9
-SHA512 (NetBSD-6.0/alpha/binary/sets/xserver.tgz) = 82587fb8cd0719eb39bc14f0e8bbf8a943d6ac710a9f4bed1ac8ea16443cf84a4f378a5dd8f077d5f8ce9213da74d6444a9da10b872f074ab45da8abc89135a5
-RMD160 (NetBSD-6.0/alpha/binary/sets/xserver.tgz) = 60936683b7027ff514f411e63c1767828afed830
-MD5 (NetBSD-6.0/alpha/binary/sets/xserver.tgz) = d8b3888a02b4e6f2198d67e731296e4a
-SHA1 (NetBSD-6.0/alpha/installation/diskimage/README.files) = 8fef6343776d407c097ffbb0622b509aa3b5d6ed
-SHA512 (NetBSD-6.0/alpha/installation/diskimage/README.files) = 0a37602db16239255dd32a5b6585a23780d9c7568e7bcdcd4f67f4cc5869ce772deda68df2428b6a8ae4e7e2e4e449f7b643d1fc5d929efa0409466a50cfaf74
-RMD160 (NetBSD-6.0/alpha/installation/diskimage/README.files) = ff4ac5a982e0c75bcc3a466b27b003da73573026
-MD5 (NetBSD-6.0/alpha/installation/diskimage/README.files) = 47f2c0383d6fc4ac6c8b25c348fa992c
-SHA1 (NetBSD-6.0/alpha/installation/diskimage/cdhdtape) = 560f896de7f7b1e2f8cb908048b3ebaeb6636263
-SHA512 (NetBSD-6.0/alpha/installation/diskimage/cdhdtape) = 10d6bd96b74b6df96c35533d14237b771d5f3f449120ea7062aff44960e8c0480048d607139ec2358961d93bba17afef407d0e775513c262e44249224ac54834
-RMD160 (NetBSD-6.0/alpha/installation/diskimage/cdhdtape) = 69eadfe52a7b4b3fe412190b7d2fd5fb83f7fe6a
-MD5 (NetBSD-6.0/alpha/installation/diskimage/cdhdtape) = 87f184344a501c90af4f7bcff11622ee
-SHA1 (NetBSD-6.0/alpha/installation/floppy/README.files) = 8fef6343776d407c097ffbb0622b509aa3b5d6ed
-SHA512 (NetBSD-6.0/alpha/installation/floppy/README.files) = 0a37602db16239255dd32a5b6585a23780d9c7568e7bcdcd4f67f4cc5869ce772deda68df2428b6a8ae4e7e2e4e449f7b643d1fc5d929efa0409466a50cfaf74
-RMD160 (NetBSD-6.0/alpha/installation/floppy/README.files) = ff4ac5a982e0c75bcc3a466b27b003da73573026
-MD5 (NetBSD-6.0/alpha/installation/floppy/README.files) = 47f2c0383d6fc4ac6c8b25c348fa992c
-SHA1 (NetBSD-6.0/alpha/installation/floppy/disk1of3) = 4d855acf87e1e1064b06c2232178d75a13c33fd3
-SHA512 (NetBSD-6.0/alpha/installation/floppy/disk1of3) = 9e86017634026e3e90a50c84a8f57badb1b7cf223aca9a643fae2bf186e443dc9eb5380cba764c89d64b7288078ca5b086b5a37b97fc47a4cc0ecfaad755af67
-RMD160 (NetBSD-6.0/alpha/installation/floppy/disk1of3) = 74abd218ad7f0299822e154ac2b420b258c83aad
-MD5 (NetBSD-6.0/alpha/installation/floppy/disk1of3) = 5a2d6e79a6714cf358c9ee8755e0aedf
-SHA1 (NetBSD-6.0/alpha/installation/floppy/disk2of3) = 4c8d4ef59efd9aeaceaef12aba4acb5c80ac3be2
-SHA512 (NetBSD-6.0/alpha/installation/floppy/disk2of3) = 72fcf5173d3b29eca98afcc9dd1c0ca172cf8509c9f449356086fcef28acff3641140745df32db394b43281a1421000959631cf55185673e430a792d026e4eb3
-RMD160 (NetBSD-6.0/alpha/installation/floppy/disk2of3) = 02ff0fdc28cb7ac47eae6869620ec5f801324654
-MD5 (NetBSD-6.0/alpha/installation/floppy/disk2of3) = 4f86d12bbbb50c2c06103f2002c88be9
-SHA1 (NetBSD-6.0/alpha/installation/floppy/disk3of3) = 4f0a721ea8eb063d964c3ec31e035f41febad205
-SHA512 (NetBSD-6.0/alpha/installation/floppy/disk3of3) = f3c66c64760246cde2e99999deac1a4dba5caa47603491de0edd47badafc5f6a08b7108e62a3e2c44d4cca55f17df48e1bc41fee948bca15d7dc0874ed321b18
-RMD160 (NetBSD-6.0/alpha/installation/floppy/disk3of3) = 1ca8581e23cc086d8bf93b39bf1efb34c8964d32
-MD5 (NetBSD-6.0/alpha/installation/floppy/disk3of3) = e558bf919697872fc6f5bfb8ef697f8f
-SHA1 (NetBSD-6.0/alpha/installation/instkernel/netbsd.symbols.gz) = 72358f5496a38794927cca6f55addc09e74983bd
-SHA512 (NetBSD-6.0/alpha/installation/instkernel/netbsd.symbols.gz) = f4fde67472e0cea2069a5d8c1a614429486c275a3ff38fd2f9c216a79749b366c79c898e9e4d58b4a2826c8b724d76b6de6b744d4eba058169ffb88b428b7790
-RMD160 (NetBSD-6.0/alpha/installation/instkernel/netbsd.symbols.gz) = 0b8b2fda5075cf789139581258d33e55e7edc18b
-MD5 (NetBSD-6.0/alpha/installation/instkernel/netbsd.symbols.gz) = 2f1474645c7c61a79af6046b873d0c53
-SHA1 (NetBSD-6.0/alpha/installation/instkernel/README.files) = 8fef6343776d407c097ffbb0622b509aa3b5d6ed
-SHA512 (NetBSD-6.0/alpha/installation/instkernel/README.files) = 0a37602db16239255dd32a5b6585a23780d9c7568e7bcdcd4f67f4cc5869ce772deda68df2428b6a8ae4e7e2e4e449f7b643d1fc5d929efa0409466a50cfaf74
-RMD160 (NetBSD-6.0/alpha/installation/instkernel/README.files) = ff4ac5a982e0c75bcc3a466b27b003da73573026
-MD5 (NetBSD-6.0/alpha/installation/instkernel/README.files) = 47f2c0383d6fc4ac6c8b25c348fa992c
-SHA1 (NetBSD-6.0/alpha/installation/instkernel/netbsd.gz) = 3057e0db687c65ad00bcc9433a8e1e8e8853b0f8
-SHA512 (NetBSD-6.0/alpha/installation/instkernel/netbsd.gz) = 72c72707e34bf282fec601e885eaa9dbfafc34dc44c97d1e100e439620ed5f3751e2b629b2b1ff40b229a29b1b217627f5fb70a198d571c0478d13d2c1f9d5e2
-RMD160 (NetBSD-6.0/alpha/installation/instkernel/netbsd.gz) = bb22d8b6c7113aad71720a489ab71dbe938e1475
-MD5 (NetBSD-6.0/alpha/installation/instkernel/netbsd.gz) = 9fece65592c8b7decdbff32513650306
-SHA1 (NetBSD-6.0/alpha/installation/netboot/netboot) = 17cf3e7f848aa8a853e322e977163547830f7357
-SHA512 (NetBSD-6.0/alpha/installation/netboot/netboot) = eb78138cdb1d289e4f39af61e24a2d0a42b5807c6869e921ffbcaf720902362f0c702ece18e1bbbb599d50b31b09ecebcaf9df5786f337ee511c0900e1bcb9cf
-RMD160 (NetBSD-6.0/alpha/installation/netboot/netboot) = 3228d2be31a224636f15cfa0f5c24cebea1d4b64
-MD5 (NetBSD-6.0/alpha/installation/netboot/netboot) = 2a71b40ce0eebc66564f796f681592b2
-SHA1 (NetBSD-6.0/alpha/INSTALL.html) = 6984fd17504c01e2c1dd83e7dbdf34bdcc7b6b1e
-SHA512 (NetBSD-6.0/alpha/INSTALL.html) = d4b63b33e62764fa6e008f5961599abf0ceb486aee59c55deb0e2f62f5e3efb0a7ec667217f72f553460d1931fff86c209345c6eccb688f67822e19f78f2b35b
-RMD160 (NetBSD-6.0/alpha/INSTALL.html) = 3d6597686d7079ca4857f5afe7fada4ddae2e4db
-MD5 (NetBSD-6.0/alpha/INSTALL.html) = c00f5ce1cc724dddfbe201deb54605d3
-SHA1 (NetBSD-6.0/alpha/INSTALL.more) = b670f381aeda31fa7a1c861aa90c8856a144460c
-SHA512 (NetBSD-6.0/alpha/INSTALL.more) = e8343ca62e59534c74a2cb3404092b71a771390943c5738c10cec908be2b202b4caafa09629b5086c0119f8c867a294fb759a76dc80705583f3db7115ad41b1c
-RMD160 (NetBSD-6.0/alpha/INSTALL.more) = 6236acfbb416a7f45499c9ba097b0ebc7df0ddc0
-MD5 (NetBSD-6.0/alpha/INSTALL.more) = c0f41cb950b8c2133e1c3d6005ed478b
-SHA1 (NetBSD-6.0/alpha/INSTALL.ps) = 902a55dd7d1b3cc6489f730e76fd8a656188ca3c
-SHA512 (NetBSD-6.0/alpha/INSTALL.ps) = 612f6a50dd02a6ef525948faaa4f77c6b60e6ea6b73fbf43fe28891523b0ba715c4c513991bbd99b36a1842c5bea3a4f59c31abcb7141af3ca77419d5ac7a399
-RMD160 (NetBSD-6.0/alpha/INSTALL.ps) = 95af61540f44c6ad5bde6110bb988b30144cac0e
-MD5 (NetBSD-6.0/alpha/INSTALL.ps) = d5cb827162bea74a99a75c4ec658cb13
-SHA1 (NetBSD-6.0/alpha/INSTALL.txt) = 00428f4fee211a107142bd3c673ac0e1bf82f8bb
-SHA512 (NetBSD-6.0/alpha/INSTALL.txt) = acc36a8ca1e2e171db9a482d5b5914cde68c2ba917478c91cbe4c6b1f14f0e46b6fc5393a6597b928b2fe043afe9373e92bc50eddaccad205b1513c9cfa5b89b
-RMD160 (NetBSD-6.0/alpha/INSTALL.txt) = c340c3eafed3235732e7bd6de8bd2e5798279a32
-MD5 (NetBSD-6.0/alpha/INSTALL.txt) = bebe671881b51664213b2b74a352ccea
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.symbols.gz) = cb8fb452336026da954a431064ac908983c73c56
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.symbols.gz) = 5ac462c2bbe07c1fc5bb719af9b8a048278c914e25c3e63a5908d04eed9b9ed3b3324af677f5910065c569e7eef9ab92fb7b23dc27a06361065193736170beb9
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.symbols.gz) = f294d6c837951cc2179aabe993db92be0507b73b
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.symbols.gz) = d5c7cba8ce43359a50bc6b41e1a59ac8
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.gz) = 0e1a51e79c8ed82328856cb4e9e1ca1f77f96ad6
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.gz) = 71822434adf5610fc6bf77371f0ea65403cbfac39194435c6fd0dcd62cfd214da5d9bd8c9a06ae300b81425339ecdca1e373e91d38870a56f1910e9e4b2f0dcb
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.gz) = 2344b490341441b4a08608454269d1bb55db13fa
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.gz) = fdba9cfe2198dbc3403ba5c9b251147e
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.symbols.gz) = b275c23887a6d7522777f6c70da7191ae2d3b64d
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.symbols.gz) = 30f57b1aa47d0c8dfae72063810dffda248ad25e03e432221861c4de98088eba502637675cf4d400809c6d2d45a17ee2b3ce87be4007fa8a2b86fb507d13426b
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.symbols.gz) = c98d06602cce33614079d4ac9049235aa71601f5
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.symbols.gz) = 5d2e2deeac92159eefa0c14bedb999e5
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.gz) = 22859d8f0aa148474db11e8493c1c1c5ca88a4bf
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.gz) = 5aad6a3e174330803b12b3c5566f422c96d6755e520b2bda951e7efd73f8f4bfbc0b902d7964688650717630355af96d51fed90fac5bbfe343f3c06d3354f5e6
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.gz) = 25124d4395c714580bcc3a2f8574df3d9a5e5ef4
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.gz) = 09691319c1029293d76f2b51048cd7d8
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 1ef0dce70ce636d55eb7cb5973f335729d17826a
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 49a644ba39cd11ad2fd3c1aa27b7f2999019613bbb4731ee2098b484eee74d740baf4f67ddb7b4cdaf7f710e507ed719bc6840d704acf5ed80ce419fb8bfae1b
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 459fb44892f496a9c7b445e837d875ddc1a7f056
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 5902c6bc85313724e355e95a06e968a0
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz) = 0f4ec7742c4c53d99cbc4b645931758d0a7ebe2a
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz) = fa1e39362e515e808831bc81751231062ebe4987eb1790eb87cab7490697372472fac67df5d49fd41b1d6d3fbecc93f64d7c433d357c13a626636feda14f4a7e
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz) = 2322a8960ba58563ea8507a0073c03934d8f58ad
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz) = 31ea20a739a3e9caad0f4af0da531a0d
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz) = 30bfc0edb5ec053c327cfab318877bcf633e3d26
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz) = 7244306522782443df4e807ebf627eab0f6f994c3c1de9cde73781b7b8d16a2b3e7d1ab578c03bd3b2d6df19dc20485146ecb9ff920e2860a0858158509a4229
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz) = bbae752f9fc5b0a9725e12aef5da652699ba614b
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz) = 72cc8998d1dd79b0471e4924a1ee9cbf
-SHA1 (NetBSD-6.0/amd64/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/amd64/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/amd64/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/amd64/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/amd64/binary/sets/kern-GENERIC.tgz) = 8880ef6795951dbca5379bffb7040b31e75e8217
-SHA512 (NetBSD-6.0/amd64/binary/sets/kern-GENERIC.tgz) = e1a58551a91511f0fa86ab4395a8901154e75bae344045200c1794d759cbd82c2441703123ee0c5d42561f08cb192e2bb39c57f4cb61b8fb970b579525fb1952
-RMD160 (NetBSD-6.0/amd64/binary/sets/kern-GENERIC.tgz) = be4c1cef72f8b3971890c549d908d03cf9ccae74
-MD5 (NetBSD-6.0/amd64/binary/sets/kern-GENERIC.tgz) = 60e67b64337a09d0d00bbe70c0ef43f6
-SHA1 (NetBSD-6.0/amd64/binary/sets/base.tgz) = 41f139d30b18839b0486e238bdcb1a08e084ac0f
-SHA512 (NetBSD-6.0/amd64/binary/sets/base.tgz) = 136fec9ccc141fbf39c4667f09f45ed3a7f07183c315819c391e3c47b67574d4278762e9be6ac7e325e7ebd2929dd59d1d8aa84411fb435baccf5b7d71c1e58b
-RMD160 (NetBSD-6.0/amd64/binary/sets/base.tgz) = 38903209c490bb8094061951fffc5ba7bf2cce24
-MD5 (NetBSD-6.0/amd64/binary/sets/base.tgz) = c4d69c1e245e95ee1ef891a998536f30
-SHA1 (NetBSD-6.0/amd64/binary/sets/comp.tgz) = 5d0d34f4debbf611578852fdc549197357f574c2
-SHA512 (NetBSD-6.0/amd64/binary/sets/comp.tgz) = 96cd27a092b2cbabc0f6f053d651ae94b6ec65b2c9f4812c6efd432c9ea9a321d38f8e88e6dba03ca7e6d3fe8dc2b43c3846880966964d6841d6cacb87f5c4a0
-RMD160 (NetBSD-6.0/amd64/binary/sets/comp.tgz) = 0fc9f9cef2839291204f399014f730a321ff846a
-MD5 (NetBSD-6.0/amd64/binary/sets/comp.tgz) = 1f6de4df6174d0e919b343bb0426ba92
-SHA1 (NetBSD-6.0/amd64/binary/sets/etc.tgz) = 23e42cd803c314f35f61713d7ce3d8ae6f978036
-SHA512 (NetBSD-6.0/amd64/binary/sets/etc.tgz) = 3aa2017bfd9d81b51371b31ae2eb4fa613c3cc90c532aabf1e76df938c312d1894f1b5313869a93fbd4463b903bb390ea5cf485e870d421ff0580240a04505e3
-RMD160 (NetBSD-6.0/amd64/binary/sets/etc.tgz) = d8d98a46df49ec9a28cda63da60c2fd8b2f5440c
-MD5 (NetBSD-6.0/amd64/binary/sets/etc.tgz) = d4d5351a9ee4c89d46d03025363d0af7
-SHA1 (NetBSD-6.0/amd64/binary/sets/games.tgz) = 535c8d580229e63485dbc9215ff8994babd19ba4
-SHA512 (NetBSD-6.0/amd64/binary/sets/games.tgz) = abc07cbb728d3b4148ca824f3d37c0fd789f22548f92c8d03c78cd04969828d6fb3e7396654e4709bfdc82783e5c17e3998372149b76a7bdfb186fd417a4e1cd
-RMD160 (NetBSD-6.0/amd64/binary/sets/games.tgz) = 80ca9419dae0b955ae39ba879b269eb27d34b0f9
-MD5 (NetBSD-6.0/amd64/binary/sets/games.tgz) = 1f7b98cfd037ac9a6b2487b1d3e2397a
-SHA1 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOM0.tgz) = 622ca31060c3d803bff339d53321e3b5cbe56fcf
-SHA512 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOM0.tgz) = 9943d8752f75569a2cb6611f2eb87a552cf98c92040cf2c0ec699ff0380b3b5395a7b2c951fcdbc6ef74d36073b7b066dc37ee1d60a3463836820fee7f15e5fe
-RMD160 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOM0.tgz) = 4627daedf28168da5994ad430aaac7b069785d42
-MD5 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOM0.tgz) = 3c473eed7a2c400bc22e743e6f2fad74
-SHA1 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOMU.tgz) = d29bb910d1ecf61700d54790c7376f2729dd6a71
-SHA512 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOMU.tgz) = e714d759a0635e3375ce56f945fa5df011b5037502ce0602d74db1a9d3ddf86144b13b9a2a503c231c931de998a645b8562b5254bc8e68c9537a7dea366957da
-RMD160 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOMU.tgz) = adb7515022b355b9b2f61a318d1fea6734e8859a
-MD5 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOMU.tgz) = 3beec0bff32cc7c78bcadb6f90b0455f
-SHA1 (NetBSD-6.0/amd64/binary/sets/man.tgz) = f583717a7705475c144e1b66e93b3c9c6d8e3293
-SHA512 (NetBSD-6.0/amd64/binary/sets/man.tgz) = 92f6dbefacff42d2a6c317158aee801e8d4f3791704a792ce0761faf5425c516166a9769e7f3b81abd282cc9a60e0ff07c4350ac889fe66aec794f359a27452b
-RMD160 (NetBSD-6.0/amd64/binary/sets/man.tgz) = 02ffd712d7b6d265e8c566ccbfcaa34cc9916eda
-MD5 (NetBSD-6.0/amd64/binary/sets/man.tgz) = 59adc1ce49347d61ee6eea024e2ea2a2
-SHA1 (NetBSD-6.0/amd64/binary/sets/modules.tgz) = 46a78ea373e41e73dabc27ae802b395b7348c419
-SHA512 (NetBSD-6.0/amd64/binary/sets/modules.tgz) = 8dc00ff46c87d04b72f2e4fa0b2b290ab326b907f88f4d2667e63aa0390756df4c45ed5b9e36bec6e60e472a8162b9ddc55eea89b6ed65bd2f6cf5d760f611b9
-RMD160 (NetBSD-6.0/amd64/binary/sets/modules.tgz) = b2d93414e9e22b4b55dd73fb347aefe4b6a11d10
-MD5 (NetBSD-6.0/amd64/binary/sets/modules.tgz) = aa84f46e76b3f543ac9d8ea315869092
-SHA1 (NetBSD-6.0/amd64/binary/sets/tests.tgz) = cdcfc53423e8cd984258bc8635490bd815576322
-SHA512 (NetBSD-6.0/amd64/binary/sets/tests.tgz) = d11520f52dd889947a298a2428e4b81b840ef939ee82a63fb39ac30fa59918348a6546598b9b6f28268677f7bebf9e022f8ba568a47e3f9ff801ff08666c1366
-RMD160 (NetBSD-6.0/amd64/binary/sets/tests.tgz) = 7fb2dbecae8a377eca305f74075e9f4c4f326455
-MD5 (NetBSD-6.0/amd64/binary/sets/tests.tgz) = 4c8e0463db9e784b47d92aa43bd7ec82
-SHA1 (NetBSD-6.0/amd64/binary/sets/text.tgz) = 2ad7dfb1cf3e39da165e6d0d356444a3dda315ab
-SHA512 (NetBSD-6.0/amd64/binary/sets/text.tgz) = 77140ca96473762ba22737bdf1dcd74fbe7dea97778c2da7b8b015daa2af47c20a9663e5eee092a8b353cb36caf599efc5975b7572692cb5c8b77bcde7bb8fff
-RMD160 (NetBSD-6.0/amd64/binary/sets/text.tgz) = bdb4eb7e3081ec2bbd4b1eaaacd0cd96dfe92be1
-MD5 (NetBSD-6.0/amd64/binary/sets/text.tgz) = 3c9ac230578345961050fd8adbb15023
-SHA1 (NetBSD-6.0/amd64/binary/sets/xbase.tgz) = c88f6ae63e7acba75831ae5a19cfb8151f961780
-SHA512 (NetBSD-6.0/amd64/binary/sets/xbase.tgz) = be81153fc620a58e00ab7e1069dfa80567e9d641fc4ab6256512074d5cebb7a561fa8596de8f985022ef79ec0330ee317f2a2628a7236882f28a1ea9475d809f
-RMD160 (NetBSD-6.0/amd64/binary/sets/xbase.tgz) = 9e961b920bdc6432e1e0bfcad9adfb8dfc872cfb
-MD5 (NetBSD-6.0/amd64/binary/sets/xbase.tgz) = b98819c3afd401940a578ced15418ab6
-SHA1 (NetBSD-6.0/amd64/binary/sets/xcomp.tgz) = 7f6d2efa3a5e3a5ea2729020a8ad175929353995
-SHA512 (NetBSD-6.0/amd64/binary/sets/xcomp.tgz) = 35652d685c9581d20f198d13de8b34764c9a67e808416f006b98793f6ded279111d2bbeee6ad453a8416ba3259a5d7967d0327aa7e7109b7651d923bde31a8bd
-RMD160 (NetBSD-6.0/amd64/binary/sets/xcomp.tgz) = 0b3a659fdca9ed423aec4e799f739ad6ed3a2b7b
-MD5 (NetBSD-6.0/amd64/binary/sets/xcomp.tgz) = 72711d2c486caca7a8db94316c7704ad
-SHA1 (NetBSD-6.0/amd64/binary/sets/xetc.tgz) = d2a37199497c292f9a780bb5a77a14dd481bc0db
-SHA512 (NetBSD-6.0/amd64/binary/sets/xetc.tgz) = e8fe86ecaa56d0a016ad52024d956d8e77d690b4ccbb24b060d1c824f5e67979b2067ea6635361f25e80160e6abe3d4bce7ac586107fb673c12d65e9d9bbc4bf
-RMD160 (NetBSD-6.0/amd64/binary/sets/xetc.tgz) = e566d0c03e66e9365ad71c0057dd86bcc8663f96
-MD5 (NetBSD-6.0/amd64/binary/sets/xetc.tgz) = 6a1af564a85ba3996757440dfed4df94
-SHA1 (NetBSD-6.0/amd64/binary/sets/xfont.tgz) = 425d64efdeed5bf9f8038b9f0d61cdfd0b8679ba
-SHA512 (NetBSD-6.0/amd64/binary/sets/xfont.tgz) = c6e1b0829edb2e78302cf352880d4ee3cb6f6a5187f8082b0a0df3d49bd32f57cb0df450b850044cc0437da2f0ad75249cbf0777295d90ab38a9e1e13c786e08
-RMD160 (NetBSD-6.0/amd64/binary/sets/xfont.tgz) = d0f3520bdaad4cdbd90b3fe32e663c543153c0d0
-MD5 (NetBSD-6.0/amd64/binary/sets/xfont.tgz) = be05eeb3078d0fbb93b97130d49c5982
-SHA1 (NetBSD-6.0/amd64/binary/sets/xserver.tgz) = bc339a86b1e7d42e667a03561dd66835b0e39828
-SHA512 (NetBSD-6.0/amd64/binary/sets/xserver.tgz) = 00739626f1c78297988d1696e369b7ec933119ee7f76d57c426f83a1efba9414b7a1258258ab86b6b79a1277a327ac3ab0e2177bcaa396332ecc5221c6bf8954
-RMD160 (NetBSD-6.0/amd64/binary/sets/xserver.tgz) = 9adf580fd382fa5edc147da77b23410830e6ef9b
-MD5 (NetBSD-6.0/amd64/binary/sets/xserver.tgz) = b30af2c69ca833f25c0b163fea4496d8
-SHA1 (NetBSD-6.0/amd64/installation/cdrom/boot-com.iso) = 0aeb15a62bfd640903525b517b5cb254fbb8f694
-SHA512 (NetBSD-6.0/amd64/installation/cdrom/boot-com.iso) = c3998bedff5f4320e3b14b3bc07f7e348f45a106a1f78d738934fbce564b209eb9bce72f91bfbd4f95247a2eb4fb69366d3a8a4f7a597be3bfae889858f1badc
-RMD160 (NetBSD-6.0/amd64/installation/cdrom/boot-com.iso) = 90e7d9c68c959a8c3455fca88ac7fdc5af40589d
-MD5 (NetBSD-6.0/amd64/installation/cdrom/boot-com.iso) = 5551d8cd6c5675eda32c80de279860ee
-SHA1 (NetBSD-6.0/amd64/installation/cdrom/boot.iso) = 12323858ce09cfce6d3b294bb6d33a3ecd599400
-SHA512 (NetBSD-6.0/amd64/installation/cdrom/boot.iso) = 536021f6159e5412a9b7be41967e75cdaafb3fcb319ce7c712af6bac22cee2b07f185500fb77505f5a4018a0fa5e619a5e00dc11aee59babfc1dd3c69081a0c0
-RMD160 (NetBSD-6.0/amd64/installation/cdrom/boot.iso) = a66e6ff744cb27ed79f58824945806b4ddc5e743
-MD5 (NetBSD-6.0/amd64/installation/cdrom/boot.iso) = b4ae730ff5fcc86885c266665183dd35
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com1.fs) = 7773242845d56dae16e957ba3dcde54db2d44ad9
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com1.fs) = 14a0d9a1d7b6d893ee962b6c0e73cd2f44cdef9aa0c8d814465eb9e30bbee00fffd332a962d86430a04e13fb8b111fc857b5790648d27bbbe6eaac3fb0f6a0c5
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com1.fs) = 911fbf259c7ede76a08956e0e38ea8dba1522ae6
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com1.fs) = 18052eb95118b57ee28cff9cd78a0fab
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com2.fs) = 5a1705082aa0fdbe9df2deeb8bfcde27f62e39c9
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com2.fs) = 57a01c68902c568a9e061d588b3f96857de3ebe05eab55fffc38a843bb1e25d3c1962aeb78d711a5c70ee2cc7abd5717abc4b4224794803019cd1e81c9afa547
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com2.fs) = 03c5214a031d1cee57c50888bad984f59a0ec275
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com2.fs) = 9d14a976045f475ae3a96cb7ed04bae6
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com3.fs) = 80a4a45120aad34e9cc46b8f2fbba73977e395da
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com3.fs) = db431a6d199f53a3f367e759ed4fcb117a7b664dd9d5060677a7b3ef60853d3c6d31f5c4e6c54b33df6e4223a8aa7e27c3cb56f777205b58b7239980da5f58d5
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com3.fs) = fd6ca1f2110722e28189179a1e6ae1724c1b0c3d
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com3.fs) = cf7c49437a2e74cef7d07e5ecefe26f9
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com4.fs) = 611b759a6b95830057cea83517f8065fa131d328
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com4.fs) = 8d0229d04d365efe365a1dc84a5d05090290d684fda96cb637fd8989e162a6cd90c9a9409a80740356cdbe39cb81dcf498874db475b4c2aa443ec3087675611c
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com4.fs) = f7fda0f8502ab8255fc63de3de54c92d05ce6a17
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com4.fs) = 4e1c8e49e8592e5e7a13e4118df3a13c
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com5.fs) = 671ad9865cf186c69739279463e408504e89c072
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com5.fs) = 1a4329afefd19b3dbf37a12cb287aa771dfabdeeaf6b0302158eae0cde68d970a94a9643b4b18798654473c6eb577c8e555188a7c7776e6cccc05241a7b47c7f
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com5.fs) = 9e7000ef7b4a971936e74eb1858b0f74816d42f3
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com5.fs) = 52824ec1c65bc87f196fe4fcd1887cb2
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot1.fs) = 8393070ff7b79fb60d3aa6bf9675c5bce42b7340
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot1.fs) = 092f3177383ff4bb4f51fdca19069306f75bb0b86674e2862c34374bdc2da633008805c0cdd2bd352f0da12a2cd529e19086323f0c74d1fed89b2a0d65066bba
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot1.fs) = 9b24c6e8042942c96ad46c65443e48824c2b1fa8
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot1.fs) = ad5246fc6d7ce6840762ce87d281e0fc
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot2.fs) = 5a1705082aa0fdbe9df2deeb8bfcde27f62e39c9
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot2.fs) = 57a01c68902c568a9e061d588b3f96857de3ebe05eab55fffc38a843bb1e25d3c1962aeb78d711a5c70ee2cc7abd5717abc4b4224794803019cd1e81c9afa547
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot2.fs) = 03c5214a031d1cee57c50888bad984f59a0ec275
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot2.fs) = 9d14a976045f475ae3a96cb7ed04bae6
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot3.fs) = 80a4a45120aad34e9cc46b8f2fbba73977e395da
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot3.fs) = db431a6d199f53a3f367e759ed4fcb117a7b664dd9d5060677a7b3ef60853d3c6d31f5c4e6c54b33df6e4223a8aa7e27c3cb56f777205b58b7239980da5f58d5
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot3.fs) = fd6ca1f2110722e28189179a1e6ae1724c1b0c3d
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot3.fs) = cf7c49437a2e74cef7d07e5ecefe26f9
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot4.fs) = 611b759a6b95830057cea83517f8065fa131d328
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot4.fs) = 8d0229d04d365efe365a1dc84a5d05090290d684fda96cb637fd8989e162a6cd90c9a9409a80740356cdbe39cb81dcf498874db475b4c2aa443ec3087675611c
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot4.fs) = f7fda0f8502ab8255fc63de3de54c92d05ce6a17
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot4.fs) = 4e1c8e49e8592e5e7a13e4118df3a13c
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot5.fs) = 671ad9865cf186c69739279463e408504e89c072
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot5.fs) = 1a4329afefd19b3dbf37a12cb287aa771dfabdeeaf6b0302158eae0cde68d970a94a9643b4b18798654473c6eb577c8e555188a7c7776e6cccc05241a7b47c7f
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot5.fs) = 9e7000ef7b4a971936e74eb1858b0f74816d42f3
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot5.fs) = 52824ec1c65bc87f196fe4fcd1887cb2
-SHA1 (NetBSD-6.0/amd64/installation/miniroot/miniroot.kmod) = dabc250e1cead594f5dea847da52d9ba2933b310
-SHA512 (NetBSD-6.0/amd64/installation/miniroot/miniroot.kmod) = a4dd87defdb602de2329e7397c503b075c1c373af8a0547e843040029aaf34595e117f11f9e184a69765386ed66283f3a9c994d2159e473792b4f49d45991cdb
-RMD160 (NetBSD-6.0/amd64/installation/miniroot/miniroot.kmod) = 92d16ace79c31254694e0b401abb19e659f7879f
-MD5 (NetBSD-6.0/amd64/installation/miniroot/miniroot.kmod) = df6ec580ac9753bd17f1e9aaada0be34
-SHA1 (NetBSD-6.0/amd64/installation/misc/pxeboot_ia32.bin) = 96287819b198b35ceaf13400e6852a472b0e86e1
-SHA512 (NetBSD-6.0/amd64/installation/misc/pxeboot_ia32.bin) = cad69e2c71ec9879adbcec03468172aa1c2b7dd2ae4d4b5315a7013a39a24667faa8610ab663d96d5d8229e74f8150a0afda03d3e308a54e67fb555bffba821e
-RMD160 (NetBSD-6.0/amd64/installation/misc/pxeboot_ia32.bin) = e226d78864e488c284063c1eeca1431babd8934e
-MD5 (NetBSD-6.0/amd64/installation/misc/pxeboot_ia32.bin) = a6cf18820ed6a4d823ae117148272279
-SHA1 (NetBSD-6.0/amd64/INSTALL.html) = 2ba66a1c4d70a9376ae64ba56e97acf97cb14064
-SHA512 (NetBSD-6.0/amd64/INSTALL.html) = 6fbece25fed2ab136a77f592975808e919260963a9be83b2d4ddbee6b9b24319fb08c6316f262fe208aba81e50d1156db6ad8e36974fecd6955608d807da4667
-RMD160 (NetBSD-6.0/amd64/INSTALL.html) = e4976765905456206ba0906f3d7aee383e80b5dd
-MD5 (NetBSD-6.0/amd64/INSTALL.html) = 9a1d1f0005ff232d9501ebe159d122b7
-SHA1 (NetBSD-6.0/amd64/INSTALL.more) = d1da705f0adc32b67801928824379ea45ddb70fd
-SHA512 (NetBSD-6.0/amd64/INSTALL.more) = f5e6d604726edc5759dcc63e32c046fc0f952b9e4357e331b3864d1074954db46f0a7295b63f6f3a2c5ecda4ad3fcfc568a6dfc7dc91db5559a768ad2f6fd6dd
-RMD160 (NetBSD-6.0/amd64/INSTALL.more) = 4b06e7cde85cdd8fef618f254e8a9136ff25e766
-MD5 (NetBSD-6.0/amd64/INSTALL.more) = c1d511b8ec407155635d1df1d3698af9
-SHA1 (NetBSD-6.0/amd64/INSTALL.ps) = dc0b32b40a813365cab508de06d4280a4ebe8496
-SHA512 (NetBSD-6.0/amd64/INSTALL.ps) = 62ad1a41b0101222de2a4aea45c32ed7a02a4b06d1fd86b1c4d35f6ac5605a3562ca21b815db8e27d67e4584a5e155bbf8d5dda842e165379f4efd962c19a4a8
-RMD160 (NetBSD-6.0/amd64/INSTALL.ps) = fc6b89c1155481439b4a4a66357b925227720d97
-MD5 (NetBSD-6.0/amd64/INSTALL.ps) = 833ee159c8aeb1456ad514df2b4da716
-SHA1 (NetBSD-6.0/amd64/INSTALL.txt) = fd054d29f49e793dec119508a0466e243d54d05d
-SHA512 (NetBSD-6.0/amd64/INSTALL.txt) = c5e9a67c9bcd990c16a13390db60ff432f4640434234dc69a412d2ebd57fd333ace7ea59dc5b3acc815ceef9077cd76cb26dc5d6fcc5ebaa5fc95a511928bd21
-RMD160 (NetBSD-6.0/amd64/INSTALL.txt) = 271a2919d0ff6fddc1bb771716e67a7319795f7c
-MD5 (NetBSD-6.0/amd64/INSTALL.txt) = 2de264a9a927f1f3513674ec16ac4d45
-SHA1 (NetBSD-6.0/amiga/binary/kernel/netbsd-GENERIC.gz) = ad3ce973bb574d84022cbc071997dca9377e1be7
-SHA512 (NetBSD-6.0/amiga/binary/kernel/netbsd-GENERIC.gz) = 23e227becd8364657d767347b251ca8f47efe9397b9a0cadec90aeb9e90372dc49f143026ca678d933acde69c9be780b50a589ce0cf164f61af8d4eb641f5c64
-RMD160 (NetBSD-6.0/amiga/binary/kernel/netbsd-GENERIC.gz) = 65ccd49cd01c0981f4b4a65914d59731492a9876
-MD5 (NetBSD-6.0/amiga/binary/kernel/netbsd-GENERIC.gz) = acb579f6a97b9a5909bebf16f2742b0a
-SHA1 (NetBSD-6.0/amiga/binary/kernel/netbsd-INSTALL.gz) = c3904eede4df412ea9a7db90f34009cdaee611dc
-SHA512 (NetBSD-6.0/amiga/binary/kernel/netbsd-INSTALL.gz) = 6087a06debbf2f6820f5c450495680b0f5356d2e5036e1a7787b02f9cd5c8c43da24069ac0cb14bf5b09ca5ff122905d0c26c044c361c27202b4aa9a561cfeba
-RMD160 (NetBSD-6.0/amiga/binary/kernel/netbsd-INSTALL.gz) = 8dcb009d9495e2c1f768e7900b28a263cafb1610
-MD5 (NetBSD-6.0/amiga/binary/kernel/netbsd-INSTALL.gz) = 635f24c98bd4bd94f42bf3daa9090b1c
-SHA1 (NetBSD-6.0/amiga/binary/kernel/netbsd-ISDN.gz) = c91b1e76e6f8d7b327728eb7110995968e56cb80
-SHA512 (NetBSD-6.0/amiga/binary/kernel/netbsd-ISDN.gz) = d1ba0cda42d6eaf9815f39a52429767c00769d671faaf7144c830f1d06dc5571c39e0e823a7764fbdfaad10a1f516385ed1d3d54c4053a913e8399e3a1d37084
-RMD160 (NetBSD-6.0/amiga/binary/kernel/netbsd-ISDN.gz) = 32dfb7318589e9e2445f781c1344f7b418b1b9e3
-MD5 (NetBSD-6.0/amiga/binary/kernel/netbsd-ISDN.gz) = efdc155fef394563fed3a0c32d90a291
-SHA1 (NetBSD-6.0/amiga/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/amiga/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/amiga/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/amiga/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/amiga/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/amiga/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/amiga/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/amiga/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/amiga/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/amiga/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/amiga/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/amiga/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/amiga/binary/sets/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/amiga/binary/sets/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/amiga/binary/sets/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/amiga/binary/sets/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/amiga/binary/sets/xetc.tgz) = d2ca34bd668e108cbbfd4b45720823663339f8bd
-SHA512 (NetBSD-6.0/amiga/binary/sets/xetc.tgz) = 431ca465f300e7eb5d4dbd44c43e412a296fb4d3129217e752f86a720e8a8bdf736c9add05a45518a4f3e6cffa32381ef61e9186d360b68a5f8c64d87e385fb5
-RMD160 (NetBSD-6.0/amiga/binary/sets/xetc.tgz) = 4c5d664679856b02b694534cd6afdf20597e6d53
-MD5 (NetBSD-6.0/amiga/binary/sets/xetc.tgz) = 72bd67556ac14ea0ce147374af0ba624
-SHA1 (NetBSD-6.0/amiga/binary/sets/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/amiga/binary/sets/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/amiga/binary/sets/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/amiga/binary/sets/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/amiga/binary/sets/kern-GENERIC.tgz) = 295ba9f28d2b11af8b7ea93c0b4cec03e40002a7
-SHA512 (NetBSD-6.0/amiga/binary/sets/kern-GENERIC.tgz) = b762b6592db8439df6c8d7cfd26f509425c779dcb3d27face8aea6c50dec314c15124b6623152969d5a0998c6991050c5c18a4f547ff5027c8ef56e4d4b5baf3
-RMD160 (NetBSD-6.0/amiga/binary/sets/kern-GENERIC.tgz) = 566f5c6520f253fbd5c7043931b275811853e289
-MD5 (NetBSD-6.0/amiga/binary/sets/kern-GENERIC.tgz) = 3ef7c2157fd42c60a0c1c4c898855219
-SHA1 (NetBSD-6.0/amiga/binary/sets/base.tgz) = 863379dd24489824d8140df08e3f5ca5bb63c35a
-SHA512 (NetBSD-6.0/amiga/binary/sets/base.tgz) = 845fec5935b19d810896af3451bff4f2eb6b3b02b285e8e7651c3be32c60d2abacbbb614e3c11b96cf33497fbe6505458f9a292bb0393c54a764449b9b5dff65
-RMD160 (NetBSD-6.0/amiga/binary/sets/base.tgz) = 5c87d3799986d70963b0e02416ff7648602d31de
-MD5 (NetBSD-6.0/amiga/binary/sets/base.tgz) = c8b7075f670666c9492a46c44e4632de
-SHA1 (NetBSD-6.0/amiga/binary/sets/comp.tgz) = fad62d4d7c47d956a450773b817a838f30497212
-SHA512 (NetBSD-6.0/amiga/binary/sets/comp.tgz) = c8c85b7a59df5930e8cde1715b03c2ae7646d40902e2c402292308f8eba81132a155120215c763a68dd7f37ef489d786ee73911849b69cc9c9e3ba1e86de1bb9
-RMD160 (NetBSD-6.0/amiga/binary/sets/comp.tgz) = 46162e89fb8c66089ccf0523e3b3483834284284
-MD5 (NetBSD-6.0/amiga/binary/sets/comp.tgz) = f107b1d62d1535a4dc1052752837aecd
-SHA1 (NetBSD-6.0/amiga/binary/sets/etc.tgz) = 7a2e1bc8aa53aeea37bb71ae598886da762888c4
-SHA512 (NetBSD-6.0/amiga/binary/sets/etc.tgz) = 80d275882cc7df12a3ba35a9e101e1f4597c3cd16864026013be90f0a8e8ef2ab405b5b29dc39ed3e114fac9986dc05efb661cc4361cf4d05d4e6cb25462ae45
-RMD160 (NetBSD-6.0/amiga/binary/sets/etc.tgz) = 3b71a2cfee1368a862a75f44d249b85059f34bc6
-MD5 (NetBSD-6.0/amiga/binary/sets/etc.tgz) = e8fba82eea6cdabed070234fde1acf2b
-SHA1 (NetBSD-6.0/amiga/binary/sets/modules.tgz) = 412c02a1fe2bc42ffaa13e3b5cfe30ab89ca8066
-SHA512 (NetBSD-6.0/amiga/binary/sets/modules.tgz) = 0fcda39f953bfbeaae0480d14a4e36724296ff88185985aec0863d5730048da38dd37f5f609e4b085a4776fbf139e8ca3acd693e7a5827f5fa7f51b2006b1447
-RMD160 (NetBSD-6.0/amiga/binary/sets/modules.tgz) = 44f4e35271aa128a88c14913b82edc82f93ffb57
-MD5 (NetBSD-6.0/amiga/binary/sets/modules.tgz) = c0a7fed3fc40edbb00bc24975c10c011
-SHA1 (NetBSD-6.0/amiga/binary/sets/tests.tgz) = 3d5677828808ee833c1c65cf5ff5d1cf1f66611f
-SHA512 (NetBSD-6.0/amiga/binary/sets/tests.tgz) = 4d868f712f2e0e3e9b56e6f346934b71eb174d97ff197883f3e3d4923c3dabda651bb3fa3d172fcd32ee5d07b659e7639cff6d9c9450e605174d8a09a6ac730a
-RMD160 (NetBSD-6.0/amiga/binary/sets/tests.tgz) = 662e3dcc455114628676304b277a852a49597104
-MD5 (NetBSD-6.0/amiga/binary/sets/tests.tgz) = 84a17f9c5c7bb88e34f42e3a7cbdc490
-SHA1 (NetBSD-6.0/amiga/binary/sets/text.tgz) = 8153acee4263203531a66cdf71215db94d745bd9
-SHA512 (NetBSD-6.0/amiga/binary/sets/text.tgz) = 3ca801f17e44f701543140841123196e132f920d7ac5859dc2a5133da08b73f4d730cbfc62fee5ba9bac6b0d96cf4985b951aad33cf59d5470d7b99cadaf51dd
-RMD160 (NetBSD-6.0/amiga/binary/sets/text.tgz) = 5820be807d773054a2c25d0c0009141ddf4a3d5c
-MD5 (NetBSD-6.0/amiga/binary/sets/text.tgz) = 6640874a003b751e38fe8ecd14f001d7
-SHA1 (NetBSD-6.0/amiga/binary/sets/xbase.tgz) = c2df6e9a1c3bdae97964577118ae358efe3e3f38
-SHA512 (NetBSD-6.0/amiga/binary/sets/xbase.tgz) = 4751bb14d6a5da31d95ab7e5cef52fcba99b8e13b8379f7fcff8aafe8116c4a036553adf4e6e9bed1642cf39b8e3de6a4e29a37ea48d1363dad853ef3d198604
-RMD160 (NetBSD-6.0/amiga/binary/sets/xbase.tgz) = cbeb269f4126adf0e3e9894888047f70a42f1d6d
-MD5 (NetBSD-6.0/amiga/binary/sets/xbase.tgz) = 03727cb263b9f50dfec22ac09d5d0543
-SHA1 (NetBSD-6.0/amiga/binary/sets/xserver.tgz) = 3e746f532be1a2ea1d5d38894bf0be416021412a
-SHA512 (NetBSD-6.0/amiga/binary/sets/xserver.tgz) = b90fcec5aea23879b3c39aa516e1c658064d35e8dc8172fac9f722b9c08f71a73f3a33d84dc618c88bf368156e9e4bf220f3cbd110f66bd213838fef73af50f3
-RMD160 (NetBSD-6.0/amiga/binary/sets/xserver.tgz) = c50619861d88fbc22413aca3bad38cb33065b590
-MD5 (NetBSD-6.0/amiga/binary/sets/xserver.tgz) = 5ac22d2440ed272bbebec827a0134acc
-SHA1 (NetBSD-6.0/amiga/installation/miniroot/miniroot.fs.gz) = d83dc1458c18c0625f767f00066eff80547ee71f
-SHA512 (NetBSD-6.0/amiga/installation/miniroot/miniroot.fs.gz) = 415b4c824c4efdd1c8fd597c6c8222c26d77e56f6f36bcb65d9e7eb3882c20f3c452f05b4541a0832590e53a67b12423d21196626fcc7c1cad4992648a98e136
-RMD160 (NetBSD-6.0/amiga/installation/miniroot/miniroot.fs.gz) = 4cf219c14c3c367d95ff4aa4cf04dba379ee16c7
-MD5 (NetBSD-6.0/amiga/installation/miniroot/miniroot.fs.gz) = 1bb2a3735737d2af8155407157cb2120
-SHA1 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.14) = 32e902d420c2ba8498854bd26387369b09efabb6
-SHA512 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.14) = 3fe58857d83d88f1fc7f6e29e8ee079be25326abad3a25ba5f64e3429f22f08ef102551e15c4275fe973d5536a5d459edea384fdd2293f68fe6d293801fba85c
-RMD160 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.14) = 17a84971cee95ff8bf1b64d5071bd1fdbdbc5a99
-MD5 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.14) = 1f841716409b236df90d9c5d63332edf
-SHA1 (NetBSD-6.0/amiga/installation/misc/loadbsd) = 2c8e314ee812e159ea479bacf09c47a2a4911e17
-SHA512 (NetBSD-6.0/amiga/installation/misc/loadbsd) = 881d3187366e2736e65e22bae93f24afd0b34b841b733898d3d172d98084f1729b19a6277445601da35471e3583e98b86008262b1a77dbb8bcc37e0c03d07b32
-RMD160 (NetBSD-6.0/amiga/installation/misc/loadbsd) = 00249c76e9a57ed5e58efbdc1001f782595c3918
-MD5 (NetBSD-6.0/amiga/installation/misc/loadbsd) = c1cc983600053a7de29feb09d703754d
-SHA1 (NetBSD-6.0/amiga/installation/misc/device-streams.tar.gz) = 5b96fab4bbb49a985481dc5c1e2830e994bd88ec
-SHA512 (NetBSD-6.0/amiga/installation/misc/device-streams.tar.gz) = 88e35b476d60dd988e8056263fc4f86893c5a7c2c3125934db8d728e3b679554b229b2adc3babf8c2ff21af46530eea1ff30e4b6af550b331ad22bd29e18434f
-RMD160 (NetBSD-6.0/amiga/installation/misc/device-streams.tar.gz) = d0444d1e967a624fde15e4526f9c7f673566492d
-MD5 (NetBSD-6.0/amiga/installation/misc/device-streams.tar.gz) = 6a3eed6278587660ed543c7449ee571e
-SHA1 (NetBSD-6.0/amiga/installation/misc/runbootblock.README) = 2d62005b98533a4fffd7d0445ac8cb7c5ac11c59
-SHA512 (NetBSD-6.0/amiga/installation/misc/runbootblock.README) = 9f071ff7ac0d2eabc77d43faeee48cba3a1883c957b046fad4d7d3237f41d2752a1e010a5d9f5324f90b81bc9968afe425d320e6742ac8f5e081056d5e133baf
-RMD160 (NetBSD-6.0/amiga/installation/misc/runbootblock.README) = 872a2169c248b016d6782a6b9c4208c67a346d12
-MD5 (NetBSD-6.0/amiga/installation/misc/runbootblock.README) = c60fe181cd9b255e294bfeb4be411181
-SHA1 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.16) = eb660b987186a4e3a4eccb740dbb9e061a4b7216
-SHA512 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.16) = 0f4565e2de70eaaf1d973da2b4a988e794b4608b2b0fa9c84dd05c82ade92fc4b75339e94e4a593e051ab3a364611fd7dbc2b48dccd4906f7b42fb665f7d711c
-RMD160 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.16) = a071897afbdd11655a21df5a89c6e49b6e8a3574
-MD5 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.16) = 8e67fb434887e942fe63cf308195b18f
-SHA1 (NetBSD-6.0/amiga/installation/misc/rdbinfo) = e413a8a5631dfedb4b1634c709836d1f92d9b08c
-SHA512 (NetBSD-6.0/amiga/installation/misc/rdbinfo) = 912ddb9bd1ba1af07e1072fee9a09f22124792abfc8f4f178a5df66dad17c39211c52d2a581111338a523f17a0dd58315d798659e901f14084d62a8c890e0a44
-RMD160 (NetBSD-6.0/amiga/installation/misc/rdbinfo) = 8fb8b41e39f6c2d48b6b46be0433dfc45c353621
-MD5 (NetBSD-6.0/amiga/installation/misc/rdbinfo) = 027c4bfce639d3cb88d617b0e85c0c4c
-SHA1 (NetBSD-6.0/amiga/installation/misc/runbootblock) = 598d688badd592a838dc260ce36b84c7835e72c0
-SHA512 (NetBSD-6.0/amiga/installation/misc/runbootblock) = d4cf9fe94244f1a832a6e474ff777ae7b901e86e0aabbbceb356c42f533dadb370686080b8e64993b9e07502310a4140fd393db5ddbdcd7a9e44c86b20f4c0a2
-RMD160 (NetBSD-6.0/amiga/installation/misc/runbootblock) = 2457b64f16ee58d22bacdf407ef35a1e9d244e1f
-MD5 (NetBSD-6.0/amiga/installation/misc/runbootblock) = d4d059566ad067e4d60259b389a5a9c3
-SHA1 (NetBSD-6.0/amiga/installation/misc/xstreamtodev) = eaf846a0d81754fb778b070926c495720cecffac
-SHA512 (NetBSD-6.0/amiga/installation/misc/xstreamtodev) = 873e7ffa5686a69b4a0ad68626f5e32176c03fc6231072531b36af3d0c0c055ced63e6c7f5cb0f3c6568f47720f31b76140aeede3f3dd9ddc8b639c6b3bdd5bf
-RMD160 (NetBSD-6.0/amiga/installation/misc/xstreamtodev) = 16910f7f243ca8ae74b8ff90d89163edbd4c3fbf
-MD5 (NetBSD-6.0/amiga/installation/misc/xstreamtodev) = a9e2e97f7945cf34da63aef17bed0f3f
-SHA1 (NetBSD-6.0/amiga/INSTALL.html) = 42ae087edd4c644275cb6a351bfc0801a23f7b41
-SHA512 (NetBSD-6.0/amiga/INSTALL.html) = e3f4389bff567192811d94c90b1df6d35d379774173ee935b2ebacf6ebc04edee9d270a71cf1e312bb52cfdfdf3ea7fa50f3cc6058bef88051f6da2953faefe0
-RMD160 (NetBSD-6.0/amiga/INSTALL.html) = 941e3e7501290a6a596c10bb9e9dce71fd68f01f
-MD5 (NetBSD-6.0/amiga/INSTALL.html) = ca5a2dcf7c5a927f0f89edabd084d59f
-SHA1 (NetBSD-6.0/amiga/INSTALL.more) = 2ef7c56d3b3789f858d82b96f8b955801feb402a
-SHA512 (NetBSD-6.0/amiga/INSTALL.more) = e1f87c081f267bb5bda5f1f07467e4081b3289cc1b5eead1ce26e954acf6704ad86ac95fb8958130f0a5b198eca80b967c7089cdc35ba4399cc79ab822df2ec2
-RMD160 (NetBSD-6.0/amiga/INSTALL.more) = 55a90159f299abe126ea37f0becea2f692fb1595
-MD5 (NetBSD-6.0/amiga/INSTALL.more) = 1357d2cc09f7d5429c5790dd32592032
-SHA1 (NetBSD-6.0/amiga/INSTALL.ps) = b4a7420ef6502bd98009c6f7b79053a076881f28
-SHA512 (NetBSD-6.0/amiga/INSTALL.ps) = 295f43cd3ba4b64deec0652bab61802cc37a7c3e75cab305cd0e12a682822a137abcd0915115709e1147e952b87bbb128e53251625288ba58068a52e491dd0da
-RMD160 (NetBSD-6.0/amiga/INSTALL.ps) = 07a4ea8478343a0f6a1e935eca5133ab116b5779
-MD5 (NetBSD-6.0/amiga/INSTALL.ps) = f07315266b0fd45fe58f107dda2177f8
-SHA1 (NetBSD-6.0/amiga/INSTALL.txt) = 6f5c90d805c69d5c75efb96b3b579d49bb123a6b
-SHA512 (NetBSD-6.0/amiga/INSTALL.txt) = 2fba02db405672d44df143421547a2291272a56f6d6e37b5da1f0396739ac55c695178c2e115a5af8574d6c323c8adc2747073e799b59d4e886191ce1baeb5cd
-RMD160 (NetBSD-6.0/amiga/INSTALL.txt) = 18db9a1a6e4af5935ed15d37c218b0309309c95c
-MD5 (NetBSD-6.0/amiga/INSTALL.txt) = 23deef4d8fd55d404915f004ba0fde9b
-SHA1 (NetBSD-6.0/amigappc/binary/kernel/netbsd-GENERIC.gz) = 1fb8ac599ecb67083a0505f7767600b5a00e6164
-SHA512 (NetBSD-6.0/amigappc/binary/kernel/netbsd-GENERIC.gz) = a41b53fecaa5077d80a2a6191073785c87ef703a4cd17e45ea1064e64c923fbf9d97edcc1c4e58ed205ea85f070f80a992198943a9384f4af473a11058c56d4f
-RMD160 (NetBSD-6.0/amigappc/binary/kernel/netbsd-GENERIC.gz) = b9f459e21e09ac314b2a02a2ec1a5ef0841af3d0
-MD5 (NetBSD-6.0/amigappc/binary/kernel/netbsd-GENERIC.gz) = 8c59d3085078659f9fd319d69ea1bc0a
-SHA1 (NetBSD-6.0/amigappc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/amigappc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/amigappc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/amigappc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/amigappc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/amigappc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/amigappc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/amigappc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/amigappc/binary/sets/kern-GENERIC.tgz) = 8cfda7d67d00c0344fc8b7e15c14367c9dd3c0d0
-SHA512 (NetBSD-6.0/amigappc/binary/sets/kern-GENERIC.tgz) = 00ecdc9511f389035fdd0d5786ec5b16ea52722cf390b75b11c0d0c5504d96bdfbaf6b19237e752aba9d530ed80cdaeadf18a7d0079c22a1560644fa8fb2ffc9
-RMD160 (NetBSD-6.0/amigappc/binary/sets/kern-GENERIC.tgz) = 0508773016c4dcf8b88d238235c66fc61785c0fe
-MD5 (NetBSD-6.0/amigappc/binary/sets/kern-GENERIC.tgz) = ada4ef952407ea1d320765955f626aed
-SHA1 (NetBSD-6.0/amigappc/binary/sets/base.tgz) = 69692adf17c4631804d6e78e96868bf22a0f80e4
-SHA512 (NetBSD-6.0/amigappc/binary/sets/base.tgz) = bc3f89b3201c184f38bed2dcd3e74ce01a8c9b5cdba1065bfe5bc0eadf0ed71fd73bcb9d0add77ab7d2cfc4848f40c482b0e2cbf50771577716f8a344eda5a6b
-RMD160 (NetBSD-6.0/amigappc/binary/sets/base.tgz) = 3cb20928324c3bf484a05a04d47afa4f587d5d52
-MD5 (NetBSD-6.0/amigappc/binary/sets/base.tgz) = 00d35c074b0f69e81494f42cd43ccecd
-SHA1 (NetBSD-6.0/amigappc/binary/sets/comp.tgz) = db98cb19c33216dafdd0ab26cbfa2a4f0cc685e7
-SHA512 (NetBSD-6.0/amigappc/binary/sets/comp.tgz) = 7dc6b1ed24deecd9f29aae5867bd2d89c9df3f443d522315f541eae77fde420d15b63233694043595a0f12491af5e24699598acc45ed05d9622911869f79ceb9
-RMD160 (NetBSD-6.0/amigappc/binary/sets/comp.tgz) = 776b79b7b476cc3b4caee7712070864d35779f66
-MD5 (NetBSD-6.0/amigappc/binary/sets/comp.tgz) = 385fe9939b6bb28a37cdf9cc3958dba8
-SHA1 (NetBSD-6.0/amigappc/binary/sets/etc.tgz) = f424a289be42a94c875757d9f83756d7e9286f20
-SHA512 (NetBSD-6.0/amigappc/binary/sets/etc.tgz) = b736da20bee72bb1962acce7cb8cd51e851f541ec79766d2258f1322ae843b0879208a6f69d6dda9ecc74a4bf7739fed626b8205432dd63f630b04803418307c
-RMD160 (NetBSD-6.0/amigappc/binary/sets/etc.tgz) = 0f163aa3a9450f45b40760786373089e52dae0bd
-MD5 (NetBSD-6.0/amigappc/binary/sets/etc.tgz) = c2cb43cbeb231d24b3864c7882da8edb
-SHA1 (NetBSD-6.0/amigappc/binary/sets/games.tgz) = d10c319a009f9859de37a5d5bb994d29669dce16
-SHA512 (NetBSD-6.0/amigappc/binary/sets/games.tgz) = 59e00cdf1b42e285db9cd29ab195b693f1989cd1480e644787307ea722a1a695e70708ad8fa6d0afbbb51de4ca8a4b81b550e2f1745d0140a47e1b6a7002a236
-RMD160 (NetBSD-6.0/amigappc/binary/sets/games.tgz) = 0baf65f6198b6f1c40960b30424a3ad44c1eca2f
-MD5 (NetBSD-6.0/amigappc/binary/sets/games.tgz) = 304dc86d68c23c7f30c30e4f092b6982
-SHA1 (NetBSD-6.0/amigappc/binary/sets/modules.tgz) = 2a05a8cf525b6b0323f54840bb42e069a36f1988
-SHA512 (NetBSD-6.0/amigappc/binary/sets/modules.tgz) = fc33e9c609d38775e7004d2715158178d08508f8a890831270191b7f32fae8a2d2b56e74e59d4f5d37574827cf85eda28e15f88ac1544a1ceec008105107dcb5
-RMD160 (NetBSD-6.0/amigappc/binary/sets/modules.tgz) = 931d81973e92a161da6468aeeb0b7a486fc96511
-MD5 (NetBSD-6.0/amigappc/binary/sets/modules.tgz) = 13f7ee97c852a71b51c91dd8f659b202
-SHA1 (NetBSD-6.0/amigappc/binary/sets/tests.tgz) = eee320cd38b5396a305b912cd43ad4f40dcb0e98
-SHA512 (NetBSD-6.0/amigappc/binary/sets/tests.tgz) = 3c2377b75fb69924c646904f67e3762bddbd5fe40214df319d205f412e7377e7695d5b648545f22e9b42696cb3fd3ddb9bde4ed7b3ad1d48ea32fbbf13356354
-RMD160 (NetBSD-6.0/amigappc/binary/sets/tests.tgz) = dd0ea2b9c6f23f409ced129c5dc847c582b572fe
-MD5 (NetBSD-6.0/amigappc/binary/sets/tests.tgz) = 2f0dc32c95f23026c06b50c946dce965
-SHA1 (NetBSD-6.0/amigappc/binary/sets/text.tgz) = 7b28a25a69ba9d2870c31c302be38d0c12b11486
-SHA512 (NetBSD-6.0/amigappc/binary/sets/text.tgz) = 77dcaa1c134ac4f346bf782c5c20ea4304b42a15a60a1321e944e59665946d1b3ddfcd9eba919f6ea4ca947dd8df63a9162adfea363e01758ffa5bf8e7f49e12
-RMD160 (NetBSD-6.0/amigappc/binary/sets/text.tgz) = 438d720340cbd19f86ac8449dd705d125958cdbf
-MD5 (NetBSD-6.0/amigappc/binary/sets/text.tgz) = 3fc18e1ff4fc50d561b478b39fe7f855
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xbase.tgz) = 11ec98aff57d5a8f8cabcc0a41eb7e41c2cd750e
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xbase.tgz) = c9c39d05fa60bc2a0e1a4aed89ecfafa47c203652f23b971fa9b3d23df291fbeb4735dd4621a81a46eff276c80410ee36492162e5282bf19bc9df4bf889d4fb8
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xbase.tgz) = 4d1a32acb55c107327f1605a6a7d3379e3e3fbc1
-MD5 (NetBSD-6.0/amigappc/binary/sets/xbase.tgz) = 0a959da0b8e03e2686da275c8311addf
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xcomp.tgz) = 5a450d9cb090214e14b45d59ee87d7786da4afcd
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xcomp.tgz) = 2478cf90ce45e16d8854bfc2aad28d102aafb53f9b2fd39756bff0970c0546f52a3d31be85e581ae78e982b06f17a8de77eea776d7d8e0770e00a0e198c06bbe
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xcomp.tgz) = 82323c0e4b56e79891087934eed15d1472646bec
-MD5 (NetBSD-6.0/amigappc/binary/sets/xcomp.tgz) = 096eaba339adb8b492dc1ce5de1dada0
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xetc.tgz) = 98fd5a6cb8eab73e8453afe8626198945e0cd1e4
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xetc.tgz) = 13b0c70af019c1e2bf14c8df794f497c317cc94e23012f61b88e7386327cd43c6a7b00a04ed4d65975849db9978fa63b401a2d1a49f0d476e17e4d5123d66e8b
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xetc.tgz) = ce7639ef1eebd525f0f6631e4aa80a5d44a9ba5e
-MD5 (NetBSD-6.0/amigappc/binary/sets/xetc.tgz) = 2bdf6c00be2e1b9420a8d6fd6ab9e285
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xfont.tgz) = f87acd8ea1747d825ad1038f8984bfd9cc5ed3c8
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xfont.tgz) = bd4c6c5913572cfaff4c3cdd66d2e745605d4f8c70f46e25951c109700c4a05a4b8d1202beb90b7b0cb5ba7b37bdcb3bc31a5ddba8737b7133fa3c2239312f62
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xfont.tgz) = 6ff6daa8eff23cd8f49f60ac7adf82afaf029a02
-MD5 (NetBSD-6.0/amigappc/binary/sets/xfont.tgz) = e9eb507d880069bb39bca1e12ca61f05
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xserver.tgz) = 5dca2b2f9ebbdd6d659e06bdb69987fe02278968
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xserver.tgz) = e2e87ac352cbadc9e0590b7ddc402de6dc4ee3fb26a504265aa1a706ef53135fb80d0d3e149e94825485fd121add254d68a88ead521949f55da7d9e252192575
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xserver.tgz) = 94ab84cf7ee91393ef0630b7b3110a4846940dfa
-MD5 (NetBSD-6.0/amigappc/binary/sets/xserver.tgz) = 6ca7773bb022c8842ce6a0a4a0f23c80
-SHA1 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz) = f4e479e3fec7462469600527ae1b9aecd1c86bcd
-SHA512 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz) = 8cd3e3d089a53b56fdd47ab4cda09b42bf12c92074699a3764f4fdbb23c58425d68f0ee8e862987386d9c8107e0e115daf39bd35058b4e51d93c4dc7d5756d04
-RMD160 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz) = 79dd220dcba4f30fd629e744993e3d8617d2c3ac
-MD5 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz) = 2ffba67d5ec969424a75c71e5f04c77f
-SHA1 (NetBSD-6.0/arc/binary/kernel/netbsd-GENERIC.gz) = c34a668c8d951cd778d973a0066223bd4ea98133
-SHA512 (NetBSD-6.0/arc/binary/kernel/netbsd-GENERIC.gz) = 47685372141fd6fae114fcbcc57016c6896f96705be116020802c6e6a7493cbea9ecf62dbbfc89c49f0f90d42aee1f06b9d6ed3eb679b0b1e3e2705c3ff0ec1c
-RMD160 (NetBSD-6.0/arc/binary/kernel/netbsd-GENERIC.gz) = d46270739b1bc29e7e361805d4f23a28ced95975
-MD5 (NetBSD-6.0/arc/binary/kernel/netbsd-GENERIC.gz) = 046973b3c11b35cb476d07db96419743
-SHA1 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.gz) = 01c3eb7eabe2423ff73da425627b361ff99bbe21
-SHA512 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.gz) = ae090ee3642160ed2ab38f6cc1487b545cce31320c8561bb4af5501dc757f24997798a7556a2048cd7f7e0da9ad3415e458273245317bcacafa0d9b76f4326a8
-RMD160 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.gz) = 9bd6a441f8fbbf01f78b536d75bb8cfdaa56f8cd
-MD5 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.gz) = 6103f4c89298eab52773ed2a6fa59de6
-SHA1 (NetBSD-6.0/arc/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/arc/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/arc/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/arc/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/arc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/arc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/arc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/arc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/arc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/arc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/arc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/arc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/arc/binary/sets/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/arc/binary/sets/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/arc/binary/sets/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/arc/binary/sets/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/arc/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/arc/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/arc/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/arc/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/arc/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/arc/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/arc/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/arc/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/arc/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/arc/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/arc/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/arc/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/arc/binary/sets/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/arc/binary/sets/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/arc/binary/sets/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/arc/binary/sets/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/arc/binary/sets/kern-GENERIC.tgz) = a49dc5701671d377df81d0dc82ebca225e8aff4a
-SHA512 (NetBSD-6.0/arc/binary/sets/kern-GENERIC.tgz) = 75bf73c2b22aac1948b5c0fd6ca0a0d240fc398baf7dfe4bbb155f44c8e3bf47d618fb5ee97215728baa471c25dddc285643064acbfed88fcc33f463ec36162a
-RMD160 (NetBSD-6.0/arc/binary/sets/kern-GENERIC.tgz) = 49075dea0d02de7d508afb65fa4c4591f7ab1b0a
-MD5 (NetBSD-6.0/arc/binary/sets/kern-GENERIC.tgz) = 3dd1b55b9d8aaa84ce5630c649d6d17e
-SHA1 (NetBSD-6.0/arc/binary/sets/base.tgz) = 5c25c736260c32dc5e61db84d779f979421417c4
-SHA512 (NetBSD-6.0/arc/binary/sets/base.tgz) = 7bccf72e05a792158f7aa8617b270d860221b935c3c092da8961b35277931500f5e6e8a572536b7371e66dbe7368b17f62512783240dce9aa2990af50c60fc1e
-RMD160 (NetBSD-6.0/arc/binary/sets/base.tgz) = c36e7a0c39a18646de9363196aa56dd0c4a6ea6b
-MD5 (NetBSD-6.0/arc/binary/sets/base.tgz) = 97e2836870812371a84cf44790cf6f16
-SHA1 (NetBSD-6.0/arc/binary/sets/comp.tgz) = 52ac953130a36ae6bba2139c7892d6ccbab0f0cf
-SHA512 (NetBSD-6.0/arc/binary/sets/comp.tgz) = a09590c181019592ffb4341620eeaaae1f25e971ee975ac337c96cdc5dc6ceb2074dcba6a5dcc723c30e5db3d32148146eb6c1eb38390d0162aff4d5071434c6
-RMD160 (NetBSD-6.0/arc/binary/sets/comp.tgz) = e9c5ae0abd43a2ac743f62a498ad8bb0dde61ed2
-MD5 (NetBSD-6.0/arc/binary/sets/comp.tgz) = 2eebbc2b1b8bbe21166a0d860bea9dd5
-SHA1 (NetBSD-6.0/arc/binary/sets/etc.tgz) = cfa766b3b33eeae2aa28312e0ca6e434e2573487
-SHA512 (NetBSD-6.0/arc/binary/sets/etc.tgz) = ef3806802fa813b1bb60674c032f31e5a140b89953aabe715d050e7c820413ae991de791e96d8aecaa1aea8989f6f0268726ad5dc62e42ef06ca6670fb6744ba
-RMD160 (NetBSD-6.0/arc/binary/sets/etc.tgz) = 395630144133efd05b0fbe596773c5ea4218aa8c
-MD5 (NetBSD-6.0/arc/binary/sets/etc.tgz) = af810d6fb839f2953bba9844501cdcab
-SHA1 (NetBSD-6.0/arc/binary/sets/modules.tgz) = cfd582b6f65203d1916ed6655d02f5aa6ad5ba88
-SHA512 (NetBSD-6.0/arc/binary/sets/modules.tgz) = 86be394fe232856d0de502fb1569fd03de91a81ad782389414ed75618d63d97d8abebc14fd44843414d865071f51940c248d076a57524e8ef91c791ee98620c9
-RMD160 (NetBSD-6.0/arc/binary/sets/modules.tgz) = c63e9a0caaf005f8c03275c8faf582d95b3c6700
-MD5 (NetBSD-6.0/arc/binary/sets/modules.tgz) = cd4a56dcabef37fbf7a3fb7ee95ea738
-SHA1 (NetBSD-6.0/arc/binary/sets/tests.tgz) = 25fca6e0ee3c0c05615fb5753d78584e0c3fd5ca
-SHA512 (NetBSD-6.0/arc/binary/sets/tests.tgz) = 54fd09bdf390959e4a795af7efa34cf463f0d41676a87bceae7e8278f97693549bea10d7de099c0f3af34f58ea76820ecd357894d9c7e5bccc65d2fa9736dd40
-RMD160 (NetBSD-6.0/arc/binary/sets/tests.tgz) = baf5b98a820547d80922493f59c48028345306da
-MD5 (NetBSD-6.0/arc/binary/sets/tests.tgz) = 601e2f0d37d00e07a671ed2cb823e68e
-SHA1 (NetBSD-6.0/arc/binary/sets/text.tgz) = fe43613098e27d16d74e9c21e0b18cc5e932e673
-SHA512 (NetBSD-6.0/arc/binary/sets/text.tgz) = 4935e883c8328121eb941726a41487dc9048a9d3265460e9730465a3d1b8283e4bd01ad2c220607848f898f178dac0738c6bb6402243bcc338e5f933a6c99f06
-RMD160 (NetBSD-6.0/arc/binary/sets/text.tgz) = b57da314266be1fdf31856f5ad5a52703016b61e
-MD5 (NetBSD-6.0/arc/binary/sets/text.tgz) = 9236a9d595f3a96234ba9156ed3437e2
-SHA1 (NetBSD-6.0/arc/installation/boot) = 889f35138bde05f74032980aa2ca7c17442c4324
-SHA512 (NetBSD-6.0/arc/installation/boot) = 9a1ccabb379ab44784c481e749f633cf4235c03e22c24f2a837e6fcbe28b23f7bde8a7ed596dde93996bdc5efbf639ed6a073fd848eef2b0d80e932ba360c9e5
-RMD160 (NetBSD-6.0/arc/installation/boot) = 369fb440abfca5f2f4340740265f61a9d2ca8df7
-MD5 (NetBSD-6.0/arc/installation/boot) = 36b7e6f86ddc8aede5c9ea0160939cb2
-SHA1 (NetBSD-6.0/arc/INSTALL.html) = 0cf4b01d7175a1eb6dd2734e412c3bed0fb0967d
-SHA512 (NetBSD-6.0/arc/INSTALL.html) = 68a51695f6fbe96610354b253741efcd7f52bd543351a3f3b734398264f7b75c03e72ee731be917b2e34a0041c621107177efb57ba9abe6158456e19526845db
-RMD160 (NetBSD-6.0/arc/INSTALL.html) = e174f77ca32ded5ae5363e88ca33ec17df6b95ae
-MD5 (NetBSD-6.0/arc/INSTALL.html) = 94eb6340dc1e3d6ae7b539e3ca3744a4
-SHA1 (NetBSD-6.0/arc/INSTALL.more) = 6146391a310edb4727d4b5a61793d535c0983c0d
-SHA512 (NetBSD-6.0/arc/INSTALL.more) = 12e1ebc08bd3fb259caafd6b75e1120daba07fb4ad201f513459e5e36ad96790a26076cf154b34332a54192cbda13bf0b85847478a2443114522225f1adbf95d
-RMD160 (NetBSD-6.0/arc/INSTALL.more) = 52a7433c4a3fbb3fa6ca52117f9f902a96748dee
-MD5 (NetBSD-6.0/arc/INSTALL.more) = 9a6a3c4c52c723151ac81fc40567f625
-SHA1 (NetBSD-6.0/arc/INSTALL.ps) = ed6ce1da53cd979819a5080666fef04c62c3cf60
-SHA512 (NetBSD-6.0/arc/INSTALL.ps) = 8ea3bef19288069a145d6873030895c960811c8dbcff956101f425a9ce0a57701f0f0579c925248b5ecc9f7ac110ddcb18b8041ed74ffd69c22b598ce8d89788
-RMD160 (NetBSD-6.0/arc/INSTALL.ps) = e1c8d2d8ef5b2d170f659f14bf124063d8d34c22
-MD5 (NetBSD-6.0/arc/INSTALL.ps) = f97b10a669be7ec3f9603d5f936fe9fe
-SHA1 (NetBSD-6.0/arc/INSTALL.txt) = 799c2e5d3f8a8d4c93e0ba1e0e738dffbec98504
-SHA512 (NetBSD-6.0/arc/INSTALL.txt) = ed89213d84a4ce5ca43b8b7ed35b6e2e731c77205518b8c48258b18567ecc6e2150e81c2d2a4ca0b3c2bbf8059218d0cf918b168c2f55b305815f89ce3cb45c7
-RMD160 (NetBSD-6.0/arc/INSTALL.txt) = d9be36fb053f75805f95439723d18875e6d0cd5c
-MD5 (NetBSD-6.0/arc/INSTALL.txt) = 56f07f0f3cd11f592b56f5978d23c533
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-ISAIDE.gz) = abe68fd4d9212fee55be19e05105bed9ee51687b
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-ISAIDE.gz) = 759476c2983250d38267853ca369a432b968e9d8187ae8476d5e2931667518abc63fadef50c6bcf55299866c019d74790e8268b58f433c6413c03cfe1460d8a0
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-ISAIDE.gz) = defe3e00a5198a97320f53a1460eb7601f2d5a9d
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-ISAIDE.gz) = fadc1a2fcec83bae67e6e70f1ee8d4c6
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-ATARITT.gz) = 9d2e04ce73a5a24cfb10801c0ccf659242602dd3
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-ATARITT.gz) = 27b28318b371707290e3b8482dc0e98e32c6d5b7fb4d38e3bddda7bc5e1b953ae0651b680cf7ea9a296018b5a0ac883cb59d4da3c02db1baa67e151da783f6ed
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-ATARITT.gz) = 77d47ef664e710823cef2633c92bde054a970552
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-ATARITT.gz) = f99c55c64e84c84de3991fa4f21897c5
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-FALCON.gz) = 9c0e5bc223f81e24108dde3428ee8833e557d891
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-FALCON.gz) = 6147ba07227f85a3ba2ee1e78449aa2c4e0ad708e9cc000f456a74a69f6443f099e200f2dd3602ceb453dffe7b41c90c32f45ff63d44d59cd0ce24ba68f3ffa1
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-FALCON.gz) = b2c8d8f4742da6ccf1e0ec3811160d9ce9606baf
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-FALCON.gz) = 2189a16e1ee3e1586f691490fe6bfc9a
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-HADES.gz) = c4f3101449a14e294394b13eacff10053078ad4d
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-HADES.gz) = bef4589fa86a33df94fdb36038e93528984629682c2827ed4dad582ae17cfea37b9841608dacc95fd8a55c57c40a81b8d24d7afd253dd46d7af970e0927518bc
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-HADES.gz) = 821bc772711ece35be32f1fadac8fa31a10041ac
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-HADES.gz) = 82b69e45fbf4740774a338f62c987dec
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-PCIIDE.gz) = 4e056fe210771d7d97ad303cc4d92fed64d883f2
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-PCIIDE.gz) = 2c303e9421be0eae122cf55c2b5205b4c2129e6bf3033372f8fca93ad410f92137db6463ad9b75db53526dccb2b9c8a3da23d04357a6a3663aa58972c39184ad
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-PCIIDE.gz) = 878a29fec55b0429c47f0932facf25139721c88d
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-PCIIDE.gz) = b2e52ec52845325caf8fce89fcf5b034
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-SMALL030.gz) = e6b4dad71f39674e21a0baa6cd5bbc61872786e1
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-SMALL030.gz) = 856e3435c5ae454b145bb16a679da93cc966cd7ee75ab8cce77f216d4070b9e3f1a0d2bf15ae9eda28f48a0eaeeae590559888eef477ab4c72badcaed7b7484e
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-SMALL030.gz) = 449713cd4e5c43656648e76a59b0228cbf51de82
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-SMALL030.gz) = d38e0f0b5090a8d0d6552092c241e105
-SHA1 (NetBSD-6.0/atari/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/atari/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/atari/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/atari/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/atari/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/atari/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/atari/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/atari/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/atari/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/atari/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/atari/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/atari/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/atari/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/atari/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/atari/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/atari/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-ATARITT.tgz) = 589b0e48516d961e8961847f441bf7dbcbb67700
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-ATARITT.tgz) = 00ad9fefd5c3fb87f45b20612582b818def61c0f08483f923622a19e94090feb7ba1e39dc8d3b4b7d57e70c60aacaaeee966e1a6a788aff9fbbedc6848e52cd4
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-ATARITT.tgz) = 510465a0b2f0e19a4873fa87fa66d7c47ec8226e
-MD5 (NetBSD-6.0/atari/binary/sets/kern-ATARITT.tgz) = cea983b428fc041a9ad553b25e6de431
-SHA1 (NetBSD-6.0/atari/binary/sets/base.tgz) = 948b83244fe16e439af84cee9dd48f555ff2c479
-SHA512 (NetBSD-6.0/atari/binary/sets/base.tgz) = ee2c41fa904f75740c358f85bc97c36537d6a0f252bfb4ca3ec60098109ca07b8be38e8474ea7355e557793fe726160e1f0d10de2769720432a8cb0896bdcf7f
-RMD160 (NetBSD-6.0/atari/binary/sets/base.tgz) = d08e1a2d3eb8629aafe49fe89e9c00c65c97967b
-MD5 (NetBSD-6.0/atari/binary/sets/base.tgz) = 07d14a63f5591f86d0cb7728174ad6b1
-SHA1 (NetBSD-6.0/atari/binary/sets/comp.tgz) = 081806be5308d18e9910a9f3394bb15fec7111bb
-SHA512 (NetBSD-6.0/atari/binary/sets/comp.tgz) = 17e0a84c5ccefcbee5807012b93f413fa90d6fdb55bc91020cc5265528eb4331a4e2d5f951ac457b0fbf24ce2a97f7dde29a2cfda946edc5db2bf7c574289a75
-RMD160 (NetBSD-6.0/atari/binary/sets/comp.tgz) = e2f1fbee6aa542a8b2d80cb2eb4b593fa13a4dae
-MD5 (NetBSD-6.0/atari/binary/sets/comp.tgz) = 46cdf183c47138a86c07a43cc4c365d7
-SHA1 (NetBSD-6.0/atari/binary/sets/etc.tgz) = 7e13a9c53246d90a86a0db1a3e38ade70705402d
-SHA512 (NetBSD-6.0/atari/binary/sets/etc.tgz) = d751e14266428861f1ef067f02c8e4f79047e3c482f9b89ca44e880ea71ef66de3792d03f4b3704fc98bd8c9ff17cbdb42fa4c4cf3dccff9a94e88662a9035bb
-RMD160 (NetBSD-6.0/atari/binary/sets/etc.tgz) = f09fa0ba9766e3cbaf7eb0f59f32dac370d37f14
-MD5 (NetBSD-6.0/atari/binary/sets/etc.tgz) = 42096354bae512677af5f6d5c9a8484c
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-MILAN-ISAIDE.tgz) = c623eff071500b740c875a6984194d2826ab66c1
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-MILAN-ISAIDE.tgz) = 25f68ad0b3a910cad6f8d8a7cc232a3e6e71ea381fa8cefd342ff3c18c869abdcdfa517984c54ffcdf72e7393b79aeff78467137d6729447042233a55297bfe7
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-MILAN-ISAIDE.tgz) = 16cc868818532530f4441eed778a26b98ba06190
-MD5 (NetBSD-6.0/atari/binary/sets/kern-MILAN-ISAIDE.tgz) = cc65ece6a5e66a5c1f0aa67a24bb1726
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-FALCON.tgz) = 4e7e28bad7354a7bb7fdde4f608340c4907b4453
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-FALCON.tgz) = 24d5df6a74be2fa65016ab03eb11bcd6dbab11ebc33b0ab936685345ff54fe518b6b87171c93c4afab54b0374fb9d5ffa29390a34dd218b400e985dfeae8d147
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-FALCON.tgz) = 82c44f12a090c11dd2b7de11b8b9ae95fa74ed08
-MD5 (NetBSD-6.0/atari/binary/sets/kern-FALCON.tgz) = fea878ea06b74eef20f60e192539f033
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-HADES.tgz) = 24a828836e47ffe647f8a16b1fd0469a9ee62f03
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-HADES.tgz) = 8bbc2397d01594b89515abea27fa58e9ce7dbda5d2f9468b5bc46576d858395c11e4e1d6a9c25dd9b7d5ddb7ac2c2fd2208d95274f9ce7519fb470cbf08da2ae
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-HADES.tgz) = ae93fdba82eecea06486ad88927f25fe1013803d
-MD5 (NetBSD-6.0/atari/binary/sets/kern-HADES.tgz) = 244b09181178cc0b51c79ad7568f4d9e
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-MILAN-PCIIDE.tgz) = 0269a5f553ad95565fb5092460fbefb4567afa27
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-MILAN-PCIIDE.tgz) = cd74cbc52c0357b9af3290dd02362e5561202c14d58bad0d65b96c84361be2e774c9c58b5e38ca9523a7e796d778330cf257f8e2482bf8153e7a43c167e7c392
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-MILAN-PCIIDE.tgz) = 87ac890b25b9bacc28ce600476add0d6fd8aba03
-MD5 (NetBSD-6.0/atari/binary/sets/kern-MILAN-PCIIDE.tgz) = f18391129e4495470783e0a1d8467a81
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-SMALL030.tgz) = fff933858b1ef2c086ce99631195c2e89714b540
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-SMALL030.tgz) = 40458f1b8455fcd8fb3d01dc52815294705ab3752a5952ce93de01c5b7fb553d5aa0aaff4d9124d46e43d318ed6289c336e0a73470d7471fe4989877cae347a7
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-SMALL030.tgz) = 08e49adb3414a2c4490b143865dcf2f0ab3ff337
-MD5 (NetBSD-6.0/atari/binary/sets/kern-SMALL030.tgz) = f0aee544f1a3c894e71ff07e1ab135a7
-SHA1 (NetBSD-6.0/atari/binary/sets/modules.tgz) = 8ea8801011d50b52e637ee0cb1b94fdbf79b9de4
-SHA512 (NetBSD-6.0/atari/binary/sets/modules.tgz) = 6f002bf0695f00d06ce7f43f3087d6c06949b5df8e33baf0b8b30ac18e72700445dcfeb74b51c16fab32e63e537c10bf696bfdb31ab8b08d25c9189075cd3673
-RMD160 (NetBSD-6.0/atari/binary/sets/modules.tgz) = 2bf65897ea1432bac2666df1b221821a5a0642a5
-MD5 (NetBSD-6.0/atari/binary/sets/modules.tgz) = 4dda2688a56fa0774342c63c367c8ec6
-SHA1 (NetBSD-6.0/atari/binary/sets/tests.tgz) = 88a32113d4d6d34b29a94e69c0e4510b51e7e059
-SHA512 (NetBSD-6.0/atari/binary/sets/tests.tgz) = 53fa49988eca04a409dad693f26d5445cdafa9ff69ac918583849d9c6726278b9f0d2fd0da23c05e73d23453970eaadb7b233d951b430c1b7b3ca1b05bab5a24
-RMD160 (NetBSD-6.0/atari/binary/sets/tests.tgz) = ab9f0395fd5d0d1a732000d07e71efe3860f9a32
-MD5 (NetBSD-6.0/atari/binary/sets/tests.tgz) = 213a94d65400a854c2260e98f6150df5
-SHA1 (NetBSD-6.0/atari/binary/sets/text.tgz) = de8e33381d0714b33aab422c2aa5841352941712
-SHA512 (NetBSD-6.0/atari/binary/sets/text.tgz) = bf15a081319d8ce62cc14f465bce3b204bc9a5f57f7ed9d163cf71a9422eeec5ff0e84de7c43d0fc503e9422283e2f99e1e48ee5ccb9224effdc2e3ba70f31db
-RMD160 (NetBSD-6.0/atari/binary/sets/text.tgz) = 387ade3ddcc90bd7b6174deeb24bd8cc6a818e46
-MD5 (NetBSD-6.0/atari/binary/sets/text.tgz) = 937c56219d0ec6a96aef98533e10b569
-SHA1 (NetBSD-6.0/atari/binary/sets/xbase.tgz) = 07c1478cf8a0e4b7ee4b5e49841966fe17f3d797
-SHA512 (NetBSD-6.0/atari/binary/sets/xbase.tgz) = 54d845bc341dc68debf004659d2dcd753604de16e896bceabe6587bfa2934bd5b81b19936c3635cb61dbdee4b4d571603659cd6ae8206ccdaa345f3779e4a83c
-RMD160 (NetBSD-6.0/atari/binary/sets/xbase.tgz) = 6a3aba94b4acef9e311f61c1acc96b33c8707ea8
-MD5 (NetBSD-6.0/atari/binary/sets/xbase.tgz) = e02f145dcfd9f7d1c7be166b28559094
-SHA1 (NetBSD-6.0/atari/binary/sets/xcomp.tgz) = cea8de3b7820897ee8270ae3b591fb602e0028d9
-SHA512 (NetBSD-6.0/atari/binary/sets/xcomp.tgz) = 9e6344200d3ba54e29db576b9f7c0c1d2465cbda8b8a05d015596e2b162c207453cfe0ddc7f9d55bd8463bf2c200c2dd43b4ec34c30635fc0923a0d31c2a8ff8
-RMD160 (NetBSD-6.0/atari/binary/sets/xcomp.tgz) = e64e955294f627c722087a4d1e62a6d646028a37
-MD5 (NetBSD-6.0/atari/binary/sets/xcomp.tgz) = 870efcab1ee55d57351c55ac3c412dda
-SHA1 (NetBSD-6.0/atari/binary/sets/xetc.tgz) = 64dca98d1263e3d78ef7e240c9975e9077356ce0
-SHA512 (NetBSD-6.0/atari/binary/sets/xetc.tgz) = 1e76598c460681b43f2c5b19f2f4af9efeed6ce16aa8bb4d34f99083ee46cf6c5c31c0aeab974a723a3338c3a9ab1a50ad273061f9f02870d9741ec8809ce0cb
-RMD160 (NetBSD-6.0/atari/binary/sets/xetc.tgz) = f147db5da2954155dbc754963d02f309ab41e923
-MD5 (NetBSD-6.0/atari/binary/sets/xetc.tgz) = d23248d3d92350124d8e9e869b28a5f7
-SHA1 (NetBSD-6.0/atari/binary/sets/xfont.tgz) = ad9fb5958debad82e953bc2b1e7e53292d70463b
-SHA512 (NetBSD-6.0/atari/binary/sets/xfont.tgz) = 789529bdf38abda3b00e1db3cffc12272af8ec7f7a52855e0ef5af09ac7cea8639b407265ee6082809127b3bd1b673d686d967c987be6ac12be3825f9531933e
-RMD160 (NetBSD-6.0/atari/binary/sets/xfont.tgz) = f060722e795db40bec2c283ecbb5f7bdbb688ce0
-MD5 (NetBSD-6.0/atari/binary/sets/xfont.tgz) = 1b83f33dd3e43db09d0b55502a7b347a
-SHA1 (NetBSD-6.0/atari/installation/miniroot/prepare.fs.gz) = c4e92cdcb08838b9fa5dc32fb1bd923dd2b97291
-SHA512 (NetBSD-6.0/atari/installation/miniroot/prepare.fs.gz) = 4c25bd0fa0c584b09c2b0a2f9a4a67e942d9a16d9646f1364c71b8bf24326902fae74dce17ee60c81261777ac27e69c2ce4988779ac604a6ac6ebbd4636698d6
-RMD160 (NetBSD-6.0/atari/installation/miniroot/prepare.fs.gz) = 247f6e13edeb6272ceeed462d8729d5e27db000b
-MD5 (NetBSD-6.0/atari/installation/miniroot/prepare.fs.gz) = e99c7d5da695d99c717db4585cac009c
-SHA1 (NetBSD-6.0/atari/installation/miniroot/sysinst.fs.gz) = 353039d699408734197b1a5ecc2490310269e23f
-SHA512 (NetBSD-6.0/atari/installation/miniroot/sysinst.fs.gz) = bd8f6ce4115a98b026fc906c1259ce8ea91d51b97ac44190362a03154ad12c05419d848daf27749a17f0e255b9cb01d2ccae81e75f634825865b95032e5e634f
-RMD160 (NetBSD-6.0/atari/installation/miniroot/sysinst.fs.gz) = 3f866900d10efc89f1f22e8ab6099f26d79cb5f4
-MD5 (NetBSD-6.0/atari/installation/miniroot/sysinst.fs.gz) = 4fabfb561929af7e667fdf39a64e58dd
-SHA1 (NetBSD-6.0/atari/installation/misc/file2swp.ttp) = 9aabfba1673d710445ce4a151e070cd00a364795
-SHA512 (NetBSD-6.0/atari/installation/misc/file2swp.ttp) = d522703bab622aad1f125bf076fa58ea8a309c34425d188df8130298f5af0ccf8d0b0980ddbb90bff86e73cf11d082081f5d0cbe5e8dba68fdc87c9fbdbe2da4
-RMD160 (NetBSD-6.0/atari/installation/misc/file2swp.ttp) = 5bc12b2214b90eefc315f50321b072f3359443eb
-MD5 (NetBSD-6.0/atari/installation/misc/file2swp.ttp) = b2e39863389322ab0834a30a58fbe553
-SHA1 (NetBSD-6.0/atari/installation/misc/aptck.ttp) = 9a1b1b99bd6b50281cb1a1416f854b1d1e0909c4
-SHA512 (NetBSD-6.0/atari/installation/misc/aptck.ttp) = 90fedb40ba1ada8a28b228c0ad34ce9e400b3f9985d69b52345df1e29c7b9b2fd0ceafe1ae91cab0095f3f24ec8bbb274e2f514e351b39eeb8591d3c5ec46d03
-RMD160 (NetBSD-6.0/atari/installation/misc/aptck.ttp) = e399308e499e2e859eba1fc190208537421e407a
-MD5 (NetBSD-6.0/atari/installation/misc/aptck.ttp) = 5061a34d4cd283af586c5f382b546a82
-SHA1 (NetBSD-6.0/atari/installation/misc/chg_pid.ttp) = a989a7318087ebccdb92ea9c84e81a8fcb1d2bd3
-SHA512 (NetBSD-6.0/atari/installation/misc/chg_pid.ttp) = 15dca31b0555023ba6e2b04e6bca504adddcc56177f6224a2757d8784ded4a53fd5cf68b3dd5e794b46bcfba69d199dd430aa9379ed565a7aff4c360855cc4cd
-RMD160 (NetBSD-6.0/atari/installation/misc/chg_pid.ttp) = fef62601213fdafa60099375eaed9ea23163e165
-MD5 (NetBSD-6.0/atari/installation/misc/chg_pid.ttp) = c414114be1b45d1b8abcd41091fb0c6d
-SHA1 (NetBSD-6.0/atari/installation/misc/rawwrite.ttp) = 18c663ff37bf90130bc6eeefd3aabfcd632c654c
-SHA512 (NetBSD-6.0/atari/installation/misc/rawwrite.ttp) = 259903e1e3439b3a3d128a18a597ccb6ccec507bc6b1c449445e7e00c4e0d37e436ba2be0cdb71a7a756c30c2a6406cffd3bef0631b2083a2f0402ab322dbf96
-RMD160 (NetBSD-6.0/atari/installation/misc/rawwrite.ttp) = 3b66c3e7f84325e3be39c15e2a597d2bbd233a79
-MD5 (NetBSD-6.0/atari/installation/misc/rawwrite.ttp) = 20458ba9d4f2fae37607648aeb92bf71
-SHA1 (NetBSD-6.0/atari/installation/misc/gzip.ttp) = 2f3c87cac323a1641622ed960d7ca3df6d8e92ce
-SHA512 (NetBSD-6.0/atari/installation/misc/gzip.ttp) = 37be09560542fd55afebe8f3a07a76d4121a49c5d8771107a6065dbe55c3d8e33ca25326ffdecb38ceaba0e5b6af33f78f92ecf2600169779b5d7282f74335a2
-RMD160 (NetBSD-6.0/atari/installation/misc/gzip.ttp) = 8e9dbdb381f2b7ebaf01597bca73ba920e18427f
-MD5 (NetBSD-6.0/atari/installation/misc/gzip.ttp) = e27e5b3c585ad0a96daaaa810b56f5ef
-SHA1 (NetBSD-6.0/atari/installation/misc/loadbsd.ttp) = c7f08ef85b1b3120061b3b651456cd23f8937c16
-SHA512 (NetBSD-6.0/atari/installation/misc/loadbsd.ttp) = 2b645062a84fe5892c3d424d181dd6ad11f134c4a6728b4ca9a67f1912642daabdfaecdf7af985b4d4907d93adc1b72ed86a5cf9b57de42e9213582ec89a8723
-RMD160 (NetBSD-6.0/atari/installation/misc/loadbsd.ttp) = 802c240f7069d79c0432b28dead7884bc4a06d38
-MD5 (NetBSD-6.0/atari/installation/misc/loadbsd.ttp) = e5e92b220890c5ca942d0c878fd090ca
-SHA1 (NetBSD-6.0/atari/INSTALL.html) = f71f76494a6bf37c8aefe74e698838c1a03b14c0
-SHA512 (NetBSD-6.0/atari/INSTALL.html) = a12b9739f7918dd22bb0434c3d1c41c5031454fd6dbcb53df4eca669b9b4bc918c1f8df379bcac46204664dc521a049b5c39b4151f207a4a22b19b436917fd35
-RMD160 (NetBSD-6.0/atari/INSTALL.html) = f634ad4adfaa1002f352d703118aba204cbe4f60
-MD5 (NetBSD-6.0/atari/INSTALL.html) = 7eac9b0603de1d7d718b994c92b7a229
-SHA1 (NetBSD-6.0/atari/INSTALL.more) = 6ba2460611e6f92531b9ae9d28f4c68d302b9dc5
-SHA512 (NetBSD-6.0/atari/INSTALL.more) = 718766711a583a0539790a3fa7046f845a15f53dd1cd1f0ddadea939158256b3fbf5dced1a88ea592ded2685f0fda81984d6cb137f26f7b543aded6c7c1ca6a8
-RMD160 (NetBSD-6.0/atari/INSTALL.more) = 8bdd7c42fa93913bd14d5ab80457394e289f8c03
-MD5 (NetBSD-6.0/atari/INSTALL.more) = 19adcdce47ce4b9070326b433afe5a3a
-SHA1 (NetBSD-6.0/atari/INSTALL.ps) = 2d9874be06bf612885e3f19fc37635b0c421f52e
-SHA512 (NetBSD-6.0/atari/INSTALL.ps) = 0dd3a09f0a91403f412aa3650847c3512db2ac3d36d0133ac924db74d07b59607c9f57df7fd0df4a3652adbba4842f6b6afa01c07cc4a06c36623ad9c60a9ca3
-RMD160 (NetBSD-6.0/atari/INSTALL.ps) = 83f619a939ef01654f3e3bce7f7ddea0b88828bc
-MD5 (NetBSD-6.0/atari/INSTALL.ps) = 73fd3b04168f78f2de31b91190851ba9
-SHA1 (NetBSD-6.0/atari/INSTALL.txt) = 711ce58ce059429925a6e08ad178569c5e00a00d
-SHA512 (NetBSD-6.0/atari/INSTALL.txt) = b837d76a7e0d754c09fff90845906ec6a1dc5ed77832b91442d5a9ec3608f5e6785782ff1debe3b145f23ba382c5472abec75f49055859bc715caf713941cf41
-RMD160 (NetBSD-6.0/atari/INSTALL.txt) = ecd373463a1cfd5b5399cb3ca0204362ddb22be2
-MD5 (NetBSD-6.0/atari/INSTALL.txt) = f6b564115bd3ae1a28f79dd879fe8ce6
-SHA1 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.symbols.gz) = bdb282bf1fce2a0c48cf661a68b16fb7663859df
-SHA512 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.symbols.gz) = c476616f879c94a8135889c4691ca927896c74950c16543039a74e4befd918619845f31e519cb452bd215d8ca4fa1acd697f9867810f4961d517f7803f7e2c33
-RMD160 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.symbols.gz) = dbb18f3fb59483723599306093a562a45f23392b
-MD5 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.symbols.gz) = 582ae8bf879f7bc42d24bf114a5d6a5a
-SHA1 (NetBSD-6.0/bebox/binary/kernel/netbsd-GENERIC.gz) = ecfa395d442d86acbc8bbd080c04a8137012138c
-SHA512 (NetBSD-6.0/bebox/binary/kernel/netbsd-GENERIC.gz) = b48b213c4ffd06180d1272a65e27ec0ed539e731e07aea29d31f6c939fef99e1a965c42e2fdd99daad1e8ee543c99a02c420fbcf6531d47e961e7b295150fdb9
-RMD160 (NetBSD-6.0/bebox/binary/kernel/netbsd-GENERIC.gz) = 0b01e797fe821429603d9252035e7425f388046e
-MD5 (NetBSD-6.0/bebox/binary/kernel/netbsd-GENERIC.gz) = 22289b3d7d60df27fd0ed86731ab77bf
-SHA1 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.gz) = 8721973ccd6399bf563bdb266d9e5316e1ef98ed
-SHA512 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.gz) = 5390ebe49a1d50d2ba42e529c8fb2c23606e4650cd3225783809ee4dee6013f60cf7dbb347fabf48f3d7ce98ededef37cfc8d5de5c07ad7462dacc668243f429
-RMD160 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.gz) = 8228a5df5239737e7ba039b84303c4cd491e26f6
-MD5 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.gz) = 9165b1f4313cc543868d7ab7f6eff5ad
-SHA1 (NetBSD-6.0/bebox/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/bebox/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/bebox/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/bebox/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/bebox/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/bebox/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/bebox/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/bebox/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/bebox/binary/sets/kern-GENERIC.tgz) = d4e8dde09eeb9886e1d84573d136ea92db147201
-SHA512 (NetBSD-6.0/bebox/binary/sets/kern-GENERIC.tgz) = bb375fbcd379a02ccb0f770ae22aeb02f90fda95be2864f085bd46ad58c670e5fda2792b9af8acb5972398a4056ef4ca8d95367f20f57e1258401d1b02d29abd
-RMD160 (NetBSD-6.0/bebox/binary/sets/kern-GENERIC.tgz) = 2726cf7d2e1fa0278bb78a1f1d21e3a6846bec27
-MD5 (NetBSD-6.0/bebox/binary/sets/kern-GENERIC.tgz) = 17e1bdb7465cc8aff08f41a81a37913e
-SHA1 (NetBSD-6.0/bebox/binary/sets/base.tgz) = cb3438d686bc37c67ef3506e7b5f14af708d0f69
-SHA512 (NetBSD-6.0/bebox/binary/sets/base.tgz) = caaf5501269c91599fe8a6315a14bd33776549df0d82d34e516b846df3ace79c1b3a77ef745da87fca1bcc822201765366a373c2d9e29195b4f76bc954f6903e
-RMD160 (NetBSD-6.0/bebox/binary/sets/base.tgz) = 9eaed756de31f7ef1f390895400ff57d90b6936f
-MD5 (NetBSD-6.0/bebox/binary/sets/base.tgz) = 844ca078de04b6965afc9d6840712a87
-SHA1 (NetBSD-6.0/bebox/binary/sets/comp.tgz) = fa35a56729cf7a8957a24482e5855629b63da9ca
-SHA512 (NetBSD-6.0/bebox/binary/sets/comp.tgz) = dae46ff9a1b0ec32444bf93501e5ce5a003556ec6e057c1a85ef63d6f18fab00370fb5c8c6dda14da7222032f26aded43ff2ba4619df58f13d773f3c55a3203a
-RMD160 (NetBSD-6.0/bebox/binary/sets/comp.tgz) = e23f0ffdecc624bd584b1bdafcc1919c0a6b4bee
-MD5 (NetBSD-6.0/bebox/binary/sets/comp.tgz) = e24aedf775e35faa7b0be771def8e964
-SHA1 (NetBSD-6.0/bebox/binary/sets/etc.tgz) = 7955187dd8c102acefc90e649d70bf87334b8c15
-SHA512 (NetBSD-6.0/bebox/binary/sets/etc.tgz) = 3dbc921b6f58296fecb96ac7a0497f4de1f84179128afa3fe2f0a9260399934f659c53346ab55dbf387f19e348e4cf441506b2b92a72f0a2de71d59701289e34
-RMD160 (NetBSD-6.0/bebox/binary/sets/etc.tgz) = 7426566e042dd69397282ea85d9999952d57fde4
-MD5 (NetBSD-6.0/bebox/binary/sets/etc.tgz) = 8980eb4fe0883bbcf7d2001bc9d705a4
-SHA1 (NetBSD-6.0/bebox/binary/sets/games.tgz) = 780b002a35471789a68ee7be17362c60e96fa5fd
-SHA512 (NetBSD-6.0/bebox/binary/sets/games.tgz) = 954365033c924762b524f0f1e4732216b4c661697336b0947943f05a1d1e0ecc12c1679c1c5d7572e1a15a7296bd7b14d31749917ef03a2b097b94bfa0f16837
-RMD160 (NetBSD-6.0/bebox/binary/sets/games.tgz) = 9b237eefee5dc43fb3fffca5a2aa390fb2c3031f
-MD5 (NetBSD-6.0/bebox/binary/sets/games.tgz) = 337e6739c192296cac92b610d0ad6945
-SHA1 (NetBSD-6.0/bebox/binary/sets/modules.tgz) = 14ad320114a249b1ed676832524f773dae772798
-SHA512 (NetBSD-6.0/bebox/binary/sets/modules.tgz) = 1aa3a619fdff5824c904495352248fe990130b9ce9d9a3cd443afd2f088acf7048150de54f1cc304ccf08587fd91f7614521a0b9be96fc7768c06e0a80ed72ac
-RMD160 (NetBSD-6.0/bebox/binary/sets/modules.tgz) = d1df79e00026a19f724c6115055c611c07d592cb
-MD5 (NetBSD-6.0/bebox/binary/sets/modules.tgz) = 8dc1d2dbc89e5e6aa3e04b0033cc4a22
-SHA1 (NetBSD-6.0/bebox/binary/sets/tests.tgz) = 979d26c8e2e5283c416a2e4f4b603acdb43756a0
-SHA512 (NetBSD-6.0/bebox/binary/sets/tests.tgz) = e726187887b9429ce3bd39fb51e7703792f288c47eb9c0f20b85e1a2be4f6448bc3e73919c5d28c28f400ada5b0b024b647079a3670f0a2153aff9b7f5738f13
-RMD160 (NetBSD-6.0/bebox/binary/sets/tests.tgz) = 5cd1c8a42ae7a6ef706de0fcae5292db026efa9c
-MD5 (NetBSD-6.0/bebox/binary/sets/tests.tgz) = 122dc0ea7ebc7ca924301e406ef6e002
-SHA1 (NetBSD-6.0/bebox/binary/sets/text.tgz) = 30f7a17a6d9b03c7ce09bce6341895ac27c2f7b4
-SHA512 (NetBSD-6.0/bebox/binary/sets/text.tgz) = e258a9a741918d6bd8de1e10cff771541b1f1191af776101ff38c722fb037d44d51879d45a5a90342c7e2c21d36cbf5a9a6f5f1a047e61bb18609385381fc3ae
-RMD160 (NetBSD-6.0/bebox/binary/sets/text.tgz) = 6dee36ded12f84c00d7c82912da8755b0d04d497
-MD5 (NetBSD-6.0/bebox/binary/sets/text.tgz) = e1e3ed8f872b4dd51b555e9100ed6173
-SHA1 (NetBSD-6.0/bebox/binary/sets/xbase.tgz) = 03f73933d3719ef967af4a003282e1d56453e3f5
-SHA512 (NetBSD-6.0/bebox/binary/sets/xbase.tgz) = d90e373c143773a93e430058628bc65161e6c25c725fcb279ac0765edcee8e9cab4ff55fa1d99ea66ccb6ca06133145eaaa77f2c26a082c27a53e2e10a19cfdb
-RMD160 (NetBSD-6.0/bebox/binary/sets/xbase.tgz) = 0fe0422c310a56e55e2d5e4b85e8d8a41daaaf4e
-MD5 (NetBSD-6.0/bebox/binary/sets/xbase.tgz) = 7120010c15d5f84927963c780c9197e9
-SHA1 (NetBSD-6.0/bebox/binary/sets/xcomp.tgz) = 1c7522ec79f661a84912a5213ed835d400e108f7
-SHA512 (NetBSD-6.0/bebox/binary/sets/xcomp.tgz) = bfc0d388d18e14cfe99e6bcbda22e4b11e5082b0acf5b314c6f0275823138c35d1a16c3ab3e3fc27e5a04228d6380ef3c2f45dc807715db2c1de689e5674a397
-RMD160 (NetBSD-6.0/bebox/binary/sets/xcomp.tgz) = 23c8e8bb0e2f0708d2bd464468196f4d74359302
-MD5 (NetBSD-6.0/bebox/binary/sets/xcomp.tgz) = b6fb09a621ed2138ed674838c72ec64a
-SHA1 (NetBSD-6.0/bebox/binary/sets/xetc.tgz) = a14b23868bf88e59f5a845bd86cf4af61522f482
-SHA512 (NetBSD-6.0/bebox/binary/sets/xetc.tgz) = a2aee6ee11a89b3fe3b5834502dfd1a50aec7bdcc0f424b3e9d19400370b922258d77a979dae0bd87f8e55df8da9b98f8bf88a73792b1ca6a8915e5cd08777aa
-RMD160 (NetBSD-6.0/bebox/binary/sets/xetc.tgz) = bf37bf09d79777922f344d6b52f69d50c708b64c
-MD5 (NetBSD-6.0/bebox/binary/sets/xetc.tgz) = 837bbc31ba2a81d2610adf225551a61a
-SHA1 (NetBSD-6.0/bebox/binary/sets/xfont.tgz) = e44a6f29bfb3a947ca7d916c7556386a900cb3ee
-SHA512 (NetBSD-6.0/bebox/binary/sets/xfont.tgz) = 9ca97fbe1d40c26938f5a84f09bf273f132b40a82f3ef548295901840155ca45c68ce0d0d980f7fe63bd8acb57be487fcc5f81e61ae4f9765151333a84636a43
-RMD160 (NetBSD-6.0/bebox/binary/sets/xfont.tgz) = e9e153af690a96523a3b7af0a314e1104fa694af
-MD5 (NetBSD-6.0/bebox/binary/sets/xfont.tgz) = 1323ead1d7e9f69f6790c1eb836ec117
-SHA1 (NetBSD-6.0/bebox/binary/sets/xserver.tgz) = 05c93b9d2b3774b6cb71b9d829f5d21860f549ae
-SHA512 (NetBSD-6.0/bebox/binary/sets/xserver.tgz) = 28c97ffdd74c9a2d1d060ce356fd6951d377b61b7fa691c01a150472b082dd027b2be909508ee3370ec59d89bd9c5e12914b3f34feccc6c7904a9ce49869d7d8
-RMD160 (NetBSD-6.0/bebox/binary/sets/xserver.tgz) = 52564d70781876abda7f16a678791c8b3753f53b
-MD5 (NetBSD-6.0/bebox/binary/sets/xserver.tgz) = aeca26a6ae798bcf849e7bd4df423614
-SHA1 (NetBSD-6.0/bebox/installation/floppy/boot_com0.fs) = 1fc015fd100d0518a57e3e7a30e336be1000c098
-SHA512 (NetBSD-6.0/bebox/installation/floppy/boot_com0.fs) = 674ae651d28163eae5f02f78e427d7291e4b977fff90036b1d6870f572e63b1963ef83453ff9da1d49ebb707ff918c0f64889bc0f7d17072690aadd65837e14a
-RMD160 (NetBSD-6.0/bebox/installation/floppy/boot_com0.fs) = 1f59e43c9e6b08ccd63506a5179fdd2a365151b8
-MD5 (NetBSD-6.0/bebox/installation/floppy/boot_com0.fs) = 300dd58c4641cf1fda257074b674937c
-SHA1 (NetBSD-6.0/bebox/installation/floppy/boot.fs) = 8a5770fb10efc7d7c453138ca866b93e2287607a
-SHA512 (NetBSD-6.0/bebox/installation/floppy/boot.fs) = ffbb187efcdeaaf5018827b619abe00ee42aedabab188a443b494c3a5ab94d21fea4761409d9eb23b5a37d5daee602baa838b1d052e1f66b5380a09ed446fb89
-RMD160 (NetBSD-6.0/bebox/installation/floppy/boot.fs) = 58430893606678b17f132c3f3559dd4d30a7246d
-MD5 (NetBSD-6.0/bebox/installation/floppy/boot.fs) = f807ed8a7b25aa9fc9c08637a5188dbf
-SHA1 (NetBSD-6.0/bebox/installation/floppy/boot_vga.fs) = a922c42dd39babfb12443b7d122526f207969577
-SHA512 (NetBSD-6.0/bebox/installation/floppy/boot_vga.fs) = 4f547ce92d72d826253aafab92f9df42b5dba05031ab4d8537fcd40291a703b06eb2e972729c8e703f4e4e0f75d2a0ee2e2f69e8f5d66735f2932089bf1ec7fc
-RMD160 (NetBSD-6.0/bebox/installation/floppy/boot_vga.fs) = c999c7705d258c4b294f0905ba519ec86b7f34f3
-MD5 (NetBSD-6.0/bebox/installation/floppy/boot_vga.fs) = 343aba7dd2584f3945d1fb539a72dc82
-SHA1 (NetBSD-6.0/bebox/installation/floppy/kernel1.fs) = 8af8e65d2919686db6121c68347b8541991e373a
-SHA512 (NetBSD-6.0/bebox/installation/floppy/kernel1.fs) = 91e8df83298ea05c0bec3920d491ff2277d2342a803f84b7393a160ae4a108b84b7d21a0fbf2875d9248287bf047d075e4d33c582a6083ad276e974139635172
-RMD160 (NetBSD-6.0/bebox/installation/floppy/kernel1.fs) = 169667f00c760604c7302d9299448769c8e07b9f
-MD5 (NetBSD-6.0/bebox/installation/floppy/kernel1.fs) = 84f875ee3ca1633777ae9db0acd4e8ae
-SHA1 (NetBSD-6.0/bebox/installation/floppy/kernel2.fs) = 12e804736be0c389da64cd888c3ebfeeec2a1078
-SHA512 (NetBSD-6.0/bebox/installation/floppy/kernel2.fs) = 151b541d723ea1c09bc93cd2cc6abc6a04d0adff1b20c24f53c5b0a8b72462614e64912c6b21dfc9bf4676e2a60a03cab40b44fa23f7dd70183116b4b55f6725
-RMD160 (NetBSD-6.0/bebox/installation/floppy/kernel2.fs) = 159915fd391a03f34782322760d31e1966669b50
-MD5 (NetBSD-6.0/bebox/installation/floppy/kernel2.fs) = 229b4ef55392a3b8c25b6b53691b5fbb
-SHA1 (NetBSD-6.0/bebox/INSTALL.html) = 836f306d6806f97de5e27bce454acd5882b63090
-SHA512 (NetBSD-6.0/bebox/INSTALL.html) = f903a8d35baabfc1ecf5107a6b321930a4b6966d25e8064c6a14d19ddcf67906fbfe5f227487e4120a876dfdad3ebf4664d3f22a14bed7d970bf3f29ffd2c7b2
-RMD160 (NetBSD-6.0/bebox/INSTALL.html) = 4ad2f27fa58d87d0a1b22c6282894af983f4e89a
-MD5 (NetBSD-6.0/bebox/INSTALL.html) = 8015ad9791e90ca1c944d1ecaab10a88
-SHA1 (NetBSD-6.0/bebox/INSTALL.more) = f00ff910b68e2f4f98bfe3b08c6713a5d27c308c
-SHA512 (NetBSD-6.0/bebox/INSTALL.more) = 2ab02d1a9d69c28d6b0248fd75c3395b5bc6fdefd099c1c8f199c083fc87383478818a152842f749bab553a6420df0c1427820c2b893a47cce693a65db91d175
-RMD160 (NetBSD-6.0/bebox/INSTALL.more) = 357216417da8c0e9fa268285ae401c9b289f56a0
-MD5 (NetBSD-6.0/bebox/INSTALL.more) = 55e950718919e06393d4eec6eeb33feb
-SHA1 (NetBSD-6.0/bebox/INSTALL.ps) = 76f8926725f4b4b2c67518ba8a08c7804d8455a1
-SHA512 (NetBSD-6.0/bebox/INSTALL.ps) = b730f63d8d471706dfb44484b7adb22374a51ca8e506f9b848ff7936149bf3f7b1b335b3e061b4c89904f53556bdd9bffba99a9275a5c78299705600adad6eee
-RMD160 (NetBSD-6.0/bebox/INSTALL.ps) = 4edf6341d842d3626be2f6e51b9fb1e8e2e2331b
-MD5 (NetBSD-6.0/bebox/INSTALL.ps) = 09cc4abbf4039ab00e41994c0e274550
-SHA1 (NetBSD-6.0/bebox/INSTALL.txt) = f826c7a4f2f3500f258f40bb89fd5d996527e6a6
-SHA512 (NetBSD-6.0/bebox/INSTALL.txt) = c8cc1e6e07c502ec0d6d807a67de6ffc943d260e2538d512d4322199e49e70fdcf01cb389455ea6d48655c4a246fa31dedf6c18ec58ef58c6f9b17de068b3944
-RMD160 (NetBSD-6.0/bebox/INSTALL.txt) = 17fb9bcbdd888e110926df401169d8ead0aa1dca
-MD5 (NetBSD-6.0/bebox/INSTALL.txt) = f256d74bbee88c7bb349992fd11f975d
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.symbols.gz) = 6e64a8b0dec1e052750bd03c3e240e2e4678a0d7
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.symbols.gz) = bcbaa47e0c29054669a3fccdade1fd64b75934f33cf34ce59675190fd62074920973675f85dc4a6a4973898df0c41b71bab47cde0bd438db97c56a13e3e5fe14
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.symbols.gz) = 18c790be97dc94277543ab409b0c46a186fc8ded
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.symbols.gz) = fd246c1c2231766dfcd5307328d6791f
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.ABLE.gz) = 837fee4fd025b1b6302e59feb9d0996a5a69069d
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.ABLE.gz) = 8a24960901173b604e26992c2dc3b401eb20787952f6b6c0fa070b10c0d3b5a188241b9353c4ef405c4e9864cf200bf97edf692c45e2eede38b858a890fe7b47
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.ABLE.gz) = 68c9d5f9f4278bbcd6431b34d62a4971e953767a
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.ABLE.gz) = 2f4ae7ec3badbee7e9739207599e1edf
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.aout.gz) = 572497febedc95796b46a3bc0aecad740db1da14
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.aout.gz) = 549c46b80cec59bc05d9c06f03fea4cfe1789c0ca51f2a95ab6f37df7b2dd6450f056e8bd60499ae8d96547c36f2ddb3367910d52b397d2ed5188e25424fe174
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.aout.gz) = cbd8947668d7cf78e2074436ef9d0a046a919870
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.aout.gz) = 82285aa28d3e972d574d369dc25b5f50
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.gz) = 54e76627b1fd3ee4c32046f4105f5809408f881f
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.gz) = ef934d136eccb13da91a086e43c915a52f8206f8fda3237034f9bc03d73fa0147466efd58e231217be5179a8c1e6bc288c55b0c56bc47adb0f7bd45aa89be64d
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.gz) = 39d74bb0008f44f71e73ae7deabaa0795b331564
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.gz) = 11fb2ce363dc7e39ca3a62b11d2aa62f
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.gz) = c55e66950e096d68620ed1fc3296f1d557ed45eb
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.gz) = 32253268b69d201a700dea2a855e966bf9860321e94b99507960b5e6bf870f18f856e4a7e425a236752e48bbf5875ceae38627d2d49e9a63faf0377f75c002c1
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.gz) = 7f7bbdcb761251ba78d769e045a53a73e67c2788
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.gz) = 93e3ff78c78c67a40de296421d949551
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.symbols.gz) = 56742c573641715c2ad92e38a0f3206e4b6b3629
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.symbols.gz) = 41ec7eef2073b8f6fd9e34fbe9670cdaafd65b1712397db855eb44212b17a96addcd31ae62479fac09ff73cb650fa9859aab905c727305f28a6841c30c7df54c
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.symbols.gz) = c52d4eb8b33f9562c241dc296f9d9c06ee685e58
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.symbols.gz) = c51c51101225f4f260e1ec92aa64f689
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.gz) = 58e8d3c14ca2714bbb91003f533ae5f967f524b4
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.gz) = e2c5f771f02b6d7896841bf5a25efc16b34830ff375e9be1f3911225313c664b7f3a0ac023e5928c2d5fb7ab584f9bde029480b84ce67bd67ee862673cf45705
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.gz) = 4282d861ac62fa542e4496cbfaca087476d60597
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.gz) = e64438671861843fdc0fd4c9f324f04a
-SHA1 (NetBSD-6.0/cats/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/cats/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/cats/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/cats/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/cats/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/cats/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/cats/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/cats/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/cats/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/cats/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/cats/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/cats/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.tgz) = 5ca14afa2e8a62cb54d2ae62e3516ffc10b4568b
-SHA512 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.tgz) = e0189ff9d057ac445ef5ea45155f0a7045b876f7ddbd912b45fb3ee7f2c8bf83a46d167d9a916214d6cc1de9b825dcf91f35384bd3690f885acb44be5356c625
-RMD160 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.tgz) = 5324b2a4cfd27b7aeee8c2bc2cbb6041669e0bff
-MD5 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.tgz) = 6825664fe2f18e25fe7cb307b8f2923f
-SHA1 (NetBSD-6.0/cats/binary/sets/base.tgz) = c458481bd58c1d1dca0329bc28de71409c1e4aba
-SHA512 (NetBSD-6.0/cats/binary/sets/base.tgz) = 52550865b944057be1c4de1f30cb1ef8bf1b126258a0ef2ff7d2108b562b211149cc05b8397fb7c6142a5276e2636192c54cffbf8d424d528c0bce462f155d49
-RMD160 (NetBSD-6.0/cats/binary/sets/base.tgz) = 7977e28aedfcc3e97ad9e748c6d3c7abd4aa831c
-MD5 (NetBSD-6.0/cats/binary/sets/base.tgz) = 2a41824b43d9f6cfee26ea6fe3a04368
-SHA1 (NetBSD-6.0/cats/binary/sets/comp.tgz) = b725c4d09fc5f7ee54c5d800e4c2e12b3af6f669
-SHA512 (NetBSD-6.0/cats/binary/sets/comp.tgz) = e36e73f377ca33d2a76ca25973464ee54c70bafc05fea574fa2edc2060ad93be714a9ee6cb7173b52a75a77b47b49e50dd5b7803fd84afbd6be19b858147d551
-RMD160 (NetBSD-6.0/cats/binary/sets/comp.tgz) = fcc12fec265d939130a40cd2b2d73bc5a97ab1fa
-MD5 (NetBSD-6.0/cats/binary/sets/comp.tgz) = 33321cea969922b1a6ec122d03546470
-SHA1 (NetBSD-6.0/cats/binary/sets/etc.tgz) = 89dc5b13c09b5325742e8e4ca8a22857b29a2bcf
-SHA512 (NetBSD-6.0/cats/binary/sets/etc.tgz) = f18e1f34fd7b909422e431fa16738b047afa451ea9e7e77bbbcf4fc465835ad4b3b5b145efd2a609130d057e5adab868e544806ad7584947dfb82440e976c6f0
-RMD160 (NetBSD-6.0/cats/binary/sets/etc.tgz) = 81e6058380507732dcc4157e10c849d896fc51aa
-MD5 (NetBSD-6.0/cats/binary/sets/etc.tgz) = da8349c012e9f029cef0f909cc466973
-SHA1 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.ABLE.tgz) = c9adc81c86dda4d994d79fd37b7622475310fda5
-SHA512 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.ABLE.tgz) = 5a2c270a700ae0f433afba336f4270c1a9f0646ddc0839318638946f38f23b150775d9f6e2cb91d08ce327f4c2057377e5c27e525277f5c001d1c03fad852ce8
-RMD160 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.ABLE.tgz) = 7c83c750bff69191dc40b6bf34d801cc082f4970
-MD5 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.ABLE.tgz) = 18c1f0b06270fb64a47ffdb95edb7f0e
-SHA1 (NetBSD-6.0/cats/binary/sets/modules.tgz) = fd876e3d182e55ff19b6121b07b8e69fa1d0df29
-SHA512 (NetBSD-6.0/cats/binary/sets/modules.tgz) = a9a55cb34e467094be7e72a443b8a449078efaab3adc8a9b1496e45ea6c9fc7d5b3cc7523b30fade9263cb2f90fe9e18825bc6d5acd415a3fbea1c444ec0ed5d
-RMD160 (NetBSD-6.0/cats/binary/sets/modules.tgz) = 8c6829a3b9d46c091203f11ae7809fe1087e8fbc
-MD5 (NetBSD-6.0/cats/binary/sets/modules.tgz) = fec5cad3f45abd455761405b2b352a1a
-SHA1 (NetBSD-6.0/cats/binary/sets/tests.tgz) = bdfb9591316f5c17b8acfff63b0ab895cb9fe3e8
-SHA512 (NetBSD-6.0/cats/binary/sets/tests.tgz) = aaf8d4b6e428dbd0a162cf09d5bbb3273450b4ddacd6cdcb9ba2175cde5276fc30173466a1e394ca2fadb3e92ee7637d9e8fdfdc7f6e59436b9178efc1806b4c
-RMD160 (NetBSD-6.0/cats/binary/sets/tests.tgz) = cf4cb18da6b8c46c0648d6c33556dca95035b024
-MD5 (NetBSD-6.0/cats/binary/sets/tests.tgz) = 5f83acde92619b5eb23f3b21c3bdfbed
-SHA1 (NetBSD-6.0/cats/binary/sets/text.tgz) = 4434e6febe84969a66d92fdfa147aec4a6f18549
-SHA512 (NetBSD-6.0/cats/binary/sets/text.tgz) = 41206832dff7217dc0f61fa8ed39c7b824bd7f781318317520aaf3b190cf5d8588b5c06a8252fa8318ded7df84a104b9718dbbc4e6d2e3c62c822d79b9be4d3f
-RMD160 (NetBSD-6.0/cats/binary/sets/text.tgz) = d7a3c7498b28f79cb6044f4483f6b4970c2d265d
-MD5 (NetBSD-6.0/cats/binary/sets/text.tgz) = dbd9391020e7272a288c0c30002cad8a
-SHA1 (NetBSD-6.0/cats/binary/sets/xbase.tgz) = ae3b8c01b219ca930ad23427b88601c98fce9ae9
-SHA512 (NetBSD-6.0/cats/binary/sets/xbase.tgz) = a06f8a61a8c61df4aa2f9e0efdaede96e56765552d642ab3f048afeeada1716fbb5a0a5b3f2d511e7a146fa7d173ad0b59d5707a7c9b29216c014ec3911d3d37
-RMD160 (NetBSD-6.0/cats/binary/sets/xbase.tgz) = 032ae59bb4c894f973b3fba09b9c72762f4be5f2
-MD5 (NetBSD-6.0/cats/binary/sets/xbase.tgz) = d021cc89a93acc430e5cad14758b1ef3
-SHA1 (NetBSD-6.0/cats/binary/sets/xcomp.tgz) = 2daa1f374f82e66d62900af2252f72a06f366ebc
-SHA512 (NetBSD-6.0/cats/binary/sets/xcomp.tgz) = 803d5501dfcda968a4f098378989cc8186bda8f9dc28af6b9bc591301edfd0dd194922a0d661c75f3ced1fcdbb700e61eeb7bbf5b95ee6ec1111cb8bb9eec933
-RMD160 (NetBSD-6.0/cats/binary/sets/xcomp.tgz) = 4bf6721bd75641fef50dce9cc5781b6991acd0fa
-MD5 (NetBSD-6.0/cats/binary/sets/xcomp.tgz) = c78fd7987bf26697dcb6447c6818c8f5
-SHA1 (NetBSD-6.0/cats/binary/sets/xetc.tgz) = 081116c5590415004358c063c13f77a32c0fa5ba
-SHA512 (NetBSD-6.0/cats/binary/sets/xetc.tgz) = 129cc55a79bee0d1d821c137fa27ae1fdaa82d71cecbbecd555e7d8ab649dfccbb1c2086575e97ff66bd40a50a34ab5b45233ceb15bc9770044bc776c646d86b
-RMD160 (NetBSD-6.0/cats/binary/sets/xetc.tgz) = eb721c7066e0088a6be10b2214fa7227d2b95043
-MD5 (NetBSD-6.0/cats/binary/sets/xetc.tgz) = 7904920faa3acddfb9b635b88789a440
-SHA1 (NetBSD-6.0/cats/binary/sets/xfont.tgz) = f6547d11ac8302fda8b2b992e99f5d8c03ef9f0b
-SHA512 (NetBSD-6.0/cats/binary/sets/xfont.tgz) = c38be1439bd2a0b9a10978e1833a5ad243f3d3ed557bb05033aa6c76d1320851663e8819987b4a77c8f4f123820d82cfa950e8e486986686030aa9a40b7577ae
-RMD160 (NetBSD-6.0/cats/binary/sets/xfont.tgz) = 401d3e9883c381410c7e45ee3cb1ab72e9fd54a7
-MD5 (NetBSD-6.0/cats/binary/sets/xfont.tgz) = d154b32a82c67ebba30762daad5a37e9
-SHA1 (NetBSD-6.0/cats/binary/sets/xserver.tgz) = 941b1622f43738a9a31860ad6464f2fff35e9f1b
-SHA512 (NetBSD-6.0/cats/binary/sets/xserver.tgz) = dbbd41022a86bfd59958a96f821256bec29793952b4adfff10e3974d437e1317b8312662359a27a961d76f4c0ac7e7af9482603d6ab918668174818f9b1c1008
-RMD160 (NetBSD-6.0/cats/binary/sets/xserver.tgz) = 4fb11053b3a0ad7775efdb502bbf8e1198dc0348
-MD5 (NetBSD-6.0/cats/binary/sets/xserver.tgz) = 20c811752f066b472b1f578431f25d42
-SHA1 (NetBSD-6.0/cats/INSTALL.html) = cbe385200e2572a8325f1559ff0b00914b6892f8
-SHA512 (NetBSD-6.0/cats/INSTALL.html) = a62d6cbd6f300d4287f899e76526282ac04a538aedd201754876f8ea906eb3c486e8580b7d373eb6436ffb6c6b0d47273a3999ebfb852b1cecd7d9714931b7af
-RMD160 (NetBSD-6.0/cats/INSTALL.html) = 8fd593263624ff1e7a45b7102956094a71f16576
-MD5 (NetBSD-6.0/cats/INSTALL.html) = 50947ae742e64480da9f0f3964789ee0
-SHA1 (NetBSD-6.0/cats/INSTALL.more) = 8343db2afce040778ea31ae38be9700674dc5f02
-SHA512 (NetBSD-6.0/cats/INSTALL.more) = d40356dbe2c728dc51d6cd0efe3857a27ec9b39e2a03a01efe67733debda54b58e768218eba79dd20f97614e4a8c1138362c65acdef1aec922e157bb638f2a18
-RMD160 (NetBSD-6.0/cats/INSTALL.more) = 76588eb4c081058584fc7bd3d350f896177bec31
-MD5 (NetBSD-6.0/cats/INSTALL.more) = a912e620c4899d40ffaf15a00b033920
-SHA1 (NetBSD-6.0/cats/INSTALL.ps) = 06fff86ec204f92418e0050417a548da63a2ddad
-SHA512 (NetBSD-6.0/cats/INSTALL.ps) = 31a7ca304e80c80942d5c3b1f055251194981e7e98096fbca7c1d56f6617e5aae082a44702fcbda9cec006823d093973bdf24f1af369c532d72706b5c44243f2
-RMD160 (NetBSD-6.0/cats/INSTALL.ps) = 80c4749fc0e3d9144cae101e3e83709b509eb541
-MD5 (NetBSD-6.0/cats/INSTALL.ps) = aa6a7a310a23fcf771ab49fcec71a77d
-SHA1 (NetBSD-6.0/cats/INSTALL.txt) = 59e12295d3e1819f7ff76701baeb4541e637ef88
-SHA512 (NetBSD-6.0/cats/INSTALL.txt) = a710c598d300605c2d2f373f12f8b9b2366dd28f6cf84ccedc3c6ac3efa410e2c0a3e454489824c4a65467b0947231a6f280a4ea2cb3582bdd3d532ed994e63e
-RMD160 (NetBSD-6.0/cats/INSTALL.txt) = 5f0042bf269b86bb159915585707077a98a5f06d
-MD5 (NetBSD-6.0/cats/INSTALL.txt) = 8cb2eb0a3f5249382607fb963ca82313
-SHA1 (NetBSD-6.0/cesfic/binary/kernel/netbsd-GENERIC.gz) = 5d2bcce895dd7d88e0d5600b6ca55a4b216bd368
-SHA512 (NetBSD-6.0/cesfic/binary/kernel/netbsd-GENERIC.gz) = 85e01da3fe9ebb93fb7ae3f028297972bf4538117430185bf0885b46352f68df08fe025d91569ee0da2e17e8b83a4de99e1f3d56d2c5cb31ede3beb366afa157
-RMD160 (NetBSD-6.0/cesfic/binary/kernel/netbsd-GENERIC.gz) = 7c946881e8b671248896e5e620f8125426911450
-MD5 (NetBSD-6.0/cesfic/binary/kernel/netbsd-GENERIC.gz) = 39a8c5037a6266d0bb6df8fdb5c14c7d
-SHA1 (NetBSD-6.0/cesfic/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/cesfic/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/cesfic/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/cesfic/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/cesfic/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/cesfic/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/cesfic/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/cesfic/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/cesfic/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/cesfic/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/cesfic/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/cesfic/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/cesfic/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/cesfic/binary/sets/kern-GENERIC.tgz) = 682508a28054a48a7242a494917ac4889bc67992
-SHA512 (NetBSD-6.0/cesfic/binary/sets/kern-GENERIC.tgz) = 0225b3aa055ad8d4c5b3029cea2459cc27e5670cd4aa50529c3490f93692273fabf6fb1d47336ca82e7b9b97c9cd6eaa6da29f1c71076c36664952cd2e8f92cb
-RMD160 (NetBSD-6.0/cesfic/binary/sets/kern-GENERIC.tgz) = 39e19612b53e389e4da7ab24ad463d19da13f296
-MD5 (NetBSD-6.0/cesfic/binary/sets/kern-GENERIC.tgz) = ae69c0b436f251484d22512f3207263f
-SHA1 (NetBSD-6.0/cesfic/binary/sets/base.tgz) = df22763e9478973636b3651d21f5cc5c5b065515
-SHA512 (NetBSD-6.0/cesfic/binary/sets/base.tgz) = bfdab8e7b9dcbd14d7e6321edbfbf06c45eafc0c85dcace6879ff485d45262706dd29a165c9d89a041618244977763af4c0f0c93d48ac39c96c5a4446122d2b9
-RMD160 (NetBSD-6.0/cesfic/binary/sets/base.tgz) = 1359d35509d93695dd0cfda9adead93875618ddd
-MD5 (NetBSD-6.0/cesfic/binary/sets/base.tgz) = 232f3d5ccd51c66577dc50e25c149476
-SHA1 (NetBSD-6.0/cesfic/binary/sets/comp.tgz) = dbd27c5388fd2ccfa90ceaf819f5fb3b86bac78e
-SHA512 (NetBSD-6.0/cesfic/binary/sets/comp.tgz) = 0657745dfedf6283919628d26665d30374807c78e049cdf5d9ce3d3dca54275ccaa992b5c21ef5c850decd1def118cb14c1e89a2bbdbe55b905e0f8100e259ef
-RMD160 (NetBSD-6.0/cesfic/binary/sets/comp.tgz) = b0bdc0fd2ca77bdadb6d03a465333bd9dca2a016
-MD5 (NetBSD-6.0/cesfic/binary/sets/comp.tgz) = 8ff8a532ccd1d24e93b4ca53a41d1efa
-SHA1 (NetBSD-6.0/cesfic/binary/sets/etc.tgz) = 20b9dc0339ed74a93dc82fc1b60f9b3fbf6b4b8d
-SHA512 (NetBSD-6.0/cesfic/binary/sets/etc.tgz) = 593ef36e7f37c6153b8068a2f8b433a6bbe821a2bfcad7ea6ce4e30bf5611172aa94e82b7aca57c141d84381c597306779e5023cab4ff28fa415b6b6bac69e3d
-RMD160 (NetBSD-6.0/cesfic/binary/sets/etc.tgz) = cd6bcc3d96f38f8e9a00cfedbeb4463a27708d9d
-MD5 (NetBSD-6.0/cesfic/binary/sets/etc.tgz) = 343a0c8c930807f71f37e7116bf8f391
-SHA1 (NetBSD-6.0/cesfic/binary/sets/modules.tgz) = d5191e8899d7345c88bae6f65c1fd249b02a0063
-SHA512 (NetBSD-6.0/cesfic/binary/sets/modules.tgz) = 22e74e63cdc763effdcb58c7d549c0811dedee37953a9669dca09010dde364c6ba7440a29ad1e1e634a7c44b69cbca65afe006b9f564bd10bc4f0852cb55dc75
-RMD160 (NetBSD-6.0/cesfic/binary/sets/modules.tgz) = 5ad1d1c039de7da6dd1183ea6f4e9c319931dc86
-MD5 (NetBSD-6.0/cesfic/binary/sets/modules.tgz) = c0dda9a6803a213f3bca675728056dfd
-SHA1 (NetBSD-6.0/cesfic/binary/sets/tests.tgz) = fdf867451cd371c25672448a1dbc7c204e8534b7
-SHA512 (NetBSD-6.0/cesfic/binary/sets/tests.tgz) = 9f137af1458c138a40dd2cf293e58deaa93a7145457127ddddabad1c23f380e36950d21cc6051bc5a4b101a632b9610a74cc3fc4bf6129e29e57ee8fd9d2da6b
-RMD160 (NetBSD-6.0/cesfic/binary/sets/tests.tgz) = 0c27b80fb02f5ca0dfea6854d0df2818df52b9e1
-MD5 (NetBSD-6.0/cesfic/binary/sets/tests.tgz) = 2cb77946d9b305a0e03a6ac5fed04ff7
-SHA1 (NetBSD-6.0/cesfic/binary/sets/text.tgz) = d9f8aaf67b6ffd9828d447b5a6b208ea5bffcbd3
-SHA512 (NetBSD-6.0/cesfic/binary/sets/text.tgz) = 931dc3aec206ff95df08c36ed09a01caa2b10bdff34affc723e7ea0c6d2cdfc493d02b9875568ec9276c2d35a74cc782ec8c8cee10ad62879831b1d728cd3d62
-RMD160 (NetBSD-6.0/cesfic/binary/sets/text.tgz) = cec72f88379d8c6b30730568eb653de4a07f8c8d
-MD5 (NetBSD-6.0/cesfic/binary/sets/text.tgz) = 1daceefaf9afa99dfb01cde29485cfe2
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xbase.tgz) = d052985aaeadbeaad2aab5aab60ef68f5527a9eb
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xbase.tgz) = 83089a0b043d1413d865ea766cf1c50da9d1c12165e05bfc72f26b4d4513549119cc716ffebda1fd82b20ff1766c579aa000b7c10b4f29fcca49f0ff9f05177b
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xbase.tgz) = 3a8239f2ecb4e13e2352e3b09c3496f51dd12fb4
-MD5 (NetBSD-6.0/cesfic/binary/sets/xbase.tgz) = 61c565148bfbdd631981e7d42845c147
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xcomp.tgz) = f3eda836d68a0b648fec7072373ae0b7267ab7d4
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xcomp.tgz) = c448fa8a9665c6cd19aa05eae8456a06e0301fed427eff4d20f4a337e398c4346b285bea3c46924eada81d2bd1c34bcfa91cfd36d15eeb8ca6e9f7606514f131
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xcomp.tgz) = 68333053bfff6afe3fa5e7555e58039ca42b679e
-MD5 (NetBSD-6.0/cesfic/binary/sets/xcomp.tgz) = c318f3138aabcb6453f77a6dfa4778c7
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xetc.tgz) = 5965357819e9e3e64a9cf0963595a5870699cd82
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xetc.tgz) = da1f214b6de2a4a1ef227c608b741a076a7d4ba491131fadd33ebbf0782fd6c0d1ade406b4aa92c973c9f87ee70b2dff20d3a710df08201aac3c1a9ad339fe31
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xetc.tgz) = 7151d3746cae1d748a566356431ca8ba4a5b51f3
-MD5 (NetBSD-6.0/cesfic/binary/sets/xetc.tgz) = 616f7da77033039c3b6972c33223215f
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xfont.tgz) = 46a06412b08381288aeb30ddc5b5a30d09530fcf
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xfont.tgz) = b5c5c517924de3ae3bc0fd094c0be19501668f4ad25feae8768c5c17065ff90b9b60760afa47ee93909fb92c4c12a818a95f0744e988a04e20be51f0d5dd4d66
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xfont.tgz) = b58231d11d9ea95811dd0a6f548b6bdb18eae61e
-MD5 (NetBSD-6.0/cesfic/binary/sets/xfont.tgz) = e52bf6c25b8e5fcef899329b68856e5e
-SHA1 (NetBSD-6.0/cobalt/binary/kernel/netbsd-GENERIC.gz) = c9618dcb53044599e6397eac6bfd5dbd6f106cf0
-SHA512 (NetBSD-6.0/cobalt/binary/kernel/netbsd-GENERIC.gz) = f46c57b34ffc0f0140094384a10ea7c3d0140f315fceed6b02a1ec4770d6114eb1e995020fd056e03af71185f0448fde86829f5921b961a903bf0c275ff730e3
-RMD160 (NetBSD-6.0/cobalt/binary/kernel/netbsd-GENERIC.gz) = 4f69bb230b7c20fc591af0ff0e788e0f9a6dfff7
-MD5 (NetBSD-6.0/cobalt/binary/kernel/netbsd-GENERIC.gz) = 4ef49f4e446b38c2dcecf61dbca8fa25
-SHA1 (NetBSD-6.0/cobalt/binary/kernel/netbsd-INSTALL.gz) = 8c6edfcb94e9c0bfe670a78e6599dbba4787ef6b
-SHA512 (NetBSD-6.0/cobalt/binary/kernel/netbsd-INSTALL.gz) = aa2dd1067f3fe253b43eb3a1ec0c8119a717c43236f1df4d72a4ac5667de310ac904bbca89588b9438a3aacdee5bb3d569e170dab17487ec5c6d9c148086085f
-RMD160 (NetBSD-6.0/cobalt/binary/kernel/netbsd-INSTALL.gz) = 54a79af6fbce4c15b3415137f67a35e0d5e34daa
-MD5 (NetBSD-6.0/cobalt/binary/kernel/netbsd-INSTALL.gz) = 112e15f9d41a31dbe6eb6864d62633ef
-SHA1 (NetBSD-6.0/cobalt/binary/kernel/netbsd-RAMDISK.gz) = 4075b370e08ffe708669556c584e79073a9280b0
-SHA512 (NetBSD-6.0/cobalt/binary/kernel/netbsd-RAMDISK.gz) = ae5eb10935acf635e7a3abf985b86fbe9a57a071dea8ef7fe08ff5fd887901331d603e61d1bfeba330489534c4accae61e8c63fcc0cbb4a248e8fffa53d59fec
-RMD160 (NetBSD-6.0/cobalt/binary/kernel/netbsd-RAMDISK.gz) = 9537810097f1bfe7c0cb7a4154639c8374a17c63
-MD5 (NetBSD-6.0/cobalt/binary/kernel/netbsd-RAMDISK.gz) = 0a477e1b678ab3c2906eef7d9082d2a5
-SHA1 (NetBSD-6.0/cobalt/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/cobalt/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/cobalt/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/cobalt/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/cobalt/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/cobalt/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/cobalt/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/cobalt/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/cobalt/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/cobalt/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/cobalt/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/cobalt/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/cobalt/binary/sets/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/cobalt/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/cobalt/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/cobalt/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/cobalt/binary/sets/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/cobalt/binary/sets/kern-GENERIC.tgz) = d085ff7c5cd7f260cc1aaca4c2e54c26c948d893
-SHA512 (NetBSD-6.0/cobalt/binary/sets/kern-GENERIC.tgz) = 0c1ad1014af64d059a5ce8261e46534e0eaed8702440b93f5109c19ed9fb0b2dbf37a23cc28f1a688ca45f9e721dd0f4a1ee6771990a835a459cd633ff0f4887
-RMD160 (NetBSD-6.0/cobalt/binary/sets/kern-GENERIC.tgz) = cfecc943b0e501f53558c87be282a948469c57fe
-MD5 (NetBSD-6.0/cobalt/binary/sets/kern-GENERIC.tgz) = 630b91f62d422855f30b33590119e9d7
-SHA1 (NetBSD-6.0/cobalt/binary/sets/base.tgz) = 90870f3189063cb2c4a2aa81d1c68d835e48ee25
-SHA512 (NetBSD-6.0/cobalt/binary/sets/base.tgz) = 9a962443ad380ef6d4dce623bb41e6b1aecd452b0adfc6e51d1c17610829f17a1b02cf5be2e539eeafcc7ff47ae79f8f7a367eebd74ea6cb70e0fc57eebbf27b
-RMD160 (NetBSD-6.0/cobalt/binary/sets/base.tgz) = 12111c0c67c4f8fbb3c54c2c3480e73caee6f33c
-MD5 (NetBSD-6.0/cobalt/binary/sets/base.tgz) = d7aba51f2552fb2e19af9adbd673dff9
-SHA1 (NetBSD-6.0/cobalt/binary/sets/comp.tgz) = f22b026d0b9c1e7725e4db4b9abbda1160a9c80a
-SHA512 (NetBSD-6.0/cobalt/binary/sets/comp.tgz) = a0a6f6185d30e28c4db98189134bcb5e2dc9820c748911e36483b84fb598c5b122c10863ccff82a2f2556734004fab2c9ac59cbc1530ec79ec535e4e426d4e5c
-RMD160 (NetBSD-6.0/cobalt/binary/sets/comp.tgz) = ed9d28519a8cc55a2806d6c1df0953c535075b1d
-MD5 (NetBSD-6.0/cobalt/binary/sets/comp.tgz) = 44112b73f63f4cddda4ac8ab8f5ba1f5
-SHA1 (NetBSD-6.0/cobalt/binary/sets/etc.tgz) = 7109941b0df321286aaf226ee48222fbc7ad692f
-SHA512 (NetBSD-6.0/cobalt/binary/sets/etc.tgz) = 1d18f21beb41dd07c5744b127209b5de8f5fd2fbbd109c3c65dbe73126e2a987e1e1d08a68668f597ecce1d0e9875fe349bf89d74d3add850a3c4554808cda07
-RMD160 (NetBSD-6.0/cobalt/binary/sets/etc.tgz) = 1687c63ca2d75377354754bb425c02bd6907c445
-MD5 (NetBSD-6.0/cobalt/binary/sets/etc.tgz) = 3b36b16b387597ceb2233eaa72d3bea6
-SHA1 (NetBSD-6.0/cobalt/binary/sets/kern-INSTALL.tgz) = cfefd1fef2db13b66730678c9df067ab208158ad
-SHA512 (NetBSD-6.0/cobalt/binary/sets/kern-INSTALL.tgz) = 2a62524f994a5034d60f679b1d30eafe60dafb35216458055ad9e25f3c7053f4556f1edd233754e0e4eb4a79373fb814c28e832b67d9de69035513b819d5080f
-RMD160 (NetBSD-6.0/cobalt/binary/sets/kern-INSTALL.tgz) = 894035c7e551dfee7ae53cd1e7b358876fef240f
-MD5 (NetBSD-6.0/cobalt/binary/sets/kern-INSTALL.tgz) = c6f35e3463064c86be5b3229fdf23ce1
-SHA1 (NetBSD-6.0/cobalt/binary/sets/modules.tgz) = eda182e3418c72ab2d0bb33efa014d77be461b73
-SHA512 (NetBSD-6.0/cobalt/binary/sets/modules.tgz) = 52a988323ace3452cdd3c8db6d03e26f15b3d9570314c8e8efd80169676d36209a8dee6736d4a1aed53beb3ad3ecd6fe8ea9d4b3b0a85417a6540cc4f6ca2154
-RMD160 (NetBSD-6.0/cobalt/binary/sets/modules.tgz) = 0610022e6cce6e576d3bbc6f3bca284d36eff821
-MD5 (NetBSD-6.0/cobalt/binary/sets/modules.tgz) = 2850ca4ea69cbac5274f2307a48394f1
-SHA1 (NetBSD-6.0/cobalt/binary/sets/tests.tgz) = ae62656c92b1883296087eec3534d7542356c79e
-SHA512 (NetBSD-6.0/cobalt/binary/sets/tests.tgz) = 35a22f1ede3db17eaa2c29645c5675fe5a2c4fd6deefc5d372cbdf1ac61c592fe7acf65486a8c576d3ee8651ddb3afa33e39e644de18d2831d25c89aa74c734b
-RMD160 (NetBSD-6.0/cobalt/binary/sets/tests.tgz) = fba7399b23a918470dcd108a422bb4f998a94a42
-MD5 (NetBSD-6.0/cobalt/binary/sets/tests.tgz) = 21dee182d4f02df926ce52688347af72
-SHA1 (NetBSD-6.0/cobalt/binary/sets/text.tgz) = 58049b832c3722ddb05f8eca622f77ff8e4e8a4f
-SHA512 (NetBSD-6.0/cobalt/binary/sets/text.tgz) = 4eb3919068d26f193fcca2a30e27152421be198b313fa9700612a0d9d094d67d329b2e72e70b02c4789c1430378269f35f0758042faf60c26a18e293947c7db9
-RMD160 (NetBSD-6.0/cobalt/binary/sets/text.tgz) = a2eaa36b8c306e0cd6a9e17218aad574d4fc3508
-MD5 (NetBSD-6.0/cobalt/binary/sets/text.tgz) = e0f6aa8df8d17719f265922d2aebc787
-SHA1 (NetBSD-6.0/cobalt/installation/boot.gz) = 59e1785a9e2ea35df01f4726b62f6fbbc74c56df
-SHA512 (NetBSD-6.0/cobalt/installation/boot.gz) = ad2baef23c54d600d49e7777b924c7d79c8e7e3f74107e9fcd939b16811b31979391ce8f3ebeb4b31810fef2cec13df063d31e4b3a5b5c57b550156b796a4410
-RMD160 (NetBSD-6.0/cobalt/installation/boot.gz) = 9ac9dbfb3932a92e2b4e03664bdb8dbed4fc0e71
-MD5 (NetBSD-6.0/cobalt/installation/boot.gz) = f4b10cb6244d765eb7a9a6a3ef1d09ba
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.bin.gz) = 971d8de48c6c6be81f723ada4b7c509dd152b86c
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.bin.gz) = ac63feaca53a1abad181877bec95098e06e89343cd783f309ed3d223a80005d49fd5b3420a36c8e2894389373a9a8d4a023f134e1ff847f240864b8f529adfbd
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.bin.gz) = 5abfe7b82ce9b81c69818cbb533a9d7e69f01081
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.bin.gz) = 6ed9526e1fc60db1cdab3dfedb2a4ffe
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.bin.gz) = 7950c0154a603614e8aaa75da019ffe266fe36de
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.bin.gz) = 2421894a9dda95a17a30b6a4d87e350f7bd17f467362255eb22c8a56e0ac1e54592136d0b0d218c16a14afb8684bb8eaf11442217af1c217ea4588d6290c761e
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.bin.gz) = 326f220c689b47fb30e91d483a009246993da43e
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.bin.gz) = acaf2f6174037777dc0dfc175da86403
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.gz) = 85e46b6fa4ab45b810f6c3f4b3268cba0f895cb4
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.gz) = d3f2e7306c8b8ea0969bb68e5888ba16436632479a6555a4fffe2479c4cea1dce048c2d18b6653fe1946b9a9bd2d2df1da172d71df45c6eca59a1c91e81f51a9
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.gz) = 31820c3a9b7305792ca4246aaa0d8e5474c2a8ba
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.gz) = b48de4452de2d94b74d617ba30b529f8
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = 83040bbf6395952a68fbfde410db2729c8d814c9
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = c48a2bb6dc2bac588b3e9690dbeed3b85361439e40e3410220c0b9fcb70e2e6a2bdffd24ddb428f740895ef34c3e56955f2877509441be0c158e97407656da24
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = a6f75d1e098e0bebb9da8f6149114de13416b210
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = d72d4a1170c9f40c41c951eb2f40dd9c
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.gz) = 98765e3c532799a669420e9b6a89b22033059d66
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.gz) = 34a64fc5eb79bec00adf55f9788139730c5f35bb8e05f0b00899776836aa0dc7c372482ed5cb9341fa7354d5f8c76ed6b879ac516210d89e33794efbccf40127
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.gz) = 5a4349f94c8afe0d7ad4c6ca4b02d766ddfc63b3
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.gz) = 7c4659ca64c7f31b205e8d1ce4166597
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/games.tgz) = 2040b4af557a62f2ade5fc9fcfe4cab3df88c7e2
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/games.tgz) = 8b5071337dc844042537c24c75660e61c9709cd10cbbeab059a84da6d482260b73365ff3870f85060c130a291b6f02be174d288127ca62ce4d291a6982192317
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/games.tgz) = 28acfa5a131d52df7c157e2edca1dd0f20e774dc
-MD5 (NetBSD-6.0/dreamcast/binary/sets/games.tgz) = d82c46dbc0021fd4694e464042936052
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/dreamcast/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/dreamcast/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xcomp.tgz) = 53aa1e2a910e8eed09dc07f8b724804f53fe5e2f
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xcomp.tgz) = 24645da85419528015cdaefd0c835741fa801392e795b363bdfc39558e75e7f384511c0668d12e2440114b7c543c7532aaec438048f08d35c54c9c7a748f20c0
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xcomp.tgz) = 60a461ffc1f1562274110d65c72a541ee131cd21
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xcomp.tgz) = f1d2650a8d7a4ecd60fda8e1aaf8c09b
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xetc.tgz) = 1636a6fe3e01f6d8a07a19cd204a6807c8caa4c7
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xetc.tgz) = 9cea4ba4af287dd57e591d4269f2f2582010250316f323746ac56b12cefcf2590b93fbb0197c665f61b1df41dcca62d17fb6ad80d4b1feb8ac8265e91e15074f
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xetc.tgz) = 5f68e3f96f7bb9ae07fccdb1d058e4b1307b4b29
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xetc.tgz) = da84d97230787283e215a4ee1c4053ad
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xfont.tgz) = 97439ccf6840b18b1e9885f5504a401bf1a93650
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xfont.tgz) = 3d15541f7d7ae2128f44355bf110415adfa4e5182829259d2c6f7a4217feff99e236d13c5bb7bbeb724ff1a09ac1f58f02bdd6eef528bc416ec3118db6fc7d45
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xfont.tgz) = cdc9fcdb5fd5032803d5bba18db58f3ea6d62c85
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xfont.tgz) = a8466a0477c6c443eafe99e9d1c61131
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/kern-GENERIC.tgz) = 8f11a046a1e6277a5f90f44142735f39375f949c
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/kern-GENERIC.tgz) = 12786eb317effcd2f7f108a139a95b99c6026e75370853d3761292d431063859dfff26ab4a2bdf5c8bfcfbda4deaed9025583b30367e00074dc875d759f1cf76
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/kern-GENERIC.tgz) = 464ed36bd11cfa0b181632d2b1c54f34a511fd14
-MD5 (NetBSD-6.0/dreamcast/binary/sets/kern-GENERIC.tgz) = 1cd64692f608f13541288f3ff263fa82
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/base.tgz) = ce23182c9b35fcba35fce0e3f12578a988a8ecc7
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/base.tgz) = 20dc7d634449bb7e57ae55458aa0f2d53c5f03f92df3df5a6429c1f3192871ed2fb8ec64700a045591d308a31baa3212c8a7ee6f3bfcccc05974557bc2e1ebad
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/base.tgz) = 7fbdce2370f91ad3aa3abec889333b59755b0f4b
-MD5 (NetBSD-6.0/dreamcast/binary/sets/base.tgz) = 3aee642fc36860e63bf85392888ab2a2
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/comp.tgz) = c288c3890b514eb00673399571a6d22d4abf7608
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/comp.tgz) = cfbe2ddaf47453f9b20a74890e3585fd82a23d25489378b41276848019971f1e740e00203418db16e1832777b96d3b16eeeae1a4fcdf9551b93582395c5a3838
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/comp.tgz) = b79a42001602eb84e650fe34a25ac20e5773703e
-MD5 (NetBSD-6.0/dreamcast/binary/sets/comp.tgz) = 57451cb40d16c7d6dfb960eb4848754e
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/etc.tgz) = df82ad0e59f00bfa96ca079e1dac2b0f772a6b1b
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/etc.tgz) = 87d552690ee356eb3a82c763ddf3f44ed57a5d0d8616974570ba21a2901371e6ee6e54d0b25cb5607466f01cbabca86fe096572f395c74aa6dd98be45e4c7ee8
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/etc.tgz) = bbc9f48831c1483ffe9c9aab353995e162a5a385
-MD5 (NetBSD-6.0/dreamcast/binary/sets/etc.tgz) = f0881f75efa980e58cea0c0d60f55656
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/modules.tgz) = 243ab8d8f5d3375fbd17efb668c1abe45d0d1487
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/modules.tgz) = 193c158f2d2f64c3b571c6e10d97bdbca141faf5ee1a970e3c1e194970e2723e74d8372e0110b52d11e210e860102ebf24012a2267a0f98dedeceb0cc60429f8
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/modules.tgz) = 788e45cc0d8a03191c14f3fe0d429ae331d96895
-MD5 (NetBSD-6.0/dreamcast/binary/sets/modules.tgz) = 83acdebfad50fc820d420b4e74c87762
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/tests.tgz) = 263b82b9d13d080e46cd27e4a6e5df9d43e6f74e
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/tests.tgz) = ffc4a4348c68f8b06f1387d60e1d5b1bcc1b42ec6d255cd267dea08aef4874591dfc95f69ce416333679cdbc124540cb9b92e58ad9f522e6f34eafa2f6dd9ef2
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/tests.tgz) = 2518cdf17a8f82dcf39525e2928ef52e46e32325
-MD5 (NetBSD-6.0/dreamcast/binary/sets/tests.tgz) = 2f0af9ef7e65f9afb0185e305a206183
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/text.tgz) = 577c45d37aefc65d2787bd989002bd3748440b56
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/text.tgz) = f1a7e6beac2f881e8b9d356491e4b09d7b92b0a0ed33462575db59ce8effae6ca2a1989e4fa9b78fc5d012b118b2f99a2e2fcd7505a0ca80eb61684d5bceb096
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/text.tgz) = 2688ae8578acf1b6b8937abf4d05cb09e7e2ce8d
-MD5 (NetBSD-6.0/dreamcast/binary/sets/text.tgz) = 0cc81795b0f4ddd432f3dfa01eb2a530
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xbase.tgz) = 7305b994f65ffa7d67a9f99d0146e705f81ec723
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xbase.tgz) = 904f0c21201d51b58c366a984eb20191c620287b77b12b520003d48fb0ce1a3ae10fa871c3514598a74071ce0cc1321ff781b96195a13e81c75d35cdc7958030
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xbase.tgz) = faa8760bbee9d3b2a21e3b62fddb641faf939ee9
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xbase.tgz) = 655c33ebf6f37bd90b1921b220dff2ac
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xserver.tgz) = df506c92cf396d2d59ee212c03a10f44129f51a3
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xserver.tgz) = ee8b15abf9e8115ffc50deeb372e9c7dfe9412f8e94d65b3ed78f78fba63e9282b668c8fc2fb2a22437f950adafd1dedf2e9baf395fa945d04eeb50db0d1f5cd
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xserver.tgz) = 73bcaffdf98d0a5c4d5c22c97c5476c1b5901eec
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xserver.tgz) = c5e16ae2cf663c0373fbb82f64f4f48b
-SHA1 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.symbols.gz) = 7ffd5f42e92a4ae32ca78766815db12dbfd4c4f6
-SHA512 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.symbols.gz) = f7a50a9ee148ac9566dbc3722b14d904c02a3cbf285ea8efb10a24b8a93db514abbf825dbde48a8c494da6b02f48408b9414a6d8a45ed61f334afd2dd148aa71
-RMD160 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.symbols.gz) = e03b53e71c192a3de6d720b0502e0597f2ab0aee
-MD5 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.symbols.gz) = 014979ca9f7b5feb3664479cd34dd2d3
-SHA1 (NetBSD-6.0/emips/binary/kernel/netbsd-GENERIC.gz) = 663be1ef5f9177715d8a299d3e610b21a942dc16
-SHA512 (NetBSD-6.0/emips/binary/kernel/netbsd-GENERIC.gz) = 006a5189536650946aeddb6763997bab1cafe82b578777674f75df8346d6bd01467d532de7be3c5ed0664d9b85e4da90a90871f6e15fa5166af29f1e87d9d7ea
-RMD160 (NetBSD-6.0/emips/binary/kernel/netbsd-GENERIC.gz) = 15cbdb609c3925081aac2e84ebc104775601fad5
-MD5 (NetBSD-6.0/emips/binary/kernel/netbsd-GENERIC.gz) = 71af44cf65da1b8ecdadbbf037f07ec5
-SHA1 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.gz) = 4f40fd5aa8028bd956dfc51a5e61be77ca742adc
-SHA512 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.gz) = 9fb9cfe8aa5d8ea350b24ad80a207d9439141914bd4e3371297b9971969c96ca6899b45f099e1e02ed4c8ffbea75d421b22af7d09b5b91c2f435df176229b4c8
-RMD160 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.gz) = b269d2a87391b9640988493e3493edd114e7e8b2
-MD5 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.gz) = 59724cb6c92366dc47fa0b4ecf2fe22f
-SHA1 (NetBSD-6.0/emips/binary/kernel/nfsnetbsd-GENERIC.gz) = 5dc90ad559e682bd427b6165f760bb09ba676e7d
-SHA512 (NetBSD-6.0/emips/binary/kernel/nfsnetbsd-GENERIC.gz) = 4992a1e1bd6cc1dc21821a6151aa3561fda5e369ab6057575cd70d63503a98a8d9da257956486f2f58996b0aaabf20266c16033c1f069e3dcc21f582f74006f8
-RMD160 (NetBSD-6.0/emips/binary/kernel/nfsnetbsd-GENERIC.gz) = e7f4efd86d048e9f9857bb3cbf136a3e461b9463
-MD5 (NetBSD-6.0/emips/binary/kernel/nfsnetbsd-GENERIC.gz) = 66abd685dbc87ed5282e1b55a6b7bfbd
-SHA1 (NetBSD-6.0/emips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/emips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/emips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/emips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/emips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/emips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/emips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/emips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/emips/binary/sets/kern-GENERIC.tgz) = ed3903192d38367303cf5210725c33ba123c216d
-SHA512 (NetBSD-6.0/emips/binary/sets/kern-GENERIC.tgz) = 62687e8a1af317454e30a65dafd1b54eb444db9a27abf987ba17bfaf4b9796623f279011c2102500563c9a862fa983c5e48a9c94afdedeee15414840dcd328fb
-RMD160 (NetBSD-6.0/emips/binary/sets/kern-GENERIC.tgz) = 070bb8b5cab57c375fad13304165f8825e6647d5
-MD5 (NetBSD-6.0/emips/binary/sets/kern-GENERIC.tgz) = 732ac8530d63fe2f3eea6e2def05ab4b
-SHA1 (NetBSD-6.0/emips/binary/sets/base.tgz) = d058920475032b263b2020af3230894da8ded663
-SHA512 (NetBSD-6.0/emips/binary/sets/base.tgz) = 606b27579e80fca77e82a385dfda2e03bac6d8563186ccc98d993cd532bc79da93883cf71f850380cafb31107efb424585a4aa5946f54bbc36aae5d9d9495a44
-RMD160 (NetBSD-6.0/emips/binary/sets/base.tgz) = 2663d48750530861b5e9514902b9cc44e8a4162a
-MD5 (NetBSD-6.0/emips/binary/sets/base.tgz) = 22ff23e09d0502d77de5fb289ad53427
-SHA1 (NetBSD-6.0/emips/binary/sets/comp.tgz) = 5c25affcdce77ce7a77755c866316a9db89272a1
-SHA512 (NetBSD-6.0/emips/binary/sets/comp.tgz) = d2b09aa5b72624ad3f25fa1438a8feef1e02b8f9ff064dd1d05a621f29a9790b0029baf652ab5c0ae2c3811532208235288c6614f62c378bc6b1b4a5494fd06d
-RMD160 (NetBSD-6.0/emips/binary/sets/comp.tgz) = 2fd5cfc13841a1188580c6584f78bf8262752da9
-MD5 (NetBSD-6.0/emips/binary/sets/comp.tgz) = dc12cdcce6751fd44291a95a06cf97aa
-SHA1 (NetBSD-6.0/emips/binary/sets/etc.tgz) = 6bf20c929df89dfe6764df1f4ab15b6aeb45d4cb
-SHA512 (NetBSD-6.0/emips/binary/sets/etc.tgz) = 4ee6668a884bb4b4c3ccc4370a7ac70ed14f32b7856219fa375f200ad259087400e93fe144bad4650318cbe9af4133e8d8d8f79cd0d91aeb24df117117ac54bd
-RMD160 (NetBSD-6.0/emips/binary/sets/etc.tgz) = 9081112a95ee958fce83e79f687b97ef847587b4
-MD5 (NetBSD-6.0/emips/binary/sets/etc.tgz) = 912ab9bd3949946dc2af9522581118fe
-SHA1 (NetBSD-6.0/emips/binary/sets/games.tgz) = ec034031c6b1ea012c36910f2e901b032b0aaebe
-SHA512 (NetBSD-6.0/emips/binary/sets/games.tgz) = e9bd506e1f6a6c17c0505db90f7da49795dc63905c9962e01a69224a1cf22312d9e4c68d815e9c487f21fd0791bac3a65a5e5f7bce46198694f673522b057d96
-RMD160 (NetBSD-6.0/emips/binary/sets/games.tgz) = 393d511e3432d93932f2b3d2308d6a16b7cce764
-MD5 (NetBSD-6.0/emips/binary/sets/games.tgz) = 71d23c31e025ff3b1eece7b3cb170abe
-SHA1 (NetBSD-6.0/emips/binary/sets/modules.tgz) = f9aef1ecd6e2ee16d7ddfdad51da034bbdcd8aa6
-SHA512 (NetBSD-6.0/emips/binary/sets/modules.tgz) = abaa6c62593d85131f691a3125e055970a8c3fdd7d8103db6e501dc2d2379c9dd16f9a819e14ac20959011d8946c40a8dc59ee0b7ead8a8f25c20a6475696bc6
-RMD160 (NetBSD-6.0/emips/binary/sets/modules.tgz) = bca8a2cdb2ced4804cc2e0543981b1db671732e1
-MD5 (NetBSD-6.0/emips/binary/sets/modules.tgz) = c98d2b8fab6184f74545c6fa54897a35
-SHA1 (NetBSD-6.0/emips/binary/sets/tests.tgz) = 05a68659aec8758adb269e6f898607e1fc3f9089
-SHA512 (NetBSD-6.0/emips/binary/sets/tests.tgz) = 1434cd321d5f37e6482645a11ce4f203ea3406fcea550103e1881bc68b1e8760697e5e6207ad01d4dba2d1b71c2ed0488bbb0c01dec2b28a6a74e3529ab81a8a
-RMD160 (NetBSD-6.0/emips/binary/sets/tests.tgz) = dc76faefeb42e73abb5727e46bdb46ce7a737be3
-MD5 (NetBSD-6.0/emips/binary/sets/tests.tgz) = 1ef426de07b570c1d9affeb44e452225
-SHA1 (NetBSD-6.0/emips/binary/sets/text.tgz) = 96fc1b82a283a2bf4cdd76168ee3cefa73191be8
-SHA512 (NetBSD-6.0/emips/binary/sets/text.tgz) = 7cfdb8107f4d0bfe28bf41c15b2fe7f9c0aa0d075cdb7fdb0b4566ed512da3123eff94410bf563c6a37aa498d83ed9cc7b9e16d54c8bf33605fc60bf1357c4c4
-RMD160 (NetBSD-6.0/emips/binary/sets/text.tgz) = 1e1ad1dd678eb777938e2320522e275a5751475c
-MD5 (NetBSD-6.0/emips/binary/sets/text.tgz) = 11f296781f98a8ae6aac39f40cb45805
-SHA1 (NetBSD-6.0/emips/binary/sets/xbase.tgz) = 535b4c29666ef2de43bb6017102e9181576255ea
-SHA512 (NetBSD-6.0/emips/binary/sets/xbase.tgz) = 31656ac187e0adf03eff3f896876510bb7624bb18789094abf22a59008e9d7b8d848cc1703e15b799fa2b4cd9e108f1d29c5625f1ae9f012edf8cf35912e4590
-RMD160 (NetBSD-6.0/emips/binary/sets/xbase.tgz) = c8b8ebfb26aaecc931b8d8a17625eb91f904fcfb
-MD5 (NetBSD-6.0/emips/binary/sets/xbase.tgz) = 46641b24d37899b78ef7a83559bfc3b0
-SHA1 (NetBSD-6.0/emips/binary/sets/xcomp.tgz) = 6cddeb4f503fb424f9a06645ef46701288799401
-SHA512 (NetBSD-6.0/emips/binary/sets/xcomp.tgz) = 45f779894389850776fdd4785165f6bf07dfcd46d408199eb352492536b254fa229b9d4e99a716657f210c4772feea966814329f3f2aaa729112c9b8f9d4e50a
-RMD160 (NetBSD-6.0/emips/binary/sets/xcomp.tgz) = 9203f95dc810dbbd873aa54234dada2961a6d309
-MD5 (NetBSD-6.0/emips/binary/sets/xcomp.tgz) = cbb4c61d832ebb4aa97c99484e9109b5
-SHA1 (NetBSD-6.0/emips/binary/sets/xetc.tgz) = 7db74837c8e702a831451e4660c1f8670e674003
-SHA512 (NetBSD-6.0/emips/binary/sets/xetc.tgz) = d68c233f0e4dcf5961bfc214fa10188d5fcb954e103ad610b76964c8e832e5758283bb28ef3eba448cde496d610b488f7958fb391371e1230a7b6127c267dcc5
-RMD160 (NetBSD-6.0/emips/binary/sets/xetc.tgz) = 2d5fd67c9ef6ddef6c3f5fdc845ea23f2b0e3b57
-MD5 (NetBSD-6.0/emips/binary/sets/xetc.tgz) = 98767dc7c3a45e641592807be04f1a64
-SHA1 (NetBSD-6.0/emips/binary/sets/xfont.tgz) = 6f8acfd3feb8f6421cfea08d8cfe514ad7bc7acc
-SHA512 (NetBSD-6.0/emips/binary/sets/xfont.tgz) = 2b4d59176fdef5055b0c5d8ef7677d6a1ae823d86d5955a2c33be046ba7bd8bfad85ae21e8acb11a50cba250d21bf0f2bb8c43aaa5d7d0767998dfbbfa54d014
-RMD160 (NetBSD-6.0/emips/binary/sets/xfont.tgz) = 34878c9b7c1380c42f57eadea7369b687d0e45bc
-MD5 (NetBSD-6.0/emips/binary/sets/xfont.tgz) = 540f04b4c6acb6e1b6364303388f82ed
-SHA1 (NetBSD-6.0/emips/binary/sets/xserver.tgz) = a85da9c68ded22e61f2234e696b0bd61739f4a08
-SHA512 (NetBSD-6.0/emips/binary/sets/xserver.tgz) = fd1bf84b2f34befbae2dc34e3fc5af3048c93c185d8cf5e8afe91e324bba7005d14d9cd73db5e09bee783116b9a09b01b650a9097df07a335fc81a2bc569c2b1
-RMD160 (NetBSD-6.0/emips/binary/sets/xserver.tgz) = f066886778a33191aaed1a30ac8494b6deb152c5
-MD5 (NetBSD-6.0/emips/binary/sets/xserver.tgz) = fc4fa9292f46a325f74c4abc922fd215
-SHA1 (NetBSD-6.0/emips/installation/diskimage/diskimage.gz) = 9c4d0f6ee9e3251ef720acdb06e20683c55a3db7
-SHA512 (NetBSD-6.0/emips/installation/diskimage/diskimage.gz) = 5b9c5d72e5e4bfcae27bf51c2ec9fa849b019b475d6677be8c49c31f18eaff6e559d80790ba6d5e606169215e46e04322c4d12ed0386e76635fdebe380cadd28
-RMD160 (NetBSD-6.0/emips/installation/diskimage/diskimage.gz) = e7373c5f20e4728fef9951dfc1beffb70390f651
-MD5 (NetBSD-6.0/emips/installation/diskimage/diskimage.gz) = 4f2e15b3d203006588a75670b4d3e75c
-SHA1 (NetBSD-6.0/emips/installation/miniroot/miniroot.fs.gz) = 4075299a2ef6a4368234ed1e378c2931b0df6376
-SHA512 (NetBSD-6.0/emips/installation/miniroot/miniroot.fs.gz) = cee815c8a985125fd2c1a9a4811542371ade25fa7f35b4cc4da1783186146d4620d1910a24b92beb02d1cf836e9cfc2921ff9d8c81ecb4babf585b1ec3601496
-RMD160 (NetBSD-6.0/emips/installation/miniroot/miniroot.fs.gz) = 1701f681ccb15b5232abc07550de79d3380af96c
-MD5 (NetBSD-6.0/emips/installation/miniroot/miniroot.fs.gz) = 5cb7df17380c5bd1d56b28d6061332f8
-SHA1 (NetBSD-6.0/emips/installation/netboot/diskimage.tgz) = 04f571f04a2227b98df91f97023e860af233d2c8
-SHA512 (NetBSD-6.0/emips/installation/netboot/diskimage.tgz) = e5c7354014f23996e0e5c331103b9936387b9c6402491041727b69353f6af08b57cf429b51ee0c28e76e3f4506479b0559dac18b05a009a3afca76ad2edbd29d
-RMD160 (NetBSD-6.0/emips/installation/netboot/diskimage.tgz) = c57777b29a2c589549a906fd0f425c56366a7075
-MD5 (NetBSD-6.0/emips/installation/netboot/diskimage.tgz) = 9d1bfe38f9ec7d4ed86173bb157abf52
-SHA1 (NetBSD-6.0/emips/INSTALL.html) = bad639d8582318241d268e529e8e024159dc5997
-SHA512 (NetBSD-6.0/emips/INSTALL.html) = 94627da8cf355e0f7b3a597e2e22be0b151a9c4e40301c7c0b67c1877c34abff57476a5c177035c032cfc1d9b8f9d38aa919c27f1f3c15d3edb3403d18e71b44
-RMD160 (NetBSD-6.0/emips/INSTALL.html) = f2b00377e6a6d060e9027d78d2278445ff6b4d75
-MD5 (NetBSD-6.0/emips/INSTALL.html) = 825b11bed2394322021f65e43627a391
-SHA1 (NetBSD-6.0/emips/INSTALL.more) = 9906d8f0c74d8538aa2e7d1361800cbbc2db2d29
-SHA512 (NetBSD-6.0/emips/INSTALL.more) = e8419f85e6beef4bf18f6bc916141ae9bca52eb6f56e2ae7133fc771ca1033cf2172a644e4415be0019868004278605f0e93c42f8f4f60d1e2fecf8c06a51a90
-RMD160 (NetBSD-6.0/emips/INSTALL.more) = 70fa5e023134732afc81b3622480328ae9f5d449
-MD5 (NetBSD-6.0/emips/INSTALL.more) = 0cff06f0f5c3bac3eaf4bf4336494217
-SHA1 (NetBSD-6.0/emips/INSTALL.ps) = 5783005eb38711a9ffb248fb5bdf2987912f26fc
-SHA512 (NetBSD-6.0/emips/INSTALL.ps) = a27d36ced381f22565ac6ee290d4ef43de834977ca8be3d96bf758005a6fe0875aa03f703da08b7dfd5fdbd48c19c77ef5263f8571d0f5f983ff7c1d08088873
-RMD160 (NetBSD-6.0/emips/INSTALL.ps) = b8e28009dd02ff9c1f98d5fadadc6455c262238e
-MD5 (NetBSD-6.0/emips/INSTALL.ps) = c16b7dcef0674aaf0dd240381961eaa5
-SHA1 (NetBSD-6.0/emips/INSTALL.txt) = 0d166d27be7166a76ad58779f1272a1a1542e952
-SHA512 (NetBSD-6.0/emips/INSTALL.txt) = ba74f2486c3bee1b30fc39edae6ad38b0abcd9610afdad172a49590aa0c1fd8a2256d185a699baf6bea9e40d9fec7d1e56c17d77858d9ebde027419cc044b8dd
-RMD160 (NetBSD-6.0/emips/INSTALL.txt) = 729887c61690c966497811da66852780d0d3eec5
-MD5 (NetBSD-6.0/emips/INSTALL.txt) = 8a28948bd5d45a30ca79556be75dbd69
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TEAMASA_NPWR_sd0_flash_0x00080000.gz) = e8620ef3bbba89642fcce48ed01e16f0783e889e
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TEAMASA_NPWR_sd0_flash_0x00080000.gz) = 055cdfd0872737d68054fa4c2125d131e6ee3f60135be817da7fe111adb2290c4ad8d968b4cbefc67658c3e9f3dfdf99caaec320f572a00a790604c93fa73408
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TEAMASA_NPWR_sd0_flash_0x00080000.gz) = db49ed4cceac70d18a8a6b335f20923d07c8ad8f
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TEAMASA_NPWR_sd0_flash_0x00080000.gz) = 12617c0444b2a570637a45339937c77f
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_sd0_flash_0x00140000.gz) = 3160f03e833b96020804361b1d98c0cffd8c5345
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_sd0_flash_0x00140000.gz) = e5d7ceae7a4b4446002170c84a44dcd65cdbb2458c889582ff3070a20580ff31d2f497b07c320217b55f75e6b343f689b9312d172dd3880bd82808e6cdb995c9
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_sd0_flash_0x00140000.gz) = 41f31d747ec5265903490d300bce1e6c34ef32ca
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_sd0_flash_0x00140000.gz) = efec631edb7870b4cc3ab1cec8d98810
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_wd0_flash_0x00140000.gz) = e1c927a0718d63609fe15d9dc9c265ab0172ddc5
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_wd0_flash_0x00140000.gz) = 5418c2ebffd11c30028d867561e26dc5857167698c88f5d9eb30af3944fdab4950ec2f6953999689c03cf684aaada038d6f7f07494988dba9467a814fcfe1d3f
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_wd0_flash_0x00140000.gz) = 05680bce8a448c3fec2149d6c89dced13166f34e
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_wd0_flash_0x00140000.gz) = 36d8336012f5603e1b30565061fd8c3a
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_sd0_flash_0xf0080000.gz) = 9419b71634e5ff228357a37651061a1c4c2c2ebe
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_sd0_flash_0xf0080000.gz) = b17b66b1b62c16d6a0add67d55f82a6943557abbbcb8001b328770dcd2191b1b55881dca2919d7f76381aceb1ed53ae81ff002317e99d02fbfc2817d9b366661
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_sd0_flash_0xf0080000.gz) = dcf913149707315fda181d6dd6967b68fe61fd22
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_sd0_flash_0xf0080000.gz) = 4f81965829024ad764d293456cd96fbd
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_wd0_flash_0xf0080000.gz) = 748d01d1b8796881f853c31ce98e0dbf473bcf8e
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_wd0_flash_0xf0080000.gz) = 898de3034e164cbef89c0f09c76decf48c4291c7c0d077134ba1695cf0c9287d658e61c82cb2d3d46dce986014d2e52d84f0600dab0f99db996623eed7ad93ea
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_wd0_flash_0xf0080000.gz) = 452633be8258bf3df07d6e9461785a8f3ac09f98
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_wd0_flash_0xf0080000.gz) = f6644ec6b9e7cbeb624d57e00e764b5e
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_GEMINI_flash_0x01600000.gz) = 2dece6cc86980856d901df11995ecb0a5524451b
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_GEMINI_flash_0x01600000.gz) = 270b8d528bed206bfee4cfc63ae9a04f69c282d52b2beae8cbc8298872d2ff0e50e00d849c6e435d472845a0f6b8601b94a0fe52e63c61e7b5c534b9d830d252
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_GEMINI_flash_0x01600000.gz) = fbd959fffd37010a92a76026469affec9bbe95da
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_GEMINI_flash_0x01600000.gz) = adaae55226bd3fc806962ae70e9281dd
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_sd0_flash_0x00080000.gz) = 97ec6f4a472d0b73f1d3b8d284f57debab190c78
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_sd0_flash_0x00080000.gz) = c52a596cd2ffb52c1321b2e8006a590186dddde671f4325067e546338eac4d405c7d5fe559ba6d187a1c26eba4c45d233505a434a98ee11b88b315db0a42d63d
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_sd0_flash_0x00080000.gz) = 3305a23227d275c25307ab7b999f5e0c0560195b
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_sd0_flash_0x00080000.gz) = fd76ab094a19b1f66c9d21df4cb69700
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_wd0_flash_0x00080000.gz) = 0ed362fdba88789a5d26d00e0e8285f75587f5c2
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_wd0_flash_0x00080000.gz) = 78110414c2dc51bc378c3a1d44914b4f5dffd6b1d6d0a749576e2d7d5474e7856a2235641fe310fb87b3789bbf495b16459f9c773bdab19161e65af671ae6bec
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_wd0_flash_0x00080000.gz) = 4d958d9f772b214efbf9932a00970375a6fa7e57
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_wd0_flash_0x00080000.gz) = ec5386e862bee8da4d46a124584e2cee
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_sd0_flash_0xf0080000.gz) = 037aa337f876321d75654dfd576dbc0c4c301e0e
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_sd0_flash_0xf0080000.gz) = e033668a417f453ca35b2b43633a7eb9160765eb42ba1b86ea61d5fd4cb5136123a69194d58b3bddc51fd7e319bae1d70028e1215a1e8f4e98270bf0b4eabfa2
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_sd0_flash_0xf0080000.gz) = a8e8d6ea67cf26c422d638794675626e7261b3ea
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_sd0_flash_0xf0080000.gz) = 2b3bb43bdb7fcd4999377eaa3b994c48
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_wd0_flash_0xf0080000.gz) = 6d8870ad00ed9f496738dd5cf7f670b5b43d2f34
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_wd0_flash_0xf0080000.gz) = 414a11de38ff565307fbe599b87b0f59ddf91db1882b5e246774ac23f6af49411ae33de4145a0d8e10755d6e78d85c930ecd0705804a25ad10e3957765e565c1
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_wd0_flash_0xf0080000.gz) = 27959615599b74b946e9e8483c2284aa3f80ffa7
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_wd0_flash_0xf0080000.gz) = cc0f0b0621d6d931f6dec494c7bb2305
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_SMDK2800_flash_0x00000000.gz) = 09617a28f2da331a17efe6cbdd4df7367f8ff98a
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_SMDK2800_flash_0x00000000.gz) = 9324e9fe0d4756cac25b33f8b6592f2a1a25d12b0f3752447cf660c21a3b2e93eaeb3e41a15d91c2edd827e2f5318a241c58129cff998d8f0a0a7a6a6bbc598f
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_SMDK2800_flash_0x00000000.gz) = c2e0b7b74df9090350d1afc52a15465b77eea3b9
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_SMDK2800_flash_0x00000000.gz) = ee28fbd00b44705a33d6ca6e6982507f
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TS7200_wd0_flash_0x60660000.gz) = 3036d8f2318c69d791b710a06d2e94c5c563fcac
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TS7200_wd0_flash_0x60660000.gz) = e8f2cab3b75e3f4ecfd2ed85b624c8c643eab3cd32a8d0398148f49923622df598071fbb2fef6b5687c8273762d197992a03b1d8465d96630202b78592199a1f
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TS7200_wd0_flash_0x60660000.gz) = ead79fd1f78230bd30f851b78dd13b670a791863
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TS7200_wd0_flash_0x60660000.gz) = 1e25872ad616b30406dab15aa8c20b22
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.bin.gz) = e673789f88d60407c85c744a64382c102b91e983
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.bin.gz) = 43aa01312bac8975f2f66cfc47e9cbdcbfe37eb37f2076c221e5c118521e987f18c1b14bf2d94b390942820e5f6218cfa1eba67a1818f8723481d434f9fea00c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.bin.gz) = 7c45cf94c28c04db6df14decfede69e83bc0cf4c
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.bin.gz) = 49da3170f0fe2fb304e1131bf77d4c3d
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.bin.gz) = 8f057cc764ab0cc64689c2df8652f9db24e20004
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.bin.gz) = 537b67fb3baf1f5363dec0079a7bf64c0ed7d5ec9b2a383362ca04ce3f746011798d12fe10ff6e4a77ccde35aa66e8cb06e689dcd7f19b5233999ffd7a2f817b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.bin.gz) = 3119fe0017084fdb8a97ba14a7f6258450c6b938
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.bin.gz) = 755aa54a7e8e2091f3f3e7c37f34f45c
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.gz) = f133ab0dedf14635b824f7a0a7d55451933e23be
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.gz) = 56d8d397af893debd28cf4283759213f8c3171647fb4df80b570991792d2addf4473d5ac0ac8a4e4dc4a668035ee37d3331cc3b6d5e029876760d4a6e0aab459
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.gz) = 59b03c3a53d5b54cef8240612a803d1ea61486f9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.gz) = 9e800486bef03915eec15ca90ea163fe
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.srec.gz) = 18f4bd985378baf25a9e28ffeaf95423b4bf85c7
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.srec.gz) = 9a535fc733582c7e8b59784c117f6714a96a1be2e9f65be2074731532511458a97b344359992de681bd7d7980c63dcbe98e7cef4bd58cd4cd3a313cefe822814
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.srec.gz) = 0e3554f0de32a39d19c1e674084e6b42f7ddfde8
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.srec.gz) = 22db840fa81c95919f08d2cb7ef81450
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.bin.gz) = 5e3cd42ec6e6af1203ea8921eb1979183164c8b4
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.bin.gz) = 21cc95b8e28d50eab2b20e5eda315781ba95c34a4e4f8d1c5907ddd81ed4b236dd100b3bdb957456e3a713211f5de11a0f55cc6516a58dab3d7212b23de95120
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.bin.gz) = 5a1f1e22d7a29bf8205c1a3550fd78d2cdbe1d38
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.bin.gz) = 61edb94110b4be5c9d8bc9ee660dbd41
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.gz) = 19c96d4bf28919a4f30e55838b0859e197d0759f
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.gz) = 823dd6b45920bae6c2817091c106af7d7fd4ffc965f64c68da520fcdd70b8bd341765d33f1adf06574baaa79395a501b58aa64b8b83628209f3a08560b90c0d5
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.gz) = 30566487cbea824734bd4d9061f5a9df30875b07
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.gz) = b35c13395ed69e7931eefff8e42f1198
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.srec.gz) = a7d4841b78d684f17658819d150d7d16b135786c
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.srec.gz) = e196c13406146baa4b8d923b4406d8e3b2a451a7cfb174a4c652b8a702b0d619d30705bc998acbe8a037fca1c8f2fda53aee9ce8d4a52722cb11c40bf1288f75
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.srec.gz) = 78cd23cb694a0062858e5e3bb2959d794176c2db
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.srec.gz) = b4e62ffbd5091a667a7fb61c31ff578e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.bin.gz) = 6f6bf5de9d82b058100eb089aca61b9bd59aaf61
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.bin.gz) = f91cf6eada8a84ce9c0036a4c0b22e550d71bf20fcb67d6b409d252e7db2c707aa104ae68a998cf87e98e8a47e3cda2cfa67f19c6792d3cf4f32bee59f3e2c48
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.bin.gz) = b7ec88f6f6604e897b2450223e791758e1c278d9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.bin.gz) = fb61d11fbdd49a4d826896bc45bad653
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.gz) = d44a7af68b2dffe73d6a28a742a15a64ad1c7f17
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.gz) = 244d5a9e1b36b7a18f77a1689d444375f733e4abe0a13047300b815633fe76af3bf595544078f89b1de302619e10f6d19245adeabd177fafeba93b7889dd34d8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.gz) = cad1e137c7d8bdb92221cb76679bee0ecb78f7a7
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.gz) = d5a82888cc0477c064dc3ae9dfb29110
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.bin.gz) = af321ff02cea6f05295ed48d63145f2557065034
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.bin.gz) = 103b4e272b4ffd89e2705edcde9ecdff2d1b11bb4e4f6c46a2cfed6ea8bae9386bb357dda1fb04ca558f30d201171f2ec2aaae84b39b792715f142ab83772988
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.bin.gz) = 69a190021189d71376d88493fbe9bceb5c1bb50a
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.bin.gz) = cddd2da663644297ba2737081b26fab8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.gz) = b7ec166d07220620ec458e776df34ce0f954a861
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.gz) = 8b38c79a2e2533d85733cc5dd176f808036e3d04f91134fab57110aa2c827f26487cbee563fe85cfb0facd6a463c7069d5d22aafe90c1803a8f0b7df2fe526fe
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.gz) = d71b9dc8f5d59f8b126ce83dc06df5f97a009195
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.gz) = a8fe08eb1fd48f4870f1f736c4a72cb0
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.bin.gz) = 33e9946d8fc4834f9c74647b322a79425d3d6c52
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.bin.gz) = 354db08b656e913a0803051b861cc77d90c3c7e170362488c9940c3d0dae047e7a9d92fec348f92d951ea4093196b9f0b210d9d0cf04b9d842494c45b6feda5f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.bin.gz) = 393631ffd8b30a1e3dd5ecccbf950bb1a75759a3
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.bin.gz) = e650bd0cf7ad90361db3a5cd788553e9
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.gz) = eeccc5e10b4cc5b8900e9dca97222f0329c5ee67
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.gz) = 3ef842acc43f885398224dfb7c696d2334aecce84aecf7ea11d9464332e62fb796b45b302a097fd3a1ec4fe48ea92a029a8301f9d97899a51cea19c3524e39cb
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.gz) = b402a5e445815908643d27c5b69b7e055f2487ed
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.gz) = a74d0d8c03f2d840e118654bada47b03
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.gz) = 9380dcaafde1fc16b90858e04d0804b159a18b6a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.gz) = 20e027261b82d2188342fc3e10bdf1c2531c9012b4c0a5fea9d480c70bf00f118f0a0487646f541a63422d1acddf4abaabb34ea0a9161bb8f429708fedd18e63
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.gz) = 23e93e206ce3d710bdb9f4e57c342aaac073ff70
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.gz) = 2101cfda9d3ee129a2768bab982c7d4d
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-RPI.gz) = 1558752bbd6b362decdd3caef1d05b8c80dcf43b
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-RPI.gz) = 15dedb25bd8759aa736fd0ce444c4c782a65ec6cdd64e3fe424e1665d3e937df88b375dae773dda973a66264b90e10d0aa89e03cc217a8afbf4d79a23cce635e
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-RPI.gz) = e64628b2e9cc699bb0a48172cc4422e9e50a624b
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-RPI.gz) = 2224734e36d6bc4a139efdad6cc86978
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.gz) = 2c4862e6fdd14328dee5191b7e007fd7f2e626e3
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.gz) = 259b9964b3d10a4b49a413ad6355c16960a538b02f19bf4c0e07fcfc51699ba9df0a0b6342e6f67b9366302026bade0bf46a53356dfe42342e06f6fcbaf64dcb
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.gz) = afcc94417f4da4b84269420db2b0952565bbee93
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.gz) = 6010c0404590c4264ff824a9a57c0e04
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.srec.gz) = 0226f405675defd77c9dcdda8916e5b372cd206d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.srec.gz) = 0213a4b6784f018154bc11a148fcd6eec14ab26bc7b714d087c845db361776a6d37ff11aab7b1c1218e7a143e7fb12a85fff77f93d97832fa12d4ac39764691c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.srec.gz) = c5132bac29060129efd95b4d9beb4eee87e0b6a8
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.srec.gz) = d176d5afd6c40c0cbfd4f64a19e39a25
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.bin.gz) = d105689d85a45fc834acd60c920d1420782e47ed
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.bin.gz) = bbe9fdeebed0c150622bd216013971c27646a4496f4ba64a8dcb0748e91c402a03441a0ee7b78341107f4d92f81771f41299b52d4142c6fd93e345f46a9319d8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.bin.gz) = ee05e9b64e9039aaee667dfdd71934a2b029b22a
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.bin.gz) = 993d3e5e2595d0da326ec142a45b2750
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.gz) = 7bacc9ecbca2a680a72fa9d71d0f622302fd94ec
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.gz) = f12ed4db4fae72630b905b3edd5f6eaa87f84db7a13d908559f7c1bab054054440dedf6806b8ae6ce873bb09bf2a4cf69d89529f21abbc476ac50274d9a71741
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.gz) = 360190a9de654cf05c1aa9a6edc908079fa2c237
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.gz) = 73b8043c242bb9739d216f3f8da7d3a5
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.srec.gz) = 2c976175ede9683b8a8ec5b8c3711df84001300b
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.srec.gz) = c683332d8fb46e88dd0dc5d9b56a4fa942fe9cc7cb79a005ce59609caa9d357d7dc5126feae3b181f63009980a9bf1700130d086b7b7103a8ac199c2a25090dc
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.srec.gz) = a1cde3a2841db820d89ffaa32232ce83fd5f44f9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.srec.gz) = 811e47b38fb8e8c1c7f228f0bbab9a74
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.bin.gz) = 862eb1a7ee9de8e3b3525e7d7d26d2cc5ba9bc59
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.bin.gz) = 884b2229b6a78748f61fdba23fe88a623a05c974d71e711821d902fea63e258fea523b9d9c1044ce5afd1d941a2e73d09649a6abc6d38ba0c263bbb4700dcfc1
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.bin.gz) = f3c4d5b5ec632c62410643b9e12960a40b2074ab
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.bin.gz) = 31e7f8b3e40c22ade7cc22d01d95b532
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.gz) = a60ac00d16384a828eef8a837fb21e00b53a8a4a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.gz) = 54bceeae1a8b27e59a3767284017552f717cefafc71e68b6c74a40429131709ecfd79726737d2dbaefc30e70d09fdab893e4651d125c85f10d9017b1c9e1db7d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.gz) = f5ce2ac5312c8fecbd072965df9bc2eb0c340d5b
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.gz) = dc8d921c26170e31f92bf29b1ce1a183
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.srec.gz) = 6fc69281083cfff4fa9fe78ab260619b92972167
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.srec.gz) = aaacf4b2b3f5ac015eddf58f6e5757c061b94ad57b8dc850cd5285fa4e111aaacfa2dbc0c9cc3b4e7a866a2fe2b55b900a33fed48e8587b50c6dede0dc66cd9f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.srec.gz) = d63585bed43debdbb05df1eb44130fc50e2edfb9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.srec.gz) = db12176962530274584befedc2794d71
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IXM1200.gz) = cbf69533e9704756eed91dc42ab880300452cbf2
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IXM1200.gz) = 104cbab6498100ebf4e91b89055568f8e770f33abf331787d061ad000c506caf54ca9cd9afe2d6c16b6874502e10e3b20c0fdb97607f18d2ffb59718b2df62c8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IXM1200.gz) = 24af829fe0a4c696a78dc11eeb9a6830c1faded6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IXM1200.gz) = e3634e55cff56a10538e3139c4eaf83a
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.bin.gz) = 3921a70d245903a0c95e4944b835f8b05326278d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.bin.gz) = 49bf1c9de5e10f21603f8eb6a45b7ae29bda1fa9ba8fd4b0c2a07e498af6bfc818be5d59e384ae3afbe6a0aa8000ea494f2a431067d5f32e553d09c4346b488a
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.bin.gz) = 506b209365f4650bf205b3c989504665e6a464da
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.bin.gz) = 4d00574f0fccd038ce96a75e40119f54
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.gz) = ac288980ec3e5615d33d18bbb5b20b863b64d4e5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.gz) = c96f2aac73d0e62c35d76c6a467f5b3b4ecd8461504a0ebbba456868f5ac1a42b6ff7c80aa2717bdeea242d79b940cd3584184da0fe8a07a79e2ac2f7bdc96bc
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.gz) = 02fd101de84eb4c6aa40bfa7cc477305246a7610
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.gz) = d4f8e1de25f4050d4b357cc9222799a6
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.srec.gz) = 10bb46c7b4e78af1cf9978c76759694a10f5b2b5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.srec.gz) = 75b010e6766552928518ebda6daca8a979dd9a2168e932621c63271607c48ced148b11ed29cb14a11a1905f4a30a3613a63a41a5743b5857b346501b5516c3b0
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.srec.gz) = c18f791fe071f039783b42800302d62d407245fe
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.srec.gz) = a749256c48d3b8ac02d6ddca5fc669bc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.bin.gz) = 5f240a5493136d85a3b3ce856856a5781873834a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.bin.gz) = 19b95311ee9fe25d64d8eff569a02b68672348a1c7372bb99f9f07421e390ccaa0e1a3c65b6d8a67baae1b34859b5ae2ae0d1471c4c1bce0f249765ee085dd03
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.bin.gz) = b0536ea2075ddf15ba68cd3597aca512d25404c5
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.bin.gz) = 0174a07da16cafc0426a75dd4c9affbc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.gz) = f59146a75e366ba624eaf77f9582cd7200f56530
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.gz) = d68a8a5c29cbcab54673232481a17bb901d64d15de7df630c1657494cb70494436a0763a38ab31b12e3f273c8e8404f8515d29f2f290c99d25372d46763ab6ec
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.gz) = 2cf27b32a9bfd684b5f4013c9d25b8837aab0a08
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.gz) = f623986c6286c02be5144d832c0fd3c2
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.bin.gz) = dc5760fca180affcb51da10f190dffbfd1b56cd1
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.bin.gz) = 56d1f1d5cf1faecbd845eb2a4a8fb88ac6d54808c87a6b39c70249231a532c7b7d858d5d89981f5feb726d93bfab384c6e5b8697a020e1c7ab495c13a5580e6f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.bin.gz) = 9be387154227f881c0ed38529c7a7a6916a59433
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.bin.gz) = 338ce4a5cb70414c375f3ef8cc9385d6
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.bin.gz) = 9d9cab4789700632fb90b593893a81015b51f619
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.bin.gz) = b1632b6bf5b3e6ebe3b8f311d8de3218e42e40bfabeabb2ddfd99285b31a0451e4ee4267d0dfbae1618c023b52bbeea5b76aea7162d4bf108f74538b5aa535b3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.bin.gz) = b6861bc0a0266cf68f5d91e6e3fb8c7da61690c5
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.bin.gz) = 9da615e9589e8b82d9a7e30c680d87d1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.bin.gz) = c7ed735255266257fb135c4abc2187199970ad3c
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.bin.gz) = fac2299142fe0f8b45f7a433b756d1e48e66940155cf5dd53bfd6bd2827d66fbf43c08306a0cf5d69e25ece03253ce5f806498cc925786d55973f95bc6079c7f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.bin.gz) = c3a03ab1bcd188d70b889c6384417025abe0f459
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.bin.gz) = bc3474cddb53421b463c1172621fd278
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.gz) = 0b08bd196892dff6fc1997afb9110e3f756f3124
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.gz) = 77b0d553364442904b9b08a3db76c70a7306b23b1b9f71a495eac9b294165da023d9ded9f8ee86f6e0ef336b514d83461cefc63885f754d4f6e03ea208842326
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.gz) = c0be26eb32c1d60435e1fea7521fee95660772fb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.gz) = 79e74c16602e752a034f0d93be2ca62b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.srec.gz) = ecffff46a8c528208595aa47d6739be05f4be815
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.srec.gz) = 532657ee54b385c79c7ef9768044d4d4012f16f54eb0fba2b743cadd66bc8288b00fac818503faf00db6f28a54f2bf51c7bc7f6ae8d5562e84a60149af119e63
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.srec.gz) = 749c2ad2c37bc095893a6ae9bf2b614af1effeb6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.srec.gz) = bfebb327393531018e6b9f6e66738805
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.bin.gz) = cbc1ebd6e56937148dae2c2d968add4d8b3df600
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.bin.gz) = 463210825ff997e4cb1a7dcb36ed0d0f352ce8ab72ce55fdadfdb03f38d18fd524452fc2129942cf78d2911bf7be4875df238a03f8108ce2708944ed8a9682f9
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.bin.gz) = de526c5e982f7173406cd0b2fffcea1dd4fc9a7e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.bin.gz) = 9c8cdb5067ff1bee4fe4705cc1cfebad
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.gz) = feeb3ef6e66284fa727a9feb4f3d7c45fedd0ca6
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.gz) = 9ec41f1cbabe0c960134267ec18fe6f1c5d8062489735a85bd3b1b8d9ee2acbbbe5f32c8e8e416ba3bdd55e563dc25c8224500702bbc5038e7bc5f91be5fed05
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.gz) = d03357b46454c1ffef1b1e3524c8b56a61336a06
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.gz) = 39dfa81264cd40fa3e0baf2db3f2fb8f
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.srec.gz) = e7908babcfe4f8e9400a83351028545d87c111d1
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.srec.gz) = 3e13a586fde15f0fff6be7719975eb9f2fb1c4778de5a19b30b208b050e2b8549de137c5820b0c233af3bb32d4b0dcbcb7d50d4012c6418146c78358f11ad194
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.srec.gz) = d8a910ca9c3b14abb626d94cce73ffee1d951258
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.srec.gz) = 43252ffe4ce1a12b526af0b37aa7a2c2
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.bin.gz) = 1eaa16791cd37e16ece1fd2a3f84a9f1b744de4a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.bin.gz) = c12fe5137c903af5a4291fa06d95408e1a554ff70834036766a971693edb8164dbfecd8783ced92f548a42eb354da31e658e6ea3b347cb41d7551a85ff14b441
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.bin.gz) = a630baa7e17c1dd8e67f5d925fcfa782301efd09
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.bin.gz) = 8bf004134779adbfd47e710810cd541d
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.gz) = 8f750421edb291b7231b9ebb2df970f5da937ba5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.gz) = fbd4cc574e78cbbdd68754790777507f8b6b6288e05cb5261423f21545ff0825c9be03bc1ec663bf6a5552ac6686cff980ed1f2e4716a4690132058107a6fcf3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.gz) = dc315d5e0fb0cadb02954e75fb78670244ad1878
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.gz) = a0a2a1a1e5fa5e566b076fd1925f5a0b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.srec.gz) = 27a486313bf959dbdc89279b8da39ecb7ebf7e6d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.srec.gz) = 4dca299d4f9a90a2bffe3ffea6b5262e6cd248b9abae0fbd838e6bd83502fd573428952180f2dbd77284907fd7b1ffd1ef0c7524897dce49ab05c8c3aeec3aa3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.srec.gz) = e06dcfeb9376bb44f0444e71afd03c51754ad533
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.srec.gz) = 0478aad2e41f791604d7d9e33efc16c1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.bin.gz) = a9c56c83c032a539bf23ac6250412bdd71a996a8
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.bin.gz) = d61d6f3e0a937039f13182d03ef1bbce0ff4f04a0b59e60096fbffd34f810d8e254d8e42b456a2be03bd84ce127cbe40e12c7864c85e4bf963ec9761ae322b9c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.bin.gz) = fdcb7c9bf1b49107c95e7c0731a6ca97922dfceb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.bin.gz) = 23acbd88065f394218ead9a00dbc6daa
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.gz) = 2d4f5baf51625ecb75fc4d043d248ea326c13102
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.gz) = 2bb556b33c74bc49b82693a4b66437498f7630709923aa54ae0cfbb0af50f5d28db62d062eb234e6c5b33bfb081490e9cbd687a899fece106756c79abe325a85
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.gz) = 84c7b73fd2c20914727a86e8aeeecba0e3b54ce9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.gz) = c1ef3736981fd98a6f6636a8785066ed
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.bin.gz) = 80dea7855e77c34fa5a6df8fb657f23b02777a71
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.bin.gz) = 673533b24668f44c09364ddb22f1fe3e058b5aacb2c544b0fe2c70eba9823e8aefcddcd02f6df8fabd74b5283e585b30ae33501e02b7edb7bc05cadcf8deaf07
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.bin.gz) = ba834fcc21f7b5210f10388a209172e2a1554944
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.bin.gz) = 6228219fac300e28fee657b3d640d2cb
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.gz) = 5d321821199ef390140e42f5de3aadbef178ec7d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.gz) = e5c98ca85a4a926860f11a84abbfeadbfdf2ded1f7ba8fe4f852e48188c16878016f66bd79585eef8d8cf1afa28be748ca144cddb742029c27b97051224fd41c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.gz) = ce45d65a2eeb0e8b3af0ce02b09a1dfeeea56d3e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.gz) = 9b77d5ea8b37b0550d4610e53bcce56b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.bin.gz) = cc608ec28ab6439d45fdcaceb2608d00b20f5739
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.bin.gz) = 18d2c25112a185bf5b7e23a7c30ebd183a29f16cbc79e11327fb086efd8f04faaa1fdee8ecfda8de6e437eea0ef79f788ee89d4388aa37fbc88331ba3a8cfd4b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.bin.gz) = 85e82f3918141510d0f3b9741fb10e15616d38c8
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.bin.gz) = 62e6180d8bc9b2ed8ffd209115083506
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.gz) = 784f311793c86ea06397c5e35f93833f1711c92e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.gz) = 3d481b051578603414849bf1e43bc84cca28049991640d3c41af3bf1f223623e46200c872cb29e3f98ad2bfcad5c377c1b489f074ac390f4ac9a04b4260e8c77
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.gz) = 17e6e1253799aac23cb810aa24e81c060115d311
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.gz) = 823ed2d54f115836527299f9542b1531
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.bin.gz) = 0d27b6fb7baf68c25f5e37005c6864cb82e075e2
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.bin.gz) = 70d04bcb2896f6e27c0278189d57549f9c3a286e43a827a704255487095123fb61b00b155750fd007491e42f5498d4fb207e9ff40d32354d1bb8b4adea67db1b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.bin.gz) = e2850dff5c5d6a2dcb975ed69d9cdc3dab59304f
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.bin.gz) = 1b5cd32ef196ccff17b3a3bfc3a790f1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.gz) = 2778315d331ffc62b829685c27668514472f3e19
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.gz) = 1fb7e68c7599c6174abce47d01c5376bd37e966342c5b377e0375e050200737f507c34e76653377a787bd9ea11ce526c0e52fa01009d10ccb4e124b77f59ac33
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.gz) = 08efa696270c86ab0b2ccecec2f65fd0f6ed07e4
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.gz) = 103a3dadd04cf056386a2b7bbd0d666e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.bin.gz) = 11f132f4c6e60f09f84e8cc536c38d125336373e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.bin.gz) = 0a6442acb206b96f9450a80a1a02f5420fea62d96464695490a5efdd63b11c30ab38e2ba270fbb4125386a5b3bf452ae44427f75fb5dd675202e862301cf28ca
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.bin.gz) = 14a2ee2c2477084bd47369e3ab5bff9ec5163a2a
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.bin.gz) = 13646782aa47578a9ad12f7c07907633
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.gz) = 41474e92c5c2634a3ea25bba4510dffc8d2e399d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.gz) = 269cfa9fdab9f28e0931d20e6ff68284ef6e578d11c1c2b23fb272d9e82b12b19fddec101e24032b479c15ce8042efd2265678cf7a3e951e6b2429deb2de2b11
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.gz) = b080ed55c674ec69554713838ef050eba2a195a9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.gz) = 37ec6bc374177e34ac79e774e15cc679
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.srec.gz) = 98d97a466e67c472d2b778cabb6ff6196b379079
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.srec.gz) = 8ea14e0483850adef7d6bc614527739e9f3d1880a03522ca6d7c3df1e38222200983ff4fca413b9aa2c2e6d90efd5170aa7b43be8ea68eb9c8cb8f024c9954f4
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.srec.gz) = b88e4587b48064fc6719bf3e776bc3163efad390
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.srec.gz) = 5b59dd3b2796db425638472b47970280
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.srec.gz) = 77140597384a41679467c0cb3814f4524f5a7fbf
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.srec.gz) = 104d1a827d7a622c77139c4a5f6f36a205d708ffa3f3b438ba139981aaca00342288fca6adc82f00603d0210e05e9187fd4fabe3a79b3ab0baa5899a72ce6253
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.srec.gz) = 3c1e9ccfe1c9df8c07976c82348191273a09024e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.srec.gz) = 4a503d1c30776dc77a7dc3ba3e160f37
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.gz) = f74be1c541128bf2c1bc8992058df64b48d1fb97
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.gz) = cf97c8ab92e45baf4fe64c2d5722391cc35569c035143371cdb746c9a3704954a06fc336c50af51f9f0b198a5e05d6e7e3a3e5b5257ed214489fc124525b8104
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.gz) = fd503fa3df024d8aa2397a060e986074453d8ed4
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.gz) = 240f52b880f6c81b4e67314404fc5a97
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.gz) = 55a7ccaf693a8f72322bd4e898b4ecae4a8e0c80
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.gz) = fd40bcb076b661407034b45baf50731dfcdd9ff9f78b4768b0c300fc6e0187204fba1e9491c8ced8a12e77070a3f599608d7c2c649222a142efd0b799e414499
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.gz) = 6e69674afd923ffa4e320a7c1cdde0224959b3ad
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.gz) = f783d0328ed41dac449058e80fa81dde
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.bin.gz) = cd7ca6c6ba8134af29a1cb3c4db19e80753b5cda
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.bin.gz) = f1b0bcc810fa29ddd4102477ea422457aca2e037964a284f1eab1b2e31c4c408c5d495eb489c7b4b5c2c578998a9643f68e8577670b9b04e177b5147dc6b17dc
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.bin.gz) = 2e7c3d70ad38408b2e24ef3a6e3a5c22c8724706
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.bin.gz) = 693dfec6cb311df0ba890e55c610121e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.gz) = a5ed3ef72be67e59c81f1701c630e420c19df6c1
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.gz) = b9b4dfb8d4aaabaf3346d5af652fb4d79b15c8ea43eba94bf3ee3b0a9f05bd129a050ede2b4c127f14c3df1149f7a9f965499d09a55640eae83151c42f054dcc
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.gz) = 12ea272d03d51081eee0ab7858e05bd77c21a86d
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.gz) = 114b5ae7efcf519aa2f969e827ef03a8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.srec.gz) = 01d52551442d858c9e8b9404311a0c3e421083a5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.srec.gz) = f74951ab8e5b2445643c046bee3d34c67310399a84db9b0c2e1c3fb7f460eb1d863f520c6703f51f270d6cd1bdd8ed0569bd32fda709e6f62a4ec9a8088418be
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.srec.gz) = 9baca8969db5db172716ad6b6e9154c42c0816ec
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.srec.gz) = 60528f9ba917f0412d4c9026c58dba5e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.bin.gz) = 1d0c2b24a143a451f4ea9e11f4580e45ecab2237
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.bin.gz) = 367845db7dac4bb80eab23acb6d40c193ac2c53239deca54acca2adc5c1161240755bc9dbf9ea4082b48b83eea70f4b01909c46f26f4221df8af74cf64524cd5
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.bin.gz) = 5bb353dba0b6a32a0916359fdaa5b06a260de51c
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.bin.gz) = 56c549b0fe6d221922b59b7ae00c6ca6
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.gz) = 72017ac40eb0de30cee8ffc340e9bb7f33cc40bc
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.gz) = 836362bfbeb34fc0040b9a3492012e1dbea1cf8c1b7bc6afa45c59e784caa1d07be1b829d10e807d1701d71d6350a3d1a5e63ff71d85cb3c37fe8b9b4f65c47f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.gz) = d74682aaee589c7ca089a49bbaa6029175d13c3c
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.gz) = 6712477894ae747784d281b4ea595131
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.bin.gz) = 0044ec7b51299209fe8a15443aace1984350d1c3
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.bin.gz) = becc7276686635e6b10b03d8374f1a24526066692cdfcc72d556ce07a0a06ac44144ed011451b4542105211d9a9d0b24f408d193a932bf161a52cebcb49a6e06
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.bin.gz) = 35e63f0805242303ded144ee50f429ed6b165797
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.bin.gz) = 56670b2148acf612495ae5a30662bedb
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.gz) = 3e68e8b0d100356489f0a5b027c19139ef9e97ea
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.gz) = 6e87c01ae9a15702a15b2d6eb36a7a4ddaccd3ae0ff9188b3aca9f3c48207443829e2b57cbdbbb01b958cec1f8416e326547380928c928d0fe67a66adff9d2d9
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.gz) = 50496c450bc32fd7da2e16674eff08df7e3ffbc9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.gz) = 2d40cabe8960a91cb7b995cac28c016c
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.bin.gz) = 4fce330a36c78eb1de452bc0df57a84b5df02ddd
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.bin.gz) = d021074a1083f3cdf55ac1a1ef9a1e93268b418e36c01bc3a401d52d418f8402c19cba1c06a380c86c0b9f5f552cdf7cafeea19b2f03dfd46aad733ac7095479
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.bin.gz) = b573e7bcafe3e1d1fc25aa34177b9c5d845095f9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.bin.gz) = 5035eae6a7bdbf82b39960661bbc1548
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.gz) = 3e5e3eaa9d205254d39746b8cc9c4291fc1a8aae
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.gz) = c454baa740a1e8e7e16c027ca4da512731a8cee8d265bd7ca7110fecb1019cff0e5b0db423aface71e0228639c4a7465108bf3fe69b9d711bd5f5113c4a0a6b3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.gz) = 1aa0d312767044b044041a1d9431b7d4b4841bef
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.gz) = ccc8b7e6d1627a24e5ee493d3d769681
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.srec.gz) = 9e3be145e73c346fc467de425aa5ae84c8e86dcb
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.srec.gz) = c7f1566fa1665b6f81a36e0c4f7e00f1ccb08af73698d5d938fc26770c65f5485da4c106cde8aa8518fc312208c58182e4a9e6bd92f2cf6c3b7ffd0c822e8fe8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.srec.gz) = 5446c67277640bac0811d35a413b2c9747d2f1f6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.srec.gz) = 9072dfcce2a2736faeff274a61d6b378
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.bin.gz) = a8aa9bf7afaf2468e38fd8f9f3e2fbf1957c47e6
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.bin.gz) = c40af33b0a32888b18dc3e05cb747269ccdeb38f7fea3457be91688e44ee256754d8b31489b9cb6495af63bdfc6a6ea16a6f800b70f5f567d85130ca50ead974
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.bin.gz) = b0b41be5da00dd6a4c84277bfe39975a4cfe31a0
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.bin.gz) = b63766732a4710924581351a1778f71f
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.gz) = 6a53fe270036359318eb84b30bfd04f089cc6e6e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.gz) = 8c61a2d1a08ae6c889304a8a1335d0b40d092f4f7a1ebc0a14fb721efe1d56fa7c3c3a43c65249754f0bd1baacae5f16a6ff497c6146c6c1fb805aeb14d07f65
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.gz) = 1de7507b9869a86de2468c9200d728f6a379148d
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.gz) = d878c13f9a7706e55848df3b09563620
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.srec.gz) = 4a762c7e63648a321e727cff47e99a01570ed1ee
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.srec.gz) = 19e1b9284fe2a46a5952c379400bb1d74117b3b8d2aea91e6820c1356f4e6761add87d462ec0a14a545534d1e17f211e505f539ff681f39eafa10b0893b13038
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.srec.gz) = f4b31cb80b5da3de1ab654f7287e544ca9e761cf
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.srec.gz) = aa4640c78d3499c1bd1b6ade6b5564df
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.bin.gz) = d297e9f63876e259acadf43d735d26c70648cfea
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.bin.gz) = bba032dbe3a47aa40f45e232a06c38edf352515983e9896b56a28510fc031edb12a3b462ea799bcbe5e3dd2ca7585729c40e8203a02347aaf27f367ebc027cf8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.bin.gz) = 3c2d8df7cda72b357e291b47454859098d5a71b5
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.bin.gz) = 2cb06ddf778f331df715f39fe0443219
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.gz) = 0ed7595924e6d03491d2bd7d32d42d00f96a3834
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.gz) = 0e33713d7943731f3430b74e4a72cb98ace2878790ad7dc2d185f0e8a825c2a9db9c3194418bf91ebb30c4f87659d1de36706b57349a38d85e584456071d2d84
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.gz) = fef4dbb06bdf1299ffd2719ef5c147f51704ae0d
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.gz) = 142bf1b95c4e72d91063e29379b858a5
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.srec.gz) = 4a12c83305d58e03cd8c49f05cc6b32660939700
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.srec.gz) = c7e132403f37ca9514a8bcd8c8a94de04fb63a2319b1510db5ce9f14d60ff45778228e4c6d9ca5b042bd16ea26396e035a31f948908bbff152a7bf9529b3854a
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.srec.gz) = 306ccfdb478dae1136303199e84f54f1e65a63f9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.srec.gz) = 4805ccd3adcb1ff438b7c4d900416284
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.bin.gz) = f3f8c21960efb2c67418c29fef978e98b472a813
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.bin.gz) = 7b37f0c129e92372d4f170ab4106c2bcbdce9628c03a22ee1a265ee73263e78e3befbb712ea1f241b2e2b0e0b54bca3a9b3f7628927a18ee28551e867e526bf0
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.bin.gz) = 237204cf97f62dbb37ec28d9a12158f3d7ec01ef
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.bin.gz) = ed5f31fe08e40a01da35e68a8ce24da5
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.gz) = 2aee3ee787581f73d3e667aaa72e5211a316db75
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.gz) = 6a131f56fb801174037294c32a30244a500fa4bcacfccc65b2e1904b63450cd0ef0656dfadb4eaf1db651b8378070b97a93ab2df053641324c345766b4b043ae
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.gz) = f4a9d9ec37f3a9bb98055681735399a914673fb4
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.gz) = 25bbb323800e83e721976fcf4b5d42c1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.srec.gz) = 766410442e0892a471e2dd4420209f6974ef16ca
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.srec.gz) = ce977a4a9c87431fc57805ee22efe908bb79a344c6a1d2f3c75b974db3b54626908fd25e524a4ed3f55327877c97f78e9496515fd6c4677fd98b3c273ccf1c2e
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.srec.gz) = 093855469bff467f4744c3bf678d55d9eb08b951
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.srec.gz) = fead543e57b7c2f2a458d451b6c59f08
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.bin.gz) = 257ee7c14d678bfbe2511fbd47d72f6c8c461752
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.bin.gz) = db6a78dd47b3298d8f66fedb46e00b6c269e3ea389aa276480c947f606690002c95e7cc2306fe7f243117da3894ca7f7ce9b3bbc12e2cbed4d17b0ece02dddec
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.bin.gz) = 542ae9874a3223e014f50d542c9a677d0a0efdf1
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.bin.gz) = a70cbdb6278eab864d1bf3b288c3392b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.srec.gz) = 697561a2e82361d2d92775821ea4cd03e163c217
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.srec.gz) = c1959211704f091e865ee26560496424974c0dc3ad3085df21fe51b21c95a56d7f024f833728f9748b02f4ef409a24454ae731d071764921b0fe57df38a3ed3d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.srec.gz) = 7d95cff40a30f44d91013c8bf2e13a540470e5cd
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.srec.gz) = 7cb2d5067df40372c016211fee729a1c
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.bin.gz) = dc0f06b24ab21f8188a4e3f0321246acf541854c
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.bin.gz) = 13a84014dbb366e32bd715279e46c67a00f09cd40eacdc0fa91cd0e8a7e3e4862110161ca56be8024d3a0cd14f2a17c539111b366e91a27c65c5c47a741dc4e2
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.bin.gz) = 79967e4ee6c3b5038007f8deb9b6ec9172bcd4dd
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.bin.gz) = c5caa593ac363dd9dbf8f44de4c06099
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.gz) = 6f5c0d944bdcf0b3dfa76f60e6b5035dedc94c00
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.gz) = cd56585b5fd7a8d4c15453966942d48c538004a142daf8b0f30d26637e82e0483dba20680a303bd561341b0c35aa4a537f6a24764bd96ca8102fb018d57b22c4
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.gz) = f0c30e5955068a64ce24eb6d96793fd4cabebba5
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.gz) = de797d7956e6fd360b2f4028d05e7608
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.srec.gz) = 0689f7b9a0ff0140a28fdcce4d8cd206d566c680
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.srec.gz) = eafe6cf5e618cf43054145f925f154d99acaffc7eff8d4be2bb801de61c27193debb983412b45c4b14b5dc834633452f89c170a895078ccd31f00a5a0685661e
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.srec.gz) = b07d921cd736ac79d88e8f0e041db636c198faad
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.srec.gz) = 146f7101d810d5b401dc3b320a2f89bc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.bin.gz) = 393c30bf2cdc7bd75e749dd8b2537bd77dc91a65
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.bin.gz) = 44d1609a6be448f0df6d7f733a9fa544fdc673da11e0b64b66174a9889b4bd6c069c69a312853954c0c631eb036f37ce56beac486e347e600be01de6c9c3a73d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.bin.gz) = b7b4482aa76347a87722d9eb34662af96fe94e00
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.bin.gz) = 6bc478629045ffcd392adc0f5c9d133a
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.gz) = 1ae50b9a6c3554474481cfe3c37dc88bc29cc436
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.gz) = c1827ec89039136799b21418e0df33992f4ee4c166c130c34865f22cab0601fde056078892a76075714bb3ff09dd1edc54f33464c0dd8854f303398b6357b09d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.gz) = 823391035b738182fdee19bfc807eb2f09573f1d
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.gz) = 46159d039abfeb7e9dc00177ba1f9271
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.bin.gz) = c7bb680f57a438d65351ba2e665b0c98b979fb80
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.bin.gz) = c8cc5ec9d35ef1c8bb0db010e358f331335fc69db09f67110a92eea46eb275950f2ea5cb4e9f88ea2ed80561a5e31d88ae6f76e5582c448f3df265dc6141be9a
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.bin.gz) = cfa0506e9de7a97955bf05bb9d89275ae65bd77e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.bin.gz) = ed0673b11f604500c60263dd3dca3991
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.gz) = 6a22b3a0b0baeb17201a15a1e46b6a1bc22345f5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.gz) = 1a44e1fc731b0099fc726ba2362c5967f0073ada7d036656d5f60df865217349b5304bf05c7699662f582ac2519f2db64ee774bfe58c1780824ad04c8ddc8390
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.gz) = e5872e39e97e9a9e1d72da6d35d5a8013e168b59
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.gz) = 2d76c6a78af5dbc9a1e5200819e53511
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.bin.gz) = 298b05e33ef85a4b937c2a5e84a48022e388d0f7
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.bin.gz) = 3d709cc48eee7fad9cd986542430e23a4b81c84e549d2f0f9210df57a38a9d36eb3abe1bc2ccf2c66d9ec84575bdc9c1b55981f3686de5ff857b55f86d9ab661
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.bin.gz) = c2d4ab46b1b90b55bc40c74d31f287487f781142
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.bin.gz) = 91e2b298632e8fa0ebebad32ef0df715
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.gz) = a63011e3f96507e9585442178de4c0e41338cf87
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.gz) = 76b99b424e4f8cc4f47b0ba7ed8b4679a5d49ea3a022a84d2cd74be396bc497f481fb3fa16e23deac876d5dcbfc9a29f745bb1672d2844fce15252db989c7677
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.gz) = 8cddff412a5b879ce5b17a5a22b09603ae9f9324
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.gz) = 85c7096f583e4f9f3841d7f663de4999
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.srec.gz) = 83cec666fdaa7fd2d5fb6de32461615839932cc6
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.srec.gz) = ec118ec8fba3c15ba1b6725a1b9778d14c4b4fc6f624d7979c281d6195271df3bbcc6668eaf0bb25b6089243c5d7b05e43ca6247e3d72a548abfff0f31f14f10
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.srec.gz) = 6741604d5336591c02e6a9fce7cd093f7e0703fb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.srec.gz) = e98cf8ea7ce8704d98880ca519bde38f
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.bin.gz) = faaa399c0796bde9609425f73ebf4b7436516a09
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.bin.gz) = c61821bf159dca3ef32e69aff1f935a9de0228e5e0568afc74dfaa5e91902fdb0b13589e70af2871b3c7afbe2cc3777be64e9bf52798534addd6338ef6fb2095
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.bin.gz) = 081460e1657d3f542615c9b63d2bd8638d4f64bb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.bin.gz) = f79d3833d46191e99e7617029c981cf8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.gz) = e56e0fbbbe556a6741af58398b3d7d116f3ce469
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.gz) = ebdbee8f4ffed5e2ffbb7890a8e693299e441aa70aa5a7249f1b468373970bc29d2284d82bf638cbbc258ee8b500ba5b3244b83fedcff1e1465218d9fc76575c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.gz) = 881461289bc9ee95132cd5997c19c3838aaa6c39
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.gz) = c5d42e48168ba69e065be3f44d2e2e09
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.srec.gz) = 1fb817599a91b10187301c3f2333dc6484451556
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.srec.gz) = 19f6d85d50d1fdd5fbabe1f60b67992acaa80e0afa44ab7d94f31e095592b7852f2c8f42227bd9d90de9698211085a69aa86d4076100711f96e59bd446317164
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.srec.gz) = bd13c2dec6d22ca3e1d245159b0e765ff03301bb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.srec.gz) = 916df9db9485676f33a5bfd017e4cd2a
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.bin.gz) = 2c81eb3878a53e36a554b1f4e91c5011ce4ba507
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.bin.gz) = 2aa85113e7bf69371c8027929857e4c35623f07a16db83bf1cd3824053776e0daf33ab8ddd2e954b938fc33424ea044101c6f9c6bd500a32b030f28ffe40049e
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.bin.gz) = 1e1187fd6a831f7e9dfc546280681b924c03b36e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.bin.gz) = a767b383bfbe980c1da78e744144dbd3
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.gz) = e60bf72e33a1948bfdf1d84a209b1ab6e4ec6522
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.gz) = 9459f4a7532ac2d2890c538a3325c217d1ba468db8e8d4c7d2fae8e7a4ba256e0b0453e5757e1e2ecfffa5f1382d843289279d471562911d56215f2f3ee73eac
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.gz) = 95de4a223120d3c34a7862edb781345652904ffc
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.gz) = b7113d5899d418131a2d376711e32379
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.srec.gz) = cc193aac830dabd4793f1fb6722cadc6fed0bdd4
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.srec.gz) = 05a81920bb52518267ce4046aa79824a763dca9643146646bc6746d16dab1854140d28dabb5f7ba1ce9cfa1cea3a2e9d76df3bdcf227da89ea883011c464a579
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.srec.gz) = d458f2b8a4afddecde3bad093576b0b6a17b2f3f
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.srec.gz) = 9d205882f4befbe25707f009910f95b2
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.bin.gz) = 78884cf87f77551ec0e47bf3d629b41ca5a4420e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.bin.gz) = 094252727a03ca3dce207c5c92959ba21a888bddf502d5a9ee9709bfbdf9eba5d60dae5793ca6ab5dacf720d475499710d70b36622b97c1449badc5ba85e82e1
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.bin.gz) = 4d7b190601413c8c89ed39d8dee44abbd388d8ad
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.bin.gz) = 6aed071b41867489457065cc3bddb0bb
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.gz) = 771add734839295eaeb51bb341d43cdeb64733b9
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.gz) = 1ad26279054ef65ab4c4c37ed2443087a04d530641cd005b7d02dba395bad6770270b6f4e5d9ee522fde9ffcf3e4842e704b4fac2896eff2e73db39cd4c7e96d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.gz) = 578a063f106ea04a6e8133cfa3c0eb94b0decac3
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.gz) = bc6fd4df95278bf2e327a3b85a5528eb
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.srec.gz) = 1b77033ac9b0bba5b829868fc3a826cc2b8bfc3e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.srec.gz) = f14f41fd0600a3502383ffcedc902975372ee3ac03ff8e5ff156e93230eb8572798b00a6049a1cbe6c09d53002a07d6242064068b030a8e588355c0c67508e4c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.srec.gz) = 5360066de4b445f57064f767cd41c16d2104da1a
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.srec.gz) = c4197fe93de106e7b927570baa374dbc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.bin.gz) = 70a3d642aa8ea8d1a3e9df143a9e453aa1f6284b
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.bin.gz) = 391ac58855b9c24a8dbf8baaab4e9b4efd956eddf343a0bdea8351e1469187798e36ea875d6f4d91b5ba2be0eba5b9b02f33a6eded8fe6d727d3703950d554d8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.bin.gz) = 7f860a8346d99c80a3cd48694244040d976283ef
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.bin.gz) = 379072e809792e50b4015b9577360574
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.gz) = 0616f7ca1f3ef9c60e4c34aa459b40fb72277025
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.gz) = 8530ac25385210421ab23391925fee75ffd81e369c6b9773034e850519577ec69ba74493a22b08835ff847251ed16bbadc5e86c7956ae88c48e5bd2fff61417c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.gz) = 18dd6a88210d336fb61e3dcd0826fe50c8d13f94
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.gz) = 10be5c2ffaf39f29b3948473e78ea1a8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.bin.gz) = 3ca17c6882a1519488a77a45207f3ed8ea19fa23
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.bin.gz) = bd41dc8a2e268be47c2900ee5564bbbcd2ad6635f7ab99ff059efb71c27c277cb9da8ebfc34eff5d17839f345867ab9d478d0d027e7980fff4fc3e7494b1ad4b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.bin.gz) = daeda9ae3e3cbbf3f5a7a7c6381d13a30070ccaa
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.bin.gz) = 6eccdeef46d96a5ed0267484262bdee2
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.gz) = 219f483fe3afb49cdefa8b1865cbbc69730090de
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.gz) = 937fb99f921b629c1fbecbd60a4de24fe1c55ea70211b03ac15d2b20ae925122a6e3d3b43e34cc8ca6fa9b1d8a1f500ef29ea55f72b1a80a8f52ad43ed6fe1e1
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.gz) = 437b6861a5f1288ea6553790feb1de02293ed3b4
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.gz) = 4d05c9e5325526185f0db4a6a11edc92
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.bin.gz) = a2d678ea1b57438872bb33f8e3f5ab311680ba55
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.bin.gz) = adc42e2e13bdef6fc24f27cc4cff4363e0287350ba2afd7681e8f3f027865cd7f58e3e5d4fe59131870b34e8e6a8721a935adfb4930957525a24c02cd4c2ceb3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.bin.gz) = bc32af49bdcc8ae9226c97ae03f4306efb1b646e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.bin.gz) = 344ed7e1145103dd1f747176fa09a993
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.gz) = 98a9af8c3b74a45940b587383545587a300274cf
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.gz) = ef6b06092f0a9ada2774b3b172ed405d82f9fb3ea0c3c53c7da7d493f9c4fdd92124970af972342e3134852d9575a80c05f0ab22fcff70b52dfa4007b31c5a10
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.gz) = 1558754fb8015e4564b65823fa61d74e7ee2758f
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.gz) = 4c2d594388f5d5ada250a5e9137a2dd1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.bin.gz) = 655147b472960f9a2f0addaec681344d62344d52
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.bin.gz) = 91448fa3831d263781cc4a54b9103ef3fe99f7f71d1b4d5f25ffdc049ad34e9ab84fd38e7703ec55f1875278dc94e808b984b6d6610a0a310b9cb633205a864b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.bin.gz) = d985973ac1155c6506fd2dc36208da2c89c1c010
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.bin.gz) = def424287a7d6e0c9dc9878cb6af8d9b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.gz) = ecd70279e4ba36c40e8aa14b9d2705942e48e0de
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.gz) = 1f4fad54a9a843e66fca15c0ab3de33388b5c94006a051eea03cb3078fce4a671aae802eeb94b410a47b4ea291c7bdac0100359fdd5405fdcc2b0d8db3aad9df
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.gz) = 16f2789c94f147c86ee94427a2bb0cee353d91bf
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.gz) = 9df82b31b91bceb714ebd8a7036eec8f
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.gz) = 7f65f7ce1167b8b0bea66a821a28f8a328f960bc
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.gz) = 7d98ecd33f11bfcdc1e89d02df391b5c7fb4d66bd66af2713913b9ad8a6de264fb18f64020f009e21f7fe7fadf6cfeadcf72b195be731c5365745d2119a22c08
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.gz) = d84424851ce6a0cefd0881650870f5c902a50e37
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.gz) = 2b7ec0cac876ff4758fdb4cfe7e32d7d
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.bin.gz) = 92236b446b36023cd70765c10fa61fbe3bd2414f
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.bin.gz) = 2882f6b905d11bd0019d4657586412e93c566abf48d10702af36ccac9f688886fbad3d8ef62c3342bb7ddbfaf72f2cf7510d6635f9388187bd7932c814aea288
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.bin.gz) = 7bb29d6cd1f68788fdf3a98d198ca7d98e264c7b
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.bin.gz) = a1d749d80636959956efface64861885
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.bin.gz) = b3937345ad5103a5331f8f3d9217f6c73b7a2e28
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.bin.gz) = 1ddce72f72e631cd8af38d326ff826ac52005cda9974dcf87c33370adf04f90e7a9025177948ef2ddf2f78e259c535bdd5ce2d9da2541f4ca4cc8d57a927afa6
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.bin.gz) = adeb55b34d1468ac0fa1ac03ddeb6d86749a4994
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.bin.gz) = c10dbd3dd8b711e0e431146585d862c8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.gz) = cf1dad35f06a51619d75518386fb7f0f60330734
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.gz) = 085729350310674f285fe2ca0fb41f63701eb1f8f38da50329483d2dd1e4644a84c20815f94cecadf686d925a808eac57a986338aac762e4fe9080b2ad5adf99
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.gz) = c51e997b08e72d5e9a1a4953dfca874d4d86d4f6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.gz) = aa4e8b576991e29425d66131a6737800
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.srec.gz) = 6823aedd0b5469af8bdc05b9fde2fa1bd5133e48
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.srec.gz) = 1b372e4d5cc54171ae399d5d55558e8cc99234c08172c7cd2c83185ec2de4a326aac04a800a050be1d1ef42b60dcc4b20ae25b5fd1f08f707a09926268207031
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.srec.gz) = e072eb111fb0bb71c30fc8ad457e1d2711591887
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.srec.gz) = db7f9d23f27d533266eda56715e2adfc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.bin.gz) = fd211bf40ed4f68e9f05bb5f6da85eeeb92e35d3
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.bin.gz) = 1f8dcdc7f7d06a42111745ac2754644cc5796552417f7a0a6d80fb4a7ffa667c6ab577e76f84e2f497d367b244f578b5a1c1d882c558929b12470d02026a3b3b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.bin.gz) = e853cff382e03161c0354f83f100c67779ecc7bb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.bin.gz) = 75e9772c889f60ae2baf766aff24f997
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.gz) = 03973311d8dc84c5522524968506a70f3e69e93d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.gz) = 0582b69eaa266f9874ad02fb21fb7e70fbebe3952d8d2826bc6d58f23cd4d043ff3971775ecd1a12b0a828ff7266677f40c495bf394a2f33c41d372fa1ef7668
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.gz) = 8e8b7d0e5619ca58a50f6ad1f15b2764f9a3570b
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.gz) = ccfc004433b54dc119d556d198e611d6
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.srec.gz) = 72b16c8dea4c9391cb9282e2c1f91e3ba30d9522
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.srec.gz) = 94d123f6a62639d3849b60441d19e49359a922881b8818c11a41cf43ffaccea3e30b5a001e6b96ffea0f6863ca5ed6465d4ae6ea9ec6e91f95c9e498deb44105
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.srec.gz) = 4c94b472797fe5fdfc6bfc8427abe598f7ffbe21
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.srec.gz) = 3c722e71ccd200b5d113f3d5d3b177d0
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.bin.gz) = fc8ab0bc9eb0d8956ade1baa5651d278852ee08a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.bin.gz) = 00c22223dd564fb484a1a477efca1a4af97bd910a88b722cd3ef05a55f4c56dc90ca0eebb6563ef73106bbe1e3ff1e9c2f51e14ac1ad5277035a1beed8250651
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.bin.gz) = 081ee767155378a6cefb29064e13c46e4de45508
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.bin.gz) = 7c1846c7207b9760e716581a07a5d366
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.gz) = 72d1968438f4d0b4c063d5b85009669416b39892
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.gz) = cfccacff88e457bf30f0336db8882c63e03fa8ac8eb7d2ae87b7a6bd0eb36b5708eaa512aba0df46ebcd0a89cd7732a0ccadeab0776a54eb4e61ed32bec40df8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.gz) = 3fdc54921cf7a3e81ae3be6854847d0026720467
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.gz) = 74ef3b97327e4591d8a3d6acb59c6c3e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.srec.gz) = 26020265778b152f20cd35c43dd0a8e8be644f74
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.srec.gz) = 672d1ca404b4dabe7791bbe1506b47e64445c047f92c3eac1810b8deb25e23e6a1e554acc88a307e4f85850df967e521f36c7ffb90da7325f7a3d76aba3494b8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.srec.gz) = 2e0466a32e150882f148c40d8096b53849a7bfc6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.srec.gz) = 9b35a2416410acc9d4fac08926ffa38c
-SHA1 (NetBSD-6.0/evbarm/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/evbarm/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/evbarm/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/evbarm/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/evbarm/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbarm/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbarm/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbarm/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbarm/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbarm/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbarm/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbarm/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xbase.tgz) = 875fd641f969ec00f854ca1334d084947450c740
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xbase.tgz) = 75d0c9e9685b6b7bb706df7427c8b52f59c4fc4d0e725b02ee18024f75a546dc41de5f1a5d8552a8d2c84bdf87856e5857b0f12914801ca7b36b69536d617b4e
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xbase.tgz) = 1a4d099d59b2bd882e99f1b2df1c7bf22b890d48
-MD5 (NetBSD-6.0/evbarm/binary/sets/xbase.tgz) = 5eb9c573c5a0c96701f268a3470a58b9
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/evbarm/binary/sets/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/evbarm/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/evbarm/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xserver.tgz) = 4ccfef1d49179603286042088bec0218c6b2031d
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xserver.tgz) = 809fc0a9065c1b9e7cd17aeb0d41cfd3158efd6c585556af01c4a3c93f0df3646a2ff77c6994449a703a408c0988fc1aa68cf34c7e297a3056d73ded57034c12
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xserver.tgz) = 403604404261764c74f10fab774c4653fd20cc9b
-MD5 (NetBSD-6.0/evbarm/binary/sets/xserver.tgz) = 914f909b6878cef16a92765a8cbb52ca
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-ADI_BRH.tgz) = d9cf46427b7ceed2cbe9e6bb2b62a5d461799474
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-ADI_BRH.tgz) = f2beff9ed4d712db8eb3bf1d9e8f60942e3fab2a834b73fed76ac79bd012fccbbb6698e04edd7ce7dba7802852386bdd2996dadc2c8a04a409fae303dace1104
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-ADI_BRH.tgz) = 443b7c69a5f5abeaa3dedd3b6213486af56eeaef
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-ADI_BRH.tgz) = 6e3e8b794a16eb8a079342ec0b1af212
-SHA1 (NetBSD-6.0/evbarm/binary/sets/base.tgz) = 74a00851a474a252991743274528e6272f50dd57
-SHA512 (NetBSD-6.0/evbarm/binary/sets/base.tgz) = 154a8230676785921f3d6819d25a2900fe860291ebc2e4891fe94b039871e1515199a4c0e6fe3bb5aba4f9ee802a977e985f87206a1688e4d7e0ad24e1069eee
-RMD160 (NetBSD-6.0/evbarm/binary/sets/base.tgz) = c6d3c3b83b8a2a56870929a9d616393e6d19e9fc
-MD5 (NetBSD-6.0/evbarm/binary/sets/base.tgz) = 2e26124352843379db4fcc7ab680ec5f
-SHA1 (NetBSD-6.0/evbarm/binary/sets/comp.tgz) = 4004f24b5f208575da97b542db46731015cb7573
-SHA512 (NetBSD-6.0/evbarm/binary/sets/comp.tgz) = a0950dab5cbb258ee2f29f2d35173e00a5cfd79ef30b27605782b9f22b8564e05d9633ca6886178c1b1b0cdd6a8112d3a9f663211804e554ac63ac691ff3f9f7
-RMD160 (NetBSD-6.0/evbarm/binary/sets/comp.tgz) = e8a618972f78271ba8a957f4f626b632d1b03ae1
-MD5 (NetBSD-6.0/evbarm/binary/sets/comp.tgz) = ae2425114d29b9fd2136342ce730baf0
-SHA1 (NetBSD-6.0/evbarm/binary/sets/etc.tgz) = e3f3386182b99812eb3fe35daec274b0da1aaa1c
-SHA512 (NetBSD-6.0/evbarm/binary/sets/etc.tgz) = 46337fca0954acb3b4e0e6af3b6ecd473002d2f482468ac98c62ee7ff7bd84d90ec9c2bb13d29c5ae608e625f3075471af1da22f8a4254d4e8efc9ab8dcff21d
-RMD160 (NetBSD-6.0/evbarm/binary/sets/etc.tgz) = 098b5563540c880d69e0ba9aa793ec9ba6f33a10
-MD5 (NetBSD-6.0/evbarm/binary/sets/etc.tgz) = d3f4709b5264a9a8bd820648330a9653
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-GUMSTIX.tgz) = 8a21525ca51f643747145c529add5e1de487f0fc
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-GUMSTIX.tgz) = f0f9d6e4d8f34b446e511db5a0df6b3d81b20334169caa79790cbbf34a8eaaae0f9da332559b3cb78a00fa05b807b9e3a118474146c69e75d1519c46420003c1
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-GUMSTIX.tgz) = 47002447a76cd76c4a2687923682dff473ec25dc
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-GUMSTIX.tgz) = 1ad356834d9467703647793950ccd9a5
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-CP3100.tgz) = 4baaacdf8b2ae99e945eabb70c425fd5952eca48
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-CP3100.tgz) = 467818af6caa1068437b691fdbc77e11617808fa44e2b3caf3634f7cc8bec1cca7f3a46325825d9427cbfd113eba01a8d3a4d78da832290ff40aa60964c4b42c
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-CP3100.tgz) = b2a46e69e6b4ce2264eb78a2151274796b224dba
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-CP3100.tgz) = 1528b53a9a8a622972ed1e6891535619
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-GEMINI.tgz) = 38ac63a06193c3ad7814b39a11d911da20db6ca4
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-GEMINI.tgz) = c05553408f0fde7a1a428faac350de7f969396f9e8caef6e83a269875743472e52435d6bcb1ad5531f9622c1289aebd419cdb02ad83c92d4797e1b4b952e7fdf
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-GEMINI.tgz) = 5f8d006417864f9609d691652fc03f37f1d12769
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-GEMINI.tgz) = 0767217ae126cf86a65cb17bdbeb884f
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-INTEGRATOR.tgz) = a18100b11fa96e4cd1eb1e36831f14c3d17da04c
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-INTEGRATOR.tgz) = d8bb0260e9e2b687bce84053cb3c88ef6ca3eaf12b79337746e62be94555233c8a1302dc104359b2aa6eb64eac8d633d0640d533688af4c4971a8ea095b96940
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-INTEGRATOR.tgz) = b8b57516a6d2c5e62d57dd9437fde58485989d09
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-INTEGRATOR.tgz) = 7f80ec30a784dddfe53492ecdf78646d
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-HDL_G.tgz) = 6e95c2e313c04d228a65da51f252791fd1476827
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-HDL_G.tgz) = 380861d0bafe812937f004ed00054b6fbcc1dc581fbddf3f745101ec39a57759dbc0a33f0f1e8429a9630febd7ae69e1fc88c75d39c196234260bda58641edd3
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-HDL_G.tgz) = 5262674ba10ad272c62440d4f61034dad9be072d
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-HDL_G.tgz) = 1af966fc2df6c623f4147d3cc648d22d
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-TEAMASA_NPWR.tgz) = 239e37769ab837541fc445e7a74a9bc02c74f0d3
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-TEAMASA_NPWR.tgz) = c3d61466da0066d0a61d1fa3052e54f10c19f2f20fe8342c64f0dc6365d95602e47c1e1722d242219e698c824cb4c6dd823b54915eb98f9c6af8a6119920fd6c
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-TEAMASA_NPWR.tgz) = a4be2875ed76751028c167d6a0c2efecdf3b79d3
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-TEAMASA_NPWR.tgz) = 72220c0d721aae18cf77bc235bb03cfb
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80310.tgz) = dda069ed4e7ad7df46bc23e51a6ef2013af45dc4
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80310.tgz) = 91bd0716398c20a01510a6fe340891d1712da51882e2019bcb7e5852c5b3ac706aa36cc0ebe3f1c1db4b4318624f767118b9ab549a38f253c477b4b25acb84fa
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80310.tgz) = bf180d150abaedea9aad9265bb4965197a587490
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80310.tgz) = c00c7a69803c130c2f7d34fb3d91610e
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80321.tgz) = 2d3162d5072ec3659964ff812b3595ff82830fbb
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80321.tgz) = 199bd6e9a8ee5547f4b589c2172400dc1d8204ff2c75ac021004aecc816f5840b04f3e8408e43d64722e829acf654069a161750b733af045648ab5647071a113
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80321.tgz) = 22d77cc3665909c23cbbd57dda56f412c683b75a
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80321.tgz) = 2bc4f1eb1a0355fdc0dc886c13c895ab
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-IXM1200.tgz) = eaedad32158dd867e95063f5bb56c66ac8a8f3c3
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-IXM1200.tgz) = a8c1730348c3b3aac15b11c2cb598f6a667b9528748e4361baa33ee7a899aadc43366cab3ac0d6a4305e605287952a8ba6db210f4a15fb3158bded3da4071a67
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-IXM1200.tgz) = 206d96f4304bb755159fb72884977e53bd608c34
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-IXM1200.tgz) = 2e6747257e639f5fe31d23d1834ee9c6
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-MINI2440.tgz) = bf2d80624e97f1964673908ef28ded8091568b21
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-MINI2440.tgz) = 1669f39e3caab537018880d4e93d6010860689f37e60f9d17ceb0a7209442053b1f461b683b6ba201dfd1f0c8641b8650d1561985e8fd47fb80aa3c71d2ee938
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-MINI2440.tgz) = be7274304c9c2bb18fe71bbeb9368719ca155cbb
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-MINI2440.tgz) = 1c1547b85d29dae79c76f4d7ee727b31
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-MV2120.tgz) = 363e695b0fd04709143647a1f07b22a8029c24b6
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-MV2120.tgz) = 99cbcf9b5969385787e852546f3e5685e721c7ff5fb2f898e4d9f29e2bb7640bd08e38cf38eba4cfbfc5d2c1ba3fabcc074328b5ec9bcd13faee233e9a5c10f5
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-MV2120.tgz) = 7dcee51999f376d080942e2f46cb936dc32385b9
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-MV2120.tgz) = 82c6e07c9bb44d8c06d4d4ef7228fc1f
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-RPI.tgz) = d01b81e07470d09296ca9e2e07eff84ef739865d
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-RPI.tgz) = df740174545dd2a34f6692b7a15b329c93bf1496b32b70270e339f91cbd6e9c980d92a4da0ea5a8e825eb39cf6b4514ade0d2c78846128ee424fba595e175748
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-RPI.tgz) = fb98d2b03e66057f4e002505e26af67d23da171b
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-RPI.tgz) = a07be9e2696fa18bae91363005cd09b0
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-SHEEVAPLUG.tgz) = 0f11f8084b40c9f41ef77dc6ae2ec257e819f5c4
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-SHEEVAPLUG.tgz) = 8444ff6b4f85c4a8569d51147c83583b37a1dee134c01bb1991666f02d1fd674d80899ac9d11dbe0457a6a1246028a2898444ef0070367edf66dcdde5118d6e8
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-SHEEVAPLUG.tgz) = 0f00bd92326287b2db8c825f6e7a93c34e8d7c63
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-SHEEVAPLUG.tgz) = 3221d316f1518d5bc0680bf7b1179a4f
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2410.tgz) = 93da07d5884e0c20544d001c5f9fb49893f5055f
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2410.tgz) = 69d65444df4a31c129ac2b2f216d6c0c27e84243f3c1870d0e7f133afe6c95e419f1e907b4a4f0ce05162be24ac149616da16d0f840700b39393bf090e1421f1
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2410.tgz) = 0e515ec91a4186de8cae2243fb079348e91acaab
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2410.tgz) = 6a86551a8997ef91ea427022568a658a
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2800.tgz) = 2cdcb47ec0f5173ef5b2dd3ba319dfe10dad37e9
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2800.tgz) = 106b6c4241c7d4d51f77f2dba13c4977fbf09e8c3b2c4762d9b4de224d04c94a94bd192b89bb3e10a5a52c27141518a0429d09fa39023c9bb59569de7bcc897b
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2800.tgz) = 84e4387b95d8731489c37d13bfd9eb68f323b19b
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2800.tgz) = 00ed7a1a639ecc17b6f627bc5e7b2862
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-TISDP2420.tgz) = 11e7dfd918fa822c19633b2c0d7139fe3e5b4cbc
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-TISDP2420.tgz) = f5e0b25240b828e657de6818580bfb5dd47c3d1da978a44f60cbd0fdd86ac824f09922f4ab8ac8af8eb63c32ceb726ce2835498f649828fdae867fca4991a412
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-TISDP2420.tgz) = defb0cc263198d9ab3f0fc3e2702d6a2405de15e
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-TISDP2420.tgz) = 00fd1b9a1cc66dc3eff9fe90f85aca6b
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-TS7200.tgz) = 6e0547db5e16621220bb45150a22b25123022be1
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-TS7200.tgz) = e507e5475501cf9b96d1a7f88d5fd8783f089c756a36c6975bdfa0a33ecec441d1c15c06b8387ad5a0cda0a7ce2e18ab731365f8efef4fe8d615da1dd8f8cf52
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-TS7200.tgz) = 9b9bc14c01328090ec8b855f30690202a2e3e639
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-TS7200.tgz) = 1086e9efedf641d90a2fdef271d69944
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-TWINTAIL.tgz) = 6587a6dbfe1479c459d670942e9abed58c2077b8
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-TWINTAIL.tgz) = 4f2978dada20c19a2b2a35dcee406fdbced5caad7c46b6c733c2c24b2952202d872f666d2ac139baf5b0ff98092a5509594eb8fb70627a25a268fdefa36f1162
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-TWINTAIL.tgz) = 49bee3aea5f5b88b79344836c779d428fcd0d19f
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-TWINTAIL.tgz) = c70d7c187e58dd8415522bce16bb12de
-SHA1 (NetBSD-6.0/evbarm/binary/sets/modules.tgz) = f9a8894103100366dbd4343aecc6452a35c2fae0
-SHA512 (NetBSD-6.0/evbarm/binary/sets/modules.tgz) = ac2fdf8cc9bff05a5f66749e4dd96a2f0ed4d143acd490e6f8b3826a9b9538918a8fec0045d40f6f418aab80372b23729410997fd81a05f9d9aad27c2dc3589a
-RMD160 (NetBSD-6.0/evbarm/binary/sets/modules.tgz) = 35204da96f307f853b28c487b0b78c478cbe99c6
-MD5 (NetBSD-6.0/evbarm/binary/sets/modules.tgz) = b6886a6197725ed21d53bae4a089fc1d
-SHA1 (NetBSD-6.0/evbarm/binary/sets/tests.tgz) = 971ffc9e0521617dc678b9e9923371af2e9fca64
-SHA512 (NetBSD-6.0/evbarm/binary/sets/tests.tgz) = 55013634b7d0e607d847ef69ea6a72b7f939830caf8e08dc55c78b04a27897490210377bf1c5b1216778d4ffca44145a0fabddd8ffc449acc93f40877a71daea
-RMD160 (NetBSD-6.0/evbarm/binary/sets/tests.tgz) = c9be008f99e4d72d0260139d3ece0db37454d842
-MD5 (NetBSD-6.0/evbarm/binary/sets/tests.tgz) = e1bbc8e25aabbda881eb290efc4b25e2
-SHA1 (NetBSD-6.0/evbarm/binary/sets/text.tgz) = 08a253fdb7a0118ada516bcfd1293100728240c8
-SHA512 (NetBSD-6.0/evbarm/binary/sets/text.tgz) = 41eb29b2f82b18d916d1fa2e858d45fff23f613120c53256c7f7f3dcf7e31ddede9f954a143d9d8c3ec95cd967f46861a1385382634028d61eb0883bebb294b2
-RMD160 (NetBSD-6.0/evbarm/binary/sets/text.tgz) = b2cd2ecb39f44039e90a2465047b5510d0de2eb2
-MD5 (NetBSD-6.0/evbarm/binary/sets/text.tgz) = b5a8566f96d102342467dde0a2ffeeb7
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.symbols.gz) = ea2b03a807cb44578f36e3f34d58a0435434f421
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.symbols.gz) = f8d97b757b0d0d82f5e4ff14afa6abd1d41ed35e3c97684ade36a0dbb277cfcb55a6f9ef656b1983507247b07f164ecb407d0973d57d1533b2a1e1364ccd51ce
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.symbols.gz) = 33c2edc444787b5477a459d6426d80ec2ac8c9c1
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.symbols.gz) = b06f95b94e9fc3ff03d7c02485d9226e
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.bin.gz) = 72839e1353d343d2ba5e449273aea745a980cb50
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.bin.gz) = 9f8019273ef9b3f46a70e6faa97a580e6ae1d0d820974de24033c55a729fff2d2780d5096964673f97e26b3af86835c5087fd0b09a345e15c29403bc1f467c3d
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.bin.gz) = 81b228fe339897de8d47c2cf5555c39eb891193a
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.bin.gz) = 662f1773c969157b42f70b72bd72c9f8
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.gz) = 257f98f33f8429d27486ea526b045f31cc4b9ab0
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.gz) = b2b2aff23b6be4c84ef07f1c3ac698f9554a13a54c8fd49ee12b0e175d09da2f116799260083e6a87a8b4e761a4a66ad8d3f02fb6fcec9f3f4b928271cea12a2
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.gz) = 0f5a2cdc5951921440a7147912e722a481c1360d
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.gz) = 117ff4be0dd35bb5cfaff3414c27a3f1
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.srec.gz) = 1fa80c74c4b2f44a9db4f1d5e0be62a7fd6f68e3
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.srec.gz) = 9d291a02fc808baaa9ffe3b259239d64758aa394b6fd782b4220ab47eec1106a33e9972d06ac07fbc1632923b12a9dee9574bfacf5a2dcc096490aedebaa7309
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.srec.gz) = cf28c82c673429f391bcfc37493f07489ab8e260
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.srec.gz) = 6a743321a49a841146309dd71a2b7782
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.symbols.gz) = 1d15f8fd20b400aac41fda396b615742593f14c2
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.symbols.gz) = 8a2ef21088d568841b740d0c316f513a98ac3f45f1c0d994dc199b4e2529836da832b8409368295b4b326de2f4defdef34f1829e3e4fb7217b39c858ab0eb09b
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.symbols.gz) = 2202821e57d5506b266456b70f18ff6a1506487e
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.symbols.gz) = 026ab51e016618bcc9f1f1bf363492ce
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.bin.gz) = feeb79b4d6334a0f6a87ca2c63d195e7039caae7
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.bin.gz) = f76735623ac3295690df2eabeefeb39c8cd3e5d85fd09833f9e58b8aa1bbec65f462e8a1edd683a75e5ac2188a50e3ef9f574b00dcbe6f7ffb0c02c4aaaafe26
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.bin.gz) = 5344ba62b8815bff63195fb12c5804194c5b74f7
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.bin.gz) = 1bf8ae796a35caa01e0332fb0c193e2c
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.gz) = d1d88ea80333147d4b73f6c20d5f0cf9af362acf
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.gz) = e525b3d43fe6ff0d7ffe83e546b80cdc1892140e3dad8cc409312a544f9ea111869e085fdfb736a1dde3d029d39e84443f06f0175d28a5b21a1a2967c82d904b
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.gz) = bae57fad021b76fc1a9e9c796b9b6df84b3a8814
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.gz) = eb56d7e3dbbfffd56cdd5b995690e1d8
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.srec.gz) = b0b4f43f1f4f8bcd5ca1a9a0d2877fdce3397998
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.srec.gz) = 50c8e9381dfff94d56c7330b217ab079fd3daaa77935dea557d321eca5e5ca59866e59b59b9ac498b0b4a71410dd776c8068f9ee2ee3ed646a39029ba1d6e9da
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.srec.gz) = 9c88faf5c7de521d9fa0be09a4d9b3b9206a2dcf
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.srec.gz) = 558c67513391c3825047d26f08d48997
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.bin.gz) = 7e8c3f055b239755fecc8aa462e54b8b89a9e8c9
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.bin.gz) = 6977a4d96f1b1cb16ccfe4b15678b40b6627b01385fe6961487817f7ebf84d470277fad37c53ea7bb48e7c19e7b37dd8be3152a6e0274e6f8d6bee69bbb7feab
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.bin.gz) = 28fee55b727cc25187df3981d6fbe2bfa64b9e4c
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.bin.gz) = ecb5118258da0bdb24ec8ab9ac6faa0c
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.gz) = 0af690fd4f7fa383ddca7ee5f63bdc698d6ec5a3
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.gz) = 7be43506576a17872997db65441e436b51f1fe3bcc9c42eeea4fd19809f8d3f61d2cb9027ad6cc7e2a26fa3261482b9ff1b7e00878b5bc18ba4e7130919e8dc9
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.gz) = 46c65905cec0fc54bacb408d57af312598bf8502
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.gz) = 28ef106d2bffe72fe879c19ef7f25741
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.srec.gz) = f3646a6435283a79f0580692798694d31d8b672b
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.srec.gz) = 4b85ad5c44a4076715d43f51aa94e33ddf7f1e6645c7dbbd490ec8d8b305766f3e6a6facdc5c87a20be3865a827e531810e288eeab2184155d83cbc062a0e14a
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.srec.gz) = 7f87fafe296706dae3a75441b4f6fe26f52cace7
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.srec.gz) = b81ffbbeb626dde373c9c54e4cb15b03
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.symbols.gz) = 0ac81f8038480354e6fafbfba5da86ab333f85e7
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.symbols.gz) = 116b9be7c9e3135d1d1847e084a10e5bb2dc2a95b4810a2e268fee9e6e5b3a5f157b2f34b94a2e03256d959b2bb10d01760347398dc81bda5d6ce64aeac1c2a1
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.symbols.gz) = 4cd6b326352d9398035a2c7eb157c34604da6709
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.symbols.gz) = 938ba4475e1668e7fa02cd727e237339
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.symbols.gz) = 9634080097f581271b2e0aa1bc2f87b10c7c57f1
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.symbols.gz) = fb85279a670488e7e8b83c91188bf075363ab8278335c1d3a06411effe829cd8a47cfd269aed5e9a598414fbeb56165eb0ad27550f6f6838d2c9ae9847525e99
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.symbols.gz) = 81c648d753322e87068041c7bdc30dea925ec2ce
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.symbols.gz) = e4b9a0b3e230fb2cb6a6e2ad3162b1f7
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.bin.gz) = 5c60fde2ead5db357827530b6b899e3236fbf814
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.bin.gz) = 953fda76c9d47d8af51e578049e98a5f169cf141a057ff1933bccec43ce89b419182f533fd105462af3c09a0a843e8e766f96d2ebcce4cf404166d80ab6b1f08
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.bin.gz) = 34e148a900e77f07aa63f0fbbf181bcbc79e2026
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.bin.gz) = 60aed2122f98e633e78e0f19a3724881
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.gz) = d94e8dcfc14fd6928b3d2c784cb38f0f55b009c3
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.gz) = 9ef172a0aabcffae7abe5312415da7d407975905484f69ffe73dda2389f0230a39ab2d03e9ca42005db662ca2f6060a4a6ed0db4b5cbf23676a35af38d23a416
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.gz) = bd13d39ee7366ba6ab2a1ee1b6094322a5b894fa
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.gz) = 9c16afcb3ce11d9923247d310c23875b
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.srec.gz) = 380390e6eba24b258a8eed603561f05e2a1cdfd6
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.srec.gz) = 519683b9ee12d3dcce26182bd8a46c27d9f6285debe96df2b88d46d0eff372deb2342a1823216da2dd0c28f90732858e7e8a4d9d6305d5e0b82b5345dce92112
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.srec.gz) = ad5c85bb6d641596e2b0ae7dbdb6f235b758546f
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.srec.gz) = e2612b861cab60aa64008ab686f570bd
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.symbols.gz) = 91f9c530da00c48d4b22b7fd98916ba4528f77a8
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.symbols.gz) = cefcbae785c5fb72ef5548c16a8ae083a5be19fd27f386c1eaa723c7cd296dbf4c4e774150bf3017a5ae52eecff0aef125f7ebce87f73fd930a019759e0ce7a8
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.symbols.gz) = e91be60bcee907ee6259c16e54ce1e3e79f7937b
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.symbols.gz) = 088c9eeabf75406c634a15511972829e
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.bin.gz) = 3fb32f0f8c981cf7d0012870d9c5019f06b844b9
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.bin.gz) = 7b7ecc024c36ffe8d57ffb7f53f25e9a3aaa203605ef955c3d94b47627bdf63cb0ac49a8ab230f5f7d5c07c4a56aca94787e861b381af4c84acf48c8b6040b4e
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.bin.gz) = f0faa1b8b1d48e6c736959211a1581221e92de24
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.bin.gz) = 66e3c14d2f927cd248e0b07882892fdf
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.gz) = 90ef61bc7a306fae7f41e20a6c615e37b7d51bb1
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.gz) = 98bcba4e6a5ea6260f42e44b78010bf5b02475a12c198c5898a6e4342bdbfb0207a5b7ee17ebb7cda0859057abe0e5442a41e7fed2c9b78b566e67c7897c21c1
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.gz) = a0fb23b82b04fcd0817a38d5b1b2da620bf23ccf
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.gz) = 546a0231797a48e08fcba615fbb5dc5c
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.srec.gz) = d234b22bf784c64b812dcf9afeba9f106c969e08
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.srec.gz) = f7f78ffeb87a42943c8271cc0bb7d9a3805569fe0cc75f62359ea827cd44ae48f425bdecae341f1a947a10f35df32ce12155105f333b97c765d48db2b1f4c0f7
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.srec.gz) = 218875a0a61876726f5790366ba2748acaf63996
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.srec.gz) = 63e3b095ce7b3512ab0fcdc562cff952
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.bin.gz) = 9b24a0420c1b2b406fd2b6d8fc7f25a3dca984ca
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.bin.gz) = 5a46d91f646c354c5bf39ae4c15cf45b2ea205328f859a3006bfef815a40b71109b748e6efe91b85ce692663db36c2b6f08e6a43b4ee843c5d1dbb2eb095a7ac
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.bin.gz) = 4a6cb6eb7612c34d1b3c68ab7cb56fe32e45b7f4
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.bin.gz) = 86823cc4ac5a09992501014bf88c877b
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.gz) = a4c5e90d5a9fc6c4b127fd2ba479b27228b64f98
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.gz) = 98f9d8a9bb4c6b29be7002dc4aba375b89a7e98d23fe77634c26efcf4bfec3bec46917718f4c245a9ad8a480db0205224bf0946962ad5b748e04f2b170645344
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.gz) = c9756d9b19051c3f34a748eeca4fc283784f205c
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.gz) = edc01ffccbf9a6db1d1b40878927b492
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.srec.gz) = 1d2d7369ea182d3cbe36b6cf0929bd26e48e7799
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.srec.gz) = 2164f0f36fbdf41d2fb37ca8a19beffcfdbcfee8a5629350e28a94a105e9b9707fa44b99cf122c102e073084d09905a75a69a8da2f263882e89e9192d66c232b
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.srec.gz) = 91147de829c8e594800eb713e55330fb2160c062
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.srec.gz) = 1ac108b4534ab6529420b5e6eb4596ee
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.symbols.gz) = a594571814d5fd54f060a324f961c8728207414c
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.symbols.gz) = 6a55dbba559e4675123270036ef2b05d877463c0101628e50d6f84d12035784a76e010e469840b46cf56291e5d27fa5569457cf83fe7d5a5f128ef6777d4b0fa
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.symbols.gz) = 54553929ec55ca2d3e1a34163f79019ce8d21f68
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.symbols.gz) = 796f55a92c0f4a29a920251d51a90d9d
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.bin.gz) = 8667913b1247f23e940f945fc1d3c6d7b42e3bc1
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.bin.gz) = 30df01772cc961320c0600225caad50145a9f84b9fa5689ed61c59b136c4489e4f6ce3f1075e53c46335f955ed2dd94e662ba2674c56a0171f33e3ace70af2c8
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.bin.gz) = b6c98b6c38bfb10e36bf119c49749cd5c6be20b0
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.bin.gz) = 9a3b14a1e64592301beaa6c7581e5f3f
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.gz) = e619f80715bb394b1fe67cc05f45cf0e076fc3d5
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.gz) = b131081790eb4e2a82ac2cbd9726b8239f8ec91e25567606411bbcb4c9cb0676f8f15d1daca89623e29d6045fb4e6b6edc40ec7bff4d0646cd06313c8a827672
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.gz) = f791654aa8cf1ee8d9d71aef03ac0f904345465f
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.gz) = 42b4d81e7d76bf98705e97927f1a6fed
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.srec.gz) = 418c6e4fdae62a9dffc0cc52300b3308d4c39726
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.srec.gz) = c6025b5ca7555b4870026cf2a9b23a000bf3f3bdac4a20347593f431062ccfa8b43c29dd1caf17f95787ef685066509e409164c302fcbb40cc18307fec372442
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.srec.gz) = fcaa8176ac524a456a5e75dfcffadbeafc133187
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.srec.gz) = 0674c1b44f421bd847dddac9e87e1221
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.symbols.gz) = 579e6ecfc351e91ba0bcf36918bd3fb781b7c1e7
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.symbols.gz) = 34074f57b8eeca79deb3f2a070ea824be2fddae7e8b5a2d8bedab2b4dd4796f2eb1baab06cdf95b53da4b43cbd8e8fa873dc0986325282dea9902ffe9fe521da
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.symbols.gz) = 139e713201e03fa17e31803834d898d1ef636bb6
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.symbols.gz) = d08f0319e5ccb9d142f20f81a1a4d0f9
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.bin.gz) = eb490e7ec36f92c871934f2cd7c1fcb2339ad2a7
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.bin.gz) = 7be26fc8e01142f873d0e2ca89a414bb4d2dd332dabfec1f7cd126ba2eaf0d803abde4f62c627b583fe2a57b93bd1669fc669666185ce1d5cdbeb47b88690ca6
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.bin.gz) = a93d35c0251e92ac7562cc6138419fefb6fca84b
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.bin.gz) = dc54e455b762156bdfd6a0fb2d14fe2f
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.gz) = 2567dce09ac1764f78ec074e4f5644a87ac83c8c
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.gz) = 6beb220906314c4ac93a058a4994104ec2dccefcca4e8c2a0be6d3399536b4765e49294b275dacfe20e39c7cccd81b88c9521b2b273835001cc6b131237b20d2
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.gz) = bc87bf5b540e6847689016b2301ad48aa637a3eb
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.gz) = c96abcd45f88d52e5826c9419e895e49
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.srec.gz) = 82575c4f3f6344ff9fcd848f30364fd1b65eed82
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.srec.gz) = f1c6e41724db95eefe005e2a4f3defa81b7d8319521ad2897fb976cc8fd31af9f9399bb0df03e8b910d72baf25384112efad9699a111c6a0ebc2e8d79dc63f72
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.srec.gz) = 82c356d5a3916d82b941cfca334f55586b30805b
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.srec.gz) = 16ff2a11bc97e2bddfa4ecda023be897
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.symbols.gz) = a8cf19b83ab6b0aa48e6486a2ef5717c14025933
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.symbols.gz) = 3c9919130d4470ff778d77119b4f17132002de6229a1d0f4f2024e1bbe8e68de7cfe93a4da18835c111dad1de50bbc4e5e0e50a89e71757acc2da888afcf944a
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.symbols.gz) = 53339f2e886137c722353c7e4641fb79fb4160c9
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.symbols.gz) = 2125d332a50f2382dc9ea2fa1c76fff6
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.bin.gz) = 7f7533adb7f744376eda30bed953e0c24925a7ac
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.bin.gz) = 6df01180c26dea9f40e427414375f872d65be05f1541d887fedf8d98f22e3f98354ca15aa058c1cba0d0e4d30974b37787855c1a9ee36f7b702ad42c31ef69ab
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.bin.gz) = 1c6192b2841123a6a7b34f46530a49cf731fe8b0
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.bin.gz) = 7080e515fcdbe3d4d976da0bd0db1356
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.gz) = 009c609c69eb87be8129cb8cca61732493771053
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.gz) = 1aef3bb8e1f66280e2478e207618ef125b02fee796f1d31bc9c8ab5e28f132bd5aa5c6e78cf1dd2e63a72cfe814264db394c74a2c1f04ae139dbd3d592bca8ce
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.gz) = 6b7f00ce3de221960905acde44c93679d12318b0
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.gz) = cb78419cf4b8862517c4cdb83f09edcb
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.srec.gz) = 5405155f29eab526e4b489e156a3a6a84b694c04
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.srec.gz) = e4ddb650bed5716c2a6070a88104ead0119e3e41a6ad61d0a1ab944966fd5e29d3c17b83061940c81788583d833b3b90e2b3fca30a2291bb7e99be7acfc52eb4
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.srec.gz) = d28c777e9f79b74d39d9cebeb55582bf6554bdf4
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.srec.gz) = e33527c137440f91dc481372e55b5153
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.symbols.gz) = 0adc4d2b9af7fed43f2cb2a6d461b0b67dca64ff
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.symbols.gz) = fac69e001c5383808c41901f250e53267cee4df0738cf2fda17675057f397d33fd2be817b4235ba4ff47c3ad4c667388fe94e935372702729e38a39d95932bf1
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.symbols.gz) = 08cb50f087ee2c1edcb6bb8b0a10fd9436ee5291
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.symbols.gz) = 303fa88bab1f84ce1e5e7392b63d335f
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin.gz) = 6d96ba7627a743040710559958052fe5ad516e07
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin.gz) = c8980e5a5fcbf6d16a94b273537d0b7e684d46621d46cb52b1c2672e67c864bc4651a09fed96356e441d209f57c5eba10696d9d82a3aba7bca24781ef6e6d570
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin.gz) = 8faf196aecee5eab9fe5a256daf1bdeee5f485e0
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin.gz) = fa021fd649cc68d99ed50414c562937e
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.gz) = 7084ab7948465cd7fb832a191991166d460bcbe9
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.gz) = a6e2dd918a3965573e3417e24984ff5d4c546a9bade8d7b68a930e695a76243aa4acb89eaede1ad8ea07280a836fbdc3200b7cade29486e1a1783734ad3164aa
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.gz) = eb9e46f17f5a0d0d296fcf3983fc7cac086d139d
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.gz) = ad30409880e74a4c9aa9be2f0cd67ba4
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.srec.gz) = 5dce945d53df7aa098712e966a08d8c4a11d5615
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.srec.gz) = 13270d86a94b74829fdd691cd97b8afbebf397fd68d9e8ecc8dcce611b3eca79666e5da303d75ad0af56f762b65d3d487ef1317685538b6962ff5b482e57c954
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.srec.gz) = dbb6b76ac38227dc2b5e0dcf35dbbc187a0f9cec
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.srec.gz) = 573eddbddcc0e213758ee25fd7f3d6e0
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.symbols.gz) = 7a5bcaaa2847b816c0568f28647ee07a18650c38
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.symbols.gz) = e7fa9c30cef40ab421ed36421f9c92bac2fb21c88077d4dd176a55b3b82cb94ff1e912b35d6504e5d37ca737378da3eae0f64e7721a023e7af596a037f0970a0
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.symbols.gz) = dbe42d8b278149bae03d553e4d8a2676544b53ba
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.symbols.gz) = 28d969c46d89d77b04fdc532621a9c5b
-SHA1 (NetBSD-6.0/evbarm/installation/bootmini2440) = 322711938832b81edf3a30de085fe84c118fffdd
-SHA512 (NetBSD-6.0/evbarm/installation/bootmini2440) = f985790660b66ab4843a2e938e67bb7b1856e6acfee877e00bcadaf945cae7f85dd5f5ea2557f331d142c2f79ff129ac505a9f8ac276650ed49ae86b202cdd1f
-RMD160 (NetBSD-6.0/evbarm/installation/bootmini2440) = 6549e1c02eec982d3bfbd42317bc0c49bd7a3fcc
-MD5 (NetBSD-6.0/evbarm/installation/bootmini2440) = ab71c605b7165325bc2efffbf8366e01
-SHA1 (NetBSD-6.0/evbarm/INSTALL.html) = 364e208c39e0aa0c1a873702629363049749555b
-SHA512 (NetBSD-6.0/evbarm/INSTALL.html) = 0d23a02d74624eceee1b8908f49ca677ab4c260725798614faf67cfcf396aa0862aaf5296ab68315b3a1b110a998cd9fc08f36630aa3202ffb18db915e6bc5cf
-RMD160 (NetBSD-6.0/evbarm/INSTALL.html) = 5e46ad234a6311ea55f157da0978fd0ca4543ee1
-MD5 (NetBSD-6.0/evbarm/INSTALL.html) = 4ddc104e853a1b0a9ff34bdeffdb849a
-SHA1 (NetBSD-6.0/evbarm/INSTALL.more) = 49005be72eacdfd5e58240ea40c272362f1794ca
-SHA512 (NetBSD-6.0/evbarm/INSTALL.more) = 29b0240cd5e8b957fd6f0cb26858f856f2ca1e5bc664d7617138519d38788f442bd0e2045f506eb49b6fb07200e3251694679c7e9079e152e022e4c36d69339c
-RMD160 (NetBSD-6.0/evbarm/INSTALL.more) = b2227c9abf8c42edad582429b388b46292b2b642
-MD5 (NetBSD-6.0/evbarm/INSTALL.more) = 8f7edc27634f260c5216ce2ac1c7ab20
-SHA1 (NetBSD-6.0/evbarm/INSTALL.ps) = be244573aa70f6ea8bd6afef50d3129e95ecb232
-SHA512 (NetBSD-6.0/evbarm/INSTALL.ps) = b4dcdf490b1e2fdfb72a21fbd00922eef14da81665f56e69d5fce4458222a3108c27fc793a1507e9f6f3b3555c236899f06863282b3a0dcf061ddd81451e0f82
-RMD160 (NetBSD-6.0/evbarm/INSTALL.ps) = 38340ef793c940f555c637fb63ed603e2813b6b0
-MD5 (NetBSD-6.0/evbarm/INSTALL.ps) = 0702cfb1c18290c2f6b3990ec2b9b838
-SHA1 (NetBSD-6.0/evbarm/INSTALL.txt) = 84d0cf406199e9e160201946ef76c5544f859094
-SHA512 (NetBSD-6.0/evbarm/INSTALL.txt) = 779245d5eac9f6aad487d0ef8c09ad8ed1ccd1ab6b315d5436d681422a1ca23376304d9f5f36e0010d38a26947c2d67b214f7fe06207b52ec4ca1d1abf996280
-RMD160 (NetBSD-6.0/evbarm/INSTALL.txt) = f21886bd1f37f1557a890ce294fc842a4a9322ba
-MD5 (NetBSD-6.0/evbarm/INSTALL.txt) = 4e8f849ebf04f5af7feb401bd8b828ac
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA32.gz) = 837f5c347644ad20116892b91a170bd9a177cf25
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA32.gz) = 83ef6ec1fea23841a6a03d5f91d0c00f8dae56d78276b04dc56f3be1121950c8b21cdc3b4f580929f85e0b7dca9f5635cbc248cd9bdf018bd019837953165796
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA32.gz) = da9f38ccb4f1a09ce9567d148115538eedddfd64
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA32.gz) = 94e33f6853b4a1d9253b01310a9d31e8
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA64.gz) = 1194bf50c6a2a1cccfd7017ec100e18840cab60a
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA64.gz) = 05939d55299eb8c98f89c0cced1f090fc47568c81be3c4aaf32325ce4a087b44b1c6945bb8b9a12384ae588e9dfb1ad0ca1c701e2f0603a672bf3ea1d2bad1d0
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA64.gz) = ceecace87ff5c72a8bf0551d03e7f24297c8210e
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA64.gz) = f70db6b8696d6db6538471a0389aba6a
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX32.gz) = 50baddbb54cecc95e5aacae73100b35b1a50808a
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX32.gz) = 937b7632d22c4e22bdacdad4bb473b1c4537cccb35f97d1bb08b80d64c6228a410f59310ba336d19e62e0bf38f3ccb9c5e1c27aed8d769ef66657de06070b273
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX32.gz) = 97d67324ca36d259e51a80f89b3ff8c32aeb0936
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX32.gz) = 2c17d4f86050689342b031332bae427b
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX64.gz) = 1e1c1a9cd9c7bedace03b3c25a736014d7053adf
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX64.gz) = dd0689962b451e442a48a35c35f426d4428aad93a22e6e2d33dd0033125eeb8e763ed31ee13410a6f7b7d337a46c351a736605adf49e301e09df14096fffbf41
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX64.gz) = c94021afffc7e21001cd3f045063b725fcbbdb96
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX64.gz) = 7ed50990347095eced85286bac3894ad
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA32.tgz) = 8aef48b2afd3a5c2daaf9298b1377e5fb48a4775
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA32.tgz) = 769777c570e41cef669cadd1caca734ca55f71382656b3d229bf32811e22fcac10c3258032e79ad190d9e34b4a4168269b0a44352209f9321d3b3d18e1d920ef
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA32.tgz) = 27fd132ecb4aef492c8194a598641b0d57df788f
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA32.tgz) = 547ed14fd7607348ac12d50d6e142625
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/base.tgz) = 321d0a48e96415413f6c76fe94cfae0b763c0ab4
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/base.tgz) = e3306d01022a478928ebf33894603aa4788983b58b73beb1cdd1592cc5d545bb3eefcc07ef381f7be24099bf5100914d65f5575c9ccc43279332972d5e84c01c
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/base.tgz) = 822520b0721dbc6ff7402acf65a7078df4ee495b
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/base.tgz) = 838db1b3837f00c46b9b7f8e2ceddee5
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/comp.tgz) = 9e1125bb9734db8e861c085c3f4baeefed5bc5ca
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/comp.tgz) = 405ffdb54d1ad4f0cb56b07ade8ef1cf26235526e143f62622870e9733d9f860405519b355129bfad7ebe659c56358c73dcc941bf0554a89ef210a70e69c2855
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/comp.tgz) = 13b1ab9f477f0d22afd1dc11d7a0ce04ed87e247
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/comp.tgz) = 880a15da9d452aba11a9c3e4b8c32c44
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/etc.tgz) = 793af95b8423250427980e55e1b40e7d2d946dd7
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/etc.tgz) = 9c9dafc30b85ced01a296fa4464bed9c8bbed77b359307a637e236646880d93aa3b17c857423f26c286732686b00855131a359295fbb22c4f4d4271aaf21fd23
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/etc.tgz) = dc21febaa97b3f196ddf788541e93081919ac05d
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/etc.tgz) = affff84911016dc75d8dcc556ed1cd90
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/games.tgz) = 6a9922b70c13cccb7e2c3b2d2b4f63f4d6ba8b83
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/games.tgz) = e17192d20cebcb6583f76e3badf382c2734bdccb596b5a7c7104c28bd6d96419a59a642c4eac1e246d821d8cdf211e8b00aeb7043a439edfa6cf9e5554441007
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/games.tgz) = f93c4992616fc210ae24c58b64f8607ca6f3d1af
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/games.tgz) = 2186988f1072dc9be8a8e1ea77bc1906
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA64.tgz) = 6cff22a0f2e961617cd4eaf3bb571a7b7f4845a0
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA64.tgz) = 05b431e02e4e858f79103bc1950c4da7fc87d476d46479a8f0c2a9850b96391d8a55cedc0fa3b47da4857d7f91a9acacc08369e2121a7d47af3bda5712ad333f
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA64.tgz) = e1048547f5851837f476010b3c5866f527542465
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA64.tgz) = 3ccf1d8db71de9c182c81d99689aab8d
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX32.tgz) = 4400d1601558ff59a7d90028bd91e00c4b67e230
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX32.tgz) = a16e8b5d34e07c97fdda6b09e41a67d48fcf56b4276e9e52c2a2d8ce1eac5d21abb542afb67991f7b2bf87261c8134f8e522d59375ccd251f4e853d3ed877b71
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX32.tgz) = a7ea06c9ce95d00548c7dc9a3403f873d3f42749
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX32.tgz) = a6c542f79813324f5ddaf80a9a12a531
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX64.tgz) = 47cc48be2b1edf22d48fb3d45c2ebcf1e6b84655
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX64.tgz) = ce9378b66f327c84e004d075e0033e195c1e649acc7f668d154b5608fa71070cfed74b1eedea404cead8c92a9f9f332fb5f2407a14d80175d4f2e7f3115962d7
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX64.tgz) = 64602c29c9cad9767bdc771464f766d4c4bc7a14
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX64.tgz) = f55ccc413a2546e5db4c66b38095dfb2
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/modules.tgz) = 150d99ebadd4c626bf48d9dd772584df18d0f161
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/modules.tgz) = eb3e15f4dd50d6eb59ffec96245ca440abdc2427f7cd14f6405ce979f9ee13b5d40ed30d0fc544cd92e5c8dd49b2cd033cafa44f32baef8c434734665c7b35d2
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/modules.tgz) = 74a564f4270f8b8df9c0f207512ccbf02cd4436e
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/modules.tgz) = 6f2c6d66540b3994a5400f1b3a7c0e06
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/tests.tgz) = 607a8a23fb7447a1bd6363feb446cdfc7110ac7f
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/tests.tgz) = babcea43b781105dea81af3797bce6f77bbf2766a28104c45aa7f43952d0a0a7e3c981927d4b2745ed46b290ff4db7d43b5a2620b82d7185a55e06156604432f
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/tests.tgz) = 90dc0855b2b85584cc08f07d55645bd98f04b40b
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/tests.tgz) = c0dc4879f5bf2e13462fe11f1afb9755
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/text.tgz) = a38aef75824fe9c86579b8a320ec645e1079224d
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/text.tgz) = 39f42cbd084867ba177e3f3c7eda0ae19040eac2ee4dca991caa172211ba499081f720f16511b967fe6e4529f78e446cf9cf8ab89b595bca41aff3e7017b2028
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/text.tgz) = af58fb15683143196193ee0ad443a9fc94b6f8b7
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/text.tgz) = 8716d1b4d2cb02c015e20e87650021ed
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xbase.tgz) = f22a560c757bc506a118ce9803f68e148fbcf5f8
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xbase.tgz) = 5ee7c1db10aaf6a67fe6e9026057266340e901a2a4042d126862bb3ebc1b26dc824a3d47febaf2c38738b10e563feb903c1020ef98dd34a34ed6ab1811e1dd0a
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xbase.tgz) = 4dd1d30eed29fad5ad00d08f8655850ba2966beb
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xbase.tgz) = 83fe206984459147b084ce31f5712ac5
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xcomp.tgz) = 6a62de4e61ca7fb51120a2d949f0c6a76728c795
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xcomp.tgz) = 1a4d6159f2afb79ea54d7b50515d33585ac70a41da0dce13790d9acc1bc83636eedf83284aa76c4b9be2d51e25000fcb000842d4491edc1f0032e6e68f591359
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xcomp.tgz) = b5d253b8ed963d2aa4542c177199f8bf56a7413f
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xcomp.tgz) = 9ab19bfd18fe8afea9ec8b987eb3f745
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xetc.tgz) = b3ca1c7e85d0832091fc391717c914889f745a13
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xetc.tgz) = e386fa04d66afe2b4817c6e77d6ae351e7a10265099395285e15ff5fb8c41d169de511b3bdc71d9b8fd144a0153262b068b6b837b846310e255bfea1a06ac5e6
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xetc.tgz) = d7cd1c13d547ec0fe4ad59ee92be9499cbeb53ed
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xetc.tgz) = 8165fb3d8f4f335f32f391d6f6ba414c
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xfont.tgz) = c3b40e7a439d60c27022fc1cea5e58fff68f2da3
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xfont.tgz) = 5a7e564dc9cc41d3704722a461ffe7ada8011510e3db08c2a209afc462a69986261ec02d41e792f1e1a305300f4d23216cb07c231c461df5edb2fb54916d2438
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xfont.tgz) = 03066eeaa22fac20cb69be43939f870a313519d2
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xfont.tgz) = 46e16e5288c250f4f2394bf709df039b
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xserver.tgz) = 13d61af721933a9484ea722fcf5a151900b07d55
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xserver.tgz) = 1372c13478ca7da2c5ba2b3d56f2f09f2bd764f2c345a9e4b8c2fa81fd101d557d53b16637b7644676431cc57b481d22d7f702c1a24d7c6456c04b75422f9485
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xserver.tgz) = 3cc8603545553cf13c0e41525d4f71df2f04a243
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xserver.tgz) = 599284f9e42a94928802db5b36d6c8db
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.srec.gz) = f94948277528ab8356fbcb1f447ea3f88da0dbff
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.srec.gz) = 37025250657daad79c15d79ade2f1e815b551bb9541d852e0e0b208b6964b2e7bcff4eab477ff9dc8c62b23a061681c6076684f41d50ffac2b9ca1c9b85eb657
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.srec.gz) = e0f5ead94d76d0131e9b6351a1b32066c0e37004
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.srec.gz) = f07bb28b2742e51e8a130a1633813342
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.gz) = ce135463449caf04fe5915edf2689e53f7d34450
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.gz) = e30a6963cdee29fc634232bad314c1093df462a1fc2751908ff1f6118165b1f4cbc7fa3fb780c7483b26dbed2339f562d75618ed355388ca4a7ea8da182f5718
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.gz) = 726d74693693f22e261de851efc11f489af83d5e
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.gz) = cf0519b0dc9ab365ee268ee0cf667cd3
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 7d61c5ea450b2348bbf829f17801d1444142030a
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.symbols.gz) = be8fadc2f971b5ceae719fe76f121a1d394826c0509d0052eb681ec3398e8944a8866c45ed213bc1a07ccc0306ede8ec3c28c1415a26bfc92721fe8a90ec8c86
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 8be481d57e200549bddd24d27e640fc192758aa8
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 23dc546c19890b5bfe2981a4be93cf61
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.gz) = 774d5ac21ea9f3b0d356a7de041c89afedd85cb4
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.gz) = 228797b395c498e531f359c59d8a79f336138923e95881c1506c9b1a772865b6a7df96be8a05e62a8f3a3b791e208173e35bc6ac1ad29d8c62b388620d3bb828
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.gz) = d84a8c78f5f81c897066771fabb70dd447d423ab
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.gz) = 9392b5ff6a21a0f043f4ba6e9ff14a00
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.srec.gz) = 028bf1fb8a8e7f1733eecb45b7016b387660558c
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.srec.gz) = c7d3178f2dc591e1d39e8e04aaae780cdd38c190d850d0b71a0c69eca7a8dc29b8adb300e106a236e9fbd7ea9e85dc070bc5ae6baf6bc742aff4dbafca91c00e
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.srec.gz) = b4f76a19a3119f6b35830db195d0db3b40b962d7
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.srec.gz) = 6f1c87fa36192f6cce9fe900576de781
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 05ebd0d64d73f452fbc31f9a7945fc1503bfa23d
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 839eafde2ed98b6be776ad75e591c23a295aae726a2d384fa1c2f9e52333f1d5ba14c21473ad5d7c51098608d04b055cc163e743485556ac30c75a5a913f0422
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 6f1dbafcaf7ca5df8c47a61b5f6d8805a209d7eb
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.symbols.gz) = cebaa3e1af8c79ccb42a92f25140c653
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.gz) = 039e0a1c46bd768a34bd4522d2523018429e6987
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.gz) = 4914b5675a4b3858c3feee1eed653a75f0708b84c12d80a82715502fc9e2761eef8d23735ccdff6c596a93fa3e01ee69dcdc39cd44b5e3876722134ee90ef31b
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.gz) = c0cb5df60249fca57ac322b2cb8fcc6f90645698
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.gz) = ee03b9d28419f05275ee663b8b9d0ac9
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.srec.gz) = e831083d34e0200ed793aee4a890a80f518e1ab1
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.srec.gz) = 7cd35c5f5ed1ee14dbabfa9c7d89a6ed592e37b66676c1a523422d24830a28507afea99d6408dbe436d59233703257684a9cc765370c98dc23de78f3931b50c3
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.srec.gz) = e6de2239f84cf7cacf8ae6b1bb62326483a1c62e
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.srec.gz) = d7de63125741840ff89a6dff9fda38c8
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 5aa1511398191686462abbd5e20ab6e6b56fb325
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = bd4c5f4b969c6c5bbb5d424c21430a3c1cbdc1f6d40a60842402ffe2d812393e0556ef6b7fade839a117a0ec601359127fd2957d35bf7468217c9adcaca53e70
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 6a2fd527f96c49423f58f6f8363e0582e2b894e9
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = d0654f9677e051fc34fed0d81a27e528
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.gz) = 39ea7d6f681981f11fbdd9e63473e4dd69cc2f9c
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.gz) = 41378a129484896d4598dcfd29b1f65cc462c5746d4793e973b7912ad10cf3f1e487701f4d3267ba7615bb6fbe9390a356f1d89146e8f90d7bc8aa57ae575dec
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.gz) = cd77d4e08b77ede06fdcacf53cac8360b115b11d
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.gz) = d736cdad40ba2ae3beba484dd5a5ce05
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.srec.gz) = a2fd46154978cde95b379f110407c52ae0c688e1
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.srec.gz) = c778ee1c88dc9aed20d7113233f43660258d1f7616e611d8e8df413b9db1e73039fe422a9ddc8c02039baea5bf5434f660fed57148f13ee641e339f9277f2c51
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.srec.gz) = e98d08b85f6aae19176ad570f061f4ac14c42629
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.srec.gz) = c2de85181edf54b18fbe495d65faf32a
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 2808091cbd1d32e9f38e7c38e7f2a0aa8c66e617
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 7c4157a809dec6f292fafd1fa21744932e8b0add59d2f3ea62c4536d31e14c6b8a24633354cb4918dd38fc88695d373d356dda7e93dfb77f83c6a6fcf6e70b54
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = a31fb2125afada861428f3b416218cef7a641caf
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = d727b2cd38e49bed46bba3a1d33f9b97
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-GDIUM64.gz) = 938493a6f165b0a66e87d0ced332116b3e5fa1e7
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-GDIUM64.gz) = 05906bce297394f48bddff8ea2a92f527ca5a673c1ddad6ee776eaeeb5298c562e01b533288add57bf39239c9cb02e6e8f3569c4430b658bf99b0bac61245aaf
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-GDIUM64.gz) = a2d803c0597759fcaebb669d3f4ccb7d008d2e9b
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-GDIUM64.gz) = e1f26f59ce4ff562a5c8e6f8bd511a0b
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-LOONGSON.gz) = b717b1950f7e2ee2745b74e32c9f6cfc7d7ca15a
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-LOONGSON.gz) = 47916c7dc402df96876307fe31e21de43b5dcd6a57425d2454ba44593c03b0852b6dc1c5822880590a14a91717e7478314e6ac0a099004596f4d256ba3427e4b
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-LOONGSON.gz) = a1c0e2c2ea412fa4a49fce8cc1a366d9d373a5d0
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-LOONGSON.gz) = 7da6b1ffa558b1b211fe3702c5837e54
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA32.gz) = 7c79ae79c6672c73ac03b88dab24103a01a86658
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA32.gz) = de76f96e25bb798dfc28c0e186676833392c47a47e9eaa9c0883f9ac43f89946addd61ebfd3c91a9556eee4bb218f483053513190242abe472ddc79131224081
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA32.gz) = 325db86c0e99e01418f70575d75c3285ad586bad
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA32.gz) = 67b5fcff9d18ad156d0c028ab16ba081
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA64.gz) = 8c7904ebdd030a94458f13ac7c11df832929cc86
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA64.gz) = a51547232434584769c0a8ea108bff1425e5e96f1989224b3420863ebeded4a3cb272b6873e3fe860aef3658982bcde844d86fcb46d79ce647b6969e6758c978
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA64.gz) = 656bc08ab196ab9e4638804a5ca840327a8a31a4
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA64.gz) = 8cad946d5e2a395f26d8f18eba137ada
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-P5064-64.gz) = a228a6982bb8c5cf468860e09fd9b17b4307f356
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-P5064-64.gz) = db4187479c550a71c23f9bde6cc8dc50d2eb758293b293c7444a786ab30becbae9e150c12ef3fd55a42df1b88efdb937a7fffc48457c20c5441b082e0c0e2745
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-P5064-64.gz) = 8d9bc3f9d1ea60e3322fac87a3c9ccd43a54055d
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-P5064-64.gz) = c318ae2623b38a290cce71191c6c6afd
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX32.gz) = 2ef72f56c819a2bc0fd4d48e463161ebef9551f2
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX32.gz) = 4b80ebf478d77d91205ab2d89d2459317c4b61bbae18646c2c201fb4ba1ee2978f5be3a87ad33c83d9b139d3ffa077a4bcb3e315c16fb68f116b802dd2217637
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX32.gz) = b5a20d970f5ad8c177c6244b1e527ea04c705cce
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX32.gz) = 34ceee3acf4435335a43c594dceff98e
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX64.gz) = 5bf585188ba90ab0231e99247967eacfff520cc8
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX64.gz) = 20e39f09067084fccb2587a05a3820e50816fb3f097e8e89cb07091c937fe97aa27593948fa3466f9a5d6835a8bd1bfe31268a2414c6c8694fb9fac156e68f98
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX64.gz) = 96ebcf3117c2a1f60b50ba1de3852898083393d4
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX64.gz) = 335908a4efd612fbc51487db37af3eb0
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-GDIUM64.tgz) = a09a36dad31ab7a766bcddea3fb08807d93819bd
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-GDIUM64.tgz) = e3876e7f4164e117ada834e6769fd3357d144fe36779a197573a8ea735821150fbc6c4b6c2b9ea917b14b23a795e4db7e069cb8e121ac3fe9ae5e0296400d065
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-GDIUM64.tgz) = 945ea08a5fdad4d8ac8504212712b40aa01d1443
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-GDIUM64.tgz) = 2fcaffaee00d469cb7f2756fdcfd2fa6
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/base.tgz) = e7550ddcf5edc7c3c27f53b7e6b4636f744108c7
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/base.tgz) = 0096eb300e8a71093cbe3e84830ff048af73e85cbbad1986390b8838c50ab6bd63cdc201062514aa63529c2043e1a2b2428cb2b50fa2bcb9dfd4ed11e42febdc
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/base.tgz) = a5509e8f5a4e5aadcf057710489fa4105dc4dcbc
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/base.tgz) = 76f45332e5fae1c999dba2da97f92834
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/comp.tgz) = 2475e5bc61cb7084e06f111d6e24e3ef4527ab0e
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/comp.tgz) = 5ca83f2b42cd3145d3fa5c88e72dec3509f52f63bd0e5ac26f752a18065473ea298bc0e88cb0b954a06d3d7eba5a9afdee3087feb06079e9c76cd5a0ae3a6759
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/comp.tgz) = 8bf71a3552e3e9388c85d5426530e58d2ff15f9f
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/comp.tgz) = e8dcb0d4b7b5acbf8f4603be69f4e9b1
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/etc.tgz) = 106b0102ae77486072a61db71016443e4a63af9e
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/etc.tgz) = 386948f2aa4dd140bf17c9aa0a8bd0b41096603497dbb9792454fa3772724312a3a2ddd3e69a7b1a710e6339f799b5174b16f8f91ef123ebde548eb47aee4e90
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/etc.tgz) = c704f1a292af8fbfe37a9a61654f8e8873b6cf49
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/etc.tgz) = ea16b2ab565706b8038b459e0519936e
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/games.tgz) = fbb547d701d95fa7c9fedb8ce1616fa73dc0a962
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/games.tgz) = 9b0c4338c3227f974305624f0ba8756836f156f3d3f9bbb1ec3188ca9ec2de344d5ff3f8b9969180e2c871cc0b09b12b9e6311e33ca548d59f4596a04224f14e
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/games.tgz) = ae8ec9dca5729ee4203ff86e10ebb16379ccf5f5
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/games.tgz) = 18b0244267ae2ea671632562ebf493c2
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-LOONGSON.tgz) = 8da37bef5b86301e6e5741969aaab713752c2866
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-LOONGSON.tgz) = be868f49e960bdee048cc1a717d17563c081afdf2a258007312f306f14470159943877ef29d0c3c783b32682074c299aeb2b48a7623bdc4af2adaf82ee9b52e1
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-LOONGSON.tgz) = 10f65602b7dab9305df83c26e670221efe1b452c
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-LOONGSON.tgz) = caffb25555770c6474b23e6cd028e82e
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA32.tgz) = 7e5d386cee62920ecd932af45ff4a854234edc8a
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA32.tgz) = f5e9bb4886260c3eb0b18e29999047b1f39692be5cd5cbeb58638604efae408f167cbccb81d2fc6c601f20515955b48035113cc2cb2e6d30088cd9750fa64465
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA32.tgz) = e0a36f2148ed78c4eda1c26e5ef0045ff6b97e22
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA32.tgz) = 3ccd62f53f80b0eabb9baa2a29a691ac
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA64.tgz) = 225382c44befe15c46b05f2f052718bd80dd9a7d
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA64.tgz) = 1c1a13c0b73098d14468cf12d7744f79696773698adf94e622afd95e436560fc4934d3b02390187647a9d97effbed9162542149fbe06628cf38aff197faaafd6
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA64.tgz) = e5ae37af03461f04dc6550141e4c2301dce51ff2
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA64.tgz) = 672129c4f8f0315c9b374ac5651f82cc
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-P5064-64.tgz) = a41b86f2235180b688882c8eb2959edcb48c81ca
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-P5064-64.tgz) = 9db6c584144a249006a671894e010fa0674e62e6abc60d43441462d1f1478bf4b1f9c6d9b46f14a1e9ffc3f7641bc206f5ed95c90b405e57f3f40e54d74aec92
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-P5064-64.tgz) = a7f59b498f286aeffe614b4ae43461d8a859f758
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-P5064-64.tgz) = 5dc76b6c8b5b49b757dd4a5dfa370420
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX32.tgz) = 9cdf4993097b04929dbad4b76c5bbf0cd6796c7d
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX32.tgz) = 171bcfbb92a1c1ca96dc14707604998eb4c5760179e9781da9b0ad18ad9695ea44d49c5cdd9ac9250a7a60e08b336daefa9a6efc2f172c9a70d10417e4643b0d
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX32.tgz) = a1a517153943866b07fb5850644d1079721fd131
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX32.tgz) = f68253bb53367876e463884c2a8eaabf
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX64.tgz) = 73dcbbb4ffbd263a8ab68a5144b16cda35e14272
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX64.tgz) = bee28f3a052cad0a8624729675f28d42847b7545234f98e141c180e851a3f2052236606c512f1a7515c7ba115417eb8e8a9ceba2224a1c5915ea44f25cd99abb
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX64.tgz) = ba17bd15f5e3b131ed77687817b58f8a1730232c
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX64.tgz) = 0a2ea3efdd4858019a64cf67994cbc36
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/modules.tgz) = 4ce7dd5ecba275042042fc283bf93453fc57b2fa
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/modules.tgz) = b90e1c87a5ad7981bf51e9fd33b2614d6d092c10c6d67a242ebd814276dd116ac660d9801ad02a5b9b09ce58e3c2aca802322c97ea73c9e270f88d1162e7ae24
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/modules.tgz) = 73d91a2e36f2ec78fc3aa1f2c2af0d2a2d9174a8
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/modules.tgz) = ead882dfd50f9421b51a5fc5deb0151e
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/tests.tgz) = 441100d5b3275b38c206eeb86a9153084f37e613
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/tests.tgz) = e3f33662a577ad2ec975b432424b5d2c2b3b2b742d5e2ce37043cb1820ba225b185638c5c88a34fe05af9fa0083db918074cbb8f091354c35e8f2fd121f93dea
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/tests.tgz) = 64e119a7b1ed5eec0151ebe0ac8c6d2f362e8dc0
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/tests.tgz) = 0d6eedfa2f9aae4c8f0055ca1a358c66
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/text.tgz) = b7f32924a9d2c54824fb19b1bb3158b2996a16d1
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/text.tgz) = 00b6a2831c439c9a5bb07023fecbd7ac99285b2f08a2eb2ba00ace828eaa4cb5fdbd12c339170b9235713d9936683837214389ebfeb52c9bc4be07bcc0df0e15
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/text.tgz) = 6f72bbbef2e15bc63b99ae7419a6a68f3a82b7e5
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/text.tgz) = ec982ff4007c1082127af777e978bc85
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xbase.tgz) = 2e87de8a350d32c3529222c0195e8b89a03f1192
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xbase.tgz) = 65ba278254dcef89f1cc464487921995413a5400cf0a3388eb987416486f96f510c91569b6c3145d687e05eedc93be79bf54374c67fb33ffc57eb2b89902d096
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xbase.tgz) = 7acd24fa398777d99977da6d6080c89ab8a75ef3
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xbase.tgz) = 5535460ce0de58bbbd1aa49741edc463
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xcomp.tgz) = 70a07fcea399d1032660b185c2d9ac6486da8fbc
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xcomp.tgz) = a803322c59fef449066d1d2e42beec42587e40f6134f5c62d475440a01fbf93a91aa9bfae96b89eb6394e2f20d925fb85dc23754bf8600feb40cc98a9beb844e
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xcomp.tgz) = 12a13cd5fa3a63ddc24e4f4bfc6d35ce99dad31d
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xcomp.tgz) = 0b455b3722b1429e0a134317b8dbdea2
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xetc.tgz) = a95c9eb9995be3639417ed3098f7ef36baa0d729
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xetc.tgz) = be4544652b01b9161ba2f27461ed723378712d0b34058ba5a16de3cc366a5b551f0e8e7b740404eebbee7ae656e7745281b7d329068bb1aedf8f757ed06e9f98
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xetc.tgz) = b7e1bac15f5d4dda393d5e07e2b26d3c3877a01d
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xetc.tgz) = ee2771391cc229fb9bea94f455e841e4
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xfont.tgz) = b985c741b487ae0e65ca36e318c558c147d1eca5
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xfont.tgz) = 3da2aa9b1cb7906f515d0c02d67a8aa994a0022189dab11428a28040f57f5ae3cfb758cc7676837aca3479bfcc1e1551afe592417b59ad79b80a6392d6f34929
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xfont.tgz) = bccdaaa5821219a03bd67a57320311b265a19e94
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xfont.tgz) = 60eaa14a01f682577ab5b1774fefd7b8
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xserver.tgz) = 30134e060bc2ad1df81dfb637ec9d7e35bbc4932
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xserver.tgz) = 94e7986f96ec8b41653db1b4c05d0237c614678b43f1a52ab3b40c5627ffea2c7e91ae3e154391b964dc36edbd60aaed767427bd50eae5306beb0fead97c0346
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xserver.tgz) = 2423334e389526cac76e76fa0fa38fd671e0d3c2
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xserver.tgz) = 508453785f0150d7115610f4ab1f0ae9
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.srec.gz) = 3d7cbad15200cb0e18ed529e8d65768503bd0a96
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.srec.gz) = c549dc552ae2b10bd3d8b6b716d6a107e5ef6988a49b2ae1292b40608d217cafa8bbb77974c3e8fe9291820bd534b0713c1136a09c173c282384f2805cabad1c
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.srec.gz) = eb53ea3f18593ad0a8d23ab92b8d78e590709cae
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.srec.gz) = 6c0fbfaa9cafb5799820bf14e057a5fe
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.gz) = 5f370ee3290556f0df9346c1c279b4cd239815bd
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.gz) = 8a7770a9dca3bd6bb59525c7f5340c9347d7c315e6f54c719d5f46312e0ff25d1fd6ba0e31d881ee680d904534a71f7258c49c16e706a46cb6ff0ada537630fc
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.gz) = ed1b7878ae50846b27db943ff3f82d0be2e4bd05
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.gz) = d935eea2ed1da5225fd8af96482ecc08
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.symbols.gz) = 0f65b3f9550c07786d711dfa98c426f3601e0f01
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.symbols.gz) = b37c854b5a20cd45da6e1fb4132a0fc8bf1234ff08294168249a3a38e8463a9c52fc9863af80787c10ae62e1bb17be087cab605478f5fb29dd615f8168ea9180
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.symbols.gz) = 1365f99730e4ab317d1d35e73f2eb5592680ece6
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.symbols.gz) = af18fc0829c787d47e6cdc7e6146413f
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.gz) = 24b04245cb3bb8808c2643f6efa74677e18425c9
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.gz) = 4d76662f4aaa9fbdb3bc3e807eb716804f4ac070e8b0e6def5e9c4c816ed456894bad40a3b51ff8f68a21b05bee08de02e7fb1ee1ece8e625884dbb2bccd9109
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.gz) = cdff1dcb0aecc09f926915055769081acab42201
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.gz) = 06cca864f41f90c5f0bd6d95a57ecc5c
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.srec.gz) = 5a432e451fb73617b8377b4f479a6eaf611bac29
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.srec.gz) = 3f92a16819d8452f7d105e19d803985832f89e1d6c09b067d6ffe4522c7e924707d9411535ccf838cdec3b7fd1fa17cd7cfbb6e2d3bd369690dcd9094f5e10f3
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.srec.gz) = 71a1e5b455df4458e1bb4ec9d45b4043bebc5788
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.srec.gz) = 98534235eaeb7626a485458779a0e6a8
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 2f3ed468ae1a3a4082bfd5412bc11ee8d8cb90f9
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.symbols.gz) = fc3b4ac13b3c951037e30132d9178dd79635cb78adea2b97046ef6d8a8486bf9b12e43d26897f32f7db967fddd048c177acbb5585b573bc2b9c80374b59c133d
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 5e863f2e95a8623056dc32ea5ba0265876f102df
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.symbols.gz) = e84090937754b1d91357b759679a2ae4
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.gz) = 3e9f23c9e3f15de38a7e0908f0253d1f23e49a43
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.gz) = 57cf422b28f5442c105e23fae81119e993b543e3eb2c344ab5334e8edb1018c54f3b39245d1bc4091b8de4e28fe78e357dfef31bfa51de174342ba881ef9cf45
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.gz) = 9950fb85a0100463810fee9d0ab79d4297e94401
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.gz) = 571361834195d0048cfb4c2bb13faf10
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.srec.gz) = 03a6a6428275c9f01f514031f5c288739a081850
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.srec.gz) = 4165164e3830c5dd897107c64cd6dcbb27edc31e32bf6cf7305fe74024c467a81e703ed1be94071c62cf467eab89ecd66b3b72876fc1d8fece4792dbb8384255
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.srec.gz) = 68586dd9c3e823a26a5439907f088772a5939b88
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.srec.gz) = 37ec696958709fadbfe7e08fcac3bb57
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.symbols.gz) = bdc6c366da273e056df2ea2bd9d92813b61f5b36
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 574c80f478e5f87eae6602a8e8b6d52df19061199f2e78d05bc6e662daca5f9b6aef26dd4b543d24e557b78aa2d5f0a5e80aa9cdfca5fbcdfc8a4da7a84b95d0
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 4f8ba01f1ba53c8b8230a974d7c8aa45a9667915
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 5e726ecc87a4406b10e5c11cbf745a7e
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.gz) = a21c899aa2389958474b94a057e7356da840589f
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.gz) = d092b4d17356ed34a9a7a79838b76a487c35d99b26671f1ddfadb85db810bda74b3db64f7734e30114429cd8fad87f13c04ca462c6d3bb56dc1f78855d7b9def
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.gz) = ae46da84fdb8a17e60c91ef88049989eed666a96
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.gz) = 1ec7762cd142ac3eacfad76ebd7f018d
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.srec.gz) = b76ec124d80dbda9a425bd14737ff88105d4c053
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.srec.gz) = eb446974d31976ddac9313a0a45ffc084dea1bfff75d18e6544f16cab3333dcaf6e62cff59b0cf88070985c1ab7a4c0285cdd0b54eb75d73f538d45a80be9256
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.srec.gz) = 1eae8b53f9ad020c3a39d67502e74888059125f1
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.srec.gz) = 3c2a22221dab7153f7eb41daec3a4de3
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 0be09076adaccfe13864e71c9f1ed8085a515401
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 7bd72d9d584872ca346e2ee6eeebc8e8fd06a7e655acf621ad1b849b440ff66a33bf71650738a074732845c2bde24acb08e1b457e08abde3234d2972da370773
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = cfc81eef00d46e0c1deea04c9364f64e87d637db
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 11e04b25355c8c60ba97c142c21ba8f3
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.gz) = a68f5f892312208526869378614a6c38f0ce7ac1
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.gz) = 7b298f7fe80f77e2283c407af4736c643e3b0d0710d43bbe809dda43660344caa948ebb07727ec80cf19065eb1a30ef24c68d0249d2cbc9598833c14f36a04fb
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.gz) = 431a3a8bf7ea9aa86b7c82075a2c6272ea9f4938
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.gz) = d1cfbf1aea636ec7f9b36760eea32d08
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.srec.gz) = e766bb842b698937ab7252c0bf6f325f1ec2c7b6
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.srec.gz) = 832e277c2366f3379f104fe68aa927b3c7358c40df62f393419ae9f2fe30a989a532f4d4cac8dd821ea07c5707246329990e64ded734cad1c4e755a59cb59402
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.srec.gz) = 44af060baa21f3c09fa3e283cde72a7171f6e6f2
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.srec.gz) = 058b4dc450b1e2e5fc14136e4ccf3743
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 5130e72edc460e5bc620f9101c6b260db4417ef3
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 53360173909b40e40ac018fa0f5211a74970d3429c85c182f59a6ee4ce782f54d707f2d6205d9bb5f4fd5b100b074babec12bbaf178f74b867cfba5964aa2ec2
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = db94d2cc9bfc2eb2fd44e87d47be4b273aa7533e
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 37e4e9464364847ad2327d6352019047
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = c8b43df25bfc2e9171d6ddaa73b436f63a9c7085
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = 73d80744cb6154342f5c3d36f8849c2a9686c1318fea913b840eb97e3177f1b225f4cb9178a9e15b4cadae35579c2258b38d180d1aedfb0e9ffa00543b1cd8e6
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = c8e8dd4c41e4e88fd7bc0c34420df32a00a941b6
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = 53e030127285e17b67640e9fd98af1a6
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-ALCHEMY.gz) = 9f738766737db8cb0f2404c4952bb75cbf407669
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-ALCHEMY.gz) = 1298e944b4d8495905e6649476cb8e1bf49719abf2d2fb3ae55f5e1416a2af3234310047926fc261264bb12b8c40d09159a42cd978297cd6ee4197249a34561e
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-ALCHEMY.gz) = 53f5c1646d7811b99d2a6bade48712647802264e
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-ALCHEMY.gz) = 7315ee909933e50ada51ab5652ad0d2f
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DB120.gz) = ff83b1a41048bcef21a723c356d5e762d1ae697f
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DB120.gz) = 400430bfab26962e450f73640ca169fdf4f748ff34c63dac1edaab893f58a3494a81ecefa807bd80cdf846213d004dcedeeb0b57e785436488c26a66c06ed685
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DB120.gz) = aa36f1124c77777325cf30badccc02f2353e9065
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DB120.gz) = 8e6dfcd4eaa37591d2648cfbead5b650
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1500.gz) = 5e4747aafb2621b40c0adb250613225090d8f219
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1500.gz) = a24d3164c5f9eac497b338e99fd04881e9fb3ea1e25844c4d9927383f306b9d0fe16e26f61e33ca7fcc47be9e6b1a04b2cc6b397f51187e49c5683714ee4880f
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1500.gz) = c90b133fd12b1327cbf8cd0229df26d3b71774dd
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1500.gz) = b691ce9b6e0e31b0945fb7ff041e336d
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1550.gz) = 62ac90542124d3b65582b7c5667e545fbd7b1145
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1550.gz) = 29622cc0d471a80ab095fda13f2d06ac32d4757d2a2ce4c4c7a54b490b6445ee86c702007de54ac9fe81515566d7eca3805f2d1c4d842a49d8c752df4d09099c
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1550.gz) = b624724146136eaf312d9be3cead0eb8f55445bc
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1550.gz) = 0d30e656a06c9c5ab86c9097e08b2ca8
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz) = 83ac7456a68f04283e651f472160025d9af2b256
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz) = 1c36d9ef350ae385688a4300af725d1b2ccc94ca3f6eded04d54ca2dcfceb40d5ef8db88610428051598e7a1504340ab86bfda25d96bfc3b454aa74f0f35ece7
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz) = 59acc8c3c660bf2256966b58cce5df78cc6a4da3
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz) = a64c723ecc8ff566fc859d155bf288a5
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-RB433UAH.gz) = 8af25f51ed2e87eaa234c4bf43a0c8adefa3c267
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-RB433UAH.gz) = ecfff13379b5e6a657670f69aec3ce471a593505e0f6284f80c0b4f3c4c903bc9bb7d9cf0c9385e0b0f5288cc141bf5c21e56250ae17107f53ca38152fc59a13
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-RB433UAH.gz) = 38d8fcad12171bb0209eaef94e137483d6d3f5e5
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-RB433UAH.gz) = da92ce6119755ebd89fe27c24f452aea
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xcomp.tgz) = c8f5ff5ea9f9bbe231f92d8b7f3bfcbd2897069f
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xcomp.tgz) = c7590075195019078b68ec5f87e36479ae2e7b7749c523df4ef21c9d881c343cda9f5c2bba897dd313329a76fe5c18e920d92827878d98ce08a7dc776352cd02
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xcomp.tgz) = bc60e267cb6e11b4a7305f8b7074084e179e0ff5
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xcomp.tgz) = 8e58ee51667def3bd015f79769c0d932
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xfont.tgz) = c551bd13179b9508c2e3a7e19cec323e8ba21844
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xfont.tgz) = 764527f2f3f4686759fcae3fd093f4e00f34e1249994126221a6f9afe73d4cf8ddfbe8b8311798da2ed38c52466a44bb26ea08ad5aab1c08eebcc9019b4223f7
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xfont.tgz) = b3a365bedf8b4a20f3920d0e33b9a42fce288953
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xfont.tgz) = adac8939da213a0195cc1d351f979199
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-ALCHEMY.tgz) = 0adc8f742c596217127185e8f9e4db43896d9299
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-ALCHEMY.tgz) = 35865aa4e39ecbf9c8f4e48ac85b804b571b1488de729cbbc5663deec75bdbf90a229ce99473975ea46715d502442497a596fa35ed89e5d3602c3b1221db6676
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-ALCHEMY.tgz) = 8a4fea3817d615408966528475869669efc69701
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-ALCHEMY.tgz) = 94e9d6a99aa8ad762dfd71d5c2c5a410
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/base.tgz) = 152709728189dfceee8db96c9b793229d80514ca
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/base.tgz) = fab7d3d262ebc5bff7c6edd891b967dc10f4c274b33da21a874ef874ccd1f1917afef30cccc27efce5869296e9bcec95584fd6109a48abd94b958b231a5e2fbe
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/base.tgz) = e52f8333537d524fd1580d0b07c9c63414fe680b
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/base.tgz) = b2dae13bf91a2929948ee84429598111
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/comp.tgz) = b04647e2ea51827ceff965350bff9290cb4e1da7
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/comp.tgz) = 15b6bda11ff6d85a0e1696a2fbd174d1b060e606f52e7447d6c25a48de41f03e99e8601f098c6604608e3a056096c8b17ea6865802db353a018860a3c563d387
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/comp.tgz) = 0ca46bc47c48ba36c8e56b9131abd9d61d5c7ae6
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/comp.tgz) = 5917382e90e63ec66e687546760a8532
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/etc.tgz) = e55b4d17ca25e42c4a0652a40106d64eda9f8096
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/etc.tgz) = e6286e75f5ec6591a53162c332be61b976e4e0386d429aa675cce295ed8fdb90d62287b244eecd0e0341235a637bbd593f50164dc8f589ac4f969991d2a3f0f9
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/etc.tgz) = b45e18e794d732b11dc8eb3ef733c2dfdbd0155a
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/etc.tgz) = 2a4d24ad39ee26ad3bf2a6c9d86381a2
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1500.tgz) = d6c5b3f1074c70e13e1388d68a1932cc11b6a3ff
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1500.tgz) = 6ed5b668ff52a75aeadbf11b1096822b97f01af47d8b6b171343feab7e10258cc02b04e151f37995bc85cf6a7c562c4404181c8484a3aa3d593ba9a2c934cd04
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1500.tgz) = 3f5750e9b576ed3e05624052d5f69103eb32c61d
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1500.tgz) = a4513305f6d3e69cc52c47047d89de2a
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DB120.tgz) = 2f08fca9d13f265f4d560740a55bebf8b115dc37
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DB120.tgz) = a4a2c6e1711da7562520ee189131e499aa65ec114f713cccd7ccb94f55d9e845a253607ec2219284df1422ba5492a0f24004b8088601dc807aaa2a925e14bcab
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DB120.tgz) = 018c1be32ee04724b86fa2ea173adbe460f63e50
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DB120.tgz) = d89deab24227d2179a680db2c9477357
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1550.tgz) = efd95e1f98f8ebc28f7621e5696b7ac148091aa4
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1550.tgz) = c67276ab70bdfef9c8a9b9ace43ae950a686aa630f0bd11fb06c533cc463faf41ad1bb89d5a6f2cd6d4d04914ada697da20ec19924720aeeb4d5d1282393cad6
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1550.tgz) = d91cfd72640e117cf952ea3978af6ad106fbed88
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1550.tgz) = 1e914a5acbbc55fdab0a70d059171d99
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-MALTA.tgz) = a5da116a64f3b9e840cd568391f7f755a1ca3f14
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-MALTA.tgz) = aef284a501e6b2cd16293a5689c5c798dc6bfdc0879fe2cf212b43a4f9d33e9f7dc863f7020c6eda08c8958e713412e5b531e0af799c4695d327c4b66206030e
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-MALTA.tgz) = ed3afb30019e8ac95a9a7348c9099827de561edc
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-MALTA.tgz) = c85bd4c68c3458f9581c45a240f5e1ab
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-RB433UAH.tgz) = 64f38dca64142a0a8426e216cb8edd0884551603
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-RB433UAH.tgz) = b0904e89e80ee6b16f9a97a36974ac5e8a4a7ca8dda9e5f4b27de218fd824d9515ad446574337139aab25fb290c6a93a177f4ddbae7b7a92c8daf5586c87f727
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-RB433UAH.tgz) = b5e20de5b71f3f0880f714b49e0c39a54d19736e
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-RB433UAH.tgz) = 687ac6220a984373b976c5e73cf23240
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/modules.tgz) = f46c0e5db2b77d898161bf6e3ebac55b05413047
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/modules.tgz) = 04dfd0379e10923c47b740c5ceed84f69beecf5a72f581885e5c4dddcf9d241499578e6b7a435a119ef8be74909878620fdb700e6638ae119da59c635883aae7
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/modules.tgz) = 1b674a6cc66d8c1362d66acc69f99f1e0fd70bd9
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/modules.tgz) = a3500877590cea3b09db38130581d10d
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/tests.tgz) = c0a06d6671f0141559bfc80c076fe6f0b2d87003
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/tests.tgz) = 114f7f7e299614296fe2b272a172b9c1d77da42dfe09064c6d9fe9a6450322a38a3c1fc403348aa536d2039884899200591b59d653a3a7d89d22ea22b1750b29
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/tests.tgz) = 4833a7fb848401385159dd129da45d96a9a7b180
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/tests.tgz) = fb54298f8aa3423bcf7bc43b3fea488e
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/text.tgz) = 91921b0be07535e75e97288e49ee2bc0b3c9949b
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/text.tgz) = 336ae450c79b99cf2f2c64a9b378125904c2b7f2d2b6de8eb0f8cd5a2b735cc7a55fe69b599daed3e3e8ef9c51bc6044d994e6dcda85adba659204b92724b814
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/text.tgz) = 3e1e8f989f25749485c0ce9471dedc141cb73726
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/text.tgz) = ff542bf96a0884faa5df5e30d2ac2ff5
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xbase.tgz) = 6c4272f0ef26a4f32eb393bb479f62b2b7142bc5
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xbase.tgz) = 568a69f2077f011b98792eb1f71a8b7bf11251f42ca8a082559fd3d836a6afcb7eb05e77331b1cd8b996731c4fddd4ddc8abc6b82cc3c4d9460827e52dde424b
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xbase.tgz) = 4bcb45e19d2da3ccb065977c5cbdf640144afb8f
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xbase.tgz) = f7cc64d9cdf50d1c85923eb835bc6dcd
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xetc.tgz) = 19444f8d1799d782bc72d2684588b1479ee5976b
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xetc.tgz) = 0075efc99fa5c63bfce8806d5bc083e3e68bb6e9dc885b382353dff0bf55b85a27608318deeeb504833cc5abcedd5bacb45b943bc3beba42e202d08ed368962d
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xetc.tgz) = 32b296247a2f343a49473e7d54987c6d87229a38
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xetc.tgz) = 7d63fd2d8fdbb123792d61e4fa3ece2f
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xserver.tgz) = 2f38506d78bb7be30d5cd8719f3c137dc28b7f92
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xserver.tgz) = 3364dfa7db892eb0c1c92ff50c1e321687300a2cb572da25e55ff501d958201fc3f2d916681778de0879ea20cb31ccf30766038863e0b97e4ca52365b5dcbf51
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xserver.tgz) = 9a26ea480f7ff2ce07a648e0004dcabcadb8432e
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xserver.tgz) = 00b808e0f27ff7924b22f2c74b1f7121
-SHA1 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.srec.gz) = a05b722b902910be1bda3a582d3ebc850048ced1
-SHA512 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.srec.gz) = fcde1c3163e2973f213350595dd38d202524e4f125f14ff48b68f9d569f10788c8796123e051ae72e64b786452f60ac7079ae59390333b63252a8991ee1a1786
-RMD160 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.srec.gz) = 2d4a3c604fec21934e0bf2c4e987c8978aa8bce3
-MD5 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.srec.gz) = ecd58d8ad5bf459ed7022e72580b9942
-SHA1 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.gz) = fde4c37b9543ae150854af55c5c34243e1316c05
-SHA512 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.gz) = b72c9f6516e3ff03e64c6598e153893d6beb5c64997488571bf3aa4547f2f251b78721fb4a23892470c8b352b0ba3a6c95f2e0c8e450918533ed1b9cbebf90ef
-RMD160 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.gz) = c37277dcb3eff20bf03c9319d4a6766d1f869225
-MD5 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.gz) = d6f55d866675b4e51178d7c7daeb7b6c
-SHA1 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.symbols.gz) = baff18cdf467ce42a54eb77e9774c524c9ba347d
-SHA512 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.symbols.gz) = 530df115006eef8bf3f3ea78c1bc1b8a37e90dc460fc8c3cfbeb70422bcb0a9ef52fd116b5b9ae3a9eec83fe60cd3a32fa0933ac0589e2c68c831978e7e988b7
-RMD160 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.symbols.gz) = e4ed20740fecd9b75d635d99567d3b67f5ae5cf6
-MD5 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.symbols.gz) = 6c54f00839d4980e95252520ce7a3814
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = 134fb77bafabb2f5cdc53713cedd145c6695b5c2
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = f21c2b6185b6ddfcca9f1873239ca3855165898d537f4ceb6fec7818ae157ac95b143f559c77be261d4fa3c427e0579d5ecdcdd6047944d0faa94681b8375c16
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = 003133387cb76ab3a8afcb59683cd6d117e4dd0a
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = c99637f4bab91983011482c5cd8f84e7
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-ALCHEMY.gz) = 87f20bbd047d0c7b793c4ad98ecb01128565e2c6
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-ALCHEMY.gz) = 25a0f40f69c8fa908265a4e757cb64c074f47442b3f9e4d6051e7024042d2685b4e01bf3b0081d603bd633523b8f28c3570b93f5886a4021986b03131175854c
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-ALCHEMY.gz) = 4f0ded0dec635ab37d6e43e5198a3eebb9d5432f
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-ALCHEMY.gz) = 886795f8573d66ada3b5bf8f8443cbc4
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-CPMBR1400.gz) = f90b68d7d1fb37b69896657f4060f0dc1c196951
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-CPMBR1400.gz) = a639799a0431ab22cc468f7168358416ff6095a6015cfd783406b24a6e62f1dc38a978c2c4875cef999654c3f0fa2f8cdadaed5d0283fa05bc56db9ff89d4c68
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-CPMBR1400.gz) = 5265e5e99e360048b07d997d3bf0f73b806f905c
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-CPMBR1400.gz) = 5447c227f2147295b74c3cd9a62efa60
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1500.gz) = c298c37feb22bee4f641ede6c29b82f55a15fb43
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1500.gz) = 9ac3727e8f9777042fe7aab1613e910da72d07fd5b8277349f2b538f620f6ac34cfe5972fa72a91275cf99ce0e98e062bd559b169eab6cf9700d0065262d2d98
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1500.gz) = 45fbbb985b1bd77331e018f10df8d95d17c12af1
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1500.gz) = 3391b8ea4799c856e260069f7a4a0761
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1550.gz) = 2a32d5bda59467bf957d1dba8f4c716c553436bc
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1550.gz) = f5b499dd62317cda4483cc70f65e56d7a8a6be0095dfa1a3836158b6615066237ecc13b3ca66a11545a47a938ec2f2c54c27c8613d16f931ba0b3a8bdbabd2dd
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1550.gz) = 52319f5ea1ba91f0e3d762df4580873ae8015f3f
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1550.gz) = e55c5185cd7d35ddf3a8aaca93be4598
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-GDIUM.gz) = cd1ba889150b543a42b1abc72bed2da50a4705ee
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-GDIUM.gz) = ba267fc4d44531b95167b3321c4b6f2885902a8a19332c647ea325ba2ab37e7d48a1753d2ebe3991dde1ea286455b1062e56242b0d7804b9db51bd906fc6fa46
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-GDIUM.gz) = c4fc7d36e9e1b9d22f04c85db96894267551ce4a
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-GDIUM.gz) = 53fbc4ff1eabc437ff5546fa12df92df
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MALTA.gz) = 18cb97fb9b5fa551a4230460d66174bec28a7017
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MALTA.gz) = 5887e65233675d5584c5f8b9d14ab70b0368ad9c9d6e085470f63f3a37a82d5adfab7306866fa55303cb73668ab8b836082609da77eb5ebb5fb7b05fcf36ad03
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MALTA.gz) = 326fb5286d584548044d264ce8650cf9b13e3901
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MALTA.gz) = 06f4d46d9d802dac0954390934246fa3
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MTX-1.gz) = 95b45facdc9fa0b69709e7e5505e3849eb3c318d
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MTX-1.gz) = abf3ee530bf7a515fb2f4d93ff50d5ead425232171eaf33ecd9fdc56fb0ee37e976aa918fb3a153b0c8d8b7b51cf288bca1acf7a9a61402d149818e83ff70296
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MTX-1.gz) = eeb4eac3e382e41631e8f3f8806e2c3f10355a4e
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MTX-1.gz) = 36da2e3383b17e5bf06844c414dc239a
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-OMSAL400.gz) = 44841ceb6f1af159ff6056ef89884da1f3c7cb3a
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-OMSAL400.gz) = 7ed282421374238ff02c9ca3e413165be0d0b16e1011cdab9d4af9f9b3b868b05d5832a8f24ea396222035ebf46ea3b02b2eb49cf378f93f26d807192a5b6458
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-OMSAL400.gz) = 7b039a86fd581c56153a113366efd278414f9921
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-OMSAL400.gz) = a8bcd078458637f91753faae2c99c8ac
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P4032.gz) = e14fd9558a2cf7405398aec0f3df97f846ccbbdd
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P4032.gz) = 4640b39a386e0223ff255ddb9796820a249e34e25eb2f550cae3ca36d2a3af7eeb2f0133d084323b964b8aa3db93db462db2bd3debdd78388e71eedcce37a48d
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P4032.gz) = 845c8595b29846b3ad87272048e0d5ea18413c2a
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P4032.gz) = c2e071d630599cb393bc13e4db60a187
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P5064.gz) = 11fecb91f2c90740271dcc51a7fe5f78cfd35281
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P5064.gz) = 076c38f8684254a744cb14d592b5f0404d5a7944cbd486b2b6da4c4a1057057029f5f1949f007ad5255d97466ca5ea1b5af047566823526b7e7804280b0206f9
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P5064.gz) = c2e78b4d2da205e8af4b8bffe97e71b78649917c
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P5064.gz) = ae9f3bd2236f924b501fc6d0ae0b42c0
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P6032.gz) = cd8af99e05c16d79b574f176d0229bc363c3f094
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P6032.gz) = f1375dd13b2950afed3a0b3c9217a0630da47ce52fe467140217a2b29706e68354018d2e5c4b0ab7b16a9af119a66b6430cdca1298275dfd1d9b22eb65cd9ea3
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P6032.gz) = 0af7124d320813134c90c509027396730e0bb758
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P6032.gz) = 277e59364f2ed7160337ec3d20060a9b
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-reth0-CPMBR1400.gz) = 55565c142f55fac5076d21a61b0a5ac8cad002ee
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-reth0-CPMBR1400.gz) = 8db0765cc0d2affa6cf5490d766f577f202c89d6694fb8e57f81c076257242ad47439fa9e3d46c738d2e1dc1bc306f951fff54211f48c4bcf3c27ce672db67bd
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-reth0-CPMBR1400.gz) = 015a00aebbe3f9ff27bbc38e50863794829c34a5
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-reth0-CPMBR1400.gz) = 994571e2665c04bfc5ed50709b09d74e
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-sd0a-CPMBR1400.gz) = 7c23499487a89cd84aa8b4a429b097e8ace4c0bb
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-sd0a-CPMBR1400.gz) = 1a517e528904e379b39f740f0335c93de12e1b9398fa0564ebfd702fa064b75dab85bcbbd44f2f5baca767dcc61cd79bc7415648ed346e2e4d15ff3c2c278bb8
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-sd0a-CPMBR1400.gz) = 95ca7bbed50714a1aa9694362565c4219305a9a8
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-sd0a-CPMBR1400.gz) = df9de39483767ed081aeb4bfe5d87f23
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-ALCHEMY.tgz) = 5835e5112e44bae1346420ffc0f3e09a2e4f6117
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-ALCHEMY.tgz) = c3b2ad6f9678403cb3a6e0b8dbd05b6717aceac5472eac0c2bad86dbeb30b509f7a8b865daa499279bd524a10b075da08f6fa9736994cdc4633b0f67b0ac22b6
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-ALCHEMY.tgz) = 3b7c2006143846db5c3eab27c2f881dc22ef5e05
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-ALCHEMY.tgz) = da923fa9431ec9e4349f58d50bea5adc
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/base.tgz) = f0e2ba7bc4f19f19c71a28de51c4359ac56a6a44
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/base.tgz) = fbf1b00664f9a8530afad453e1af05ff39741d87187d25e3e5242c06fa013e6f6027d40944ef82fbc12c0ced24e90824a135bdff8ecfd69b04f2ffd03aa8d065
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/base.tgz) = 581b658d659de51923f79c189fb4dc75201aff64
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/base.tgz) = 185928a3ba27f23a06356b0b0df0ff4a
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/comp.tgz) = 66f0609c617456757b6563e94e2feaa2f788d2df
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/comp.tgz) = 83bc3d7127bbf0bb9d86f015d4cded042e1c0cdb75efdab00fd7941a7d96e8b54893b54a36b489d221dcbc17348473ba73287708f031b2ef37e0288074201400
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/comp.tgz) = d8d32c55c767525effee5ea75186373d6c253873
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/comp.tgz) = e56af26f877a19649c558c9d3ced6e6c
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/etc.tgz) = df85d74c9f2767c9be3de45d693f13547ff9e3da
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/etc.tgz) = e06ac6ef086e5951de773f02fe83c16ca1804611dda15b1dfcc0a44e81c3e6e6acf06b94480b0f643ef63e1a90c8eea81b2af4302e82801c033705418201e66a
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/etc.tgz) = 16cb173c32cd73373937f89eab796e5bc987ec96
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/etc.tgz) = 81f8caccfb4f464cf105f293393f6c78
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-CPMBR1400.tgz) = 1da339adf6e178fd648cf87cc4d2b5e1ad0bcc2a
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-CPMBR1400.tgz) = eb2c935de15c5622d5752c949b86965ec587b5c36c5f51ae2b801a9e20482772d1d728563aa70b299ec0316bc71f7754a0c4fb2e9795c01effcafa9123bf2029
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-CPMBR1400.tgz) = 3dd811b1a249023ffa47e31969f4086b9e156a15
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-CPMBR1400.tgz) = bd1349e129ae6367bf0e3532935c2317
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1500.tgz) = 3f3199d94860f1a97269132ec110acb983133723
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1500.tgz) = 1a1ed387d0902cad78598dba5c0a088e231594d16b4f49ac73c082f5c05f972b1a8e5ab5f28b97b23d696297cc9f334f1c8bff2daeb8a386aebf1930e3587007
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1500.tgz) = d7f81fc610d0f09a26d14a082c9a143283d8594f
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1500.tgz) = 54e6afe80b72e44b94d994d2465d63f1
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1550.tgz) = 22c9cf65d89b9042f2b47316b99368dc0cad4d45
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1550.tgz) = 3d2e737026c76a192d4461234be70622682563a14584ba8da5272be018a711dd108fc71f93d8251f8851246f8998c768f4a2f6e81b7985482dccf1fc166b5138
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1550.tgz) = bde90234bc61e0105d5b7d1b23c23cae81461f84
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1550.tgz) = 2905ebd9467c3a2ca17f776044ac9b80
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-GDIUM.tgz) = d7085296fbaf3357d9b3bdfc107c0632b7855d24
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-GDIUM.tgz) = 8841e72b1c725be15c37489f42254fc84feecfc2bc90050a4360ffc248ec14dce16dfe41ed8950f198c6a13fe78f287ed53d5545a9c0de775161de52994c1c21
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-GDIUM.tgz) = 49552df226923fde73b20818fcc3b88859095252
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-GDIUM.tgz) = e24f2b056cbf42955f24fc45075f2836
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MALTA.tgz) = bbd9390fc5aee7d91c0fe0651503360f32fa6498
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MALTA.tgz) = c09a032170d82e55a1c32fc468e6656509c99e9ee2a661255ed92d663c0605e1836afa2a098b40cbb9f6ca16854973733f6aacafafd129ca752c3ef569434f76
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MALTA.tgz) = ff39a003e6a67114cbf0cac19c38f958cd07cc14
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MALTA.tgz) = f9b7bf0cc95c4da411d9342dd2ebe8b8
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MTX-1.tgz) = 5d4fb7abbffb58499873b02451e2d87e3818cd3f
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MTX-1.tgz) = 2801b511740ce3310fb21ed8d1d1bba46ec2565721bbea394e1e1683c05984a88b2346b6949e90dcc737929e2919fb752661582984b27ea4c726ca6c70fdcff7
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MTX-1.tgz) = 5b55476b98c8b0610bb7b03b15a457640b03df95
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MTX-1.tgz) = f185c47ceea774af477cdc675e5da827
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-OMSAL400.tgz) = 854aac9898f3c0552fb0b4491d45dae21dc084b3
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-OMSAL400.tgz) = eb6aa82deeb2fa15ea59198d3ba10275eb73b85a902af353442138df9b66307ac2a595a61824301e56bdcf3fddea03414fd7c312564d039fb8d75fd9159cde58
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-OMSAL400.tgz) = 0fc4d0bf3a667e4fae2f60a504a4032751a5bb84
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-OMSAL400.tgz) = 53a48a5e4731a1160347ad6c655ccf5b
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P4032.tgz) = 9e8cb0ee684033f08ba0b4bda5a4eb16eac71fb6
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P4032.tgz) = 100f84c1ca2763695d90d8b65822c0ce4156c5c51236be33e395dcb7e68c806f979f7afc50c3c76457c82f225df32c44b7cf42c9c8a183469ead0b512a5880f2
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P4032.tgz) = bdda2cb2f34b84c0d46a8dfb7ef72bb6f3562018
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P4032.tgz) = 36f64c61f21f88c7d6067d2e9b1476ab
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P5064.tgz) = 8d6f635c7b19fe4b4ae3f81b8e55782ff929a275
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P5064.tgz) = 4382b4df12950d3ee601efd85e13a0b3aa4e41ec9ab7f1bb5024d1b198ee8c588592c2b50099354f1164aedb585ffd7e9dd123516f32f1f30c32cf78e77fc70f
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P5064.tgz) = b0bccd6abe423b957c452d1d42f40796f42533d4
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P5064.tgz) = b9659cc8f1fba16994a78e42ba17d9ed
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P6032.tgz) = 86427980342dd947c57c838152ae64d15cff5142
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P6032.tgz) = c86734213f246621075f8b35f51997d4abfc722502a4b8a3006d8224b1808871fb9103e539ab7ebf730dbb94377c3f75cd1596a3f7d3fda2505cca879c4608b8
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P6032.tgz) = 75aa0da6324608e7055e923ba1004f5427c88770
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P6032.tgz) = abcfe72de3e084c79528616c061d70ad
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/modules.tgz) = 66831501dc768e732c9b93cd102bd84f078ea1a6
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/modules.tgz) = 6b50ee54d67e9f57f125ac1eb0f1cf849f566a2ca4055032f708d8bda121b8ba96274c5fca21deec4753a3bbd64e18ffa66fc0548b363f95b5c0d0d4f2690dcd
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/modules.tgz) = 1db5ef74be63618d39d44716face7ca5cbafb86f
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/modules.tgz) = 47d708c50d3fbb3f170883f337a84a3c
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/tests.tgz) = b87c52edef5dae8c13e4982f742d107c6bde617a
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/tests.tgz) = a227c03925059ca58390063e75c934e9bebda7f2944478302ffca4f53a48bf991314c4bf837c4e833aa700424e154cc62526f76c53f23ac7281457606e975c20
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/tests.tgz) = ea25f7257b61f3530435a9dc66123831d59e6c43
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/tests.tgz) = 42da5bef4121a88ef7ba8e89bbd065d6
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/text.tgz) = 38e7f089801576d8a7370546c8f6dfee8938c54d
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/text.tgz) = 4694ab32a63c7a00b2da8921e278d14ac83dd114beec338716a98cfbdbe7c06ed07abe0d6a10b317b50a9deeff4f4049c487458bfa9cef043b92905e9f4828e7
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/text.tgz) = 6b4ed0dc8220b79963b2cbabfcbe1ae449cb4509
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/text.tgz) = bfbab9eee77986403da3513d836616bf
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xbase.tgz) = 71f5a25bb86649bdbeab0146bb32c76329afa9c6
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xbase.tgz) = 70afd5fdc176eda270259b113d7f28cc92fe2037d7bc84cc69a2bb32ea05b23bf26c10f834fa9d59be9900a2ef780b55e5e181d6b1a88ff51ccf35488d28fa22
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xbase.tgz) = 95a5dcc67edbe81dccf5f90e0125e84a6f267cfe
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xbase.tgz) = b0a603b80fceb0f5f0c02786d87542cc
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xserver.tgz) = 9be61698fe883646972e3441d1ea02e16fa351d2
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xserver.tgz) = 17d9d25171859208b00a7e64dc74eeaf4a2533cb86d7be138227aa731a09654c007bc4245817177dc2308d693c1792ad247bc0692de79e3b0dd8e5d2257c7246
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xserver.tgz) = 168f6c36213258b1f7f3019bc47434a58cf68a54
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xserver.tgz) = fdf224dd21749c1a2eb06f6ebde96338
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.srec.gz) = 1148ef0c3e4745f529e78b33e048e77a2357b107
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.srec.gz) = 127eac81b94185bea670ef1766abe38506310147c058be948614bb472cd97444402c65eef69375c39d6bad518b617a2fcfae314095c94c9263b322e061ffda0b
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.srec.gz) = 88a878858ddcfbdcc82d30efe6db396e12324245
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.srec.gz) = e0fd06b18d51bbed126e558fa66a0124
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.gz) = 388abbcf174f34d8615308f4d9387534d0dd4973
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.gz) = 6aa9bcccacbb410b5f0fc8fc905e78bde3af777913ea3c2035cc6f9a6e4a436fefb7a3afa987403d16a6f1e7151cec117391ba0d146679e7c0c4c9ab1f9727dd
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.gz) = de9ce82a62f7f24c1c78b0bde362f0e4e1d66293
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.gz) = b90209535b8a3e40f5d020a99bba9813
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.symbols.gz) = b1199797080df5d8669b35bcde9172d628bee188
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.symbols.gz) = 3b4d915b17ba81bfe9b4f9768841c8a140359ea07121d88b2016f0712f42de965f5cf37dca483ba718d47743da6c300b38499ab5c93ff1978d10622e203f84db
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.symbols.gz) = cdb363ed9995287373ce565c3a6a0a4c0441e9cd
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.symbols.gz) = 16a4265a582c47946a7bb8ad40f93856
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.symbols.gz) = 067b86e211cec25f5b7b826139195679a7b13ad8
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.symbols.gz) = 7d4006e0da241ee8b44572a510dcdc33d14cd543d46022faa855b1a554832309d0ca756702a0c7eb551d0d2b77643bf1905153c59cfabd9879e8057d4d9ba89d
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.symbols.gz) = 432610d592a1e11d09d2c6de9bcfa6eb8021e2cf
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.symbols.gz) = 4c03720d979460cbb6b5311c54214642
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.gz) = bf85a74b3aba2ec80e8aa7b595e34ed729b9beba
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.gz) = efe3a15153df52551b5542dcceb8c41c9ac74a56cb9e5e4fb2d531d0d933d6ea3f8555831e8e9b707d724ae15cc27b79c790232fa9c5ad142f71b6a15ec61e1d
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.gz) = 4299849406f323f0f65a40f74734a1cd34206bb8
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.gz) = 54ed1ba8d8009ba512e9019f905c0368
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.srec.gz) = 2f72f6fe9f6a716994fc2dd68ae51c6401c7389e
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.srec.gz) = 4d8d6a4eebdda98b6a8074ea33ee54f729bff3e8e1f8c5c47699819a3cd29d329853bf0083024f9ba3a8893a2255651fe00232408433de8654308d27ba72560d
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.srec.gz) = b05f15e41052f8ab490d7cc00367eb5ce2430bde
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.srec.gz) = 1b2e3da6a2b2dfea79a9669561f04413
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.img.gz) = 963fb1dfd634ec77183e0e19e63add5d6f515a46
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.img.gz) = 670195305b6eba8bc6cd2b5a05bcae746dffd3a9bcac873d61bc659893de97f35dca7707d073d9fd2e55058f99f83102364bcaa64d0fa9954aba2bd42eaf297a
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.img.gz) = 4ff261bfda6f964c67273e2c6cad05577ff39cc8
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.img.gz) = b3cbc16d9f2d3870fb9c137fa21b7625
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.gz) = f74b0a7d7afc324d7b463780fc6cbcee71030e28
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.gz) = 894aa697fd0f0968e534db42528be520c74adec169dcbd2d3603cc262d33e23092253494b072f7239f1542b6237128d8c5069616e28e51422dc69d0bca117d1b
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.gz) = 7d00ed85fbb611948f16e513072f2a307fa46d83
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.gz) = fce468eda12d673785cf7b16c7f4355c
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.img.gz) = 0dcdbfd5853cd5ee3649e1bcdfe16e3133128dce
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.img.gz) = 0654c6b68a52bdee61715fb8b2b1af775f4c7b4a034d11ad7d4cf9f31cae4b8fb327a78dbabfaefcf6d68352ef8be2b4e71d053c97c0c59a24250358fbf47589
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.img.gz) = e307e29dbdc57b0843e54caf02092c38dcb11cae
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.img.gz) = 444e406bfe16f2653bf60273db88dc3a
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.gz) = 54c5de8e61a39b7114fab8a4a28036ae9d44090e
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.gz) = 092f45dab2ddc2cfb79b1c1d649f3a86f169a380c01b7016737bff28b4404a47871546c33e89fe43a6db0255556a2a1cfb2bf8cfd725a852af2c19dea35462bb
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.gz) = 30903e7cf5db4e4f57334f71240da21f6e0fbad2
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.gz) = 229f310637a0c65b47a078f2a6f0df82
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.img.gz) = 5046cdf7029475b3c2d6f8fb0eb9ac766d55d568
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.img.gz) = db6f4a419ea019f46205cbb75f76bb8a35bc9d6cee83f9da3b776abb3f83334a60fcad2ef6de4041c0ed3b0689cc259789ca2517dca0e101fd46ede807846d20
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.img.gz) = 42f2c254a99df74b42ae21c1a89d42ca1d8dc105
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.img.gz) = c7b61fa28cd76c1c694fad7becf124c5
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.gz) = caf9b0a77c6adfa8d6cf1effad83b107ea9c5976
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.gz) = 14db94aae558e9e3311e667343468625f309cb71dafc7610f029e6b6e27267ad6169ce21320d6fc512bef2cba49c3f1919d396fbaccbeebe49e8e53dcab865b0
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.gz) = 3a12875aed7924a33df8290b73576ecfbc8dd752
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.gz) = 20580d5bd36fc097ce824bf9915fae05
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8536DS.gz) = 54b88ef9d752b74a27f85affe9d162bcb43009b2
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8536DS.gz) = 42903a0d5f74e45d00cb48a4cca92c164e26097791048f2cc1c2b7a1d8b243cebe9f64a3daba9542c12b077017e59c1d0d6c8a8c11ea120855f0f40cc7ff8fb0
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8536DS.gz) = fd7ac6dae359227cb757ae1eadf39b1fe08e43d3
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8536DS.gz) = 505ede4a04c4726a1121a17a531a74d4
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.symbols.gz) = 9c6ab2ce83f2ca09cc8789a9431638f7fccdd64a
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.symbols.gz) = 8ffdfde54ed60c89f642b91c6e434fb4ed4de6ed91009df3bd70556e73f6eb5cc28b7bb3090823cd8671e052c5d52bb15eaf8409e779cbbbf4ee6776580b67e7
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.symbols.gz) = d52adf8dfa375abc8e4d0cfd7a414afc7b44aef9
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.symbols.gz) = 6bf07ac6f2c54f9b46171b57492b6c4d
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.gz) = c4999c62d6e7c7c8351dba57c34ed0213d2d374e
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.gz) = 2acf7209a186bb3c52c54e49660c76629fdc8e80e73e1b77beb23e6b56c7acd1d985c958f152c8692303c41d3a4bdcb753ba00c232a772919ce106b1c439d697
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.gz) = 9a5d70bdff7b5208eb2f7f6bc2df3b72ce770588
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.gz) = 777ada452ccd51471ab700f4a6f9e652
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.img.gz) = 2a5de49c3e1b5a2f4455ea780f85d185b26845fb
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.img.gz) = f1f740403f47dc84dd3935611f4e1f71d860c202baeb8b53c23c4c4c6543f9b903cfd559465f7a5c3e1e59a8604f0194af556ebbc7000592cd532c7895b25287
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.img.gz) = e974201a8d50e1c9a77bc34a4df289e94a58e966
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.img.gz) = f710c52befd5c32ae49e90b7f74f8e77
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.symbols.gz) = 89c1b110f3a260ae41093f65323a11028f37826b
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.symbols.gz) = 30c988a3a2b647a1c93a95ab3bc7fcf0428f89dcce44152f81c2a58af49f5e6c95817650f5affca8a83ea0318d913a0ba20c28dfb6b7cb3027dce2c5561ece52
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.symbols.gz) = 4838d9d57fdcd79da40dbf3fdbbf09e77118ff2d
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.symbols.gz) = 5b9c0173413ff799fe5140db7ab9c13b
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8548CDS.gz) = fa0461c820b70c326f5f2867ff081cc88d357aa4
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8548CDS.gz) = 436d573a0b468d6794a9fc16955bca56a7b726c3e0e306f05e6965bcbd109ebf71fff060b8afcda9782043bd5389e961f1bb191d9b9dd209b385e64e448eb63f
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8548CDS.gz) = 01ccef4bca33dfd5dbc63d901d9b006a930858ed
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8548CDS.gz) = 9c552da04cd50465e8451c12ce98ac4c
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.gz) = d8431c30e8c1e34eb2b721d51f10e2429b542cf9
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.gz) = 1d111341a7439e63ec210bc09c168cd613b114222241cba494f19e6bf582a0085a8894e1a6a8842b7b1c6f8ee5f2c8b39238b9dd714727a053637cbb59a1f77e
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.gz) = 47a3f7ebc1980ce1817112520f13396d6efa2d44
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.gz) = 4875531aefe44295429c200a8dbbf3d6
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.img.gz) = e7e23c8fbe61ca6ef52822a4fb9336be7168abba
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.img.gz) = 6c78a517557651386736d048efb9953b4df3350b411291fae3029074ad0dd961f128ebcac4e6f14dd56e53d43465994972ca29572fbcdcd8793f713df74a3e5c
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.img.gz) = 04ea401821e981bff21fd61d8503608fde540bb8
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.img.gz) = 3e5f6b82afebe7b1ab5de3fca0bd75f0
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.gz) = 22aed20110feacb4634479f3080db81e3a511e30
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.gz) = e0934031d3b963fe5edbb5944b92a57c8f4ba4b496d8c5ab6aed555012a53f73bfcaba7eebcc1669bd6a308603360804242b7c37e92c022872c524c159c92f54
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.gz) = ad1b890f8ef6418a1ed2858dadafc7e99729b6bd
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.gz) = e935df1037b38d1a903359f63aca6df4
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.img.gz) = a3b023c3bf29f930fc5ff0e0c074e54e23141963
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.img.gz) = 3d1c0b86676c2bdd861f7e8e4e20d6a34d1a04079d908b6d2ef5404b1d00ec1f394a8b13fe5d4b4906c996d1912777e0f52ec367ad6e1c9db64cbd22931347c0
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.img.gz) = abdf86f9c182d23740543843d59e4dfcb05e59cb
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.img.gz) = 84ce6f797d900ad639313c55e64178b2
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020DS.gz) = 8cc216c33fcb3f59904067c3e9294f0369d6f1e9
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020DS.gz) = 6bb4dd7dba52e6a6f4dcb76aa5218ab893deb64d57a87048ed5dbf882c13e92646ca89a037ebcba5211407363a9365d2bc9296397322dac95374e3f03bd88e51
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020DS.gz) = d8f03ff91019223b562ee52da049a4f71facf379
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020DS.gz) = 958385f31a4f6b1a234652faa95c6c95
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020RDB.gz) = 9140563a57548b77f93eee35e2615f4a377612d3
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020RDB.gz) = 1fbddd9a55f6669c1f2f48dd96b7147cae93a2d5642b262a81669fa4a2670d465cd09347a6f9b7751baa338935114bc2ba2e67622e2f524d9793628274f92625
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020RDB.gz) = 3ad3d010c5c0f34a69d7b49c7c1d639f7c5c3618
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020RDB.gz) = 094787fd9d22021a1b63422895976203
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-PMPPC.gz) = 8f72cbe7df21613d6b796b579ced2911efbe66e3
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-PMPPC.gz) = f4f11445454376ec9f83f9e3072421a8ccb7bee9b1aaf01aee70a6c044e0de1156a5fbe28b1243e8efb334adeb70621e8eab875c44f590fd0276114a26d8db15
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-PMPPC.gz) = ff1f745891b1c4a02836982de15575afe78c16eb
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-PMPPC.gz) = 87d0847ec4707e24c58146eb0475d1aa
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-RB800.gz) = 139b9c2b87b112ab2d6498e726360504d0adedd1
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-RB800.gz) = 8ffc6ac565bf37ee69f8736d7c86738dd69ab7873b77ec062a12a442851559e4c94c903f76e649a21984efd4b98ccaa97333177be635807e6dec8a17bd421880
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-RB800.gz) = b6724d690aef60f63c4b1339eb6ce514e0886151
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-RB800.gz) = 2df5233415f6f20f2af441b4b54379b5
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.gz) = d5e489629cc8d1b2903e541b944a123cfc0937bb
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.gz) = 77d3eda4223f4cf9120a7e84e8c61917749462734c5adc70d95e3108a1b151e0ab7518092d37ddceead9e9047297ef47f4712de7eb0dc05f4190ab60e775d313
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.gz) = 15568ccc03d6a06ebdaf407b6d2b4ac07985a0f1
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.gz) = 11d3fcb67c3ec63c5c43ab5bfe06c0b1
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.img.gz) = f001160c675e3d0f73978743c88bf61561a7b10a
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.img.gz) = a85072ff3b1a1d8b9e35b40b1bb49f5065bad003f603add8330de38a71c19028ed54e377534e4e901281ad5eb65dcf73e8657a39bffac9645e6fee6bce7ac391
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.img.gz) = 31480f15986b52f445cefa8aa4e056b6fcb74f1b
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.img.gz) = a0719a86fd17f9ddfa5131e58f77622d
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-esata-P2020DS.gz) = 50b925468b1ace37856fbfbd4fe5363ed187b4e6
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-esata-P2020DS.gz) = f8cde43dbaf1744d7dec3437beb43be1b73178fb95038771a52315b5b54f4ae369c9261c35b710be563b0bc9be07e4801100e012c8313c564f3bf66845082c31
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-esata-P2020DS.gz) = cff81475ea7ebe293bbefc4088d5dcb76906108d
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-esata-P2020DS.gz) = d79a18ae8aa921fbd0df460cd5e550a3
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020DS.gz) = 1c75ca32cb0267f982916a5fb2740483e5aa9f7b
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020DS.gz) = 99d1b928ee2674f7dd22a10ea6c3cb7b24f5bdd4961a5315ad310e2189cf4508bde00d9b752cf3eb6843c3a461f748deeda4f395206a4973be55165f6f17c9ff
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020DS.gz) = 24d2b7dab4018de8de5feb65f23cda0e8b4c1502
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020DS.gz) = 6fc3a2ba5e17d4ecef5cb52b482761ff
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020RDB.gz) = 342dcb5cc506d3272737f3b2c0fd16b7221ef429
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020RDB.gz) = c74ccc79f91ac3780093676aa88cb544da9cd17abaee1c1d2692acef50c5f13c4ff1e6ea4c334c43242f20460ca6f08406c1514f4b84cb7206900192699b2e09
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020RDB.gz) = db206fd4eaec146d07e71794320de0e680bed506
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020RDB.gz) = 6a7ec6e8e8a7a2f75e60073154234efa
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8536DS.gz) = 3c9abf574a3c5dd2c38ef5af3433ce2123a30192
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8536DS.gz) = e58dd95eadafef8b242ce0894ec809b1d73063f7142cb0d6ce42dd03f5a71032ef3d31ef09e19f9cd6594b5bf65806473f560e17f0d505f5491c3651d6f9e930
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8536DS.gz) = a419d3af2732cc85c1fe0ca06322e0996a7946cb
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8536DS.gz) = c900656ec6ae14a67385ea265639a500
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8548CDS.gz) = 14a02ead1d8e5963e96ddd3a5b3b2625202d0011
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8548CDS.gz) = c51940733928beb1f9beb280ecc642dd867317be5d0ca36ed9e0e01b1c8b2a1d788658bdb822e4b7be358fca34fce4620a9e2afb10a265007824efb965dfeaf6
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8548CDS.gz) = fbf09f5e31f3b61a3cb4f1cde889a2c91635cfd3
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8548CDS.gz) = a4094ff843bdcfcd143957a0fd15a01e
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020DS.gz) = d5125242574b57126e0a9ed0b2c9e18ba47ba7dd
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020DS.gz) = af9b230b2940352e71cba43854b29418e2d1c6a51cfbac7cfcc801a4c1ecbc0605d055fe673fae7f244a421058073f921f1cbc8ce55b3131017138396f2071ac
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020DS.gz) = 7e25cb6632e7d744f60572c578fe34ea1acecae8
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020DS.gz) = 3659db43dbb405a80a675b7f2840c7df
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020RDB.gz) = 9a55d38b7e6f8c5b274ab45f20794feab61a6264
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020RDB.gz) = 15ee2dfc4c476a54f0483facb66aec9b2b743775df471353ca1e443522119af238bebf7a986413d6cfac237aec8242180499b23fa85b85017d20179561025ab8
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020RDB.gz) = dceb778c7ea33542379775b8481122d7e55f9e98
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020RDB.gz) = 39f5865216f1e2e37984109a0cf2c708
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-RB800.gz) = ea5d21d649ce2a6c3502b58446cbe747433dcf12
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-RB800.gz) = 8748659a4a7e79a6b4b00dcb90ed2cf8213c138d4df7f93e6e53bee63f0c8f6c9a837f9522c9dba0580226eaa756473640226d1f4edb688a5b04807cb588730c
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-RB800.gz) = 9fe62c16553ca3e5955d12ca7e59cd0336bba55d
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-RB800.gz) = b4a5d575b02cf078c5c31542e5b4954f
-SHA1 (NetBSD-6.0/evbppc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbppc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbppc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbppc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbppc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbppc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbppc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbppc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/evbppc/binary/sets/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/evbppc/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/evbppc/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/evbppc/binary/sets/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-EV64260.tgz) = f49583bb3bdb33b9eb3b0b4136668772da20f45b
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-EV64260.tgz) = ba5c1437d9a233dc818880e72de7746dced45081a2fe998ca922c51eaf404bce9f42f7f763a611485bb518e50c1e4da5a6906d0b28d01b9cd3c9f1be4d8c2761
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-EV64260.tgz) = f477b6948cae222002fa140de299929d9d9807c5
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-EV64260.tgz) = 168a599ee54d18f0eab734e5717b2984
-SHA1 (NetBSD-6.0/evbppc/binary/sets/base.tgz) = 660713e719fb1be5824c7b5f573730b9d1408922
-SHA512 (NetBSD-6.0/evbppc/binary/sets/base.tgz) = 366e7065fad6b8e8a7e593fa5790eaaba11a8ad49006730fc01fba2f1d7908a6ac1ebfc88a4cf7731b1d31b3e21dd5d0aa5c5433cd4f01ce95254735da15c772
-RMD160 (NetBSD-6.0/evbppc/binary/sets/base.tgz) = a460662933495846dc34b422fbf2f2f3b7141068
-MD5 (NetBSD-6.0/evbppc/binary/sets/base.tgz) = f527c4156acc659412d01a00756d57f3
-SHA1 (NetBSD-6.0/evbppc/binary/sets/comp.tgz) = c9caa7ece23746ea1423f1cb05924d7aafb69081
-SHA512 (NetBSD-6.0/evbppc/binary/sets/comp.tgz) = d60f9bbefcaa3331646da3e9bd2738cf11e357807ce64619cd48db62cd3c72469f39113b04883771c610c63f74e574941add1d83ee2cce2a7b13e85e844b9eaf
-RMD160 (NetBSD-6.0/evbppc/binary/sets/comp.tgz) = 2db97b320a8befeb352b84a44e32b3844648b85a
-MD5 (NetBSD-6.0/evbppc/binary/sets/comp.tgz) = ab787a55ed8b6765619f75f613914955
-SHA1 (NetBSD-6.0/evbppc/binary/sets/etc.tgz) = 01f15943e5ac9e3d4885c4391f332b3367a96483
-SHA512 (NetBSD-6.0/evbppc/binary/sets/etc.tgz) = 3d69692f01bf9b9dd36e719af4f2e99d7c9aac0b92925e2751b0ff8ff7651e37f948d18765fda1d1841fe8d97a7869674d584423594ad1ca48da8b4c35e0a3ec
-RMD160 (NetBSD-6.0/evbppc/binary/sets/etc.tgz) = 6422793912a3843dafb20baa3c9ecdc10305262a
-MD5 (NetBSD-6.0/evbppc/binary/sets/etc.tgz) = 789c56228f05a0cf67d1917ae04862f5
-SHA1 (NetBSD-6.0/evbppc/binary/sets/games.tgz) = e7bde1f51127db8c3a7d15ec931c915806661f0b
-SHA512 (NetBSD-6.0/evbppc/binary/sets/games.tgz) = f39fcc09a9b81a604a29c968dc74264a42c46ccc122c9ac01030e6ca01c28967fb7e20d8fa182f2ba07ade376a14a802c2abd06154c754f907a9879b7e7ab52e
-RMD160 (NetBSD-6.0/evbppc/binary/sets/games.tgz) = a09ee1c7811eaa0ed3aa1ca0f85e1279b096fc46
-MD5 (NetBSD-6.0/evbppc/binary/sets/games.tgz) = 81e8837aedbfcea8d6957f192e54545f
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS200.tgz) = 561ca3ad31c44deca4b197207d2a2e6a92ed4bd4
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS200.tgz) = b47b23e9b6c3efdc389ce3b47218eea8da190734075985e7ad009a10addcba48e565efabbc3b11c32e220d6059fe5114ae77351bc72549e8b8f37be98dcba27b
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS200.tgz) = b2058d6a4e4fe11ebb19f429347a6ed69a1b014a
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS200.tgz) = b2ea5966c8110677fd107fd4029242f1
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-EXPLORA451.tgz) = 7a6fe1de68c0fffedc5918ffabeb87ee71ad3da1
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-EXPLORA451.tgz) = 2e30f89fc77fd9bcd9310c4d12379245a18aed68b661c037593870c86ea806edb62f32a433f46e4f4c205c2eddfd86c353c3ca970a887a324b4d9eaf952b537d
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-EXPLORA451.tgz) = d68c12c132889e9cb48e003811e9c2de7fe41aa3
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-EXPLORA451.tgz) = b5ba93f49378f17fa86d91832a97d63b
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8536DS.tgz) = cb9e2b4befa9231d5c6bcf52460189d6ad18fe85
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8536DS.tgz) = 937bdfd98369d438c25a0839e50cac22602b3766db5f359d31825445c156fbe94de24956584b0668bf5c1b09565733c5dc4e9dec8fb5c034f5764edbf8241bff
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8536DS.tgz) = 63389f49fc87afc7227318374fa8fbb130c1f076
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8536DS.tgz) = b4ccb088690ba31893f554c22874c25c
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8548CDS.tgz) = f17cacf88747cab418fed98c8f2d4341d883c45c
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8548CDS.tgz) = 13adbfaa5c03713aba913d4bb08f6c8f654b3af210164d111d4c5825bd49ebc7ea8b0b4e5dabecfe685cc9ea9bbdbd0c41cbbe3e3a4bf9d497186c0cc15ed3b7
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8548CDS.tgz) = 5e2198d8b2c62f629a2e41ff422f50f0d90b2ca2
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8548CDS.tgz) = efdf3c8e143e54c672ba669c5b2211c7
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS266.tgz) = 3dff6cb4cc77e770b17e56dc132fbb3ecafa65f1
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS266.tgz) = 6309b5240c155074f7f0ad04684043e26886283d81369faa2c5d5ae202a82c5fad980c1101cb5f03fbf50e61b78fa87cf5ce633ab354b90ae0f267c4fc03dd92
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS266.tgz) = 22a0af77fbc2dc62e11aabc36b92701e12a23624
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS266.tgz) = 776cb54622eca1a207cef956b8fe9a2f
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-P2020DS.tgz) = 6ce50d8dc26e08d660edc8daf9b4c35e2a03b005
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-P2020DS.tgz) = b04c1630a1bcf4ac4855e4242c5cd12b82c846b371b6257abb99ba4b28026c546ae914d68ed31ecfc02d952aef81bd8fa50879c698735d453bb0a8ed72131fd0
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-P2020DS.tgz) = 16938708031722094448b4a613dce8e2acbf8c63
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-P2020DS.tgz) = 94ba27899a9ee3756ec7084e362ca968
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-P2020RDB.tgz) = b0bbfe5b10d1596af93eec4960120ebb23d00411
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-P2020RDB.tgz) = 536a382b932643d9e4a65dca9f4601edce766799da3e291484e9460291ce4168b5cfc59a39bb1169e69065bb65d1ff8f56caa98651d643bad9f33ef35b219d0f
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-P2020RDB.tgz) = ea8619e5c65fa02151fb23136e03ee8889f68ab4
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-P2020RDB.tgz) = b14ef5c3eff1d4c89afb1e9d883aa3d4
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-PMPPC.tgz) = 56e8d8a4c533163eaf18a2b9cb988e0a61be8174
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-PMPPC.tgz) = 87f5c77334788e59662c95dd073e3fa8a680f840ccab27e839fb405cc942941d5c2459cfa4d93a02179ab27fc6e75f8d3c957c3c95e5e271a404f64ec08a0b19
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-PMPPC.tgz) = 7160a35f527dc620a2e67e17a22e8cbdffd8fdfe
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-PMPPC.tgz) = d0459860eae7ad936e2b318a2cbfd7ac
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-RB800.tgz) = 79b942c2076a9219525ec9da7b25da3a21488675
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-RB800.tgz) = 0c9462c4519ed0fc1b378a7abb23c3a89768d6fe128c726e2847c6daf576757492438d4cab244e32f1bd7601f1a3e808d79f874b3480e22abff4a45b9cc5a8fb
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-RB800.tgz) = 6c7309b72d5a61879c3151d2065cb70361ad5c70
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-RB800.tgz) = 9951a8e7708ca609ec9abfb3b313f03b
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-WALNUT.tgz) = 0a60e6f9a6fbaa8477b05baae64d4b405c9c252d
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-WALNUT.tgz) = cf5e16c71fbe6366c41503578254a5be9bacf01cab691f3667c6b3b5ec3413cfd30f3dd00152a7c0dea73effa0f46fde1070df5aa29db02c021bc60a83d2ebc9
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-WALNUT.tgz) = 54ade37dbefe29a6de73720d7900ce68b7dff1f3
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-WALNUT.tgz) = 4f92053a06ab8e494ae5068657a449ee
-SHA1 (NetBSD-6.0/evbppc/binary/sets/modules.tgz) = 3297a716bfbfdb870519304912c1f0ba834ef318
-SHA512 (NetBSD-6.0/evbppc/binary/sets/modules.tgz) = 586c1502a8fcb99323ba75ca343fbb8204fb80a00de8b09aa6722bc4d7bb142dd35bf023f11ef981f5ede707dec673dc1040578677216cb0aab2e1d9d871263d
-RMD160 (NetBSD-6.0/evbppc/binary/sets/modules.tgz) = bb87c0bfbb41190443d888876e2f6329f8c5a0c6
-MD5 (NetBSD-6.0/evbppc/binary/sets/modules.tgz) = be483e96c1f3eb3a155b17fe7097d398
-SHA1 (NetBSD-6.0/evbppc/binary/sets/tests.tgz) = a9c5bab23ec89b45bc96550385064ca681c1aaf7
-SHA512 (NetBSD-6.0/evbppc/binary/sets/tests.tgz) = a629539a7f807f4cf5651329769924fbd42102b4e9f96b4aaef254d1237e0ff4b6a55a9a1968bd6aaecf5f4e4db667fe59b8e2afa8232b80af4372fc436eed18
-RMD160 (NetBSD-6.0/evbppc/binary/sets/tests.tgz) = 8f786bbb44342927ecaee51314d2492b228ca507
-MD5 (NetBSD-6.0/evbppc/binary/sets/tests.tgz) = 6d2a4b03364dadacd276c5e908c6053d
-SHA1 (NetBSD-6.0/evbppc/binary/sets/text.tgz) = 9b944538cc5e87133cecd712523216a783ba97d7
-SHA512 (NetBSD-6.0/evbppc/binary/sets/text.tgz) = 7d87e8bfe246ce56e93257beac1808fd00160911acc22b5abcfc4de9125182d982e69709ff8e7f5dabd2454024cbf2969d836cfec0bc8b314f09143654648e99
-RMD160 (NetBSD-6.0/evbppc/binary/sets/text.tgz) = cf2dc7ca65a246453309df0e94e804c5a04b0719
-MD5 (NetBSD-6.0/evbppc/binary/sets/text.tgz) = e8220cff6b33bd3cb4e91d50573b43ff
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xetc.tgz) = b6aafacecaf76d99a4c3c428e33a23633419f52d
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xetc.tgz) = 9257fc58e039f2afc1ae7f46a7ed2ecdd1a13e67a76960490e89efb8fb12b44100a465270469058071249e0864346ff4dca825786552a4a8ddc804cc7a90dd33
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xetc.tgz) = 6c17517837ddebee9482883db92d1542a89835b4
-MD5 (NetBSD-6.0/evbppc/binary/sets/xetc.tgz) = 77d81348f7721a447c8548aac150659b
-SHA1 (NetBSD-6.0/evbppc/INSTALL.html) = d106438243f94987f5d126102e6324f6c1ad274c
-SHA512 (NetBSD-6.0/evbppc/INSTALL.html) = d83cf719d3601674fe54b1fff57a8916d342ca9924dd38eaf3f6be43a3d109b85213d4217a5ede1f54734644d1e062437a63f428063cc3bf66166c6131860cc8
-RMD160 (NetBSD-6.0/evbppc/INSTALL.html) = 991e52340a15583f9b28560cacf1d10a5e8a6617
-MD5 (NetBSD-6.0/evbppc/INSTALL.html) = ab505dcacfa6b669a830b026c43d929d
-SHA1 (NetBSD-6.0/evbppc/INSTALL.more) = 375545e5f7e921c1635e3538cfa3f615f58ba82a
-SHA512 (NetBSD-6.0/evbppc/INSTALL.more) = d2c28cbf4417afcfcb33f363f3c234403f60c3899cee910767c9dcb7c8f39ef2f1dcc84779e67c5ad386a162ba886c37dfc64d4c7e8a70a3b0fcba1286a5a059
-RMD160 (NetBSD-6.0/evbppc/INSTALL.more) = af295999442791298fff266b84d6ab1a92c3cbe1
-MD5 (NetBSD-6.0/evbppc/INSTALL.more) = b21374e21e9e0599b62595c1aca77cce
-SHA1 (NetBSD-6.0/evbppc/INSTALL.ps) = ec4c228a542dd84139f5eb00ff550be759020a10
-SHA512 (NetBSD-6.0/evbppc/INSTALL.ps) = f784251812449ee49a2a2f69b54e20aaad818e0c07c220553da4d1c34676f843c7f60472c750a3dbe952725aad68e5abdf5dc19bb4d3b90cb742d8fcacf1334a
-RMD160 (NetBSD-6.0/evbppc/INSTALL.ps) = 525b9a28bed1478b2c2ff4a94da78aaae125bcc7
-MD5 (NetBSD-6.0/evbppc/INSTALL.ps) = cfa9f4c9a173353430edc81cfe8a37af
-SHA1 (NetBSD-6.0/evbppc/INSTALL.txt) = fc26b26f28fb8eeeb5bb990fc72d9c3d57067350
-SHA512 (NetBSD-6.0/evbppc/INSTALL.txt) = 1bd1da4343b0ab19075682a1ea38e33c7a0e11aa2253bae18a19dfb82c99c2b21b7e74e28f0952cbe6c3499a00bf412e998309b52c0c6fffafc868fd5a370e43
-RMD160 (NetBSD-6.0/evbppc/INSTALL.txt) = 9d44c454ba9249c02ac948603f1305342bedf9a5
-MD5 (NetBSD-6.0/evbppc/INSTALL.txt) = 44b21d90e58f137302ac1c96f78914ef
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEX7750.gz) = 99907a8b29592f20a683481b351d6c3b629ae74d
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEX7750.gz) = d25c300a0bef7432042f22856f899b60993f739522f62d7c1450da81c6774d01769d54f83b1039ed7b97af8ea4cabd954f8017b77b35d0d1a09c47baa09f0cae
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEX7750.gz) = cca19d946d47159fc455f36067dbd3cfee7f0f5f
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEX7750.gz) = 2556834458fa65b30784812d6defbce0
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEXEVB.gz) = b4fcb725319fdf75cb8fbfe3cc385f0546536032
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEXEVB.gz) = 3ae3fa47d5e760564ba5309b5bcbd4ca32ec52bf80ede5764811779acf73c206643cdfa9b0020b300ee70d75af820aa28ba798663ea962b16af935df79c9e4df
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEXEVB.gz) = 697977f6961f8dc0b2204532edc875fc23dd309b
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEXEVB.gz) = a163b83287053245cd74d74a2c66a13b
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-CQREEKSH3.gz) = 3bc3953e940f68f2edadd93f79c8ef7c841c4000
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-CQREEKSH3.gz) = 532a1d96716c85a6b77ebcbeb19560f2e402cbf68a50feafa6452117b477285ca05a0c86dd073bf9c237b6156fa59b42c05fa5c4029739b4fdb277a0c5238e09
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-CQREEKSH3.gz) = dad35f588cb96a63d46bad58b6f4e565402ecc3e
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-CQREEKSH3.gz) = dfdbab13faaee507abaa31e6b1819e30
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-KZSH401.gz) = 6bc4eb9bc72f6ab2412a0f4db523f849955d12e6
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-KZSH401.gz) = 80208e8df1f7c9fdc60ba1558c6f7182d65d6f96f7d57afc3d41887908dfee3598db6e82e827d2a9f14106ec262c4428fcf1a2046dc847c7993cabd9e6e668e6
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-KZSH401.gz) = e16349b9d4c834165922b78175d291af77caa0d9
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-KZSH401.gz) = f95e0f3c93cff1ad0ea5667fdaba435b
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/games.tgz) = 37e15b0950aaaf1af36427ae5dd5866c1879b6b3
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/games.tgz) = e674abb1b1966acbc581a8f8b3e37841f48656e66f3302077cbb2de443487912b99521336ec5dc096fa3c7769b2d7623e1d1720a079407ec1861d32159a72ebc
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/games.tgz) = 36070071e8315d2352be1b3e563ce7ef7625d184
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/games.tgz) = 0016145b46957b95dd158b4441dfb010
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xbase.tgz) = 564bce6dd7c37b5e941e41d50f363c133fdf8f97
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xbase.tgz) = 23b3306254c789331542e63974f9d7cdc54d99ba2cd67cf6a1c97f09afa4f6cf6aa8798e37b7c38f4a55afd1572154f291fa1bf2e2a1fc87165fd6bd7f89fb80
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xbase.tgz) = 476fbd8301bec0795a01552728ada44204d2dbe6
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xbase.tgz) = 9fbbbdb3acfa4ccd9f0b309ea0ed0700
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xcomp.tgz) = 526a278a13833073e6231e879abdec85400ca888
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xcomp.tgz) = d2081a7536e3d7fa27a363afd8f6eb5fc3de4606f11b4857be2f1df59934da9d3d16e0df3a6edf4cdf52c8f579e0e4c06f07de0959b5213c21be1a8fdc2ee134
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xcomp.tgz) = 4a767ff08e9bcf98f886849cabebd1300397256f
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xcomp.tgz) = a23a2d8be9298497b4b6d39fda330bf4
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xetc.tgz) = 93a5cfbbfdc641f91ab363d4b65d1158d71c0cfc
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xetc.tgz) = 85a67734801e81e129a37b73ae62211459fb16d4e52a945ef21a4bb908dd7d1d775233956086dd3d59af45bcea24fbd6f54a2a9175756d242b57e07d10767548
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xetc.tgz) = 6fb055d0e1b6264bf1ec396236d903218832377a
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xetc.tgz) = af954b56e624948145b91aa451d77392
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xfont.tgz) = 6139c05273b6feeecdfcd11cbe0da91256d12a11
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xfont.tgz) = bb849454ede88d39ca60d6c513c833c2b29ea548adedb9f76870839174a3daa838d38a6ad701c78bfc164e690c5ebda9c9d00d4c23ad816df9f1962313afdbf2
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xfont.tgz) = ea8f123f9f78b429b77ff15c924803da1da2068d
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xfont.tgz) = a87cb6769c37ae20dbf0dd70cef93d11
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xserver.tgz) = 6cd4fdb0ff00ef5d89b47e68e538c86e395b2054
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xserver.tgz) = e3b575cab95e297a05a26a03eeff0cf843d665ebdfd103846ad544bef1d04f93aa20ceab09b1dfaae8f59d89ebb1cbef400b7521bdb41f7542f23156540aa4c0
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xserver.tgz) = 7e52b98276b4d097f7babe918e6768ae9d7945db
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xserver.tgz) = a505ab4ce0801aabe21fe6038b63809f
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-CQREEKSH3.tgz) = 126932a5bc72bd20874c71d76047894c6a7fedb4
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-CQREEKSH3.tgz) = 89727c156d25912c17f801e7cab55d487eff7abc0a9168f490f77313d38eed5a37bde3c0ffbad4db49cc70c335b1147df1408ded59c4b5aeec9a0557a47e7b8f
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-CQREEKSH3.tgz) = 427056f8e924c6346b86a52b73dc8f0e9a98e44b
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-CQREEKSH3.tgz) = 07b32973dbbb2d0a7bf8f397349c032e
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/base.tgz) = 3dc230ebfc3669475edb5f69a61191cf0310b438
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/base.tgz) = e60bf3c63a76db118e7646ddc582150558df14cfde8cb8a6fa74f06bdfcb1f920e6015091ef4763be13072da77e2243b69a8e2739cc8945ec388b8f7fdb2fe50
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/base.tgz) = 5b347ce9da19b214d2069c8dc029cd0448af298d
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/base.tgz) = 79849fe1cbe830a98d8bc0a7db8f4e62
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/comp.tgz) = 882b629fd6de1ec706834199fb45736bb599bbd9
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/comp.tgz) = 700640c27a7453cb2ca1b5c29a2e0558a9cce8f21e4c44e17659bff25c4727aa578f85d3bdbf6da6173c80cac33955ec1731288160b1870fbf92a5df0ed258c1
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/comp.tgz) = 0c3da5c9c5ad1e9d8835040b230e89192f8cc98f
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/comp.tgz) = ae57e406883549f546048ff2480c5707
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/etc.tgz) = 5ef345b014742f576164cd85dc6744b87a4da775
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/etc.tgz) = 998a737bb0964b9bb61798310ae4f979c9e8518f90c482817bcaff1251036e51bdefb39a6b9595f2e313c0df79d44b387c960878582d7721c551882f2a3aba14
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/etc.tgz) = 64d587adda384831dccfee1548c9c09ed5c36f44
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/etc.tgz) = 495f4d62d00649132f218565bddeb50b
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEX7750.tgz) = 364b983f7368d62a6f35a63945026cd8c19c3bf6
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEX7750.tgz) = 8341464294654062caf3c3cfdc1ece9bff1cb6642b9873cebc4520e4ff9a0ed27e5e0106a488ee323d41d77b0bed99d7ad450c35d9d2f805ab18b3e3a941ea71
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEX7750.tgz) = c84e2532d3efe0b47b0db0c7471f9f78b0fd6dde
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEX7750.tgz) = bf341bdb90b335be676be766b8949217
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEXEVB.tgz) = fd664ded3626416bfbabf99bc73dac4a2bac909e
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEXEVB.tgz) = 3adcebf6f3acda9c84666cc1ce39a75302776e0f640cc02024d1ae2a7fb4ef7df14bfbb32e808f4a30fb482fdf181670c87327c0d5ded1145ee0f6bda268e369
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEXEVB.tgz) = f21c49e3f0a4a5fe70070da938296750a222e0f4
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEXEVB.tgz) = 39ababb0c8156e51b2c9b3854286a72f
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-KZSH401.tgz) = 58b48cb56251a87dfc59abd0ae25e8cb0e0ec7bb
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-KZSH401.tgz) = 4c3c9efd94bf1b9080d7355143d40f2796841448a92bf25c6f8b49772dec595915c8d7aa091afffab8df6f2eec40685c5a008ea65abe3ab32f2da6a7000de523
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-KZSH401.tgz) = 5931d576a61a240dacf5dfdaaeab6ac8a435b17e
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-KZSH401.tgz) = d4dfbdffb2514e61fbfb4d7d39962091
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/modules.tgz) = e5078cfd24cfc29249d14a6a6f84de8d27bf1153
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/modules.tgz) = bc00fa4158aa2606925bd8f71698e543a5628739dcaa953ae99c0218fb8d3d1b70c78134cc5554353c612ec7be6fb4efe2f57b28a91a54c87266a9f7450eb38d
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/modules.tgz) = d35c1aa762a049440ce3095ae19f14cece89102f
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/modules.tgz) = 09a7af7e7ec408df3bd4541aa159ee66
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/tests.tgz) = bc89ec5fa64ca7df4c9b4a748cdf2ea437bbbf11
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/tests.tgz) = 011d3773e6363fccfb41d424a51d455d5508cdfb8da226a3a08670c0f5f96a613f0fa5b9818b634d750ab728a8e1546b3c8823b37c91317eb1d0b1cbd85cb0e6
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/tests.tgz) = b5534365eea74dcca99a5d5568c41b3ce79109c2
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/tests.tgz) = 324430decd8312ba548bff34d8197b5a
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/text.tgz) = 8cbc530ce508c246c6bfca4abc898f139da4cb39
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/text.tgz) = 6cb69d7b7019a82cc1db4326cff681916eee736081c55e08d8a7ff163db75deb91ce2b6feed78fd5775224d3aa24d74d0ca594535447826c03f6613792c9871b
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/text.tgz) = 85f073b017e79c9f8069912fe27ac96b7ad84cc8
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/text.tgz) = 72ac1c599c8f41bbe40cad9c17afb550
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.bin.gz) = 156a43383fb461877ca595a24fe433c41bb53505
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.bin.gz) = 74da9a5e48ac2fcc998176c4a8ae90f6d82e4269b071af2922210d23075c5c8b9b41ee63e9a4a7eddf5edb98a7b1ff32d07ea78a3b1ca95f533bc69a108ecb4b
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.bin.gz) = bb94e484f2bfba2253bc36a6724491e54d94739c
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.bin.gz) = 02ffe820f66f7d380b2a35522ea3d438
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.gz) = 0056d5cf3c88e73792a091ea2aea6ccdfa8ae908
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.gz) = 678c13171474bc55453f9a69467b8d85365e6a61e371e212e6e03a75193170bbd033575a46450b11c31724e56eeae77991a225aca564f1e1ca27e625f0dca191
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.gz) = 5303158d3acafe0290bbbbff80db24fb2ca0ec28
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.gz) = 30c622231e6b9daac8ed290bdeebd164
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.bin.gz) = 16ae6982b9df3f6eb4a035477fd951edb3d300af
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.bin.gz) = c1ca446d125f788e8a155d7069247c3d63daf8ac9c99da2ad9f3b7d56e11b4491444f0ff0fdb2f4ff3722834d9e811f38621d4aa22d2f15434beb2d7033a0355
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.bin.gz) = 032c5396f55b50ad489e595c91c08b680d045154
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.bin.gz) = 47885af19837e332b23aea912dd25c3c
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.gz) = fbe844ab7e33356c35da0a05e841a4e01e4adfa0
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.gz) = abd3144c85d886bf6ed4be0315fe8a6f027d7c31be94d4252fc005c243abe8ac92de6fbb6a5459c0ead867de119ec83caaf6a078c6a6544dfc8c0a98661ed11a
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.gz) = a2e21620fb48f5eac2314187bbafd65cfd80cbcc
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.gz) = c3681279fd8bb4637c6552ba2be82ea6
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.bin.gz) = 3abb9efd6ce8a3dc1fe36eda3e3544d40b8fadaa
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.bin.gz) = 881ed27f7a5b433a6189fa71445db10f9525396c230b1c28a6bdaca291ac658ea15b479cb0bea31a9f1e97ce3d348ec10fbb590c46543a3beb0284b3b12cacfb
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.bin.gz) = fae500b91381408aa48f2cbbd2f10ff4f7f10744
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.bin.gz) = 5b3c31bbb5f5ef0a547728d1d38fe0ad
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.gz) = e108054983abed92e290fb262e94a13afa9d9863
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.gz) = d7c0232734a6cca9d6e077da1b287dc2dbea5c195efd838de60a90121f3625b56978327fd28630d04249faf4f780a54a9154fdab5bf52226a1e7744d417d9d91
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.gz) = c1f2c381a07c03b405656f033475ca9faede3ba2
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.gz) = 8c1c70f2f1a89d30184699d3a72d690f
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/games.tgz) = 2040b4af557a62f2ade5fc9fcfe4cab3df88c7e2
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/games.tgz) = 8b5071337dc844042537c24c75660e61c9709cd10cbbeab059a84da6d482260b73365ff3870f85060c130a291b6f02be174d288127ca62ce4d291a6982192317
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/games.tgz) = 28acfa5a131d52df7c157e2edca1dd0f20e774dc
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/games.tgz) = d82c46dbc0021fd4694e464042936052
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xcomp.tgz) = 53aa1e2a910e8eed09dc07f8b724804f53fe5e2f
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xcomp.tgz) = 24645da85419528015cdaefd0c835741fa801392e795b363bdfc39558e75e7f384511c0668d12e2440114b7c543c7532aaec438048f08d35c54c9c7a748f20c0
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xcomp.tgz) = 60a461ffc1f1562274110d65c72a541ee131cd21
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xcomp.tgz) = f1d2650a8d7a4ecd60fda8e1aaf8c09b
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xetc.tgz) = 1636a6fe3e01f6d8a07a19cd204a6807c8caa4c7
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xetc.tgz) = 9cea4ba4af287dd57e591d4269f2f2582010250316f323746ac56b12cefcf2590b93fbb0197c665f61b1df41dcca62d17fb6ad80d4b1feb8ac8265e91e15074f
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xetc.tgz) = 5f68e3f96f7bb9ae07fccdb1d058e4b1307b4b29
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xetc.tgz) = da84d97230787283e215a4ee1c4053ad
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xfont.tgz) = 97439ccf6840b18b1e9885f5504a401bf1a93650
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xfont.tgz) = 3d15541f7d7ae2128f44355bf110415adfa4e5182829259d2c6f7a4217feff99e236d13c5bb7bbeb724ff1a09ac1f58f02bdd6eef528bc416ec3118db6fc7d45
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xfont.tgz) = cdc9fcdb5fd5032803d5bba18db58f3ea6d62c85
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xfont.tgz) = a8466a0477c6c443eafe99e9d1c61131
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/base.tgz) = 125d939841f4c0d2d66af02a7cafcb788e62f49e
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/base.tgz) = 768d8f497c4f735be3799406807852393df11f432b5cc9b1ec69ebe56953f1592a48794629c6cf556eb7bbfed2fd8c0c308b91ca9349256d28ce475a75c44ffb
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/base.tgz) = 94a40312cf09aa8867a6dedb8cdb8b3fbdc00f76
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/base.tgz) = 2f9a062d6116d6c89893fc2d0568521c
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/comp.tgz) = b1c32d11d282303c29854fa152b78be77361dfcb
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/comp.tgz) = 715ed5bd87827f3a84d78b28e855c28ea91944b02c1020551d1fa171239547c7b131f11149fae355ae75aae3059c1cbdbaefaa8a22e6daecf26dd045193bd424
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/comp.tgz) = 25c1503f1c807c8edb6521d85a26c45130b066e1
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/comp.tgz) = 5b355abbc1cd023a56a5d91b06b00883
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/etc.tgz) = 9e2708dd9d1dfabdb39ed6979adb744ab09c72af
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/etc.tgz) = c13a2812104b2f36cf94129d638cdffdd62bb86928eb1478306e205745ea5dc56038e40051da26a94cf56a25a6acd46c86cec2e4e04680715089dc8591d84e0c
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/etc.tgz) = 741003e38321059470fcb7bd727ee4c05add965c
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/etc.tgz) = 474217b3b8eb1c86fba55ed465eb0bff
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/modules.tgz) = a6704d748c69ac31bfc6277d625ba6ecce318deb
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/modules.tgz) = ccccacf090cf2a8dcef8df2c43b99f188d6a8898d30546d2f69341819e9feac6f2fd92e0f14086c45e9afcd462a6e4320ef3fc13bde002f3c697094d2d98144e
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/modules.tgz) = 68a529c0d25d89b79bc283b265fb5fd355328d2f
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/modules.tgz) = d7d56e99bb5ba43313e55abf65901ef0
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/tests.tgz) = 68b5f95807399dc8a592abdd911d015938152e1f
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/tests.tgz) = 2798d89e86057ced5d3e12c7771db2e94a96bd6c09fb49ec5803a56d0c484ea0614a1ea6a8a8647ec4427ee34fc191968e9a4025ca1257d072adcd536bc7c3f2
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/tests.tgz) = 6a3f335d038da0dcb81227f0b909399ddecdb0c3
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/tests.tgz) = 7de6b24e3df249a77cdc4c002259ef30
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-AP_MS104_SH4.tgz) = 74f70ee0502eab199c5d1a5855698772627c4ac7
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-AP_MS104_SH4.tgz) = 76656c9b809e842a7db95daa3a5210f845dbc1a6cc2c05dfcd2d31b4404178ab6c3f9dce8705c4c1f1841ee6d75121fec557ffe25660fa24b492e4ee3f4dde4d
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-AP_MS104_SH4.tgz) = d4e2fc853980b624a04b6a4f895a65ea99c3fa6f
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-AP_MS104_SH4.tgz) = cbf232a6d90bbb23a2ff524dc95d0765
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LAN.tgz) = bd3d26a06d12126b4bcfd594ec43b5b1b2b141ad
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LAN.tgz) = 7eaeccc298861c058298a99c1f77c4bdc201a4dd11704fa3033177412893e3934f4f6018ba26604c0da00d1544f610af3e606d40b647d25f4d758ebd3803e3f0
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LAN.tgz) = 802229436fd22dd4213b8ee964c06d0e264032cc
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LAN.tgz) = d0f7d8401f8a43421267722847806897
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LSR.tgz) = 07c0d72f0d893ce0812faf6c6a5c98d7b3b58035
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LSR.tgz) = 8c724d951a2492d879318720c6e768b86094ffbb935c6107ec0bc42fd225e45ec2ac301bd6bad4e2d8df1b59fdf10f0c68df542369ef57c2e2b4ab537b39efe4
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LSR.tgz) = ce3c2734ca7c81d61f7794add983ac3d40d6c0f1
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LSR.tgz) = 9efdd97f65905080d86975228272f5ad
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/text.tgz) = ec93765a5c45be2526dd74721c706cf2349cbcad
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/text.tgz) = ca1d8ae749a5cae5b06f568bd4d6cfb9b0af76848cac05b3d6bd6e1bbecbf84a76213064de51cd4ffff3062b5ee039fb7a99b8336474b39110d298dde616a51f
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/text.tgz) = 55c63f02b460a593dcca374f26d03b9595b6a20a
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/text.tgz) = a7d639318aac350f9f955f97035a8fd4
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xbase.tgz) = 4cb422608de78100a7b3bb2113f334951a6d8602
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xbase.tgz) = acbe1e8859d013a1756d97db9bb194d7ead04db13102f45437f1e3054308471ca2c2498cc0c60c4ac8f6431e58ccf7ad4bae62a9d8e2b9857689af4c0f637de2
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xbase.tgz) = 94f03b6f83e22818d2c98c726a4065680049385a
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xbase.tgz) = 7e4b59a51385b2d05aa15b0d98179e7c
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xserver.tgz) = 1423504dda963a794f5710462bd0e3b0ad2a23ba
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xserver.tgz) = 36e50002ccd00c6e945a3e9f49f3f210a3bdd5c493aad4932cb81d30ffcc22ab1d11403bfa04859153148bec4a1c57d6f8d2206dc8ee37dfb2ccb23914144c8c
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xserver.tgz) = 23d438695d917fcf7ece054eeea841fe02bf268c
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xserver.tgz) = b526fe22ecba0abf60efad839e21f4d7
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.symbols.gz) = 1a3978b4d00f62cb2ff6277dcdbf79fa3f9bf2eb
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.symbols.gz) = b504aaa9957cb2b08b5656c1c38e35697d38b3fb8f7fe2dcd2942bc0dcbf7d7fd6cfa1ebd79f536a8cb8e86eb1b69a3676afb3c01f9cdd50c2a61a8fa7f6fcb6
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.symbols.gz) = 48c1c3a15270f558fe3b30cbf745a790e51acff6
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.symbols.gz) = e2e15163e4bae081865da32d01514e6f
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.bin.gz) = 873515f4532952c89f5a9f6d91a3f7fa7f948490
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.bin.gz) = c19c7a649d4723f255d79005c6da3caa022857e7a7dfee1afdcaf7db9138d777eebec9a2715032e461ec10129403bbdbb25a5bde1eb84efc2a1e7dc044921149
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.bin.gz) = 18f832108e5af4f1db1314b3d619950f22660c32
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.bin.gz) = 5c15217d997a48ae98f97ef5bc1d9f37
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.gz) = 86b21fd531bdc7e87b16064ae739b5dcb3c92e81
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.gz) = 4e2413b98a091922a7b468169345e4c5090b87264b7232105b0684c2511c78d44a0b0b72f9a8c4ed37bdfb1f24826f87347f883074225fcdd715cadbbf6e8b2b
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.gz) = 882aff308401e9ef5a895233e0759a69840da2f7
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.gz) = fa60323505d7a47e47b73dc44e394e47
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.symbols.gz) = 349e56359f7f6dec8f0ae526b3a789516a9e4f88
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.symbols.gz) = c1c075a4ac229add650e83aa77c6d7efe562793645fe7ca868234f53bd79a112f2198905255f0f03e8bdf7a2e44904146907aaf67da9e41652faa7014686ba08
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.symbols.gz) = 6c87f32161c4c2d529cb6a8026cc481dd1d42139
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.symbols.gz) = b64153e036a04f448159999e4f96b863
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.bin.gz) = 23b1af2b9b450007d33c9c68946d6650f8121077
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.bin.gz) = 51a3cb3daaba5d099524325af6a4f32ed164bff6118e88c1e4a5f33ff8a69df456833e5a041396179660af053bd0d1c6a43b5f72ad524be4e61ae9e833222c99
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.bin.gz) = e5bcd565add34239cf0c2083fad873dd12f4e13d
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.bin.gz) = 54fde28b5da7660812ff14933dabc902
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.gz) = 26f7c3703bac98f6350f5a2423f5d9df4a46bbb3
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.gz) = a0a4afa1c58fe9ae74fc03a3780ce16d10f6f00ed6db84e713e2fa51d3b6fb697e281f412eed74d30206edf624ed3bb585b7706252cee2ea37b85de9ed7fe2e4
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.gz) = 6e9be1eba2d6db27781fbcc035d794758b4dd444
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.gz) = d2d661e75be21be7987c548ee785236a
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.bin.gz) = 9f3fabe29ffe68e56430d35f894893491a16c169
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.bin.gz) = 8ca978143e29fed1916beccb35493521ad70772cc7d4093dd2d2d0bee973e06275abd8167a072db9d79f28d2cba1394d7fd940baaf8d55c84622db60ecce735b
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.bin.gz) = 3ecea6d66ed1fc3adb83b5e68d7b5d03ee2ab8ca
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.bin.gz) = 853aef3ffec3749a8e387c0b8cf9c183
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.gz) = 5ea3158a1ddb01af1b0ad97d2788d1e70341faa6
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.gz) = 9d2e7c9da144cc79317b2e40f737b09f5320b90c920d7927db332ed3638c68b5cfbdda3f8dbefcb74330e98bcd9163d9003666b842ef74aada7b2b609de25b1a
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.gz) = 1f2d464e7b2c50a3c33b0a7d2076ff44627e476d
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.gz) = 79f028dbbb91d2c182523ef5d1a26b1e
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.symbols.gz) = e1393c12d538858fc67c3dbb850099d363802af8
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.symbols.gz) = 1a2d80f70a65e38f036a652bcad7774bbc11df1ef51d96868c988dadd25e07c96c2c19d29095b8cebadc6460b2ed5fd141254313d8e3c3f968098cfc136a1b95
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.symbols.gz) = 50d94667fa3c0d7f63e9a6e202967ca006f2f00d
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.symbols.gz) = bd8daee983f82ce040f96f6f929f273d
-SHA1 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.symbols.gz) = 25a30d5745b993e2102a3786fe1a6f39f470ce45
-SHA512 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.symbols.gz) = 2c6541b1f613443ffd5f7b331a19ec7e8426783232e3fa9241e621ed96ced5e030fcde14e27c1127e336d74f60e21908f2ff4240285df516a5315c37d5e39943
-RMD160 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.symbols.gz) = 5736b4fd760d469af93d177f831ea83e63fcee43
-MD5 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.symbols.gz) = f9ae07f7f20a790a2bba49ed48e9f50b
-SHA1 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-GENERIC.gz) = 4c6d1486cc99844354d97e2b1b2ebd6fe061ecc6
-SHA512 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-GENERIC.gz) = 6f5e544688a50385b3c519e4929508d663e646457c832cd715d0e05ef5f1ef38a40206c90e95356e17cdef5eede141f10371abab306b534087afca9b65536061
-RMD160 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-GENERIC.gz) = 81246f09144ee348e548fa9b7cee0d410ec98f38
-MD5 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-GENERIC.gz) = c861b19c9c0ac6c97350564aebddbe77
-SHA1 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.gz) = 95a9a9ba6a613ba5be0afdd1457f7243f01d7efd
-SHA512 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.gz) = 8a36cc3704bc474e9ca4542c8cedcf59dfb93b71a2a5ad44d4c605f059cc515742921eb6de4b64382735a09ae9a72c1fc14e08107480a5090f4319d196a304c3
-RMD160 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.gz) = 5577d47f6a4429aef2e64789a3ea604718275d7c
-MD5 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.gz) = cc1a04eff2275ed68971e5799b9d8af9
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/kern-GENERIC.tgz) = 81a3b610f413d0a6be35c6de2b7047dc4dd1cbf3
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/kern-GENERIC.tgz) = c9716b08912af531dc5304baac333f34ddc0899bca52dc53185bc48d22217613c03533bed4d70faa01423f0a253d2d03ecc6e1c1704430b28eedaec74110cbab
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/kern-GENERIC.tgz) = 5cd01bbebf5245014d265995f6f96e699dd4bad8
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/kern-GENERIC.tgz) = 5a01f783440f099de1bd80cc3abeb52b
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/base.tgz) = 7b4b71623002896a52c0a7c9efe856a0c95de7b1
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/base.tgz) = 97361d892e6c9618569c1022f7b2c2e3485cdf3f1db8b3da1fadd8051a9241dd8baae01c89ffc4b2209651df13be64e8121fa34e1e9373b877add6a4c497e72e
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/base.tgz) = 93372c7049c0a931f1f408d764c3a25600944d7f
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/base.tgz) = 0ba9f6bb4c14ce56fb8b4c24d28c5b54
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/comp.tgz) = fb67d7d7410b3489167d90ac9eab8739d5981b69
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/comp.tgz) = 123e4214744b4b319f93de9443465a1185a755ad34053ef82ed74b5b859ab2ba08655528b98110f7b90973c2f6fe6cc4567d83117e215078819d5558e4795829
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/comp.tgz) = 2949a78034cb32eaf732d7127b21990ef697247e
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/comp.tgz) = 1eaf1d6e18c59de98043f4e477aef4d2
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/etc.tgz) = 9112e98e3b0e6214758b386e4d49dddff2c53fa8
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/etc.tgz) = f6e54b49bd6585c117474ca5a04c9efecebb63f9c074b5e81fc73bb8c4508d21695f8b6689aa518b0a156c1d0fc3653c5d7487e7f373c5eec679bd7d5b80bbc0
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/etc.tgz) = d797fc90bbdef32b5b9d024d4363acec2abbf787
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/etc.tgz) = eb8800ef4e55b63b58066f1f85001efc
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/games.tgz) = e4e2e655f93f3594f4db543839016077023fd1ab
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/games.tgz) = 377f737cae00cc7d9ccc2eae825e68d08a9f6d09474f39294406699ff7d9ca5a0a4347004759b6da9e3a4fb46f3e7ea14c90183bd0ee983cd3625bafb1712e23
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/games.tgz) = 96e4da250eec674b1f3a795026593364798b6a7f
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/games.tgz) = cefe2cbb2de8304de93b3fdb34c664ec
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/modules.tgz) = 5179ba1557042dd0edf4b0dcb43feeb51a51fd9c
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/modules.tgz) = c1f026f1e1ef0dfb74347a9f846971ec05d9c9cd27d9480b4dca4105d7f87c39678c8c76557a8bec407b985087c2371f47856cb81912ccf0e8e219d8f2b1ba4f
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/modules.tgz) = 8cacd504f4fce3b4547758a812d28fc41f1c29a4
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/modules.tgz) = 17f5259f27b6b9e35e05d38e32a47bc7
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/tests.tgz) = 05f79c3300425fa9c41fb0f6d4b67bbd22143c43
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/tests.tgz) = 5202c4bf6086643686bf4fef3927bedb17262acba8c62bfad92db632d6b545a9ffba8eafbb237f8076beba9da3f496f2da068031745bbad9c042d84b954d7bc2
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/tests.tgz) = 7dceaf484da2d9856cbea453914309af8f75faff
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/tests.tgz) = 379a301eaec46b70599b92ff3d69e568
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/text.tgz) = 591abf75de4e52fa3c188ff87fe5fbf28f541766
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/text.tgz) = 0fa9434b5447025c84b3fccbf175b25fe975e88fe711126a9b0625fa070bcfc05c6c962dc59a57ecec38e97e85455911bdc59c411cb6ea9ba2232256191fea4b
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/text.tgz) = 8ccae27fd5067d3e60148abc0751ed5cfb1fb10a
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/text.tgz) = 93c20890d37a4c4b7aacb3cdd534070c
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xbase.tgz) = 5516e5fd661a6aa8886689fbeab06f0d6ef315bc
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xbase.tgz) = 16f7b97341977b5b7d1629598d8cc250b0fd361f01b2b65afff93dcc97fcd81e3df2b20b42ef37902b64a20fa5a96c48407eac6f0faa8f6467bddfdfa6dcc975
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xbase.tgz) = 55c47dd7eed35b436fb033ce22281a13d3c016fb
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xbase.tgz) = 949eb603afb4e09b5c53facf3ffcba03
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xcomp.tgz) = c20568ce72c1ab65b9b2b7d6063d4b330c67e0dd
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xcomp.tgz) = 5ce8a9f1749abed8c536fabd262ca65297d851a26dd108bf917171ae38dc82dda3ecc4315b5d532e8a393778ed566394c3b7a0cd4d8140f4e9ad275371360504
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xcomp.tgz) = 138ba52cf36085ea08c8f9022fce482e2b119b1e
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xcomp.tgz) = 9267462e8d885667f784d3e444574bab
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xetc.tgz) = 0b6040849347e71dc6694909b064c46858ef7267
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xetc.tgz) = 94cf5fe5f971595d5e17d182aa5fd5cae717fb030336783ec18b34bc054da2b183c184e948b75dda13b1b31468bdadf228682c586e2c1687f4acca2c3545da04
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xetc.tgz) = f90d3564bda34f368372300e7e0f1dbc716f0761
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xetc.tgz) = 08fbdb1532ed26f606faba4a71052f15
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xfont.tgz) = 1c83cc716a88a16e480948fb712c55617dac4840
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xfont.tgz) = b1913d99dc60c680f2fc82aa8d2ff0970cc7c5a712ca412445334cc2b6136993b6fc58c27aecf12d24455bd8ed5e434e4b6e7067b87f8df73960c5b090f4e624
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xfont.tgz) = a079720a15cdc7659a8efc5a3ef574814993f517
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xfont.tgz) = 1ceec721c52139d9b94d42631fb45b5b
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xserver.tgz) = 5acda874d4e98472f3bde4d22ee5c76f8e63753d
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xserver.tgz) = 044bc28fb73dff4c2c50482adc2b69ec1b0b880b40ca25ea528be078b8f1d84e9e797b5238ea5ce0103aed54f5b32d0ff96ab67661156e28e9969aebe33a548b
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xserver.tgz) = df7ea47ab25dbe8529abb8f5dc1d49cd996d6cdc
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xserver.tgz) = 20191a4f5c5a6cca80c760bfd8836183
-SHA1 (NetBSD-6.0/ews4800mips/installation/boot/boot-RAMDISK.gz) = c0d874d928968bc07c4378652d9df32f5ea0367b
-SHA512 (NetBSD-6.0/ews4800mips/installation/boot/boot-RAMDISK.gz) = 2cfedab16bbb540c131f2518ed74ee2692d96d8a11d008a11279d4c4b95cdf52fb76baf81823e49d3037f1f5230c1194a473f9e0fd37b36025a14988f6e49de3
-RMD160 (NetBSD-6.0/ews4800mips/installation/boot/boot-RAMDISK.gz) = ee3f845cb765fca243be9bb84f17162c7a865304
-MD5 (NetBSD-6.0/ews4800mips/installation/boot/boot-RAMDISK.gz) = 42ccd2d2f905ccadd7497ccd4ff91996
-SHA1 (NetBSD-6.0/ews4800mips/installation/boot/boot) = df1c0cdcdea86e38dface2a89e2fe26dc7df108f
-SHA512 (NetBSD-6.0/ews4800mips/installation/boot/boot) = 6007e2ed816488fc00fca543ab2541f5db95f7a6ad44d4dbde05f4a397fcbf667a41290f7fab5249d6a2f80870a6c04a6bf061d8a25c91b496cbb02d5699b29e
-RMD160 (NetBSD-6.0/ews4800mips/installation/boot/boot) = d321a217c04aafeb530f5d3eb29954eda9fb5838
-MD5 (NetBSD-6.0/ews4800mips/installation/boot/boot) = f39fbdcdde61cea48a1e10e426480550
-SHA1 (NetBSD-6.0/ews4800mips/installation/boot/boot.coff) = e0b297b3888ffdfd4077e67124efa2444194cdc7
-SHA512 (NetBSD-6.0/ews4800mips/installation/boot/boot.coff) = 2c465d178b1c8b4688249410c55b6224b06436dc0b42f09028bd1ce7352c2542749a9e3b685b92f670d3401d6b3b207dfbbf549e19ba38bfe3522f09e08f9429
-RMD160 (NetBSD-6.0/ews4800mips/installation/boot/boot.coff) = 7e7161d03b7f04a55c35dfd8c34a2a5debed56c7
-MD5 (NetBSD-6.0/ews4800mips/installation/boot/boot.coff) = 6bc92c0ddea36ee0816580d8cce6167d
-SHA1 (NetBSD-6.0/ews4800mips/installation/floppy/boot1.fs) = e706f91cc1733ab264473d3f1a887285ca79f013
-SHA512 (NetBSD-6.0/ews4800mips/installation/floppy/boot1.fs) = b946e58e4d1318d5be27e7bfc943b464309c02c63b936f3d11f57a519988d8847b172f30e2d61dad13bd672325dd2dc9ad502ddc5ed0dd49ca5583c1c51c1fed
-RMD160 (NetBSD-6.0/ews4800mips/installation/floppy/boot1.fs) = 16d59bb5fd830cf9551e4184bc338b7395bef5f7
-MD5 (NetBSD-6.0/ews4800mips/installation/floppy/boot1.fs) = 1a09cfb0f06ab364b4a5b55754474310
-SHA1 (NetBSD-6.0/ews4800mips/installation/floppy/boot2.fs) = 73d13ad2676d8db24c4c53e59be5cd53a70e7dee
-SHA512 (NetBSD-6.0/ews4800mips/installation/floppy/boot2.fs) = 4841e1aeb787ece67e3d172c2a614655746beab89f2b09a7566d36979b57d5793d0a308122182e1ca4e052257501f460d0e3d692ef701a1c869041b95e452c14
-RMD160 (NetBSD-6.0/ews4800mips/installation/floppy/boot2.fs) = 3fac30b411e6650a18a85afdca71695e7ecf2d4b
-MD5 (NetBSD-6.0/ews4800mips/installation/floppy/boot2.fs) = 4f501c25c15a582ed08e3e211c040506
-SHA1 (NetBSD-6.0/ews4800mips/installation/floppy/boot3.fs) = 32e2072f8bcef77633e24ec29215c45d2a448c5e
-SHA512 (NetBSD-6.0/ews4800mips/installation/floppy/boot3.fs) = 31f812f795fcecef8d5acf1511e0ccf8a498a51a199cef9384e4f197ecb28409fe9dfa7ccc66ea88fdcdfb7c11bbf2a908f3afda7aba16d4adbce172c48a291c
-RMD160 (NetBSD-6.0/ews4800mips/installation/floppy/boot3.fs) = baa412f7b18b72d89a2f7468b5d10bf76aa1a437
-MD5 (NetBSD-6.0/ews4800mips/installation/floppy/boot3.fs) = e0a8da5b5ed80730a3c4ff8ec316f22b
-SHA1 (NetBSD-6.0/ews4800mips/INSTALL.html) = a2b19549f5348d2f1d52980adce6b6dd1c5fa58c
-SHA512 (NetBSD-6.0/ews4800mips/INSTALL.html) = f70a62de3ff88606a2193b8bf01036b6770079bc8e5c7912c82e223d81671f8e2bc6dddbcd1022fce4352bccee3a1c19c90a2b1fa72bd12bf7edcf4dd42fb101
-RMD160 (NetBSD-6.0/ews4800mips/INSTALL.html) = 500263b32d3fd4f6459496b7e9d250d0d048c79c
-MD5 (NetBSD-6.0/ews4800mips/INSTALL.html) = a341d2e552eea54e2887ab795e752d24
-SHA1 (NetBSD-6.0/ews4800mips/INSTALL.more) = 112fc313673a7ec94f1c6a7ab3ba79d232e0b866
-SHA512 (NetBSD-6.0/ews4800mips/INSTALL.more) = 61df394591fc7b7554c82ced0edec2bd62e7a7e98e0203cc908c6fa48f961062a42148b856f2046f9a3d5262de7d7cc392c15e346b0bea8ec5ef2717760dc30f
-RMD160 (NetBSD-6.0/ews4800mips/INSTALL.more) = e92e60dd50dfc2ed354ed18f01cd412f62257367
-MD5 (NetBSD-6.0/ews4800mips/INSTALL.more) = f6ff574342525c12f5e039e524ab23cf
-SHA1 (NetBSD-6.0/ews4800mips/INSTALL.ps) = a5e622805b2d9d7f96b2aae0b819b7607335d8fc
-SHA512 (NetBSD-6.0/ews4800mips/INSTALL.ps) = c8cfeb73d5c4f033877795597dc9edd1dab7902a9753b09127bd9e1875d55ead42746d06b3b31b6ddecc19d876495201736b9ef6c242c357d0bca6d74aac9dc3
-RMD160 (NetBSD-6.0/ews4800mips/INSTALL.ps) = 07d50c1fde4cd58f0db754495c39509f69e1dbbe
-MD5 (NetBSD-6.0/ews4800mips/INSTALL.ps) = 831c1f71243c24726c508a45dfa97dbc
-SHA1 (NetBSD-6.0/ews4800mips/INSTALL.txt) = 6528e1b0d61bf2daab21a1ad8b36dfaf56ef8289
-SHA512 (NetBSD-6.0/ews4800mips/INSTALL.txt) = f2f1d34cc0d64c9764604de75197554e49095f305042d0d729da16a0a8edfa4792ce647d3321072af4c1980367270b7097275b32bcacf841409ba4eaa6e97edd
-RMD160 (NetBSD-6.0/ews4800mips/INSTALL.txt) = 5311f44e35a9074f47aec723c579e2c04e9928ea
-MD5 (NetBSD-6.0/ews4800mips/INSTALL.txt) = 1e6dfee2b6a42e87aa56dbf9f345174c
-SHA1 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.symbols.gz) = 3e4f61e16b7b76ffbda7ab2b2826ed6e47f55cac
-SHA512 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.symbols.gz) = 7c0389792e3d8722cd6187619978b413194ec8aebc17fab04ea75f37207c1c74bcf6f44a70beb5ca6712382b745d37d6e1ea3c87e1e93cf03c5891b583f5b513
-RMD160 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.symbols.gz) = 94f4e2e55d48069e13e05c43ee7688999a9d8488
-MD5 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.symbols.gz) = a1f4d88bc66a8924f563b00b4c194823
-SHA1 (NetBSD-6.0/hp300/binary/kernel/netbsd-GENERIC.gz) = 70a5a051fb4b94008c3598cf7432e40048ac15b5
-SHA512 (NetBSD-6.0/hp300/binary/kernel/netbsd-GENERIC.gz) = 342651536f367f4adcae4435afd623af0818e56362ba8f8c9376b49a0f2c57af2ca568edd32954744792904aa1fdf98392d398d75b5c8cc4f30ac456fdedb62d
-RMD160 (NetBSD-6.0/hp300/binary/kernel/netbsd-GENERIC.gz) = ce09eea6cbeaf12e2fcd4aabcdb2047e48c686ac
-MD5 (NetBSD-6.0/hp300/binary/kernel/netbsd-GENERIC.gz) = d1b8cd8ebde9c0bf97177f7cc8615bbf
-SHA1 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.gz) = 653c4beb8dc20a0c8d66e9cee85225fc221b5e8e
-SHA512 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.gz) = 62259ecdcaf08723230e0fcd0c9738fa3b4e42954e114146a7bfc11ab775adf2c36a7924fc9532ffeb5b50da52c9789162b56fd991511922a074f109edf22212
-RMD160 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.gz) = 634dcaef5fd936621863005e583978fff3f4638c
-MD5 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.gz) = b4cfe5ee1d9fcffa55595ceceb2cf7dd
-SHA1 (NetBSD-6.0/hp300/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/hp300/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/hp300/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/hp300/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/hp300/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hp300/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hp300/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hp300/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hp300/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hp300/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hp300/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hp300/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hp300/binary/sets/xbase.tgz) = ffc6dc889560371042dd12a5486a9a2c499b86a9
-SHA512 (NetBSD-6.0/hp300/binary/sets/xbase.tgz) = 9aa2ba4d703a13020acf8543d1efcde76b6f0f4b411be20f804709b3802e537be1e651eba469830c4fd4777a379ea9936200a3a3eb4b1a702c04bb81aafcc723
-RMD160 (NetBSD-6.0/hp300/binary/sets/xbase.tgz) = 3ecf53e7414ef859a47fe5afc108cf3bfa82fb1d
-MD5 (NetBSD-6.0/hp300/binary/sets/xbase.tgz) = a6af002ce158cf72eb5c6a7cde2c0989
-SHA1 (NetBSD-6.0/hp300/binary/sets/kern-GENERIC.tgz) = 7ab2f7be438f52926aee3c94e07951b7eb288775
-SHA512 (NetBSD-6.0/hp300/binary/sets/kern-GENERIC.tgz) = a4fdc0d2604b8f00790d8a3766bca90391cde8f0f564b7409738f151355f2bc1bc512a25629ee45ba7321a8791f983dda206124a7280ab082f7b255d50b57df2
-RMD160 (NetBSD-6.0/hp300/binary/sets/kern-GENERIC.tgz) = 85283b11855a8e69be87b21678328f4a675ca02e
-MD5 (NetBSD-6.0/hp300/binary/sets/kern-GENERIC.tgz) = 64374db1afce82099588ba9afc920440
-SHA1 (NetBSD-6.0/hp300/binary/sets/base.tgz) = 06b4b615865b0d72c01ca5676c7755af13eaec39
-SHA512 (NetBSD-6.0/hp300/binary/sets/base.tgz) = 326b28bb808cfc55a3f25766ba747483c7b1ec585b56ef8deaabbb62e3a6adbee3af61eeadf34ea1b6ff41a379e267bfea7516ee2bd80684e3228913c11f771f
-RMD160 (NetBSD-6.0/hp300/binary/sets/base.tgz) = e1bffbda1eb605d10b7eb6e607971d53ba6bf26a
-MD5 (NetBSD-6.0/hp300/binary/sets/base.tgz) = 23ecb1b54aa4c4f5d8a3217a1ef01ca0
-SHA1 (NetBSD-6.0/hp300/binary/sets/comp.tgz) = 3031c0b6b9903720a6b1fe865c366faf35e35af9
-SHA512 (NetBSD-6.0/hp300/binary/sets/comp.tgz) = 37ec2ee919d9d087dd0690cfce76d6be60abc618c3939ab32941ee6c0990c9d5de75f0035f56d2c501d0c5f6e016098bacd502eeaf0849c091dff2ec1ec52cb4
-RMD160 (NetBSD-6.0/hp300/binary/sets/comp.tgz) = 2b934c679fb8e8c0f79a2dcec65e9ffb1ee3477f
-MD5 (NetBSD-6.0/hp300/binary/sets/comp.tgz) = 5db470910b6991bd50d1003122e50bec
-SHA1 (NetBSD-6.0/hp300/binary/sets/etc.tgz) = 6f8edda4999c8a4343fc2bc279241b9550ea490c
-SHA512 (NetBSD-6.0/hp300/binary/sets/etc.tgz) = 562d88456cedf5e071d8fa1d93a8dce22f687ffdac77354129d67db4f701cae1af8108a27d9bbd3fae6035f29cea3438d08954e4e784e0a4a103bbc97362179d
-RMD160 (NetBSD-6.0/hp300/binary/sets/etc.tgz) = 924ef5e6623a78f068d2be3eb41d7acd6dc767d4
-MD5 (NetBSD-6.0/hp300/binary/sets/etc.tgz) = 21fd073754ac797a337928786b03c811
-SHA1 (NetBSD-6.0/hp300/binary/sets/modules.tgz) = 83594fc109e081cdb189cc607f9f0e2bdbd17149
-SHA512 (NetBSD-6.0/hp300/binary/sets/modules.tgz) = 0741d29e6d7a9ab7bdcd0f7d24cfdce277787bb4e4677035222b34a66570a245279b257b1adb1a0e174af3009ba8f54db7801238b754365efee73af0c1aedef7
-RMD160 (NetBSD-6.0/hp300/binary/sets/modules.tgz) = bdf66666ad75847756c3fc123fdcc44ce959e1af
-MD5 (NetBSD-6.0/hp300/binary/sets/modules.tgz) = 28892a09bb10b455457f5f581f57f2f0
-SHA1 (NetBSD-6.0/hp300/binary/sets/tests.tgz) = a5ef542440872976bdd13a62aefa0d14d61c26c0
-SHA512 (NetBSD-6.0/hp300/binary/sets/tests.tgz) = c3f7eec4bdf7dee4746ce7c6f234fb0fd98b97cf4d8eaf6b3ac2f90c3e9ca5cb8cdf35427310135ff7e90f81f584ac3e42c5e7ccfdf2de03c07bca5b5768e078
-RMD160 (NetBSD-6.0/hp300/binary/sets/tests.tgz) = 1088670cc9cf63a9232b07ead39467b939007ec5
-MD5 (NetBSD-6.0/hp300/binary/sets/tests.tgz) = afa98cf6d10be6bd60a4122ad26f69b6
-SHA1 (NetBSD-6.0/hp300/binary/sets/text.tgz) = 34cbcecdf88d3b20397c210adaef51a7aeebdbf1
-SHA512 (NetBSD-6.0/hp300/binary/sets/text.tgz) = 9718fde476237be7d04c9e3bc0fef0ac97fe275d6c98cc58f42e4266a7501b8a95e0edf8b46e1a33b4aef67222731978be2fe427d52993a0fc8ea30185411c5c
-RMD160 (NetBSD-6.0/hp300/binary/sets/text.tgz) = c96e584c3615a0f4e9eb12a8542b0fa8e60e1f1f
-MD5 (NetBSD-6.0/hp300/binary/sets/text.tgz) = 3dc6892231a62bff94ab46648015667f
-SHA1 (NetBSD-6.0/hp300/binary/sets/xcomp.tgz) = 55de1ba9512bb95b3678c1569840e740e6f5b556
-SHA512 (NetBSD-6.0/hp300/binary/sets/xcomp.tgz) = 83011012f7ce5cd11e58e12f068cfbb5ee4987d40aeae1026503899cdb9d5cf4d4edd6497b2ef0a3e75894d6bcf962fc3492572b51a505fae38ce9d12e4dc36b
-RMD160 (NetBSD-6.0/hp300/binary/sets/xcomp.tgz) = d696a85c3da7325eb570111f63f9d3517d47572f
-MD5 (NetBSD-6.0/hp300/binary/sets/xcomp.tgz) = 5729b37859a9265fbbfe184d66daaa9b
-SHA1 (NetBSD-6.0/hp300/binary/sets/xetc.tgz) = 64f0dab5e32092b4ea7dc9352efd06fd648f5f4b
-SHA512 (NetBSD-6.0/hp300/binary/sets/xetc.tgz) = 6fdac8545bf826d9a263cef4354914842986159aae07cd49ffbdda2cefeff6906f3f369141e0f54a213f4530b34160ac420c91c0fa9638354f244c1a625c8ffe
-RMD160 (NetBSD-6.0/hp300/binary/sets/xetc.tgz) = b1167b7794746ee9e9828f6b5d3a34efee1e0fe4
-MD5 (NetBSD-6.0/hp300/binary/sets/xetc.tgz) = fd2d95f88081017c690d585af9cb52fa
-SHA1 (NetBSD-6.0/hp300/binary/sets/xfont.tgz) = 7ff182435282d7ae2377257437bf5f2ead69bf6a
-SHA512 (NetBSD-6.0/hp300/binary/sets/xfont.tgz) = aec8b80b466469fd5ab3d851f46cdeccb90b708401d15bd97301001640888b1d6cb50d4b5df95e95516e74e2b644e9b940be085ecd174a7b165ec6557b15fd40
-RMD160 (NetBSD-6.0/hp300/binary/sets/xfont.tgz) = 1de0aef2c305fd7dd1ed69d5c14ada0f1b709bc7
-MD5 (NetBSD-6.0/hp300/binary/sets/xfont.tgz) = cc29580d8a56cca694e732c04ec99480
-SHA1 (NetBSD-6.0/hp300/binary/sets/xserver.tgz) = 2c9dda0fd8c1e7212d505f36e5c89ad2468efe52
-SHA512 (NetBSD-6.0/hp300/binary/sets/xserver.tgz) = 412e82089215b7a52c4fd12ad4df99d3c2a0ed39207e41b102163ae7a627fd765f6b3b93cf0d197d2122d50a2196f17ff1bcfbdcc99c44f03e4b4cc80ee95455
-RMD160 (NetBSD-6.0/hp300/binary/sets/xserver.tgz) = 133cec24a054a44d8137770ae19faeae2d454a43
-MD5 (NetBSD-6.0/hp300/binary/sets/xserver.tgz) = 5f4ca5d0340f3616df2a4514e9bee2e3
-SHA1 (NetBSD-6.0/hp300/installation/miniroot/miniroot.fs.gz) = 2bffdc8e8f2ad0c26c428349eb4e04adcaaaf0da
-SHA512 (NetBSD-6.0/hp300/installation/miniroot/miniroot.fs.gz) = 6a9135af4681c6b56877b2beff8a5e3e5bd2ae07283f1c78ad2b52d7c56db82779daf57c8c1939aba1dbab03be129372a2d1255f7c23692f548d684bcab2825f
-RMD160 (NetBSD-6.0/hp300/installation/miniroot/miniroot.fs.gz) = f81c0d294b7e481ea7f881e4ee89dfe9090e30bd
-MD5 (NetBSD-6.0/hp300/installation/miniroot/miniroot.fs.gz) = 6e487378f7e4b0cff281e3d2270e0a80
-SHA1 (NetBSD-6.0/hp300/installation/misc/HP-IB.geometry) = 1f0f75de1ee7d8e3181a5d6aa66773677755a884
-SHA512 (NetBSD-6.0/hp300/installation/misc/HP-IB.geometry) = 92d43dab00d4075e373ef3bb391cbfc404778b79b12da342eecc67a3c1a6cd1bcdf6da79ce48dc7262fe8b7d58f62317d4c2175ae67e3b7c69bdab6708509e50
-RMD160 (NetBSD-6.0/hp300/installation/misc/HP-IB.geometry) = c98d08dbec0a38097b07350201358ce795207abb
-MD5 (NetBSD-6.0/hp300/installation/misc/HP-IB.geometry) = 5d37ef7fbd5c7cf0fc9be6ca42e13766
-SHA1 (NetBSD-6.0/hp300/installation/misc/SYS_INST) = a49379b1d8420e60551f6255fef597495bfa6ed1
-SHA512 (NetBSD-6.0/hp300/installation/misc/SYS_INST) = 6c56496dbd3c76c120c9b4acec61a2e91bce64c9c640cc7d2d1aeb7865f57aff311b71526e82eae87b92d5938ce56264d427dfa02b434ce1859ff179e64cfb6f
-RMD160 (NetBSD-6.0/hp300/installation/misc/SYS_INST) = 827a7056af385da9b3d3adaea74d39e819dc0041
-MD5 (NetBSD-6.0/hp300/installation/misc/SYS_INST) = f396854e44d13f00a55e32217d907781
-SHA1 (NetBSD-6.0/hp300/installation/misc/SYS_UBOOT) = 2939db5d57267e58c09ce33be7a91e4842cd8152
-SHA512 (NetBSD-6.0/hp300/installation/misc/SYS_UBOOT) = d609c8e747839742255b0826d0024adb2c9fd6b454e4ab6af71f371c2e437fea20f74eaeec52446d1eeff113edb7a4335a435bd9493d4356f2c6fdabfff6a99b
-RMD160 (NetBSD-6.0/hp300/installation/misc/SYS_UBOOT) = 94935b4c88578641336c28fca15951e613869a4d
-MD5 (NetBSD-6.0/hp300/installation/misc/SYS_UBOOT) = ca853b39c14fb1cf61fb9a8291e86c0f
-SHA1 (NetBSD-6.0/hp300/INSTALL.html) = 8e1c3fbcbc18743ea7a5e551efdb53f84615c5f6
-SHA512 (NetBSD-6.0/hp300/INSTALL.html) = 03450311591c740dd9a59f7d59c82d347f216141a7d297b2aceec341ba73afaa39fe7a97c7d929e93e48db1a38d3e8e82fd5df6036ca1387a9fdcb67e5f1860e
-RMD160 (NetBSD-6.0/hp300/INSTALL.html) = 74b4c33c7bdf6739b4fab6d95811c4a6e705f441
-MD5 (NetBSD-6.0/hp300/INSTALL.html) = b432699922bc91b44886f23df7cf19f3
-SHA1 (NetBSD-6.0/hp300/INSTALL.more) = 1cf75d206beed7a64d40e96fbe895f74a70d1f16
-SHA512 (NetBSD-6.0/hp300/INSTALL.more) = d4ba1700ff39cce32ce327e810d4e87d40d942209a323beee44697e44e541acb0fe44e66d16277a0cda05cbebd0051e6c7573269868b1e7574e6645c678449ff
-RMD160 (NetBSD-6.0/hp300/INSTALL.more) = 89b542e3ef218607f3e65413c3965b7f2333187f
-MD5 (NetBSD-6.0/hp300/INSTALL.more) = 624bd59da093361cdaaab5c1de5cecba
-SHA1 (NetBSD-6.0/hp300/INSTALL.ps) = 382b1bee832f5d64618348011bbafa088821422f
-SHA512 (NetBSD-6.0/hp300/INSTALL.ps) = d986b290afd180501692aca87592c0c71f4a79a2ab774b4b5f28a2fec714547732964125e11ac047afdabbe5f2aec9c44c40d4abbe064716368d012c88a696e6
-RMD160 (NetBSD-6.0/hp300/INSTALL.ps) = 484e2cd1d11eccb452fe023cf442225f60381c75
-MD5 (NetBSD-6.0/hp300/INSTALL.ps) = 532f28fb7f53079a80b851a5ada9cdf5
-SHA1 (NetBSD-6.0/hp300/INSTALL.txt) = 5f6a19f1fcbe957565baf1fae076513a127af37c
-SHA512 (NetBSD-6.0/hp300/INSTALL.txt) = 39744f1a32fa5869dac98bdf458d4c43b55857ea7881f3f66e437c496840707fe2a587be8c38bf1d61593c7d3603d231df56f8110be97a65f6a551d4aa75c1f0
-RMD160 (NetBSD-6.0/hp300/INSTALL.txt) = 026e4872a0fc52ba4d08907a6907cc72a814c577
-MD5 (NetBSD-6.0/hp300/INSTALL.txt) = 025fee7db55908a9ba7a358d3598a074
-SHA1 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.symbols.gz) = 3b574a0a7fa12dccfe7ec7a74f3c6d44b3de73d8
-SHA512 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.symbols.gz) = 3de19c62127f98cc12b223d296bf8c69c262c7cc79e4eb4975eb313c96882f4df8d8bc0ff64a7c57b7e7d30896b49935c5475203a369a8f2e134622dcc29d3cd
-RMD160 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.symbols.gz) = 9c58c704e1a31f946467144840d8eeb207137fbb
-MD5 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.symbols.gz) = de4a876f7ef0c5aa9c566e4f976723c5
-SHA1 (NetBSD-6.0/hp700/binary/kernel/netbsd-GENERIC.gz) = b9b1dddb8855998b36022d03cc9c49ce5e6ed212
-SHA512 (NetBSD-6.0/hp700/binary/kernel/netbsd-GENERIC.gz) = 39bcd475712ece695379203c3ec20e2bada75f8b6b6c6f8f80a8826c65ff112a6e2cc8e8c18a5547fa4fa2e2bb7704d6f5b303b2c600f05cadd9dff1da997904
-RMD160 (NetBSD-6.0/hp700/binary/kernel/netbsd-GENERIC.gz) = 0b67d5990ab7491b64a591e99053470eadcb13a6
-MD5 (NetBSD-6.0/hp700/binary/kernel/netbsd-GENERIC.gz) = 2090d459fd5d513c070c401d72b3ca74
-SHA1 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.gz) = 38bb542016466c8e1a7c8535520729cc5b9726b8
-SHA512 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.gz) = 49d747023260ee1b61b59e0a14ff413c97b1daaf5cc20ae916b42d83b99f7438465afed77185c7ef0154ac762edfa93acc8733574fed66e68b58db11c34ce72f
-RMD160 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.gz) = 268e5e4322fb04246e0a1f8df5788e8530cb88c7
-MD5 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.gz) = 4175ca432943eb0d4cae87e5eafd3316
-SHA1 (NetBSD-6.0/hp700/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hp700/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hp700/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hp700/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hp700/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hp700/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hp700/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hp700/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hp700/binary/sets/kern-GENERIC.tgz) = a7b11dacf977418c4a57b400530c123c99447a66
-SHA512 (NetBSD-6.0/hp700/binary/sets/kern-GENERIC.tgz) = 071f2e512f843bd91f68e757682e5414600220833b8269be06956d29e61f0383a5f187bdf9a9414a8d64edc6ed9808c8df468fabca174f9079954991c6582300
-RMD160 (NetBSD-6.0/hp700/binary/sets/kern-GENERIC.tgz) = be81b5bc0509f3c9a10888b8f7fac2982871320a
-MD5 (NetBSD-6.0/hp700/binary/sets/kern-GENERIC.tgz) = 313aa8cbee11f72da2bb608cb35f7a29
-SHA1 (NetBSD-6.0/hp700/binary/sets/base.tgz) = 4cc8adc7171679140335cc44ecc8f4f338f47ba5
-SHA512 (NetBSD-6.0/hp700/binary/sets/base.tgz) = 48e68c7d28cbc15733f8677d7d139897350c389f7032e78e06d6cbb8b9debc09bde2aa52e7226ef58660da81c238e960e5794689a3f3e19f5eca40f532117542
-RMD160 (NetBSD-6.0/hp700/binary/sets/base.tgz) = 3582b7f0c2852854cccad70a2e8f372a7acf0369
-MD5 (NetBSD-6.0/hp700/binary/sets/base.tgz) = f8166ed58eec05489e3857d9e09469ad
-SHA1 (NetBSD-6.0/hp700/binary/sets/comp.tgz) = d9f4674db21772a521c5eb24e5fbe4ae2656c5d6
-SHA512 (NetBSD-6.0/hp700/binary/sets/comp.tgz) = caa488b17380cc2cc8f35ed9703bcac5c778fd597f8f607b26328c58b6b64dec7a784b22335a5c144f31fddf6d03a67d0f2c473ed7498e4f1ada17570f2893aa
-RMD160 (NetBSD-6.0/hp700/binary/sets/comp.tgz) = b625cf9eaa395a2844cea44b1904ce9358c862b8
-MD5 (NetBSD-6.0/hp700/binary/sets/comp.tgz) = 07a825a8852f558425856a06e5677bfd
-SHA1 (NetBSD-6.0/hp700/binary/sets/etc.tgz) = 0576313db33f67f3208c996a1819d19b5f0bd2e3
-SHA512 (NetBSD-6.0/hp700/binary/sets/etc.tgz) = 4d1eb5b04fd24f34112c49829b68ea0b7c841fc8b465e363ed4e79d58cd448ddcc6a493bae49cc9a4a4e9bb92314ddc032c5ed060f48b6de60e5045e981809af
-RMD160 (NetBSD-6.0/hp700/binary/sets/etc.tgz) = eedfb6a8724ef33f4bc3ef4e08c1ec6f868d548b
-MD5 (NetBSD-6.0/hp700/binary/sets/etc.tgz) = 8c95ad14875e9a87428ac7f6cf3a944e
-SHA1 (NetBSD-6.0/hp700/binary/sets/games.tgz) = 1be2d6b3d863032e376b31b2b4489a65acd09d94
-SHA512 (NetBSD-6.0/hp700/binary/sets/games.tgz) = 322569b0060cc67b16d15a79b8c813e548ea4908ec18fdb91472a4ac5b03bc8abcbba2e5bfed3ed400cbc84ecc82a5edf087f54c06bc682c276a15b516f4dacd
-RMD160 (NetBSD-6.0/hp700/binary/sets/games.tgz) = b4d4f8cbddbca828beadbd87ef4f20f1b23d7421
-MD5 (NetBSD-6.0/hp700/binary/sets/games.tgz) = 235dc6818c1a24a788301264c292ca2a
-SHA1 (NetBSD-6.0/hp700/binary/sets/modules.tgz) = 1b4ecd74bda33a325888994e03e67327a959a381
-SHA512 (NetBSD-6.0/hp700/binary/sets/modules.tgz) = 7f77163eb7973139a1e6a2c4aaf3147b94e5f1f977ee642c08b1ad912861d810d953c71ac9db5c5b74c9f9b691a48faeccb4192b099f6ba3cc7fb41093f55533
-RMD160 (NetBSD-6.0/hp700/binary/sets/modules.tgz) = e6f669845fcac20f9921602a26bfed3d83c0b453
-MD5 (NetBSD-6.0/hp700/binary/sets/modules.tgz) = d5fdd2b3f62edab0ea9e9652c2274b01
-SHA1 (NetBSD-6.0/hp700/binary/sets/tests.tgz) = 4a3701895f22ba6d97662a345fa9c14bda977335
-SHA512 (NetBSD-6.0/hp700/binary/sets/tests.tgz) = 9ec93c9ec1b2732690f2a3d07cce15569b5ff57a2cabe9489ad28e7b52ccbc0382795267abb6d30a7db9b38f3b7b6a0c6016ea175b1d91f24b50922e3098cc4a
-RMD160 (NetBSD-6.0/hp700/binary/sets/tests.tgz) = f62f1798af8d3df9d9653487c543be4411fb2037
-MD5 (NetBSD-6.0/hp700/binary/sets/tests.tgz) = 764d8df608cc1e9c23923eb7292f1962
-SHA1 (NetBSD-6.0/hp700/binary/sets/text.tgz) = 12fe20e8ab174d0f6bcd8ec6be600ed0e0cca782
-SHA512 (NetBSD-6.0/hp700/binary/sets/text.tgz) = b56b29228d79ba548c3ad908f9c81cf7e427bc72e607820438c6154e256f5bb4bd102aab7c31e86b241ecc42f824420aa7969e6ac418250c344eeffd1280abdc
-RMD160 (NetBSD-6.0/hp700/binary/sets/text.tgz) = 1e16f9ea1efaee41bc10b045105a1d0dc4f0d17c
-MD5 (NetBSD-6.0/hp700/binary/sets/text.tgz) = 09610caef8a531f7c490920d43a7c3d0
-SHA1 (NetBSD-6.0/hp700/binary/sets/xbase.tgz) = 0c5e93ea81c0f09063e5c30f42c9d652aa9b68cc
-SHA512 (NetBSD-6.0/hp700/binary/sets/xbase.tgz) = 03f48b4ef5dc3f869866f00214d7d5482f03d2d838ceb05e0003484d8835f05b484d998debf24d801721dbb155aa5632a9a1e6d3a830d6faddc552c4500ac3e7
-RMD160 (NetBSD-6.0/hp700/binary/sets/xbase.tgz) = 8661bbe49a27e86810bee528b84947926e0a2e65
-MD5 (NetBSD-6.0/hp700/binary/sets/xbase.tgz) = 21b4506d3d4f407c33d8c152ca8ef304
-SHA1 (NetBSD-6.0/hp700/binary/sets/xcomp.tgz) = a70481db9baba9f60cf23c52e72dac446888df2d
-SHA512 (NetBSD-6.0/hp700/binary/sets/xcomp.tgz) = 07c5ba6aa0ce0da2c5c2a3987c7c20226e4ee3158578a7ff70609bbfafc83becdd6a6185fd2c0b4a441f7d92c2cf5be3c767252c11f8fae07068f3ddeb48382e
-RMD160 (NetBSD-6.0/hp700/binary/sets/xcomp.tgz) = 2d0179f816fb0a90c931f0733cbfad6dfe3f4d17
-MD5 (NetBSD-6.0/hp700/binary/sets/xcomp.tgz) = 84ddb46d08c60fab91553d60f848e21d
-SHA1 (NetBSD-6.0/hp700/binary/sets/xetc.tgz) = 0ba461866c920a4fb82c50eede51ec242527a428
-SHA512 (NetBSD-6.0/hp700/binary/sets/xetc.tgz) = 1e84618c1e253df70f3801c93b1276ab63df818b231afb21a6c34089fd53cc95c9314a8ff14270d622a231c7fb963473e152f013e1cc2f338e7f231eabf524af
-RMD160 (NetBSD-6.0/hp700/binary/sets/xetc.tgz) = a98382606c9775e89131fc737d791b9c4c8334d6
-MD5 (NetBSD-6.0/hp700/binary/sets/xetc.tgz) = 626d88e448091f14845bf3a565d330ec
-SHA1 (NetBSD-6.0/hp700/binary/sets/xfont.tgz) = b70a4c27223f81cf49a62a85c3addc59b52f4b48
-SHA512 (NetBSD-6.0/hp700/binary/sets/xfont.tgz) = 82d94e80e98de78d71d5bae5af20b2755cadbaca48d548b2575fba4a52b2f35e09b71efb4fc8f0f1eadb5282e449807745feeb1d121275e9457eebe93722deb1
-RMD160 (NetBSD-6.0/hp700/binary/sets/xfont.tgz) = ec9a08a3c3e1563d8c4bd9a86d0e7fa38dcfa944
-MD5 (NetBSD-6.0/hp700/binary/sets/xfont.tgz) = 0bd2c8bc1760f957a2dec6126148ccb3
-SHA1 (NetBSD-6.0/hp700/binary/sets/xserver.tgz) = 892de89d8c46c05b44affea346312132bdc9d7b8
-SHA512 (NetBSD-6.0/hp700/binary/sets/xserver.tgz) = 18f1705c9e448b34e240f0f215fd618f62af2c1efa59fc9456a28df4fd477a6da26af82f7a99c359edd312abfedfc7b3058f651472a17d339f672db872ade390
-RMD160 (NetBSD-6.0/hp700/binary/sets/xserver.tgz) = dadd7b1915e43f92a618b65f739d91fc47cb17f4
-MD5 (NetBSD-6.0/hp700/binary/sets/xserver.tgz) = d0ce54a0227edeea0ed0572c32f7382e
-SHA1 (NetBSD-6.0/hp700/installation/netinstall.lif) = e4f530ba8005c2a02ab8cc5f6f2f9bc266ed7d27
-SHA512 (NetBSD-6.0/hp700/installation/netinstall.lif) = 9cb62f32608d400472276a255cc25c872406cd9a2113a787dd9735759a3d05a1de97c2b53daeeb35b4ab07e3e016aaea0bcc2da165c3c07633ac716900383354
-RMD160 (NetBSD-6.0/hp700/installation/netinstall.lif) = 00807d44c30717d4b524a94e209ae8881d9894b8
-MD5 (NetBSD-6.0/hp700/installation/netinstall.lif) = 070bcd9b95c8c1f02cb3e233bbfd997d
-SHA1 (NetBSD-6.0/hp700/installation/SYSNBSD) = 0458f52af240895100db4e2c15e685a9a8af00da
-SHA512 (NetBSD-6.0/hp700/installation/SYSNBSD) = 6acc8321830dbb38cbbbe88bba88c6f0bbdfcfe60380f11fbe92724b0defcb8dbf3ea9207e7522fb90b95a0a401114a751cdef01ddcd5d354cb7ec058c83f98a
-RMD160 (NetBSD-6.0/hp700/installation/SYSNBSD) = 2c9d5b050abe290f785eaf9fd1fb746ec0c2d310
-MD5 (NetBSD-6.0/hp700/installation/SYSNBSD) = d6cb9aa32688c2b571b6b62f7141d23d
-SHA1 (NetBSD-6.0/hp700/INSTALL.html) = caa84e344b51c67646142496becf7b3580bdd769
-SHA512 (NetBSD-6.0/hp700/INSTALL.html) = 87e4eaa6077a464832397ddf9eb59ca95949c655d9897fb630899274176ded45b22f4da21ebbfad688515b7cb63a7aca9e5fa8b003d4c81208c0c514ddaa9d3f
-RMD160 (NetBSD-6.0/hp700/INSTALL.html) = e46593839ae31aa17259f36ae4f71ee9cf56d317
-MD5 (NetBSD-6.0/hp700/INSTALL.html) = 5b63b1d8b0e76a1626ced50e760b6a24
-SHA1 (NetBSD-6.0/hp700/INSTALL.more) = bec1e3da9f724159b4a5b52e7bde3948e92573a4
-SHA512 (NetBSD-6.0/hp700/INSTALL.more) = 14a618c17e946dfc8c537f48b3f8c225ccf0484acdd1311555c7273a720a867f57b0f72786bf1c5ce874c0a8dc122d6452e476f6b3b5cfd2fdcf3e7b90c20b0a
-RMD160 (NetBSD-6.0/hp700/INSTALL.more) = 3cf2ba4b0c27b4e83b2275ffe8b0736c536b40b0
-MD5 (NetBSD-6.0/hp700/INSTALL.more) = 211474596cbc940278e9edfbf8ab7d23
-SHA1 (NetBSD-6.0/hp700/INSTALL.ps) = 31767f9d14e0018f59f4bf89233f3a546d53234b
-SHA512 (NetBSD-6.0/hp700/INSTALL.ps) = 7f1ef8344a35e0aacf8246212f9ef07fe7727048de0a7b24030fdf7698e736152623e6d5d02c32bffbceb3c0337aeac719c523711f838118f0d31316d46c6fb1
-RMD160 (NetBSD-6.0/hp700/INSTALL.ps) = bca575e3df8abf0c7f8ff70e614fe52a9c39f645
-MD5 (NetBSD-6.0/hp700/INSTALL.ps) = 644eaeb94d45f3183b9cae5f0b39d974
-SHA1 (NetBSD-6.0/hp700/INSTALL.txt) = 546cea2f82e5c548de6f6978f569d3dcf65476ce
-SHA512 (NetBSD-6.0/hp700/INSTALL.txt) = 4d0d5e6363680e11da17d445fe7156b709e11d28f3226d1374e3612e68ba9c445bd2ec01e4422b523ea2d4197fc8a8b465da0c75401b9560ced43f217931b558
-RMD160 (NetBSD-6.0/hp700/INSTALL.txt) = b7536cf8d4f664d03d213978619724a94a16b1d5
-MD5 (NetBSD-6.0/hp700/INSTALL.txt) = 241f27fd87ec0932db94a067465d30b0
-SHA1 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-JORNADA720.gz) = 7a39f220d6af810e25b4799685aab25a226b9b91
-SHA512 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-JORNADA720.gz) = 4b2d4125cf737229264e73bd830c4def0ee33dba71cc5f68abf3e8e936dc89fb02f48a0d821754d2427fe1f72595dd266cd9cfc369c778f50f48573fb2c0bbe1
-RMD160 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-JORNADA720.gz) = 129136e4544bb8fcee75e1addd1fee16c522e416
-MD5 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-JORNADA720.gz) = 6ed126d914383f7ca0c3269960e885db
-SHA1 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-IPAQ.gz) = 7750f05c52fc8460f3ad8b271ae2d9e723c24ebe
-SHA512 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-IPAQ.gz) = 485f621f65f80fa02b8fbc08a876aa135d3e4c541ccc6d13ebb3bf119b0628dc5a540ba168a6e908b84422450829dd5a98915a145d629e893930ed40d9e3dfde
-RMD160 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-IPAQ.gz) = ee2d243a0fd633e6dac497b28b420b4a8157879f
-MD5 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-IPAQ.gz) = 563942f00d685c8618fb5bfa2a6a893b
-SHA1 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-WZERO3.gz) = e6f2cede1c69a3f41582f1a8f2a5187948512248
-SHA512 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-WZERO3.gz) = 8cc9f93b55a9a64341b266f7d3b8c6d1051f84a36f8aa398b24404d8aa57a16e883b1e7215b7cd235764b4507e04259525333f28369aa95efa39713e17bef07b
-RMD160 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-WZERO3.gz) = 536bc6153a0c83339c95e38b87a87bc98e738cb5
-MD5 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-WZERO3.gz) = c4092d8e84f02fa75ea88436d404f1b1
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/hpcarm/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hpcarm/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hpcarm/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/kern-IPAQ.tgz) = c2bc2e5d8606cbd122fc825031025e2946f06e40
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/kern-IPAQ.tgz) = 52e8c28012dca6e4cc1bab2cce4443a6600a9cd42b3e1e027e715792e794f34baab32300da9ad58fbc23ecb2a22e7787a1d181577317a0dc6fd457ba66f11fc6
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/kern-IPAQ.tgz) = 7be149eb7b493fd76dfe0dfc533315458fb0bfea
-MD5 (NetBSD-6.0/hpcarm/binary/sets/kern-IPAQ.tgz) = 0d6a168f2d92d06962b581d06f807d46
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/base.tgz) = 080c8331106fce332cc5092a8332c2ad603e2596
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/base.tgz) = e22024be4e644ae872d6cf538a1210f8ec2aefeadfb47f6497e3892de2b617109a082650e1c1b16006cb84312c1550d3e98610ca63a36a083a073c55a08a3ab2
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/base.tgz) = dc0f2bef3b562a81901faf28d738e34168c3b812
-MD5 (NetBSD-6.0/hpcarm/binary/sets/base.tgz) = 0e05338048fb790920168e820e0f5771
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/comp.tgz) = 8ae72e40483c13b3ea15aebb3efbcb5cedcf921e
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/comp.tgz) = 3ee22dfba60196fe19897537c3139dff0b50d1aa6f6c27a024dcdbdc810a9dccd2c32480f73c0ffb0e4dcc4261e03ca6c565a875e291c963011467bc119f292c
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/comp.tgz) = 8bbf9baef503fd64c7676821abad991027f42ccf
-MD5 (NetBSD-6.0/hpcarm/binary/sets/comp.tgz) = 84a5d47bbb69b46673a2b2a53ffe3854
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/etc.tgz) = cbd3aeb7eee9da4d67693adee922e65835ad8908
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/etc.tgz) = 96f02aae1ff4fe6096261449dabe1c749ddf179e809b936393bd3b1aea3d708b878ea9c6fcededf0820216bc3f5a4862da04cd9ad5cd4991094bfc309421dc4f
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/etc.tgz) = b3f5dbf2f1a092a0fed4f7ff661635387bdfb7cc
-MD5 (NetBSD-6.0/hpcarm/binary/sets/etc.tgz) = 940a5d84fd6546eb8ef1fc0fc2af9f12
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/kern-JORNADA720.tgz) = fbe60c24963e700dbcded7ed9d6a006fce937c4d
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/kern-JORNADA720.tgz) = 0ff4a883f983d768355dab3a124bb1ccc3418d7a61bd8dbfc571089b934153eda2b9bcedf4d655e61c680c60b50772a40322804f86accb96acbd11dbd0159aab
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/kern-JORNADA720.tgz) = 010eea6fd1f9645480ed8d96e67a7a87766e6097
-MD5 (NetBSD-6.0/hpcarm/binary/sets/kern-JORNADA720.tgz) = 8a1eb406cc9cb944a0dc11ade6d139d9
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/kern-WZERO3.tgz) = 5a30317da0f7f2c6f1998a8c53350da39a390bff
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/kern-WZERO3.tgz) = 6908dea8428f52a08f481105b602fd2b93318207b5142ccec5104a897a9ad5b10ec25db1a5849074c179e064c7c418cebccbc529609873b031dde5ef1659ec6e
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/kern-WZERO3.tgz) = db2ec740804a2c22b4d9d5f05f7b20748206fcca
-MD5 (NetBSD-6.0/hpcarm/binary/sets/kern-WZERO3.tgz) = b745687a92452be38b0d2cdb625175e8
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/modules.tgz) = cd6c4ccc2c87d573cdb5a92a8806292c5063bd28
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/modules.tgz) = 66efd8e33cb118fcb7e6094a55dce87db0b38f03398688e19eaa29a88a61075ca4456cfbcf262e4ad372d1a85d31f1a230e79a09a60d9d0315ee2691f836f408
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/modules.tgz) = 1a4f4a21d35c183594080c4c2c6aeb63d0f07ec0
-MD5 (NetBSD-6.0/hpcarm/binary/sets/modules.tgz) = 0d07dc5c45004e2442e6da94a40e2082
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/tests.tgz) = d77efdefa2b3df022767062ce3e5b37ee33aca9f
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/tests.tgz) = b2827bef6684fe45b1ca7dc690a30787a0033b46013281c0d12dc182939a32287579ea0ed6dfdda5ac357cb69a1bfccffcce2cbc991a3b47f0cf714df45f511c
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/tests.tgz) = c51c78a413d9b8d240db9965edd6732158319bec
-MD5 (NetBSD-6.0/hpcarm/binary/sets/tests.tgz) = a157cb333c867f1efce0c0009db0c596
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/text.tgz) = 5e276b4e097bd1ab37a48ba8ac4591d784311152
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/text.tgz) = f7d62b4ac928028f37cc0ad711a12e4f5d4a2b77d2e108ce8716194052e6796bf5fb54ce77fa148aa257165f3d71f2e30d562d3dc809052020b85daaa5ba9fcb
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/text.tgz) = 806a5e59b90062c827a23ca33be22cda14a2e0c6
-MD5 (NetBSD-6.0/hpcarm/binary/sets/text.tgz) = e4ed04614c1a767e663fc73d647f5b7a
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xbase.tgz) = 56daf552141d6161e0b08d5918e351f9cf5f783b
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xbase.tgz) = ccc570735b9636dad693a87964efa1c6d5b14a15e8e9ea28b0ebbcf97db04a671a771d6163a62f78d9979357f7fb0d5543591ac584781cfb47778228a268d723
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xbase.tgz) = 134800ce03d324aa4090e1ce235cc5a6e5ba9f2b
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xbase.tgz) = e3afaa495833b5492470b03d432bc773
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xcomp.tgz) = 380508f5e8d94d66e301a6f8fddbddddaf2eb15d
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xcomp.tgz) = 4860c2274b0d4d3b1188d915c90b7e183672527e6734023c78694df3f507d2e920e5af9374353f7581c8f0e22462e8af30aff7e989146de61c0c7b9de7cff93c
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xcomp.tgz) = 2f0f86a40b6887699ea5949b994007a9bb6ad876
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xcomp.tgz) = 8f917121a2bbc2df46c6ab3db5f7c276
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xetc.tgz) = 4109069bd859ebc949dede730589472e53e9e73a
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xetc.tgz) = 260ee8565cb3b0fc496ff20856cc718585d36d380a85a5793c0e6502e57b683e132a3904ddb5990ce670ad9069eb999c2a41e427d5bb4ce96dd7f526427dfecf
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xetc.tgz) = 24731afa16c748e4129111adbc446931859ac8b5
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xetc.tgz) = c5aa4d6e7bda3c04ff21c49fa7a88349
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xfont.tgz) = 93475dc493faa6b2df35bede901aa170b6f9e9af
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xfont.tgz) = 182e2f9f19c09b4a10c5591d2d9a85a151263ed9773ecc581fd4ab155f5342b364b2fd15c3ce7e82ba9b760ef567f0ccaa8fd51fa4ad3e70dbc63a429ec544b4
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xfont.tgz) = ea5190cce3fb48693746b233b2173595263d0b64
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xfont.tgz) = e866b30099f57e267e8be054446c259b
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xserver.tgz) = 33ea7cf47464441ccaa2779544df524406479446
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xserver.tgz) = 718cb878630d6a3d8e2a4c8c0ca427e36f6772017810df557ff9bb0a688445af10f4087662e91631ec07a0a83e3007fa016c485950b3753c50bfdd3cc219ccd1
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xserver.tgz) = 09ce10d8e2254deac07ece3f8625d6c3bf2c4513
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xserver.tgz) = a36d535d398b0d6e6e66da91d03ddb6a
-SHA1 (NetBSD-6.0/hpcarm/installation/miniroot/miniroot.fs.gz) = add38fbef1c9a42872427fc3ae856cc490dba491
-SHA512 (NetBSD-6.0/hpcarm/installation/miniroot/miniroot.fs.gz) = 1ac653efe632dd53dc6bf8f1abda479a4bdecf57b4aadce9b289381a8608601e7444404bac4b4187ea5eb87a8e56affafb06b30c5f27264797b8811b4b4a61ce
-RMD160 (NetBSD-6.0/hpcarm/installation/miniroot/miniroot.fs.gz) = d36e893b023bc07b2ae23e65891cd8edd74ae60c
-MD5 (NetBSD-6.0/hpcarm/installation/miniroot/miniroot.fs.gz) = d790021f968d07d34a34acb3fdc18a3c
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.gz) = 640e6d70fa752f3f1e6b415d79bfa26eb524d49f
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.gz) = 0266c16c91cd0edf3fad56c8806d8736edcb70138486a8596afd2ad58a89846ed319973d4383c6dc240e894a23658effd390012c6bb55d768a3980c5cb9bfa34
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.gz) = 8b57f335f3ce186509ff88c07bc85c27716b542d
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.gz) = 4963aae14a8da8a218ec0f43110e4329
-SHA1 (NetBSD-6.0/hpcarm/installation/hpcboot.exe) = f62f1b2bbf14dd5ee1159d987365122bbfa061d4
-SHA512 (NetBSD-6.0/hpcarm/installation/hpcboot.exe) = b1ad5471eec903659a2fe6ff79e631ea40d940e447126a6d8d6b46166dadd7cbbbea4285927968134d2ff493fe66a698d97374febf991ee9ecd4d295f06c92b8
-RMD160 (NetBSD-6.0/hpcarm/installation/hpcboot.exe) = fefa32b139995cd0b71c59d09cfb225fce08dbc8
-MD5 (NetBSD-6.0/hpcarm/installation/hpcboot.exe) = e8da90c935c719d600bed4f07046950f
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.symbols.gz) = 04eac0a968c96a038388c18816b735fd0fda5c2e
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.symbols.gz) = 61357b623b75c75df8f2c5318c82f3300183de81003900fb10a1caa566cd9cbc90563277a5d0738b0a7ed52934cfb40d08b4c7af428b06bca90dd907b89673ad
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.symbols.gz) = 43b52d529a62cbfeacdae60b54d9e0fece7a1ab0
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.symbols.gz) = acfc91c707d81e9c84b3fb7f6626f9e5
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.symbols.gz) = 48c1a0db5c6a2e7d69b1bcf77763e88adadf6373
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.symbols.gz) = de5ef76b391472a2c18637f36f58a904d693085bfd9108676a1c0476712ab94b72ac41628a65a9c0bfcd5f33c9e141540906f63cfa5614ab8ea2f3f6867b9b1d
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.symbols.gz) = 383e05d6255afda312b4b81fdaffe4e4a9c83dbf
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.symbols.gz) = 4b4a3474459c93e727e4f20559139464
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.gz) = 70818132f816688fa6d74e13544e9e6f07faaddb
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.gz) = 0b9b7718b30b88b81fb66cdc32ddee57ac7fd6c90c1ecb6a422f84513df70d594b48badb8b71f00b3ef8d90f544c01439bef4942a51eace3d1fc5dbca1461ced
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.gz) = bd193cf9815e6f8a60ca9df77eb1537913c2daa0
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.gz) = 39c8584c95a8c2197165b102a1548a5c
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.symbols.gz) = 2afaf89d89ef9c6538960f64b36802beb3e74472
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.symbols.gz) = 53c9ddac6c56fa5e1c77323483b129b0b1ebe88b558f0e50346d17d54477db1187831c6c8e0e2a231b9473dfcf8d285672f69cbca8197e6fa889f8285836b38f
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.symbols.gz) = 9dfb61526eb859fd999c8c05b257d436a6d209f3
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.symbols.gz) = c8aa20ace8e4938a05386d8c02f1cb6c
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.gz) = ded59dfdb078cd978a9a74670d43899ef5186b39
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.gz) = f93d2e0c80f5b9f8d2f1d851515b2b50f8f518caf7e0b8b71dfdb002a2f97c1da80f7a7d7263228a0d5400267d0be91ee649b558eb4fea8dac4fe07f23b24138
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.gz) = 99920bf26d5c1697ed030c151c630b125e3b6cf1
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.gz) = c958ba2807a0e03d47f98fa66fcbccef
-SHA1 (NetBSD-6.0/hpcarm/INSTALL.html) = 90f13483a6a7cefd8261806546700202df5e89ee
-SHA512 (NetBSD-6.0/hpcarm/INSTALL.html) = f7b3a19235b72a4a19c27380e6e22f89e4ce58864a8ef3b492b05aff47cd017a0157adf96bf1d04ef4d6c9b1f4f24980afad91f2644e74fccac06274a35bc75b
-RMD160 (NetBSD-6.0/hpcarm/INSTALL.html) = 6228411bb6d6018e59a1fd74f2887aefed5ae8fe
-MD5 (NetBSD-6.0/hpcarm/INSTALL.html) = 3d21d24e5a8b5a1ed45afd2f0e7c25e0
-SHA1 (NetBSD-6.0/hpcarm/INSTALL.more) = bab711c6d2c3ef110b778fa3bb18a690e3350071
-SHA512 (NetBSD-6.0/hpcarm/INSTALL.more) = 85c117ec4b92633391497f62723320999e714a68f0a9b008508fd1b884f77729235859c2ed0ff9539af6615eb452cd87a9bf9f10456ae53fc057b5a3d665dbb5
-RMD160 (NetBSD-6.0/hpcarm/INSTALL.more) = 5283c45bcd291d03e3d2f579eaccdc78708a2dc6
-MD5 (NetBSD-6.0/hpcarm/INSTALL.more) = fd547cbcd59d803d4f5ef38f619fca0c
-SHA1 (NetBSD-6.0/hpcarm/INSTALL.ps) = 6ce0b3584e4b45bbed722cb8bddb66e3deedc88a
-SHA512 (NetBSD-6.0/hpcarm/INSTALL.ps) = 3d766bafb31be6edb83b4ada23bd1eec923f7297f6b4cf51adc247a160749c5488a99282ce7e4380b4c27025581901c6f5d7d774c799fdb23f8410c43c8e4b0b
-RMD160 (NetBSD-6.0/hpcarm/INSTALL.ps) = e8c042d83705b3b63bcb793d856307b95ed31521
-MD5 (NetBSD-6.0/hpcarm/INSTALL.ps) = 1a50f108a265984cdd0f0206c83daa35
-SHA1 (NetBSD-6.0/hpcarm/INSTALL.txt) = 06a8b26e2de81570eaaa71593a67b1e4c517590a
-SHA512 (NetBSD-6.0/hpcarm/INSTALL.txt) = 4fa7355a943c7e48925ab6db1c281ee9cc7e674095c7eea355d270d15afbb73d45891ce07a4b6104b1fcb0dfaceb3af48db6cb134070077fa4f1bcab453e83eb
-RMD160 (NetBSD-6.0/hpcarm/INSTALL.txt) = 3bb0f03d782104ec4792423f3d640e8e7adc29b8
-MD5 (NetBSD-6.0/hpcarm/INSTALL.txt) = 68c0576d6d8b54ebfbb0728b7a73438b
-SHA1 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-GENERIC.gz) = b038fa721af9faeddea84add1762439db98cf908
-SHA512 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-GENERIC.gz) = 6d550d0b1797734c7340d8632930c78be193f397591767e2eed674423ad469dda333206a8f539adfba9d0d81ee70cda7c01de58cfcc4e3ca0440cd6615ba8167
-RMD160 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-GENERIC.gz) = a4627fac6aad12dd9a2f04c3aa90fc8c61699d4f
-MD5 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-GENERIC.gz) = 6b0e8c6ff949fbea7ff99cbbed4df778
-SHA1 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-TX3912.gz) = be377f94448f7026050fbd885d0eeb2ed6a1e84f
-SHA512 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-TX3912.gz) = 3855f4e59d507281b41d8363e8d39ea229bd41fd1cc6090704727dcd97bb75f3c265f68a0cfe84a10292e55c7d58a266f4d27705a1fb9218d34e1727210692f0
-RMD160 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-TX3912.gz) = 686c703228a5ace7ddb3dcbb232bdb4ece47b6f1
-MD5 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-TX3912.gz) = e462f4f6a2cbc6d8eb20e49cbcfed56f
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/hpcmips/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hpcmips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hpcmips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/kern-GENERIC.tgz) = 5a49a4163b7d841104dd4082113ba253ca95f946
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/kern-GENERIC.tgz) = 3856b27c3d200e162fb88b7e094e38d843a91f67dadb56b31bd66c18daddd2c0aed58dbea87d43a3d530d3ece68bac562c20d623b613bdd4855fb86bc4794463
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/kern-GENERIC.tgz) = cbd699ebfe796b39eee403ac3831765f5871e789
-MD5 (NetBSD-6.0/hpcmips/binary/sets/kern-GENERIC.tgz) = 22031cc2c2f3a4a6002fe20cff53264c
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/base.tgz) = ff9051176546bd2cacea52fee85fcef472e0fc39
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/base.tgz) = 2a770bede2e0f7af3a0d8c2a1f3871bd72c1f67dbe5aed9f6d1cf12b78c8676c819dfd99d3c7cbfc1794c993e8cf059f9e72b764f8d25a5f1ad3406c42169d6d
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/base.tgz) = c0d7aa660957624cda33c738d6026870f14fb823
-MD5 (NetBSD-6.0/hpcmips/binary/sets/base.tgz) = b79936c5e1c4ff6a86270da2931b1c54
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/comp.tgz) = 32515af667967de5ad8dbca2ad993c62c9794b80
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/comp.tgz) = 5604e8af6fe737b81128a976cd53cc5f5b287f04de2b21fdbc8bfffa1b521ceae4f7244ad8b98580ca77af7c43b75623e2e9ab8772bd23e8e3c7d297b6c54bfa
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/comp.tgz) = b9a5cf74d2c16f7870081a27a3862459c101b690
-MD5 (NetBSD-6.0/hpcmips/binary/sets/comp.tgz) = 4265c60c89150dc4c7de32c0c3f4aeac
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/etc.tgz) = 68b265bdfcdf09e792bcdfe69656516b44d37b66
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/etc.tgz) = af2d02e2aa9a03df02dd8f0a8840e7d185e18b57e8086f0eeb5b7a1349e02433bd7ef1c83f77d5962f90350b71fb4610932e29d723f1cf4488c930048ab43dd1
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/etc.tgz) = 3a5d433571b7a9c44fa0ffca6efd6df514101b15
-MD5 (NetBSD-6.0/hpcmips/binary/sets/etc.tgz) = 295c108b6f0e7a9dd8f7cc142e87dbd9
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/kern-TX3912.tgz) = e1ff4c2bdcfe12d8c26b87801f28970661e5e109
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/kern-TX3912.tgz) = 42d069cd3e055b33ffd04b0e99f3db75a45c80cf8cfffb0a4cc08fd3fafb9e9e8c8c6205cf827689a91080c75250c9e753c5c4f1657427287bd567244e29891a
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/kern-TX3912.tgz) = d5d7c8d6ab8d3cec287bd0ede9c658f5e196471d
-MD5 (NetBSD-6.0/hpcmips/binary/sets/kern-TX3912.tgz) = d9aa987b53c079063b97e947c2b561ed
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/modules.tgz) = fd655bd27b90d1cd9ebb2f64a2b744e5f57178bc
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/modules.tgz) = c7b1ba107094c528d6edc3c3fa68962882af4fa207bb6b323e6230ebd09f0d7555abc34a4f76bc7f6c7fbf393258089a3a11d9ed7284edd0a9deb44bd8b6b1a7
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/modules.tgz) = 13356c7a4e3f09123b31fbd42bcef53ebb10ed61
-MD5 (NetBSD-6.0/hpcmips/binary/sets/modules.tgz) = b820dfc2e2d9420fa72bd887eb9ab505
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/tests.tgz) = 12c5aab5f1f4ab6124d3cb5e8598359b5f893652
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/tests.tgz) = e7656a5f8bb8104576f8218fcbc48c5fdf4d4cfdf407c6805421f1101471c95ac6e1f83444c13ffd1cd82d3b51d4da0d8fc726795b0765363b700d5054cfd553
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/tests.tgz) = 8abc82efc30f6bde5b48bd7778a3774fcd993ae4
-MD5 (NetBSD-6.0/hpcmips/binary/sets/tests.tgz) = d1cd20123adb795808586fef4825bc29
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/text.tgz) = 66f261af8763d48f3c6e62511b0660801b89115a
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/text.tgz) = f7428c73f23bfaec5ddad225487c3e569479c537231c2c7ce46869c6debe07a0bf2f139cecd1622230337871a706d6da3891759bd75166d1ae700e85c014dcca
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/text.tgz) = 8735b6f7b4e4f04f0db4736cce5cced1b12a4cfb
-MD5 (NetBSD-6.0/hpcmips/binary/sets/text.tgz) = 69d9e8e32932f359964186ee95b11c42
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xbase.tgz) = 0299ef346075a8066e40486b3de09de5148940a3
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xbase.tgz) = 077e6b5023eeb6ccbbdd3ebe6b4f677d8a2ac2e76ff235951fe3cfba327f87149e9dd46abedf0963ef465fa829589a802cd0b1ad76a49b983f1766a881c648c4
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xbase.tgz) = 3c7a528dfb109df9525b7f41dd3c1a0ef7ce8bda
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xbase.tgz) = 24312b9cd85e739ec15b4b53ad6955f6
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xserver.tgz) = 9faebdfa18d6846a47ee49174a2b510265cf26c0
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xserver.tgz) = 367f12b49e0ab6793075bed49a4830d8d4ca08eca3d93489c90e55201a4e5d7c1454aaea447684309552c5ca3a695abb800fe9da35ec129f1fc11f80f3d904bd
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xserver.tgz) = ece37a2b4b5096401d6add543d13dc136cabe85d
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xserver.tgz) = 3c0b67d9f4dc00af6b197724b41b572e
-SHA1 (NetBSD-6.0/hpcmips/installation/miniroot/miniroot.fs.gz) = 1e1ce1cba7ab9b704105a3d52f7c5b17773e9ba5
-SHA512 (NetBSD-6.0/hpcmips/installation/miniroot/miniroot.fs.gz) = f1746402d265c51ed693fd30961d3dd7da011a30ad47ccdc709a2a9a5dd665dd884f91de6d56ecab947d8c958bb572a4a19b8c446ec6644fd2f3b3096b14e615
-RMD160 (NetBSD-6.0/hpcmips/installation/miniroot/miniroot.fs.gz) = 15102213a728cb35bcac2a49f93b496b8f9aa838
-MD5 (NetBSD-6.0/hpcmips/installation/miniroot/miniroot.fs.gz) = d910bba08c66b4454242edd78b73cebc
-SHA1 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.gz) = b1cb178b2c1edd93e4d03ab3205c07c701c1a7ce
-SHA512 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.gz) = b982379b9ed3f09895be90c2dcaff7c041e249102bbf72f6ff41bd9100e28990095563db8de6c6dbd40accf3b11f9e0848c2b1bff5dcf0ab9688e65d5229d39a
-RMD160 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.gz) = 6923c07471d3beb90bdb466c1cb76f03ac65ad00
-MD5 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.gz) = 8860562df651f9ca3adf61dd62718dba
-SHA1 (NetBSD-6.0/hpcmips/installation/hpcboot.exe) = 70e5234558257f49964fcb28a19f544670791c47
-SHA512 (NetBSD-6.0/hpcmips/installation/hpcboot.exe) = bcde10547db4de0623863c93a733706edc1096e2535ff6a7574e86ccab25144c0c653d80ccfb1989eaf685e0b0710eab41f34cc2c45a7bbdc10bb9f845326102
-RMD160 (NetBSD-6.0/hpcmips/installation/hpcboot.exe) = ec4e5dfcbb787ba57de55209e12cbbf891c29f7d
-MD5 (NetBSD-6.0/hpcmips/installation/hpcboot.exe) = 9c4073db4cb8cc5a534f709731e271bf
-SHA1 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.symbols.gz) = 6aea661d601c817cef6d1283efe84a23e98bfef8
-SHA512 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.symbols.gz) = 0ae88640bdd00cfd0f1d908bab889b72f71173a376d26159e5bd9221e4241a867f4050bb9c349bf4225ecc4b82ae558002b3303e7c03e98dff7f72f57b08a9fc
-RMD160 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.symbols.gz) = 1ddaff9ebe6775a9b1f98e3d592c9e38f944a5f3
-MD5 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.symbols.gz) = ccf4219237474d2c8e2fa02fe33f2e9b
-SHA1 (NetBSD-6.0/hpcmips/installation/netbsd.gz) = 75ecc93d0f321a819aca2fafbf58a92651c2ef8e
-SHA512 (NetBSD-6.0/hpcmips/installation/netbsd.gz) = 94ef6d49c91ac5ffba39ada8854d3a7be535bdcc7a5121a4941255a30a8c9d68acaebcb1e99ad804360910a45562e3c17b307819ed4f97c1f9a4900c765ac06c
-RMD160 (NetBSD-6.0/hpcmips/installation/netbsd.gz) = 10470fb18a31416543c016667bcbcaab1b454297
-MD5 (NetBSD-6.0/hpcmips/installation/netbsd.gz) = 1acf8ad6849c07fb17c0646acf7e76c2
-SHA1 (NetBSD-6.0/hpcmips/installation/netbsd.symbols.gz) = 8a2bfae03f350dc2c9d83709c8255b8ee4eb9e15
-SHA512 (NetBSD-6.0/hpcmips/installation/netbsd.symbols.gz) = c4917814e14d1163139be52927a5a59d422304289239eae15e91495a9964a16e005865f231b3647964bdfed2658d955ef983fccda7775616df92487e10f36b53
-RMD160 (NetBSD-6.0/hpcmips/installation/netbsd.symbols.gz) = b353f7752d20b78218082d129e4ed5b6702ee2a2
-MD5 (NetBSD-6.0/hpcmips/installation/netbsd.symbols.gz) = 453e0c8ae44500b483151a83e1689a2f
-SHA1 (NetBSD-6.0/hpcmips/installation/pbsdboot.exe) = 3b0a8ac9c0d4c6e7fef95970e81f1ae42462f405
-SHA512 (NetBSD-6.0/hpcmips/installation/pbsdboot.exe) = 28b6b8b3ac983d5fa9ae9dd28127981367720c3754a88fd0b08e404093c657df3df93bceae63835fdaf021fd608002464411818ef3e9becf100e0e7ffd94fcbc
-RMD160 (NetBSD-6.0/hpcmips/installation/pbsdboot.exe) = d713fda3478b92d9dc71347122a1fd7bac6cab9b
-MD5 (NetBSD-6.0/hpcmips/installation/pbsdboot.exe) = 5c184fc062316a94d8408adf0884bee2
-SHA1 (NetBSD-6.0/hpcmips/installation/pbsdboot1.exe) = e937c9bf2759e58c32523ff19c45feeb5e90fe77
-SHA512 (NetBSD-6.0/hpcmips/installation/pbsdboot1.exe) = 65e044958194d15fd58b222dba5470343068ffbe968d43819b11744c711bf75083d1e61df0e433ac846629d8d0ccd14ccd0388b58424a123d4018f9731b6415d
-RMD160 (NetBSD-6.0/hpcmips/installation/pbsdboot1.exe) = 9e072b9c080bcfa4213b36fe9d85ac684de46f06
-MD5 (NetBSD-6.0/hpcmips/installation/pbsdboot1.exe) = 4d6c719c61a98aae297369c41e3991a8
-SHA1 (NetBSD-6.0/hpcmips/INSTALL.html) = 34d4a448b23da2e50007d37ba33938d78baf8b03
-SHA512 (NetBSD-6.0/hpcmips/INSTALL.html) = 508dd90bf6b4543b31108ec82b96a8ef765ffd29d2fcfbb463e380bd8cff6909fcad9673a8c7307b8a524347c20c117a94220dc743813028785520f1739b8d89
-RMD160 (NetBSD-6.0/hpcmips/INSTALL.html) = 3e111666257f4bcbc22fba2a542559733ab56f28
-MD5 (NetBSD-6.0/hpcmips/INSTALL.html) = cea8b96d283b5ddec4b1be43b327a986
-SHA1 (NetBSD-6.0/hpcmips/INSTALL.more) = d4dc5bdab669d3e4a97c6e07e3a4e6634a171103
-SHA512 (NetBSD-6.0/hpcmips/INSTALL.more) = 90924423731cdaeca599d151e56ef996a4a217432ffe1791b3bf7ad2ea3e025ae031d9e237377d1cd7fbab33a6e8e666909a77bb4867be3aac99340e4292d140
-RMD160 (NetBSD-6.0/hpcmips/INSTALL.more) = d8517223e07059e28737972d4cc4ebee900a308f
-MD5 (NetBSD-6.0/hpcmips/INSTALL.more) = 6b918c9fc18e093fdae5e4c61fe2fe3e
-SHA1 (NetBSD-6.0/hpcmips/INSTALL.ps) = eb7befb368fa0e792db5c250f1cf7cfa9d21d529
-SHA512 (NetBSD-6.0/hpcmips/INSTALL.ps) = 42f376e89f871f1a1f223d12816ffa887891818897a591d7b6ac0495c088559eac383449569dda24bfae563991e775c89b55dbec27aac2449ce5363c02581ec9
-RMD160 (NetBSD-6.0/hpcmips/INSTALL.ps) = 718659993cfe1a81d63fcb9b7717e551c7213944
-MD5 (NetBSD-6.0/hpcmips/INSTALL.ps) = 660ff8cf43dcbeacb63a10a2ac4442cd
-SHA1 (NetBSD-6.0/hpcmips/INSTALL.txt) = 93686fc2958437cddbb8e0ab34efa7a153b16939
-SHA512 (NetBSD-6.0/hpcmips/INSTALL.txt) = f71addf8728978547ec7d560a4590e392cfb55bd2d06b9987def48a08373fa27fdc7d2d1bfd241d6c9d8b22297b180b434043ffbbe86281b56edb9d4b714a567
-RMD160 (NetBSD-6.0/hpcmips/INSTALL.txt) = 0da553b2c528d6766776dfae2005bd6ff531e905
-MD5 (NetBSD-6.0/hpcmips/INSTALL.txt) = 3c60451e18599c7e2d8bc6a79c6fc8e9
-SHA1 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-GENERIC.gz) = 0a43926fc91b70cb80d51c78394a2fa54fd98ae1
-SHA512 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-GENERIC.gz) = 42ba58126c60285a642156c27dfa9d89009b41739a832898f876abe6387edac7c36f08e71028c326ef617a29020e525d779def3e583381645b5a1fc6ba6413b3
-RMD160 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-GENERIC.gz) = 0d01f666a4b6fd2df148381e442ee85aa8afc635
-MD5 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-GENERIC.gz) = de0c019c15358bd1673689f590e64529
-SHA1 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-HPW650PA.gz) = c0359ab834228b4b0af9fd92ec0870cfa424fcab
-SHA512 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-HPW650PA.gz) = 6e2d1f10d4eda5725c7293c179162091fb9f04630f14bf37506e49700178b1baee5594ccf70fa3ede42ef702bb512016d9edef3a23cd0777fd40f961a43ba021
-RMD160 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-HPW650PA.gz) = f6b944beeaf6fda516165b2196b429db28741e96
-MD5 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-HPW650PA.gz) = 7dc95c93d4b9b5a94e566c9f5565bd74
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/games.tgz) = 2040b4af557a62f2ade5fc9fcfe4cab3df88c7e2
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/games.tgz) = 8b5071337dc844042537c24c75660e61c9709cd10cbbeab059a84da6d482260b73365ff3870f85060c130a291b6f02be174d288127ca62ce4d291a6982192317
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/games.tgz) = 28acfa5a131d52df7c157e2edca1dd0f20e774dc
-MD5 (NetBSD-6.0/hpcsh/binary/sets/games.tgz) = d82c46dbc0021fd4694e464042936052
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hpcsh/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hpcsh/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xcomp.tgz) = 53aa1e2a910e8eed09dc07f8b724804f53fe5e2f
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xcomp.tgz) = 24645da85419528015cdaefd0c835741fa801392e795b363bdfc39558e75e7f384511c0668d12e2440114b7c543c7532aaec438048f08d35c54c9c7a748f20c0
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xcomp.tgz) = 60a461ffc1f1562274110d65c72a541ee131cd21
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xcomp.tgz) = f1d2650a8d7a4ecd60fda8e1aaf8c09b
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xetc.tgz) = 1636a6fe3e01f6d8a07a19cd204a6807c8caa4c7
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xetc.tgz) = 9cea4ba4af287dd57e591d4269f2f2582010250316f323746ac56b12cefcf2590b93fbb0197c665f61b1df41dcca62d17fb6ad80d4b1feb8ac8265e91e15074f
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xetc.tgz) = 5f68e3f96f7bb9ae07fccdb1d058e4b1307b4b29
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xetc.tgz) = da84d97230787283e215a4ee1c4053ad
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xfont.tgz) = 97439ccf6840b18b1e9885f5504a401bf1a93650
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xfont.tgz) = 3d15541f7d7ae2128f44355bf110415adfa4e5182829259d2c6f7a4217feff99e236d13c5bb7bbeb724ff1a09ac1f58f02bdd6eef528bc416ec3118db6fc7d45
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xfont.tgz) = cdc9fcdb5fd5032803d5bba18db58f3ea6d62c85
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xfont.tgz) = a8466a0477c6c443eafe99e9d1c61131
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/kern-GENERIC.tgz) = 567f596fd760416c4805a60ccdc39634394b368a
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/kern-GENERIC.tgz) = 517a450a02d80e4ae14463b5abcbb4e887d404ac5fd97a2d70092d9d53b6117af874171db26e1b43712b81f6f5f7c23d34ef4d6ee60a911c1288f07ed86675ba
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/kern-GENERIC.tgz) = 9f9a50ba10b38fd0a92e4671a61dc968ed206c49
-MD5 (NetBSD-6.0/hpcsh/binary/sets/kern-GENERIC.tgz) = 43c86c80541870470199c27117d78bdd
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/base.tgz) = 09469ee791c205b746f290108fb4e0fd2d2e157c
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/base.tgz) = b4f946a01df921d1b6b83db51e4da06934be1c23d5bd8602d357c4716524a944abd24f9053c130121a05a0a73b06124b1fb8d2e433b461e7122a6f7994b70d4f
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/base.tgz) = 9ba69deac2b406c07e38117048bc439865eb8061
-MD5 (NetBSD-6.0/hpcsh/binary/sets/base.tgz) = 7a62d7baa2d993d1de3d579d7076fdb2
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/comp.tgz) = 2487c8289908b3f46b47dfe16a78d041d159e4a9
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/comp.tgz) = 9e89c2f701cd69fc74aeb6ab03304f4bb51d73b6ff6c75b93906d2b05e42639e1da36dbce39a37519070a991bf5efe9ae93b29b6ae20da42fe2b01e951a51cf1
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/comp.tgz) = 3843c49d31f966f8d41b2b07407d5952eb788d18
-MD5 (NetBSD-6.0/hpcsh/binary/sets/comp.tgz) = 313b69abf3e1a78923f1a7c5c6f171b4
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/etc.tgz) = 0ede2593731365cb6501ca69865e1fdcfa72717c
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/etc.tgz) = 612da4fc764826c7f374c846d7712c4142d1cd041eb13944c578054fec342a2cb435c8815f9c477afc70a5655e35e9fb9eb1d01ee6c57218c944c6e11f18ffd7
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/etc.tgz) = e226671156547333000c60e32b9b24376cc63885
-MD5 (NetBSD-6.0/hpcsh/binary/sets/etc.tgz) = 420c5afbc0c1dd6c1d7a085979bab643
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/kern-HPW650PA.tgz) = 5534a47bdec7e7e6ce7d5474d3b159ffebe72cd1
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/kern-HPW650PA.tgz) = a7d789cafbe113131a7a93700ec06da4256ab5f93513d2ce96e0ed715a7dd99e866a89a907336a761ff53e53c20ca325b4a569198b75ca806e810395638a0ebd
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/kern-HPW650PA.tgz) = 2dcb3e3e54ce471cd2185469e4f788aeef5c6539
-MD5 (NetBSD-6.0/hpcsh/binary/sets/kern-HPW650PA.tgz) = e146321b865991498743de2b41a3c034
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/modules.tgz) = 36ccb3afb83508f713aa2aabd8c66990a7bee974
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/modules.tgz) = a9cc7bdcc7e3cb7aab35d329095b0b67cb46b13850f9897433539ce2836b96d38ba69ec95515ae8988a80864f865546dbb619352261f8e413ac21580c78a7be4
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/modules.tgz) = 29b45abec58e7be9e801cf6a2be74bcc56df595e
-MD5 (NetBSD-6.0/hpcsh/binary/sets/modules.tgz) = 82ca10605dffe603d39ad994e305b53e
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/tests.tgz) = d7eb3b59410ff4f341e9dd65c9995e160684fada
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/tests.tgz) = 443ff8b932876a515b75ac9b4eb1e225d2d09bd7dfc531f6e19f812e659de4644d0aac96ca74e73aa877bffbaddf13d308905f28cfe23d48a6cef1decf9b820b
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/tests.tgz) = 7030e2b09ddbe4bd952524d58f0916b2079a4bb1
-MD5 (NetBSD-6.0/hpcsh/binary/sets/tests.tgz) = 9a95f9e73414b2c3ad7acbb2241178fe
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/text.tgz) = 028f0e33f75acdbab625786cec067f630aa63e4a
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/text.tgz) = 434ec2e2627f4068e75db33cf4ad353ae1c7437c21d4aa0e861f06fb5eb1d85bae5ca15f7c1091017f76adb8b517a6e7860c5a406d157cf4485c1e6acfedfdda
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/text.tgz) = 37213e71f1fe2e1d8222d4b64ea6cbbbd2e40a4f
-MD5 (NetBSD-6.0/hpcsh/binary/sets/text.tgz) = da797fc1c503a808baea4b873b4575eb
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xbase.tgz) = 3c17cc530069599ced85ef999be6012422973217
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xbase.tgz) = 3dd6421f3248867b6015fcc420b29dcdbe82506c75b7bdd9698dc55b1a93e54d078cc93a68015ccf4bae00dcc96695702acde53f0a47f521116081f44255e205
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xbase.tgz) = f3a5a0df1ced2758ac1016c970034a8a7e9f16c2
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xbase.tgz) = fef3052b786c27898ebfcab88012729d
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xserver.tgz) = e518391c0fa08ecefd59c19049aa8b6e05427683
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xserver.tgz) = 85fe307f64bf7b5eb0300293426a377ddde46de15d7cdc7365eea65651d5b952cee395107dc6d73c55b19d43b19c47bac3bdc253d251c5f98858cd2d0aee8cad
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xserver.tgz) = 04274aa41e6f003c492c4d27e8a7182694a98386
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xserver.tgz) = 3fb668ea3e2d13574cd78b5a59cc40df
-SHA1 (NetBSD-6.0/hpcsh/installation/miniroot/miniroot.fs.gz) = d65c961e5411c64f1110f55036f20c59b3a4ef75
-SHA512 (NetBSD-6.0/hpcsh/installation/miniroot/miniroot.fs.gz) = 95a54cd59939533feb467c23085569f35f2ac246a205825acb84ad8c144ae0c6cda888844270f74d452c5bbf4bd7056e9ae62e56f22c598f21a2cb92dcd8499b
-RMD160 (NetBSD-6.0/hpcsh/installation/miniroot/miniroot.fs.gz) = 10cd9e01b234129588477829523bed1ea19164f2
-MD5 (NetBSD-6.0/hpcsh/installation/miniroot/miniroot.fs.gz) = f5098b166d3da210356a284e484315e5
-SHA1 (NetBSD-6.0/hpcsh/installation/netbsd.symbols.gz) = 1a92b94312e5e4cdf5c088342d52040948fefc6c
-SHA512 (NetBSD-6.0/hpcsh/installation/netbsd.symbols.gz) = c0ca68315dee6c402bcd7a0180808d4a1c9fab799466d76a8fb460ae110c22fee7ceae5dbac451cb7a0d7ddb59d3af49f3965de88201778c7b14513f2ba1e61a
-RMD160 (NetBSD-6.0/hpcsh/installation/netbsd.symbols.gz) = d9c41a7a101b96727c040c0fdd992ba57999fc89
-MD5 (NetBSD-6.0/hpcsh/installation/netbsd.symbols.gz) = 67c48072e6d7c01c9c35c60071d1e371
-SHA1 (NetBSD-6.0/hpcsh/installation/hpcboot-sh3.exe) = 567ca586f3c3604143e61ee4b644faed466cf60c
-SHA512 (NetBSD-6.0/hpcsh/installation/hpcboot-sh3.exe) = bbbda6cb7c671816e07ac1ba9a05f57632f501019f9e7e2b3a373aa2b55bd56d600f7a6353fe433201284b0ff43908bc988f12568d95b251e8b89d5d5656b244
-RMD160 (NetBSD-6.0/hpcsh/installation/hpcboot-sh3.exe) = cac5d9056182928594f5c15b2c5d8a6bb54e6654
-MD5 (NetBSD-6.0/hpcsh/installation/hpcboot-sh3.exe) = af41643f4b488f837514418c34d06eee
-SHA1 (NetBSD-6.0/hpcsh/installation/hpcboot-sh4.exe) = 3b04443ede94fb5345be01440dfac5c600e46683
-SHA512 (NetBSD-6.0/hpcsh/installation/hpcboot-sh4.exe) = 60ae23af771f81a472d5ea84b5df140f9b2c2678753ca1878d51157366c9d04253a41b19a6bb5ef08ce755ec82b9fa67f82209fa6a0e49eb507e4ba8118dbc3e
-RMD160 (NetBSD-6.0/hpcsh/installation/hpcboot-sh4.exe) = 69a4509e0e173a94a2720f1469a00dd424e19ee4
-MD5 (NetBSD-6.0/hpcsh/installation/hpcboot-sh4.exe) = d259e7fcc3c329c95448f96b7fda6920
-SHA1 (NetBSD-6.0/hpcsh/installation/netbsd.gz) = 77bc4656ee9ce29522e56beeedf26cdec6df77ef
-SHA512 (NetBSD-6.0/hpcsh/installation/netbsd.gz) = 98ba42e9f3d8be016785ef5a807d009f6f8cf46a7c9c4abd8ad860fca5db37bbae22bdfe54bcd8b5963b1d0aa8610fca21402817ceac6b6e59a2c8cf7e986f21
-RMD160 (NetBSD-6.0/hpcsh/installation/netbsd.gz) = 705cf57dfbf1a1ee4e3629d1d82a60b8aa8cd6b6
-MD5 (NetBSD-6.0/hpcsh/installation/netbsd.gz) = 75c72e83a03c4d9f316f28e81c428c2b
-SHA1 (NetBSD-6.0/hpcsh/INSTALL.html) = 8ab73c33b0ecde2e0b0beea372a7996e866553ef
-SHA512 (NetBSD-6.0/hpcsh/INSTALL.html) = 7d7f628cd37890c8db79d76dcc9d87984b6ded522ccb2cb5670aa4a40114b1b323cb78b1b7274bb4bd27daefa25c3ee1dd0c6611736222ee546d0dd895cd6e52
-RMD160 (NetBSD-6.0/hpcsh/INSTALL.html) = 1e3edb91c943f9e1aa17315a592f5c68e7d66487
-MD5 (NetBSD-6.0/hpcsh/INSTALL.html) = 7b6883d6de2349156019286bbf61d14f
-SHA1 (NetBSD-6.0/hpcsh/INSTALL.more) = 29137bc092201f10bb2f2725d72299b5e5475b5b
-SHA512 (NetBSD-6.0/hpcsh/INSTALL.more) = 6a8737896c43bed9befbd131f8b13fc6070008f13bf9a9e798cc5bcb2210271f92c8b4138b20e716b5f48aeb478bc7ca9be66347d8636fdecd7bebb013b35ebc
-RMD160 (NetBSD-6.0/hpcsh/INSTALL.more) = b50c579d04464e3781f5bf7dcb4b69327d79a9a9
-MD5 (NetBSD-6.0/hpcsh/INSTALL.more) = 4f08e258b707193fea1797d2915df90f
-SHA1 (NetBSD-6.0/hpcsh/INSTALL.ps) = bc5b3e51e6a6f8a09ccac7db7f1ac85366921911
-SHA512 (NetBSD-6.0/hpcsh/INSTALL.ps) = 3945a024ba07da3ff29847c33f4061c8395113eaadf053b603b1391c3b994ee23c271442d90b8e9cfe104aee458348422068b5e704f8c89f2cd248e248414f36
-RMD160 (NetBSD-6.0/hpcsh/INSTALL.ps) = fadfccdee249158cab774c1bae128f6889f9bbd1
-MD5 (NetBSD-6.0/hpcsh/INSTALL.ps) = 01cdb6201ba834eb25dd70d0cd7dd827
-SHA1 (NetBSD-6.0/hpcsh/INSTALL.txt) = b291d1be7635867dda1fe5ffb3f24d41b43107ff
-SHA512 (NetBSD-6.0/hpcsh/INSTALL.txt) = 7a5ecbef64ad55680dcaa3e58319a5019096e1fef9ff24de2a8401c29b4006520dc724ff740c14f8bf56cc4fca1bf26a5525040c63d0de3559cfdc7f34710e2c
-RMD160 (NetBSD-6.0/hpcsh/INSTALL.txt) = a2e4347c690cb982b5097800f74a3729dc6c2628
-MD5 (NetBSD-6.0/hpcsh/INSTALL.txt) = 39020135702f1291d2691258a598ef52
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.symbols.gz) = 747df3225196d826d632a750770850510c725c3d
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.symbols.gz) = bf7546bf878dc86c2579e4660adfe0dfc2e7aa06416526ba2ce70425fee806f92bd7e61d2211aa8f302e167f77dd5e61674a1144274be7a3b9a14c13f2a758f0
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.symbols.gz) = e2aef01c044902e8685f72d3f0bba4b0ed6857ce
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.symbols.gz) = 71aca09f9e5bd22fd42144fbadabcda5
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.gz) = d680282ec53e51ed2f2df312764748ef2dbce31f
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.gz) = b9c3bf1bd9a442e5a7e7f515561771436b4c43e44cf454db37c94070de292aa6c00ab0a95957f80f71ffaa517a60dc1651bcb4452853f35fd541cbca2df87139
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.gz) = 60783b17fa32bdef611c8c8c793248f2494f8b4f
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.gz) = 780873f1a06cad1f8e2644f2827e6b8b
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.symbols.gz) = 986e2b589d49d58105c82c1a3bf8d4292f5ec1c0
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.symbols.gz) = 0919e2e21da9aace7144d82119ecf8097548ad7179b5f8b495b72b6ad75544c72d462526d7625a2b42fbf9c68a436b2d233ca7e06367f5ddf5be3386d67659ac
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.symbols.gz) = 4abf1e4dd5c1df9578a256eb7fc9bfc6de174f60
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.symbols.gz) = acd73bddb752df740099d651da32881d
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.gz) = 88fdedc8bea8f6e139947e6e4a8922324a2073a2
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.gz) = 0f13507f05a4dc76faa937fbb9dc8c5107b55e2a7dbcd97a6fd2dede7c2dff1f16ff0b908433b826125a2e1f5c4b9d14b9a809e920b92acd88968588b8129f1a
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.gz) = 0b7be220f16b74210af24ce8bbb42402909ad847
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.gz) = 85d626d678c978ad387238dfc76e20a9
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3PAE_DOMU.gz) = 82987dd8d3d035c3741ec54e567c797aa527b85e
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3PAE_DOMU.gz) = 43c9d6c594b997834e1bfadf63a20fe0735947419a1e86e9e06bc97a7953738219eba2072f9a7b1fa6b23870287be413650145234d2c58166138bb00bd0136a2
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3PAE_DOMU.gz) = c0c2edf5e75878f0a07a2d7f971d020a16bd33dc
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3PAE_DOMU.gz) = a6a8ef4a7c0da213a9821e7f2d0e18c8
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 67b61d551fd822e4578b9a8d54bc4a08a39f8b34
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = bfdb3e7ab7a5456434117156bd187d1f111eeedbc7a2d568266fecfeab33bf847fcc4b72e6edffe8015841b87aa04645c1c0442ce521c8965cd7007326b38e78
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = c5378820ecdb9baf20fabded1f5caa4a1d6a3021
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = a09e8070066fb225a26b0904422e1704
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-MONOLITHIC.gz) = 205b7f5a5c457a2db4c997c75c02d1f55a0692e7
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-MONOLITHIC.gz) = 68953183a437b13d94af72acbc231553e6aa57f4e3acbe432e710ad452317b974509a9ae83ea0f350d24164de4d1ae6a3d8d4a221e31c61734b67df026b93b03
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-MONOLITHIC.gz) = 11fd88405a800b36b7b030991e632d17992f5e15
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-MONOLITHIC.gz) = f746f0b2fcebfb329cdd45181f2acb74
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOM0.gz) = 6c7943423d026377f0d9308e8aac75d52f08907c
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOM0.gz) = a2fea33cd4aaebb2c2e69d8790ea40b0c2f00e8be3a823ca93274e534a751fe04efdc9d5ed7fc15897c42c9cc7d987ee645f50897cf6ef55383c448885a324f5
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOM0.gz) = 948c072d5d1424578e2ff5bc3bc7bca39364f8e0
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOM0.gz) = 1d4aafba1a470802f7f2c7e10e98ca52
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz) = 2ae71d2f1c2b512d124e2d92d431ab5b2c1f05a7
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz) = 9b553c5b145d2b29b9032416bc01f5c43bbad80f2c6feb1e96c881e4d1dd77c02740413cefbbd4fb6cd247cb75fd24959d5a60d3210020548236e3a14a82a65a
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz) = 2b884a96bb6cdc3059448104c7ddafc31be7c188
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz) = dba74b4cb61cf1606556492f6f1b213c
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz) = 7b21a86bc29b1573539105b83e6f847124afee15
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz) = 9f0a07816ba899e5d003750e1320c6f83c66bee70b71b1356980e64019a4eeff2ee105eea33dc31822c614609782e3143c6575afa7cd9dbfdf05c119ab2cb92c
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz) = e976db5aa9e2e5e1109f804913e5a8f075708f85
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz) = b8ec7670143458921b7dd71f05251257
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOMU.gz) = f528d474640a5bda692eb50859c208f2277ca61f
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOMU.gz) = 24f2b7317b51e12e15084d1aad1177a63d37be3ecc3777de4f7b2b93076e4c980a4667c7013db8bdb500e033e745adb665c45aa842d4422494d67beb3f2f4442
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOMU.gz) = 373525999967fd37d620cea1b0b38692ea102d64
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOMU.gz) = f76afc8d70580acebe22d4daba31df3b
-SHA1 (NetBSD-6.0/i386/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/i386/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/i386/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/i386/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-GENERIC.tgz) = dfbdb16d93f42cafac4314e173c3698abb2b2249
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-GENERIC.tgz) = 572284b4e2daab363f9f89f6bb9b80428f6d048fbb70120541b7cff881ed7fd8145b2a5dcafb63160a4292d286e57a3191154267167cedb7641f1ee3098072fc
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-GENERIC.tgz) = e663f76167f352828f007b3271408d0c4d1f6735
-MD5 (NetBSD-6.0/i386/binary/sets/kern-GENERIC.tgz) = 43a3993a20de2d5c58aa9a1aa90dc667
-SHA1 (NetBSD-6.0/i386/binary/sets/base.tgz) = 5847817e7b75483373fe51fb6b465404cb74e1ad
-SHA512 (NetBSD-6.0/i386/binary/sets/base.tgz) = 927acc412e1372e2205d4c90fe017b2812bbd6036823b6a18bfcc33513279bdf9f02731b874ad73f614da46194bdacd525a8bf9e301c5842f3f6475fa27507be
-RMD160 (NetBSD-6.0/i386/binary/sets/base.tgz) = b36be3ba67b7b2209c5baf2fe314ddc2a7254054
-MD5 (NetBSD-6.0/i386/binary/sets/base.tgz) = c643ea74ea234056b1f741a561790c1f
-SHA1 (NetBSD-6.0/i386/binary/sets/comp.tgz) = 0f22e69dce5b6678e1ab117b875c7b28f2a1224a
-SHA512 (NetBSD-6.0/i386/binary/sets/comp.tgz) = 99a73445be3ac1354a3ec94c7b4d231d3fe72bc2bc7cc020c9dd4c74d5fa06f1a7e681f48a2dbf3e90f0d8e611d51e6524883a1a4edf1494607259bc1c49a99b
-RMD160 (NetBSD-6.0/i386/binary/sets/comp.tgz) = 1bae0e183624d0dc957e24eb52041e2b3e42492c
-MD5 (NetBSD-6.0/i386/binary/sets/comp.tgz) = 5cff8ef6491c3b9270310558ca8360db
-SHA1 (NetBSD-6.0/i386/binary/sets/etc.tgz) = 00df7a05fddcdbbf9e0ee430c634fd1e1da2a2db
-SHA512 (NetBSD-6.0/i386/binary/sets/etc.tgz) = 0100afa02f2c0f09bcbe513b282b7e23124b94d5d77816f88c7b927e0625bedde3020b0c34e03f26da5d53941cdb0aac1398d2e15c9b4bc6cbb4e46e4bf8786a
-RMD160 (NetBSD-6.0/i386/binary/sets/etc.tgz) = 978efa1d91dea561eaa148f4da679a88e1730c7e
-MD5 (NetBSD-6.0/i386/binary/sets/etc.tgz) = 3f174862437df05c82293f93a42a52f3
-SHA1 (NetBSD-6.0/i386/binary/sets/games.tgz) = eb79bb969242401a2573c8cb861e399f374ffdce
-SHA512 (NetBSD-6.0/i386/binary/sets/games.tgz) = 537eaab987a71933b63673477c276cf3b558f4dd46331ea224f5c0f2b0ac387fb591a7880b1055225746b9c46fcb4ff0f8b72382a629abc6af6315ee038c0d0d
-RMD160 (NetBSD-6.0/i386/binary/sets/games.tgz) = cfbc8842fcc975fdff71c6fc472396d533d8aa5c
-MD5 (NetBSD-6.0/i386/binary/sets/games.tgz) = df096416d676f1a44710711d7c895329
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOM0.tgz) = 714c9b6c0a41973c06ea62a97babb7000ea1245e
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOM0.tgz) = 97529a4c90a36ad65bec57dca59bc80f724981c4358d32195e3b4e614761fae96a79cab552fe0388e7c8e57da581a2b07a84a44d12d32f23e6ce45c771493ccc
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOM0.tgz) = 0171b60434e21cf6d29d38300c05988d19ad1783
-MD5 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOM0.tgz) = 6baad66e20421f3fb0af25e4b95f8a6d
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-MONOLITHIC.tgz) = 52d1f2b561194201e67abf1ba2c1726d72e97984
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-MONOLITHIC.tgz) = 19aa162f30e144882f2924be4b864821e109991ca16027c4016d54baf812945c8231f423d141091f08ecf8dc9310a74fcbae43b6ea18578afd1bef3346772cf6
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-MONOLITHIC.tgz) = ca3d3b0cb59e5d5ba2089b6cf250c62c079b6855
-MD5 (NetBSD-6.0/i386/binary/sets/kern-MONOLITHIC.tgz) = 56528935806a8a2ec9f48c6dbfd9c175
-SHA1 (NetBSD-6.0/i386/binary/sets/modules.tgz) = a6d22e796d8b1f344b43bcf38fbb79e53ffdce13
-SHA512 (NetBSD-6.0/i386/binary/sets/modules.tgz) = 9bbf31b0e1c1192e9ff0ff38f0978c4c2972a82638e63f5f023bd7263ff9386d36cfd666e55e62a6bf3bf3e8c47571252b3508e485ec86830caaa89c66c19fe7
-RMD160 (NetBSD-6.0/i386/binary/sets/modules.tgz) = e3dcc86e04adaa6f347d51801422854b35fcedfb
-MD5 (NetBSD-6.0/i386/binary/sets/modules.tgz) = 71908d43cbba617e2ff14e3fffa3dae0
-SHA1 (NetBSD-6.0/i386/binary/sets/man.tgz) = f526dfe015359f1181af9cf3dc6061960289451f
-SHA512 (NetBSD-6.0/i386/binary/sets/man.tgz) = 75dc7781f8531f09bee6f1696561d036b12f08a66a44c4e56b11986e6d91df213ca8b4c6e59da9a2168038c94322c6cfdcdeb52125f5fb03c5b84cdb9522bd7a
-RMD160 (NetBSD-6.0/i386/binary/sets/man.tgz) = 1f8551b79ca0342aaf8df0c6f2a77e7337cb7672
-MD5 (NetBSD-6.0/i386/binary/sets/man.tgz) = 6114b3fadf0a5e3bf8fde0e7bf0101fc
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOMU.tgz) = 4e24d5f9641c69962f0e9124a3a0082074db7117
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOMU.tgz) = cbbd3c74d74bcd20c8fe2dfa5052b6886a5d25bf8c7aa595638655af790072bd3067e8555201849c2f3d0ec67465f41721c4a8aa14fb060231683de850fd6e99
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOMU.tgz) = 56610e7d2c9e2844ce0516255bbf76b330d23f80
-MD5 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOMU.tgz) = e79dd5d5ca1fc640045efccb106e6a01
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOM0.tgz) = 9c8c6c75aec356a4b6591bd5ce5fcf0e76536c41
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOM0.tgz) = 2acd400b61f87b32e41daf0cb89b512d887f222310cab9be25f2b030480b720042c86abb68ae81ba73875a2c70dfc01184e1e771ad671e98383ce9c8357b4e8e
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOM0.tgz) = ac64d2c3ff6ff7352d43f4f275cfc07a509e40de
-MD5 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOM0.tgz) = 5541acebbb837f4882be868d86bc2b22
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOMU.tgz) = 01432bab26f65297c0739bc3eb4740bd984d67ab
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOMU.tgz) = bd7221f127923ebbd3099589b5bfd332cadbdcf2ad29870b9eee66b8241d1ad50c4d9481647d41d9ceba1e7071735538acd19d458d78e666d2b8ae1b097f993b
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOMU.tgz) = f9c5fd62ac6b11f4cb1ab8eb648f4ee51209ff17
-MD5 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOMU.tgz) = fead463ca4403cdf358b55114421e53e
-SHA1 (NetBSD-6.0/i386/binary/sets/tests.tgz) = 65e60f978857f50c36bf4066ad82acee0ef06af4
-SHA512 (NetBSD-6.0/i386/binary/sets/tests.tgz) = 714220aecacd2640160768ae00089cb25b5d3b5cf29f715e32257889159699566fe8d9b3bbcfa7bb6e2864ee1945dbfc61b48a66e20463025774616d91cc5392
-RMD160 (NetBSD-6.0/i386/binary/sets/tests.tgz) = 83c54132cfa9e7b0b5352466070bba098576ff86
-MD5 (NetBSD-6.0/i386/binary/sets/tests.tgz) = 1cf15f457ca67156d7dad0f7723ed259
-SHA1 (NetBSD-6.0/i386/binary/sets/text.tgz) = 0e426ee26f13d2523798fa8c09e934725087dc5e
-SHA512 (NetBSD-6.0/i386/binary/sets/text.tgz) = 2809f127e3baa3e6ebdb181c31620b68d01e90208bd191db99aa9657c91db9a97b061cdfdc2d7a39fbedf2288067f2ed885d6515fdcf8e5b5a68dc754e9b3e30
-RMD160 (NetBSD-6.0/i386/binary/sets/text.tgz) = b30ff1dd8f2cfe414939980d4be3b61f39c04353
-MD5 (NetBSD-6.0/i386/binary/sets/text.tgz) = 2667947b26dffe05f3de7d1e2c8906d7
-SHA1 (NetBSD-6.0/i386/binary/sets/xbase.tgz) = 934f64b717d722045717691a55fb9d295f83b4e3
-SHA512 (NetBSD-6.0/i386/binary/sets/xbase.tgz) = 385cf3a944f4a6ef7271220f0367f12d123d9a2b84ebd3ca46181279f7cf5d544a946df3e10ea52f1e07638c5bc5d0b766fd63bed4e08b468f6ea5b0a75e17de
-RMD160 (NetBSD-6.0/i386/binary/sets/xbase.tgz) = 04203a7b8bb5cd1a41aeeb2b92697677cfe58e98
-MD5 (NetBSD-6.0/i386/binary/sets/xbase.tgz) = ec9f6a167fd05c459f1fdf8cc889785d
-SHA1 (NetBSD-6.0/i386/binary/sets/xcomp.tgz) = 7bc2f4e10afaa599959832c62f024d9f2f45bc10
-SHA512 (NetBSD-6.0/i386/binary/sets/xcomp.tgz) = 148bfb83357133e5377aeee82fdae29e0b90913ba59b1f51264108ca70010d55bd4adc4ce0ba7611a83b5f3f13307f196f724f3cb3a170d7f2caef801b79cc38
-RMD160 (NetBSD-6.0/i386/binary/sets/xcomp.tgz) = be8c61b5890936fc93dfb88c02c5f17f79f3cc73
-MD5 (NetBSD-6.0/i386/binary/sets/xcomp.tgz) = 9c25f1bf64f97c778e3c87b6e0e72871
-SHA1 (NetBSD-6.0/i386/binary/sets/xetc.tgz) = ea4db636b3919906a00e7b161b2c5f62fe7b4fa6
-SHA512 (NetBSD-6.0/i386/binary/sets/xetc.tgz) = a59442b3ab58c33774197f9bb28a96836b4c519c750270bd880d166250523f8119a68a9de6b6861f76cdf713da9682772e754075c965c56aa260b52ed837943e
-RMD160 (NetBSD-6.0/i386/binary/sets/xetc.tgz) = 28e3ce094b557af508e1ec82ef46ebb01eb68509
-MD5 (NetBSD-6.0/i386/binary/sets/xetc.tgz) = 2a521f73ba4bd630070b01f24c8647d6
-SHA1 (NetBSD-6.0/i386/binary/sets/xfont.tgz) = a7a41c82046568a695ba0afeb81d11bf92e67950
-SHA512 (NetBSD-6.0/i386/binary/sets/xfont.tgz) = f46f4c6b4c61bbcbde85333cc714654902263c92e70035545caba3f3e2d5029cb074c8e427c85ea83b8478b19f32b93c4735a7adf64cc75609a4acd1118d0416
-RMD160 (NetBSD-6.0/i386/binary/sets/xfont.tgz) = 8863108bc2cc456cd1298b5317f519c5c6b3147a
-MD5 (NetBSD-6.0/i386/binary/sets/xfont.tgz) = 36e968072dae462efddd6014f9f44272
-SHA1 (NetBSD-6.0/i386/binary/sets/xserver.tgz) = 27fd7ca36d5a3ca94b66eb5fd81ceeaed1648fe0
-SHA512 (NetBSD-6.0/i386/binary/sets/xserver.tgz) = 6a0d364672e4513dbf4c76c1cada80f84e774efa85c3e1fe4865ab26333765fab1db8ce3b590682a3e2c63895165e0d694c3e6717789b2f0ec87defa608930dd
-RMD160 (NetBSD-6.0/i386/binary/sets/xserver.tgz) = 7521930788a2410a2842767b9c2886af83fccad7
-MD5 (NetBSD-6.0/i386/binary/sets/xserver.tgz) = ce3565a1b5e8af09e54ef8488edb14df
-SHA1 (NetBSD-6.0/i386/installation/cdrom/boot-com.iso) = bcfbd8c6288248e55d78704802dfdbbd1d20519a
-SHA512 (NetBSD-6.0/i386/installation/cdrom/boot-com.iso) = 9531877436cf8853db4dbd96672cb13a0784a1eef2a90ab43aeaae421f70bb6bdab7d5c10095f186b733d04ee1184087ff7b5d26ec7ef77d0783ee0f5c0d21f3
-RMD160 (NetBSD-6.0/i386/installation/cdrom/boot-com.iso) = 46205ca4d924c43e85b01b7750274f31fa2ad170
-MD5 (NetBSD-6.0/i386/installation/cdrom/boot-com.iso) = da3da9b120520e631bc5c17dfb70bd27
-SHA1 (NetBSD-6.0/i386/installation/cdrom/boot.iso) = 146e96103568f2ab3e98c1a0c7b98f89a93ac474
-SHA512 (NetBSD-6.0/i386/installation/cdrom/boot.iso) = 5073e008276c0fe9a4c3231bea37b2534e40d20b17d32a5bb30e9811a0578feae08a810a808201f44f74ab7258a58c5c1dfa1cc59ad0d4d41eff02f6772dade5
-RMD160 (NetBSD-6.0/i386/installation/cdrom/boot.iso) = 54ff36aedaa5266fb788b1b3f74dee0799c432f7
-MD5 (NetBSD-6.0/i386/installation/cdrom/boot.iso) = 6d1fae4935084e853fa152e09b472be5
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com1.fs) = d4891595c9155d7598f1718cce43ed2fde9d4aa8
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com1.fs) = 89d2af1f41e20deba16c1abfdc4709f353021710ae33ff40f9f4f20dd4c875db855f2bddf9af444f49dfb2d1d1caf0a2f3eab7bced113c45708da590092c9b04
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com1.fs) = f2d8d259d8abaed540079cb0301fd111462bc0ba
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com1.fs) = 320d7fcd247eee78495d4bc56205ba9f
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com2.fs) = 25012df4758eca3d307004fe1b448bfd1002b6ba
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com2.fs) = 3ad3778e665bbb8a0ea8e39d9c6a9144a79fc158aeef0af4bac90ee98561beb460b2f3993c929f27a1f26170be53d153faa0ec523e402bb1143d9cec5a54ac91
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com2.fs) = e76b6f6a667e4548f8efdce8fded360a9ab7ce00
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com2.fs) = 1c731748f3af6300b39311051870dd5d
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com3.fs) = 00f812e968818ac87e2f0217b9aa2f67cf1826b2
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com3.fs) = ac293ed38646e83851e74e70451893b301fe935fd4ee91fbe2f66d4a49583763ce3a5a123f05e38d0806e6b51c6db01dce467908f7ac49447b872e1a06364e74
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com3.fs) = cd261aa83970e5699763ec792aebbc4bcedae712
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com3.fs) = a9073f83732b763206b32fd46c166fab
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com4.fs) = 6d9f052a4ba66b7a8d818418c7548a96b358189c
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com4.fs) = 86909e41525fe7744c3e10f523b7bd2651a80a000906e7040bae8fadeed8f2ee00e6d39998aab110a4aedbe9af95aa15eff7a8fd5781b6d979545c7751c54aea
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com4.fs) = 64980af391f001e6b67d6b603fd67e3d424a48a4
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com4.fs) = 9868c40fe2e4e26b0db5eb1a24d4b84b
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com5.fs) = e138754c8978462f24c07a3e61be0085592ab1be
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com5.fs) = 785ae7b940e77d108d20f4c8f9625db138334144e740ccf15949e4434572115fdcafecce25c3ea9c0e0d260e7d4c526a860bacda09ab8b2823d5d48a3a220b1a
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com5.fs) = 9eae2380cd42784b68dba1da19eb8e7a2f37940e
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com5.fs) = 6f1b2546ecddd49db5fae090706ced45
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot1.fs) = 955c193dc080b69fe111652972bb1a4a5fb88b70
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot1.fs) = bea5bb410069dc463f5d670ca33a8040c6bc741ee30e90c93492ce5110334f0e87cc519571f35f2962bc18de0352c3f50002ceb8346f4aed84069b60c61740a8
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot1.fs) = 3828a790e9743011d6b2f257f79deecee3686c4b
-MD5 (NetBSD-6.0/i386/installation/floppy/boot1.fs) = 83997622af685d71b47e687ee0226d5c
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot2.fs) = 25012df4758eca3d307004fe1b448bfd1002b6ba
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot2.fs) = 3ad3778e665bbb8a0ea8e39d9c6a9144a79fc158aeef0af4bac90ee98561beb460b2f3993c929f27a1f26170be53d153faa0ec523e402bb1143d9cec5a54ac91
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot2.fs) = e76b6f6a667e4548f8efdce8fded360a9ab7ce00
-MD5 (NetBSD-6.0/i386/installation/floppy/boot2.fs) = 1c731748f3af6300b39311051870dd5d
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot3.fs) = 00f812e968818ac87e2f0217b9aa2f67cf1826b2
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot3.fs) = ac293ed38646e83851e74e70451893b301fe935fd4ee91fbe2f66d4a49583763ce3a5a123f05e38d0806e6b51c6db01dce467908f7ac49447b872e1a06364e74
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot3.fs) = cd261aa83970e5699763ec792aebbc4bcedae712
-MD5 (NetBSD-6.0/i386/installation/floppy/boot3.fs) = a9073f83732b763206b32fd46c166fab
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot4.fs) = 6d9f052a4ba66b7a8d818418c7548a96b358189c
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot4.fs) = 86909e41525fe7744c3e10f523b7bd2651a80a000906e7040bae8fadeed8f2ee00e6d39998aab110a4aedbe9af95aa15eff7a8fd5781b6d979545c7751c54aea
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot4.fs) = 64980af391f001e6b67d6b603fd67e3d424a48a4
-MD5 (NetBSD-6.0/i386/installation/floppy/boot4.fs) = 9868c40fe2e4e26b0db5eb1a24d4b84b
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot5.fs) = e138754c8978462f24c07a3e61be0085592ab1be
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot5.fs) = 785ae7b940e77d108d20f4c8f9625db138334144e740ccf15949e4434572115fdcafecce25c3ea9c0e0d260e7d4c526a860bacda09ab8b2823d5d48a3a220b1a
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot5.fs) = 9eae2380cd42784b68dba1da19eb8e7a2f37940e
-MD5 (NetBSD-6.0/i386/installation/floppy/boot5.fs) = 6f1b2546ecddd49db5fae090706ced45
-SHA1 (NetBSD-6.0/i386/installation/miniroot/miniroot.kmod) = 3949ed3ca0384f45c40b59eef585566e947fc150
-SHA512 (NetBSD-6.0/i386/installation/miniroot/miniroot.kmod) = e91e8d4aa8ef1f81945c495df4b43f8bcc669fa1f0183c5d0092d526889d985432d6f318418a42910596f1f44cc0d235d32a0b5e3aa1572198182ff1d90188c1
-RMD160 (NetBSD-6.0/i386/installation/miniroot/miniroot.kmod) = 2d67e98155d79210ae2349fb13937724f79cef47
-MD5 (NetBSD-6.0/i386/installation/miniroot/miniroot.kmod) = 2fbac91d26cec04141c2c79a18aa839e
-SHA1 (NetBSD-6.0/i386/installation/misc/pfdisktc.zip) = e3dedc5211120fdb8259075541a6bf4fdb5a0c5b
-SHA512 (NetBSD-6.0/i386/installation/misc/pfdisktc.zip) = 2f4daa1b52b4f40be868ee04faf9b55f17df64ca03ed0b6577f2f1680692226b68d84c0a9f59fd0b08085219555c25e52e447053a6e03589957718b954aadeaf
-RMD160 (NetBSD-6.0/i386/installation/misc/pfdisktc.zip) = 29ed32ef8b4390bd1545f9337f16994a154c20e6
-MD5 (NetBSD-6.0/i386/installation/misc/pfdisktc.zip) = 33c938480de81999f82a3ba3fca0b233
-SHA1 (NetBSD-6.0/i386/installation/misc/dosboot.com) = 0c89f2a01913cbd69002b821273fe196ff835f89
-SHA512 (NetBSD-6.0/i386/installation/misc/dosboot.com) = 661bb1a057d23a8dbd8f33216e590439e83b8cbc1ee7988980de68890148c8d86b9e58254be366afdc92b8238cf1d304ce972b518e4656ed9a378fa5eb7e03e6
-RMD160 (NetBSD-6.0/i386/installation/misc/dosboot.com) = 11182a8c2c18dc561e9b07f84895e21f81d42aeb
-MD5 (NetBSD-6.0/i386/installation/misc/dosboot.com) = 8d32a69f5a7c200404b5e6747eb38397
-SHA1 (NetBSD-6.0/i386/installation/misc/pfdisk.doc) = 9886ea575769f46c49251fe1b096c860457e996b
-SHA512 (NetBSD-6.0/i386/installation/misc/pfdisk.doc) = a34e971ec8a0d1eb5107ddfa2a5a6c7eb028ec58235983658ccee2e3b42bd2e40e2ff4504a2b6aa16668a918e17f0d1866ca4ef904df114f30674dd9f8e32c17
-RMD160 (NetBSD-6.0/i386/installation/misc/pfdisk.doc) = 9e6ddcbeab7d6894f3173efbc9b1067d40d79409
-MD5 (NetBSD-6.0/i386/installation/misc/pfdisk.doc) = 7c9091037c42ecd0d1fb67275af0650a
-SHA1 (NetBSD-6.0/i386/installation/misc/pfdisk.exe) = e780cbcd893d446cc9d07950e9b9462d9a02e439
-SHA512 (NetBSD-6.0/i386/installation/misc/pfdisk.exe) = 798a00ddfd76ffcae1dd427ebcd9eac6ef4fc54bb0eeeba36ecca3903b9de785ff6113e3ee0960ca695d9a8196dbdd3f7434530e50dd0208d5b872e989038c3b
-RMD160 (NetBSD-6.0/i386/installation/misc/pfdisk.exe) = 4569b5259fb5d13606e521a4d85a0748afa92670
-MD5 (NetBSD-6.0/i386/installation/misc/pfdisk.exe) = 6e470b18a39a3b7bf7c8fe7c34241da7
-SHA1 (NetBSD-6.0/i386/installation/misc/pxeboot_ia32.bin) = a1c0c4f7137ad0c4131aec154c3cdc7fd62c4ad6
-SHA512 (NetBSD-6.0/i386/installation/misc/pxeboot_ia32.bin) = 4ef5af523ac4d164885c4ce7ea8286303ce1a60d6225730d98b14f6b96c56c1227bf8bbd4d4ee77ff30645e5f0375aea1f879fc1f61de1263bc5f68e470abe28
-RMD160 (NetBSD-6.0/i386/installation/misc/pxeboot_ia32.bin) = 732aa68a238219b0fa20ac73fed5cdd59ba4b775
-MD5 (NetBSD-6.0/i386/installation/misc/pxeboot_ia32.bin) = d56818a2c96b381e6b907ef7ee5c146d
-SHA1 (NetBSD-6.0/i386/installation/misc/rawr32.exe) = b43acce43bab52a4d7a5cca69b5c448700c3084c
-SHA512 (NetBSD-6.0/i386/installation/misc/rawr32.exe) = c8e466f2a57083a0cd577720f31ec6d84096680e89c824b633f168ccde962be28cc3ec8019cf136a12437b3df92b872a3600266857c4e5c43f12c6989ce3490c
-RMD160 (NetBSD-6.0/i386/installation/misc/rawr32.exe) = b0cafd5f6dab34b71cbd5885821188bb8479bdc8
-MD5 (NetBSD-6.0/i386/installation/misc/rawr32.exe) = a38e68ebd955604d1b4e137c8eb63dbc
-SHA1 (NetBSD-6.0/i386/installation/misc/rawrite.c) = 45e127dcd24e3a5666d1d4fff54349ca9bf5c077
-SHA512 (NetBSD-6.0/i386/installation/misc/rawrite.c) = 05315a055d1b95bb409c986e3a4faa0ffaf407a239ca32638b8df05757af480cd409abf141cc9b695bf2f61ececbb0de07737a9a927e8c9d9e9f78c39a54c9a1
-RMD160 (NetBSD-6.0/i386/installation/misc/rawrite.c) = 424511ff8fe6118c147cda137803fbc3bdea34a0
-MD5 (NetBSD-6.0/i386/installation/misc/rawrite.c) = 606e8042f2343028bbe2fbb7db391c53
-SHA1 (NetBSD-6.0/i386/installation/misc/rawrite.doc) = a5d3f4916c427ec4ec93d3b1e044f8141ed83dd8
-SHA512 (NetBSD-6.0/i386/installation/misc/rawrite.doc) = ccc3a2b7daadd7527e048de382bdf37580fc8069f5ad2e9f5f8feec5e50374ad2c8a8cbd293f38fffddb08a84573f13ed1152695f64a9c4b745c6e6dae793401
-RMD160 (NetBSD-6.0/i386/installation/misc/rawrite.doc) = 892d37aa0401f9d42effec57944c007e7a6d530d
-MD5 (NetBSD-6.0/i386/installation/misc/rawrite.doc) = 0006cfba390f738eb0d4f6c2fcafb7c6
-SHA1 (NetBSD-6.0/i386/installation/misc/rawrite.exe) = 81152a9688b5fdce26ba09c1685ffa842e31c83d
-SHA512 (NetBSD-6.0/i386/installation/misc/rawrite.exe) = 76ca20eca1b087c8d583b23c52734ef6db49f15d5bbbc4da0eef301b2b46fad5b86c063e4d868bf3db41c625e022c4604759e1a1bc50c9caff2665eaecf11920
-RMD160 (NetBSD-6.0/i386/installation/misc/rawrite.exe) = 2b5707df5c5a7a84b8e80fafb03442fd29ca3eac
-MD5 (NetBSD-6.0/i386/installation/misc/rawrite.exe) = 7dac6ea496014d32dbce6c50feb254ca
-SHA1 (NetBSD-6.0/i386/INSTALL.html) = 6b92ae0724869e0b33123151562db113ff87310d
-SHA512 (NetBSD-6.0/i386/INSTALL.html) = a3541d32c0c954af91d5af22c7b1d134096a4d87f61baa9e76d192aed5461f5a44bca260dfabc3cf1979b9736958ea2d4467a5f98023bf816ea9915c6ad81786
-RMD160 (NetBSD-6.0/i386/INSTALL.html) = beba55314f919265ffba84528a2ed7b2ebc2ef7d
-MD5 (NetBSD-6.0/i386/INSTALL.html) = 5597002f70f1f3e1905becc1a21b5046
-SHA1 (NetBSD-6.0/i386/INSTALL.more) = fd226e8ade97b7071048c7f3a71d68b8f2fbc440
-SHA512 (NetBSD-6.0/i386/INSTALL.more) = df5bfc36c307a943d5def074292619b8b9452b7d8ad612feb6e3aed63534c5698701fa0008e007f6b08a742141643b2d9d82d3386a1194421c556a499e12b1b6
-RMD160 (NetBSD-6.0/i386/INSTALL.more) = 811bda03f587e977180da84b2ee3a1715e059a68
-MD5 (NetBSD-6.0/i386/INSTALL.more) = a080d66a0f33055ae14ac59dd13b6c11
-SHA1 (NetBSD-6.0/i386/INSTALL.ps) = 81b57f86901189d2f513553abf30858d95ce11d0
-SHA512 (NetBSD-6.0/i386/INSTALL.ps) = b2fcab6677f9949755c9aa702719c0572c7a7198c926e8d50103e513f2c44ec92b11147488eea8a1f0e5f04c3e024480cde2c47e538137b99f80df27f9deab91
-RMD160 (NetBSD-6.0/i386/INSTALL.ps) = f7e87587ad8249b5f71b89988802cbff68e645cf
-MD5 (NetBSD-6.0/i386/INSTALL.ps) = 134248944ca4bca697eeb3aaa49c1dc6
-SHA1 (NetBSD-6.0/i386/INSTALL.txt) = a1072904f9c7baa1f3b9136a12e7b8fe7821f757
-SHA512 (NetBSD-6.0/i386/INSTALL.txt) = 4229cbe31deb065a67fd10b737e4acb0784f9a8b31546e4c9d8b41fd002e81a9d48acf08a455dfa488669358d19cc1daa5c329cd3ccad5bfa1471432656fc70f
-RMD160 (NetBSD-6.0/i386/INSTALL.txt) = 2dee238856637d6990f33f3aac177f34478c6ff1
-MD5 (NetBSD-6.0/i386/INSTALL.txt) = 92702556c5a08e156b8eae602d975fdf
-SHA1 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.symbols.gz) = c4b53dcc495fbb67f30084776444088c6fa69af6
-SHA512 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.symbols.gz) = 08dc9f41dbc5f88e4e4d718880f8ac072ee9386daf727cd717b7276c88443dbe194781b062cd29409a964737cb8b27f0b158dfefbcb1b4226f9bc40deedd1f19
-RMD160 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.symbols.gz) = 5d66efd39a08359a525748ecd06b42705c53028f
-MD5 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.symbols.gz) = e819b2d7af2bddcf3d4cf935724695f0
-SHA1 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.gz) = 0494a909caf1ca5dec73b1f5aada6ef099653a7d
-SHA512 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.gz) = 5ca8f4fec7a5b89369934e081f7316c4e482ef7090ed8904f0985e941e20bf42fae8396d7da4151b78234568b0a735667b56f7b480fa37d1bba36b594d3d71f6
-RMD160 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.gz) = 2ff1c7a5c604f56f85ff3ade294e3cb55c053ac3
-MD5 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.gz) = d4f4dfb62bac44f16e9bd16c7df8a501
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/ibmnws/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/ibmnws/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/ibmnws/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/kern-GENERIC.tgz) = c9804814e9b76392c467295e0700798f7305d9ea
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/kern-GENERIC.tgz) = dbe66f41c0023cf48726763c0accca7d17146888cef03f6bcd8356f48bca2a5685e60224e3369fcf4ebc524843a9e3a2df558199a4b2b1a43cc7b22931c52c5b
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/kern-GENERIC.tgz) = e054c430a723e57798b9f13d852d6be6895a6b18
-MD5 (NetBSD-6.0/ibmnws/binary/sets/kern-GENERIC.tgz) = 9bb6d0f70b522f8bdfe0da0855fe12b2
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/base.tgz) = 150b9b1ed403c611d17b3bf258f7bf064f3f76c6
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/base.tgz) = 7c9eb4dbb9e770395ea516b27dc37c86a34d10437bfbc59bd6b55ebd9a3565e470ee7553a238e69012c7eb19f1fafe3bb94d750c642c179190566d0b97ba79f7
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/base.tgz) = 6f959eb6b88fa607c19c9ab5e0b82d172960676e
-MD5 (NetBSD-6.0/ibmnws/binary/sets/base.tgz) = 1d2ccb914175ffb1a6e90e787914e08d
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/comp.tgz) = 449a6e0ccfaa3b9105912d05d4204242bab79635
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/comp.tgz) = 5ceb6d751f429f466ae15f98244e82f32461f7f0bf546c982a1e35bcfc4c6c845a121ecf07b387189fa4173d672e0291a0d396010f5c6ab9130f3264ef26f36d
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/comp.tgz) = 6d544592799a77914a724215f8514f0d22bae2b2
-MD5 (NetBSD-6.0/ibmnws/binary/sets/comp.tgz) = 84f35afba48084d9eed192a484616382
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/etc.tgz) = 4ec9d5606ead158c85791c298c829a030aaa6acd
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/etc.tgz) = 2786ad3a1aca388352f2c4fa1da7da624d9762c4d8c7deec54441bd3ce95c79cb2ccd6fd15619a224987f9726c66d5a88b825e57b69b68aac7033ce80c96af3e
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/etc.tgz) = 25c6401fec22c9ec3f2bc6c3d33127b9222def9b
-MD5 (NetBSD-6.0/ibmnws/binary/sets/etc.tgz) = 9f83cc04c872ec0e355e2528387cdcac
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/modules.tgz) = fef0894685186ef94fc691e71a8a366fe7bb66e0
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/modules.tgz) = 0051ecab124fbe7a4a8005ae4fddc9b4be520e6be5c34cd1811f6c280e35f10d79914756f5106a840177b7cc33f39db337c3f461f00669c1838a6ac0c2204ee5
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/modules.tgz) = fce29d3683f7e0eec8e0b45c94bba924bad6b5d7
-MD5 (NetBSD-6.0/ibmnws/binary/sets/modules.tgz) = a47b110fc0e721d6849bb6fa4d3a7ab3
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/tests.tgz) = 3eb8ca45b13b0c43f1d9e10322b8b8469859ffac
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/tests.tgz) = d9d2bc61ad2f5ba8ca9bd4b53c348b01fc4f7dc7417d14fe7c6c3f68b2a0ff32221bda546b9ca26a0b998ee72a393e3231de17c94bd1e72a0bc6365dba42ea5f
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/tests.tgz) = 8348b43e8543ad7ab8ba46978930fd7bef910c6d
-MD5 (NetBSD-6.0/ibmnws/binary/sets/tests.tgz) = 5cb30f9ed33e774f3c1bc14cea070f34
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/text.tgz) = 38ca726175c32d5ef01309254f51584001f2888b
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/text.tgz) = 78102b1494c3e0d92ee40eaed00cdf6a4cd9e6d5dcfe2f523442fdce7f46d9de2e63c9ee5e0ba90fbae71509518ed2d212a0eab357f0a235ad8b4339b8f74bc6
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/text.tgz) = 9532b62eed56ed6308d0b564552a77239ddcc406
-MD5 (NetBSD-6.0/ibmnws/binary/sets/text.tgz) = 25b993723182c6c3fc4c4c7d5544a7c0
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xetc.tgz) = 6068a07bd5602c1e57dcce29ce0a58ab8d6fc63f
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xetc.tgz) = 2bc55ed596339c00a303d972145c4621db7f5781f7f4bf7bd8cd6ca634cd397f8b603c83b2f607f9a65c73cc237b16db0fa3ac30f28ed898d555224355741f4f
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xetc.tgz) = f5b7f09b378d534eb6436d76a135192dae3cae0a
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xetc.tgz) = 1c3134612470159dcad9c60e9e0664d9
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-amd64-install.img.gz) = 0fb40298c03dc94850911ccf296f74b4daee6ab1
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-amd64-install.img.gz) = e0cf82777d65c1f8fa2776a154f297f8cadcca5c8ea8064adf0ac87b51f5999af8208fe284e95478d87f45d68ece4c63e82611d624514b96a9e236bfbe2aa56d
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-amd64-install.img.gz) = 0f38bf9ac003bdc7b7a73a1321af35f77e498de4
-MD5 (NetBSD-6.0/images/NetBSD-6.0-amd64-install.img.gz) = 05aa2e9948e5f613ac8942f04f5703b3
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-acorn26.iso) = 3d532f8e1c0d8c70ac0204a0e30352946d5b4cf8
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-acorn26.iso) = faac85c94da6ff71b98f6ee934aee21d972c52b4ecf1a1bd39609b31ac80956fed51442fa34e423c432fe6a2957768df5db91585c0edd385cbd4e13f067eedfe
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-acorn26.iso) = db40e23e1cd76af703d18f9e9fadfb7bad0bdbc0
-MD5 (NetBSD-6.0/images/NetBSD-6.0-acorn26.iso) = c3adc16971c37d3319e62fe83dbc6fe9
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-acorn32.iso) = 1b8406a3ddc779f865e4edca16d6e5cbb0b33728
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-acorn32.iso) = 8c15a060921d1339eb814456955753badacc1db25f84f471ae66106f78f3ebc22f017ec1ff9af71cf1c59ad9a669943210967105e2669ba9093596e6b2009020
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-acorn32.iso) = 58b72463d91d486398514eac65f3cebb2bbcb0db
-MD5 (NetBSD-6.0/images/NetBSD-6.0-acorn32.iso) = eef67583eee51a578d4f6ce69864fd25
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-alpha.iso) = ff793eb5257ba6f7c3ca97049cab973dafc70785
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-alpha.iso) = e2fcfb789c6c0bf801cb02b1a4f9d133902a9d78be3458b19e12b8050c0686cfae37d2ad4a5661ffc3cddb089e7079d0bfe5b0c7fddbc0ad7c43abc250f21db4
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-alpha.iso) = 50a4b3f98483a0ff94e2c6c4d93615069d2c4953
-MD5 (NetBSD-6.0/images/NetBSD-6.0-alpha.iso) = eacfcb881765bac2c8fc45e1650091a1
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-dreamcast.iso) = dd89f98a8bcd0d8bdc9861682227cd1e48031db3
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-dreamcast.iso) = f18e432d93110b9cafe06c1a5bb13a27b028a5a773bc9ddfc59685737b2939f4ebf30de6e8e7fc5d6bca2f16b576af48cd2aa62ebd791b28d499b008cb5f11db
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-dreamcast.iso) = 763baa9e578be882dd458c8879f42745cf6ff2f2
-MD5 (NetBSD-6.0/images/NetBSD-6.0-dreamcast.iso) = 19d1400e0b92a906c4f01cae132e5d22
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-amd64.iso) = 78d8ca5aa25eef0bdab5c794550e7c43637169a5
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-amd64.iso) = f4900e8effcb1f5b5767873976dbb231a07346f48df20f56a8441942a91ecca0b6ea1309e01ea6a67b0513e61ebe3b8501b436063676558f119735f6d35592b6
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-amd64.iso) = 76a6c030ca86c7d5abdfe91568a543d3bad04ffa
-MD5 (NetBSD-6.0/images/NetBSD-6.0-amd64.iso) = 9155899df5ebc1a69c7f13ef004677a0
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-amiga.iso) = 7a81516c832299ddcfa8b364422e82a63b3869df
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-amiga.iso) = 6695416ad0dbe2bf03bb75df8b40b04cec9179d2f60aec0b1a5e8f56ad12995911158251cb78c67d62d60324e8708c85c02b84ba0fcffd3fcf73a69aaa497b0b
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-amiga.iso) = 72c96741b1fad68368043e16d21ff533490b8275
-MD5 (NetBSD-6.0/images/NetBSD-6.0-amiga.iso) = 6b214d3da92f2d84210ac00c4eb9650b
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-arc.iso) = 09dd2c85bf2772333ec299e45dec5c016dc22d7e
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-arc.iso) = 6eaab9510f8ea92a175115377924dfb7806be38c78d12920a86e6284bc59bf0711adbb5b46809eb48fa8c299d8c9683b777ad16fe78c3e4760adc6ff605941e6
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-arc.iso) = d4f2d0301da83d93a18cce50be4a878cb5955202
-MD5 (NetBSD-6.0/images/NetBSD-6.0-arc.iso) = a4c2332dc064e7d8cbccb921af5c2022
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-atari.iso) = 9976598eb68ec6bb90329161c3ffad985e2b3c35
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-atari.iso) = ac4951dcf3f148925c19db7bc7027db69549ac90e57db25994c7de5959943476eff7eeb0c490ca7b3df4b6f7bc0604fb5515c337e776a384d5b6a8169e92bf47
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-atari.iso) = 35d389ebb1ea02751e819cd76750a1116d472b1f
-MD5 (NetBSD-6.0/images/NetBSD-6.0-atari.iso) = 44c8de8283cccb8a576242adcad878fc
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-cats.iso) = a1f0554b7193949055ee9cb35eae529893bfc8a8
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-cats.iso) = 7a38bfe0e1ff3948579dbcceed822634e3352e690911052dcf25f9b8746f457f1acb80830b6ca22637c559948eb8fb1eab8c9434225f13c000204879b9edc16c
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-cats.iso) = 2116103ecfe4c450432b7c1bad8787aaa6149a51
-MD5 (NetBSD-6.0/images/NetBSD-6.0-cats.iso) = ebcfe064bb40fc87487654d7f8ccc15a
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-cobalt.iso) = d5e6a8be8cfcef7362542c2ecbfe7e0173845061
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-cobalt.iso) = 28181b68559432a4c566bcc9f71a5ed2b00a5d7118073d114ce4085f39d2139ce50e6b843beb46a59ab4e55aab4ead1e2fb952610f633fb77ae87edb5d2c3d76
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-cobalt.iso) = ddcff88c659b8f0190e66ed2df4014395bf819e7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-cobalt.iso) = 5975ccac715d36432aa101e6c1c745e4
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-emips.iso) = 0c9a09ee73ef6d90af39aca9513b539a79e7c505
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-emips.iso) = a0ec2048ab0c44ac69722b79b56308781e9f298fc3366bd628d4cfeebd8891e08091e8d86a576be50ccb12b1ae48263f86c8f0bf42d743d040a2407fb21039de
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-emips.iso) = 2d0e11edc64ceb8af1fc7239a9390868e1febfae
-MD5 (NetBSD-6.0/images/NetBSD-6.0-emips.iso) = d5dbd826114f5e530d171761462718c6
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbarm.iso) = 95e132f2d72a36eadf98b59d6883cac167d22887
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbarm.iso) = 5c3a43f9609687ac5e5f5d5f21cdc798dd75f0d89bfe3a4d46ee151f60e13a90e2059d9906efcc5831f5e7ef0c267c3615737da03cb781eeff39dcff518b4114
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbarm.iso) = 99c9115a98e45e96730163fde4fc90f37ef11e26
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbarm.iso) = 1bb998b53e8a82a28fdefecd4c2d559b
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64eb.iso) = 0ffea2aa4fb1fc1d58b87259e56080caa9fd6996
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64eb.iso) = 2d3a7807156a465c9b2d8ee5d23951f5415984c2bc0cd8a7e06102399ac4b89d247380542efe1148d5bf71bb945c4de005fc64df7ecf2cdc9ce63481a2f10d07
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64eb.iso) = 1de400a05e285d41af9eb1fcb4164932ecee0888
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64eb.iso) = 62143f6b35eee23d62a01b9cd05e17bf
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64el.iso) = 5b0f9688d925754bd79d28226f29dc0057c634b0
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64el.iso) = d4dda568787efe15faa1c00b604c9c262c579ae86f4abd07dcdb796112fa9ca41122efc9c3beedf2281ab1859e11e2ede536d3a7d679a31590021acca4b32324
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64el.iso) = 9cb45c46d6ce9d9cabcee0f660fc1a646f849190
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64el.iso) = 320f53af1cf67bf37bf6d962a49aa688
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipseb.iso) = c9894866972a80c2ff9032d21339e3ca59c8d0dd
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipseb.iso) = 04a89998d1cd8e70b045479265ce82b3733aa630d536c349e12b4d12e3aae123bd29cc0a7a6930fe07dc121a89e0327d14c2b78987542f064b67287268300830
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipseb.iso) = 13cc4119e07eb9a8a26666cbf6ae983001cbf39c
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipseb.iso) = a5af80295a5bce15ae2cb3c585891d7e
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipsel.iso) = 09155023a46f527048b17f00f554d64b73fb1d40
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipsel.iso) = 21108a854d7f8ee48d18f8d1fc74886350d1d95ca2eef044f5314570619f108f471c768f93b99b917b887fca4a1d5bfb9f858929c88672faf505ccc6493eef61
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipsel.iso) = c6c4eddd0acb7b311e6bc40a9ef7acea4c8792d9
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipsel.iso) = 37b00a36438893f30b98de7327628d48
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbppc.iso) = bba761cfabb03d27837a21a61e681c0a39b82b50
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbppc.iso) = 615d5ba030e1d19c56aaf9152640e652c6aa3ab3609d357b859df61a874125c551ae912f01179f861bae6fa0b09cbb899e9ad689dd62ec7edcd1caec3157d5ca
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbppc.iso) = 4cba6606c2fc9febb684665512c89ff8106790bd
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbppc.iso) = 45b10af76ae7128c4619864237e703fc
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3eb.iso) = 51da3d8f99c84a9e12bab81442a0249624550532
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3eb.iso) = c804c8f1457178bffa1e5b7989a5818381f4911a8fe18a2c75ef9c02b866a9f53be17926faaa4a9460852e482d7a304a13424b8fd6b8013cae15696ebcc24bea
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3eb.iso) = 05f04f2d8e64a4508034424bbd9f6adf795675a5
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3eb.iso) = c9358e63b62edc277bb8e630627fa49d
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3el.iso) = 89dd396a870a8d08bb1ab2a09f9e8b24bb55bb53
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3el.iso) = d9d2018111fc190ab0602e87572e210572bebf2185df101265f29d4ac8bfed8ca671038131eefe125ffacef63924e1274c34fa248b88d01764d138144e768b2b
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3el.iso) = ccc5e6f669147c71f9272cae12d63bb270407748
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3el.iso) = d33272ecf641d0c4ced897c2fb4d0ae1
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-ews4800mips.iso) = 029c1d1910dd234ad3b33f8a53557a56779dde86
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-ews4800mips.iso) = 09e0dec1e67c44a29cea4eae8c2e7840906c8cc6881331b720905c71dfd0f8050210568d2e5ad6a325a827a08e1e440d84980cb4b515d76501616c7e3f104cf2
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-ews4800mips.iso) = bd7da2f0e68a488d351eab9cda26f11ca2ddaa35
-MD5 (NetBSD-6.0/images/NetBSD-6.0-ews4800mips.iso) = 1286a5646c2f93fc128c8fabb2244bd1
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hp300.iso) = 3b62c2c6037a1009b5d417e6f09dfdda2781f12a
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hp300.iso) = 2a3d668fde1b5098933d0fbd9fe9100092043a81389f6f7b457a3425dfca5cca52382a29434309baae791c908855b1aed99d32f290723172c62f439f68e4fe5d
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hp300.iso) = 8314b4f992aff06157d9dae5951cce3d6083e6cf
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hp300.iso) = 144eb416cc2563df1330cecf26c19f2c
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hp700.iso) = d2840fa102cff8b3d5825304818c98ba2ffdcbe5
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hp700.iso) = 322461efc0e1648c8e4e16c93421831d14937b5ca93f2a6f25405882c2de40482315ee9e4c914a2e9206cc25eade89687a2a248bc60ea1145626272067fdecba
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hp700.iso) = 11dad584942591d9c719eab0248dba8f71ba8ec8
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hp700.iso) = 93522e82b2562f1f889f74153deccf30
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hpcarm.iso) = 5afcc737502c47e2a4efcf6a897ecbdee400d3aa
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hpcarm.iso) = 32bd828c5ef1b50b6a9cdac2a419ef80522625bedd2bbb9f60b8076b7f9bef969af19fe28da9b56b6f552e008700b9fa586e1159706aa6eb4c998b2dcf89384f
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hpcarm.iso) = 9a609fb57d4c4a2f8fd9aecee475eddaf7e26da7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hpcarm.iso) = 7b8bbdc89300d63043e233de6d56584b
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hpcmips.iso) = 203b9953e02574d71e49277b847dfd4b253199cb
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hpcmips.iso) = 72a2e1eb4f9398c3779a64226c8e442e9628edcc0601b9e0c835af9e2ac31d77217b731c831d8d9bbb2c9322ef28b61194281beb0074e39aaa747610fa065ca1
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hpcmips.iso) = b384e1bd9b5e0644e1d98f68270a82b47e1e0103
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hpcmips.iso) = fc5caa7af29622771e2451debd59f75a
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hpcsh.iso) = 1b3ad4689058b56f012dcdf2ec78d046c7469d0c
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hpcsh.iso) = f2d4686d5560a5ebadbd0f235033bb18db4b291ac9080635e67a8b42328108f0944c69e81ff9daaf28820f0ee98d32c0faba0ba3d397053670f4b2312ba7fdf2
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hpcsh.iso) = a39e04b9cdcfb2d21fe9ee262756b05f122893b7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hpcsh.iso) = ca44003562262d681f9eb5e6e3c1f25f
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-i386-install.img.gz) = 43e6d3f9d0ae352b8eaec597e3ab48590a8dd62c
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-i386-install.img.gz) = 2911ec984eb0b74ffc89dea948d2f0ec6570cf0a13790be8ce31bfe7d90cbcf132d9b7fa27bc3202d16426cf15c192c3543db7d108455f375aebd291e5162827
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-i386-install.img.gz) = 7da2b6c329c7e19a96d7473bed4fed2847a9e7dd
-MD5 (NetBSD-6.0/images/NetBSD-6.0-i386-install.img.gz) = 9db5437e777175f3d9fee3370070cca1
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-i386.iso) = ccc8c4d50aaa0e43724df3b3c3afa0e130164053
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-i386.iso) = e71e4dc1ab41720e04f34ae8f5daccd5441f58efe983683574578b4f6c3019b53060e25e4e4880792f3012e47acfeb7eb0f571d01910435db6a4ac541ede8fef
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-i386.iso) = 4aefd7279ff09f228506f66ac5e91195c081e31c
-MD5 (NetBSD-6.0/images/NetBSD-6.0-i386.iso) = 9b7aca4464fdd5dbeea6d6d85c5ba64f
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-ibmnws.iso) = 766ffac66f62d90b017d02b9f571b27ee002eb30
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-ibmnws.iso) = ba2e04ac3173b765d98a72796f643f2c7fe2fbc9eae9f7a85402e65d731c3a089df5a685ad98603e6e44c72956507bd77939d855f4820bcf0aaa1e705be68ec4
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-ibmnws.iso) = f6c480b79e05eb34818b5f018750c4dbfceb7b38
-MD5 (NetBSD-6.0/images/NetBSD-6.0-ibmnws.iso) = 8cbc5b4e8fd0cd9d6cbf6d77f1285f3f
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-luna68k.iso) = fb688537b94273c74c52027a5bd0e9f0f1d96381
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-luna68k.iso) = 62911e352841866cdadd4f9ebf909cfe496a03ac4f4452f83ed7a96890448a527a0afc3ab199bcc13a12760bbf287b5b367b96ac340d148d522e759db20a7c5c
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-luna68k.iso) = ad5c1f6747d72a83816e13c37eb97cc4b6b0bbfb
-MD5 (NetBSD-6.0/images/NetBSD-6.0-luna68k.iso) = 5373e0ffd08922c1e8e5a1f66908d2b7
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-mac68k.iso) = 2216006dda929d7b66bb2c92549378362f772b52
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-mac68k.iso) = 26d539ab284db402e00b48bddcdd726e7869bd28f717771d45cb6e5934fb069ec98f789a2baab8b7fd76aa35db5f9992f58094b9e3e936c83901e277a4bbe6b8
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-mac68k.iso) = b8cf8d1c1ccbb739ce29c01896a4aa55ad66469c
-MD5 (NetBSD-6.0/images/NetBSD-6.0-mac68k.iso) = 4e06fdc52d82cc401d3b02c4d0232733
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-macppc.iso) = a8697c11dbd8b3811f1fcc8562a9d11a35f4431b
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-macppc.iso) = ba31ab8d00ac0038dc6509661eb39b41d7cafc268b17e9ff75809aac3fc4978fe338b2ee4c2ff59991ae93c11c32cfe019e7309fc507562f9c276172e63492e4
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-macppc.iso) = 36f6b8b12eba9cb39f412ce2cba71ab88a4445fe
-MD5 (NetBSD-6.0/images/NetBSD-6.0-macppc.iso) = ca246495fb1465b57eb93c826063a20d
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-mipsco.iso) = 5f3a351f960e81c829d7bb8f6924b0b912006c05
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-mipsco.iso) = e04111c293c6a3a6df5433aaa8d7883c7f88bf03c868ddccb05ae7c243d9a880e54329d4d995cc5bfc6539fdb7120207463f54c3a4a5c0a317bd12173e0fac18
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-mipsco.iso) = 85552cf47b7eab35619385444e0d76ce8c6ed887
-MD5 (NetBSD-6.0/images/NetBSD-6.0-mipsco.iso) = 7e684c533513710039e0fa96ba70b51c
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-mvme68k.iso) = 48ed08c58863636dcf49ad5728812def96cf82eb
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-mvme68k.iso) = ded376941ef8437fcf37f7ca801f4e9996b4adcd97d9ccc7a16d30c8045880d4e7a894ab5cd44000bb3895950c007669207bfd58bdbde3a11b2a123e5b747c47
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-mvme68k.iso) = cfb7ee4fc9422ebf6dc0c7d73b59dc2b161d58ef
-MD5 (NetBSD-6.0/images/NetBSD-6.0-mvme68k.iso) = 9ee62757053b2cb7f7a1d6ab82db929d
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-mvmeppc.iso) = 5b74dd3e1d76f697d089ad1a769ef8aba17330ba
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-mvmeppc.iso) = a007559063e269c4f27597f27c3bf6dda97f34a33d7e750c2a6fb36bacc0a64b12a0011b0570ae71b5977735de5f1d58de553e5a89ea4f61b6c09fc34e3989ea
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-mvmeppc.iso) = 9d26c663310b2555b8dc544e9b286a7ab80e8bd3
-MD5 (NetBSD-6.0/images/NetBSD-6.0-mvmeppc.iso) = 3c8ab738e662b3b7f1b481a4712c4525
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-news68k.iso) = b40de418e4f4140f31895100674dc69e1b3c2f80
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-news68k.iso) = bfca4085850abfe577482870397af0c964574cb7b426903c5634a747026e1db835fe6db0dde4d8a320438b1f136dc7aa2dd0bd1e05d664c92ddd307b3ad718e9
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-news68k.iso) = 00df7a8b50bb5b4f45b56107db94a559b1571458
-MD5 (NetBSD-6.0/images/NetBSD-6.0-news68k.iso) = a9a9524f9d696a5104d2b9f157f8a416
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-newsmips.iso) = 91c6ba0265d2ab04f60358dbf8fcb388c81e674f
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-newsmips.iso) = 182904027a2e24e0869e0c177915c2d99be87ea8994298f7106940bfde95feacb1ab07e17f0535adaea35d63eb6ec014378bb2777b0a3dc4e15f362038050460
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-newsmips.iso) = 93bedba32f25a7d6f658e396de5b7eb98ec7654a
-MD5 (NetBSD-6.0/images/NetBSD-6.0-newsmips.iso) = c6a0377dfb49f663d7bf657589a68c48
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-ofppc.iso) = 1b0927effa1f68779ec787536f67447574f50674
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-ofppc.iso) = 7cfa755bab97c165f5ed60063d4fde79d90fa4a786cf13d32617f324759719175b909806aac34df32b39a5a443348f020787bce43f4d7600ba9bc65ec00e111a
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-ofppc.iso) = aab50e82812ffe6b4216d9c9a44787d9f0f667b8
-MD5 (NetBSD-6.0/images/NetBSD-6.0-ofppc.iso) = 97772de08fb8020d661192e622e3cf21
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-pmax.iso) = 5293cfe1a34eced76bd825d7eeef7ee55af98299
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-pmax.iso) = 681eb46ded55a111f6ac2f5baa9ebe4f3f6c252ecd20270377b466305402a97f6be47db192e5a05920a17ecbf03c03bb169161bcb75b4813af5a2e10b1becd53
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-pmax.iso) = b61b7ee3525e26f990f4276d689d23469b4639a1
-MD5 (NetBSD-6.0/images/NetBSD-6.0-pmax.iso) = 4211afdc8ed6225b395f65a089347ebb
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-prep.iso) = e1702b470594f9b5955bba78d9179eec12176e9d
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-prep.iso) = 552a43f2a255b844a0a39db0e352dcf04b7df73cbe6eb4851a2bbfd1f5bcdf12d4742ef9f596052fd678ff4adae4c92a1eda71acccaa53c8bf310cf5900dbaa2
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-prep.iso) = 382ff5006df921cb66fc8ab2bf78544c1dc501ae
-MD5 (NetBSD-6.0/images/NetBSD-6.0-prep.iso) = 2cacc13c35c1e406dfe0aec549f97eee
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sandpoint.iso) = 6d866b095f838011b6132d443b602d4b97a644e0
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sandpoint.iso) = 6e6a0eaa9de07b142c43a749bc6257a410f9c7f801c450cfec17fa30c0f7b0f5a925d1c73705a4d2d567451fe5c88304c6e85c4f1ba1c0127b07f9bd0ed452c5
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sandpoint.iso) = a2d052a86ed3bc1a751de334b737cdd1e1661f8b
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sandpoint.iso) = 8a137ad061aba60a2bcffa8b9c9fa370
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sgimips.iso) = eee6aecc9d478d101b20756b5438e858d43f2700
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sgimips.iso) = 3979fa422cd562e6dcfa83eefc072d66380ce1ec10f5534c394c08bebcc977d58d5c27f0f41efe1555570be9eb93e33143df0c1fb1cec47b29f3f8961853132e
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sgimips.iso) = b20388701c9428de38cf7cd5afa7464bb0d5a07c
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sgimips.iso) = 73c4e4f6723ef82859be32abb34b9367
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-shark.iso) = d331eaa8be85d8a112c277ac018d9d0cc88d8b39
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-shark.iso) = 91aacdd54e4ae41cbf71d4a91533bf66ef9dacaf7d71ffa81f0fabec5e98f3f5685f62b75ceac6db51a3da160a4c3e92fe3a5469165fa92c23d76d4e9aebe9a2
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-shark.iso) = 88a248ed7456f4c08fa9581026c555df29c05daf
-MD5 (NetBSD-6.0/images/NetBSD-6.0-shark.iso) = ea424a950e7168c79a2b80152504fe61
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-source.iso) = 09749966ddaadad296254adec70d4f4c01f20fdf
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-source.iso) = d45abaf7551b96232228024a7f08d19943a8912a2383c456a66aff8bde1dc4ec60a3dc084ea4801c6c4691d714e257672f87436d7070a939fbf0fb5b2119854e
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-source.iso) = 002f87e50d6113c7a2820a4888b8484c1848bfa7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-source.iso) = 4d63a05600813e5588720da5328967ac
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sparc.iso) = c60cdabd739d287e3424f8a6e2b671b7b41a944a
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sparc.iso) = 1dd5305519efa2c90341088e26b66b38426ce5e42a066277605abaa0e85322a9af2031ada8faf1e303e7f10f8b29e8765673de14a5a04c4e5f2f6001b7c52241
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sparc.iso) = ba9dc6b22a648f9b0af3c44eed518401b20e50ab
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sparc.iso) = ec7578864447eb816413264ad512b017
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sparc64.iso) = a6a5475eeb3e88d520a5bbed7d62f0067c5fe65d
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sparc64.iso) = 50f36f089ee8c27190512d16ec50661db4136c257c947439d670893fe610a9b07d577a7ab8b9f4d9cd6766e9daa8b619aa3a0f6f95e3abe43a4955dbf9d2d401
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sparc64.iso) = b8dd4236c01dbe061cc0e0e20e71b805aee8b998
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sparc64.iso) = dd2dd0625585e969262fd0c99751c64e
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sun2.iso) = 1c0755c7c8a094769b4c1b50566fa05e4848e113
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sun2.iso) = d37ddcca3ac60bba6e8547c8bdd2029d5ee39517eff1b90534dd02eacb5e5e36b3be9a06b86386d451ee89c2408c151fb55f0427d3ba682b4076dc3f5c8925a8
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sun2.iso) = 4a20723c243cd7dd43c8eb4272971072d21a2efc
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sun2.iso) = c2f9f999646eef2bcf2c9bdb6d2e860d
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sun3.iso) = db35e360979a3c38984afb91309387fa9a415bf0
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sun3.iso) = c4a8fde6c486ee8b23a485d6b2947a1620a2f7582df13a255dc8f6fd2860dd93b0e1c2dc3b56387adad49b935999c70cdb293f25f87c2f227af35e158fe6a7b5
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sun3.iso) = 0ff6f3798f945c797b2ccae534cbece05e3a4d34
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sun3.iso) = 042f8191d0aa3b4ee986408c1bcce04a
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-vax.iso) = 8f43de5ed15d0178faa9b79763c7564d479711c8
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-vax.iso) = afa099641b4684f021c3a94f3a8624c3aad92a8083555ad3bf78028fcb530d08b9b778d96635bbe098c88e6e08be2733d01c4dfca8933d4120e7571dbc715a88
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-vax.iso) = 09800ce94b2007f7c51850e9db87270e0123e9f7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-vax.iso) = 0830c9dc45aa84e08cf97580708cc60e
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-x68k.iso) = 022558b77ecb7c5b6a35aa0e79c6aaab56031d16
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-x68k.iso) = 0cf2986fa2477df206a46bc19f566c6cbe8712ad14fbf40d9d4c20aa104a65eaeb93d73c86ac101125d0c5b5619f53a7296d032f56c15930baf496853b604902
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-x68k.iso) = 5becbb0b0c10a69dfaf131910da0c72a208beeb3
-MD5 (NetBSD-6.0/images/NetBSD-6.0-x68k.iso) = 6f7c0d6afb962d18f61cfafc78f38b12
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-zaurus.iso) = 5c78cce50c6f26c64456228695ff51b12b8cd44f
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-zaurus.iso) = 8a0849c505a0db1ed89fb066f6814f32e9998017cfd684ac38b9027d94ba4a2ebec496ba1ee194e0f98d176820077ea50c5a45cb85b6f24a1d1a2b14e9a0dd1a
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-zaurus.iso) = f505c50d0049b053abd5fce076e0e67dcd13c2aa
-MD5 (NetBSD-6.0/images/NetBSD-6.0-zaurus.iso) = 5e3a023090f8b8df40a7372dc1749b81
-SHA1 (NetBSD-6.0/iyonix/binary/kernel/netbsd-GENERIC.gz) = 235873272a098d18934590d26ab5c636859262ad
-SHA512 (NetBSD-6.0/iyonix/binary/kernel/netbsd-GENERIC.gz) = 0a4f296210a18785815dc51d191c97aa069403e2e0460038f6dc59a65a97f39d9345abf0e793a12dc562068a7eb0d825881030969ea43a48775704958700ee86
-RMD160 (NetBSD-6.0/iyonix/binary/kernel/netbsd-GENERIC.gz) = 1c5a2e39c1876ee7b46a9ee9751da1d418c2a607
-MD5 (NetBSD-6.0/iyonix/binary/kernel/netbsd-GENERIC.gz) = 5f2302d30d7dcfa644d62c656eeb33e3
-SHA1 (NetBSD-6.0/iyonix/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/iyonix/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/iyonix/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/iyonix/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/iyonix/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/iyonix/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/iyonix/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/iyonix/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/iyonix/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/iyonix/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/iyonix/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/iyonix/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xbase.tgz) = 875fd641f969ec00f854ca1334d084947450c740
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xbase.tgz) = 75d0c9e9685b6b7bb706df7427c8b52f59c4fc4d0e725b02ee18024f75a546dc41de5f1a5d8552a8d2c84bdf87856e5857b0f12914801ca7b36b69536d617b4e
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xbase.tgz) = 1a4d099d59b2bd882e99f1b2df1c7bf22b890d48
-MD5 (NetBSD-6.0/iyonix/binary/sets/xbase.tgz) = 5eb9c573c5a0c96701f268a3470a58b9
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/iyonix/binary/sets/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/iyonix/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/iyonix/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xserver.tgz) = 4ccfef1d49179603286042088bec0218c6b2031d
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xserver.tgz) = 809fc0a9065c1b9e7cd17aeb0d41cfd3158efd6c585556af01c4a3c93f0df3646a2ff77c6994449a703a408c0988fc1aa68cf34c7e297a3056d73ded57034c12
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xserver.tgz) = 403604404261764c74f10fab774c4653fd20cc9b
-MD5 (NetBSD-6.0/iyonix/binary/sets/xserver.tgz) = 914f909b6878cef16a92765a8cbb52ca
-SHA1 (NetBSD-6.0/iyonix/binary/sets/kern-GENERIC.tgz) = 13354b2863a67ec38b91a8b8cab2ae5081cf68cf
-SHA512 (NetBSD-6.0/iyonix/binary/sets/kern-GENERIC.tgz) = 02ad11423d70de2c4b1e937bfdb6348af4025c026513f4f05768f2344997a4414896f10b72af056410dcc62d8760449c2dd47ff2bd37d0e4011d45a1fe0e98b1
-RMD160 (NetBSD-6.0/iyonix/binary/sets/kern-GENERIC.tgz) = 4a98f89230f9faaf839d5b607097d7612aa6741e
-MD5 (NetBSD-6.0/iyonix/binary/sets/kern-GENERIC.tgz) = ecfbf309ba59a5ed39e46ed54b8173e4
-SHA1 (NetBSD-6.0/iyonix/binary/sets/base.tgz) = 697554f5182bff135cb94ba8c99b29d719aeefc1
-SHA512 (NetBSD-6.0/iyonix/binary/sets/base.tgz) = 52b73ea3de1d96f706a48b02e7cc6234576d5bad72828ef34e61929c460ea839f6051e3a650880307a86757f35265c2a33780bbe4640d301f70a4ebae06c7e8b
-RMD160 (NetBSD-6.0/iyonix/binary/sets/base.tgz) = 7e7a5a24095a326e8998ba95c291c5380a89600f
-MD5 (NetBSD-6.0/iyonix/binary/sets/base.tgz) = 74682becd88ad5b73b5434940f1e8436
-SHA1 (NetBSD-6.0/iyonix/binary/sets/comp.tgz) = ab05d7d706899d1a555b6ec101f6d13d7f13ad97
-SHA512 (NetBSD-6.0/iyonix/binary/sets/comp.tgz) = 246d589d8d3c37375496ddd3e15da6a5bb101bc1405c13ba2751818555eaad37c403e27437326bac2ff3c20763c95a49df0bfdb324faf3110c7ec01d7676b78e
-RMD160 (NetBSD-6.0/iyonix/binary/sets/comp.tgz) = a5835f803a5c74d6484e7171085460b803705e22
-MD5 (NetBSD-6.0/iyonix/binary/sets/comp.tgz) = 53c3ef4ec81bc6b1f89e15081ad4bb48
-SHA1 (NetBSD-6.0/iyonix/binary/sets/etc.tgz) = 7294ce630333a9bea7392c5083118cc68bcb5732
-SHA512 (NetBSD-6.0/iyonix/binary/sets/etc.tgz) = f1699017e37109605eecfb44174327a974f1a7a741e16f67f387170ddd1b2c661c58bd9b6dc0795153e828ef52d16cc45b37743cb86be98623da38736938061b
-RMD160 (NetBSD-6.0/iyonix/binary/sets/etc.tgz) = 1a9cdec0a39de8c3d0b2ec63b7c674bd597e67e0
-MD5 (NetBSD-6.0/iyonix/binary/sets/etc.tgz) = d655e4ef20778005efe66b02cdd5f471
-SHA1 (NetBSD-6.0/iyonix/binary/sets/modules.tgz) = 2689f2acb9a977df7801394cd49f6f84d93fab8a
-SHA512 (NetBSD-6.0/iyonix/binary/sets/modules.tgz) = 853553a5ae0acde4b24a80372c1fa71777ede655a76c60f1d2bc835df50fc2ff03270a5edca72c492fe07a3208a8680a10277b83fab4e7a3f064ded4c91cd151
-RMD160 (NetBSD-6.0/iyonix/binary/sets/modules.tgz) = 4d2d0ba3492b751accda0a03daef7cba859f223f
-MD5 (NetBSD-6.0/iyonix/binary/sets/modules.tgz) = 129dd8d6331eacc63934568b1467edc9
-SHA1 (NetBSD-6.0/iyonix/binary/sets/tests.tgz) = b54fb7a814d7bebe4a40a00c17253d0bc6ca4544
-SHA512 (NetBSD-6.0/iyonix/binary/sets/tests.tgz) = c99e6c4b80fc2d6a0f236f324f844a562db128876a5b89ced62097a732b273fb6d9af8fde55f3e949768882cb31fab2918cd731f1259b67a1b2548030417c2de
-RMD160 (NetBSD-6.0/iyonix/binary/sets/tests.tgz) = 61ee29ddcfd0268fb7ef37829aeb75e3152b76d8
-MD5 (NetBSD-6.0/iyonix/binary/sets/tests.tgz) = ce8b49fc2bfd31965b5b989de17d5cd1
-SHA1 (NetBSD-6.0/iyonix/binary/sets/text.tgz) = 6f119b3eb99d94a4aa41b5bde28856b3daa83d84
-SHA512 (NetBSD-6.0/iyonix/binary/sets/text.tgz) = 03a29fcc5ba8ce7d6ab590d61bc0a3f4dbb9bbce89d4e8cefc00cf398fa92e2363f3e3fa5da4cc17d3bd9195434c5a951550c6091b1168614a6a0b2831f3f881
-RMD160 (NetBSD-6.0/iyonix/binary/sets/text.tgz) = 2a1331121dc41105accbf9b491bcd4aaa3589907
-MD5 (NetBSD-6.0/iyonix/binary/sets/text.tgz) = 9bd5612ff2228f1bfee64c0f6a872fe4
-SHA1 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.symbols.gz) = d9440af1a917beaff6598eec266db86853625b08
-SHA512 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.symbols.gz) = 982b13dc871a9e562e191ff6d156f202cef18174b66e18adac8e77037fd4edbd29848dfbfec15f94744375b7967bdbd0c5bac0414eac22b78c5ea1fae91f0ed6
-RMD160 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.symbols.gz) = 6320116f0640f069a52a4c52196ba45a306b594f
-MD5 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.symbols.gz) = b6d766477c4b69e1e3003d68a28d742a
-SHA1 (NetBSD-6.0/landisk/binary/kernel/netbsd-GENERIC.gz) = 2f1a4b4a1b4b88ab919ce3addcf2310da10c1c12
-SHA512 (NetBSD-6.0/landisk/binary/kernel/netbsd-GENERIC.gz) = 21fe1b84d9c5c85f3c9d963ce9497d6b8250a3c5789dcf387612089aea424a728503c9adc5e047d8887959be84a8cbbdf397b7f2685fbef2d0fab448238279fb
-RMD160 (NetBSD-6.0/landisk/binary/kernel/netbsd-GENERIC.gz) = e35fb6d1b917230c4b622ea52276a47e2a711d33
-MD5 (NetBSD-6.0/landisk/binary/kernel/netbsd-GENERIC.gz) = b6c0c1333ca3b1a45d3a828f7d18d918
-SHA1 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.gz) = 3348d95ce13a6217331a1992064194aec1775db4
-SHA512 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.gz) = bfa4fa3ab82db17aef5f5b4b818cb8fb5d9101d6709752bd88231042ce3c2c731a452a1360fdcd77d8eb3c0cd7368de7aa359b65b7d35d4f78d8182670de4a72
-RMD160 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.gz) = 95d2efee62025110beb81c829712563b4495633b
-MD5 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.gz) = 143697e4aa570e39175812011fca30f1
-SHA1 (NetBSD-6.0/landisk/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/landisk/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/landisk/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/landisk/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/landisk/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/landisk/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/landisk/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/landisk/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/landisk/binary/sets/kern-GENERIC.tgz) = 4ed0c44b9ce3362aa10429a75e3dcd4a01963055
-SHA512 (NetBSD-6.0/landisk/binary/sets/kern-GENERIC.tgz) = 1764a9d7ef8a4fc9cc321cecd486f767096a6bc34eb83b3bf3fd24c0383a3df139200560a7846d23bebdc4e02feffe7252a26689b2971964b9240a26abf4acd7
-RMD160 (NetBSD-6.0/landisk/binary/sets/kern-GENERIC.tgz) = 75e8fa6b9c66cec999c28d9242379df0142d0bdc
-MD5 (NetBSD-6.0/landisk/binary/sets/kern-GENERIC.tgz) = 7226e2efa45822998b444dfbce3affe8
-SHA1 (NetBSD-6.0/landisk/binary/sets/base.tgz) = 7cef6d1878fea6a5448eb32456056155477dbb47
-SHA512 (NetBSD-6.0/landisk/binary/sets/base.tgz) = fd16dca9619d1e1a3770486594935e091bc7219b24db8bf91ec0cc8b064f2a201d13dca61b50885e1a2428512bbf510ea7f69a9b8174ac82f511f66c6a8cb70b
-RMD160 (NetBSD-6.0/landisk/binary/sets/base.tgz) = 97e06530ed9a98f0d48746c33db25e2ee0460360
-MD5 (NetBSD-6.0/landisk/binary/sets/base.tgz) = d0e0468ef015bcada5e688057a53efc2
-SHA1 (NetBSD-6.0/landisk/binary/sets/comp.tgz) = fb19c5e935ea83f6c5679796cc9527fa3e435508
-SHA512 (NetBSD-6.0/landisk/binary/sets/comp.tgz) = 0636a207ee4126ef209fee7b5fdbee6eea677cd8b640798aeab5138803fbe8754de69aeff925e3298783409009e6cf8658f9983a213425d397e90f76a93e3f7e
-RMD160 (NetBSD-6.0/landisk/binary/sets/comp.tgz) = 0f4190b6173c8618f7609ba726e73cb041ac75e6
-MD5 (NetBSD-6.0/landisk/binary/sets/comp.tgz) = 7317e108ba56869a21b9d7137605eaf5
-SHA1 (NetBSD-6.0/landisk/binary/sets/etc.tgz) = 25f6f82b594c5d383d45e6c7ee3e0720afe0cb32
-SHA512 (NetBSD-6.0/landisk/binary/sets/etc.tgz) = f2f77e86753a1193cc4c37372a303a88e6c51fd0d3d2e6ffa1927a697aab915c9fd5f1f7ac81137e9182388a6a60912b0b2d6d6975abe0029cf9206367b7454d
-RMD160 (NetBSD-6.0/landisk/binary/sets/etc.tgz) = a5db723013194035deb0e61dc04f6985fcc4a51f
-MD5 (NetBSD-6.0/landisk/binary/sets/etc.tgz) = 92d41bd9cd00823be1afb0d3846e10e2
-SHA1 (NetBSD-6.0/landisk/binary/sets/games.tgz) = 65ef265cc562c21af9cea790c1eb0f7d1ee4ac50
-SHA512 (NetBSD-6.0/landisk/binary/sets/games.tgz) = f55cb863e6bd20e52f04d643199317ffeb673d8ad7a1b1506ccb6d798d6b511766d8188b1a567ab148ad38ab8dfb4516eb624044827880a0c1f289631e9d7f88
-RMD160 (NetBSD-6.0/landisk/binary/sets/games.tgz) = 9a0cfcc234841f9b3086c8e6479686a9e486fe27
-MD5 (NetBSD-6.0/landisk/binary/sets/games.tgz) = 9f57cb59ad62f29327c1f1daf6d8e130
-SHA1 (NetBSD-6.0/landisk/binary/sets/modules.tgz) = 0755c390f758947aaa8fa5942c3600a9c1da0155
-SHA512 (NetBSD-6.0/landisk/binary/sets/modules.tgz) = d20bbd1969460b825f413f06e28280bfc549d74e82287ec6f8b7eb70db2dc8680fcb5f1b42e96e48feda3c377eda9ef4890bcb03aeb2401dc45cc79353826a5a
-RMD160 (NetBSD-6.0/landisk/binary/sets/modules.tgz) = b43dea943dd41ece88282f1a858926afba42f061
-MD5 (NetBSD-6.0/landisk/binary/sets/modules.tgz) = 77fe2185916c4e1df174079291a33e61
-SHA1 (NetBSD-6.0/landisk/binary/sets/tests.tgz) = d5cafffe5049a81843f684c81ff1909669e6e8a4
-SHA512 (NetBSD-6.0/landisk/binary/sets/tests.tgz) = b01eccf78b1fac7ca92a10e6440a80ccccbcbc90dcafc44692d149a0b719c9058de6e1a28207f06fa7db29403552df527c200a27ffda708cf49ae2f2c7033886
-RMD160 (NetBSD-6.0/landisk/binary/sets/tests.tgz) = 0a2d702412e9add961586f2cd87eb2895889cdef
-MD5 (NetBSD-6.0/landisk/binary/sets/tests.tgz) = 7fa1f86aabba0e9ff906164c5046418f
-SHA1 (NetBSD-6.0/landisk/binary/sets/text.tgz) = 753e3063d3a42b43208bfb9ee44cadfbf777b02b
-SHA512 (NetBSD-6.0/landisk/binary/sets/text.tgz) = 63c337c80b7fb440d813803b06c0b34d1a484c1e5a18f1bcf6fe90f3880bde3269c8ed7fb0485405bd9ba618069fbe680163be2b4c53c6d81ff8e263777fd51c
-RMD160 (NetBSD-6.0/landisk/binary/sets/text.tgz) = 83afeda6e537627561023c5570ca05aaa2d3027c
-MD5 (NetBSD-6.0/landisk/binary/sets/text.tgz) = fae31d47dbe89c926a95c602012bcd36
-SHA1 (NetBSD-6.0/landisk/binary/sets/xbase.tgz) = 240739fa38b2f6bf5ff63504fc02b5e006d404fa
-SHA512 (NetBSD-6.0/landisk/binary/sets/xbase.tgz) = 93ace6b1ec640cb33e586a2e3b4b53c46b34efa1c3cb40ac7bde2531a6b253a42fa92564ba203f7f5b725b9673017766ba5a7636ac32e6722a3787559be916be
-RMD160 (NetBSD-6.0/landisk/binary/sets/xbase.tgz) = e76eddb131991fd9641a77469b782e1672370644
-MD5 (NetBSD-6.0/landisk/binary/sets/xbase.tgz) = f0502dec4137d4ba757447285b98f09e
-SHA1 (NetBSD-6.0/landisk/binary/sets/xcomp.tgz) = 06e8daf72bf753e226e3d5df7b47ef8344470c27
-SHA512 (NetBSD-6.0/landisk/binary/sets/xcomp.tgz) = 101b0c365ad2209e8b4520f586a9cd60595b0dfa414c061cf24cfbf18a9455ab6a786f968d3a5eb5f06db57cd9cde4262d5031aaf6d5cdde152ac92c91a31c09
-RMD160 (NetBSD-6.0/landisk/binary/sets/xcomp.tgz) = 3bfd31356e625cbb25f035db41d44d3a4523fb25
-MD5 (NetBSD-6.0/landisk/binary/sets/xcomp.tgz) = 2d4a2c3e4a93d2b1e56e7641bfa730d9
-SHA1 (NetBSD-6.0/landisk/binary/sets/xetc.tgz) = 06a24e45e73bf98cb87b951fe3bfe4a81a1d0793
-SHA512 (NetBSD-6.0/landisk/binary/sets/xetc.tgz) = 72d35ff20eec9cb6674031e31c382ff63fea51f6cb10290a540cb83de5639145faff66119fe7f176ba97bb389b9edf4aae3838f008df9f1b111699fb8555f4ee
-RMD160 (NetBSD-6.0/landisk/binary/sets/xetc.tgz) = e63035911479f2a87f20fe5f030ef31b3bee1878
-MD5 (NetBSD-6.0/landisk/binary/sets/xetc.tgz) = 309875d5ca3be7fb66f2ec0ab6e2e18b
-SHA1 (NetBSD-6.0/landisk/binary/sets/xfont.tgz) = 06922d4fa8af9ec61283885a5040552442f1a0dd
-SHA512 (NetBSD-6.0/landisk/binary/sets/xfont.tgz) = 48790c97453934379e37f2826498b64480554cad16ee807d44e83eed4c53b324659df0cc8aa954ec6f5f5a16ae03209a0c03dcf45db3bd807011d6d16d66654a
-RMD160 (NetBSD-6.0/landisk/binary/sets/xfont.tgz) = 5f1a4142f95c2fbf064d94e11afb0660d17c384f
-MD5 (NetBSD-6.0/landisk/binary/sets/xfont.tgz) = 0a8a39b6c5e1ae9be657196b82c16717
-SHA1 (NetBSD-6.0/landisk/binary/sets/xserver.tgz) = fc311910c92490d19bb81ff540f65370a01cfa9d
-SHA512 (NetBSD-6.0/landisk/binary/sets/xserver.tgz) = 8f8f392ab9696e20149e94dc85061be26982179e63fbfaac269dcb13509d4e9ec44c8188b6f333cad0b2139703c78e1f0919b71394ac6ac2526ce7935ec2329d
-RMD160 (NetBSD-6.0/landisk/binary/sets/xserver.tgz) = 86ec983a4047e7a0c146cfab94df6331f0363e89
-MD5 (NetBSD-6.0/landisk/binary/sets/xserver.tgz) = 2befe5df4dce2ccb1770ac2019da8ec6
-SHA1 (NetBSD-6.0/landisk/installation/misc/boot.fs) = b8bbc9b7108311040a9a3e1bad714efccbdeab21
-SHA512 (NetBSD-6.0/landisk/installation/misc/boot.fs) = 8fbf69cfcb9e7e104c244a8cc2c11d0bc2e2f006eb8a5b8e97267604519fb0e415a9da6bc81a0e75fd30e2ce8fb40a4026a97cbd413de71c05caa1e5f16871fa
-RMD160 (NetBSD-6.0/landisk/installation/misc/boot.fs) = 333044e352899852a8fbb7308a6009c1b5a69bcb
-MD5 (NetBSD-6.0/landisk/installation/misc/boot.fs) = 47ea13afac308dfe956f2d5c16a3a285
-SHA1 (NetBSD-6.0/landisk/installation/netboot) = ca38444ab6911f5b12f0797a6198f082030ba9b3
-SHA512 (NetBSD-6.0/landisk/installation/netboot) = 064115997cd9a49abeb68a811406fad102a2ad325dd1e3ddac075f19e86d04d660bc4f6640483f825310e51d7cfdd90de4997c52dabc883e64f7d984444ef276
-RMD160 (NetBSD-6.0/landisk/installation/netboot) = dad8b6e8b216ef75971c7805baf4b4f86ecfad60
-MD5 (NetBSD-6.0/landisk/installation/netboot) = d29e773e58700dde6b5384464b517785
-SHA1 (NetBSD-6.0/landisk/INSTALL.html) = 5222270ac1c6fa408d5ef0bb7e901d99e916be72
-SHA512 (NetBSD-6.0/landisk/INSTALL.html) = 4011e42ffc09b225893c360690d01099ef76445c496e10c2434e50f8c97755d15038206bd2bc9bb4ee773c24e7b5bb64bf969a1e4ac4e07f4ec84c0beb21bf8d
-RMD160 (NetBSD-6.0/landisk/INSTALL.html) = 48a1b2c374b38629c87e1c04e661e36182caab0a
-MD5 (NetBSD-6.0/landisk/INSTALL.html) = dfa8413fc180b897d13c0964362e7b3f
-SHA1 (NetBSD-6.0/landisk/INSTALL.more) = add61a5d904d34e380a4fcd69cb7fffd24143a42
-SHA512 (NetBSD-6.0/landisk/INSTALL.more) = 4165166b8cc79bd589c80490352c0741edc2087e7560658ea0da993347301f94b3685babd2c40e8927fdd8ca9a58350232dad0cc1ec0c247890a283f1ca191b2
-RMD160 (NetBSD-6.0/landisk/INSTALL.more) = 7416e0e529dcbd99dca03cb901e7038cc60731a5
-MD5 (NetBSD-6.0/landisk/INSTALL.more) = 871f600baa29f1db802884fc26783526
-SHA1 (NetBSD-6.0/landisk/INSTALL.ps) = 734d5c64f3e69a68dd0b987492851f7f915692a9
-SHA512 (NetBSD-6.0/landisk/INSTALL.ps) = a34a07c314fe9a7e4f9dfc296f9e05116675f722ad0aaab757d76c31246a9182398bca5906c3882ff1b14fda9480bb674f12daa90274df9968f2c374d7a2d356
-RMD160 (NetBSD-6.0/landisk/INSTALL.ps) = 88c78a031426844ab1afca9dec3ba7289e994dd3
-MD5 (NetBSD-6.0/landisk/INSTALL.ps) = 446d71c39365e90bf6491895a781a4e7
-SHA1 (NetBSD-6.0/landisk/INSTALL.txt) = f4d9af9565019dda406298ac72875959cdcb1b72
-SHA512 (NetBSD-6.0/landisk/INSTALL.txt) = fe20c04bf5c15d95d5bcf8cafc9efd9ffb07e37ed6234c7abe8a2ff01fae1cb7aca2c4eb28a7d032212a31cae34331d0ce9fad7a3f7a01bb0a9b66e40352f5ec
-RMD160 (NetBSD-6.0/landisk/INSTALL.txt) = 3739b2ac5572c87aa6e8a86c6b33023db1c5e6f1
-MD5 (NetBSD-6.0/landisk/INSTALL.txt) = 7e1c46e08b5773bcd5ecc0717834c25a
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 6d24a14ed0376a5672de20c9c3b64137fcfe3b90
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 5b4957606a4a575aa8c0fea6dbb10df17ef4ac7afa8624c456cc625a0e0e2d1d86c2ca9a4fcf770949933af22cda99479bfab55d383878d0acd8f0c0a260820f
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.symbols.gz) = bd90a974d6697d2921362ed308fef5df89a6a7f5
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.symbols.gz) = b5fa03bb653ae6c758c1374109969d01
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.aout.gz) = 1a6b46426c3e93110e9138dc56dbf4e15391c7c4
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.aout.gz) = fe4cf575cd9e08ccf01adec28e38311c7fda42dfd2de5d17f98be37fbac8023b9fa4225c58b5d46728af2f3885825f34068acb82f600447ed60ec54ccc5753ad
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.aout.gz) = d1e8da51257a921f3d3c0ecec9f5a06712018302
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.aout.gz) = 1d29443ff1170766ece9a482e2468f73
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.gz) = d36634bfc138c395323135e9c60824b7f987b588
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.gz) = b7cdfcd815eea67d65ea003a2e56fd0a83ddfa1695749a5316566f9e59ef69dd9d78e80c54e99c9aa2db57d8e0ee9a3af43580ed40b45086b357362428e4faf1
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.gz) = 2d36be27f36008788fee498a9c18dbe7a3d66c08
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.gz) = ca10cc06f8e60b045230888b523f71ad
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.aout.gz) = e081ce3c03ff74c60f2a0ba80540e5b398aac926
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.aout.gz) = a02d1a6974fe702be5e51419440ebdf00bd333b0c4b88cf1289a992bfc21be4f731edb386bdb5e559b5f1fac064e392b97a800431538bd21e76ebb2f6f1c24a6
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.aout.gz) = 0db65548da46e8d651e8b2b9d4ee3b1f95086f61
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.aout.gz) = 22e3b4a434ae0bf2e200bd4f6f223ff9
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.gz) = 43172b3e8115db8f41cff2170f4b5d47dd1da8e5
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.gz) = e7e217acc802aff14a3ea852a1dd0f62088dea15ecadc3cc9b335259ecabf352028dfa5929ff139f31f5b299311a5e42e944c0979be0299501caed3592e1d86e
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.gz) = c53f3f5d7e4150eb768b377877d8a8d71f22d156
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.gz) = 5d3869dcf1301987a12ffa512b626d19
-SHA1 (NetBSD-6.0/luna68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/luna68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/luna68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/luna68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/luna68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/luna68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/luna68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/luna68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/luna68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/luna68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/luna68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/luna68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xbase.tgz) = ffc6dc889560371042dd12a5486a9a2c499b86a9
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xbase.tgz) = 9aa2ba4d703a13020acf8543d1efcde76b6f0f4b411be20f804709b3802e537be1e651eba469830c4fd4777a379ea9936200a3a3eb4b1a702c04bb81aafcc723
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xbase.tgz) = 3ecf53e7414ef859a47fe5afc108cf3bfa82fb1d
-MD5 (NetBSD-6.0/luna68k/binary/sets/xbase.tgz) = a6af002ce158cf72eb5c6a7cde2c0989
-SHA1 (NetBSD-6.0/luna68k/binary/sets/kern-GENERIC.tgz) = dca3d0e2fc1d884287bd283e81bc797ceeb13195
-SHA512 (NetBSD-6.0/luna68k/binary/sets/kern-GENERIC.tgz) = 58388c5d51f6f09f0884904ba8b18ae63374f807312177898080267382141c631e6aa0698a55b427e5673b34fa995cb3d8cd7e77dc1036c9812fe8356f976dc7
-RMD160 (NetBSD-6.0/luna68k/binary/sets/kern-GENERIC.tgz) = d9c5321bc472e64656a250e3e3bd6d72119435ce
-MD5 (NetBSD-6.0/luna68k/binary/sets/kern-GENERIC.tgz) = 374856b19bd6eb0c072c4b25933f5f8d
-SHA1 (NetBSD-6.0/luna68k/binary/sets/base.tgz) = bc10452b7a7a1a24dec1813d74ff78d1d82ae750
-SHA512 (NetBSD-6.0/luna68k/binary/sets/base.tgz) = 5525e21ff9566b0c7ce169e2a087094e41cd3e60d4f67d8ae026c4169cc5b606cb88f600e4410570053dd9ea8202b0da0fd7293fc8c6531c722bb4109accc605
-RMD160 (NetBSD-6.0/luna68k/binary/sets/base.tgz) = d763e9b40ced7122fa0ccb461386a7b7ff1dce1a
-MD5 (NetBSD-6.0/luna68k/binary/sets/base.tgz) = 665d860c4af2fd73227eda7bbfbf124f
-SHA1 (NetBSD-6.0/luna68k/binary/sets/comp.tgz) = c69dde9c6ef3a0ed4457ced09c7016465b0e82df
-SHA512 (NetBSD-6.0/luna68k/binary/sets/comp.tgz) = bbb46b665a23fb728945c51cc19ae85da4e33da19d91ce15ed24d7832258c0cb53f75351c869aa46704cf09245403b9b28fb55624e0b8e28c2e509b653d459ba
-RMD160 (NetBSD-6.0/luna68k/binary/sets/comp.tgz) = c622dbd3522567457fd890414386ebbebf6204e9
-MD5 (NetBSD-6.0/luna68k/binary/sets/comp.tgz) = c0c2030d7bd68b455be0b4094a1e949a
-SHA1 (NetBSD-6.0/luna68k/binary/sets/etc.tgz) = 7d1db50a753d92b90ee1eaf6b4a4f02cab03d981
-SHA512 (NetBSD-6.0/luna68k/binary/sets/etc.tgz) = 86c1904b4007d3a1f4a91f30140a3c6d53af8b90c38c01fee75b679484096079d357e7a71c027464a5d48d4789d9c4a04f3f2545df907953c739a22877ae130e
-RMD160 (NetBSD-6.0/luna68k/binary/sets/etc.tgz) = 52873f9a82119f52ef847e3e27e00ab4e10c68cf
-MD5 (NetBSD-6.0/luna68k/binary/sets/etc.tgz) = cef84e15f32a2bf92f3657f981235991
-SHA1 (NetBSD-6.0/luna68k/binary/sets/modules.tgz) = 9428e74da3601eab14416d01bc4880dcfe21a6f7
-SHA512 (NetBSD-6.0/luna68k/binary/sets/modules.tgz) = ec64bcf7ebed5af30e85708133fcac6f0946aa0ba7175906b1f9ed06c300c23028ba0ba1957c1e4fe6d4c7a99877e7ed104b1439cec728db79fe9f3cad3eccb1
-RMD160 (NetBSD-6.0/luna68k/binary/sets/modules.tgz) = 8060c8587dfadee593f84db43c0e63acfc259e06
-MD5 (NetBSD-6.0/luna68k/binary/sets/modules.tgz) = 1477ab794d1c6494bb5a9628820c4c08
-SHA1 (NetBSD-6.0/luna68k/binary/sets/tests.tgz) = 8380e48719aca55a72f3f91629e52a774eb7e4d7
-SHA512 (NetBSD-6.0/luna68k/binary/sets/tests.tgz) = eced534537094e8ee83154a5319f89f4cf8e46bf8715ff6329a01f8824e231bdf726ea6f6cd4ad940d0a0a45b5b99c27eb5083e69ae915f56b2beaa7d8b63d89
-RMD160 (NetBSD-6.0/luna68k/binary/sets/tests.tgz) = 05c755294af5ff529c495865595c8bfe7f5d91fb
-MD5 (NetBSD-6.0/luna68k/binary/sets/tests.tgz) = 4e8df8ec4228f385e7eb7d097904a8fc
-SHA1 (NetBSD-6.0/luna68k/binary/sets/text.tgz) = 19f8fb95eef7c6162c661a5262f5f41fd92f6078
-SHA512 (NetBSD-6.0/luna68k/binary/sets/text.tgz) = f2a4f42b05526d21fffc8d4783885b155bdcd8183b194058e9554bb34eb47a6b0ba2d6a9779c12f17844a6bb2fc07530a7a1d7dcacbec44b437fbc08796b65bf
-RMD160 (NetBSD-6.0/luna68k/binary/sets/text.tgz) = f01ee7d5dd88c612e8c8b3aae25ca93e1c70df0b
-MD5 (NetBSD-6.0/luna68k/binary/sets/text.tgz) = c55b5fb2f398aaebe749d7d2a6fc8570
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xcomp.tgz) = 01bdf2494bf84313fb000f36606161f17cbc0114
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xcomp.tgz) = d4fb1fb22011bf3b178593e1a2be51626563c6ccb35f3c2db922374d9dc1dc1fdd7830df24f1f699a89c46d5a7044c221372015134682aba5a2010d5f44ef77f
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xcomp.tgz) = 03191d2a871d99076fe73355da23bfaf537294bf
-MD5 (NetBSD-6.0/luna68k/binary/sets/xcomp.tgz) = c30eac2a665f533444de26dafbbdd77f
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xetc.tgz) = 3d78331b298a38fb6bd231bff59cccdedceaf71a
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xetc.tgz) = ecaaaaa343d9abb3d24d147826956ad64fe96338d38511b5226d3cf2cc564eb8cc39aa833c7e0875fc4378aa6b8c2f3a7ad17c8906f8c68e5adc16c3cec5b715
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xetc.tgz) = 7734dfa9521226f76e23b91d237109bf30855cbf
-MD5 (NetBSD-6.0/luna68k/binary/sets/xetc.tgz) = 0e5ef946483a93d487b70b526477efb0
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xfont.tgz) = dca18181278f672451b3902ebdbf3d79ccfdedb4
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xfont.tgz) = 3979a9cc4b1731c8b31f44cabbe74920cb03d7e7d551743eee78442e0ba67a6faa854cdc674cd0338422aa09119ae653f2fdbd2c78dc6811c49661e812ce7fc1
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xfont.tgz) = 9b946721f534b2fd651e742f9061ef5d648efd3a
-MD5 (NetBSD-6.0/luna68k/binary/sets/xfont.tgz) = a3b4aad9b96343e5565a441b3376f454
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xserver.tgz) = 859f7b47396c427f5d6c3570f6f68227131b2b34
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xserver.tgz) = e1eee654564f67397c0324d8f89e62b0fcb40857b423ad2fb47c04d3bca7fa833a04adef639baf3c48bc27400f4d8a548d55efc7e29dfac74a82794e5182ce2a
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xserver.tgz) = 1f75e4523b978323e96a0c986edbd700ae351846
-MD5 (NetBSD-6.0/luna68k/binary/sets/xserver.tgz) = e50f795889ea9f0cfc49fcc6d8991ec4
-SHA1 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERICSBC.gz) = 33453c6105617ec6e41c81d71be7b04b68f26e24
-SHA512 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERICSBC.gz) = 9ea5036462094ff9ff7696cc13f9b76166f4c6058ee8e79547898866c27e96b5e31e4e27228fc7bddc69b0f11ca242113778b2ab8c6c458d16fd08e7b5148557
-RMD160 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERICSBC.gz) = aa85610097d3144646f7bdcbdfd1cd55fd248280
-MD5 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERICSBC.gz) = 4b4ce73206f5d0203aedf08b4e9e73e4
-SHA1 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERIC.gz) = 644b65114d6ffc9bef291f18e3935ca539ed29e5
-SHA512 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERIC.gz) = 8e590640af3dfd78202b83a4bc6afec869ee37b467a10b3221c08e54c3a66bddc1726cca88d09fa98598f77d8bbc6dd36c136c685bab7e75198a9b6fa89e11da
-RMD160 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERIC.gz) = 2bccecd72133b03055457567ea8eca57acc56ac6
-MD5 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERIC.gz) = ece356c2c95629fc502bb2e9382f9b4c
-SHA1 (NetBSD-6.0/mac68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/mac68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/mac68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/mac68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/mac68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mac68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mac68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mac68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mac68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mac68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mac68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mac68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/mac68k/binary/sets/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xetc.tgz) = d2ca34bd668e108cbbfd4b45720823663339f8bd
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xetc.tgz) = 431ca465f300e7eb5d4dbd44c43e412a296fb4d3129217e752f86a720e8a8bdf736c9add05a45518a4f3e6cffa32381ef61e9186d360b68a5f8c64d87e385fb5
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xetc.tgz) = 4c5d664679856b02b694534cd6afdf20597e6d53
-MD5 (NetBSD-6.0/mac68k/binary/sets/xetc.tgz) = 72bd67556ac14ea0ce147374af0ba624
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/mac68k/binary/sets/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/mac68k/binary/sets/kern-GENERIC.tgz) = f8cc845ee4bb3a6eaba937a9aa9ef56ee7df39a1
-SHA512 (NetBSD-6.0/mac68k/binary/sets/kern-GENERIC.tgz) = 173879f5b2cee758aaec0d6baa6adfe208aa0817ce70edb8a4d821189de5e6a64dd5a4f0cd1da4b166579427f416383bc068d7e49677999e075cbe3ed40c99d8
-RMD160 (NetBSD-6.0/mac68k/binary/sets/kern-GENERIC.tgz) = 2e10430ed05682c3d2e2c9496d847535a68988a8
-MD5 (NetBSD-6.0/mac68k/binary/sets/kern-GENERIC.tgz) = 4c60130363f2cf09731d6dd9b98fbcb3
-SHA1 (NetBSD-6.0/mac68k/binary/sets/base.tgz) = 702a0468018c02cc7ce229811a3905477da4f722
-SHA512 (NetBSD-6.0/mac68k/binary/sets/base.tgz) = 871ff91422cfc76ef2e1fdf7a2052cbceaba0b7afacbf5856f2b440e834f1f4cc3759322f99bf85c4effff2a657f03a68978479d495985cf3ecf1cc3d0db4d88
-RMD160 (NetBSD-6.0/mac68k/binary/sets/base.tgz) = 184263ea29fe40e2def660f30c049a1f7c80d42d
-MD5 (NetBSD-6.0/mac68k/binary/sets/base.tgz) = ee8a6af6800f2a8ad6b9d6bb099bdf1d
-SHA1 (NetBSD-6.0/mac68k/binary/sets/comp.tgz) = c355ad494accbc2a9cc99011c6a7f1030027b4cd
-SHA512 (NetBSD-6.0/mac68k/binary/sets/comp.tgz) = 084828af876a61b296f6d34258462165cd23bdcb43ff5ac7f30d2b1ca43be31716c98de636e708ff193d8f97671eff2535d09710a66e4aa67151f326e423052c
-RMD160 (NetBSD-6.0/mac68k/binary/sets/comp.tgz) = 3119965a0c66603ebb2b62b7ca53838f2a468e0b
-MD5 (NetBSD-6.0/mac68k/binary/sets/comp.tgz) = 777aac0001fb61b70b6f5da36c73e8ea
-SHA1 (NetBSD-6.0/mac68k/binary/sets/etc.tgz) = a279de07a8d912b05e056c846bc616c084edeab9
-SHA512 (NetBSD-6.0/mac68k/binary/sets/etc.tgz) = 833a3c74e048bf2cc9f148b14a81eeb526071a1226fbafc3b501409922f4bb67b69d68cdd59cc8b83fe8fccb0afd1135e64b16683e8f42230530efab0e3ed115
-RMD160 (NetBSD-6.0/mac68k/binary/sets/etc.tgz) = 11fed26b10f5d68485667c9b0eb0673b4fb17390
-MD5 (NetBSD-6.0/mac68k/binary/sets/etc.tgz) = c6e0534c4470b66908a3f6e194723ffe
-SHA1 (NetBSD-6.0/mac68k/binary/sets/kern-GENERICSBC.tgz) = 851fd53f568f2c855c934f975d322954de4c6b07
-SHA512 (NetBSD-6.0/mac68k/binary/sets/kern-GENERICSBC.tgz) = 869f6b8f6eb4408a4f2950e8b9e10d020d14c0b829dd951d9746a9a778dbf142d53cb263cd797ec862b34a1aa367dfdbef5a633bd1181e442cce9fc0da2c8de7
-RMD160 (NetBSD-6.0/mac68k/binary/sets/kern-GENERICSBC.tgz) = ff894994dc6fe3773893eae064bbd95aca6077ab
-MD5 (NetBSD-6.0/mac68k/binary/sets/kern-GENERICSBC.tgz) = 0f2df7a929df022d55d5a73fe75e47a4
-SHA1 (NetBSD-6.0/mac68k/binary/sets/modules.tgz) = aefbcaa2fb397cb690e38e3be240caabf9282947
-SHA512 (NetBSD-6.0/mac68k/binary/sets/modules.tgz) = 83c696fccc6143c9c03e4efdf8ec65363dad51bbc48b434dc21a9949424f12db413de66abfa328b6d45f4097c59ee0324797ccc4ee7e462451170ce9ed7a81f9
-RMD160 (NetBSD-6.0/mac68k/binary/sets/modules.tgz) = 44606993e2ae655bdafaf93a92cee5a85efb9e2a
-MD5 (NetBSD-6.0/mac68k/binary/sets/modules.tgz) = 03bdab5790fdf19db36149fc33857b4f
-SHA1 (NetBSD-6.0/mac68k/binary/sets/tests.tgz) = 56b5e85ef88683b81048d2e6136aa949e690d92a
-SHA512 (NetBSD-6.0/mac68k/binary/sets/tests.tgz) = d4290b5069cb2290aac992145bcd69ff6e34b98ae2661e5cc16dd5b70362c1036c079dad7c96288f473c600e9cd1870c079268ffd08acb418ecc21708e3399ae
-RMD160 (NetBSD-6.0/mac68k/binary/sets/tests.tgz) = 7d46086a6a53cd19439f6967849dd294bb27b631
-MD5 (NetBSD-6.0/mac68k/binary/sets/tests.tgz) = 746ea69e63fb5af15f526f2f950ea449
-SHA1 (NetBSD-6.0/mac68k/binary/sets/text.tgz) = db35814cfb2c8ecce27765b3257b885d2e6debde
-SHA512 (NetBSD-6.0/mac68k/binary/sets/text.tgz) = 4110c6d47405005eafdb9fb205505f2cc40c6a2ace5b611312f4ef15ae5207a9ef5c4a42ca3b53164ec6f00a80efa5aa6d669a79a9e89da6f73fadd2dc5e437d
-RMD160 (NetBSD-6.0/mac68k/binary/sets/text.tgz) = 38345e956e8a7be25706d4809bfa83ac626a3e96
-MD5 (NetBSD-6.0/mac68k/binary/sets/text.tgz) = 90b4f37e590530f361f5ba22882f6184
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xbase.tgz) = a9988db70cf4a221f20fa81d7f2525575eff6161
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xbase.tgz) = 996a52c0e2a69be7ffbad4fca9e79e03cd72533d3c5059660b2bc5ebb3e982e010f53a870583d9eba702f143365508f5a8ab307d9806fda3df1f48021a3dcf4e
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xbase.tgz) = 10e9d44638eab39da8b579a32ebf1ae283901401
-MD5 (NetBSD-6.0/mac68k/binary/sets/xbase.tgz) = 649bdf23aca348bbb0d7d3741154cbcd
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xserver.tgz) = 2139abe77fda0708a14f6cf7cb3787ede3369f35
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xserver.tgz) = db558b4f6be34da37cc971183c3a67d8d51ea26f3852b9ae53844ca5bc3fc0be405b6c30b6409d1e0d653178f4f6dc46645f37526ddd7d74be735a38beeaab09
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xserver.tgz) = 32d160c3aab16c5a3ed819c9c020c8189e735c9f
-MD5 (NetBSD-6.0/mac68k/binary/sets/xserver.tgz) = c17de992b6f02ad51a720faaf0ac04d5
-SHA1 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.symbols.gz) = 7ab45cb4b64d15f930d7b275acf62d70015c7d9c
-SHA512 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.symbols.gz) = 107b76145d7484485984483a8b793bbd3fd56f0eccafc619f9b5cb119bdbd0f87ca5918257554a9623c535416368eb4dac4df8fcdfdd12ac279459b775827e56
-RMD160 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.symbols.gz) = 2f2e4239577f923664edb12730c51e15106079a2
-MD5 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.symbols.gz) = d53fc2a484e0add618fcdd9b236ffdd3
-SHA1 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.gz) = 6f94e9d416e73a7019fd05338369616e459db5a3
-SHA512 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.gz) = 8fc1096815fdcc6e987e0c69b991553ff094e226127a10bcd9510ffa0dcc746fb7416896e54ea32f18e80c5782937b8af34d20c55d8758c750ff7810ec69c203
-RMD160 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.gz) = 6ddc97fcb3cf13544c3190956c37f34897cf35f7
-MD5 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.gz) = 3d4a8d946ed122290abac6375a9ef863
-SHA1 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.symbols.gz) = 2672525b1b4997e3793edea3ee8b30c23cffb102
-SHA512 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.symbols.gz) = 003877e10fb0dad0b7190bbf559f190f3de2c0e1068caa5601a0a938706225e2cb7b141f8e4e767da7ed1ff15350f42792ee9a7de5e1d7149dfc233d6dbb4da9
-RMD160 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.symbols.gz) = 8f7b7ddfd1b96f5ca34f4a074cf27adf7701ceca
-MD5 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.symbols.gz) = 2aba4f14a7812f2d935c5ddd84634529
-SHA1 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.gz) = c91cbdc339088c1c32868779c918f746d4b5f4f7
-SHA512 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.gz) = 11eff94f2d5aaef7decbf6447a91f692c605a5d36acbea876e6a2501dddc681a60a89d3084ed1413c80ba3d8b23c90abfc567dc99254a9d810353992757d6284
-RMD160 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.gz) = f26b7b6f484d727ff6aa460985f23af89f72c8f7
-MD5 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.gz) = 2dffa66829a868235a11ab636e793d52
-SHA1 (NetBSD-6.0/mac68k/installation/miniroot/miniroot.fs.gz) = dc091b6ed92bd1269a8f76c427d606345a8f49fa
-SHA512 (NetBSD-6.0/mac68k/installation/miniroot/miniroot.fs.gz) = ba5b9a96d964da2b2c0c5640a4669840352057ea799013ceae75d3d9a7782d6a4096cbc591b287b663edd27a3db54ff5a5b62a81099c2f97d21c3919b0bc7b59
-RMD160 (NetBSD-6.0/mac68k/installation/miniroot/miniroot.fs.gz) = dc09fba5a4fe6ead5f59da6026018a63065ee414
-MD5 (NetBSD-6.0/mac68k/installation/miniroot/miniroot.fs.gz) = ab49b728c7a2ef8c273a3ad07b5e3e6b
-SHA1 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1g.src.sea.hqx) = 5ae75a6179968ac955f38b60f57e3811a1e4a3de
-SHA512 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1g.src.sea.hqx) = 0017e59c1c000d154df2f9e868a85df1897b8a7918471dd6d468a4527b092ae2d069bbd686487b0b05ed4d61abfffaa7eb6584f5ee03b320469386e2b64c89cf
-RMD160 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1g.src.sea.hqx) = d29a9600c614d00c7af518b2f75f1d1ebebf4b6d
-MD5 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1g.src.sea.hqx) = 5d00aedc5729c2e2ffcea77e666a4adc
-SHA1 (NetBSD-6.0/mac68k/installation/misc/src/Booter2.0.0-src.sea) = 5a4598fcbd39bfed29d58f9d712ed8d3408ae5c1
-SHA512 (NetBSD-6.0/mac68k/installation/misc/src/Booter2.0.0-src.sea) = 4828cb2efb9b40753be27ecd1cbe235e3842b9b2b024070eb6135f10716dfae1ab7cd6d45db862c64eb5b2267b40c6660af53986d3b5fcfab03600a75c0b08f3
-RMD160 (NetBSD-6.0/mac68k/installation/misc/src/Booter2.0.0-src.sea) = 9f284e11ef74ef0202d4a46ffcdafce282f3104f
-MD5 (NetBSD-6.0/mac68k/installation/misc/src/Booter2.0.0-src.sea) = d9185a15e8dbcefdc26e8dceea7eaa51
-SHA1 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1h.src.sea.hqx) = 3a4d1868a5f6c6e010dd6e3d0ff7ddb63a034c9e
-SHA512 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1h.src.sea.hqx) = cafa4aadc01ce3c515945359d67df14aefb9cf36cafab93d113cc5079e0cdc06360310173febca13cf7bc8fe66eb9161f6afed97a0810ddf025bca38d327e444
-RMD160 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1h.src.sea.hqx) = 90b7070035d00fe09ac95962c4d47e1ba2f565e2
-MD5 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1h.src.sea.hqx) = 9f792b26b1a5691f13193a7e08cf6d18
-SHA1 (NetBSD-6.0/mac68k/installation/misc/src/Mkfs_1.47src.sea.hqx) = 76823266114b2ff531d35c646eef705677085907
-SHA512 (NetBSD-6.0/mac68k/installation/misc/src/Mkfs_1.47src.sea.hqx) = ceb5f5665acc0a9c8f273bf659e17a55dec3ffde647deb90cfa9001e43a82d5e1b4e8001175559b2f1d6327f2a80f86bfbf2798f27bbe6bbe52547a92de11d57
-RMD160 (NetBSD-6.0/mac68k/installation/misc/src/Mkfs_1.47src.sea.hqx) = af8327f6e2d66bbd8a04498d27ab3f5668556cce
-MD5 (NetBSD-6.0/mac68k/installation/misc/src/Mkfs_1.47src.sea.hqx) = 61facd7fdeb336f108d78feb8327555b
-SHA1 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin.uue) = 432b619e0eb127a5fd70fd3dc8f2988a93211a34
-SHA512 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin.uue) = ab3650cca71dc57f38f480bfa74f6bdffe2d0ccbf76072658503cd168b91f90a7fe5ba0ef4f51aa497a11684ee05d73376e059957c75773d92f894877042c0ab
-RMD160 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin.uue) = 61bdb1fc795bfe9242816682fc98cfdee036e0ef
-MD5 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin.uue) = aed2003c59f8e824dc30c44366439426
-SHA1 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin) = 8e940cccdfe4e645ddd01738477f7f58342788e0
-SHA512 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin) = 0d3e0d39aa811921b012a6fd07dbf97b63f61dd14800c61d2941f3c624db88cd0805478df900120cd20c3fcf6af11c5989c52400e5b4eefabd4bf5c62f9f2023
-RMD160 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin) = 49146172c77c05a522bdf118e879f0bd933bc99c
-MD5 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin) = 757b6ca3559185feafc36927ce9ab578
-SHA1 (NetBSD-6.0/mac68k/installation/misc/res-edit-and-others.hqx) = fe505f1ff77f1574ddec17dd4de93f0370fe236b
-SHA512 (NetBSD-6.0/mac68k/installation/misc/res-edit-and-others.hqx) = cf382e50ea9a8fd8c30c8bddfadf44b64b94216656dc623039a37c88bc642080b54002b9aca1cad25c251c719cda9fb3ad89bbf3ed645672c0040baf459e0ae9
-RMD160 (NetBSD-6.0/mac68k/installation/misc/res-edit-and-others.hqx) = 19be7f536eee28b7e30cffc4ef3e8a2f8c7fe88f
-MD5 (NetBSD-6.0/mac68k/installation/misc/res-edit-and-others.hqx) = 707c4953e155315abe519d5d48c54318
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Booter-HTML-manual-12.tar) = 94e2f09daeb119ece95abfe24b103f85f9c5d558
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Booter-HTML-manual-12.tar) = 3d9a743e71ee985134ab679608ffc31b197a638e302450c888f90d02fefae72b647622024b3ebb4263e57b6e58ce457890d6a0774c62a8e4a9f90d235d04c15a
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Booter-HTML-manual-12.tar) = ee32b1b55b0495b9b4723ff3cbc42123f5b360a2
-MD5 (NetBSD-6.0/mac68k/installation/misc/Booter-HTML-manual-12.tar) = 24120554ffbac39c8edd8e939706b7c5
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Booter2.0.0.sea) = d5178c25cc71514816986842e39c716e6cd5ab4c
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Booter2.0.0.sea) = fafbf6f153e9b9bf657aac3c74d569b44ff21c1e306f0cbc4a2fcab5fbe439bd46746ff0469113bc715b69990507994ae94934d8caf82321684326f4e8b4d146
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Booter2.0.0.sea) = 97798bf61397243efee8480c7f2f19e63fda7d00
-MD5 (NetBSD-6.0/mac68k/installation/misc/Booter2.0.0.sea) = 05b46210443c60ee28bcbe81f1ebc004
-SHA1 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin) = 2859ea6089df13333b6b521d8bc858079083251c
-SHA512 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin) = 1891f4c07bfb51de08fea8e3a5cd572e99897d20f6df748ae72af8da5e8191ca07d5f0dc836b39be12236286926677896e4a456a8f64b31517d09285bebed460
-RMD160 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin) = 37fe1a762925b8bb8ae71177bea992aad27ee03f
-MD5 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin) = fcc43fd81d5691559a5aa8ae15be8899
-SHA1 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin.uue) = beb0225c706b12fc8a241025c483133c1d5e6b86
-SHA512 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin.uue) = 7e98b555d7cf30da5948b115595f06a725c55cc0ef3e7a705423c600cafceca2e04966c65573805e6e553cf9f7a2faa05803ff2d6cd9deb714f4e98924e2a5d7
-RMD160 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin.uue) = ed9a5860dafd3484d380f1f3a91cec366b59be9d
-MD5 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin.uue) = cacb436bfbfc9a4b0995c789fee8342f
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer.sea.hqx) = c6a6c25ae1fcdfe4a0ba90616c3779068280b759
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer.sea.hqx) = 5ff75859fd5eb2fdcf75215ec6c045518ef111d0e8caecbe951dbf6f9f1129cac6948ab991949cbb3ee68d05ee8f398b07206acc9af53a5db1c4c6c7148a3a2a
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer.sea.hqx) = 36b141ff6722fd5e76fe293d1247587ae0efdd8a
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer.sea.hqx) = 01bc744d539b4f2f8e4fb2761d4c77e7
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.bin) = 8ef8265fa77478a6741bc65ceb6f64e790c7aac2
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.bin) = 45324e1231e7d53816640b8867eb117294373e90463297f05e6d187b1fe719b82bc1782b24dff8ad6a71e0383eddd0f47bd15d604f6cf3bb2bf3499df887eb48
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.bin) = 506451703e3f00ac0a26b450d33463fd2c1e4582
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.bin) = ea338e4327628024d670ae9eb64323db
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.hqx) = 8e28517a94b1b0b57a504938077aa740de7e3b80
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.hqx) = 6e07c3682a0bbb4f7d23c235f83f3d22d4a8813cade67ab9f76092c68f41767c00eccde01600283df36e4d222bddd2b7fec355db468d07d7db8dbf51adc9f5bb
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.hqx) = 4159e0226c6f58b480bd0cdc42f9d2d411521034
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.hqx) = 2c214a1b2429702942436e92e2a408c3
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.bin) = 0bda2b9e6a95f1b10414823f048087ad6455e6ed
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.bin) = bb9ad3f95609c3f23d31a876055f2cae692d8abb853431d0945ee7e66e292fe7069dda82f5ee615ac5fe5893e0699323632de8d4c1c668d987a8172597d78386
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.bin) = bc7f88652ae4d51954c967dde99dc6c11494a7c8
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.bin) = 763ff66b2234fd52ffe4ad08de5f090f
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.hqx) = c6a6c25ae1fcdfe4a0ba90616c3779068280b759
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.hqx) = 5ff75859fd5eb2fdcf75215ec6c045518ef111d0e8caecbe951dbf6f9f1129cac6948ab991949cbb3ee68d05ee8f398b07206acc9af53a5db1c4c6c7148a3a2a
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.hqx) = 36b141ff6722fd5e76fe293d1247587ae0efdd8a
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.hqx) = 01bc744d539b4f2f8e4fb2761d4c77e7
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.bin) = 9783f80336af95dfbf854278f58b577891a6442e
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.bin) = fb3d537f73cd7a5c05b4deeacfebe4805de1172071b97af545ef0c360c8093dd34007cdb498dad1b8fba4930e939c35429b314c575ab1e6d57fc208d72bee767
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.bin) = eb92d84b516d3c84a2c54fa501a1f585434639cb
-MD5 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.bin) = 0b6f626c1d8f578e01818cfc2a2e79b5
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Mkfs.sea.hqx) = e2286a389c29eebadaad19c9c3f3c9095b8bcb3d
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Mkfs.sea.hqx) = 5021b88d12bdc6545c681a3df24750375d63cac19b9e0f6a7148cb8592de6d0cc22f254b9755a96e1780541acbbdf54f0f6f9b62ff7cdab8dc94db0d247b2b87
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Mkfs.sea.hqx) = 14c18aceaab0593ca0f41bcce95499db3fc4f8f7
-MD5 (NetBSD-6.0/mac68k/installation/misc/Mkfs.sea.hqx) = a20825a32ee72f356880169993c3ac73
-SHA1 (NetBSD-6.0/mac68k/installation/misc/README) = 6f10f67afd988de6fa0a66f78ec46da15cc994f3
-SHA512 (NetBSD-6.0/mac68k/installation/misc/README) = e8f6d9c3217e7ad084ebc6758a07f14a664db9a34feb2b4dfb19fce8692ca1703f2b119eabcb13cb38f629a9588dea3279bfcf0cda65260acd585514d129701d
-RMD160 (NetBSD-6.0/mac68k/installation/misc/README) = 9d125cfe0be05fb26b9b5f52690b9280e282af44
-MD5 (NetBSD-6.0/mac68k/installation/misc/README) = 6081e0a4521b8f229bd3c09e094d4bc0
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.hqx) = e2286a389c29eebadaad19c9c3f3c9095b8bcb3d
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.hqx) = 5021b88d12bdc6545c681a3df24750375d63cac19b9e0f6a7148cb8592de6d0cc22f254b9755a96e1780541acbbdf54f0f6f9b62ff7cdab8dc94db0d247b2b87
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.hqx) = 14c18aceaab0593ca0f41bcce95499db3fc4f8f7
-MD5 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.hqx) = a20825a32ee72f356880169993c3ac73
-SHA1 (NetBSD-6.0/mac68k/installation/misc/NetBSD_ROM.sit.hqx) = 009c5f376751cda897cdd5707932a42ed8c4c75f
-SHA512 (NetBSD-6.0/mac68k/installation/misc/NetBSD_ROM.sit.hqx) = a04d6873fe2e0d3b543a05d1c12893f2715479e5bbfeeb9657babd146610197e4eec045a428d51bce4a9f8fb90f23f81b31b35f672692de953d6df8379a7531c
-RMD160 (NetBSD-6.0/mac68k/installation/misc/NetBSD_ROM.sit.hqx) = 6dcd7e0f25e19d77d38b18c22af77ef0c80769e6
-MD5 (NetBSD-6.0/mac68k/installation/misc/NetBSD_ROM.sit.hqx) = 6d9984dacf90adcd3f5f4a906b72b436
-SHA1 (NetBSD-6.0/mac68k/installation/misc/README.Booter) = cb2fb0233a1f5444c5c1b9648a6c167a4ce09437
-SHA512 (NetBSD-6.0/mac68k/installation/misc/README.Booter) = b233f9b5f8e6b615ecbb117d1853c64a82b1ac78958a7d394133e6e5f777ca6075b1e65d74ce52d1bc9cc97257584cbc4c70a11b0865ef095e6376d2c4e46bf4
-RMD160 (NetBSD-6.0/mac68k/installation/misc/README.Booter) = 2bd403db763c410b968f85cb8da32d10a7520b59
-MD5 (NetBSD-6.0/mac68k/installation/misc/README.Booter) = ae0f90a35340fc51be774ebd33674a41
-SHA1 (NetBSD-6.0/mac68k/installation/misc/README.Installer) = e8e4011a516b40ea99e9f1b16708fc91878f88fb
-SHA512 (NetBSD-6.0/mac68k/installation/misc/README.Installer) = 791e8a5415bdfd0ac0412e964d0ed1dac9dbebfbe9d546fbd92d3aa3d9b82eececba55628ac6cbbd7dd843f62183d718e2a1ad98c10311fb76c24dd40c77af06
-RMD160 (NetBSD-6.0/mac68k/installation/misc/README.Installer) = fc1b834d11c4df6677ee4a40b1e3ba2015d5ad00
-MD5 (NetBSD-6.0/mac68k/installation/misc/README.Installer) = bd6be3091a274d7c68da789ad1db0eda
-SHA1 (NetBSD-6.0/mac68k/installation/misc/extensions.map) = 4a5fa646db0c73433f3538e17e7d18b38679284f
-SHA512 (NetBSD-6.0/mac68k/installation/misc/extensions.map) = 32db0ebf9c0e80e4856c963ef21d3626060e20ba33cd61301e4114b77a636cf248e705700444b42a4631d1c56ef09294981158e1f0b0527b795501b9cea1b8f6
-RMD160 (NetBSD-6.0/mac68k/installation/misc/extensions.map) = f6811f3b103ab5c902a204dce2578e8cba6e8e9a
-MD5 (NetBSD-6.0/mac68k/installation/misc/extensions.map) = 5007a814ca2442a9693969cb997b4905
-SHA1 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.bin) = 6eb3cb3b988e6295f7222016d241f53c61cf347e
-SHA512 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.bin) = 16f05d2792e03d3a9c9ccd9d435ca5556224bd73619d89b9d2f6ac3b282f6587b76745bbbc9383c20f11c2125b60dff138845dac4a269e459a5b76ee1d5e865c
-RMD160 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.bin) = be8fc56378e697fc1f6fe9da5e8e69c787dbc434
-MD5 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.bin) = 33ff34f5db2f0ba88c83ce85b1e51664
-SHA1 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.hqx) = f588fece9bb911749d1038da2ec31e5ea50b2b21
-SHA512 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.hqx) = 1d4a1b489419171022e120d7292f479ea0d47833b2868bccc47ea1d97c442ff1e18044f43783fbd920145a6e6aad094be796dc8db00d5d997235c8f9d8ecb7ab
-RMD160 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.hqx) = 6e0bd805b5595d6d8ee3a24a63290978bd8da8cc
-MD5 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.hqx) = cf14fb32d042ba270b527ec8b11f6d3e
-SHA1 (NetBSD-6.0/mac68k/installation/misc/pdisk.sea.hqx) = ac3641da27c3615456310ff795b2d684eb2661ef
-SHA512 (NetBSD-6.0/mac68k/installation/misc/pdisk.sea.hqx) = a5404597c2479adf6ad9a910771f8d9cff57dbc4066d73346bfde3f1380a59641855820658ff3a6c8c0fd97b242dcfd4c30e7ecde50047bbbc7a7d45e9d77e4e
-RMD160 (NetBSD-6.0/mac68k/installation/misc/pdisk.sea.hqx) = a5368be868266f37bdf3459067659ef0c4186dc6
-MD5 (NetBSD-6.0/mac68k/installation/misc/pdisk.sea.hqx) = 71be22598a33042751caa6dc6c0af834
-SHA1 (NetBSD-6.0/mac68k/INSTALL.html) = 85efa4b8402dccb52805752ff82e87eb1259e5cd
-SHA512 (NetBSD-6.0/mac68k/INSTALL.html) = dd8012db2cb801b02b808eadd473f529b58977b9d2088c878aeb7deafc214adb2e281aa3b2094e0988f23e1ede88a1528492634211f86fe73d4b6085a1a917fe
-RMD160 (NetBSD-6.0/mac68k/INSTALL.html) = 01614436a73df3cae2149a607abb6c59671dcb63
-MD5 (NetBSD-6.0/mac68k/INSTALL.html) = deaafd9baf0d73ad2fe1e731ca8d4391
-SHA1 (NetBSD-6.0/mac68k/INSTALL.more) = 02b0da5241dfb0e94347c45aa2b59230a4c4beaa
-SHA512 (NetBSD-6.0/mac68k/INSTALL.more) = e167052f3a76308dda76a45e7fe93622a3e40fb7905d2bfc3e6438007d5bee8cafa06f9bddf4fabd9801d82bc3de56fbec1892a4977d2b818ece0ee570bc7729
-RMD160 (NetBSD-6.0/mac68k/INSTALL.more) = 1602b574a726ead87163bea4a121dc4d5573c321
-MD5 (NetBSD-6.0/mac68k/INSTALL.more) = ab7ed66c5f64540dc7b9d036048fcfb1
-SHA1 (NetBSD-6.0/mac68k/INSTALL.ps) = 999ea4a94acf0cf256157ba3b447d866b0347bfa
-SHA512 (NetBSD-6.0/mac68k/INSTALL.ps) = dfaf48953a73ed32b722bc95d34a58866ea8ccbf0d9d79e1fd9769634920426826a1e5cc86b94cc2eaf39eb3365bd5977ae0ee4284af484f64bb3e92847567ce
-RMD160 (NetBSD-6.0/mac68k/INSTALL.ps) = 73548f30c2c139ae5e62e98dbc54a4a80d1398c5
-MD5 (NetBSD-6.0/mac68k/INSTALL.ps) = 43662b6328dcc148ea4b6121de934e7b
-SHA1 (NetBSD-6.0/mac68k/INSTALL.txt) = d198c59c8fb2bcb408013794ef3d8cadcb4ad448
-SHA512 (NetBSD-6.0/mac68k/INSTALL.txt) = efb0679da4c0f9b6b8f15f92579ecabb67a4e7451e156430f9a748368bf8815d563d83050c24784c80985d06d0c257d66f91a03c792ad9b65da17e408d2e732b
-RMD160 (NetBSD-6.0/mac68k/INSTALL.txt) = 3ea97712841cab74a13994769fbe4ff66705b6c0
-MD5 (NetBSD-6.0/mac68k/INSTALL.txt) = ed4f38a04160feaf88388c0970e6ed6e
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = ce9bd080acdc497dd570c416befca032a1e8d823
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = 39b5933f7f43c990c2478041d398e9764dce24bfbae9baba2f603fe574448370d9d5cef5e398613fa047648cc0120dc7e878f527bc12751c6a37fe8966cb9d2b
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = d23e372373d18f19b55bc87635bc45f3f730a91d
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = c0e545e698824468f2b0acefaf788bea
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.MP.gz) = 0a065a75b49d53c192d1a79e9d216a2d9382d570
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.MP.gz) = dc2a00bcdf70c08d7089b775b3328f1b828c5a5962ec077d95c8ea279586c6b65c48bcde34b9432c4f7a0a7cb4dc6e8f4887ae254038919de8b4f2d2a3d2e3c3
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.MP.gz) = 39e88535fff406327f536ecd319c2b5785898fbf
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.MP.gz) = 3410df9cc4df7b28a292ed3d150808ea
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.gz) = 597f394bd55facd236e90f6aa213a5eef4711f7c
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.gz) = f7cbec6767fd9ce1aa61065ebc360d4aa1d2fcb26c4457f38c409fb5465753b726c8fb37ab0448863efd69c21a8216dea27e8067cd1fa1f74299677985195181
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.gz) = 21e5329fc0c500af9e333fabef527385021bde0a
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.gz) = 7da219cc304f59d1662eaf7f4dc1833f
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.gz) = e594f013594f13f586f6789005e49f13b9f3467f
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.gz) = bc68d5a6cf29cdc0c9ee8b9ca7610703025621f64a9b427f04b87cf53bf9e14e765785283a0a66aed1a15dd0abbe81e8fc2029c3310b715ef75cacc7eec93283
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.gz) = 7ce6740e080b6f9b5dc8d99c70c779b0486ad916
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.gz) = 3f6f6c37b2c6f7b04c9595245c7224c4
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.symbols.gz) = de3656de1e94d49bb43e6f0b21fc21ee15f2170a
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.symbols.gz) = c90cb34afa99a7ceb8ba3742a0a4b7bd59da93ecb4aca1ff1a540d18d540947446467627e3df717bb880f1b0a567336316bc8a2d59026a7a8f6935eca93984ff
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.symbols.gz) = b617db2dfd9b44f855f06b777f4c69680115ed27
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.symbols.gz) = c90b9ecfb302f54de790366b2e17b625
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.gz) = 661d08043304e74da8232e5d14d1f4f748762510
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.gz) = e4dec9781eea446f078df552033c52e4b8df30231ecbc14131ece1f7312c8a0f98d47b06d9b66988c5c4c2ff45e8dd57e7f2715e165c431b391127f0e5c03565
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.gz) = 99e3fd9681bd7f400de2e2206163d501b6d23d41
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.gz) = 1f1b3e39dcde937788a32ef3a4f65c1b
-SHA1 (NetBSD-6.0/macppc/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/macppc/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/macppc/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/macppc/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/macppc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/macppc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/macppc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/macppc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/macppc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/macppc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/macppc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/macppc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.MP.tgz) = e11a4e1da81be3a4650be198c5f9fe7204991540
-SHA512 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.MP.tgz) = 924fc04dff6c7458196d0a19ec38a9a1114ef3cf5cd557aa68563c3d1d2dee67d9daf3ec72fec95c9bad8862ceb663c1f96cad61965e65c042c2723ffacfe43e
-RMD160 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.MP.tgz) = 585796f103490e30928aca2c4977a41acb990c84
-MD5 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.MP.tgz) = 5b9f58a612ad00b10d4812ce9e325204
-SHA1 (NetBSD-6.0/macppc/binary/sets/base.tgz) = a31efb13ffcb70f4f429ad018d0ca6f9bc9e1db5
-SHA512 (NetBSD-6.0/macppc/binary/sets/base.tgz) = 9746428cdb65b283fa668f63cd33cc2c0bff75e85f4357f460da4d7c0c874bbc0369170d813fa70a1f0933fc2240da6536fa1c2c2be59c6722ab3849d92a3dc0
-RMD160 (NetBSD-6.0/macppc/binary/sets/base.tgz) = c83a80159c7128c8d311c62c15776776dae0fd97
-MD5 (NetBSD-6.0/macppc/binary/sets/base.tgz) = 13ea19ca37828efa708cc77efe1a18f4
-SHA1 (NetBSD-6.0/macppc/binary/sets/comp.tgz) = 2608b27059b55a9d53c2e4fb0f6f3417aafa8293
-SHA512 (NetBSD-6.0/macppc/binary/sets/comp.tgz) = 2f6ec81a049c6c4688fc362a341d11c100ce057760eb5832fceb039ce810abde76d035a3f8e9a23fbb0f4ec3709a8729eba0e92c0f56aed9aed0779588b44bc0
-RMD160 (NetBSD-6.0/macppc/binary/sets/comp.tgz) = 566f37564d448641e6bdcbd70e87c7b9406ee78e
-MD5 (NetBSD-6.0/macppc/binary/sets/comp.tgz) = 0ab55dfc92d16a84368d2f1118b6385d
-SHA1 (NetBSD-6.0/macppc/binary/sets/etc.tgz) = 42a97230bebad52fff9236fe06f3ac0aab27f929
-SHA512 (NetBSD-6.0/macppc/binary/sets/etc.tgz) = b574a57a33d58eebac3a048823fa845d4a403e0503b21340c9cfb05ae9a743a213aa7222530c9e20d30fd90003b56366815ebcb28d085c2d9c998a73972ce602
-RMD160 (NetBSD-6.0/macppc/binary/sets/etc.tgz) = dfbd6641e45fed5e9fa425be5c8878462ff8c6fe
-MD5 (NetBSD-6.0/macppc/binary/sets/etc.tgz) = aa3881b4329b45b318e6d6f0d97ac24a
-SHA1 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.tgz) = 77f4b674c6ef5bf00c6d6173d2498ff7ebbc64f9
-SHA512 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.tgz) = f16e4dcf74059eafc235bbe7d7b59de1071b56ade3f77308bbb646fdd19e90362635125bff5f81ca92e51502c668106067ca6b377a8aec2bff708e589380977a
-RMD160 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.tgz) = 0906acf7e10f69ea769a5a58d0ffe2d1e060ba98
-MD5 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.tgz) = 50cf40ab93c7505da5fe7c9bd488abd2
-SHA1 (NetBSD-6.0/macppc/binary/sets/modules.tgz) = b2c51fb3ca33a8f70c00f9e7d49cd4b91fb79673
-SHA512 (NetBSD-6.0/macppc/binary/sets/modules.tgz) = 2cfd8f4f53c0561b8ab8aafac2c38363750be6484c21c8d670b7afb89390875893a9b549b2e28d08cdeeb81217f7e0e0fe437e09059871d4b063ffa0057bae97
-RMD160 (NetBSD-6.0/macppc/binary/sets/modules.tgz) = 9fb4d8eb95a719022a522b3e9a970cda1a416f15
-MD5 (NetBSD-6.0/macppc/binary/sets/modules.tgz) = 54914b3291b652b921239631c740dcea
-SHA1 (NetBSD-6.0/macppc/binary/sets/tests.tgz) = f87666428063cf6b980c1d284aab5894e2c3d2b3
-SHA512 (NetBSD-6.0/macppc/binary/sets/tests.tgz) = 94474f3ed0feff6b8c10299c4e190154bf4c6d579dd3edced5de901aec60c9413a921b282bc7ae0c2dd3ec49de8162204660a7fe80393102aa7ebd3318f4124e
-RMD160 (NetBSD-6.0/macppc/binary/sets/tests.tgz) = 7467da9599fb2cb270854e337b696568de24b205
-MD5 (NetBSD-6.0/macppc/binary/sets/tests.tgz) = 165d0d19f6c40d8249ddd46214a68e25
-SHA1 (NetBSD-6.0/macppc/binary/sets/text.tgz) = b3e0e6f977a3598fb6f8a377cf91a67aa21ff74f
-SHA512 (NetBSD-6.0/macppc/binary/sets/text.tgz) = 361c67a072fbfe6055fcf8436f3a84b10d92a0cc987c818a32a9f536466b285d47ef2ba39c8f04319ac0a93e7b2353eed589e6b72c3bd32f38c12aae82ff26ed
-RMD160 (NetBSD-6.0/macppc/binary/sets/text.tgz) = 3d0c5c4e3a84335431a0d6cc9b78315495e137d0
-MD5 (NetBSD-6.0/macppc/binary/sets/text.tgz) = d968d8f10bd69add51020decb7cd01bf
-SHA1 (NetBSD-6.0/macppc/binary/sets/xbase.tgz) = 63043b541de378d777f43d0a333d2112a98a4e8a
-SHA512 (NetBSD-6.0/macppc/binary/sets/xbase.tgz) = 189d8b05121b356d4fa587c46cd4bb50df1ff89a197c983dafed9ce93293ad16e82f77d14ae3ea2c8e9f01f8a5eab4d9841274d9caa7143f4d977d921d3e1a84
-RMD160 (NetBSD-6.0/macppc/binary/sets/xbase.tgz) = 3cccd55a4407632e7d7444a6919901aca686c9cb
-MD5 (NetBSD-6.0/macppc/binary/sets/xbase.tgz) = 1e9175f276efb45934e2e976787ec61b
-SHA1 (NetBSD-6.0/macppc/binary/sets/xcomp.tgz) = 9322a94973bf4e59542a1c3fe2d307f1dee362ff
-SHA512 (NetBSD-6.0/macppc/binary/sets/xcomp.tgz) = ca37cdedb39625b92d2068c8736c2d1bdadd132edbffb4bf6ea3a4b1a21ffcd5bfdd78e5aaad874be32cff4d1b98059e142c5a2192dc1f38ffb7a64e8e180a17
-RMD160 (NetBSD-6.0/macppc/binary/sets/xcomp.tgz) = 48ef59c053d4a964872a70f1350252f98423794b
-MD5 (NetBSD-6.0/macppc/binary/sets/xcomp.tgz) = fc0aa962b13c0e092657bfc3d6368284
-SHA1 (NetBSD-6.0/macppc/binary/sets/xetc.tgz) = 5ace04f9545e5ac27432bddcde0d42dd592540c1
-SHA512 (NetBSD-6.0/macppc/binary/sets/xetc.tgz) = ccdaeb27301167072fc0c98b78633c2d52b1eb4a5bf3ed5c606a646a420c7bd73e197b73d1a928c4aa17013fca5bbbd98f06fc4baa4ca97ada3a3e89490fdc06
-RMD160 (NetBSD-6.0/macppc/binary/sets/xetc.tgz) = 048fd168d184f88b2164c654594e68665dec62c4
-MD5 (NetBSD-6.0/macppc/binary/sets/xetc.tgz) = 1735140072351ccaa55f8b25cd002fd6
-SHA1 (NetBSD-6.0/macppc/binary/sets/xfont.tgz) = 2cea3fa057b220c72ba147f9821d33b18d8346d2
-SHA512 (NetBSD-6.0/macppc/binary/sets/xfont.tgz) = d76f6d6613f96475c85427792ad339576815f1423ae7e84018944d31cb66aa6ec14f2a8886f0912963745293326812a7efb8b1d2f08a6ee27da8fbf53c3223d7
-RMD160 (NetBSD-6.0/macppc/binary/sets/xfont.tgz) = 42190ebf50a1db179d8d7b1bdd1aa3e86082ac77
-MD5 (NetBSD-6.0/macppc/binary/sets/xfont.tgz) = 752888a1280d52af5e6b3c79287738e4
-SHA1 (NetBSD-6.0/macppc/binary/sets/xserver.tgz) = 4c9ca17aec65f27a569ee9e6ed4af95ad3b9cd21
-SHA512 (NetBSD-6.0/macppc/binary/sets/xserver.tgz) = 208d60880438a476ecacab3a4ab5872007c2728cafe16022cee9c0d781ce4dd8ef95d302ac9212a1a66b825869dc35c8df096d9f7c97a97054cf963ba58418fa
-RMD160 (NetBSD-6.0/macppc/binary/sets/xserver.tgz) = f0bd1020d51ed7036593840c49bfaee57e09e58c
-MD5 (NetBSD-6.0/macppc/binary/sets/xserver.tgz) = c241cf0caa30e6ae203fef4c95d2d74d
-SHA1 (NetBSD-6.0/macppc/installation/floppy/boot1.fs) = 053808f21cbc6acc50469ffa2a6c48471bfbf8fe
-SHA512 (NetBSD-6.0/macppc/installation/floppy/boot1.fs) = 82f844d8ee09d09a5cb06ad8cf8131826ad9e8c38a289e95757d6b9664b0aff4e30743ba750dd7ea780d556b4aa619388fbbef8727c52b302e314b08a6853306
-RMD160 (NetBSD-6.0/macppc/installation/floppy/boot1.fs) = 291a7e7bd8b98758f2dce412054abbb69c6cf4cb
-MD5 (NetBSD-6.0/macppc/installation/floppy/boot1.fs) = 369cf1bf5a69c9220d3ab6213c0a10d1
-SHA1 (NetBSD-6.0/macppc/installation/floppy/boot2.fs) = 46098cec194fe5de4ffc1b66508397916cabd968
-SHA512 (NetBSD-6.0/macppc/installation/floppy/boot2.fs) = 25ed41f6712ae333101fb168cdafbdb4c4dc677e4a0c701665d02758202af2238a2a53828e833b0917ac0547ea34a1a1c95f8b9018084ff9053bbba985814b91
-RMD160 (NetBSD-6.0/macppc/installation/floppy/boot2.fs) = 9e743d123b1f43953743e347218ad29f022822be
-MD5 (NetBSD-6.0/macppc/installation/floppy/boot2.fs) = 05843ccdeb93f326ddad69e810303fe5
-SHA1 (NetBSD-6.0/macppc/installation/ofwboot.elf) = a013bc2f2d4d39cf9e56b0d625b6c48d08bb455d
-SHA512 (NetBSD-6.0/macppc/installation/ofwboot.elf) = d28569738cfad70b6d5aef80b32e9d44f38dc5038f38143bf93f78eba708ff05e9a7955c03a682833ace2cd20daf4adb1a3c36956768e5f2b08fb59a44573854
-RMD160 (NetBSD-6.0/macppc/installation/ofwboot.elf) = 9a9f54b00b80d91a934e83cb17a68b15a9fe8c00
-MD5 (NetBSD-6.0/macppc/installation/ofwboot.elf) = 2d4598a059853f8f7e99541afcf6e31e
-SHA1 (NetBSD-6.0/macppc/installation/ofwboot.xcf) = a15eef375d155080b6809e2db46d0475baebd872
-SHA512 (NetBSD-6.0/macppc/installation/ofwboot.xcf) = 4756b6eeb05754185c16ff02e9d98642ae75c3545b385a67870e58b8211feda3ce265eaf020ca5252e9c47fab64922d9af8eead98b2cff798c58af9840fbd345
-RMD160 (NetBSD-6.0/macppc/installation/ofwboot.xcf) = 1654bc8a15f5d3c2bb248033cbfbc37ca23980a7
-MD5 (NetBSD-6.0/macppc/installation/ofwboot.xcf) = 84cc2385de486f3e72868ab7c75c8683
-SHA1 (NetBSD-6.0/macppc/INSTALL.html) = 9752ce3a0ae1964208f027404c5aa3b526efe08c
-SHA512 (NetBSD-6.0/macppc/INSTALL.html) = 71dbe4d992bcea022b1aac0dbdc3cf596a7538bf3fd2de390925094bfaa5cb1f71e332a2eb419cdfa1528cb7951c92491b3b3d7b88cd9e4c40f81af0a8ea34b2
-RMD160 (NetBSD-6.0/macppc/INSTALL.html) = b5e2c12fbcf7fcf56e6e9354b178188c88e772b2
-MD5 (NetBSD-6.0/macppc/INSTALL.html) = 31c92f0b3c87409d1d74b17912f05333
-SHA1 (NetBSD-6.0/macppc/INSTALL.more) = 7b4f4aa288bbbacca5a7f69f7fb1dde30b6a67e4
-SHA512 (NetBSD-6.0/macppc/INSTALL.more) = 7ab24e82eb0b779f11e16b10982fb82d6831058b0a51b57c2abbb0c91f09daa92a7a724c18f775d551b6bc4b8bff36eb91b6a823d2f9810a478180c50f9c676e
-RMD160 (NetBSD-6.0/macppc/INSTALL.more) = 7bc31a39cfc1017821c29032432a8765af7b240c
-MD5 (NetBSD-6.0/macppc/INSTALL.more) = 0a198a6d31ac02b702c103117400eafb
-SHA1 (NetBSD-6.0/macppc/INSTALL.ps) = 9a14912c8a58fc4e6d004dc2426c189b991d5e6a
-SHA512 (NetBSD-6.0/macppc/INSTALL.ps) = 94ffb000d582ea09c0f3d4e0b6e757f0bbbe50e6793d33e3e3ec29a0da26a0130f23c778e19e681892ceab4f440dc01d37b206272d24aa96c9ef3a9a6c49ed0e
-RMD160 (NetBSD-6.0/macppc/INSTALL.ps) = edde76230d345a53de93bb00af333be03971d0dc
-MD5 (NetBSD-6.0/macppc/INSTALL.ps) = f275f19c885be2a1ca922cff1561b5c8
-SHA1 (NetBSD-6.0/macppc/INSTALL.txt) = e7e55b4231206d5fc087d6ad0c4b8ef52a73e385
-SHA512 (NetBSD-6.0/macppc/INSTALL.txt) = 51f4462c903b0948ca5634bf27a9988924cfc3a8249310f1c5f2fc3c8372e9ab916cf106fa7bd9153ccc44454a1fc298024214575f43bf938a7e8a8a18163038
-RMD160 (NetBSD-6.0/macppc/INSTALL.txt) = 8213d05b6c035c0932159f098633921ab6d79247
-MD5 (NetBSD-6.0/macppc/INSTALL.txt) = 319bfbce37725d2bbafa032c7891529a
-SHA1 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.ecoff.gz) = c7357a28d27e6ba6fd9a1ca72b7f0d0d95c23089
-SHA512 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.ecoff.gz) = 3a0fbe1a79b886094cbb8a3613d3193d2731dbace050847c6d70ee8961b4d0e0dbf2f5d666e5f6c43e5ee2871ef9c59823b5fcadbf2dba16144f8c13e778c821
-RMD160 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.ecoff.gz) = 12b0c1cda3875379f2cd582b5eac8316d9fec2f4
-MD5 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.ecoff.gz) = c24f3d6e9a289d321c0ee250817cd348
-SHA1 (NetBSD-6.0/mipsco/binary/kernel/netbsd-GENERIC.gz) = 188a82d7aab86e27f7defbd0318c12deb06a5200
-SHA512 (NetBSD-6.0/mipsco/binary/kernel/netbsd-GENERIC.gz) = e6c278b3bc3e93137e2a0ccd894420671dc3d8f880b08aa673e51b758d88667fd416b317b90e1eaa72087a8b97322ce629f538f7daf2bc7746f0209d00e3d2f4
-RMD160 (NetBSD-6.0/mipsco/binary/kernel/netbsd-GENERIC.gz) = 19b32d196282fccad2907b3972d0bd8673b0b63b
-MD5 (NetBSD-6.0/mipsco/binary/kernel/netbsd-GENERIC.gz) = d91b37f1b364bf92609c4cd56e738873
-SHA1 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.symbols.gz) = cfae9b61b6577966f0bf0f99e4592ce788f2e047
-SHA512 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.symbols.gz) = e100ef50b40411ee3886ec6b0a77ac45459c4a50b1f5b6fee1961aecbef6ee4fcc5a4a1a215eeaefcf5a47407a3d907848e09fa0299be61acb7a93da813da77f
-RMD160 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.symbols.gz) = 1e65145861489b78275308a994aca38a4e60e3d6
-MD5 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.symbols.gz) = 5a441172f0a1659f405e7db91dcbdbc9
-SHA1 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.gz) = 517897ab45650448a730ae2d9df177e3858c7ecf
-SHA512 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.gz) = c8f2a2b0e243000b5c6a134b1c822e40cd454230039ed39a147320e049a8c4b8f540ba32613a1a189455d2f14f56b2291549b3cc40a16c65baf451e5e6005874
-RMD160 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.gz) = 7a428cf2e424233910e6941975b984f54639d581
-MD5 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.gz) = 989821fb043e7208eb7464b9cc3d6faf
-SHA1 (NetBSD-6.0/mipsco/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/mipsco/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/mipsco/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/mipsco/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/mipsco/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mipsco/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mipsco/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mipsco/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mipsco/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mipsco/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mipsco/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mipsco/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xbase.tgz) = d81c7fe75a90f1b2111a066e78f1f2b3e8edcd8c
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xbase.tgz) = c241391fcde4a685a0a2af6f843844ac2e918024c447a2b5ea2cf5300f69acc42fdadf53d3b0348f10723b786bcc0f420e68fe36228375bf3cb5140de41eb40f
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xbase.tgz) = 2fbf60b64c0b7ac2be72ebf998d9d7390fc40705
-MD5 (NetBSD-6.0/mipsco/binary/sets/xbase.tgz) = cd23ca0f6b359c4d695d4494a147d40f
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xcomp.tgz) = c8f5ff5ea9f9bbe231f92d8b7f3bfcbd2897069f
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xcomp.tgz) = c7590075195019078b68ec5f87e36479ae2e7b7749c523df4ef21c9d881c343cda9f5c2bba897dd313329a76fe5c18e920d92827878d98ce08a7dc776352cd02
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xcomp.tgz) = bc60e267cb6e11b4a7305f8b7074084e179e0ff5
-MD5 (NetBSD-6.0/mipsco/binary/sets/xcomp.tgz) = 8e58ee51667def3bd015f79769c0d932
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xfont.tgz) = c551bd13179b9508c2e3a7e19cec323e8ba21844
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xfont.tgz) = 764527f2f3f4686759fcae3fd093f4e00f34e1249994126221a6f9afe73d4cf8ddfbe8b8311798da2ed38c52466a44bb26ea08ad5aab1c08eebcc9019b4223f7
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xfont.tgz) = b3a365bedf8b4a20f3920d0e33b9a42fce288953
-MD5 (NetBSD-6.0/mipsco/binary/sets/xfont.tgz) = adac8939da213a0195cc1d351f979199
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xserver.tgz) = 686f6e6d722c9676351ab058736f7077b4ebd2f6
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xserver.tgz) = 5c818f22edbeac7325228af99d6da6e44b5eb659c7c9fcc6b332071e97a0a490081eda7f9e0f22d6a3f3a589ae34179b434751a6191db5c664683d7510aecedc
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xserver.tgz) = 0e9f066095b505c7f062bf877147189a7a2f0649
-MD5 (NetBSD-6.0/mipsco/binary/sets/xserver.tgz) = cdd2e5127838437df40af161e0c8398f
-SHA1 (NetBSD-6.0/mipsco/binary/sets/kern-GENERIC.tgz) = 814522219e9ef7544ff09e8a1aeec2544e62e456
-SHA512 (NetBSD-6.0/mipsco/binary/sets/kern-GENERIC.tgz) = 2e81957dd87b68e9f3b69b89d1eaf2f1cea45ea237558bc50e953d1d4987e86bd1fd7701f00971b252df35c8dfa8c006b1777c5941ee4385894680346aa3f286
-RMD160 (NetBSD-6.0/mipsco/binary/sets/kern-GENERIC.tgz) = 00a21ba72b46c7d743c2255d02a5fe462ac90774
-MD5 (NetBSD-6.0/mipsco/binary/sets/kern-GENERIC.tgz) = 85c821c524ccbfede1d34c6436de595e
-SHA1 (NetBSD-6.0/mipsco/binary/sets/base.tgz) = 1a989a4f1f5bd6aa082d2af9c9e339530994e710
-SHA512 (NetBSD-6.0/mipsco/binary/sets/base.tgz) = 0b0029d19eba066306c386aa7569a5af8ce9e2d4e12f73539cceabb3bf3eb9696f006b0fefda001cef488fe4db40a3b519928fa139fd025c8e95669a2b7fddec
-RMD160 (NetBSD-6.0/mipsco/binary/sets/base.tgz) = 30de7c1cda91944523275d184e5629beb3be54f8
-MD5 (NetBSD-6.0/mipsco/binary/sets/base.tgz) = dbf30b2affc7c471b1488c36fab8c383
-SHA1 (NetBSD-6.0/mipsco/binary/sets/comp.tgz) = eae1cdcf3ca993f6903f7c0315b3bded0cb19954
-SHA512 (NetBSD-6.0/mipsco/binary/sets/comp.tgz) = a777f285e5b72c5cd21eae29dc374956a80b738acd11f13d536513cb30a31273043c8c73554e4d227df99d4ef7d20f15bcc8fafc1af1c16718dbe6276c28f5b9
-RMD160 (NetBSD-6.0/mipsco/binary/sets/comp.tgz) = c4dcbd1a3ddec8bf1dddd2ec18d6d9de13dddcb8
-MD5 (NetBSD-6.0/mipsco/binary/sets/comp.tgz) = 2df422a2c23ad3357f41a02d305ca753
-SHA1 (NetBSD-6.0/mipsco/binary/sets/etc.tgz) = 4035cdd82aad7dd4b19ce7b4f18f93de45b4a35a
-SHA512 (NetBSD-6.0/mipsco/binary/sets/etc.tgz) = 8df26b3954bda34cd79ee7036056c166654d36d642c7abddd10caafb0f6692bd745a1f336047de01dcefc32060712559b82ea4381dbb1c3d90eb962a798e9ed0
-RMD160 (NetBSD-6.0/mipsco/binary/sets/etc.tgz) = cb67e9de5fb8560ab973dd6dd877f856582c0538
-MD5 (NetBSD-6.0/mipsco/binary/sets/etc.tgz) = 7cc0cebd7f9c62e5e2cd7fe61e041a2a
-SHA1 (NetBSD-6.0/mipsco/binary/sets/modules.tgz) = 17b0db51acea9fb430bf4f9ee65a3d10b7e01747
-SHA512 (NetBSD-6.0/mipsco/binary/sets/modules.tgz) = 4b60e6a7405c8cdda48f8c85723b4245f3af0f31c333090bc3833f203606d91cdf067a02a9a179956642b368d4f78d1da53cb48bb783a0abf24ac5a1c56681cd
-RMD160 (NetBSD-6.0/mipsco/binary/sets/modules.tgz) = 34019b1b1080db5d84607337765c6fb19c103651
-MD5 (NetBSD-6.0/mipsco/binary/sets/modules.tgz) = f53620978a24bc909f9555125ddc6416
-SHA1 (NetBSD-6.0/mipsco/binary/sets/tests.tgz) = 528b2898dfd85f9c51f382d31f357ff470fccbed
-SHA512 (NetBSD-6.0/mipsco/binary/sets/tests.tgz) = fb52dddb334a13e19dfd657aa165a2be4c9ed546e739d337141735927c74ed444c63a2ccfc7676ddc7301ade3bd9b713ac238a3cc37b8716705222856f26edde
-RMD160 (NetBSD-6.0/mipsco/binary/sets/tests.tgz) = 4bf30f676d0c7cdb6838ea7807c505de82372884
-MD5 (NetBSD-6.0/mipsco/binary/sets/tests.tgz) = a150e930291903d9751319a92ad116be
-SHA1 (NetBSD-6.0/mipsco/binary/sets/text.tgz) = 01174401e42d87684ed569f3001994142451fe29
-SHA512 (NetBSD-6.0/mipsco/binary/sets/text.tgz) = 8f2c57883df809889d5371730ff738429f147eb659895ef3bd25c23a1c78ed3baacee1e09d82630daa92b9dc5810167924537cdcb1234536acbc02269acbfd2f
-RMD160 (NetBSD-6.0/mipsco/binary/sets/text.tgz) = 690f4481c50ab0bcd2a2773e762f250b60a7d088
-MD5 (NetBSD-6.0/mipsco/binary/sets/text.tgz) = 0bb0dfa52358016da848c0783a4e9ccd
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xetc.tgz) = 1824720386f5e1fca6135a77aad15444221ffd3f
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xetc.tgz) = 1f752393b0913fa39f222eb8cff44c9c4b8045008459e2c2122748114a5c69c684153aed737aabceb9fde1cb4852527d6f4375be177b6f8e270aaef9a3360ab7
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xetc.tgz) = 346eb417698387537bd483d12d70796c968c970a
-MD5 (NetBSD-6.0/mipsco/binary/sets/xetc.tgz) = d9822dfdedccbf5fbd3bf6ab9b178186
-SHA1 (NetBSD-6.0/mipsco/installation/diskimage/diskimage.gz) = 7f3836f8a683b1bc03880af9a5440ce0c43d45be
-SHA512 (NetBSD-6.0/mipsco/installation/diskimage/diskimage.gz) = 1c513851002df0e3d6d11e33b5b62df96547e75c300c22737be8f553613404d94dbddf036cb2a00707b8d23b00a14ab3b37fd2251fa0f04b05ab35fd13c241a8
-RMD160 (NetBSD-6.0/mipsco/installation/diskimage/diskimage.gz) = 8b22ef52868c3da50f224a8663683a990816d87e
-MD5 (NetBSD-6.0/mipsco/installation/diskimage/diskimage.gz) = 0264b27319b43fd4e9c8c74e0478dac4
-SHA1 (NetBSD-6.0/mipsco/installation/netboot/diskimage.tgz) = 62ce9d94cbc2d187ef03f9c4c22f0d865c482500
-SHA512 (NetBSD-6.0/mipsco/installation/netboot/diskimage.tgz) = 4b53601368b9a70e6391efab32547a038c5b05b39ac73c1677f8b1317ca0d0458d1178218aa5457d8e0d8545a1f2a20e65e200c3e8d8b04e395d11886e30c22c
-RMD160 (NetBSD-6.0/mipsco/installation/netboot/diskimage.tgz) = 8da2d5476ab14c8f44c732fc07202a234d5b4abc
-MD5 (NetBSD-6.0/mipsco/installation/netboot/diskimage.tgz) = b83ebc427977f9b30679b06765d6babe
-SHA1 (NetBSD-6.0/mmeye/binary/kernel/netbsd-GENERIC.gz) = 93157fd963d5e5967b626593297490082c21b426
-SHA512 (NetBSD-6.0/mmeye/binary/kernel/netbsd-GENERIC.gz) = 300868a582f1eaa960d0d211374ca563a7a5f8347239b178a368ad3c527ee8ef76ca54628fbacc01521903cda04309b666953e1136d1f1fa8ddd28a046d1182c
-RMD160 (NetBSD-6.0/mmeye/binary/kernel/netbsd-GENERIC.gz) = 7da72149fd4cbd471bf3abf076a4f33c8dc0a3a5
-MD5 (NetBSD-6.0/mmeye/binary/kernel/netbsd-GENERIC.gz) = 053862a7ced67c229e688793b99d2fa1
-SHA1 (NetBSD-6.0/mmeye/binary/sets/games.tgz) = 37e15b0950aaaf1af36427ae5dd5866c1879b6b3
-SHA512 (NetBSD-6.0/mmeye/binary/sets/games.tgz) = e674abb1b1966acbc581a8f8b3e37841f48656e66f3302077cbb2de443487912b99521336ec5dc096fa3c7769b2d7623e1d1720a079407ec1861d32159a72ebc
-RMD160 (NetBSD-6.0/mmeye/binary/sets/games.tgz) = 36070071e8315d2352be1b3e563ce7ef7625d184
-MD5 (NetBSD-6.0/mmeye/binary/sets/games.tgz) = 0016145b46957b95dd158b4441dfb010
-SHA1 (NetBSD-6.0/mmeye/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mmeye/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mmeye/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mmeye/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mmeye/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mmeye/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mmeye/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mmeye/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xbase.tgz) = 564bce6dd7c37b5e941e41d50f363c133fdf8f97
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xbase.tgz) = 23b3306254c789331542e63974f9d7cdc54d99ba2cd67cf6a1c97f09afa4f6cf6aa8798e37b7c38f4a55afd1572154f291fa1bf2e2a1fc87165fd6bd7f89fb80
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xbase.tgz) = 476fbd8301bec0795a01552728ada44204d2dbe6
-MD5 (NetBSD-6.0/mmeye/binary/sets/xbase.tgz) = 9fbbbdb3acfa4ccd9f0b309ea0ed0700
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xcomp.tgz) = 526a278a13833073e6231e879abdec85400ca888
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xcomp.tgz) = d2081a7536e3d7fa27a363afd8f6eb5fc3de4606f11b4857be2f1df59934da9d3d16e0df3a6edf4cdf52c8f579e0e4c06f07de0959b5213c21be1a8fdc2ee134
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xcomp.tgz) = 4a767ff08e9bcf98f886849cabebd1300397256f
-MD5 (NetBSD-6.0/mmeye/binary/sets/xcomp.tgz) = a23a2d8be9298497b4b6d39fda330bf4
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xetc.tgz) = 93a5cfbbfdc641f91ab363d4b65d1158d71c0cfc
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xetc.tgz) = 85a67734801e81e129a37b73ae62211459fb16d4e52a945ef21a4bb908dd7d1d775233956086dd3d59af45bcea24fbd6f54a2a9175756d242b57e07d10767548
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xetc.tgz) = 6fb055d0e1b6264bf1ec396236d903218832377a
-MD5 (NetBSD-6.0/mmeye/binary/sets/xetc.tgz) = af954b56e624948145b91aa451d77392
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xfont.tgz) = 6139c05273b6feeecdfcd11cbe0da91256d12a11
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xfont.tgz) = bb849454ede88d39ca60d6c513c833c2b29ea548adedb9f76870839174a3daa838d38a6ad701c78bfc164e690c5ebda9c9d00d4c23ad816df9f1962313afdbf2
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xfont.tgz) = ea8f123f9f78b429b77ff15c924803da1da2068d
-MD5 (NetBSD-6.0/mmeye/binary/sets/xfont.tgz) = a87cb6769c37ae20dbf0dd70cef93d11
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xserver.tgz) = 6cd4fdb0ff00ef5d89b47e68e538c86e395b2054
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xserver.tgz) = e3b575cab95e297a05a26a03eeff0cf843d665ebdfd103846ad544bef1d04f93aa20ceab09b1dfaae8f59d89ebb1cbef400b7521bdb41f7542f23156540aa4c0
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xserver.tgz) = 7e52b98276b4d097f7babe918e6768ae9d7945db
-MD5 (NetBSD-6.0/mmeye/binary/sets/xserver.tgz) = a505ab4ce0801aabe21fe6038b63809f
-SHA1 (NetBSD-6.0/mmeye/binary/sets/kern-GENERIC.tgz) = e14c11631e2e88e3b57b7d20fc3c645faf18fe37
-SHA512 (NetBSD-6.0/mmeye/binary/sets/kern-GENERIC.tgz) = 29dfa7b68e616b6192620316e85972381e7c104070f2570a4222b22c738eddeebd3d8a49518f64adada548f3cbc31a2c501db6f186d7c2fb4178cd9187d7e289
-RMD160 (NetBSD-6.0/mmeye/binary/sets/kern-GENERIC.tgz) = b4289ab1966d34a7fc19d6736c374e98c969f2f0
-MD5 (NetBSD-6.0/mmeye/binary/sets/kern-GENERIC.tgz) = 6469d2d171a8a4bb99ec9a396d43c4b1
-SHA1 (NetBSD-6.0/mmeye/binary/sets/base.tgz) = f26be3019cb31f22bea52c431ec65026536117d8
-SHA512 (NetBSD-6.0/mmeye/binary/sets/base.tgz) = d595fa01b6176f11dd722a4c0416e83975fabb7669cfb018b364681a82c1fab6d456e35aee5c1e8f62d721708976da1ddea203ba31c782265d95dadc046080b8
-RMD160 (NetBSD-6.0/mmeye/binary/sets/base.tgz) = d08e45a281fa538ba47d5e01b7ca7d2c34d05847
-MD5 (NetBSD-6.0/mmeye/binary/sets/base.tgz) = 3a7f10d4e415aeeab19f10c6cd9683e6
-SHA1 (NetBSD-6.0/mmeye/binary/sets/comp.tgz) = 0e37635ed1c12873ba9443f765fa8ecd7441aa43
-SHA512 (NetBSD-6.0/mmeye/binary/sets/comp.tgz) = 2528bf14ced0b15c49452d705cb60cf9e33187fc759920e4e400fc7a2cbb140efb4e46a135a3c06b7c8b4ae9a2b06094e4f14b32372d3b744d0d898818ac0e4a
-RMD160 (NetBSD-6.0/mmeye/binary/sets/comp.tgz) = 51bee8a0d676f8f51918b76a816ddd417cc38a6b
-MD5 (NetBSD-6.0/mmeye/binary/sets/comp.tgz) = cb209fc3bf35ff197cec755c15879f27
-SHA1 (NetBSD-6.0/mmeye/binary/sets/etc.tgz) = 574390c9066c5a2867c217726a60c5b0fcd954c6
-SHA512 (NetBSD-6.0/mmeye/binary/sets/etc.tgz) = 29f0fdf264263ddca8a04e2a645999127bac3025daf2ee560647f4d15fbaec3d929c725256244fa561ee69d8eddf4c9439d81629894dcccba13d063ec1a0d70f
-RMD160 (NetBSD-6.0/mmeye/binary/sets/etc.tgz) = 5e68a1f6a88a56e63788525987bcbef81314cfd0
-MD5 (NetBSD-6.0/mmeye/binary/sets/etc.tgz) = bb1639782d6f4027a7b872732e0f819c
-SHA1 (NetBSD-6.0/mmeye/binary/sets/modules.tgz) = d687589906a811d0ecf22c89bf54248326aa0bef
-SHA512 (NetBSD-6.0/mmeye/binary/sets/modules.tgz) = fd536f114ba71d1ed7241a81f89af7d26a8b554b6fa12ccb16d2d4e6e23029be66fbf4d2cb4990c65102bf3206972ca00a329c6a6c8cb86ad283356aa38434bc
-RMD160 (NetBSD-6.0/mmeye/binary/sets/modules.tgz) = c2bde6622408d084a8ed7fbeafce2260220c5560
-MD5 (NetBSD-6.0/mmeye/binary/sets/modules.tgz) = d833b7a1b95c96a2fb4c526ddc7b6a62
-SHA1 (NetBSD-6.0/mmeye/binary/sets/tests.tgz) = 28c07cc4ab9c6688c615ecfae68cdd7afeaf627b
-SHA512 (NetBSD-6.0/mmeye/binary/sets/tests.tgz) = bdf6463ad028eef4bfb3feb78d43924c4c176b8195509d25d1f98cc772cd1d4edf1820497dfb1baee7dcc142d0e64e78d3203feab0636fe4d821a4cd64250459
-RMD160 (NetBSD-6.0/mmeye/binary/sets/tests.tgz) = f10cf5b11bb96eb0be1c08f698897cb2c609c2f8
-MD5 (NetBSD-6.0/mmeye/binary/sets/tests.tgz) = a0f6fcd15874d6439da5f852487e3539
-SHA1 (NetBSD-6.0/mmeye/binary/sets/text.tgz) = 59d1600b40b17a4c0459e6b3e0a0c2cff1194270
-SHA512 (NetBSD-6.0/mmeye/binary/sets/text.tgz) = 0c44d1c586ad834e2ecca5bf57e88d3315e19341deefb36e8f9584d22328fa255d9e7c26028091e8e0465aea5e68ead7fe343138f54cd219c69eaeb7facdf85f
-RMD160 (NetBSD-6.0/mmeye/binary/sets/text.tgz) = 258e107b924fc698dd9ac2933f4b040374cc9291
-MD5 (NetBSD-6.0/mmeye/binary/sets/text.tgz) = 241e3f6acd2a44f23f1368c4897ea43a
-SHA1 (NetBSD-6.0/mmeye/INSTALL.html) = 307db90e852c93274d4d475013aa29db682ad785
-SHA512 (NetBSD-6.0/mmeye/INSTALL.html) = 6a10441885d95313036134e897f41508c5823386532d4e57e33d693164d8a6a727f39aad44e3606b614cd037eed7096a2c88962b495f1915dd9db0f1165897dc
-RMD160 (NetBSD-6.0/mmeye/INSTALL.html) = efd26420ebc8e2bbca8e756d05a8978b3c8f6a21
-MD5 (NetBSD-6.0/mmeye/INSTALL.html) = 4074818595561d15e823f3fcf0e319ab
-SHA1 (NetBSD-6.0/mmeye/INSTALL.more) = 508b142e63e52558c975e9b9e8d3ddd5f392f47a
-SHA512 (NetBSD-6.0/mmeye/INSTALL.more) = da8142dcec08c7c1dd64b680e987abed58c6d8685c93c66fc4b1218f18cb64c626949d841b5ee379a09a0b8d1ae8af12a2690d8dbc4f768497f1c3e8e646f377
-RMD160 (NetBSD-6.0/mmeye/INSTALL.more) = 58a81c1cc83e5033ab3a527190e7ee1fae534d76
-MD5 (NetBSD-6.0/mmeye/INSTALL.more) = 248b67d9ac8e481bdfd7952cef78a14e
-SHA1 (NetBSD-6.0/mmeye/INSTALL.ps) = 4bf1609d1513b6e41cfc5cb480dee72432e5a416
-SHA512 (NetBSD-6.0/mmeye/INSTALL.ps) = 691a138a6af72a7e42cc03c71d6bcde5c210ec570507ee25333e1ef9702aa689be0c7d46009aea72dc1dbca93c52a46f1745c1dc985725fa5e63922c4f5927e2
-RMD160 (NetBSD-6.0/mmeye/INSTALL.ps) = 4387c8bab777418797ccf13a05abc4a085b28fab
-MD5 (NetBSD-6.0/mmeye/INSTALL.ps) = 98a48fdc04e24e9d6976363721d644aa
-SHA1 (NetBSD-6.0/mmeye/INSTALL.txt) = 75f5b090195d57c0542212c1b5eed5e5ccd3297e
-SHA512 (NetBSD-6.0/mmeye/INSTALL.txt) = 7c1310578154afee26aa66db4198dc5ba98b9f985f05c9e6a3847fe88e947e1161d541527dd1986ff3ca20ad92468483a2195013ccb8d16e89914006f1d0b566
-RMD160 (NetBSD-6.0/mmeye/INSTALL.txt) = e05dd82511b132d9047eddeee16043524246867b
-MD5 (NetBSD-6.0/mmeye/INSTALL.txt) = e3de50b8b8480113536fa86b62245902
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-GENERIC.gz) = a13aee658df1b52a7aaf3029d425e922ec26d4c1
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-GENERIC.gz) = 218d038a60dc542188f10c56e096434ebd26acddb4919ceb7ef4263ee85a3d25c60e9265683298fccfdcdb6b7d155138428f5029d37c11455d8f49077e0753cc
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-GENERIC.gz) = 5963381f5dff4d47bd58e488fdead7f9e4886d26
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-GENERIC.gz) = 86d45589986fb0bb05dc8c7dc77278a1
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME147.gz) = ea20eed9edbc71eca530c3280770e6f8b09fa270
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME147.gz) = 75a7255373b228b1932477a121111add15fa0ec8b03594794c6b6e3c45055f7ca2be29923b263ffab7ab51b3c9bebc9d8280ea701916b76f581dcc18bb510584
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME147.gz) = ea31d6a830019327b2c3435afdfd947d8464ef23
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME147.gz) = 15c5a42f970736283e7a6a0849bd86d4
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME162.gz) = 041755caacc323b08d0d4bc7d7d50fb178374f24
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME162.gz) = 0f9165f9574da412d25c74601c42f6678b78ae78c04b0eb0753dce9266289fb656071115c32425e79dbb88df2482971d3808095228ce56fa7124ba34a396b0d2
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME162.gz) = d93f72e9bf72b15a7f740977f51270620e17afe6
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME162.gz) = 0c35781afea5d9df108ffe2ff82563f9
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME167.gz) = 4ede6bb44a66a1ca0582e2bd6b38d94dc66e5c22
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME167.gz) = 33feb4ceaa5352e85ed445bb355d997181f69cfe2b08de57a631be7c93c85cb1f42d052bd6de489f6ac631c88c77192785d170e41c0ec6315b88fd429d88f3bf
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME167.gz) = 6768bab2219da0e3ef78324a701e0fb112c18153
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME167.gz) = 6e65873511ff8bb90d721f0c2e559bf4
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME172.gz) = 01ee771c809080dce253e2acbce1bcdfdd46b055
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME172.gz) = 65e0680d9ce92aed2ba08971a434f2a290ccf9f85ce3365327ec8185c5d57e1bdf08593c5ff18e3c0e6581c78ceadd570d25fb1e714edd7896fca09fae727695
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME172.gz) = 93136f2a9773f5e243622e756ea3969c3732403d
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME172.gz) = 08a73d99398505743b3de4f5394ffdd7
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME177.gz) = e884157c76ca076bd53f3c1752b4f95ade2eacea
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME177.gz) = 13a0a7e5c50848593ccbf5876cf27988b138582fff9d4f140cc3b63b9d768163ddea65752fd0676614ccbb85f64d0efdd3611ff2fce31837afb9acebcdb63657
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME177.gz) = 898154c89255fca36e0ec7051638b32cfb541dfd
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME177.gz) = 77d2383aa5faff6ecc139af1e7dc51fa
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/mvme68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mvme68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mvme68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-GENERIC.tgz) = b5f282108361e17368d9ca8615f3021473169abf
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-GENERIC.tgz) = 165bec66d47652cb43981780aa068960efd933f9538145f363a559d8cc58d16d78ae5d588d98bb39795cdde762f280b36750211da2ed3a5298b0d94edf2e0bb5
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-GENERIC.tgz) = 1ad2613634bf8c7654f87c4a54c9d3e6c0b1f349
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-GENERIC.tgz) = b4b8eee7f4f1854f8632928b5ee516de
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/base.tgz) = c3e2ce1f54481094d67ff2a87a6b5000d8130ad2
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/base.tgz) = 02c29cbe0171a6c5312fb1a468e68bb8a5a5258df936c0a31fccb7bc04c8e1293d41ce6f67de08ca5584c6208dd9050c70f99c1c3b8c35a499bf94a957808797
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/base.tgz) = 7920bf359b28e793c0410ce08a98025dd3ea6971
-MD5 (NetBSD-6.0/mvme68k/binary/sets/base.tgz) = c9893e324841703eed47b475c2d37607
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/comp.tgz) = 100d0663bb2c601df55d490315c9b36b7ea700f3
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/comp.tgz) = 70bf8fc817821c6c5061776bac0ee9ebf8567fd19a2d98c751d1073a706290eb9870627b2f1fea650d19a876e8a5215e5e52407437d6be977777013f5f59fa8a
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/comp.tgz) = 497fb5a993abc08f005e1f287b8520dbace84549
-MD5 (NetBSD-6.0/mvme68k/binary/sets/comp.tgz) = 24cf494b20e22c8630e6bbba17b96bc1
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/etc.tgz) = c6f1d70ad7bf234c79f4e15508b09c7b0c33f1d8
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/etc.tgz) = 13a8204695757c27b69ed52a02c55a1e2b2d6140a5dfffd8f9f24625a56c9f3bd1f5de868a99c265e5fc759cb80cb7239dbe965c44693fcce6e98e7691076d36
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/etc.tgz) = 7365dfc472b89a3b017cdcf41bf10f928dcf723e
-MD5 (NetBSD-6.0/mvme68k/binary/sets/etc.tgz) = 1e8812db12c38683ce12950d00ded70a
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME147.tgz) = 96374aa39856e13589e98f1552dd756b4f1911e9
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME147.tgz) = f31cc707ced4c96b2019d7d44169e203f6df2616d09e7a3f4e2a4f0e4c509e978ba324761bdd26d1ee443e4d72e90e00effc24e537644013d5a2de95f3812574
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME147.tgz) = 219ba053784c069875b7434631463f61293bab1c
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME147.tgz) = 5349b757ec12a84df1e102583674646d
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME162.tgz) = c56ed72a7c0da9fb44d19ece17801d1b7527e05a
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME162.tgz) = 12078cbbbd7b1093f956b6526643b446890b82c043b17fc97e61259f54fc81cdbd8ebc56a735eb5937bff004b63d7f291e7ea2cd0dad3bd5b07f089df2c83ab7
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME162.tgz) = cfddd4246205e867729907015fc6dd16da7fe6e5
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME162.tgz) = 432a04306d40c933f2e04e5a332800e2
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME167.tgz) = 90302a0bc14e084f2643de427e87bc5b04553ab0
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME167.tgz) = 62c19ad0fb282a427beb1bf2d0d1b9a1cfc2681bcd04e3fb51ade0e793f26b52d04b5eb28e4c25524244e8c6dad724fc07de7a6544438cbd2a503972999f23ea
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME167.tgz) = d84d45b735805261e014ae52746e279902ad7e9a
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME167.tgz) = 8d38010b19b455f324d0b08485482395
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME172.tgz) = 017724bf77e35e2021308dadafe5a90e59a32498
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME172.tgz) = c3ca75dd2287e6af935934a4dabba21f085889383c395c8c72636047d682541ee5669998dd5988e0127879d7b34df260dc9109c292a2c2663ca8cfbed9c03278
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME172.tgz) = d8676c3325db3b3f619599f9e7a33cf3b1eb5bf1
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME172.tgz) = b89cd9b71b5b68285bf36d958a3b8746
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME177.tgz) = f9bdc8e89488ba91385adf9f0960633ba7dbf6da
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME177.tgz) = 642825fa141d2de457a0d3eca1224cdb5b087383dca6ed4f36668be6f6fe9f9e30b942ec5eb177b4733aaad40f6a0eace0f744fba3777eb356dd75d8c113785f
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME177.tgz) = ef6abd72e2a71a5995c628107f473ceabe2945e6
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME177.tgz) = 42b79dd96c98e97639d1a9d698673996
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/modules.tgz) = 5479e9142d1f21bc8346cd34e9f00761e2e05f48
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/modules.tgz) = 094b2d20eb3dc973fc212085dcc4d110249fc71eb017ea390b7f9aeffd4d8d0aeb51d421b4c95add33a17ac5d7dae1e3c9fc654f8a4181d078dbe2bac95a96b6
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/modules.tgz) = 187b451690395a8e05f22294016a627e4db4539f
-MD5 (NetBSD-6.0/mvme68k/binary/sets/modules.tgz) = 5d3d2aa79488e5f8e90ff7b26f80fc97
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/tests.tgz) = b994ffc0b63206aa7a8ab6de392ec33189894764
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/tests.tgz) = 714ac7fe966021f842409c135711b7adfb03c4b6a095df9527d02d1b83b14db62f1ec1a7eaaaebc68e4f12588e52fab9318c21912f20b8380a7a8b8e30e8576d
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/tests.tgz) = ba3293225ace42d8c47037879ba0cecd8f883aaf
-MD5 (NetBSD-6.0/mvme68k/binary/sets/tests.tgz) = e32c51104c90b3b684d1d640ba79b46a
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/text.tgz) = 61b398a67c4c47f8633d393dda778ac5c1ed8698
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/text.tgz) = 29b9bb0c5aefb3d765eb6204967c3ff14f7a28b0987723c3685a2b34fa799947c876971bf524a8e43b146e9e91e37cbc89a0c4da87c47e9856bdf9d96a67f125
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/text.tgz) = a73c95546d018a1853c6d00f5924da860fe9e5d0
-MD5 (NetBSD-6.0/mvme68k/binary/sets/text.tgz) = b0dbc4ddc47ab74ab24bdc0bede769a2
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xbase.tgz) = a31e38ba081b5abb671cf5f7350799782a628712
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xbase.tgz) = fa78acfbace842e0995a7f181193220f80dcae731221bf1722ece1a5bef6de846089b919beebacd7921567105f8ddae9bdaaabe0b065b62a0f18d917f03b54d9
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xbase.tgz) = 1cb1d631feb356639d3b1362518ba5f09f084510
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xbase.tgz) = dae635ef3bd334e14be8b8b66a227353
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xcomp.tgz) = fbc80a68ccbef35cab4228a5ce96b22b383d9080
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xcomp.tgz) = 694780dd165f0831eac6b47ec6fd5c60589749a21e88700965a99154067b76fa374b8f7a55f26963cdba8caafe9548f66b222826cc265393e992addbf19dd468
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xcomp.tgz) = 7db19d8ccd7dbda6032d9c29a65d03bf9c71644d
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xcomp.tgz) = 913bbabb9e401d6a31cc09a3d259b132
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xetc.tgz) = 1aa27f8388f5bb0aa85eec00e225fc92736da214
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xetc.tgz) = 1b524f2137ea4cc5f816623a7b042b05b1303664d244b0172799b365cb16df34f0a8a47277077055baf266c7c92d5f112830ed357fa811bdf6bd713b2f90275e
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xetc.tgz) = b50ff4df41b13b9276393e871e976648d344ee7f
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xetc.tgz) = d7709463a7a8404b6ef93aeb60755f7f
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xfont.tgz) = 4f8d5c51bdd02bdff0dca66f54e5ebd25e4d6110
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xfont.tgz) = fbad852b3a697906a2ffb460f8fefe8f9aa9f2088f66423d838abc18941d497bf6f9491934de0e3359159d35c98f205b23bb9c328f832e7e62c99310067687e6
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xfont.tgz) = 41c3686ef9c2cc25eff4b9923ae3163aa9c28590
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xfont.tgz) = 2ec6dafe4dbe645a90960ade3e86caed
-SHA1 (NetBSD-6.0/mvme68k/installation/miniroot/miniroot.fs.gz) = 12df0f0fef9a077c27d02d2960d04ea3a148fa76
-SHA512 (NetBSD-6.0/mvme68k/installation/miniroot/miniroot.fs.gz) = fa3eeb4f14b741311ef72000e6c283195f4513e81a35f9c0a1829dbf8795d0518355b0d54d35a17c56568ac8e6db5977c1a7d4bb902c20786f901efd9b35ec42
-RMD160 (NetBSD-6.0/mvme68k/installation/miniroot/miniroot.fs.gz) = aeeeee1a475c8ef1d595c5cdff5bb3cc765bbea1
-MD5 (NetBSD-6.0/mvme68k/installation/miniroot/miniroot.fs.gz) = 9bff82e8d2d57a3fad2e831272aee965
-SHA1 (NetBSD-6.0/mvme68k/installation/netboot/netboot) = 588e8808e6e24e0a570f529c0dde8f02bcb74edd
-SHA512 (NetBSD-6.0/mvme68k/installation/netboot/netboot) = 6e0b6bc3f5de5940811d0929dd0d5f65351402176ae9c8e44a0220b807b41e98c8363d4917b1f506a847c3510bfec3d78584eae8f9e1c337130b37da4d3c6f07
-RMD160 (NetBSD-6.0/mvme68k/installation/netboot/netboot) = f1239616c5743fba614065450b1aa9ca8f4057f5
-MD5 (NetBSD-6.0/mvme68k/installation/netboot/netboot) = ee5d8acc83e9f62ee902acd1da69b3d5
-SHA1 (NetBSD-6.0/mvme68k/installation/netboot/sboot) = 5f45e50e16e46d9ab20ad20d929d1a01e4d60ad5
-SHA512 (NetBSD-6.0/mvme68k/installation/netboot/sboot) = bcd667220dd50d44aa895c0d76b9ee906dd6e3ff72d9bb80167cf48ddb6456c5cb8c06829e66ee06cf69c99e50afa3005f23a6854fc56ea2a027b50315eace2c
-RMD160 (NetBSD-6.0/mvme68k/installation/netboot/sboot) = eee81405c2dd838804a4d13219b431e93120fdae
-MD5 (NetBSD-6.0/mvme68k/installation/netboot/sboot) = bd2f963054643f0ffa22af1ea8ecda92
-SHA1 (NetBSD-6.0/mvme68k/installation/tapeimage/bootst) = df842ee6dc97b75a8f8b8e20996f60fa5c0e6ff9
-SHA512 (NetBSD-6.0/mvme68k/installation/tapeimage/bootst) = 3a6900acfffe7118e262864abea6c325e1e69060f2b47556b8865f2f28458beb29e56d96a61a8b98520530ba3d6b5ee4e0d5499cc698497445e0d480d0b9466b
-RMD160 (NetBSD-6.0/mvme68k/installation/tapeimage/bootst) = 78ea882ed8fd3cadb3b25971c7d0ad2ef159918b
-MD5 (NetBSD-6.0/mvme68k/installation/tapeimage/bootst) = 720e708780805b3a7afa57bcdb9ee62b
-SHA1 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.symbols.gz) = 0c590bfc2ae0c74a96ac421e16e9f6aea312d63f
-SHA512 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.symbols.gz) = 1f91be15380c61c4b2eebc8e34fb6eba768dc06fe958ba03cd1a074ef76e77c490d63484834b458bef181f18a5dd84444dcb33b4ed1b35360f7df9ab727a5088
-RMD160 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.symbols.gz) = 49fe1be9202c415a147b25ca21b57c4e91f3d886
-MD5 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.symbols.gz) = 387b741997770fa953dd689bdc7c2dce
-SHA1 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.gz) = 071feb6189682ed7fde6e75790b17ed023512e15
-SHA512 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.gz) = 029ef207dc80563c3d28369d7f6b1a99dae4ca573dccae9983bf3d135cbef8aece9d69a8fafe0c989bf5fc851d5a31d61c77911f7680dc4584a9229f582359f5
-RMD160 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.gz) = 6ca56e2be45d06a300f533941a582caafcbe5623
-MD5 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.gz) = 16c9e88acf91351f83fcec78132304bd
-SHA1 (NetBSD-6.0/mvme68k/installation/tapeimage/stboot) = 652f8b35ed92540699c4a0b92d781bab584ff9ed
-SHA512 (NetBSD-6.0/mvme68k/installation/tapeimage/stboot) = 63627858e9ea5ddf22d56e9f5bbc94c53a5fa45eb877b7b540931eaee973bf82251afaf6acf6078456f9aec047eb60b7bd66e694bafaa2210b51b0e83e19fd21
-RMD160 (NetBSD-6.0/mvme68k/installation/tapeimage/stboot) = 1283f83860ab4f66692d5ef01d0cdeceb40668b8
-MD5 (NetBSD-6.0/mvme68k/installation/tapeimage/stboot) = a54cfad8cf02a1a31a004dbc5c0a037e
-SHA1 (NetBSD-6.0/mvme68k/INSTALL.html) = e3f98f5f338b9417a3f88ccc83fda9eb47696c0e
-SHA512 (NetBSD-6.0/mvme68k/INSTALL.html) = b1750f826b36c84a821126455bdba2e1116bd51cd3b404c7b0c0b80110130e81e19105cd5d04563d31824e996820e1992486827b818f3f9a01d87f2b2d4da46b
-RMD160 (NetBSD-6.0/mvme68k/INSTALL.html) = d6ab4cf012544dae8696f8f41208dd27ddc1ea7b
-MD5 (NetBSD-6.0/mvme68k/INSTALL.html) = cd685f3e5b2052919547bfd9c8d98d0e
-SHA1 (NetBSD-6.0/mvme68k/INSTALL.more) = 82746f9fb96a2db4cec433f8bad448fccaa98eef
-SHA512 (NetBSD-6.0/mvme68k/INSTALL.more) = 676952c9168c0dcaea1eef58271884f95e8ad80380e33a060e29be2da7e7b139a731369e6cc0a112779be95c412de4be19f716284a3724b41f93cc5075e93b9d
-RMD160 (NetBSD-6.0/mvme68k/INSTALL.more) = 79436013f39135308106f0d08b8a0fc951773a09
-MD5 (NetBSD-6.0/mvme68k/INSTALL.more) = 95f12215d3961d47f7cc70f786c331da
-SHA1 (NetBSD-6.0/mvme68k/INSTALL.ps) = b2c39b95dd800c754733c8986e8f279a5895b9f9
-SHA512 (NetBSD-6.0/mvme68k/INSTALL.ps) = 120009d7f5781b9c060f3852d92bc047590b3d86d6491aa700c61d935ce8bccec1ddcca64f60fe17ffffa66871ec9c9908d42b738f8e37def53c97ac3a339c6a
-RMD160 (NetBSD-6.0/mvme68k/INSTALL.ps) = 1cc7939281b187b32afa1a30955dfc3751d8dc4b
-MD5 (NetBSD-6.0/mvme68k/INSTALL.ps) = b0c09fe08cf758e2dea14a23111c0c2f
-SHA1 (NetBSD-6.0/mvme68k/INSTALL.txt) = d25191ccd7930c3335bacbc56dfcbfd7ab04091d
-SHA512 (NetBSD-6.0/mvme68k/INSTALL.txt) = 581736f1c9236b74a0321e060d27305911aa735244a5b2e54825617cd97fa5bc1523472b87b65057fb3bc0f08216c7b53e60dca0c8ead238d7ea3da16502f16a
-RMD160 (NetBSD-6.0/mvme68k/INSTALL.txt) = 05b193bfebc12030dcbe3c96273582360eb132e3
-MD5 (NetBSD-6.0/mvme68k/INSTALL.txt) = c895e463555bd32f7b61fa481b63213d
-SHA1 (NetBSD-6.0/mvmeppc/binary/kernel/netbsd-GENERIC.gz) = 418f7d15770b902578623141540daa7987ed2659
-SHA512 (NetBSD-6.0/mvmeppc/binary/kernel/netbsd-GENERIC.gz) = f8ad97d747d2ffc1de7408ae9360afe25fb82eb60f73fc62198432ecb059aa64dfdc7ed74fc0d63e70a815d12414c6c9f1d8e5a717d614bafa0c9c299548ab9a
-RMD160 (NetBSD-6.0/mvmeppc/binary/kernel/netbsd-GENERIC.gz) = e3603ef7455506046e4f789e2341020d81bfb46b
-MD5 (NetBSD-6.0/mvmeppc/binary/kernel/netbsd-GENERIC.gz) = 713e8e8d42cebf7dea0ae4e96670a52a
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/kern-GENERIC.tgz) = cb6794f87c6c90ffe561a49bb2b3b48a5dacb40a
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/kern-GENERIC.tgz) = 6ee4daa27b1f69c1df2bcfb09ba9efd43a3ffd07e7de964e8f6a59ab46e0f36681a410527be024a58dff6f2efcb8f7a5af5da857fc36cca6d6bb8b71a3fd7c4e
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/kern-GENERIC.tgz) = 809b466fff3437d0e9ef68e9380b08145900b9cb
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/kern-GENERIC.tgz) = 21a47714184c5a998e528ceac6d8acb3
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/base.tgz) = cd5e92a746545a809e765ded7acbaac7de15f633
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/base.tgz) = ae16a9e58ccadf19e57966b608b0230cdeb066f65997cf36749dd72597ad80741f9a5a8f6f9b49e7ff42fe071c07fbdcc237e076ffd7a9fc4cfe94e9aecae6ef
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/base.tgz) = e8ce9e46b09fea354214094c65f085f963f9fabb
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/base.tgz) = 3480b07c4c07ba28b82c27eb4e566b9b
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/comp.tgz) = f8a50dda9bf86a613d543daad62ea5aeb0455af8
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/comp.tgz) = 5a042383539c5fa72acca742a572cc185f28e2e82f9b0a05af00a57ba3ef220272f4221718cb05322b6010236af0a29254afb0e7716a7bc1543a72bdb7ab2990
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/comp.tgz) = e13123ebdbe098433cfe3c82ff350ccf23206004
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/comp.tgz) = 93a0b66d03af7b52d9e2394c7fcc93b4
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/etc.tgz) = 7295ed78597062a35a244940465c2148ba96ccb1
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/etc.tgz) = 28ab60b5de702a8c4369ef7a04fd88d92a33eb79c3537c7593f1e2c3b16aecfdfb03582daa36dc97d1ab147d0a217a0354906475dae397970b991e39d88905b1
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/etc.tgz) = 814c4c6297cc41c8961e92e042c1ceea8d0f7bf5
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/etc.tgz) = 9b00467e487f1dc4c8e6e520f531e48b
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/modules.tgz) = 07df9e6517dc7ab1f7b4d89e4c69a0f6ed5e2551
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/modules.tgz) = bdb4958d494d5cb163ab0c77759fcf2c7c826e4f026d25fd156a19c44dd337064b604d9e5fcfd2bf60140be482cdfce94ce6d382911b813291ba2bf5a0c424cc
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/modules.tgz) = 43473d4d0defd1cff47ee9f1874161538a4b82ac
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/modules.tgz) = b73307a25c9030b40171a0360293a564
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/tests.tgz) = 9b7fcd1db26e218ce61b5325966cbc8fdf647ec7
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/tests.tgz) = c18be2b0c91b327f620d40c6ee7890dbff28fb4a431f2fec6a870c7542e08a0545c256547371cb2039a8707ae5d5d0a5b876ab209f7ea4f2ec66e4d5f676f05b
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/tests.tgz) = 78c4ec64a4a643c239af74a89cc617bd5e959fa2
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/tests.tgz) = d6e2627f54fc989e87ba95e4243e933e
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/text.tgz) = 0ef97a5332a5c76de8329dd7dd9d97fe8528a83b
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/text.tgz) = b75d8259b2a0886380f796340d08c4f56ab60002e02c04b09665e87e14eed8cddd86ae483c12e236e7589291f579a516dd049be349fd3af7c63f245cd8ddc0a4
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/text.tgz) = eaad1bf719adc5b5e1645c5fc77be97c1c946ddf
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/text.tgz) = 22b500a7593d8b412fc9c000558444a3
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xetc.tgz) = 98938e35cc38b7007b05b049e42e888ec0a93860
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xetc.tgz) = 0e9027a638278b6102fab31d408f258e8798bfffc6400e99b434656b81bf13053605caa8c3e8d0744685d359261fd8576c267f5eeb987da4c3a054aaf17bb993
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xetc.tgz) = f71d30b8062059ead3243e21c732ebca57eb117d
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xetc.tgz) = e09a8d3ed7015c6b274ef5a025041fa2
-SHA1 (NetBSD-6.0/netwinder/binary/kernel/netbsd-GENERIC.gz) = e5f0ce4b52ffef57f8ecc29a7c26ddb9181a5c59
-SHA512 (NetBSD-6.0/netwinder/binary/kernel/netbsd-GENERIC.gz) = e1d81a5be8964559be0b23b0d6a4ca22f95dac64abf4a1ebc7912cbab18f47ee31ab954d85155feb750926267b7b886c1eead88223b16a4c4a363f8286d5110a
-RMD160 (NetBSD-6.0/netwinder/binary/kernel/netbsd-GENERIC.gz) = e270203b95b8a0f7736779454b07957e20ccdbbf
-MD5 (NetBSD-6.0/netwinder/binary/kernel/netbsd-GENERIC.gz) = 18ec5abd22e842bdc99a66e283e07231
-SHA1 (NetBSD-6.0/netwinder/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/netwinder/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/netwinder/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/netwinder/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/netwinder/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/netwinder/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/netwinder/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/netwinder/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/netwinder/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/netwinder/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/netwinder/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/netwinder/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/netwinder/binary/sets/kern-GENERIC.tgz) = 3f337b136bc35343128f53eabc787cf5a5a5a6a4
-SHA512 (NetBSD-6.0/netwinder/binary/sets/kern-GENERIC.tgz) = 2243a1cbdf776e683d5cb32b411adddd35e137dec2bea0e9a2d9df17972a8ebea0302328171c8fdd06da240689991c623b07a953cb8e374ace3607c0bbb6c5f7
-RMD160 (NetBSD-6.0/netwinder/binary/sets/kern-GENERIC.tgz) = bb3ef1387ed7dcee67af89f3662f2eb39a23ee7b
-MD5 (NetBSD-6.0/netwinder/binary/sets/kern-GENERIC.tgz) = b370234d8f18c218bc78739602325c44
-SHA1 (NetBSD-6.0/netwinder/binary/sets/base.tgz) = feddaeaf51113aca08fb9dd5689745efcd3ea178
-SHA512 (NetBSD-6.0/netwinder/binary/sets/base.tgz) = 1fc5531cf2b47451e0eff63df4222a4e88f7f0112d4f0b2e43009b39dd98a0550f015833d22fb0d7c0ffa9b699944fb72283715f51e5bdae97d263e167b787b4
-RMD160 (NetBSD-6.0/netwinder/binary/sets/base.tgz) = 4e1e7dcd563d7e68d0cfa8824cfa25bffd17187b
-MD5 (NetBSD-6.0/netwinder/binary/sets/base.tgz) = b5f660d9a7fe6f6fa951a3a7c3c0f6a5
-SHA1 (NetBSD-6.0/netwinder/binary/sets/comp.tgz) = 06b1e34718e894be491327ee15f5464e91aaac32
-SHA512 (NetBSD-6.0/netwinder/binary/sets/comp.tgz) = 3f6ea371d7852951a374855e3ed4396b683b752aabe0d47e0e6b1d7243b9468023ec6893076a6d77861ccc6f8ff74957bdb4675adc878fcfa620dda04f13d02b
-RMD160 (NetBSD-6.0/netwinder/binary/sets/comp.tgz) = 21fb07ace630d66e088ca8fba7f3de545bf75b0c
-MD5 (NetBSD-6.0/netwinder/binary/sets/comp.tgz) = 0b21dce21957ca73da5de9ebbeb3a157
-SHA1 (NetBSD-6.0/netwinder/binary/sets/etc.tgz) = 6eb3f0d4ee4b86c87bd03cc4f93958a42e9079f3
-SHA512 (NetBSD-6.0/netwinder/binary/sets/etc.tgz) = 2de4303f21bd502d062486b8789198bbf3e7f5068888d62d4da08e5e51d58f42ede6ea13c8a83bfbc9d0cc64cc6e11d3f2e949a3c2ad800aa78680d4046aa7d1
-RMD160 (NetBSD-6.0/netwinder/binary/sets/etc.tgz) = 3a77fb3f3a4ea25db5b8b450274bade4192541c8
-MD5 (NetBSD-6.0/netwinder/binary/sets/etc.tgz) = f57f45618396a67a169ab7c0e74be2d5
-SHA1 (NetBSD-6.0/netwinder/binary/sets/modules.tgz) = 780745396f7dee2fcce36e4c401f9462ee620e55
-SHA512 (NetBSD-6.0/netwinder/binary/sets/modules.tgz) = 9e4ffad337fd2e30a157ec7ade8f868043addcc2e8020a950cfd8e515d17bccae185b04ff15dfccebce764c1e0a8f1f722bac33e385ae294700dac0b0c3a5792
-RMD160 (NetBSD-6.0/netwinder/binary/sets/modules.tgz) = af686e341bf03f36fc43b5bfa86015e3204803f9
-MD5 (NetBSD-6.0/netwinder/binary/sets/modules.tgz) = eb5745d3d6289ded145654a58bf4a9e0
-SHA1 (NetBSD-6.0/netwinder/binary/sets/tests.tgz) = 46a999d0afcee9103c765b57765971557cffb18d
-SHA512 (NetBSD-6.0/netwinder/binary/sets/tests.tgz) = 0937f49f33fd690da609dff62adf04978e1ca36e61e3357e360e3ca622e406758a12e5909fa0aa431f914eb145625cc7dc3dc1caf09bf2793feec7db45cba00a
-RMD160 (NetBSD-6.0/netwinder/binary/sets/tests.tgz) = 7d070858cc4bdbbee9bd6568acf73cc9b70147b0
-MD5 (NetBSD-6.0/netwinder/binary/sets/tests.tgz) = 879591282409cebe2b0c397f9c05f417
-SHA1 (NetBSD-6.0/netwinder/binary/sets/text.tgz) = bc73c2b37be55d902c10db2244412f884dcb2c49
-SHA512 (NetBSD-6.0/netwinder/binary/sets/text.tgz) = cbf470fcdd95eb9bf94d5296d7d728eb537a243ed03448e134e56c6714c6528968d217c69e3ac830045f2b8b5c8c4df451fd24ff2b5b176d37fcd84ca1f07f92
-RMD160 (NetBSD-6.0/netwinder/binary/sets/text.tgz) = 00aeff72db0b05b48fa40bf80b1e24c5a667fd0f
-MD5 (NetBSD-6.0/netwinder/binary/sets/text.tgz) = 42470e4348951037fd056476c26dbb77
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xbase.tgz) = 66d3e62a116c56bfaac8ee3257ba675a845b9ab3
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xbase.tgz) = bfc8c00cfc6bf2fcb3d26ff9abb9e6091c5389aeac5370ae475b3c74569e3ccf05494e363544d6c805820e2c7554a1fea936abab6e3212dd4710e2463625006a
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xbase.tgz) = 26ff99801c9a84190cca4292c137c17305bec08c
-MD5 (NetBSD-6.0/netwinder/binary/sets/xbase.tgz) = 532381165745c160613ef72bcd7e7848
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xcomp.tgz) = 0eed09b5c7a6e8d76c99ddaa31029f414a14d6bd
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xcomp.tgz) = b03064377958f9ca9252e83d2933574a5f0fedc89ac864641340f8e50a6d5fa1a074d45a80f0dcb1567ef7d23eb2bc4bec3de866c2d07912ab4122acaf062c35
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xcomp.tgz) = f7a208a7ac2137d4940ec2f78c0658e630ea329e
-MD5 (NetBSD-6.0/netwinder/binary/sets/xcomp.tgz) = fa248543b87b553473cc67fd45e385ae
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xetc.tgz) = 4e2fdc95511cd90317da41fb941f7ec6f622b84e
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xetc.tgz) = 57a60f983fadbdb0a0ef5720c2bda405d4052d460f67976e71a34ad016d25357cd04fbdf48e866c3641dcabc55194a683931a0b36c7f55549a7998c31e42ef88
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xetc.tgz) = fef501d07dce370292072f65ed25dd32df41bfcb
-MD5 (NetBSD-6.0/netwinder/binary/sets/xetc.tgz) = efdbfcb8e6fbf0c4cb2094e749c54b1a
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xfont.tgz) = b92ebefbcc4a96bdbba5540df3119bed0ee2efdf
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xfont.tgz) = 605e099b75b0133d811b12387461856bcf7ef7cc0dddc68490eb6ef51ba284ac2edafcc757feb0665618b119eacd2509c302f42736eb0d582ab7f17f5fdb1b23
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xfont.tgz) = 084a5e8e5f95debf53ba5be9e52230fe72dbb2d0
-MD5 (NetBSD-6.0/netwinder/binary/sets/xfont.tgz) = 02b5344f23cdb9eb4d9cbe8b30c7707e
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xserver.tgz) = 570bbfb56fda998c07f8414731eaf79af5b01bd1
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xserver.tgz) = b70eccc78ca3e290869502760fcc8a8378db3d49c402f075e2f12e1453a7fbb68911df18993c0966ce840b837225d577344ec7088d2aea5eac78130e9dcce0ec
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xserver.tgz) = 5b7c5740805aebc0ea76f778b429803b25cf9128
-MD5 (NetBSD-6.0/netwinder/binary/sets/xserver.tgz) = d866ffe531725f8c18bd3f88129d09db
-SHA1 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC_TINY.gz) = c260c1b8e7017de3a9c7383ebad6833c172b745c
-SHA512 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC_TINY.gz) = da338bee7bcaf58401ea3fa629c91fc5732016581d869f2bb8897f252c90e296773eaf35dae48667a753e7119340ac376fff713f3f87e25802fb3874879fcc65
-RMD160 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC_TINY.gz) = 25e70f61645eea330feda79fa0e6302bedeecdc3
-MD5 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC_TINY.gz) = df5ca7bb950327f08e460757a4b03de4
-SHA1 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC.gz) = 96c08009db46bd9bf3e0b1b0b8ea6b96b7772396
-SHA512 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC.gz) = 635ef8e6ee4c767afba768a982f587d6040afeb15585be8a8fcfd44e75bcd9031f8965f1bef2b7fdb955b81b2e09f0dc6a51618b48827898763cd75310669a6b
-RMD160 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC.gz) = b9a864c14cc967d2336473c2c2c19eeeefa5b3ec
-MD5 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC.gz) = 76b1a1ad9865766e5d7b1ceb1d374f26
-SHA1 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 620ddb95366fb58c53d115681a205d73fb79bf02
-SHA512 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 4eb494f02f39ee17205b28f07993fd1c9bbb872f2617aacdb173f9b458603fe284dedcde279eb0b9ffe083b01f485dc04963ec09117c31927e3e97a9b5441f6f
-RMD160 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 3456f6c84edd59e0e1db531ec40b838fdd076d14
-MD5 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 0898606b528a29a5c2c754d365e1fb22
-SHA1 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.gz) = 76b25bf6b038d7c48a55bf1f1df350717707af3f
-SHA512 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.gz) = 7aadf02eb4862fc3cf8a0099673414092e8a113e59dfcfda713e430422cc8f03fd4a711ec767b10905ac5feeb6823054e372da6da4f19e15c595712a75dff046
-RMD160 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.gz) = 4e01f28fc0dd67b8a2b16ac61c27adf4ec83c7e7
-MD5 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.gz) = 7ecaba69661efb53aea818bfc0df2870
-SHA1 (NetBSD-6.0/news68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/news68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/news68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/news68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/news68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/news68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/news68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/news68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/news68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/news68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/news68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/news68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/news68k/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/news68k/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/news68k/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/news68k/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC.tgz) = 6d14a82918f258c781499c87f7ef23fca3c85c68
-SHA512 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC.tgz) = ed399e3bab46335dc4d2bb1f2971692d8a1d8aa22c4196bb340e005c951a3941517d64de8be8c8047a60de791ae934197b38fe02706bcde080f4062a5ffbf431
-RMD160 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC.tgz) = 74c42f841cfb865522b4eda052f46a7b13e491d0
-MD5 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC.tgz) = 6ac0ec8267f457a0d94feba55a094773
-SHA1 (NetBSD-6.0/news68k/binary/sets/base.tgz) = 14763cf9124eb67c9440727bf0559d98d9aa4765
-SHA512 (NetBSD-6.0/news68k/binary/sets/base.tgz) = 24bf851943de08a6e5cb869a69d8d4350f6d6c64988741dbb8691afb927fa8ccb922a7e608da48ef52913796c0e6172c8302b22248c64ce576446d26f26add71
-RMD160 (NetBSD-6.0/news68k/binary/sets/base.tgz) = fc4ad357c41d200d8e12444d1f4e13956521a4d5
-MD5 (NetBSD-6.0/news68k/binary/sets/base.tgz) = 5401468976f41209a9a28889d85f52be
-SHA1 (NetBSD-6.0/news68k/binary/sets/comp.tgz) = 6b20fee4bcb085b5b09893416ce5eee6a96ca5bd
-SHA512 (NetBSD-6.0/news68k/binary/sets/comp.tgz) = 3550045bb700ea29604590e25cd9e6305459476a837f67b4d746e62ce0facc8218aca1d03f2dd570e2590802f32079e438ad4e977a96f9a8939dd986d725d898
-RMD160 (NetBSD-6.0/news68k/binary/sets/comp.tgz) = 85fb356111807dbc811b8fe2fb3d294e4544b358
-MD5 (NetBSD-6.0/news68k/binary/sets/comp.tgz) = 223302daf2a8f7f52863763374438b3e
-SHA1 (NetBSD-6.0/news68k/binary/sets/etc.tgz) = 575f76fc225f509cec73dbc1e6a213d4370c221f
-SHA512 (NetBSD-6.0/news68k/binary/sets/etc.tgz) = 4705c91993153a30b1bf6bab9f1d0b75d9bc29ccbd698d26c44ae70fadeb4a8390298eb1e0e590f0da62748d9429e8e5927558a31d2efe0ef068a9ca353681b4
-RMD160 (NetBSD-6.0/news68k/binary/sets/etc.tgz) = 7ce6e09c062f61b659f2c16138516b3629c010bf
-MD5 (NetBSD-6.0/news68k/binary/sets/etc.tgz) = 234be1ba6587866294eb09b75439840b
-SHA1 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC_TINY.tgz) = 119015b6a9a67300144e248352a3842857ba86e9
-SHA512 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC_TINY.tgz) = 2eecd5ff4fd2a1ca0edc61ff92c804f5202ffedc5b6e74c5c0be372f74cf533e4b4f1b6a69625a155a33661185e1a56943947ab1c98fa8b4dc3892526781950a
-RMD160 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC_TINY.tgz) = 5477d4127ff479fa19aa58a3de57bbd3a4cc0b90
-MD5 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC_TINY.tgz) = fd4f85a1589e4907b314ae996b3aa08a
-SHA1 (NetBSD-6.0/news68k/binary/sets/modules.tgz) = 1885df3fb4ea56feab816bd8dc5e0dc08fae234b
-SHA512 (NetBSD-6.0/news68k/binary/sets/modules.tgz) = beeb1e94ef6f34b7525c0c2de9bfe9927aa443bfdc5be8c4a5546a27483c0ca45006d3f546d93bc0036f25804e7827ea1b8fd943e7642bc73c4b6c75710362ed
-RMD160 (NetBSD-6.0/news68k/binary/sets/modules.tgz) = e3ed23f75e48c70efbdf3b5ec9c28ec41886d878
-MD5 (NetBSD-6.0/news68k/binary/sets/modules.tgz) = e4db103ff1b7f68a57e8fe813b2b8d3c
-SHA1 (NetBSD-6.0/news68k/binary/sets/tests.tgz) = 984686c1f0ad93ff8200e810482527b87bad3de3
-SHA512 (NetBSD-6.0/news68k/binary/sets/tests.tgz) = 508704556a3bc66c9f5f88a6377d34d81edf9aaace78a4496c550021dd5a88c2ff85d5663ff2aa42c4e7a74721249b2dddabd50bf597572b016794c42d22a622
-RMD160 (NetBSD-6.0/news68k/binary/sets/tests.tgz) = 06cb486210f5e4ef2ec33d863cf995780caa24df
-MD5 (NetBSD-6.0/news68k/binary/sets/tests.tgz) = 60053afffd0ad1c95c2654ce6a991d21
-SHA1 (NetBSD-6.0/news68k/binary/sets/text.tgz) = edd7603519c0dbdddbe9b9c8d9ddf066d62ee617
-SHA512 (NetBSD-6.0/news68k/binary/sets/text.tgz) = b5c7ca241708d02df4df5a6bf43b6329cdb063a922bdf23955b3807cf813d10718cdd1a7a4c3167e0869d5f8f0a742ee275951a72fa2cbfbd32a0afa37d3e49e
-RMD160 (NetBSD-6.0/news68k/binary/sets/text.tgz) = c54012faa763171bbd263ba23d4d2495e7cf2762
-MD5 (NetBSD-6.0/news68k/binary/sets/text.tgz) = 2088a3dfd39fd763db42fe375a460a3e
-SHA1 (NetBSD-6.0/news68k/binary/sets/xbase.tgz) = 9b8940f65ca6a841b84406a22a13971665edc464
-SHA512 (NetBSD-6.0/news68k/binary/sets/xbase.tgz) = 4a7d78ad9cf1b84c183fc731bac2fce861f94bc26c7a1681ab1d62a9b761ba89538469688b24588f6c671503a1b66a1e521c2eeef2fd528d21dc0351272e56e8
-RMD160 (NetBSD-6.0/news68k/binary/sets/xbase.tgz) = 85735e089a6ac5293e7438a609dd11105cd4eb25
-MD5 (NetBSD-6.0/news68k/binary/sets/xbase.tgz) = b6f52c8fde2fb1a5372a12d2f321e9c5
-SHA1 (NetBSD-6.0/news68k/binary/sets/xcomp.tgz) = 63a79437c028936698509a386963708082356d29
-SHA512 (NetBSD-6.0/news68k/binary/sets/xcomp.tgz) = 25791832de667b9a44f341f7267f09aaa6b9a4216452ceaab8b56dc6ea5fca3be2da53868b624f47a275edf19ada59dfed40e355e2ff1f62ab96bb54448c1e00
-RMD160 (NetBSD-6.0/news68k/binary/sets/xcomp.tgz) = e681ae34bd83be8dbb6945cef3a129bc1538b66a
-MD5 (NetBSD-6.0/news68k/binary/sets/xcomp.tgz) = c87752020f2ad29a80262eae4bbeaece
-SHA1 (NetBSD-6.0/news68k/binary/sets/xetc.tgz) = 76661bc6d6851cb2ae57f3a7f25f816a33360a2b
-SHA512 (NetBSD-6.0/news68k/binary/sets/xetc.tgz) = a1994fbd97492275e9128c5fc764dc7cf5539bee26bb9d13d9f3fcc14429858e794ed8a10554570c4f70b87714f8b0ab23269ebbaf44d4fb95d0901dcc28fe81
-RMD160 (NetBSD-6.0/news68k/binary/sets/xetc.tgz) = f9f8fc83764439a533110c614e1ef19ffe98361a
-MD5 (NetBSD-6.0/news68k/binary/sets/xetc.tgz) = ab945fe1f43ea47433a047babda53a81
-SHA1 (NetBSD-6.0/news68k/binary/sets/xfont.tgz) = 4403bc158b92ded3d27646c6c0858aa6c117cb8d
-SHA512 (NetBSD-6.0/news68k/binary/sets/xfont.tgz) = 79e31eee0397803ec17a9413b50a5d501fbc3515e4080a0e9e053498c64557809cddfd5718f131d3c451a231c4a38ff4f40b50ef401af5c204a68b61df8f8ba7
-RMD160 (NetBSD-6.0/news68k/binary/sets/xfont.tgz) = b7e19b89a1f67382428aeaf248710dade3b0672e
-MD5 (NetBSD-6.0/news68k/binary/sets/xfont.tgz) = 8a1f532d7a481f797deb226b66d15ceb
-SHA1 (NetBSD-6.0/news68k/installation/floppy/boot.fs) = baea772f5bf7116b8c489a2e75f77c98e308ac5f
-SHA512 (NetBSD-6.0/news68k/installation/floppy/boot.fs) = be4dbd6dc24f56ac71f96d60b8ed0e6b4f725bae2b9d39ef1b9e5ea5fe71053f5fea04979676ff13a50685bcbce539bbc93631408c56d29a2924c79370ded347
-RMD160 (NetBSD-6.0/news68k/installation/floppy/boot.fs) = ff9f3a85babe4d597e2ccb4a864eb0c611a7894f
-MD5 (NetBSD-6.0/news68k/installation/floppy/boot.fs) = 98f566671f6dd720fb61e8c657bd93e8
-SHA1 (NetBSD-6.0/news68k/INSTALL.html) = 8d9ab316296bfbb751b0a05557f4648ff2990af0
-SHA512 (NetBSD-6.0/news68k/INSTALL.html) = 5916c04ef717b2e47ee36f93a1e3a43a27215b5c688b36520e0f160bda3816d6e4645e2e9e922d564260e8b8a60e46da67fbd3b443832032a66e76153596c4eb
-RMD160 (NetBSD-6.0/news68k/INSTALL.html) = a07fa866614d3f5ecfb5642eeb354b6b9c675318
-MD5 (NetBSD-6.0/news68k/INSTALL.html) = 89f43b16d907873c28b8b7b6ab8cb4a9
-SHA1 (NetBSD-6.0/news68k/INSTALL.more) = db7d9b68680f5c20b525bf253e342f2775d04a71
-SHA512 (NetBSD-6.0/news68k/INSTALL.more) = ab50b18effb102ac017c0cad2c054dffe8ccec3876ff9cc6a0353762b5a2b11651296f05b3cf3da76cbb10a4561bc529b5cf113141c742a96fdb73a5358e129c
-RMD160 (NetBSD-6.0/news68k/INSTALL.more) = d6aacc53d5c3384704e2ff1f64a4eb9fd474effe
-MD5 (NetBSD-6.0/news68k/INSTALL.more) = 4c22b00a52d8ad3cdb12f66d23a069a9
-SHA1 (NetBSD-6.0/news68k/INSTALL.ps) = 021d67431fbc7f9fd378e496c25c28097b72af46
-SHA512 (NetBSD-6.0/news68k/INSTALL.ps) = 224e78f8ddc0149a710511083c55a69e1eb2f37089ad15ce1fbc1c07733055eb5b34ad4c32b2803d1f3050b1c5a038ef1d429af780c0a57c8a4b41fde8d10413
-RMD160 (NetBSD-6.0/news68k/INSTALL.ps) = 86b953fd3860caadf7a681e0d75486cb2ac453d2
-MD5 (NetBSD-6.0/news68k/INSTALL.ps) = 4f2098f135e2d4f945dd6365a55b7bc2
-SHA1 (NetBSD-6.0/news68k/INSTALL.txt) = 1491600e777e5a7a96cc05a7fc5a0ab0edf2072f
-SHA512 (NetBSD-6.0/news68k/INSTALL.txt) = 0552976751403a424febde147bdbf34b7e589c0f27225072c9691e30f630e1f49be93c9e75ebbc7d0c6d06ab78419506d4c4313059023e9ae13dbd8d1f5c4445
-RMD160 (NetBSD-6.0/news68k/INSTALL.txt) = 2c6df35393c4ee9d9fb7dcb58002f996c587c32a
-MD5 (NetBSD-6.0/news68k/INSTALL.txt) = 9cff69046f721931b5b5ef4bd511d12c
-SHA1 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.symbols.gz) = 0e0add1125bb456d3210efa5035169e1bd7ae98a
-SHA512 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.symbols.gz) = 138e28fb744019ee2e89cb8ef1f3e23b5fd296b2f8c12a26245cef11aef9540f12eb2c180e5847d047d74d593e62916694c7f031fda0e3477e42ecdb79da7510
-RMD160 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.symbols.gz) = 4ee95362c6f9e38a32cd9e0fe36cdc3aadb91291
-MD5 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.symbols.gz) = 0d8837629ba02a89e50b6764649d03a2
-SHA1 (NetBSD-6.0/newsmips/binary/kernel/netbsd-GENERIC.gz) = decd427b7283d775b0356186a50720409c1c2ecf
-SHA512 (NetBSD-6.0/newsmips/binary/kernel/netbsd-GENERIC.gz) = 05df61671fb365dba6ee67d097f5e51b372720a260b0dd05913a4cf283f323836aa7b157d88eaa68e4cdfa2a7180e57e3ba8ee3cd538dffe4a6afadc1ce880c9
-RMD160 (NetBSD-6.0/newsmips/binary/kernel/netbsd-GENERIC.gz) = e997c6efa2aacfb924670a53162157c8fbd93bdd
-MD5 (NetBSD-6.0/newsmips/binary/kernel/netbsd-GENERIC.gz) = 1b105c1608405606b59942471102880a
-SHA1 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.gz) = 42aeaa1b3dd454b7ac007db9ac4f9b43ca2bd52f
-SHA512 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.gz) = f4262b07a27e2166082ed9cd4b0a247fcbd65f3aebc1c1f8e502f5fc931e130627b0906c92263d2f748d3d30d482391c6b72637c29812f98aaed2fd85830cfdf
-RMD160 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.gz) = ab7e5e64d2b4761006e95f8d1605d767f6ace146
-MD5 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.gz) = e23868785597388ddbae56348a08d9d7
-SHA1 (NetBSD-6.0/newsmips/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/newsmips/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/newsmips/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/newsmips/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/newsmips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/newsmips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/newsmips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/newsmips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/newsmips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/newsmips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/newsmips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/newsmips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/newsmips/binary/sets/kern-GENERIC.tgz) = 7b98d2f4f3acbf629e953e6b694d8f4755b8e8bd
-SHA512 (NetBSD-6.0/newsmips/binary/sets/kern-GENERIC.tgz) = 5d7e2e9bce3611aee142686bab7a69abc59ddb5e1308694cc88e63645d3b411013765ffa5198cbb44fa445ae258f85cfae976c239875ea26ac4d0439cb497746
-RMD160 (NetBSD-6.0/newsmips/binary/sets/kern-GENERIC.tgz) = 849d144d0090f36a2d013a9f85c9b4c472c595df
-MD5 (NetBSD-6.0/newsmips/binary/sets/kern-GENERIC.tgz) = 40ecc8186e3d4328e24ef91e817c5a4e
-SHA1 (NetBSD-6.0/newsmips/binary/sets/base.tgz) = c229edbeb3438aa2444933af1633c73b66f23748
-SHA512 (NetBSD-6.0/newsmips/binary/sets/base.tgz) = 8ce8dce68f07ee529d0f079794502bd225475cabe7f0dd351caf01b5acf8a34d5f865eea046c06998db53a2cb23c7c36764314493d537ecad8e69c5908a07dbe
-RMD160 (NetBSD-6.0/newsmips/binary/sets/base.tgz) = 6d2365c6adbf64a1b6655c7341a7fa1756878e93
-MD5 (NetBSD-6.0/newsmips/binary/sets/base.tgz) = 650ad75dc13c5edd48f4d8a58759375e
-SHA1 (NetBSD-6.0/newsmips/binary/sets/comp.tgz) = d6ce335f1f52b3d77282e7c08c3781202018257f
-SHA512 (NetBSD-6.0/newsmips/binary/sets/comp.tgz) = 4c8cac5f9fff3b5334083d5df788b0967f62817e797206393f6b83a9cbb0b78c151408440045b92bc50ac2540e0b5d38ea854f29b6af69c1043952d472cf0a85
-RMD160 (NetBSD-6.0/newsmips/binary/sets/comp.tgz) = 7985588ccbaf837e8fd044a0ea7064aa023245c4
-MD5 (NetBSD-6.0/newsmips/binary/sets/comp.tgz) = ac02ccf4b35b94d87960214974f909ba
-SHA1 (NetBSD-6.0/newsmips/binary/sets/etc.tgz) = 1744b2b2050df7622a70aec4c4ab39ff4766b598
-SHA512 (NetBSD-6.0/newsmips/binary/sets/etc.tgz) = 933f4b9af8a1f5033c88ecb680c70b258b36267cbd3d8804aa7d2c0ce797f272a4ffc7266bb369505635e0e0ce0efef285d8fa26704ba28690f1dc6db810c42e
-RMD160 (NetBSD-6.0/newsmips/binary/sets/etc.tgz) = c41f76161f0a9ada7ee8cad68d5311f70051c08e
-MD5 (NetBSD-6.0/newsmips/binary/sets/etc.tgz) = adb5f50f9862a06a123d1d848dbeaef0
-SHA1 (NetBSD-6.0/newsmips/binary/sets/modules.tgz) = 494b6a3b255bace06cfee70f87d2ac213b190a5f
-SHA512 (NetBSD-6.0/newsmips/binary/sets/modules.tgz) = c8274f58ae9d514e72f8d82e46599c655e1b959b744e73340a6a106dce528f83687b7bd7f8e769eab60294e6962a7bc5e0d7173330710ee381219ca6f87b51c7
-RMD160 (NetBSD-6.0/newsmips/binary/sets/modules.tgz) = 3536ddd91df0d4d53e6da53bf30548ac60062349
-MD5 (NetBSD-6.0/newsmips/binary/sets/modules.tgz) = 4cefc39360426c683af0c3031403bd54
-SHA1 (NetBSD-6.0/newsmips/binary/sets/tests.tgz) = 8c653879bccb5f7b67536fb96f92fa52cf11e69f
-SHA512 (NetBSD-6.0/newsmips/binary/sets/tests.tgz) = 5cc47261708222b4fe1ca43d1dc014909df674db2c477c9d814e2af319e2c21c66555df78786ec48c08b21c4c8c1ddc8d815967ffaaceb625f61687df9ac46b1
-RMD160 (NetBSD-6.0/newsmips/binary/sets/tests.tgz) = 8712fce841356834ff6036bdcfe58dbb391ffd4e
-MD5 (NetBSD-6.0/newsmips/binary/sets/tests.tgz) = ccc445c6ba7fc49d4de4b0dcb26aefff
-SHA1 (NetBSD-6.0/newsmips/binary/sets/text.tgz) = 766d9d6d34c79c7be29da59f543f6e029090ecff
-SHA512 (NetBSD-6.0/newsmips/binary/sets/text.tgz) = d11a630ead4cf249224c0f887cf6c2ef347983e885f5657c44cc988733880ccfee735f36dd5558ca60ffffb5ea8dab042d016d3824d8e9116cda749516508624
-RMD160 (NetBSD-6.0/newsmips/binary/sets/text.tgz) = 53cfd7b3389f1b71430daad46ff3be2c692690a3
-MD5 (NetBSD-6.0/newsmips/binary/sets/text.tgz) = f0692f4de9721110ecf0e1ecac4bf1d9
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xbase.tgz) = 19fb5f83a2ef362388d812fbe3c4ccad858dd191
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xbase.tgz) = 4774d680e11097be0f6d8b9cdd2a296cfceefdf1c19d0e8188c742efb2603b253b46c2d01084c6bd5470e34ecc6dd81f502a97c9c69e02b9aca1af80f9d3bafb
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xbase.tgz) = b52fbd33962b06618a8334439f89a7114cb762a5
-MD5 (NetBSD-6.0/newsmips/binary/sets/xbase.tgz) = d9c670a2392dd2f58f041b18ecd32be6
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xcomp.tgz) = e99076dd0244130e9ae9ac14533df11f058aab3c
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xcomp.tgz) = 2869e7c2d397772612ce36217da0c8f7ab0ed5b18694d0620e789854dcd2fbc6763dab632614cb9df7be4c7697065db5f68e9e400fc2068a03e38d98709399b7
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xcomp.tgz) = af2372e9b8ba4ed8a4d8f951b9570e411be2dcf8
-MD5 (NetBSD-6.0/newsmips/binary/sets/xcomp.tgz) = cb05a7f616ecaa766d696b7ab5d9120e
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xetc.tgz) = 973a0c9b770b14e156ea2d999b0c155f8675e95f
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xetc.tgz) = 4298ae57e88d6a5853a8832cf06c6d294051708ffaff6e2fa28efd06c2a8cf99274f5d1be0bff31248d3d9d9ee7bcb2738fcc9b5a4f55a2f34246cf5e1bd3546
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xetc.tgz) = 4b9023581af4b378be8ce78fa812c832dae9f682
-MD5 (NetBSD-6.0/newsmips/binary/sets/xetc.tgz) = 8eee7c09a6b78148e9b1260abee79e53
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xfont.tgz) = 389d0d14a3b5ebbdf3f49b0c5bca3efcf7155a42
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xfont.tgz) = e246f6527bb91eecd3190cd9eb82157db0a0d868f95acd47bb292caea573405170156e37dfb50d3ec97b00ac7c50cf0893640945575638bd9f958cfbece4bd72
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xfont.tgz) = eab3db1a489e432867ce806385ed12e1b25165ff
-MD5 (NetBSD-6.0/newsmips/binary/sets/xfont.tgz) = 4030cc9fd13f8d3524a8c161715edc6b
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xserver.tgz) = 2e0e1a1280e01a64615430396697d3a4cc4aabee
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xserver.tgz) = e5c9d65657227d24b52db9d109c9a4993c5962c3f8171b1353709464a0ba18c99264bf3cd8dc53478692cf2a297f36bccf15519f1aa198cf1a6392e3557914da
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xserver.tgz) = 82a04ae9c10abf44d00acaa3f97f99150e7dc607
-MD5 (NetBSD-6.0/newsmips/binary/sets/xserver.tgz) = 9f3edc37a2f786ee70d5f0e100105971
-SHA1 (NetBSD-6.0/newsmips/installation/floppy/boot1.fs) = d55e9f59aac50a141dbec353c4bc9586faa8d00d
-SHA512 (NetBSD-6.0/newsmips/installation/floppy/boot1.fs) = 659476e61e29371975130565ae2e343ad3bc9423a910ef0b08cffe41e87179020c5b2f42f98d351c9957655b67ded13cf6111835e441d2ddd39584bc1a57c7ba
-RMD160 (NetBSD-6.0/newsmips/installation/floppy/boot1.fs) = f3becca1f4c20eadf3e77ff4bcb84990a9e543f6
-MD5 (NetBSD-6.0/newsmips/installation/floppy/boot1.fs) = 992e9d201b2a7183a6f8725486e8f2d0
-SHA1 (NetBSD-6.0/newsmips/installation/floppy/boot2.fs) = 2c228b57a187bbfae507d67aae5d0faef2f308ea
-SHA512 (NetBSD-6.0/newsmips/installation/floppy/boot2.fs) = 72c6b63777f2171c852f15cfd2c04fd9b21a9cfc423542d0127012be6d5ca85ad15bb33a67b1fb28e1f07f2652f94ae2d2f0c0641c6e860c0ed50d9556eacc59
-RMD160 (NetBSD-6.0/newsmips/installation/floppy/boot2.fs) = 495d95dd6cdcbf0a0cdb07fb8500738e306dd970
-MD5 (NetBSD-6.0/newsmips/installation/floppy/boot2.fs) = 90827190455600b1692585932670fc44
-SHA1 (NetBSD-6.0/newsmips/INSTALL.html) = 3bba0333ef60ff85cbb905deb86171f67a7e7d35
-SHA512 (NetBSD-6.0/newsmips/INSTALL.html) = 4778fb087bc4c44b84fec903f4e00003a41cfa3675a2f712bba28b33773800ad6b7d546074787caff68fd34a885ed84e05a0183a4867bed9c3e881ab30c68c64
-RMD160 (NetBSD-6.0/newsmips/INSTALL.html) = 27d6089590736239f38e1b0638f0b1662465ada6
-MD5 (NetBSD-6.0/newsmips/INSTALL.html) = 5041c29c150843c89b4dfa0c1cea869e
-SHA1 (NetBSD-6.0/newsmips/INSTALL.more) = 91afcc03bfa9fd0c378f7d9d22ab81cfe214f36c
-SHA512 (NetBSD-6.0/newsmips/INSTALL.more) = fc99840a5b29382c2f54287ded48994162804002b6947d2fc1fe907a0674b3827c64fa52e2bd3de735f387e09627ea254820bcd142f0552374acd2c951b0edec
-RMD160 (NetBSD-6.0/newsmips/INSTALL.more) = cdb0bd00e8d126b4736b77688ca2ac9bcc330283
-MD5 (NetBSD-6.0/newsmips/INSTALL.more) = 0dd24b3ef2da6fb2fd0989edf90aecd5
-SHA1 (NetBSD-6.0/newsmips/INSTALL.ps) = 2e236b56c944116ec48df342a4a4ab1414be54c8
-SHA512 (NetBSD-6.0/newsmips/INSTALL.ps) = 22e6e7b9975ffcc75b2560ecc103ab0f3337c0e637fc0b13e73c52b8d726c5a7676f8eb60a931113d2ce9570ca78209008810495d6260b374c61aeb79bf1915a
-RMD160 (NetBSD-6.0/newsmips/INSTALL.ps) = 031019f4af07c2dbb384bbb76702d2a6da747a0d
-MD5 (NetBSD-6.0/newsmips/INSTALL.ps) = fe0ac420b2c0c7a4fba8bfbbc247c0fb
-SHA1 (NetBSD-6.0/newsmips/INSTALL.txt) = d2abcef4ce10c3f567350ad9de6370a0f972f3f8
-SHA512 (NetBSD-6.0/newsmips/INSTALL.txt) = a26df9df3950896c9fb77d728190516f1211b1630dff4969c651ad3f343acd9359a9a6251815c560a6e47071717c53b123d911776d5f5d6b8dee38c12d075381
-RMD160 (NetBSD-6.0/newsmips/INSTALL.txt) = f2ef263bdb545134c7dbadb4509ff94ecf14d84d
-MD5 (NetBSD-6.0/newsmips/INSTALL.txt) = fea6e65c9aac2b407af208e4f7272cf9
-SHA1 (NetBSD-6.0/next68k/binary/kernel/netbsd-GENERIC.gz) = 9f78ea3f1d4a4b1c07d0a25487b20560adcb7fab
-SHA512 (NetBSD-6.0/next68k/binary/kernel/netbsd-GENERIC.gz) = daae6643ef07004beaaa345b57182f2d2b69e990896734e18ec50ee925e17acf334da7a5478fa0fa38de4062fef3285582c9a4fe352759770e4cd9012d70d6f6
-RMD160 (NetBSD-6.0/next68k/binary/kernel/netbsd-GENERIC.gz) = 2dcc60a3c451aaf9303c328a8471775b83ae066a
-MD5 (NetBSD-6.0/next68k/binary/kernel/netbsd-GENERIC.gz) = d4502e039874ee01d7564f7572fa4789
-SHA1 (NetBSD-6.0/next68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/next68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/next68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/next68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/next68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/next68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/next68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/next68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/next68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/next68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/next68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/next68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/next68k/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/next68k/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/next68k/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/next68k/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/next68k/binary/sets/kern-GENERIC.tgz) = 86b352f48720312e04260ba1dcf2f6e7e9d31e25
-SHA512 (NetBSD-6.0/next68k/binary/sets/kern-GENERIC.tgz) = 602f5ac04b050c0462d21d4e50a9a8e5c794a3b4442b6df19370ab6dbd6839755bc61e2c7745f777aef417d5c1179ff4a2af52a5880d35eb20d1c5d3a580a844
-RMD160 (NetBSD-6.0/next68k/binary/sets/kern-GENERIC.tgz) = f625cea32a206f3738a72b5ec0b01d8485c7eccc
-MD5 (NetBSD-6.0/next68k/binary/sets/kern-GENERIC.tgz) = ff2d20b2f2b0a12231e405b582b61801
-SHA1 (NetBSD-6.0/next68k/binary/sets/base.tgz) = d68bfc49aa82b76a52007a927f1a7bac692aaf18
-SHA512 (NetBSD-6.0/next68k/binary/sets/base.tgz) = 4d2c20f0dcfa061e1a1176d34111225b6c8a94b0742141560ccdc986cd5311906967d06e4294a6f988bcea4cbc09d1a9607810960f2d0be35f4ab2895f68f112
-RMD160 (NetBSD-6.0/next68k/binary/sets/base.tgz) = 6d98b84ec87a909545f72526f63cc27d450865fb
-MD5 (NetBSD-6.0/next68k/binary/sets/base.tgz) = e40a7e78d87959c20f37bd937921383d
-SHA1 (NetBSD-6.0/next68k/binary/sets/comp.tgz) = eb3082aae89eb8720e91538fd100125c9e6a717f
-SHA512 (NetBSD-6.0/next68k/binary/sets/comp.tgz) = 8c695463b6ac0a403023068b670d04c7cbe50a9e3925e19896fddba7f409b2d142e9b2817bf18144d9bb55aefe2d7cd90c1242f9bdd6cea628332277d08f8520
-RMD160 (NetBSD-6.0/next68k/binary/sets/comp.tgz) = 81c05df1b3c2c6a72575a325b2c507081279a587
-MD5 (NetBSD-6.0/next68k/binary/sets/comp.tgz) = 11b81d6d2371e3b3123f0fc776526b80
-SHA1 (NetBSD-6.0/next68k/binary/sets/etc.tgz) = d7697b36fa1c6c814b0745d496709c177b43441d
-SHA512 (NetBSD-6.0/next68k/binary/sets/etc.tgz) = 9b4ed551eb36810109e30dee6273d5c18fc918686ba9cab5ffc4ab25a1763e645a179920e7d4ba56be3b15269425e38abf3237e1e6a788b369a4d26d59aa8a6d
-RMD160 (NetBSD-6.0/next68k/binary/sets/etc.tgz) = beadac2eb477aca072b36fa2587e46645e908d11
-MD5 (NetBSD-6.0/next68k/binary/sets/etc.tgz) = ebd0202a3d65b7a528b4854483ac669d
-SHA1 (NetBSD-6.0/next68k/binary/sets/modules.tgz) = 49e37041d779f3b282c12b3f41d876e4621914f2
-SHA512 (NetBSD-6.0/next68k/binary/sets/modules.tgz) = c8f22b3d92b7089aaf3b5fe563a9d0cbc7124b6e402e53b458881c123468e51b5b4f92d8e8b1a5c0f7ff19fc032bdd012db8dfd801be6330e96e0e79917df08a
-RMD160 (NetBSD-6.0/next68k/binary/sets/modules.tgz) = 093e67a0796abb445f0f3b7f6bbfa42a68dff403
-MD5 (NetBSD-6.0/next68k/binary/sets/modules.tgz) = dcf44be798ece88e148faaabe70e2251
-SHA1 (NetBSD-6.0/next68k/binary/sets/tests.tgz) = 28b7d959516205c1231c7f756614c776fdba9576
-SHA512 (NetBSD-6.0/next68k/binary/sets/tests.tgz) = b704bcbe14b260067ea704350ff9b49d49e040a6a87597211de8cea7e05039054c4f4996bd96829a9acc1a97320b3fa3f1ca2300717365e2c13fefac4e13ec11
-RMD160 (NetBSD-6.0/next68k/binary/sets/tests.tgz) = b7ad8dc285efaeb99c3d1384dada9b20cc7104bb
-MD5 (NetBSD-6.0/next68k/binary/sets/tests.tgz) = 45d4bf99be70595e367459256c139b65
-SHA1 (NetBSD-6.0/next68k/binary/sets/text.tgz) = e079bed4ddd9e37cd0cb2f514823f81de9200669
-SHA512 (NetBSD-6.0/next68k/binary/sets/text.tgz) = 3f66684ea0cdaaa433f52dc40eb6776091d19e5f53c87c3fa888ceaef29524dcd7b5c08ce8f08df94db7f039026dfe60a963d23f888bdeab70da4bf71592b122
-RMD160 (NetBSD-6.0/next68k/binary/sets/text.tgz) = 692b64c1a4e521caa76fdc109175a636ef4f9d21
-MD5 (NetBSD-6.0/next68k/binary/sets/text.tgz) = ea58b70eb622e2bc8fb610431f9f27c4
-SHA1 (NetBSD-6.0/next68k/binary/sets/xbase.tgz) = 5e093e4987d3ef6e66dee1dbf5d2c2781a7be759
-SHA512 (NetBSD-6.0/next68k/binary/sets/xbase.tgz) = 9bf75e2feb514bf47ead4151dfc44e0bd8361bd2155bdd7f5f5bda16c2ce60edef88cfbfe054161af32ea2804ccc5903b5ecc8a4270b2d19d6e864c7df776ef7
-RMD160 (NetBSD-6.0/next68k/binary/sets/xbase.tgz) = 6c8fe359b16a5d6d7ab318ad8970b36b3a9d8b41
-MD5 (NetBSD-6.0/next68k/binary/sets/xbase.tgz) = 4dc8195a284c6ff792f07b0279a1ffee
-SHA1 (NetBSD-6.0/next68k/binary/sets/xcomp.tgz) = 6248c1a2455726a172e7d41ad3b71396d1569c27
-SHA512 (NetBSD-6.0/next68k/binary/sets/xcomp.tgz) = 03272ed1984404a7ed8d6753aae6fd2797b82da0f856173bff109dd46909561af865acf81ec8007e8e95794d41e49caa4ffead9d0f5a304e4fe3a627fc62b5ca
-RMD160 (NetBSD-6.0/next68k/binary/sets/xcomp.tgz) = a6fd52049b8fb32c457db212ea0b0f04ae8837f6
-MD5 (NetBSD-6.0/next68k/binary/sets/xcomp.tgz) = 1e5c017075bcb0ddc800674737475134
-SHA1 (NetBSD-6.0/next68k/binary/sets/xetc.tgz) = fc7edd9e51673c25587253ccfa05b06556554596
-SHA512 (NetBSD-6.0/next68k/binary/sets/xetc.tgz) = 6d1f1584a7dbf8ddc3695951796b3951ef5fcae7176c93e5992aa84618b1a935d28baf14dac468cfd50e084414978e824054e08d30b3761e2467aecaa8a2d5cc
-RMD160 (NetBSD-6.0/next68k/binary/sets/xetc.tgz) = 287ef7ae8028b2cdfdd081f19a387900bcb49b37
-MD5 (NetBSD-6.0/next68k/binary/sets/xetc.tgz) = 9cc9fc5b70004b4e532fc745ac7c07f8
-SHA1 (NetBSD-6.0/next68k/binary/sets/xfont.tgz) = 66f50766e91abe745da27688863877f1002907c7
-SHA512 (NetBSD-6.0/next68k/binary/sets/xfont.tgz) = 3f1fd3be74c0971fe2217fb8e39f6ca693d07b5a272b3eff1028ee2f012ec2c04239ec90cd90846553e3a066b58fa957d0ab1d3695faaf0063a6c947165e63f4
-RMD160 (NetBSD-6.0/next68k/binary/sets/xfont.tgz) = 185771ae1f0ed1ca9d8e7025f402bb41c5a14519
-MD5 (NetBSD-6.0/next68k/binary/sets/xfont.tgz) = 57e25cb12fb7ae0b3cd06def9e685b7d
-SHA1 (NetBSD-6.0/next68k/installation/boot) = 1678cf659734cb8f7d5d034bf1ce6aa506278920
-SHA512 (NetBSD-6.0/next68k/installation/boot) = bf027e98b6c1a81300dfe506c084a9777f4f5f9b4078b35d61ea0a39ff73a5d9abe526f423164ed3c076ce7a33cedf460111142f24861c142a5b2c6485881ab9
-RMD160 (NetBSD-6.0/next68k/installation/boot) = 8d3d5e3786b272a9dda7ca19185e3802639f7f6b
-MD5 (NetBSD-6.0/next68k/installation/boot) = ec7ee9f5d5be157c6a9a56ac77835f47
-SHA1 (NetBSD-6.0/next68k/INSTALL.html) = aaf1f7407874cf9d7bdff5b434a74e298b7dc52f
-SHA512 (NetBSD-6.0/next68k/INSTALL.html) = b2d952c916578af512363fa118f81950b95b545aac62474194ef2ed4df3fc4fd9f334f7b3171335f7669c8d0992c37140daa86bab57dcb0020dfa39abfcc4ecd
-RMD160 (NetBSD-6.0/next68k/INSTALL.html) = 52a08c6bd446a00228899639e98aeb8327f100ee
-MD5 (NetBSD-6.0/next68k/INSTALL.html) = f08b6811f0f572819de3b455714166b7
-SHA1 (NetBSD-6.0/next68k/INSTALL.more) = dced1147a6dc54b1365d13a49d0bf57d596653aa
-SHA512 (NetBSD-6.0/next68k/INSTALL.more) = 5136e7a75ef6c3a39ca15112414c73c023c560dfbc09d4da60e6435112a4108c192f25b200f0a149a9eafdff3a74001630f972f58dcc2a9d18174286c906b680
-RMD160 (NetBSD-6.0/next68k/INSTALL.more) = fd826a26af8b89375881dc361a7426b7841baa52
-MD5 (NetBSD-6.0/next68k/INSTALL.more) = 0d480ba3bfd38cc17c62d387a740111d
-SHA1 (NetBSD-6.0/next68k/INSTALL.ps) = 47541be31baefad1f76a45e45b2050cda159953f
-SHA512 (NetBSD-6.0/next68k/INSTALL.ps) = 297a4fb8e5242a764b721a3bea309d123d3f71b67aec903926d5118b42831ba054242783fcbdc19520609ac06f81b733785b5952e24ae23218219046922f8f8a
-RMD160 (NetBSD-6.0/next68k/INSTALL.ps) = 56423276a2db90876c067eb51b7c19f1341d261b
-MD5 (NetBSD-6.0/next68k/INSTALL.ps) = ed71185d0510303cbb5d8ff681dcfaf5
-SHA1 (NetBSD-6.0/next68k/INSTALL.txt) = 3d70ff39023294025c590934bdaca3fce5dd33bd
-SHA512 (NetBSD-6.0/next68k/INSTALL.txt) = d0485c5d3587022d986a53345ed78f49130ef54070d0c45a7812d57400402079855d6cc72401579d1185d2dbeb5e5846efebfa50fda484cc5a1ac719ca7b706a
-RMD160 (NetBSD-6.0/next68k/INSTALL.txt) = bd984eb4c13e1ec872ee2517b72c13ac7e90e090
-MD5 (NetBSD-6.0/next68k/INSTALL.txt) = 0cf50370809ab3ff52dc710474d37edb
-SHA1 (NetBSD-6.0/ofppc/binary/kernel/netbsd-GENERIC.gz) = 31cf98d9ea175b5ea6fe09455217e660d44f1973
-SHA512 (NetBSD-6.0/ofppc/binary/kernel/netbsd-GENERIC.gz) = 22e1ac76e1fa230f69485f53ac23186a97562a1088b1a99979d9d446dcef8a863f1bd63eb6bf16ebf990b40b161fb75025890d9d52474b82cdb3d497e2056b2a
-RMD160 (NetBSD-6.0/ofppc/binary/kernel/netbsd-GENERIC.gz) = 1ade658130f4e40d57cee2ab641234c1e93c3f01
-MD5 (NetBSD-6.0/ofppc/binary/kernel/netbsd-GENERIC.gz) = ae8374ac0ba9ca59c6068561dcad1ba3
-SHA1 (NetBSD-6.0/ofppc/binary/kernel/netbsd-INSTALL.gz) = 0b815e688d07caf3d93190562bcd53f3057ec1b6
-SHA512 (NetBSD-6.0/ofppc/binary/kernel/netbsd-INSTALL.gz) = 43255a25b3044320db3d12f474a70920efe93a52aad3351933ae80bd079a8f93a866fa1c939a92d075161822066dc76ffe314feaf493a783ca51058eba9e96e0
-RMD160 (NetBSD-6.0/ofppc/binary/kernel/netbsd-INSTALL.gz) = 87995ce3c896b4ffcef1eaeef9c7ff27e8c5446f
-MD5 (NetBSD-6.0/ofppc/binary/kernel/netbsd-INSTALL.gz) = 008fbd36266fbb4ef45c3c289d07dbd3
-SHA1 (NetBSD-6.0/ofppc/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/ofppc/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/ofppc/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/ofppc/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/ofppc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/ofppc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/ofppc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/ofppc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/ofppc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/ofppc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/ofppc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/ofppc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/ofppc/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/ofppc/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/ofppc/binary/sets/kern-GENERIC.tgz) = 7ace360c931ac41952447fce2d6241a8393a7b3c
-SHA512 (NetBSD-6.0/ofppc/binary/sets/kern-GENERIC.tgz) = 9c63f0169c8bf1282c54a5ae3b1396376b69a23b6ac881859a304a9d21aad45f64d0998eae3399cc397489a1c3e1b7f52cdce0ee806c160ae5da3287b113c00b
-RMD160 (NetBSD-6.0/ofppc/binary/sets/kern-GENERIC.tgz) = b96e84c0a6d945475f6523d73cabb42ff80caa46
-MD5 (NetBSD-6.0/ofppc/binary/sets/kern-GENERIC.tgz) = 2153bc142bb6f9067287344b5d3703e6
-SHA1 (NetBSD-6.0/ofppc/binary/sets/base.tgz) = 48aef3545f49ee86082480f6712e6c7df6c1c82f
-SHA512 (NetBSD-6.0/ofppc/binary/sets/base.tgz) = 580ad38769fc64e5f50a59f726d13d21625392459a03633c4908fbaf16e08715032dd10fbee9f4efe5261beb24169dcdaf86f11d20f2e2bfc7af22f16ce5b10c
-RMD160 (NetBSD-6.0/ofppc/binary/sets/base.tgz) = 93fe246dba1352ba0bc5ef955094069e82e777cc
-MD5 (NetBSD-6.0/ofppc/binary/sets/base.tgz) = 6a0ea91d58c236cd1d72963bee61dbc8
-SHA1 (NetBSD-6.0/ofppc/binary/sets/comp.tgz) = 7d553fd5460fd823ee474377ad7e4e4a57796d04
-SHA512 (NetBSD-6.0/ofppc/binary/sets/comp.tgz) = 17dff29a91c71c4fcabe616595144201b999b75d56033109f24dfa89e5653ea24890e2657fc007cc0bcbceb749213eb99db5d268db8c96f41f1c2ec203e951ef
-RMD160 (NetBSD-6.0/ofppc/binary/sets/comp.tgz) = 79001f2a220166711cf3e076c137d9944cb72d07
-MD5 (NetBSD-6.0/ofppc/binary/sets/comp.tgz) = bb52657afeeafa0a04fc52d5b96130cb
-SHA1 (NetBSD-6.0/ofppc/binary/sets/etc.tgz) = b19a807890c2859c0c5dfcc27d97c7b94703ba1c
-SHA512 (NetBSD-6.0/ofppc/binary/sets/etc.tgz) = 157110603a432bdf8da99f467e263037d2683372b37c2fb9e8ba7a25a5ed6e44b6d62aa3d60464ea3d0dd101d55b85ff951afde528cc0f61158892a3b379bc90
-RMD160 (NetBSD-6.0/ofppc/binary/sets/etc.tgz) = 8e67db3042b34b9e0ec19853d0209996cb18cc22
-MD5 (NetBSD-6.0/ofppc/binary/sets/etc.tgz) = 7c3ef92dc32ef4a24a29fd071fad94f5
-SHA1 (NetBSD-6.0/ofppc/binary/sets/modules.tgz) = 976ee92c542c431c7eadaf77dc3267c54643aef9
-SHA512 (NetBSD-6.0/ofppc/binary/sets/modules.tgz) = eedd03d73c348500f3df270f002d65d16cdc9f5318ecf14ebc8c4e27af6aff26701d985e5c5a47ed9f37359fb119d61ebe64cbcd726bb5ea7a0b2947aa312a8a
-RMD160 (NetBSD-6.0/ofppc/binary/sets/modules.tgz) = 03d76ba89e00f988e16e0a5cd6798fca65852c82
-MD5 (NetBSD-6.0/ofppc/binary/sets/modules.tgz) = 132d39b3a365d6ecd924789660a7b72c
-SHA1 (NetBSD-6.0/ofppc/binary/sets/tests.tgz) = f643b7607751a3355cc6e9e8d26fcc1bfdd14a22
-SHA512 (NetBSD-6.0/ofppc/binary/sets/tests.tgz) = 0a517f2c914e449c0bedb3be5e96e76c369be5be270ad8ba2aee4b96f3a3d7afce2bb56de0eef54d97b1194101eb24331dd202605eb58e648b3f79f04b44d96a
-RMD160 (NetBSD-6.0/ofppc/binary/sets/tests.tgz) = aca5ea7884341e0dc0f4e06d552b908550cb7dde
-MD5 (NetBSD-6.0/ofppc/binary/sets/tests.tgz) = d8c47bef7caa4afa0ea7967d42a59cfa
-SHA1 (NetBSD-6.0/ofppc/binary/sets/text.tgz) = 010dbafdbd84074ed3acf0bacea61b34dad4005d
-SHA512 (NetBSD-6.0/ofppc/binary/sets/text.tgz) = a8a4fe56016f47a03dd2e23cfb5368111cc7734a7a9dba9ab42081b609c00ac812ec8e73eb75b5dc2f81b847f0bf782257834e09603aac858c8efe1e6755eaf8
-RMD160 (NetBSD-6.0/ofppc/binary/sets/text.tgz) = 263b72d30191910c092ab984458cd1442ba67f3a
-MD5 (NetBSD-6.0/ofppc/binary/sets/text.tgz) = a6dfbc450a9aec79555f52694a2971f0
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xbase.tgz) = 292a1ad5d516609f5c3c5e78e83f4f200f967775
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xbase.tgz) = b3c082fb1fe52edc65fb728d9347d51285a761ba8bbb56cf84744f70614c2c1207a8b48c49d5ad598fc09745f3a900ca2bb08cff4381be8f007d6b89faf7c058
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xbase.tgz) = 954ba03beb3cc9b5064c0d9e9008358cf9c490f5
-MD5 (NetBSD-6.0/ofppc/binary/sets/xbase.tgz) = 410d993f39451d776e2c9d9ca55414ac
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xetc.tgz) = b83db52f87a7a2ba08d22f29249f2b0d8af31028
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xetc.tgz) = 541ca16e25a0cd271b490773e043e6d66d9d704f4d4bd22458d5f3c4f76f23190264201a80cd57b567d8410ca2944a36e10868c4e2916300d978949d78293b33
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xetc.tgz) = de0ae01a1d264465ca58a678c658f75d2844d04a
-MD5 (NetBSD-6.0/ofppc/binary/sets/xetc.tgz) = d60b94274347e3f9073b80da9f5dd874
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xserver.tgz) = e8fd963e80c60b8a85a284484d0d78463038f413
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xserver.tgz) = ca88d3ce0ccd0e82636ae59d4ea4acba9d29ba6fb51be52c6d8de5986d7b037e6062d00bc45390783efd3089de3eabbdbf565929936af7f46c207b705c33176f
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xserver.tgz) = a6b1345264d3fcddf0ff72b3005dd71053aba0f5
-MD5 (NetBSD-6.0/ofppc/binary/sets/xserver.tgz) = 8150c6dfee587ce36ff31c34a1929e29
-SHA1 (NetBSD-6.0/ofppc/installation/netboot/netbsd-GENERIC.gz) = 31cf98d9ea175b5ea6fe09455217e660d44f1973
-SHA512 (NetBSD-6.0/ofppc/installation/netboot/netbsd-GENERIC.gz) = 22e1ac76e1fa230f69485f53ac23186a97562a1088b1a99979d9d446dcef8a863f1bd63eb6bf16ebf990b40b161fb75025890d9d52474b82cdb3d497e2056b2a
-RMD160 (NetBSD-6.0/ofppc/installation/netboot/netbsd-GENERIC.gz) = 1ade658130f4e40d57cee2ab641234c1e93c3f01
-MD5 (NetBSD-6.0/ofppc/installation/netboot/netbsd-GENERIC.gz) = ae8374ac0ba9ca59c6068561dcad1ba3
-SHA1 (NetBSD-6.0/ofppc/installation/netboot/netbsd-INSTALL.gz) = 0b815e688d07caf3d93190562bcd53f3057ec1b6
-SHA512 (NetBSD-6.0/ofppc/installation/netboot/netbsd-INSTALL.gz) = 43255a25b3044320db3d12f474a70920efe93a52aad3351933ae80bd079a8f93a866fa1c939a92d075161822066dc76ffe314feaf493a783ca51058eba9e96e0
-RMD160 (NetBSD-6.0/ofppc/installation/netboot/netbsd-INSTALL.gz) = 87995ce3c896b4ffcef1eaeef9c7ff27e8c5446f
-MD5 (NetBSD-6.0/ofppc/installation/netboot/netbsd-INSTALL.gz) = 008fbd36266fbb4ef45c3c289d07dbd3
-SHA1 (NetBSD-6.0/ofppc/installation/netboot/ofwboot) = 56bb70527f572ae12667a4d9dc71027032602d26
-SHA512 (NetBSD-6.0/ofppc/installation/netboot/ofwboot) = d137aad957d917f4db49ad9b912cf794d5ba9e52ac0f0d1926599dcac166df97c5b81292247b62d15a495134d4c9967ba777b0570701b3340021dcac293ab2d2
-RMD160 (NetBSD-6.0/ofppc/installation/netboot/ofwboot) = 5a6f580e7c000543b09dc7590555ce944b7f2df1
-MD5 (NetBSD-6.0/ofppc/installation/netboot/ofwboot) = 139a6e28174158a78719ab4e67de40b5
-SHA1 (NetBSD-6.0/ofppc/INSTALL.html) = 70ffc237a74825aeff35c638c9dd33b10334c09e
-SHA512 (NetBSD-6.0/ofppc/INSTALL.html) = 5df9959e93527b0f53d3866b15fcac4dbce2edd6a1bff082e588348ada3767bd0ca45d99089540fde08ecc73b8c8846ca7a046ada5f1f1072d6cd1e6c3268497
-RMD160 (NetBSD-6.0/ofppc/INSTALL.html) = 3718a3b3de1edc4d81cc61c88146e69d8b126266
-MD5 (NetBSD-6.0/ofppc/INSTALL.html) = 4a16acd4059c24dbcf1ccab96be7928c
-SHA1 (NetBSD-6.0/ofppc/INSTALL.more) = 14b22fc68257222ce1d15d02554588760ce4fc62
-SHA512 (NetBSD-6.0/ofppc/INSTALL.more) = e0c15cc5760ad5087d58c7659e8692b18fa805b6df85a7965ce142bb7506d3105c1dea0c7acdecfc51fa63f857dc959e25c74fa0ee871417670e013f4c2b2a1c
-RMD160 (NetBSD-6.0/ofppc/INSTALL.more) = b726d0dd772cab274c9b2f6f484d5b1903151827
-MD5 (NetBSD-6.0/ofppc/INSTALL.more) = 40e2acf64e90023938d03f0ff945ab0f
-SHA1 (NetBSD-6.0/ofppc/INSTALL.ps) = 16a078ed4ada6fe71e1d5939bacd3a60c10cefbd
-SHA512 (NetBSD-6.0/ofppc/INSTALL.ps) = 1d9815a162a77d91aebbfd11e0fe6d386c24be9e734683a6eee3cc49e059e8c4c9e559d00c3bfdbd3ceaaf885c11deb5c985ab4de41f1e1b1c9c5b037d300ec5
-RMD160 (NetBSD-6.0/ofppc/INSTALL.ps) = 83f80393d6bd7845dac2c2f789b14104b5ed3b9e
-MD5 (NetBSD-6.0/ofppc/INSTALL.ps) = 9ef011b3eea954489d1e03261175f278
-SHA1 (NetBSD-6.0/ofppc/INSTALL.txt) = 0703c2fc0836a815f8a23c9e295482feced08667
-SHA512 (NetBSD-6.0/ofppc/INSTALL.txt) = e5a59c4554e4dad54c4de8af3ef1fc051a3ed6ddcca88fe60b0f1c5e52c75507268a0cd154482fd7f8633ef0b6de5fa9052334adb93bc787e0f45db400018aea
-RMD160 (NetBSD-6.0/ofppc/INSTALL.txt) = b4b1e1c493973acc61f5280eec83fd1a4b386f9e
-MD5 (NetBSD-6.0/ofppc/INSTALL.txt) = 167ec8dd0f2430f3baafba98c15b0b77
-SHA1 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.ecoff.gz) = c3341e74bbfc424f067743c23369e7d4de2320d8
-SHA512 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.ecoff.gz) = 902237dd2bac97bbf8bc0d70e933307897e375cf760f90531ae39ff8f9abaf1c70091d61678e56448b46d060919eb93b052e0bdcba34482b12174855bf29a941
-RMD160 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.ecoff.gz) = 12abc208e6d943a92255fa99934e2fbdd98b86d5
-MD5 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.ecoff.gz) = 3a5c93ed6aedf91145618578c0283312
-SHA1 (NetBSD-6.0/pmax/binary/kernel/netbsd-GENERIC.gz) = c673249c82581fc220eeab9db4826ae70a879f7d
-SHA512 (NetBSD-6.0/pmax/binary/kernel/netbsd-GENERIC.gz) = 28c33a6cbb2cb4ad53e3e780c74a903ee93a6350da5a36c0232a57e690b80caf1053dc2bad1badd5631abeb20dbfbd223413762bf576db7363a3bd07aa91ddee
-RMD160 (NetBSD-6.0/pmax/binary/kernel/netbsd-GENERIC.gz) = 1c56f35974b50c40595fb19a763e6e13a052136c
-MD5 (NetBSD-6.0/pmax/binary/kernel/netbsd-GENERIC.gz) = 27f93c549aa40bae7bae47978622eb2c
-SHA1 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz) = af7b35f9bea1761095521088a9bad8d6122565c9
-SHA512 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz) = 506859e85d0266360f83d3a7af1deb8f9a84c8f1bbab10c1bd8b9b43bdf8ff7056629450f8aff2ed6f3424ff2034cd36e21144bceaaac6048fe54f58982dfa8f
-RMD160 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz) = 71b182d23dfaa77e92597e840c0d5cb502b9ff7b
-MD5 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz) = f70b79efeefcd03ef2b47a6d61b723c8
-SHA1 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.gz) = f22aa49d239f1c2b49fc2779dbc71b79d6470468
-SHA512 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.gz) = 82136634c9a3ea07a6eb23ad3e6d4214d796f54d406de73cd23f0da45a3872bae0f7f120ddb67aab0da05ef88feb21bb63ec1adf880469ee5d4eda2e32080732
-RMD160 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.gz) = 351fe6fec563003dcb4a0045c740ba3f2fcb73ad
-MD5 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.gz) = 50f2b444f3462f71810f3c93b47083ff
-SHA1 (NetBSD-6.0/pmax/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/pmax/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/pmax/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/pmax/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/pmax/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/pmax/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/pmax/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/pmax/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/pmax/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/pmax/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/pmax/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/pmax/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/pmax/binary/sets/kern-GENERIC.tgz) = 1ae699dc77ef033860c3fcc0df198c6ec15bf312
-SHA512 (NetBSD-6.0/pmax/binary/sets/kern-GENERIC.tgz) = 1a29fbe70596378ab0f543dd010c24ca327822d743152ce0405eb0e4ab268224b91d346d23b9ee1eec706b4cbe88ccdea27cb6a9b115ce9ddcdaced115a58682
-RMD160 (NetBSD-6.0/pmax/binary/sets/kern-GENERIC.tgz) = 5edbc95d6df7a073b545902862a9e012a981b36b
-MD5 (NetBSD-6.0/pmax/binary/sets/kern-GENERIC.tgz) = d9d9dab85e423b5953eb17bdf8072375
-SHA1 (NetBSD-6.0/pmax/binary/sets/base.tgz) = a7e09afd631257929bbc0a4c6705fd56cafdda30
-SHA512 (NetBSD-6.0/pmax/binary/sets/base.tgz) = 8313b9e6146645955a135e9f9c69b90688f9011ef4087a7911e842ff13802150347ac4e7e9b3f60313a06300e90e93c192910741fd427705709be5f669a45701
-RMD160 (NetBSD-6.0/pmax/binary/sets/base.tgz) = 52eb2bdd47d2a4ae8ac2b780e70006dcc79f4cf6
-MD5 (NetBSD-6.0/pmax/binary/sets/base.tgz) = 3b726d62e4341637cf824c141cdc362c
-SHA1 (NetBSD-6.0/pmax/binary/sets/comp.tgz) = 9cc5684de31ac3b6c086f3716926eccbfaec6191
-SHA512 (NetBSD-6.0/pmax/binary/sets/comp.tgz) = fbead7650935dcbea46ef3e11ef03468287b0461cbb70b51e330e641dd7e246bd602bc92935980e3e8ea8100e8ea487906763fc615e477462a9644201a7f616f
-RMD160 (NetBSD-6.0/pmax/binary/sets/comp.tgz) = def96b7d151cc9405fe72c51f7ca95b552f3bd46
-MD5 (NetBSD-6.0/pmax/binary/sets/comp.tgz) = 93a3bdd6f9461cc642955b749cddb59a
-SHA1 (NetBSD-6.0/pmax/binary/sets/etc.tgz) = 73127a1dcbea90c9029538e87773bc7846ac2016
-SHA512 (NetBSD-6.0/pmax/binary/sets/etc.tgz) = b96b30df1576538bcbaddcf471cd4d87258c06d199077d35d4ea37dfc9c3f388bd62c1ea8c3634ee501d6f28409bd966b791bf3eef8741ca2234c12e1101008a
-RMD160 (NetBSD-6.0/pmax/binary/sets/etc.tgz) = 44ef8ce24cdd12aa5af0cbbf700abeef900e12e5
-MD5 (NetBSD-6.0/pmax/binary/sets/etc.tgz) = 0dd976e6a6c855f02a86fc0fb624b4af
-SHA1 (NetBSD-6.0/pmax/binary/sets/modules.tgz) = 9ed1e0f57d9ee14dc3850e541f0b95132a3048c2
-SHA512 (NetBSD-6.0/pmax/binary/sets/modules.tgz) = 7a367e78224326f43584bb7cfa1aedd74763ccfca9d6abc8587882ecb1b8276851ead5ff1afbe9cd16accfd0d415e26db6604d3a9c3a1bac78d94107a57d033b
-RMD160 (NetBSD-6.0/pmax/binary/sets/modules.tgz) = cff6f3fc309012a3f45c047ea5238f83432235a5
-MD5 (NetBSD-6.0/pmax/binary/sets/modules.tgz) = 825fa6d6cac00e2629ec059fcb68008b
-SHA1 (NetBSD-6.0/pmax/binary/sets/tests.tgz) = 802f716b73250eee2696cac4b6e3395833c0237d
-SHA512 (NetBSD-6.0/pmax/binary/sets/tests.tgz) = f56cba629167f2f679a460679faaf566f4baf053d644a71fd70fa3041aa592aa0a53b98876ce474b48f46a582401a882161005360fdddc49246f094680b1029f
-RMD160 (NetBSD-6.0/pmax/binary/sets/tests.tgz) = a9b17f97265bdfb69402190690d77306f42ecb6b
-MD5 (NetBSD-6.0/pmax/binary/sets/tests.tgz) = 54dd7a96d4abee24bb0019a846d77825
-SHA1 (NetBSD-6.0/pmax/binary/sets/text.tgz) = a0b59e7fb204b9db40df7edda528e8ca8b4e3fd6
-SHA512 (NetBSD-6.0/pmax/binary/sets/text.tgz) = fb7c0d5cb17bb2ef1ffeefa5791bab7932a05e33cd064f279d99eebe07a52f1420aa64a8c6acf191efacbfd130509fb427e6d5d8f14c042b3c0e5e285282592b
-RMD160 (NetBSD-6.0/pmax/binary/sets/text.tgz) = b0495549753b7c3a8abb342045ef4f65e7b640d5
-MD5 (NetBSD-6.0/pmax/binary/sets/text.tgz) = 9f9e6d5b8f9dbb70b845a9aba07ffff4
-SHA1 (NetBSD-6.0/pmax/binary/sets/xbase.tgz) = 99d83d866f2f15b6030b0533990e012ab59b1f46
-SHA512 (NetBSD-6.0/pmax/binary/sets/xbase.tgz) = 238db55892d9cbb0bd5dacb225a16e694c79af2fe461f06563a65c5d2c5b3abfc823ab26f23c54bc1514568018726baab0258aac0e52ccf7615d59c2a6ef324a
-RMD160 (NetBSD-6.0/pmax/binary/sets/xbase.tgz) = 16560205f7564558bc22495116ace64618834133
-MD5 (NetBSD-6.0/pmax/binary/sets/xbase.tgz) = 384d33f9a8ec5c7bc8e104869e3e493a
-SHA1 (NetBSD-6.0/pmax/binary/sets/xcomp.tgz) = 6b6b8d6b522b0546a13a304195765526158f6eb2
-SHA512 (NetBSD-6.0/pmax/binary/sets/xcomp.tgz) = 37af51b256f03e8b4c61d4c67724cead53115ccbfda7d597f3b00a020bd8f4c1fff4f6206e5fe8246e0b3fae50c7dc1df313858670a6e1729b1155e0f97e9b23
-RMD160 (NetBSD-6.0/pmax/binary/sets/xcomp.tgz) = 91d9a2cecb3955beabb71191b73d3586f2c370bd
-MD5 (NetBSD-6.0/pmax/binary/sets/xcomp.tgz) = 9028e22a82276249cc188f83101af806
-SHA1 (NetBSD-6.0/pmax/binary/sets/xetc.tgz) = 2171c5c0cb3143aa83fb8e55d4d98fd87d3e556d
-SHA512 (NetBSD-6.0/pmax/binary/sets/xetc.tgz) = a63407a7d884ea60761ccdee9279c37b790aa08defced01410786e0e020a63b5a4e4cfd503a0ef09e555d04a98a99dbfcfb087c476070771f8b5b5a205b4495a
-RMD160 (NetBSD-6.0/pmax/binary/sets/xetc.tgz) = fa4c1f7437db71fb1a3122cc366591b39b00fa07
-MD5 (NetBSD-6.0/pmax/binary/sets/xetc.tgz) = be3b5f617ddd47650cf9423451320c4a
-SHA1 (NetBSD-6.0/pmax/binary/sets/xfont.tgz) = ca16714159668bc20017cbb9a81fe3746171e383
-SHA512 (NetBSD-6.0/pmax/binary/sets/xfont.tgz) = 077ab3a7540abb8d4039b7f017ff52dcb5aae2ba5a984dd12b04d22908863cc60db8aa67b5f772a584aabbe05a74426534eeced9f323aa07c9225c8333c41f3f
-RMD160 (NetBSD-6.0/pmax/binary/sets/xfont.tgz) = 33beb97b3267941786413a7c5624d78297f5ccf6
-MD5 (NetBSD-6.0/pmax/binary/sets/xfont.tgz) = c262ee8846a85c1e5b00a8ecbe754dcc
-SHA1 (NetBSD-6.0/pmax/binary/sets/xserver.tgz) = 86332fccabc2c7b8e7ef7f8fa9eebc2f22c8afba
-SHA512 (NetBSD-6.0/pmax/binary/sets/xserver.tgz) = e02ed6aa6333bd8941d02f15a3797f862f3fe47b5afce08d60021a06d5ed9db56e8bf802920e8b7614ff5e3127706b195ab9a678710b7b6afb6b70e0f3a7f636
-RMD160 (NetBSD-6.0/pmax/binary/sets/xserver.tgz) = 4bc06df7b2012be80b61ef6b9860a4698b815353
-MD5 (NetBSD-6.0/pmax/binary/sets/xserver.tgz) = 5dd0ae8362aa55b5c7ab207d771834f3
-SHA1 (NetBSD-6.0/pmax/installation/diskimage/diskimage.gz) = 013da364eedff1ef317fe4933205a1f6e45a7520
-SHA512 (NetBSD-6.0/pmax/installation/diskimage/diskimage.gz) = 9a415703b540ea67b99a367bf8a2dbd73c18fc1aff0ee2b3ffedb858d09cfa1b3e7bc62a654061963394f3540c50259ad343edfc41518fa444332d7ab9ea5e8e
-RMD160 (NetBSD-6.0/pmax/installation/diskimage/diskimage.gz) = 3c7faef744c1c309dbad390121852ca1ad8ed0f1
-MD5 (NetBSD-6.0/pmax/installation/diskimage/diskimage.gz) = 2e40475c5dfbfa75ac856a0a02f4afd7
-SHA1 (NetBSD-6.0/pmax/installation/miniroot/miniroot.fs.gz) = fb7b259d7649170e5eaa31217417b6e75291529f
-SHA512 (NetBSD-6.0/pmax/installation/miniroot/miniroot.fs.gz) = 3ef73219ab90c01753bf53dc325b64e26b8b41a7cd78ff1fcb85c4d27ab44b2979b6d312c17383ae9f8c3d24c968f5b896fd04a0679e64a47ea859b578022722
-RMD160 (NetBSD-6.0/pmax/installation/miniroot/miniroot.fs.gz) = 4f8d0f80c84f93b4ea5d9025c4fd3227c2880641
-MD5 (NetBSD-6.0/pmax/installation/miniroot/miniroot.fs.gz) = 3e2cc1da2be2c9ae099bd488393a9904
-SHA1 (NetBSD-6.0/pmax/installation/netboot/diskimage.tgz) = de0f5cd5da27716499b56ae61afe5ca6a8bb0839
-SHA512 (NetBSD-6.0/pmax/installation/netboot/diskimage.tgz) = 0283bc16d8fef0704b0d90bda6213d05e63271053ce59cb20d6cf0dc3a76bb8ed711e968de5a194d2d900becf83eb4fccbd82c22ed868c9a79b7cfbbc43acef7
-RMD160 (NetBSD-6.0/pmax/installation/netboot/diskimage.tgz) = a46875bffd27ea9d145b5e5f2a286a49c5b93cdb
-MD5 (NetBSD-6.0/pmax/installation/netboot/diskimage.tgz) = a491535a6424e97d5c52207404922ba9
-SHA1 (NetBSD-6.0/pmax/INSTALL.html) = 416fb09d6569c88845b26c89d9062106799cb772
-SHA512 (NetBSD-6.0/pmax/INSTALL.html) = cc06ccfbe9a109b6873a6e280baa5d401d3adb507160e145446e0c6d3c042cd5ba2f9edbe1c8d9731722d12fcc42bf40c5ff7a8e1746d096c182fe92437d2072
-RMD160 (NetBSD-6.0/pmax/INSTALL.html) = c40efcbd9facf5dce4471b1adf725830cd53b934
-MD5 (NetBSD-6.0/pmax/INSTALL.html) = 140966d090ff98ea58dc24cf673a5e11
-SHA1 (NetBSD-6.0/pmax/INSTALL.more) = c737caf24e7e33dd11ee48d0f0b1c0ec2efe8010
-SHA512 (NetBSD-6.0/pmax/INSTALL.more) = e014f63f15cfe131b38adf13500caab4ba7d43a7dce6432b2d688e916c3939ac851e5cb9af544db231cf729e5e39f223b1a73cff5ad66a92714aac71546c863d
-RMD160 (NetBSD-6.0/pmax/INSTALL.more) = 3d69b81b9dacf7933a2b0e9c76568f9ccd212330
-MD5 (NetBSD-6.0/pmax/INSTALL.more) = 7aae0fb416c11b3ba0558595afc3af37
-SHA1 (NetBSD-6.0/pmax/INSTALL.ps) = 64b1af6366baed6f548759b6a09fdbbfbb85dbf2
-SHA512 (NetBSD-6.0/pmax/INSTALL.ps) = ec6c213be8ee3af8e2720fcce970c9e8d5e220b1b94ba5f1ef1d8fd4a4c1ae773d522e077e28aadbb4c78a814ea4c06e2f1a915de8e8628f2602cd8705ff786a
-RMD160 (NetBSD-6.0/pmax/INSTALL.ps) = 17eac5c26ecf0947848d6742ba0aeb54d5b7ad21
-MD5 (NetBSD-6.0/pmax/INSTALL.ps) = 242d97c9cf75db873cb975d2788a24c5
-SHA1 (NetBSD-6.0/pmax/INSTALL.txt) = 90f4bfa985417eff921768c47ffc495b066292f6
-SHA512 (NetBSD-6.0/pmax/INSTALL.txt) = 36a7a301319525765fa1ae6c4d73b93c02b59a6f532f0dd1f96503a330daf0ba903f97df81dbd906bd54f83a83332efb28a8450d3a99ec5214abe0ed5369041f
-RMD160 (NetBSD-6.0/pmax/INSTALL.txt) = 02fe56f81cd11b4c65a13da0868e887ccfd7d511
-MD5 (NetBSD-6.0/pmax/INSTALL.txt) = c6a7c6addcfbd8f1b1bc708946065b52
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.symbols.gz) = 4a2e47a10e1c8913a04a5c574a0f09b82540b23d
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.symbols.gz) = 07c86d3b4d188d94141d181b1828e0548bf1e9597c6b470e7a35c787e7c830905fdc63ea4c8ea3f8310378f2e2bb55097c915d1785379d30c12861047d95af12
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.symbols.gz) = 70b4600b73a7d8b937790bb9d69c68e82fdf559f
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.symbols.gz) = b0f9598d18b5ff0081a3dcc02e4ae185
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-GENERIC.gz) = aadff547ddd7061ee0fe0c72833b691eaeae554a
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-GENERIC.gz) = 57a25d74b982bbd519271f24456cd5de583e9e5c7e2ef7d8850d6aa64fcccddc9a2e6545c3ed7323e087d04116c2c78ace5b427b14fc3542435ba3bb9497e4b5
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-GENERIC.gz) = 9a642cc44881b1f2b6049710d159f7a4ffa0f25d
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-GENERIC.gz) = 2a37ae4ea5cdc2702db0dba34cf7be3c
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.gz) = c138618a1e3ab93778033de4e66966f08e047d2b
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.gz) = b4045a71215ac632950cae3022d9d2d7ce9af9d225ffd8a0e775093e934cc4b0492f1e95167bcb7bc245bb9d5f3390de974158b0d0ea8146fd54bc40199ed10f
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.gz) = 5a2a9371e99acf25730bdd8e9826afc16257560b
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.gz) = 3aaa4706000b77fc8078bf2dc572c746
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.symbols.gz) = 1ef4af8edaba52436270f4eabc0549fd8c57767d
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.symbols.gz) = fba7441719c1023b2719179ad017ac8e4c7a99499d2152ce75dc54014cfb55eecd0bb50e549ce976e1a5d58b420cd60416db364ed8633682a7c9c66a22af1329
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.symbols.gz) = 428a02bccd74b8b6462a0ec5ecfebab5a9576def
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.symbols.gz) = 901fb77c124b0ba7923d535a65a06fa6
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.gz) = ec4f1dffaaffea221d480df7dfe89d7a129dd9b1
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.gz) = d5ee09d3d063a6a816b7fd0fd3fa3d0251e1b056ec75368bf557e79836afc0292274d3642d9afedbfb4893a4d4cca97e4f1d0d859db60e3a8b644d9826e57d94
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.gz) = 0bfa88f9965abca2ffa342158b4e1621183887e1
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.gz) = 8d52534cc5095a06286d6644f2ede176
-SHA1 (NetBSD-6.0/prep/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/prep/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/prep/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/prep/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/prep/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/prep/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/prep/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/prep/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/prep/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/prep/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/prep/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/prep/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/prep/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/prep/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/prep/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/prep/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/prep/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/prep/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/prep/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/prep/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/prep/binary/sets/kern-GENERIC.tgz) = 7ea9bbc043530351e4dfc3ac54ce19938a412ec4
-SHA512 (NetBSD-6.0/prep/binary/sets/kern-GENERIC.tgz) = 0123955eb6ead53c99c21e1dcd5b17f62f228c35e8d17c9f540291f0022574e2ae331a9aebc2ed947cc0cabf439fa47c59e8f820eb8e5241b6446eb79c11bdee
-RMD160 (NetBSD-6.0/prep/binary/sets/kern-GENERIC.tgz) = ef4531ac387b909f96b2cd3079ba8f12ecc61aa9
-MD5 (NetBSD-6.0/prep/binary/sets/kern-GENERIC.tgz) = 3d31ea9358a8ba0d7cb49ae1baf77e52
-SHA1 (NetBSD-6.0/prep/binary/sets/base.tgz) = 586f23dd6c50c12204650c92632bf016c9e4d57e
-SHA512 (NetBSD-6.0/prep/binary/sets/base.tgz) = 712c63416a188e041d85155a36248e5580df0aace895b045b9a2a6cb68f5cb80315dd7f731e5a79139ee19d670c7278e44561336e1224c56a71f89ece1aa79ac
-RMD160 (NetBSD-6.0/prep/binary/sets/base.tgz) = 11a21367c332428fc4e855764763276bae636fb3
-MD5 (NetBSD-6.0/prep/binary/sets/base.tgz) = 8d8b79b420ca775f8a7f33a109e40f0a
-SHA1 (NetBSD-6.0/prep/binary/sets/comp.tgz) = 2ecb14f0695750113144390d254e685c1c41331a
-SHA512 (NetBSD-6.0/prep/binary/sets/comp.tgz) = 7f8528e32862466f82158d4a60e46cf04a9c451b13655d2f25e929bf9df3dcda5c90e1e491457be3a82caea35cb2cfafdd307286e82bbddc466e8b929f44c322
-RMD160 (NetBSD-6.0/prep/binary/sets/comp.tgz) = 8ac4b55abc59b0089485a58d43d304c23dfa7519
-MD5 (NetBSD-6.0/prep/binary/sets/comp.tgz) = 7dc818422b8bdb702d921d284f0f1246
-SHA1 (NetBSD-6.0/prep/binary/sets/etc.tgz) = 56d8194e33b3ee4a1c059b1435e89a915add1275
-SHA512 (NetBSD-6.0/prep/binary/sets/etc.tgz) = 4b5eb6c9222bdcc591d9e6ad9e0781fcaa6a3bb981fe7d5f4b7137ec8df902b9fb979ea419db313dc1a823dbbdc284204b46872516d8f801f18854f75da74d68
-RMD160 (NetBSD-6.0/prep/binary/sets/etc.tgz) = 4b2fb8d900c22be6844c8931cf4c660954d123e4
-MD5 (NetBSD-6.0/prep/binary/sets/etc.tgz) = 553a0fb84d187ff3c420d5b5dc7287eb
-SHA1 (NetBSD-6.0/prep/binary/sets/modules.tgz) = 60eb72b005b0e80f397d42ed5d78fea15e867a1c
-SHA512 (NetBSD-6.0/prep/binary/sets/modules.tgz) = 98ef7da109a52a1814d3a7ff1c6377fd30140cc9783a919d6b3331226b1ea3c7b168598fb3102533637e24ad48be9f265063c0a55043e6614ae5959a56ba0aba
-RMD160 (NetBSD-6.0/prep/binary/sets/modules.tgz) = 214a8c4490e3ba6d6a4861d19bc88700de79a2b8
-MD5 (NetBSD-6.0/prep/binary/sets/modules.tgz) = 775b2278852b97f68453f62cb4a1fabd
-SHA1 (NetBSD-6.0/prep/binary/sets/tests.tgz) = baf4e3d6a0237d7eac65eca2d3e571ccde49c97d
-SHA512 (NetBSD-6.0/prep/binary/sets/tests.tgz) = beea30696935343ffd119c696e826a617a189dd4e9be2a08f468207f0dfa518af4164a1c0bfb6e8d796f609888ef2e1c8d2b1481c58309cd3077cf361118052a
-RMD160 (NetBSD-6.0/prep/binary/sets/tests.tgz) = 8547af5c43e56924032b7b7205c61c7dfb90c018
-MD5 (NetBSD-6.0/prep/binary/sets/tests.tgz) = fad9ca518beadf4a15db6b0aace1d019
-SHA1 (NetBSD-6.0/prep/binary/sets/text.tgz) = 265ca8e29442ca31af66219963a9931d7f71fcd0
-SHA512 (NetBSD-6.0/prep/binary/sets/text.tgz) = 50cd104f35d738fded65600514abc46f96dbcc010f13cade2131a3aad0feb7cf1208360d5869114ca13276096a83e4960ff2f342c1c58b04c26232bc23a8d950
-RMD160 (NetBSD-6.0/prep/binary/sets/text.tgz) = bf0370ee7934a80fdd3dadfe68b2124a7d1a3784
-MD5 (NetBSD-6.0/prep/binary/sets/text.tgz) = 2305e5d5fe891fca62f8500eaf7e32ec
-SHA1 (NetBSD-6.0/prep/binary/sets/xbase.tgz) = a9c6040c6de18dcf42371b7eb0eaa88cb005f1e6
-SHA512 (NetBSD-6.0/prep/binary/sets/xbase.tgz) = 2f5640b41005ccc6b989454a60ae68f9637d701aca7e62a0c5f9965efda0bed43891a239be22ef2f837d0769ce54a649b9e357a920f007778e182d7362feb3e3
-RMD160 (NetBSD-6.0/prep/binary/sets/xbase.tgz) = b171d2bf07e02360363a642a9ccf6b624bdb85cf
-MD5 (NetBSD-6.0/prep/binary/sets/xbase.tgz) = f1029043dab956ff0864f197dc1c0875
-SHA1 (NetBSD-6.0/prep/binary/sets/xetc.tgz) = 3d9da3ee21149017269ed1870b2c5c1096e9ed50
-SHA512 (NetBSD-6.0/prep/binary/sets/xetc.tgz) = d971316b80d139e87b2f7fa47f64ecc41a6285e002986165268e551b0ab059ffa332b9e9278b1e86d60829dac01f8c7cdd3a36f047f0e4a50469046456dbce46
-RMD160 (NetBSD-6.0/prep/binary/sets/xetc.tgz) = e6a7c17de4ac3a609498d8005165277e34f40b8d
-MD5 (NetBSD-6.0/prep/binary/sets/xetc.tgz) = 8ad7ef8013d48e0ca196e8fd2a4fd0aa
-SHA1 (NetBSD-6.0/prep/binary/sets/xserver.tgz) = 16190128b64666ba44729a72387061d80fd14c1e
-SHA512 (NetBSD-6.0/prep/binary/sets/xserver.tgz) = 8f9b3a559b5b53dc2161128db89509e12bb3adc951dd51141212c5082e3afc19b6bd5d960900e7986c72a6ee664ebab7473e2119657c1f34cfebb05737655b6f
-RMD160 (NetBSD-6.0/prep/binary/sets/xserver.tgz) = d62cfac8d16c1e56e866fe621b3cb5bbace44d07
-MD5 (NetBSD-6.0/prep/binary/sets/xserver.tgz) = eafffc08a401b7b8e92e47968dc8faaf
-SHA1 (NetBSD-6.0/prep/installation/floppy/generic_com0.fs) = 7bfb784953be9b7b783a4d7927b8795441ec6096
-SHA512 (NetBSD-6.0/prep/installation/floppy/generic_com0.fs) = 59567fa24b9801e9aaba2fa0b85245b3c1a34894e6f2f58c39877bdb3053b3e21cce4cad703d60626466a2c0d2cd75715919df4a3acacefa627d19946123a840
-RMD160 (NetBSD-6.0/prep/installation/floppy/generic_com0.fs) = 0614c7375a11ffba581e95ea182aef3b59f7f624
-MD5 (NetBSD-6.0/prep/installation/floppy/generic_com0.fs) = b93c25c459836cca031a48a788ac7c78
-SHA1 (NetBSD-6.0/prep/installation/floppy/generic.fs) = c4d629bee0746f9d60ffb5ee501e4e9e73ef3724
-SHA512 (NetBSD-6.0/prep/installation/floppy/generic.fs) = 4df78c22f6a3d4ad414bb85ff6305a0d5caa97cc88375f3bdb2f3872e8103135f5716e72d564fe5fd3b7c1dbf7353f5464317ca30feb7187599186320da0a912
-RMD160 (NetBSD-6.0/prep/installation/floppy/generic.fs) = 7e34800d3411adb3862a914554d3ad27f7775e02
-MD5 (NetBSD-6.0/prep/installation/floppy/generic.fs) = c40503911a43d7bb98c5a5224c776666
-SHA1 (NetBSD-6.0/prep/installation/floppy/sysinst_com0.fs) = 3d67fecfe7d82c9cf7479152b092bd106b87f2fd
-SHA512 (NetBSD-6.0/prep/installation/floppy/sysinst_com0.fs) = 929443de2610ee9409ed76468aa9645a917bdc03366267e8483cc83bbcecb35208acc06ef0d2520d389b408b566c113f5e6b71f5568a7e1c029532979221682f
-RMD160 (NetBSD-6.0/prep/installation/floppy/sysinst_com0.fs) = 51197c7d8ae21a29cf54064c3cf11f8d1eeef956
-MD5 (NetBSD-6.0/prep/installation/floppy/sysinst_com0.fs) = d1e27f1504e7dfeeab0714332e89fda2
-SHA1 (NetBSD-6.0/prep/installation/floppy/sysinst.fs) = 47998496e145c48564efadaf91f3ba4aede44ccd
-SHA512 (NetBSD-6.0/prep/installation/floppy/sysinst.fs) = 6688642f8ad525611b7757bfaa63c958abc0cc1f0c17219df85055c7d97c20896156a543992bbcaf08bfe1bfe36e112e8c8af8610c971585dffa27ae2083d410
-RMD160 (NetBSD-6.0/prep/installation/floppy/sysinst.fs) = d674830e0387841948abeb5e194ab60d9ab942fd
-MD5 (NetBSD-6.0/prep/installation/floppy/sysinst.fs) = 3164ba344aa2283cc7aca4efbd627dd3
-SHA1 (NetBSD-6.0/prep/installation/floppy/sysinst_small_com0.fs) = 2614d29a10f74be3e6ec6563046d2129976f3e1e
-SHA512 (NetBSD-6.0/prep/installation/floppy/sysinst_small_com0.fs) = 061156a6e9e1f9130d9ae085838526f027f3f4263ed03ebc3b5a4532e75243715bc554e4a0ad307401c792f35334d79653642e0d2e1e438dbacc246cda1a92fc
-RMD160 (NetBSD-6.0/prep/installation/floppy/sysinst_small_com0.fs) = 58ef2e610b17686a92958917250c4252bf2d2530
-MD5 (NetBSD-6.0/prep/installation/floppy/sysinst_small_com0.fs) = e1b821660c4f9a7b22a9069631fcefcb
-SHA1 (NetBSD-6.0/prep/installation/floppy/sysinst_small.fs) = 73f7d288f4026018498e79c14d362eeb5e25ef01
-SHA512 (NetBSD-6.0/prep/installation/floppy/sysinst_small.fs) = b65d0794537f5dea1b2a3d6afbd08b85d6d97193a6f0c69928b2edb3fd90c1202035df882878e8f45ddca7214a1abd28e312ab6c334a0708bea0daa1a2686a94
-RMD160 (NetBSD-6.0/prep/installation/floppy/sysinst_small.fs) = b40f136693485d517b455f0443614a487904776b
-MD5 (NetBSD-6.0/prep/installation/floppy/sysinst_small.fs) = 3d605afd5b9a7b57949f448c43e8274c
-SHA1 (NetBSD-6.0/prep/INSTALL.html) = 2674ff3a673f19a61cac4e2877a5656f053b2a3f
-SHA512 (NetBSD-6.0/prep/INSTALL.html) = aabbf165a39dc0207f39cfd27508821de8e50d26892baa27daf1a9b1a01841777fa59a147baa2fc082ebe5ee1f7cafd27674ea44c3e9410179bfbafb33130b49
-RMD160 (NetBSD-6.0/prep/INSTALL.html) = a818880156d01aebc4c92e2e82677fb0890e92c4
-MD5 (NetBSD-6.0/prep/INSTALL.html) = c716d934eb76805dd4acbd677ef13fe5
-SHA1 (NetBSD-6.0/prep/INSTALL.more) = f408ad8a753e682120f22e8763d9e20d8eeda7ed
-SHA512 (NetBSD-6.0/prep/INSTALL.more) = 0a27fc0b1bc6bdf44bc2aced239066f13e352ff248d8ed50d430e676bba3132f26ba807259fda765738bc915a6765fab2fd2e97e04b0166a50cefc4c88de38d2
-RMD160 (NetBSD-6.0/prep/INSTALL.more) = 5cc22227f3a244681cc352cc364650ad683c2fc1
-MD5 (NetBSD-6.0/prep/INSTALL.more) = 69c4b26606cf1e071a451c5afab13cd0
-SHA1 (NetBSD-6.0/prep/INSTALL.ps) = 9ab023c53af56e033541d6c27abf9b666b3f6a06
-SHA512 (NetBSD-6.0/prep/INSTALL.ps) = b68f21d8587797e750a6eabe92273481a396bf68d62e300e6e07139439144660d1e8769404b109759707bccf02a97b27fde4aed219f2b760e9e1f65c0b8c7016
-RMD160 (NetBSD-6.0/prep/INSTALL.ps) = baf09ab6b65aa90ca2f415e4428e21edf2d6d7a5
-MD5 (NetBSD-6.0/prep/INSTALL.ps) = dd269cf99b1eb54e0f7c376c10330ec4
-SHA1 (NetBSD-6.0/prep/INSTALL.txt) = 38f3b013b2b744dd7e21df3db8308dad808e45cd
-SHA512 (NetBSD-6.0/prep/INSTALL.txt) = 2a42b7a45500710fd4df5f3883f8fef5aac4416c41a54c532ce358255541fbf3cd1e5ae03863f1721d845c82caab792d5c8d85feba2cd87225edc8f5606de585
-RMD160 (NetBSD-6.0/prep/INSTALL.txt) = 71583c4ea3b65f1e17ccede286d6025fb6f281cf
-MD5 (NetBSD-6.0/prep/INSTALL.txt) = 15bc48222a898edd8de0a70f559c4a4e
-SHA1 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.symbols.gz) = e7fddbe9a6fe76bfec3ec556acf83101b6b1b27d
-SHA512 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.symbols.gz) = 7a96ad902221852bdbc290707be328b8374e69d7339165e8af54a65abc17707a1177c2534306ba28e066eaca2eb1cd9bd76fcceaffef911926dacd88c22e3edb
-RMD160 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.symbols.gz) = 3f5d25d432d08fa0458c087a3928d3370e60d080
-MD5 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.symbols.gz) = f7adcf576fff9a965730d8cb07b677c3
-SHA1 (NetBSD-6.0/rs6000/binary/kernel/netbsd-GENERIC.gz) = 3786662f4c42751a4ad0475d5b7674ba8ecf6113
-SHA512 (NetBSD-6.0/rs6000/binary/kernel/netbsd-GENERIC.gz) = d0ecc5a21218668d185cc74f70ccd066dd08c39ca5e092966623857e7e0e0a9e0d350a055e8f54ed96a046e970ac6e8fbefe3aca12f8cbb238a1240858353dfb
-RMD160 (NetBSD-6.0/rs6000/binary/kernel/netbsd-GENERIC.gz) = edfd5c086e4207543b08fa1125d137a436a17caa
-MD5 (NetBSD-6.0/rs6000/binary/kernel/netbsd-GENERIC.gz) = d2909133467c780a0364052df6f5a906
-SHA1 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.gz) = 0588aeaa722ae0065f1e5d92187e088c75000be7
-SHA512 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.gz) = 53b6d6603b831ffbb5016ab99f61a20fad9900bbd76b18cd33608c499ad1d2b7a07dd3d0ea386bc27f1f9a8fe68db48691e128186cb4a810c82eca63e8e04e8c
-RMD160 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.gz) = 4bbcd396759fe15f6052ec4ebf5b1ab0d1780a77
-MD5 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.gz) = 2a0d673dd3b76fbdef31325f905bf6f2
-SHA1 (NetBSD-6.0/rs6000/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/rs6000/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/rs6000/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/rs6000/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/rs6000/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/rs6000/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/rs6000/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/rs6000/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/rs6000/binary/sets/kern-GENERIC.tgz) = 953706a28ce3b7a195c738f805b6ecf878555e93
-SHA512 (NetBSD-6.0/rs6000/binary/sets/kern-GENERIC.tgz) = a699aa0db691fd82015721bf9aab0b201574798731a795112cbe358a61f7fc3b4b1b0540abd25fc52b4c44692b81c4fe400dc6f90315d97563c32c1e2ef12a27
-RMD160 (NetBSD-6.0/rs6000/binary/sets/kern-GENERIC.tgz) = 697ddaf6582c2712860f4c5abd80537b50da0059
-MD5 (NetBSD-6.0/rs6000/binary/sets/kern-GENERIC.tgz) = 6d7ea95cdb07cb265eda9f09ca484ac9
-SHA1 (NetBSD-6.0/rs6000/binary/sets/base.tgz) = c973cd9af8b007e754b99ead0517ab7bed7d3fa3
-SHA512 (NetBSD-6.0/rs6000/binary/sets/base.tgz) = a82112dc5f53f010f6c259a543502b6a0d90259169233b2b043786cfa677ace8ed63f648dd738cc08730d6ac35233a2b1b60cd606222f399546b5f0a61488656
-RMD160 (NetBSD-6.0/rs6000/binary/sets/base.tgz) = 0e84db039067d0ee045bdae56557595dfeb51935
-MD5 (NetBSD-6.0/rs6000/binary/sets/base.tgz) = af2472e60e90aafe55028b419b776975
-SHA1 (NetBSD-6.0/rs6000/binary/sets/comp.tgz) = 2dcac8a8c80d565b5373277deec9a67aee293370
-SHA512 (NetBSD-6.0/rs6000/binary/sets/comp.tgz) = b6b94000d67080ab3ff62768c3afa85ee4a63a0ee62440648bb8c1728c6e4df9b72cc13927e012d9eee0a73792f2ce5e22d6c9d86eaa7c4a6789643177b44371
-RMD160 (NetBSD-6.0/rs6000/binary/sets/comp.tgz) = fc6b3a3b6bb9613f29c50451190dba5fc7884df2
-MD5 (NetBSD-6.0/rs6000/binary/sets/comp.tgz) = e7c6fcfdf054fef00feececd660789ca
-SHA1 (NetBSD-6.0/rs6000/binary/sets/etc.tgz) = 302c5ba7b8efb24364748a665f5cfb824f6068b5
-SHA512 (NetBSD-6.0/rs6000/binary/sets/etc.tgz) = 1ab1027b3082336f54fa330dd4d21924a42a4f76602d35bb2108229b745b305356c5f944247d0b9bfda63f66318a8ad6525eaf5af42cb3a8d0c3cf6e8b4d45b7
-RMD160 (NetBSD-6.0/rs6000/binary/sets/etc.tgz) = 21418d6a16eb9e779b5e6d86cc411c9ab531453b
-MD5 (NetBSD-6.0/rs6000/binary/sets/etc.tgz) = 695e526865e9cf18c91a35647fd75bf8
-SHA1 (NetBSD-6.0/rs6000/binary/sets/games.tgz) = 0a7cc1be35944ade7ef1c617e0bb5f1a60a891e5
-SHA512 (NetBSD-6.0/rs6000/binary/sets/games.tgz) = dacf177fc2affd7189a7cb7b166bf0b3f6b1a92cf1358f1dad2c5e364d28a7183f841befea024435b0f125cf4008741c26f98e5860ea3872d7a8c36e0e699430
-RMD160 (NetBSD-6.0/rs6000/binary/sets/games.tgz) = 2620719e3f39dc3137ebb8f47fcbe482d77ff5e7
-MD5 (NetBSD-6.0/rs6000/binary/sets/games.tgz) = 175c85d188b3c9b4922c4aaa7adc3dc3
-SHA1 (NetBSD-6.0/rs6000/binary/sets/modules.tgz) = a710b61251bc52c73e64a0254489fd7ca7fb766b
-SHA512 (NetBSD-6.0/rs6000/binary/sets/modules.tgz) = a39d57fa5428c4734bf521afdd1356df4213980a9180b4bb28731b5ff7c22b606b2b2189cfba9741cc98fa049ae01a26516c1096969f2b0b17d24e1d1112eb94
-RMD160 (NetBSD-6.0/rs6000/binary/sets/modules.tgz) = ebbd79b609edee28f4c8331d5dfef0e510f67d9e
-MD5 (NetBSD-6.0/rs6000/binary/sets/modules.tgz) = 825a589361390bbf9d409497e022b2ef
-SHA1 (NetBSD-6.0/rs6000/binary/sets/tests.tgz) = a0eb45c7b71306f6cacafd52bf8f7f06b9d5fabc
-SHA512 (NetBSD-6.0/rs6000/binary/sets/tests.tgz) = 4a95458b6a260485c6fa3d136abc9c76c6764f870d30bbf4f7c78c86233241366f84bc5cf7d7be0a3ccf49afd7f5c95e0f732d4164d6f32a01f953ac51a529de
-RMD160 (NetBSD-6.0/rs6000/binary/sets/tests.tgz) = 67ec4f342cf6d25a56f4b0b62675b12df01ae445
-MD5 (NetBSD-6.0/rs6000/binary/sets/tests.tgz) = 1ccae2c93acbafe1ffc9dc329c8a73de
-SHA1 (NetBSD-6.0/rs6000/binary/sets/text.tgz) = ec4ec898eb442d2f8d86aaca0ce5490c7dc1722b
-SHA512 (NetBSD-6.0/rs6000/binary/sets/text.tgz) = cbf687bd4d20115e4f993b08ed41dde158b39a0133af78503c41b3240e7f7aeef3a015594eeb423d6a8c7d74549646e06170eb7dee86d76919163083c81a27d9
-RMD160 (NetBSD-6.0/rs6000/binary/sets/text.tgz) = e638a4bf115fc0fa2e4ef7d5399d79597762b94d
-MD5 (NetBSD-6.0/rs6000/binary/sets/text.tgz) = 6e84e62deb9c45636b7047e88a6b1dce
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xbase.tgz) = 143ea7f8f94f52bf946db4dbf3fccb963f0006fd
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xbase.tgz) = 66442666aa2e6b9139ae8acf690e1c671edb34160977f786332b6f18c87d8be537160b4d8a114b48660a09cdb349890514b9cd6c3cf12a2f5c3e49e6ef070ed0
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xbase.tgz) = f28a5be274784cb9b35ca7c9a452e6fb1758562f
-MD5 (NetBSD-6.0/rs6000/binary/sets/xbase.tgz) = ba48685231270484c0e79da384a77a28
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xcomp.tgz) = 1b1dda90e8376c39a124f39cb8f09824e1d88599
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xcomp.tgz) = c53a3e10df7ec1ddc2687ebf299a37f0b721f83df64797b64968bf1ebf2cdf7becd0ea8505a6a77864e9119c8817aa78deccac0d198b9c815f750a248fdbd5ba
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xcomp.tgz) = 4d57950bc653c7030f7ccae430f5b00812f106c2
-MD5 (NetBSD-6.0/rs6000/binary/sets/xcomp.tgz) = 0cbd6372a9d8cc2488e23708a105f563
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xetc.tgz) = a1c99d1c17918fad811cf27b08625a0b1461f583
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xetc.tgz) = 567bf3cde35f4e54ad9875625c64895d28a5c8accbfb0d5339ca523a9192c312db7ee3c44f9fde3fb5a765839630d282fa59fbe483f5deed16811bb82d8bb3be
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xetc.tgz) = 263747682247c8c38b367970ff103f92d92b0fae
-MD5 (NetBSD-6.0/rs6000/binary/sets/xetc.tgz) = e69bc3b1b38e787aff9d1df386ac63e6
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xfont.tgz) = ebe1c8e3f81f06dc9a816b1ff31240517e9b102d
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xfont.tgz) = 11f0db11eacf0ee00ecafa091c0f9cee84402dcf44a4467d809355d464eb698ff805acfc3da5752b167a2398a1f1080c93e3ca1ed8f08a6129ffe4e4a2402da1
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xfont.tgz) = 7997ed31cdf3895e1fc12b024314c1b72d94be89
-MD5 (NetBSD-6.0/rs6000/binary/sets/xfont.tgz) = 9e4241f680bc0b0303a0aa682b61b1c9
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xserver.tgz) = e0f7bcff652a034a14b70eb608f9d48a21cff87e
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xserver.tgz) = 9838dce48efcde1f60ff163b1c5da7a19d414c730d97d8db7ed19ac77a52f27f2294ba24de75f15fd4d11a30a97830ca2f68b4311379505208025b2ea4913644
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xserver.tgz) = 9072c3c3519475c71ea42925c529ce5e323e9661
-MD5 (NetBSD-6.0/rs6000/binary/sets/xserver.tgz) = 997077c1eb372bf091c82bf06f96f7b6
-SHA1 (NetBSD-6.0/rs6000/installation/bootfs/boot.fs.gz) = 56e0afc45b285ce022bd561db40dcda0eb2fdca4
-SHA512 (NetBSD-6.0/rs6000/installation/bootfs/boot.fs.gz) = c88fa6848032305418c173e9bca58e76545523b762e5ef4f65bc84f1f820e5813a37dcd256af8b0352f5d6f6e1c700d888f5633d1ce58664cbc5886114aa5332
-RMD160 (NetBSD-6.0/rs6000/installation/bootfs/boot.fs.gz) = c575e56387f6956fd086bfeb5f85fed7a9fb4c27
-MD5 (NetBSD-6.0/rs6000/installation/bootfs/boot.fs.gz) = d47804a5227b204d2bea50e243a749ae
-SHA1 (NetBSD-6.0/rs6000/INSTALL.html) = 0f891193771ae2bbe138549727d4df583dc39a94
-SHA512 (NetBSD-6.0/rs6000/INSTALL.html) = 84b1ae87d5befd27db8ed74276b95a91228bf60a05ecf610adacbddc7905cebbfa3909eb6fe8bed0c8f31bb92112fad398f9d4594204057892a538c16861551e
-RMD160 (NetBSD-6.0/rs6000/INSTALL.html) = ca2e4dce100c234133c9da46ffb498d84e0115d3
-MD5 (NetBSD-6.0/rs6000/INSTALL.html) = 031cc1f873f6c8d6f6472b991915701e
-SHA1 (NetBSD-6.0/rs6000/INSTALL.more) = d86963437bc21fb0eb944b4562b79aefcec5c511
-SHA512 (NetBSD-6.0/rs6000/INSTALL.more) = 130cf1977b54ee32332c7c1a2f35e9c19c088753ad8755ce48965aebc1cc19cd89f37f073749ee5f8b84223a8e8b3fc4a68993e0b22d35663c5850c419a0c84e
-RMD160 (NetBSD-6.0/rs6000/INSTALL.more) = 7e35c4d92d61591cf32e7fc4f272734817b60eb8
-MD5 (NetBSD-6.0/rs6000/INSTALL.more) = 4bb3c03008a5857e2c1f7b30cd76f10e
-SHA1 (NetBSD-6.0/rs6000/INSTALL.ps) = 52af7c1bd8dc0f193c6ebaad3320a0d9b9c82497
-SHA512 (NetBSD-6.0/rs6000/INSTALL.ps) = 44c13947238205228eecd13b48642f68179745ae8441ed58db4a3e7103c431a86c86d9ca88d0f71c656f1f0d54e2ebed8b395dbe1a9a437ccac79f91df7ff56b
-RMD160 (NetBSD-6.0/rs6000/INSTALL.ps) = 545bc23ee542bce73f526bfb4184cc2b9314b0f4
-MD5 (NetBSD-6.0/rs6000/INSTALL.ps) = 06416001febd58f722bad81cc2a585d8
-SHA1 (NetBSD-6.0/rs6000/INSTALL.txt) = cfc54ae2bb8482e56b8b0e130285a78532b9772f
-SHA512 (NetBSD-6.0/rs6000/INSTALL.txt) = 9fe957ce5896aa3ca77bf2b62a785904d22b21250e1ed6a18ca0b0e68268ba76f314948e052a0bbea78abe78e95a2d5ca51bf70b7cde2d935ab802a1e276b888
-RMD160 (NetBSD-6.0/rs6000/INSTALL.txt) = aa823cc8082e6b246dc65bce012fec305a7d3ef4
-MD5 (NetBSD-6.0/rs6000/INSTALL.txt) = b47464cee8c76f0b619c0a70acca22ca
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.symbols.gz) = d09224835f9948e426f67e0008e9e40de1a39635
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.symbols.gz) = b130c4fc02e1783188dcb4b5a3f8fc88f4294cd331d3beddb039364aa8557c61cf050ccaf520fbbd8badeb018e1c676b589d6eff6a17189ae8edd3dc7d6f94d6
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.symbols.gz) = cb79e2871b79e109038c8b7e62ec213695e9aff1
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.symbols.gz) = 5f38dd4085224ecbd6ecae5e07a92e1d
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-GENERIC.gz) = c315b6db09ef1d0161ad647352d9983b72da2ba9
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-GENERIC.gz) = 27bf14f92d278fe7b4174cb265862fbd24c96a006f99e5d241f52fee928fdcaed13528f058d6e5cf78656ab7e0e17e974394a2dff8ab37664689ac8eeb457c61
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-GENERIC.gz) = 4aa32ba67c19f07cc67a13835b3773b2bb8178d4
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-GENERIC.gz) = 87054c981c0647f65a1aa363c3ad3074
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.gz) = b43de7e1f292d5d1e050668babd148e3310cbe81
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.gz) = 0c591bfbaab13c5c0d03a50e0914a97444f87d9513ea48a96fa84e05ea1bed95a63a7ae3cf77c5c71f79cf774f1d1eef2b866c6125173e97027882bb37c38565
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.gz) = 3bc37d3a7d32ba229944341349eee1d7498487c5
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.gz) = 1812ae09823196a8493b490db6d35829
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.symbols.gz) = 81f74ee4373718b36152d797c812097688ce515e
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.symbols.gz) = e26f69d2d4df43224e12a922b2d1602678db53a8f7f5823776047ed0f1106e6ffcbaf6d88a4101a75bd3b298737971a99d82b806f78e70a7039dc1e8c027a0cb
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.symbols.gz) = 32e0b167f67afd79e83b8b5da906e7eb9822640b
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.symbols.gz) = 31c633e475629988bf3addc50252b158
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.gz) = b857802c9d1b447b451a50601e7592b6c72208a7
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.gz) = ef8318f98fc351491b88805dfb1150beb5bac352b18504bbe4756fb9fc54b064ee442999e08fa2a0b82306e717dd100a8a45e02814c5a03d168f33d05c34bd1c
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.gz) = 4add6bd73eeaf1c25a9d732adad0e24304e39b39
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.gz) = 61015da4f88490480f8553e59599dbd2
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-KUROBOX.gz) = a2b339d5cb7d614c94341cd9dc8928597275fdbf
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-KUROBOX.gz) = 44b9aa3d91de2f2e0d1c3ec42000182ad97fde311c2bebed17f21fa2165e9f2d574a2fff2330d9f9c2534e595e78bf1eb25e605158e62bf9c65fa449d4d426ef
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-KUROBOX.gz) = 8548f8853cf766e38388c6f16da063334cb4a8a1
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-KUROBOX.gz) = 9b8e45e5e31d018a614b2f9f2ec67f95
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/sandpoint/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sandpoint/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sandpoint/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/kern-GENERIC.tgz) = 3120fc2c7bad39d27640482bb99222862238a9bd
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/kern-GENERIC.tgz) = 38c1992332ac419fa5e630965bf0bac621fbea752cdec3c147bafdff55bf8b24343913cec8e645b3170cddb071ed501781a47048be08d03c21154c7cf0e2ff6c
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/kern-GENERIC.tgz) = 3964f06ff1e895fe07b28c6758713c82cf0eec72
-MD5 (NetBSD-6.0/sandpoint/binary/sets/kern-GENERIC.tgz) = 1ff2a1c2e3cb2d7f2fd9a270d9cae445
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/base.tgz) = 9e8d3d9c03cbd6db0b99c34641dab20f5835b6bb
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/base.tgz) = 4eb8d796b52589cc4132777dbfeb5295ef44bbe83e1e7c804540d39b98dbf66d7b0805a8e00dcab835309c9a69b3ca518288e0992e53b773d588339da9bbe0ac
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/base.tgz) = 48e26330269decea0489889a395af45b39ad55ff
-MD5 (NetBSD-6.0/sandpoint/binary/sets/base.tgz) = 2f7c4bf56ff06bf89e9c5d49b1154805
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/comp.tgz) = 8f217e53da02ee1bf5445f76ccccd7262aaad680
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/comp.tgz) = 71a6e2221f054534477100908bb3ae686e88eeed96bc7d28920b39863d10881e6951d39011f65415d50c2cadc78874582a1d7f0505c29fbef25800003310febb
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/comp.tgz) = 8507052499e85b2c4d6fd985f3d0ddc099732443
-MD5 (NetBSD-6.0/sandpoint/binary/sets/comp.tgz) = cb3a0690211b22d68a64e941711cc03e
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/etc.tgz) = 6b44f637dd5d01718b446128da95e0bb37c1682a
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/etc.tgz) = 8795d966d0da1b5419f50e577036167ab6e5de5589080ed0ee6903e0d3b59ae9bfd2395d7951b2b38a025acc39daf302a3d22212e0a6ba94344889d7f99d9d57
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/etc.tgz) = df0e4d773d5a180fba5b21b73cb6aabdaec11487
-MD5 (NetBSD-6.0/sandpoint/binary/sets/etc.tgz) = c8ec3910d995970ea51634c4f126474a
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/kern-KUROBOX.tgz) = b4c7f1bc4058463ebb759d84f0ed8a5613cb3c44
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/kern-KUROBOX.tgz) = 50df0ca65f4f7ed454cc4176eb26b63df738d658536d63dfcacf8ea6def0cf3f4778d686b19ff4f5b32dd07e862f9b0d753ac34c93eedc21f47bd27a0ab5a7df
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/kern-KUROBOX.tgz) = a86947596f1a0b658f0cf664ddd67c05385efb56
-MD5 (NetBSD-6.0/sandpoint/binary/sets/kern-KUROBOX.tgz) = 30f2e8b4824b9cedf289c6cdd46df34e
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/modules.tgz) = 7c4b66eea61f3cd7bebee7421f78ddabdce86b26
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/modules.tgz) = db987ae1a97bcaec2085bec2e33c49a53dedad2499e91db24570b50b6f83cd3387e2be0fd6f23dd0611f676133c5fb524c06a4c42c864b41acd74b88e1a2eb34
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/modules.tgz) = 24ff5d8cba57c1fd9aac448c121d8b5446c3d7aa
-MD5 (NetBSD-6.0/sandpoint/binary/sets/modules.tgz) = 380e4c6e51bf10cf6fd605b12332badf
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/tests.tgz) = 45a3f3ff64bc425bfd332e018456252756b0b3af
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/tests.tgz) = 37a7200f8d06849b2eb8e82a19284edcba07a3445ffa40725f288d09eb4e6dba18856b97c64b24373c3c191343c64df2bb2cd5ea8b1367ccae239cb1db9755b8
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/tests.tgz) = ff0eaa5ae045658f2e34b26ee39f41fc03f40589
-MD5 (NetBSD-6.0/sandpoint/binary/sets/tests.tgz) = 19128cd2482ccb19f4486a6090b89d41
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/text.tgz) = 8f4f8a5d09b63477d2a051e2d628b512363ae893
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/text.tgz) = e24825ec69e7b195c384e0fc83bd56a39598721ee30bde5dafc433e24fbedc2e5555a628ec1df0427cff6691f11040e244abd2f8f518421cdf53a94aca7752c6
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/text.tgz) = 264071e66052088a2a9c93b7d030331aa64dc522
-MD5 (NetBSD-6.0/sandpoint/binary/sets/text.tgz) = 3a05d3c0c3a0074852621cc38b0afe82
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xetc.tgz) = 80be15e90a6779956ecd9acecae91936d1417c2d
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xetc.tgz) = fa0fd709723b8c3768f9797e34f30dc3cd8a16e3bf178beb883ccddf5041f196fe85828a32e3296c24f96a8a942927aac4587142705d7cd6ce8ffbcc6d4a2fda
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xetc.tgz) = 02d7f0088ce5bda4f14607ca80de273d00a82137
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xetc.tgz) = e285972d692807df05e4f96ac34ef6f0
-SHA1 (NetBSD-6.0/sandpoint/installation/altboot.bin) = 56c653262e9e672cd47728f06dbf1428a7a16604
-SHA512 (NetBSD-6.0/sandpoint/installation/altboot.bin) = 0ff15a1e8f4fdff1c97f5539c69c4f40e1bbec0ceb6d3ae0df8e6e472fa25dd1b44398135cff0995ca21389819fba455b70a59e2af6fcc817781e09b1b11a3f5
-RMD160 (NetBSD-6.0/sandpoint/installation/altboot.bin) = 7fd0c6c48de76b1fb04eb16a2cbd53531f67d78f
-MD5 (NetBSD-6.0/sandpoint/installation/altboot.bin) = a2b44c7df7a4199c917096623275d178
-SHA1 (NetBSD-6.0/sandpoint/installation/altboot) = 420331106c0a0f28c0cb27f39016852d65f47533
-SHA512 (NetBSD-6.0/sandpoint/installation/altboot) = 7569cc668f087aa5a2af3ed0f231cdc8a0364cf7f64fcb06b08b3aab17e3bd295bcc8f2c8175f1efe73a1e7cca4ba459d35e65872fa8436d729697517dedfe29
-RMD160 (NetBSD-6.0/sandpoint/installation/altboot) = ef26fc304a3f7bfa4717b03a4544207b44e2c382
-MD5 (NetBSD-6.0/sandpoint/installation/altboot) = a5c881881c99da3587d7db293ce8b453
-SHA1 (NetBSD-6.0/sandpoint/installation/altboot.img) = 9db4851a0e6349ca1ae912e60a329b8f250bb51b
-SHA512 (NetBSD-6.0/sandpoint/installation/altboot.img) = 2bfb5c17dcfa6f1619f398a6f994f57be2f2a5e5bee0d2542bfe076f46d13567cf5519ccbea8bc97962122073bcb002309509caa06eab11014ee85766d813410
-RMD160 (NetBSD-6.0/sandpoint/installation/altboot.img) = a140607e1b7ba43d76b22db739253f59234398bd
-MD5 (NetBSD-6.0/sandpoint/installation/altboot.img) = f007fcb1d420ec5ab2f662013f78663a
-SHA1 (NetBSD-6.0/sandpoint/INSTALL.html) = 87c1358b7dd97f4166607bc031ee8fd603d8a2c9
-SHA512 (NetBSD-6.0/sandpoint/INSTALL.html) = b27b71a7b9fe4a37e2ffe20eb09588a3e3aa1337aa7936c064a35752b02ff8b1f560f053206db9ddc4b0a7a5f9163f221dba4690c54f3791fdccdf791b1893ed
-RMD160 (NetBSD-6.0/sandpoint/INSTALL.html) = 790a76dee78dc46f35cf2b4f6078d699707d2adb
-MD5 (NetBSD-6.0/sandpoint/INSTALL.html) = b1a454f7901f9b043c6993ba09ce7e20
-SHA1 (NetBSD-6.0/sandpoint/INSTALL.more) = 60d0c93b382dfe57cc87c292f3cb53f66bc0ef7e
-SHA512 (NetBSD-6.0/sandpoint/INSTALL.more) = 6b1ac0a4e00aee1bcf54d434b02b41102927bb125be551b0cf8cd25016104b3a03f3bf40506bc6076ed3af4a8128a81f733d523e5ccc3679cd8b51bba105cc27
-RMD160 (NetBSD-6.0/sandpoint/INSTALL.more) = 46c78bd1d9df63eeed2f580faaabbac38f5757dd
-MD5 (NetBSD-6.0/sandpoint/INSTALL.more) = f317efc426b562d069a20655d45d361a
-SHA1 (NetBSD-6.0/sandpoint/INSTALL.ps) = f67cac326fc01aa5d0e47013afb174ce0962a46b
-SHA512 (NetBSD-6.0/sandpoint/INSTALL.ps) = ab10cc2d28735af2a34ab85a4c84d7da346375a964a65ba9a328cd93b4b55c6badba306bd7093be08b662695d8ad82e96c4def014a7bac3f711767c9b741c33f
-RMD160 (NetBSD-6.0/sandpoint/INSTALL.ps) = 5db8cd9595e21ecf5132a9bfb2574aaa01260515
-MD5 (NetBSD-6.0/sandpoint/INSTALL.ps) = c36aec246e63cd311c87bdd6ff54f28a
-SHA1 (NetBSD-6.0/sandpoint/INSTALL.txt) = 545b47f56ca866c03078d60d49d3276d4d000648
-SHA512 (NetBSD-6.0/sandpoint/INSTALL.txt) = d7a925733a465005a83a915d9c58ded20149a6118013493b687c7b0ef2e816d8340631828ce1ec7ca13400c0d7a2dbe86c4fed363baf84ba288cb57a47384f89
-RMD160 (NetBSD-6.0/sandpoint/INSTALL.txt) = 1a30cf24c59bd8394d8748102ceb9027d81d66d1
-MD5 (NetBSD-6.0/sandpoint/INSTALL.txt) = 25fb074abc8d6bd5c9aec25dcf7c3667
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/kernel/netbsd-GENERIC.gz) = f23f0dec597709dddd3a0ee1d355f7beb9110b46
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/kernel/netbsd-GENERIC.gz) = c07b4b1360396b00184b77c19fda5ddb4463eef2fddf2c9ba43cbc4e7b0548e79999928db4f662046f73e282051bef9912f497c91b3757d60a1a11a520c3703f
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/kernel/netbsd-GENERIC.gz) = 22b4ec375839d277a7cddcfdf9df0a122a9cba19
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/kernel/netbsd-GENERIC.gz) = b4ee3e5e49f3bdf6fed5e7f9028fe2f1
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xbase.tgz) = d81c7fe75a90f1b2111a066e78f1f2b3e8edcd8c
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xbase.tgz) = c241391fcde4a685a0a2af6f843844ac2e918024c447a2b5ea2cf5300f69acc42fdadf53d3b0348f10723b786bcc0f420e68fe36228375bf3cb5140de41eb40f
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xbase.tgz) = 2fbf60b64c0b7ac2be72ebf998d9d7390fc40705
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xbase.tgz) = cd23ca0f6b359c4d695d4494a147d40f
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xcomp.tgz) = c8f5ff5ea9f9bbe231f92d8b7f3bfcbd2897069f
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xcomp.tgz) = c7590075195019078b68ec5f87e36479ae2e7b7749c523df4ef21c9d881c343cda9f5c2bba897dd313329a76fe5c18e920d92827878d98ce08a7dc776352cd02
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xcomp.tgz) = bc60e267cb6e11b4a7305f8b7074084e179e0ff5
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xcomp.tgz) = 8e58ee51667def3bd015f79769c0d932
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xfont.tgz) = c551bd13179b9508c2e3a7e19cec323e8ba21844
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xfont.tgz) = 764527f2f3f4686759fcae3fd093f4e00f34e1249994126221a6f9afe73d4cf8ddfbe8b8311798da2ed38c52466a44bb26ea08ad5aab1c08eebcc9019b4223f7
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xfont.tgz) = b3a365bedf8b4a20f3920d0e33b9a42fce288953
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xfont.tgz) = adac8939da213a0195cc1d351f979199
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xserver.tgz) = 686f6e6d722c9676351ab058736f7077b4ebd2f6
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xserver.tgz) = 5c818f22edbeac7325228af99d6da6e44b5eb659c7c9fcc6b332071e97a0a490081eda7f9e0f22d6a3f3a589ae34179b434751a6191db5c664683d7510aecedc
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xserver.tgz) = 0e9f066095b505c7f062bf877147189a7a2f0649
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xserver.tgz) = cdd2e5127838437df40af161e0c8398f
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/kern-GENERIC.tgz) = 3dee2d103b30c27015f41f351b45247d1f1067af
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/kern-GENERIC.tgz) = d9393724341c9d8036646fc768c21cb510aa4915555460753caded9c1f7a5355501d801e72ffb12e3ac1d25a57797b3b9b8c38787f7ae42906c6dbfecd0bf384
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/kern-GENERIC.tgz) = 9e22ac41f53032ad9194b1b0002c56c13211cf65
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/kern-GENERIC.tgz) = 6b9b0560a05738c70d580a25e0c5f203
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/base.tgz) = 61ec72dd34b2103b7b2f3228ee7766133a089c29
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/base.tgz) = 9aa13fa9008c18633f949ee74c5aaa5fa1d58d59459e48cf5f161d3f11e133a0cdaf7caa941a4e435076644ea799d7c9e73274267b18c3401866fdae5444f491
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/base.tgz) = ebc31ee01aa8cf119d20f5e084d536bcc610623b
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/base.tgz) = 828ed9e45442d989a4a5233b6523d82e
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/comp.tgz) = 705bd29c423e517e231920389f853990b8103339
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/comp.tgz) = 33d7feebe4ce7a3f8a4317c49f10f51e69e40374a9291c6b9e657f3e965d533702513b92dba0cba318a786f33fb5f275237be13870c093dc229d2c826a6b15ae
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/comp.tgz) = ea75f4ad366964a45cc5c8aac35cee5a56460d6a
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/comp.tgz) = e37746a52cc63d8d2992aef55484bb81
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/etc.tgz) = 9b4b768dc9d999330aa8fe804d604738fbabf650
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/etc.tgz) = 6e56a5122f29741aa02b651671d5ecdaef0adac94f52c8d550ab8a17352d3fa6755a87c13bd707d1a7f4259fef1c77e4ec85699cabb96bac5c47b82f2fdb6086
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/etc.tgz) = c2c3fbfe163cc38ff774413c1be35f0fee0b0c3f
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/etc.tgz) = 3d6d678755b01ec623ed215f7e1bbbc6
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/modules.tgz) = de0c98fc8b4bb81299edb50e3f99f222ac383dcf
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/modules.tgz) = c279717a8c4a6c66f3dff4e22d72466cf7b2c82070bba336bce5e659dc520c8c1fa1ef80f6f3154b665e0fb76dc2745ac8cf3996389209966f3976c36dc591c2
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/modules.tgz) = 80479a2131441999c8d251d822e00800e4f69b9c
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/modules.tgz) = cef9345e5430560c5955adee76e537c5
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/tests.tgz) = 92c135698d2030f4b378f18fc991c9f4efbcbf1a
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/tests.tgz) = 7fde9b55e820f169c4d1820d5b3f213f460c81bf892df6bff0ccf47ee73054c651c7277d956af77eb6f3d75648c7916be72d08dc3970601dc872662f009e9117
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/tests.tgz) = 38049cb62625ec093f26a53f6fdad2bce0b5a2ee
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/tests.tgz) = dfc74f3ea392e2c963257cb48926147c
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/text.tgz) = f8ddb7ac8fe765ad3760b3c00516f209f31ba211
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/text.tgz) = 9e8f6eb5da98c7c88d96d539e5379bf98f0d6726b84c5d4c2e1236d515d3cc31a4e1deedf1beab8335084f0c8d2795e8bef3391feff024d654877cd105254e03
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/text.tgz) = fc5441996f0f1650b41b80cdeacd377cec93c8ca
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/text.tgz) = 22ad03bdad15b336ac4f73bc31c29d78
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xetc.tgz) = f89ac267632b07b88fa020f09c395a6766a2b9b1
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xetc.tgz) = 59325ee391ab258e507fad56e2f38e5062c2ca15599c71ed06bd0373dfb109d61605dad949434d521d5ab9ea6139ee099919d485cb6d680d20b1bffc6881fd9a
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xetc.tgz) = 6e805117acfbb8c9af9eb6f105b15c11447faaa8
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xetc.tgz) = 3e113c15bdfceb0a896ebfcee6e75172
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/kernel/netbsd-GENERIC.gz) = 017c9fbd7101f94f65ae9f0a41a1a028a8bd3435
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/kernel/netbsd-GENERIC.gz) = 45e2aa91e69a575f02a48dd776cc7401f37e60905ffc986634f53829aabc87d2dfc52840fc92821a3611b61e728f415ac44ab19f73db85786962df64d87b60c6
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/kernel/netbsd-GENERIC.gz) = 56ea720eb521974e26c07d74f93fcebd6e67de91
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/kernel/netbsd-GENERIC.gz) = e5f16d9d0838695b251b809dd42e10b9
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/kern-GENERIC.tgz) = 8c185e51bf6d6c63d23ce62fd86e5f7bfb3d3845
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/kern-GENERIC.tgz) = 6f1a341b96a6890f1bfe68a588e74639caec8c320b72bac774f03d8f7e71d9198887b791e6528a10bd201bb14537e2f83a4e81aa402adc5bd57e4ada3c8022a9
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/kern-GENERIC.tgz) = 43be2a6c07b4b366d31b2b74ce7666d0337cb84c
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/kern-GENERIC.tgz) = 1ad137c19b7c2df8bcb8bfbe053466d6
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/base.tgz) = d0664b8cdc36b3e6b0381b6a9de9c7556bd383ef
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/base.tgz) = 737f1bed2c71e1473483bec24e7e48be28fca93e0ccb7e124661569d1960fa99bfdfc7f8e86bd3a61f744593346ef767b1ae2ed0c1e2fb9c5b421dd2b8125dcb
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/base.tgz) = 130c2d1408fad9b0c2e8c612b6d720a6c92674b6
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/base.tgz) = c2623377960d1a7fe4db1ffff70882f2
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/comp.tgz) = ed63cf25383b8110ece9e4cb4752fe762b636cd5
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/comp.tgz) = f699747ae04f024400653aa5bf5be624e4cd0bd92c9086ee8f89ce9327c5adb27e7cc53f1a85904b3e0f2cbbb49e45a3098fc803e131338a3100a56f1628218e
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/comp.tgz) = ca975dc6b36da0208cc2a79c346e74fe367ba833
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/comp.tgz) = 063da88eb27db9b012142fbec1707b34
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/etc.tgz) = a6430055b2ccc0d418f11c4eb5628d091998d4f3
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/etc.tgz) = 51a2c3cbb860e042c3ecc234e1e0645489a5546ccf0c87a2925f32c01dfb3fbc1dd088b4bc947cb27c731b9645f234e13fa9e805665be34aa3fe9318c51d12a7
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/etc.tgz) = a7c1913e10b8fdc44a191159b5b6278728bd8a0a
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/etc.tgz) = 690495c3b0cbba76f83085422161887c
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/modules.tgz) = 37c4fabb3a3edebf715572a4c7deca5c2f63508f
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/modules.tgz) = 2245821ee48c5a4a4c7ad378c2d726975b18a3f04b1e4cf04e78ee0c15855502eca0673b11420af837146c9003ec6c9899b815a37aef06632b9e8a00f4f95f0d
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/modules.tgz) = 2ae1af8e754811706b0d5633f2631a306eee664a
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/modules.tgz) = 3136834e1ac671cf35958f353e33d8c0
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/tests.tgz) = d3118b0c152c61b20933e5dc38272991b808fce0
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/tests.tgz) = ce817f1900de3b09a7b063abed50f10f78042f3000f1bb031963db7eb1666fb55b42ffcf446370b4ef2541ea86739e43c9bf0771aba86f5bcd62e6181975a62b
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/tests.tgz) = 6fe992cf685d12015118ce0faf06d77b241e10d6
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/tests.tgz) = d59a11116844dc6e6a754ab8676e30f3
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/text.tgz) = 82712c2413930b0726af1cc8e3d7f7183e789534
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/text.tgz) = 2681e2fd0973fa7573dd6a1746ba7c491956a82256a8522cbb65c267402ba700da71b0ce44c65269787385e596913ba1042eca4542e5751f55beaa2679d673d7
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/text.tgz) = aba3f473d85e3a8fd5ae41ca25c7433a22b11f36
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/text.tgz) = 0b2dbc9b54843ba81289bc994b3fcf7a
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz) = b1a8652e56663a63c6376ecf20ccf9f8f876a9e8
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz) = 3e4a01eeec83c7da8725badd449c51dcc677203373d1ca0725a157a6f9ebee86fa8ca7d66e1936420569e7152fe9bf2089764b94132aa04d61e36661ea0d1b32
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz) = ae01910e3901d7adf1b925f13b4520e46bce2917
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz) = 14b2804f6c6f16940d4bdda28c6426e1
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.ecoff.gz) = 532b94eea6032bf2867a860f78973c95b3baf210
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.ecoff.gz) = a3017e2f1bc7d008d45d53f3733ed573c18de5d44c2c7a1e969f2938119a5d6996c1eb913e7ef6b28cddfb2e6da4e4ddb6aaddbb9caa6c43b90d046f2ba396db
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.ecoff.gz) = bfbcc81a415674512ffdaa8ad7180d4499fd410d
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.ecoff.gz) = 01742badd90ac599c850ef5d7f98de49
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.gz) = 1040bc406f9543efe4f2a6c198d136ef45d0e9f7
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.gz) = 1bb8fe9e495603393f69f25ac5fe57d8f26e64cc1573af4088d3e2929d8043ecff721d38b0d4f3f6b6934661df6f6f2790d1d506ced6f8f21b57c1f1554e79a2
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.gz) = eece122ff5df495cfee6fafeba2fb086cce6623b
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.gz) = 8bc4a605a8cb06bfcf835aa4a5b16411
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.ecoff.gz) = 0fa0539d5bdaa751a71d3df4a573adb90d742cb3
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.ecoff.gz) = 4e94bbc422b322b6b250a8cdf31144cb97f6349a2cd075b8720497dbae36dc9f90d0b48da549bbfd3d7908bdf078cc95e300bde365df6e204008a0af85a5e7e6
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.ecoff.gz) = ec847458dd2c3b20dcd27d5bc14ced2601c998e5
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.ecoff.gz) = e74b65c6a2f141174323dfe40cc0e730
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.gz) = 2c863ba399e4aad44ef7b76dc60bcedbc112d1dc
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.gz) = 27c329497ed9ac49c096071c6250b01135b590b9d2f5d79366f53409b4abf9daeca15f323a35521b9a79f4264d5784e1d49dec269cc51ee0df52a686bf6fea88
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.gz) = 410dae1e4c4a5b3f2b9b000c413faa6ccedddd5e
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.gz) = 0538c7187f0c5778a89a660749018ccc
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP3x.gz) = 1968926bf27f4cb8f5fac47a22ed3327dfb52c43
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP3x.gz) = 0d5d484b19505ebbebda2daff665c43c77aa9e087946daf198684f7cba944f11e2dde344930e99ef4a24c02c6fb83009115b45a0100b955b0dc8450c00fc2f38
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP3x.gz) = 4194967cb2a542b818e0f4670e194e91c6b20635
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP3x.gz) = 2d25467ddd2b88d4110211ab86f1c77b
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.ecoff.gz) = 8bbc293222db73fb4be9015b07e05070c413de50
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.ecoff.gz) = 7c0f743299c829bea945e1f927dce38ad44b07f012949532d1e0f73bf3f44bb5931f1772db34b8598cb46b1e8d522c1de29e537105e8f4f1c10057bebaabe33c
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.ecoff.gz) = 4c67683e70c5c31659196601d15fc98de34dbd10
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.ecoff.gz) = e3cb87e4586bd5e1ec2602cf7767495f
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz) = 66a33c0bed49bb9e1dd95cb3c79f944ee56fea31
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz) = f3dfc078ef7e21741758b7e3ea76af80772a1d3218b0178ce825814bd16a895115df7122b394c58f63af6b2128e57a95064ae3fc44a5a3e56d8a03327bf3174f
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz) = c60e7094e3801d730f699b7a67c4403ced988c92
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz) = 2c406bbd7ec78cc4c97dcdc48ee476d1
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz) = af7722c589f536235fb6d25f27231a6a3eacd3c4
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz) = f7b6acf595cbb8e7a54b34b458c39c384ea0e3ce44fcd142c7f71cb08551b56624969872fde0f90614e40582bc45fa3e41be31de0de954ce43fcd34375cd5d04
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz) = 3b853ba98c7c4016aeec80103318c1147aa52ac6
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz) = 001d3d08526a1d35fe6a2d66baa59ff9
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz) = 9fef8eeac9eedbd6ce7744b13c0e14efc835c1fd
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz) = d4af0b7ffc0596e209e19161bce14533610fd414350b761a58873c16858c3f44f2bc20135f7f14ffc9458dbfc029dfebb998e19f02176c9718f6a6406ea5b262
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz) = 420fe89a1bf2f952113c22d083512456f98738db
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz) = 7081086c1dca701908d84d74c29fc81e
-SHA1 (NetBSD-6.0/sgimips/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/sgimips/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/sgimips/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/sgimips/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/sgimips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sgimips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sgimips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sgimips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sgimips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sgimips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sgimips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sgimips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sgimips/binary/sets/base.tgz) = d02636d2688644bf3230c10bf072000a44cd2f5a
-SHA512 (NetBSD-6.0/sgimips/binary/sets/base.tgz) = abc4fb8ba2047eb2c99070b0b7a22e29a071c44ef8ce3d896969648dfb6ead55d396e8a7c0716e34e45f51565c6e29011d0e35cb914cab4691c8672a29f24fbc
-RMD160 (NetBSD-6.0/sgimips/binary/sets/base.tgz) = f91ad6342293731972f28cb6286e6926b3de10e0
-MD5 (NetBSD-6.0/sgimips/binary/sets/base.tgz) = ff1da3a02630406282d40b75528def3e
-SHA1 (NetBSD-6.0/sgimips/binary/sets/comp.tgz) = 27ba59fd7d5e90f91446a151f804437f8c249e8b
-SHA512 (NetBSD-6.0/sgimips/binary/sets/comp.tgz) = f119dbb5c22cab49fdd8f0dec15407fa520d1d8eb02cb4550bd01f88d49378b4999e0041f6da8d4ee2bfa4712590a5345a184ead5a4b014d80c79c459bb34e3e
-RMD160 (NetBSD-6.0/sgimips/binary/sets/comp.tgz) = 9cf77a31c5419a857ccf19a148eaf510a4d83aed
-MD5 (NetBSD-6.0/sgimips/binary/sets/comp.tgz) = 2a2b72f824b9953fe580cb284a37c96c
-SHA1 (NetBSD-6.0/sgimips/binary/sets/etc.tgz) = 6140d0c55fb88e07b633da0abfd0d5a345eb908b
-SHA512 (NetBSD-6.0/sgimips/binary/sets/etc.tgz) = da25730f805732e0d4b90612dd9b5236f6fed96c75f022f4d1053495d897f7355b5d75b95f010b041795d6331285a2ab0ada3f34175b611147b295e697d54eb9
-RMD160 (NetBSD-6.0/sgimips/binary/sets/etc.tgz) = 79973e6b9ad3344bb4e64ed23a1ba9bcd16fb8a1
-MD5 (NetBSD-6.0/sgimips/binary/sets/etc.tgz) = c96ede97a5ce906a1fb580fc1dabbf94
-SHA1 (NetBSD-6.0/sgimips/binary/sets/modules.tgz) = a206108d50c0e8a138571adf8a674334de685263
-SHA512 (NetBSD-6.0/sgimips/binary/sets/modules.tgz) = bfb96bc27db44cc540d3ca143099e2574ca9a42eeea307eb3b835b624b52ebc14fead54754fb3d95916e6f4c2fecafcaedebaf28a32ec0c1e1b798caf9a7e44c
-RMD160 (NetBSD-6.0/sgimips/binary/sets/modules.tgz) = 9114bd11fa6c211d72726f5e88458396165a6fe4
-MD5 (NetBSD-6.0/sgimips/binary/sets/modules.tgz) = 8f298135900ed72db173ffa002c4103b
-SHA1 (NetBSD-6.0/sgimips/binary/sets/tests.tgz) = b10f0716cc4a705193fe7485de5b6123153a40a0
-SHA512 (NetBSD-6.0/sgimips/binary/sets/tests.tgz) = 79061c6367c51f6b0769e7ad724d440d055cefcc6ce1bf1730e602b2080af16be5a7f74a3c57391567dfb62f49588721bee5704d71039527c4269add0bd8420f
-RMD160 (NetBSD-6.0/sgimips/binary/sets/tests.tgz) = 869f46c688b7d65e6f93dcf06e4d406fea799082
-MD5 (NetBSD-6.0/sgimips/binary/sets/tests.tgz) = b02332c28d31942e96e416d4dbf2f6d8
-SHA1 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP12.tgz) = 18e386c5766aa3391d5d29a7d55ae1eb3b69af2b
-SHA512 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP12.tgz) = 8caad11aefe7fe71d346fbe3950fcaeb08a3454793e24f12c83b91c3078ef4e15f44c94cf47aa785e8b975f7403f0de2be38fa3ad3a48798e70efcdded5eed0d
-RMD160 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP12.tgz) = 8e7531be01ac24bab8b898224ae33df0e84d637c
-MD5 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP12.tgz) = 2f1a7076fdb72698d28a9d8032b79943
-SHA1 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP2x.tgz) = 4097c0cfecd7e8766e4542ffd936ac18fb9ed32f
-SHA512 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP2x.tgz) = 9595785d477c04e57b81e2dd71957dfc3309fad013b7210d93d2501e64c308b57af9a22581ac3e61d8f3ec91aa62d49bb01ed5ab1eaf90557f41c0d4d3c3096f
-RMD160 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP2x.tgz) = 2479e9e6495e16753c6c0e3e8dead0c49095c245
-MD5 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP2x.tgz) = 8661ec66f60bce4cb75af3d6756580c5
-SHA1 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP3x.tgz) = a5a29b61f5eba57e0bcdbd6af9ecfb9a4485a90b
-SHA512 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP3x.tgz) = 4a5c4ebea7ddfad9bf8f3536212eeed17f22dbd74a38b7f48bd7963c6c7c4f29da10ec6454053a441db830cd5c18a3a342b6ad22f5fbb9d97104b683b94685cd
-RMD160 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP3x.tgz) = 3bae9be1ed83ab2eeb80905c1e1bcfc59a4b6f7b
-MD5 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP3x.tgz) = e402bda170a73a296a773b851afa1a3b
-SHA1 (NetBSD-6.0/sgimips/binary/sets/text.tgz) = 11418c012b904e8a99e91493d36fdca3f6e6f006
-SHA512 (NetBSD-6.0/sgimips/binary/sets/text.tgz) = 501a9e78e9310aeb3f0c766464b5453e2718f23b5d3290428ad775977cd2a42b5444b91d7b1707ae9991b58af14f376d9d93cebdc54c74ea8d20ed06a7e0387d
-RMD160 (NetBSD-6.0/sgimips/binary/sets/text.tgz) = 272adf1723ad8ab137b985946e64ca3b27055199
-MD5 (NetBSD-6.0/sgimips/binary/sets/text.tgz) = 0f6d77a90f9714d54517c4b5660150fa
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xbase.tgz) = 0e912b46017d4afca665692603e483e95d627af5
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xbase.tgz) = 54c6bb297c09510019a0e21816018b7f8abbecd3e9dab5f5dd48d1cf35493b0cb0ec5ca01f1bbc9066fa1b964cf550119c1678a70d80d4471d9df73627655bb6
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xbase.tgz) = d8b979b953547c386cf66488db96771f3923cc2f
-MD5 (NetBSD-6.0/sgimips/binary/sets/xbase.tgz) = c04dfa38a56e78bf0d075dd4d333a869
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xcomp.tgz) = d764bc540d10ebb805e8c976e8b300d9c6a108e0
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xcomp.tgz) = a6795d24491875468bdabf17698ee483c0aaeaae64772667083049c7f2b2ae82943277cd41fe870c085ae7498f6546d971362d77e62f6150f40aa23f6b92d732
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xcomp.tgz) = 99f0489f322b26960b51a53e24fd03faccccc512
-MD5 (NetBSD-6.0/sgimips/binary/sets/xcomp.tgz) = d6e8029f965bcade40d027658ea70e14
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xetc.tgz) = bcbb9c22987ffa1ec653920c5013030fb974d73c
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xetc.tgz) = 7e2ad6276a043e98c194a03fc38f3754193c0f75bfbb79cc855bf08d7336d01763d7df89edb3ac63056a403d08e7e21b43a1b4468c34cb2969024bf5894988e2
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xetc.tgz) = 35c9e251920fa14e32a68f6d811ec8ef81a233b1
-MD5 (NetBSD-6.0/sgimips/binary/sets/xetc.tgz) = baf2f338baf24e78da645312b33eab7b
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xfont.tgz) = 43b823091c3c5b340538ecf7cbd17be47e6d5692
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xfont.tgz) = 63a18f59b0c2ef7eab2ba7526fe2815155e476426d34e21e06d2c00fc872cc01bc241704971524c9c6410f420650a7d69914205a45a1b232413e9ccbff2d6b93
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xfont.tgz) = 3cee7affdad412ed072636553915fab9f0d23ca2
-MD5 (NetBSD-6.0/sgimips/binary/sets/xfont.tgz) = 0be724043d9312d60c89901238982903
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xserver.tgz) = f604963ee4c952665400bd5742f6ac3925903291
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xserver.tgz) = 2f5d36f2f728aeed88a3a2e8da36acb3117018fe92f97769babe2b37670c0ad9cce319bded4a4c78d7859c12df4124fdb2faed33abaae1b4cea20098582ff99e
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xserver.tgz) = c18f29c81d11389a45b5c8a6226ec1e7c074582c
-MD5 (NetBSD-6.0/sgimips/binary/sets/xserver.tgz) = 41d79391ddbccae7930228219015083b
-SHA1 (NetBSD-6.0/sgimips/installation/diskimage/diskimage.gz) = 5acd23fd19ce75e45f071d5de6396668b89ea681
-SHA512 (NetBSD-6.0/sgimips/installation/diskimage/diskimage.gz) = 007da5ebfe4af418c4f696956cb768575b656dd40297cb39dea7b03146bf48aa22fe9f288325737b6904f5e08b89c79d60a375dce4d885fc83f3bb85595507b2
-RMD160 (NetBSD-6.0/sgimips/installation/diskimage/diskimage.gz) = d4fabae9c31423c0557937fd07cc796f48f392fa
-MD5 (NetBSD-6.0/sgimips/installation/diskimage/diskimage.gz) = 8575ffc5db9771c5aa948ab437c80e1a
-SHA1 (NetBSD-6.0/sgimips/installation/netboot/diskimage.tgz) = 075e8acd73646b2b89509714ba7ca7a001cb72a1
-SHA512 (NetBSD-6.0/sgimips/installation/netboot/diskimage.tgz) = e0dc8dfb79ee590decb7c315fd4b8cf7a55a2981a3752aeddc25afd83a79fd72d6852f9823ab857077cfe40c9619dc8b537ab1227c42441b43b2fb9129a419a3
-RMD160 (NetBSD-6.0/sgimips/installation/netboot/diskimage.tgz) = 4b4d8d21878765a902c28673fa2ff2fe62ccbc55
-MD5 (NetBSD-6.0/sgimips/installation/netboot/diskimage.tgz) = 250ed8b78bb6bc799d92f3e82d62003a
-SHA1 (NetBSD-6.0/sgimips/INSTALL.html) = 57dd965aef89b4c8190886a37ab3fff06021b8eb
-SHA512 (NetBSD-6.0/sgimips/INSTALL.html) = c1e5774651642601daaedef68c0337dbf8d634abddc9eaf8d33d38358076f49867df6644d0c8c7e8e730c2d37a2a35af9c7c03dbd817f5b4eae5d7383e900190
-RMD160 (NetBSD-6.0/sgimips/INSTALL.html) = a5c94dcca469b47cb176426a8cbd4c0e2df210e5
-MD5 (NetBSD-6.0/sgimips/INSTALL.html) = 7c4d8de6801d46c1dac589fc304590a5
-SHA1 (NetBSD-6.0/sgimips/INSTALL.more) = b9c2017ba93cbb87b7d0a88fd6912eb81a9b7ed7
-SHA512 (NetBSD-6.0/sgimips/INSTALL.more) = ca9a739d8c56336ebbfffb856904a4753e8948cf8c1a4da057f212cffaba7493c07467bcd0608923d1dc3deb76ceac989cc556cd025380ad1f80109a46aa6746
-RMD160 (NetBSD-6.0/sgimips/INSTALL.more) = 0e733569f0cd6acc3de8e7b3acdac89953e554d7
-MD5 (NetBSD-6.0/sgimips/INSTALL.more) = a43c8c4a3aea3585e8de329c8efef129
-SHA1 (NetBSD-6.0/sgimips/INSTALL.ps) = e61b0904bc556853037f1a9564486e0962a8b8e2
-SHA512 (NetBSD-6.0/sgimips/INSTALL.ps) = 122ebadac3919533845714c90f87c59a65722d6e79f50bf231866f2917e6d4ebcb4a8b5da8e4ac9acbe4e333e841611ef80665b7e69427db90d4843e5f630c8b
-RMD160 (NetBSD-6.0/sgimips/INSTALL.ps) = efbc102832be0cee24ce3a5810999c5ea9c4b18e
-MD5 (NetBSD-6.0/sgimips/INSTALL.ps) = e86216add5a2ed163e13a17c6ff291f2
-SHA1 (NetBSD-6.0/sgimips/INSTALL.txt) = 104c1ef873cfbe774ba106e437168053539b65b1
-SHA512 (NetBSD-6.0/sgimips/INSTALL.txt) = 8b5ad1ef07604c0e8ac5ec2c7f43a4c483610a7ad7ac4c15a13c4151652500a21b203569bcc9ecbb53e035f8b90e1c7e3fc81d985fe3817685957865fb4924cf
-RMD160 (NetBSD-6.0/sgimips/INSTALL.txt) = 7cc2ca6174d6b5e2ed23f8db3d6b62bb02c41637
-MD5 (NetBSD-6.0/sgimips/INSTALL.txt) = 99bca5bfeb2112666aba79a96379899a
-SHA1 (NetBSD-6.0/shared/ALL/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/shared/ALL/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/shared/ALL/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/shared/ALL/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/shared/ALL/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/shared/ALL/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/shared/ALL/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/shared/ALL/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/shared/arm/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/shared/arm/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/shared/arm/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/shared/arm/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/shared/arm/xbase.tgz) = 875fd641f969ec00f854ca1334d084947450c740
-SHA512 (NetBSD-6.0/shared/arm/xbase.tgz) = 75d0c9e9685b6b7bb706df7427c8b52f59c4fc4d0e725b02ee18024f75a546dc41de5f1a5d8552a8d2c84bdf87856e5857b0f12914801ca7b36b69536d617b4e
-RMD160 (NetBSD-6.0/shared/arm/xbase.tgz) = 1a4d099d59b2bd882e99f1b2df1c7bf22b890d48
-MD5 (NetBSD-6.0/shared/arm/xbase.tgz) = 5eb9c573c5a0c96701f268a3470a58b9
-SHA1 (NetBSD-6.0/shared/arm/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/shared/arm/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/shared/arm/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/shared/arm/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/shared/arm/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/shared/arm/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/shared/arm/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/shared/arm/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/shared/arm/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/shared/arm/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/shared/arm/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/shared/arm/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/shared/arm/xserver.tgz) = 4ccfef1d49179603286042088bec0218c6b2031d
-SHA512 (NetBSD-6.0/shared/arm/xserver.tgz) = 809fc0a9065c1b9e7cd17aeb0d41cfd3158efd6c585556af01c4a3c93f0df3646a2ff77c6994449a703a408c0988fc1aa68cf34c7e297a3056d73ded57034c12
-RMD160 (NetBSD-6.0/shared/arm/xserver.tgz) = 403604404261764c74f10fab774c4653fd20cc9b
-MD5 (NetBSD-6.0/shared/arm/xserver.tgz) = 914f909b6878cef16a92765a8cbb52ca
-SHA1 (NetBSD-6.0/shared/m68k/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/shared/m68k/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/shared/m68k/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/shared/m68k/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/shared/m68k/xbase.tgz) = ffc6dc889560371042dd12a5486a9a2c499b86a9
-SHA512 (NetBSD-6.0/shared/m68k/xbase.tgz) = 9aa2ba4d703a13020acf8543d1efcde76b6f0f4b411be20f804709b3802e537be1e651eba469830c4fd4777a379ea9936200a3a3eb4b1a702c04bb81aafcc723
-RMD160 (NetBSD-6.0/shared/m68k/xbase.tgz) = 3ecf53e7414ef859a47fe5afc108cf3bfa82fb1d
-MD5 (NetBSD-6.0/shared/m68k/xbase.tgz) = a6af002ce158cf72eb5c6a7cde2c0989
-SHA1 (NetBSD-6.0/shared/m68k/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/shared/m68k/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/shared/m68k/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/shared/m68k/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/shared/m68k/xetc.tgz) = d2ca34bd668e108cbbfd4b45720823663339f8bd
-SHA512 (NetBSD-6.0/shared/m68k/xetc.tgz) = 431ca465f300e7eb5d4dbd44c43e412a296fb4d3129217e752f86a720e8a8bdf736c9add05a45518a4f3e6cffa32381ef61e9186d360b68a5f8c64d87e385fb5
-RMD160 (NetBSD-6.0/shared/m68k/xetc.tgz) = 4c5d664679856b02b694534cd6afdf20597e6d53
-MD5 (NetBSD-6.0/shared/m68k/xetc.tgz) = 72bd67556ac14ea0ce147374af0ba624
-SHA1 (NetBSD-6.0/shared/m68k/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/shared/m68k/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/shared/m68k/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/shared/m68k/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/shared/m68k/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/shared/m68k/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/shared/m68k/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/shared/m68k/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/shared/mipseb/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/shared/mipseb/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/shared/mipseb/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/shared/mipseb/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/shared/mipseb/xbase.tgz) = d81c7fe75a90f1b2111a066e78f1f2b3e8edcd8c
-SHA512 (NetBSD-6.0/shared/mipseb/xbase.tgz) = c241391fcde4a685a0a2af6f843844ac2e918024c447a2b5ea2cf5300f69acc42fdadf53d3b0348f10723b786bcc0f420e68fe36228375bf3cb5140de41eb40f
-RMD160 (NetBSD-6.0/shared/mipseb/xbase.tgz) = 2fbf60b64c0b7ac2be72ebf998d9d7390fc40705
-MD5 (NetBSD-6.0/shared/mipseb/xbase.tgz) = cd23ca0f6b359c4d695d4494a147d40f
-SHA1 (NetBSD-6.0/shared/mipseb/xcomp.tgz) = c8f5ff5ea9f9bbe231f92d8b7f3bfcbd2897069f
-SHA512 (NetBSD-6.0/shared/mipseb/xcomp.tgz) = c7590075195019078b68ec5f87e36479ae2e7b7749c523df4ef21c9d881c343cda9f5c2bba897dd313329a76fe5c18e920d92827878d98ce08a7dc776352cd02
-RMD160 (NetBSD-6.0/shared/mipseb/xcomp.tgz) = bc60e267cb6e11b4a7305f8b7074084e179e0ff5
-MD5 (NetBSD-6.0/shared/mipseb/xcomp.tgz) = 8e58ee51667def3bd015f79769c0d932
-SHA1 (NetBSD-6.0/shared/mipseb/xfont.tgz) = c551bd13179b9508c2e3a7e19cec323e8ba21844
-SHA512 (NetBSD-6.0/shared/mipseb/xfont.tgz) = 764527f2f3f4686759fcae3fd093f4e00f34e1249994126221a6f9afe73d4cf8ddfbe8b8311798da2ed38c52466a44bb26ea08ad5aab1c08eebcc9019b4223f7
-RMD160 (NetBSD-6.0/shared/mipseb/xfont.tgz) = b3a365bedf8b4a20f3920d0e33b9a42fce288953
-MD5 (NetBSD-6.0/shared/mipseb/xfont.tgz) = adac8939da213a0195cc1d351f979199
-SHA1 (NetBSD-6.0/shared/mipseb/xserver.tgz) = 686f6e6d722c9676351ab058736f7077b4ebd2f6
-SHA512 (NetBSD-6.0/shared/mipseb/xserver.tgz) = 5c818f22edbeac7325228af99d6da6e44b5eb659c7c9fcc6b332071e97a0a490081eda7f9e0f22d6a3f3a589ae34179b434751a6191db5c664683d7510aecedc
-RMD160 (NetBSD-6.0/shared/mipseb/xserver.tgz) = 0e9f066095b505c7f062bf877147189a7a2f0649
-MD5 (NetBSD-6.0/shared/mipseb/xserver.tgz) = cdd2e5127838437df40af161e0c8398f
-SHA1 (NetBSD-6.0/shared/mipsel/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/shared/mipsel/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/shared/mipsel/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/shared/mipsel/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/shared/mipsel/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/shared/mipsel/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/shared/mipsel/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/shared/mipsel/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/shared/mipsel/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/shared/mipsel/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/shared/mipsel/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/shared/mipsel/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/shared/mipsel/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/shared/mipsel/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/shared/mipsel/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/shared/mipsel/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/shared/mipsel/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/shared/mipsel/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/shared/mipsel/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/shared/mipsel/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/shared/mipsel/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/shared/mipsel/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/shared/mipsel/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/shared/mipsel/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/shared/powerpc/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/shared/powerpc/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/shared/powerpc/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/shared/powerpc/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/shared/powerpc/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/shared/powerpc/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/shared/powerpc/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/shared/powerpc/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/shared/powerpc/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/shared/powerpc/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/shared/powerpc/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/shared/powerpc/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/shared/powerpc/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/shared/powerpc/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/shared/powerpc/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/shared/powerpc/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/shared/powerpc/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/shared/powerpc/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/shared/powerpc/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/shared/powerpc/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/shared/sh3eb/games.tgz) = 37e15b0950aaaf1af36427ae5dd5866c1879b6b3
-SHA512 (NetBSD-6.0/shared/sh3eb/games.tgz) = e674abb1b1966acbc581a8f8b3e37841f48656e66f3302077cbb2de443487912b99521336ec5dc096fa3c7769b2d7623e1d1720a079407ec1861d32159a72ebc
-RMD160 (NetBSD-6.0/shared/sh3eb/games.tgz) = 36070071e8315d2352be1b3e563ce7ef7625d184
-MD5 (NetBSD-6.0/shared/sh3eb/games.tgz) = 0016145b46957b95dd158b4441dfb010
-SHA1 (NetBSD-6.0/shared/sh3eb/xbase.tgz) = 564bce6dd7c37b5e941e41d50f363c133fdf8f97
-SHA512 (NetBSD-6.0/shared/sh3eb/xbase.tgz) = 23b3306254c789331542e63974f9d7cdc54d99ba2cd67cf6a1c97f09afa4f6cf6aa8798e37b7c38f4a55afd1572154f291fa1bf2e2a1fc87165fd6bd7f89fb80
-RMD160 (NetBSD-6.0/shared/sh3eb/xbase.tgz) = 476fbd8301bec0795a01552728ada44204d2dbe6
-MD5 (NetBSD-6.0/shared/sh3eb/xbase.tgz) = 9fbbbdb3acfa4ccd9f0b309ea0ed0700
-SHA1 (NetBSD-6.0/shared/sh3eb/xcomp.tgz) = 526a278a13833073e6231e879abdec85400ca888
-SHA512 (NetBSD-6.0/shared/sh3eb/xcomp.tgz) = d2081a7536e3d7fa27a363afd8f6eb5fc3de4606f11b4857be2f1df59934da9d3d16e0df3a6edf4cdf52c8f579e0e4c06f07de0959b5213c21be1a8fdc2ee134
-RMD160 (NetBSD-6.0/shared/sh3eb/xcomp.tgz) = 4a767ff08e9bcf98f886849cabebd1300397256f
-MD5 (NetBSD-6.0/shared/sh3eb/xcomp.tgz) = a23a2d8be9298497b4b6d39fda330bf4
-SHA1 (NetBSD-6.0/shared/sh3eb/xetc.tgz) = 93a5cfbbfdc641f91ab363d4b65d1158d71c0cfc
-SHA512 (NetBSD-6.0/shared/sh3eb/xetc.tgz) = 85a67734801e81e129a37b73ae62211459fb16d4e52a945ef21a4bb908dd7d1d775233956086dd3d59af45bcea24fbd6f54a2a9175756d242b57e07d10767548
-RMD160 (NetBSD-6.0/shared/sh3eb/xetc.tgz) = 6fb055d0e1b6264bf1ec396236d903218832377a
-MD5 (NetBSD-6.0/shared/sh3eb/xetc.tgz) = af954b56e624948145b91aa451d77392
-SHA1 (NetBSD-6.0/shared/sh3eb/xfont.tgz) = 6139c05273b6feeecdfcd11cbe0da91256d12a11
-SHA512 (NetBSD-6.0/shared/sh3eb/xfont.tgz) = bb849454ede88d39ca60d6c513c833c2b29ea548adedb9f76870839174a3daa838d38a6ad701c78bfc164e690c5ebda9c9d00d4c23ad816df9f1962313afdbf2
-RMD160 (NetBSD-6.0/shared/sh3eb/xfont.tgz) = ea8f123f9f78b429b77ff15c924803da1da2068d
-MD5 (NetBSD-6.0/shared/sh3eb/xfont.tgz) = a87cb6769c37ae20dbf0dd70cef93d11
-SHA1 (NetBSD-6.0/shared/sh3eb/xserver.tgz) = 6cd4fdb0ff00ef5d89b47e68e538c86e395b2054
-SHA512 (NetBSD-6.0/shared/sh3eb/xserver.tgz) = e3b575cab95e297a05a26a03eeff0cf843d665ebdfd103846ad544bef1d04f93aa20ceab09b1dfaae8f59d89ebb1cbef400b7521bdb41f7542f23156540aa4c0
-RMD160 (NetBSD-6.0/shared/sh3eb/xserver.tgz) = 7e52b98276b4d097f7babe918e6768ae9d7945db
-MD5 (NetBSD-6.0/shared/sh3eb/xserver.tgz) = a505ab4ce0801aabe21fe6038b63809f
-SHA1 (NetBSD-6.0/shared/sh3el/games.tgz) = 2040b4af557a62f2ade5fc9fcfe4cab3df88c7e2
-SHA512 (NetBSD-6.0/shared/sh3el/games.tgz) = 8b5071337dc844042537c24c75660e61c9709cd10cbbeab059a84da6d482260b73365ff3870f85060c130a291b6f02be174d288127ca62ce4d291a6982192317
-RMD160 (NetBSD-6.0/shared/sh3el/games.tgz) = 28acfa5a131d52df7c157e2edca1dd0f20e774dc
-MD5 (NetBSD-6.0/shared/sh3el/games.tgz) = d82c46dbc0021fd4694e464042936052
-SHA1 (NetBSD-6.0/shared/sh3el/xcomp.tgz) = 53aa1e2a910e8eed09dc07f8b724804f53fe5e2f
-SHA512 (NetBSD-6.0/shared/sh3el/xcomp.tgz) = 24645da85419528015cdaefd0c835741fa801392e795b363bdfc39558e75e7f384511c0668d12e2440114b7c543c7532aaec438048f08d35c54c9c7a748f20c0
-RMD160 (NetBSD-6.0/shared/sh3el/xcomp.tgz) = 60a461ffc1f1562274110d65c72a541ee131cd21
-MD5 (NetBSD-6.0/shared/sh3el/xcomp.tgz) = f1d2650a8d7a4ecd60fda8e1aaf8c09b
-SHA1 (NetBSD-6.0/shared/sh3el/xetc.tgz) = 1636a6fe3e01f6d8a07a19cd204a6807c8caa4c7
-SHA512 (NetBSD-6.0/shared/sh3el/xetc.tgz) = 9cea4ba4af287dd57e591d4269f2f2582010250316f323746ac56b12cefcf2590b93fbb0197c665f61b1df41dcca62d17fb6ad80d4b1feb8ac8265e91e15074f
-RMD160 (NetBSD-6.0/shared/sh3el/xetc.tgz) = 5f68e3f96f7bb9ae07fccdb1d058e4b1307b4b29
-MD5 (NetBSD-6.0/shared/sh3el/xetc.tgz) = da84d97230787283e215a4ee1c4053ad
-SHA1 (NetBSD-6.0/shared/sh3el/xfont.tgz) = 97439ccf6840b18b1e9885f5504a401bf1a93650
-SHA512 (NetBSD-6.0/shared/sh3el/xfont.tgz) = 3d15541f7d7ae2128f44355bf110415adfa4e5182829259d2c6f7a4217feff99e236d13c5bb7bbeb724ff1a09ac1f58f02bdd6eef528bc416ec3118db6fc7d45
-RMD160 (NetBSD-6.0/shared/sh3el/xfont.tgz) = cdc9fcdb5fd5032803d5bba18db58f3ea6d62c85
-MD5 (NetBSD-6.0/shared/sh3el/xfont.tgz) = a8466a0477c6c443eafe99e9d1c61131
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.symbols.gz) = 4033fc14abf440fef2f4e6370dead899e4983721
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.symbols.gz) = 17fb47f8b2731f8fe73376ab664040eefdc64690156e26acad0791871e64e5d401ea95f592a034eaf963ceebc919a6d54c06874c8be8141b049637cc55aabc84
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.symbols.gz) = 9de247cfdaae7ee9022f6d09030b58665536dd2f
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.symbols.gz) = c89c4849f164a941bc9a17cb89ca4dc2
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.aout.gz) = 98a104383326606b65c14160cf13b700c0d0becc
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.aout.gz) = 60c184cc2a78026b2ae297623a540618e63a58962e578fa8ecb0e68c5e94e9c64fe910da565b6e9427e0e99aae311e8645e2083a4cd02373f08c514a29fa9bfc
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.aout.gz) = c1569194e6d7d526911ecc813919db5103eba092
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.aout.gz) = 77f58eeb32ecae1a67c7821cfef3e1f1
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.gz) = 3aec79cc4bd37f7777e326445a18e4d551f4dc23
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.gz) = 46894446ed52b86e01d7fed75aa5285670d2d32a972be76a1019ea797583fff37423f4d9d40c29c394d123365b9a196fc7bb3824dc5952f6407b21198127cdba
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.gz) = e34c8493497296b2d98dc0522d2d4d58b56a3546
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.gz) = 9ccf14a3d80b596f8e594c2e7db89224
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.aout.gz) = 08fdda8c99f112770acb58f662e7dc7f92e211aa
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.aout.gz) = eb7dd72ec967546883dbf9e50fc9bf770e8aced07020c03f93abdc0c9bd6b1a03ff320a3f5167f74caf732ff37495e7507628e0ea213ae8fbf209fbfc2ed2368
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.aout.gz) = 97cd05778ad6cbef869bfd1ef9bda107db56b099
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.aout.gz) = f174a788515cbae3b497a13a1f27b68b
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.gz) = 78fa421384bc331c7bf1194c90f45969e0b9f9ca
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.gz) = c97fe5aa7c364929d749ee65dec8b6a7736da39e4d3366dfd8b17e67e8b5e56f9d37a0b8b4437c161602bfd265b486378ac272fc4e7917851b64faf8a9389370
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.gz) = ef146283b89c96c7d68bef166e853a83df6a65ee
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.gz) = dda410ee10ec3e07d4b962e08e5895c6
-SHA1 (NetBSD-6.0/shark/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/shark/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/shark/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/shark/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/shark/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/shark/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/shark/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/shark/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/shark/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/shark/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/shark/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/shark/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/shark/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/shark/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/shark/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/shark/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/shark/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/shark/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/shark/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/shark/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/shark/binary/sets/kern-GENERIC.tgz) = 436b25de68b7e666f29611394561037b31f1a9b7
-SHA512 (NetBSD-6.0/shark/binary/sets/kern-GENERIC.tgz) = 64acef2068786ba3afa466eda01db892f03fb48db03ad9ee0817f6a78b8019225beac65553dcd733d9858b4c35da337cbb20a7efa7019e77178e637dd5cb25f2
-RMD160 (NetBSD-6.0/shark/binary/sets/kern-GENERIC.tgz) = 83396c190ee6331e8297e4abc20d5b940b654e23
-MD5 (NetBSD-6.0/shark/binary/sets/kern-GENERIC.tgz) = a00e97b04a6d5affc36743311bc2293e
-SHA1 (NetBSD-6.0/shark/binary/sets/base.tgz) = fa2c393fa435744e1b106d19470278c97d9419fb
-SHA512 (NetBSD-6.0/shark/binary/sets/base.tgz) = a6ec0e86858f7c9faef7b4df4f2a951fa120af290d18d06598bb82b54541fe1a36d60b47f03da404a0d97889a5ea582db0a13b4a1827acf9e1842c70c90fcc0c
-RMD160 (NetBSD-6.0/shark/binary/sets/base.tgz) = 151c8a2e662926762a132b689b24943ac8b93c01
-MD5 (NetBSD-6.0/shark/binary/sets/base.tgz) = 787953226e7c5d1aeb78aba04cb18579
-SHA1 (NetBSD-6.0/shark/binary/sets/comp.tgz) = d37041a235ddf0a129bfa9f1d5e11d2fdb77816f
-SHA512 (NetBSD-6.0/shark/binary/sets/comp.tgz) = 19427e8b7dc48941e4e54ff0b8841358a551599c43862f830a752551044f96ed39bbd8038348fb3f3bf15ee831e0638cc4a3b4f0c04037222666f017cb11b862
-RMD160 (NetBSD-6.0/shark/binary/sets/comp.tgz) = 58df952b8aea84f1e0bc2658871408502eef4667
-MD5 (NetBSD-6.0/shark/binary/sets/comp.tgz) = ef10bf2cdec1811b1d3a2d3376201583
-SHA1 (NetBSD-6.0/shark/binary/sets/etc.tgz) = 07309c170d21a4c786ac5a12f5e792580788cd76
-SHA512 (NetBSD-6.0/shark/binary/sets/etc.tgz) = 6424ecfc34615c6fd1acb909b70414806e516119f30df73b70ee7128e69060da9457043da999de6011e7556a6685091cd30f4033e0ab7ea8cb0a2c6cc02c03ec
-RMD160 (NetBSD-6.0/shark/binary/sets/etc.tgz) = b2fa61062310af5511249b80505cefc966801f9b
-MD5 (NetBSD-6.0/shark/binary/sets/etc.tgz) = 1b69ed72ccfb0af799b148825a53bc9c
-SHA1 (NetBSD-6.0/shark/binary/sets/modules.tgz) = 3ef4de9b2730972b94688f3674b121eeabd2448d
-SHA512 (NetBSD-6.0/shark/binary/sets/modules.tgz) = 7c29c66462378dc8d7e7d5bfce324b012383176d8b381e83122808920f2d88d80665547a6e2974738fb6b1268aeacc4a7cde9ef17faec3d9d5c155ae2544cd37
-RMD160 (NetBSD-6.0/shark/binary/sets/modules.tgz) = ae6f3aba96b1b9b2d2a412754a42296afc85a69c
-MD5 (NetBSD-6.0/shark/binary/sets/modules.tgz) = 5f374bf40599728af733192b3a546d7e
-SHA1 (NetBSD-6.0/shark/binary/sets/tests.tgz) = 62e58a9b83eec5a0fb21b9fe7f5845e5315811e7
-SHA512 (NetBSD-6.0/shark/binary/sets/tests.tgz) = 43d78bd32bff49e6f6c62914cd16916e41541fb446913c688d0fe4fdbcf5fff6d5605688ec165f8e856a418bba4f36c7d7233b8344c86b954ce104e963abe0a0
-RMD160 (NetBSD-6.0/shark/binary/sets/tests.tgz) = 560f27cf65beada1eb6e62458b7450968218fd37
-MD5 (NetBSD-6.0/shark/binary/sets/tests.tgz) = 4d39b8cb6664b022b300186cb7afa8e6
-SHA1 (NetBSD-6.0/shark/binary/sets/text.tgz) = 663a9a70c81324796717d31e46d5e8c00620a132
-SHA512 (NetBSD-6.0/shark/binary/sets/text.tgz) = ae6817fabcfae5fd0a9f35787e6d9af82d64a14c6d532c1a54c347c367d23c6ccc274eb813a23e4bb4dcb036b829437130400c418ffd0eb9c36858443f8d9b84
-RMD160 (NetBSD-6.0/shark/binary/sets/text.tgz) = 51994c6b412ee1e6834b270482f8c0dbbc95a835
-MD5 (NetBSD-6.0/shark/binary/sets/text.tgz) = c93688098447ac5ebf664bfb3362615e
-SHA1 (NetBSD-6.0/shark/binary/sets/xbase.tgz) = 2782c3a99b0cdb6ea4c4b29543f6f06b24c1726f
-SHA512 (NetBSD-6.0/shark/binary/sets/xbase.tgz) = 90a42af846fd7479e30789a28c7908b2b70416e7824d7f78c31b378c5e1dd38d4eb797f4430f6dd9baf051afe1750ad4bacdd3e93f2b65b2ad92945f682a1685
-RMD160 (NetBSD-6.0/shark/binary/sets/xbase.tgz) = 6b4e44c69f47563964562f18c42a5bc5a99e750a
-MD5 (NetBSD-6.0/shark/binary/sets/xbase.tgz) = 1c370ba00bea97b4afbef7e3bc919655
-SHA1 (NetBSD-6.0/shark/binary/sets/xcomp.tgz) = 997e19373b3e9b90464e849f1d635e33235aa5f7
-SHA512 (NetBSD-6.0/shark/binary/sets/xcomp.tgz) = 1e9d84d70a45aa3ea4d4bff9066594e853b9af68912e58bc933060f2b652ceea2d40231e04debed15dc569ec3d1d2d3682b3042b009c0738f17bf11979f2e86e
-RMD160 (NetBSD-6.0/shark/binary/sets/xcomp.tgz) = 60b1ce3cf224d2caf6d4c9757761c8145d4bcc4f
-MD5 (NetBSD-6.0/shark/binary/sets/xcomp.tgz) = 0bd79975afc5e2dbf542c8ab9363b664
-SHA1 (NetBSD-6.0/shark/binary/sets/xserver.tgz) = cf7350b715c568255b8d095503eed754c3d1ff31
-SHA512 (NetBSD-6.0/shark/binary/sets/xserver.tgz) = 3c88b006114891f2e3aaac95d15f25de6c8ac1dd00802097d1885f015326e926a297dcdf6c9c10a798ff73242e3130a7e359bd7f4bab45b23408a628da011725
-RMD160 (NetBSD-6.0/shark/binary/sets/xserver.tgz) = e9a9b2579181cfc7974ab1586990bbb0f2470299
-MD5 (NetBSD-6.0/shark/binary/sets/xserver.tgz) = 795a4afd76d016cb1868344522fb0fb4
-SHA1 (NetBSD-6.0/shark/installation/instkernel/netbsd.gz) = 08fdda8c99f112770acb58f662e7dc7f92e211aa
-SHA512 (NetBSD-6.0/shark/installation/instkernel/netbsd.gz) = eb7dd72ec967546883dbf9e50fc9bf770e8aced07020c03f93abdc0c9bd6b1a03ff320a3f5167f74caf732ff37495e7507628e0ea213ae8fbf209fbfc2ed2368
-RMD160 (NetBSD-6.0/shark/installation/instkernel/netbsd.gz) = 97cd05778ad6cbef869bfd1ef9bda107db56b099
-MD5 (NetBSD-6.0/shark/installation/instkernel/netbsd.gz) = f174a788515cbae3b497a13a1f27b68b
-SHA1 (NetBSD-6.0/shark/INSTALL.html) = ee446561ae849bf3326e81939b2071c706bbbe7e
-SHA512 (NetBSD-6.0/shark/INSTALL.html) = 01bd9dca202f365a64c9f523cf025abc31a7180a8b45f843d1e60cfe4682329aedc8a892b8e2a6a230bfda1803c6740b6d9fe415992f5a2206425cd875ca3e1f
-RMD160 (NetBSD-6.0/shark/INSTALL.html) = c73d5cfb8e656b4634046ab9dabaa09772f8e383
-MD5 (NetBSD-6.0/shark/INSTALL.html) = 4207442c91faf52d0f3778fb77943ec0
-SHA1 (NetBSD-6.0/shark/INSTALL.more) = 9259e39f2fbc92e793da04efa5acb0318ee257c6
-SHA512 (NetBSD-6.0/shark/INSTALL.more) = a9510586f73298c7b0b8af60cf30b86d4588b90682b73adc3f14cb862f0f7ec0f103ff62eda6d4a141a2c5a24fa13d108f08817829a00545f8400ff9785460dc
-RMD160 (NetBSD-6.0/shark/INSTALL.more) = f80b0169a0a6cc36d204319f0e5ea6ac9e3c6256
-MD5 (NetBSD-6.0/shark/INSTALL.more) = cc98ec10bfc9ee19abfac7bb78843b52
-SHA1 (NetBSD-6.0/shark/INSTALL.ps) = d63b6262c2b64c83f763fdc888153b4d5785a5d7
-SHA512 (NetBSD-6.0/shark/INSTALL.ps) = e7082fc171e77f43761b8f8dba6443f9a76103be8b964d70e845940cec689c10579d8e5a6aa80bbb008cbde61c125fe348a3db7d157235df9dd6b53d247c3b8d
-RMD160 (NetBSD-6.0/shark/INSTALL.ps) = 5ae64ccead4bce193eef02a56c1883be5836e3f6
-MD5 (NetBSD-6.0/shark/INSTALL.ps) = b80bf37de21a0d2a7c1891ea18ee27cc
-SHA1 (NetBSD-6.0/shark/INSTALL.txt) = 21743fee95f9d668c37c80415896d05a652d8e5f
-SHA512 (NetBSD-6.0/shark/INSTALL.txt) = 80bc5a7e1ef3338c29c29b51f72b5c014bb10a7e7f367912ecc1e6633c7882ad23c119733c81dbcc4d7ff5178303dc555fa42951a48d364613ff52048d8e500d
-RMD160 (NetBSD-6.0/shark/INSTALL.txt) = 15c92de408750d0c47946ad7c7c7371a79e1e2c6
-MD5 (NetBSD-6.0/shark/INSTALL.txt) = ba3059416376468dad953da22a4bf29e
-SHA1 (NetBSD-6.0/source/sets/sharesrc.tgz) = 87a69ce98fc413c46524823e16dcd0dce768698c
-SHA512 (NetBSD-6.0/source/sets/sharesrc.tgz) = aedb194ace955f8c15820ae3e6d8bdbf67992da79f8cb3d2d0a2ad409819a78c7d3921fda193a982a6f032f92113fc807e0ad2eb064a82da98b8f5ec957bc53a
-RMD160 (NetBSD-6.0/source/sets/sharesrc.tgz) = 8e03f055e853b3b44d48cbafde267da9acd549f2
-MD5 (NetBSD-6.0/source/sets/sharesrc.tgz) = cdf8ab923e83b705dfc8e47e47ebdecf
-SHA1 (NetBSD-6.0/source/sets/gnusrc.tgz) = a5bb46c56b0f27a47dbaa3690758336bdc472292
-SHA512 (NetBSD-6.0/source/sets/gnusrc.tgz) = d94945054d64c9b16ddf2b3fbcf0dc8aa41965f76e469e8da0fc822082189d87324169709f5a95aa8461209522d3cdb387f52beaada7ecefb46571b021d925bf
-RMD160 (NetBSD-6.0/source/sets/gnusrc.tgz) = 562debda10c4d28bc11f9760fa7f7797f062a9fb
-MD5 (NetBSD-6.0/source/sets/gnusrc.tgz) = b72569083f678e665d6658cbd2c3e587
-SHA1 (NetBSD-6.0/source/sets/syssrc.tgz) = 8206633fc5ac0f890ecffdd50176768236cd4cc6
-SHA512 (NetBSD-6.0/source/sets/syssrc.tgz) = 566104c4324710005c869e065dc03889e85824910520d097a88c1bd5219adc750b3ef8d0057a7d98a7d535002c4c6e04594d98b5be138b8e29d74b1f3965b045
-RMD160 (NetBSD-6.0/source/sets/syssrc.tgz) = 8f26506a9ce36e2a163026804d629e30628f8c4b
-MD5 (NetBSD-6.0/source/sets/syssrc.tgz) = 8ece18d74c2fbd264198467f47e8b4bb
-SHA1 (NetBSD-6.0/source/sets/src.tgz) = bada9cb20d00977af0fc80b465ae9bd20648c893
-SHA512 (NetBSD-6.0/source/sets/src.tgz) = 981158338e0123f59b5a38f3f5c3a4fb8142f0280e49db0af5f0753512035113887bdcc9aa3f980761b51abf625764d0e89ca4de41cb80145f5ef7239676d1b2
-RMD160 (NetBSD-6.0/source/sets/src.tgz) = 90dc01e48266e240dd95962496cd2a1aa1ca90f9
-MD5 (NetBSD-6.0/source/sets/src.tgz) = 58e1e661d9640ca3eb542ac3086580f3
-SHA1 (NetBSD-6.0/source/sets/xsrc.tgz) = 73f98faff9d1b90c50d50d50a1f17e6880f43f12
-SHA512 (NetBSD-6.0/source/sets/xsrc.tgz) = dbcf2591e42422a0ddb15529b35cd7e1f198589459806239d9efc917c5b604cd152fda76c5fd5a8e912410ee1fc25e561f7e505b63461192406a121e84fe3784
-RMD160 (NetBSD-6.0/source/sets/xsrc.tgz) = 617e6308cfbb0899c230ceea2d843c197c4f4804
-MD5 (NetBSD-6.0/source/sets/xsrc.tgz) = 68d1535d0baed6625f6dd95fd20758ba
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.MP.gz) = 496928e218106c5bc8d32bd6c736eddf69258416
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.MP.gz) = cc26d9ef454d86c7e95a122eb0ef5d6f9dc742b0f9718d0a798e9666974d977de44d90025f38c2947c9d161c3b52a9eb8f42aa866a0198d310f7defd7f472db8
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.MP.gz) = 3ccc735931179c31c8f2d4b5ce1e9f96121ff695
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.MP.gz) = 61be9899c92c833cb52f77b6f8e6aee4
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.gz) = 7b45c74363d7977534a97b006e114ef4051246c0
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.gz) = fc19ac6cf8544def619f803ab7573083991e050b8d551e9c4967d1e327e4ebfe51137f516815152fc00dceed5879309ba4e5e9c420b088378c0323c739df8cdc
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.gz) = 86944c7c8fbed3cad7ddfef09833eee06231c3bd
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.gz) = 2daad7afb8771cd536a5bd668d3e981b
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SCSI3.gz) = 1138b7a86c5bb93d6b3904164e3841031880b675
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SCSI3.gz) = df36f0aac760c383f970b2dd9e13a4e6e3ca28d47846c904cc07ba11b6e289fe6c8319a40fd51850e5ced7a4585d61c83f489769cfe8aac189b650116f8faeeb
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SCSI3.gz) = e95d11e401563a66d9cc798db312d3f2a1b96c5f
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SCSI3.gz) = 0aaca233a00a9fce3265a749b9a2852d
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SUN4U.gz) = 0732f8665299b419119c4507e525a6c992f20656
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SUN4U.gz) = dcd45f52ade746443eeb910f331ccbce2d48eaf03f2e49c7ac75940b36e2097e41ed5873224bf664e4bd935ba17b1503a61640427a7d9ea87ecdcad39f7eee60
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SUN4U.gz) = 568b09bb65717c3ae1b2f2e3a5b1c15316a3c53d
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SUN4U.gz) = 785d8668cfd1df9f6bd6af6587636e0f
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-KRUPS.gz) = bd5c8ef678bdeca11a32980b732803967ab0398f
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-KRUPS.gz) = 1c79b7d19dbab9bb132529d1bf10f6a3d9f8bdbf006d1296721c5a987812cf55a077368b75b4775e1425dda56afde6ab35f5995648187c623dcdb3154d2a050a
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-KRUPS.gz) = 93604d098cedbfd647a5ac6ea9409928bebc48d6
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-KRUPS.gz) = 7108981b6236f991fca67fe58d6eae81
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE.gz) = 976e0a56648d3e03356d7f76426971fa523e4551
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE.gz) = 172bd67678acdf034d897369d1d92be25dd684dbd14f362fad6c9655f7d5265caf4b57d495c570eebc1e53a87c53374d8f552656fa66366d3ac6221ccf98a752
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE.gz) = b3a6897f2e3eb5acfe2d87f7d377697caeb3b007
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE.gz) = 7ea122d02744bc1fc5e42853992c908a
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE_OFW.gz) = 181bf7c2d1cd731f71c5334a5d0d097749f166af
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE_OFW.gz) = 63f26657f4bdde1cff58858fd5ffda69867a45d8148c4b4cf13804281389f34026a09f9f228eb670ff01ed8a02e99affb67b7a170fdcdda5f8f5cb128eaa9ece
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE_OFW.gz) = fabe6d8566d88af5324ffa952c57f0fad3accd95
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE_OFW.gz) = 8a5f7d38f6ddc835e528d51886df36e7
-SHA1 (NetBSD-6.0/sparc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sparc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sparc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sparc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sparc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sparc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sparc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sparc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.MP.tgz) = c77b07953f63e5e21d1313e08dacf592acbddeef
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.MP.tgz) = 40e533f5b17404c1d1137cee7e541193f5f6ad323bc615ba5db6a1dfd4816a27eb54b26d272886dbedc9184e85b36ba1ef6e798e140f84e669475eebdd61a015
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.MP.tgz) = 2e067f3f9ef9697eba5185ff0d15d847c6e277a4
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.MP.tgz) = 496e0471d0eb80e227337bdaa45db5b2
-SHA1 (NetBSD-6.0/sparc/binary/sets/base.tgz) = 952c71b877521b1af63302bbe4c072b482c3723e
-SHA512 (NetBSD-6.0/sparc/binary/sets/base.tgz) = 14dc66a667648834321d8bde6c4f9e07c582ac569ceda4991552119282b53690521a89cb0fc06e2c0952f75d9dbc6c9c554f922e74111f4d42c94085bd4697ec
-RMD160 (NetBSD-6.0/sparc/binary/sets/base.tgz) = e57ecaa3098d2ae780c38e3e085c6f164498cd95
-MD5 (NetBSD-6.0/sparc/binary/sets/base.tgz) = b9fb689a8d63084ad2d6a4089028296d
-SHA1 (NetBSD-6.0/sparc/binary/sets/comp.tgz) = 59f49bbeaebf959d30414d0cacca3724359d55e8
-SHA512 (NetBSD-6.0/sparc/binary/sets/comp.tgz) = a800a26ddca7c79ccda284ab3b5e815cc4b53c409ca78bb00f386348e4ae973edf66440a931d9fe2ab0f8a16e329d885c3a2f190780600ca4e205936d7d01e8d
-RMD160 (NetBSD-6.0/sparc/binary/sets/comp.tgz) = 3a0cc6492eb72ee033ccd0b60c0c1698fa6b49d1
-MD5 (NetBSD-6.0/sparc/binary/sets/comp.tgz) = 39c91111ea991ede7ef81fa845ac319d
-SHA1 (NetBSD-6.0/sparc/binary/sets/etc.tgz) = 7cca1a9e594b2122f17b67a26d15e2051403bc68
-SHA512 (NetBSD-6.0/sparc/binary/sets/etc.tgz) = 191f890e7588a17a3258e92d51a91407281c97fe84e2ce68f6fc1db48b95011b1c15f86cc3bef58dff5b167c8ee1608fb42c22b55b78df7461a60827882bb0e4
-RMD160 (NetBSD-6.0/sparc/binary/sets/etc.tgz) = 39d06e86cfc8d3fb588c5b95371ece29ef11b5de
-MD5 (NetBSD-6.0/sparc/binary/sets/etc.tgz) = f909a9a70e65ad480468d1de75f057b0
-SHA1 (NetBSD-6.0/sparc/binary/sets/games.tgz) = 352b9089651bdd1ba05526f34fd99bf8e89db039
-SHA512 (NetBSD-6.0/sparc/binary/sets/games.tgz) = bd7c551fde89b7339d6b652a2583322c662bf0d4b69ce143034253f9764cfefabc5abe45d8e8850f7b9ee2d5714cda13f26f1d516679b544c096d27cbaf87b08
-RMD160 (NetBSD-6.0/sparc/binary/sets/games.tgz) = 9e71d26c198691e30f653c47b3b725ab54f1144e
-MD5 (NetBSD-6.0/sparc/binary/sets/games.tgz) = f6932706a5fba3dc666106b7b84ea734
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SCSI3.tgz) = e5359bdc3fc08e7fc7b5f0ffae289d8e3bbebe72
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SCSI3.tgz) = 88e1c0850a758a10d7752c1c64d4d80b5fc9935eb8cd9f4869585ca42cb5706bb6c1fa38467e7ba67a28f0b3e4e12df989839b1c7f6a777785e919eda6c4e464
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SCSI3.tgz) = 6486dfa05e73ea92b83ab42151f3978fb8d9cb3b
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SCSI3.tgz) = 8965e59f45390938dd1f4cca3b47b215
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.tgz) = 0803f566c7ab3cc4ac8bdb66f0e6e93e44f6780b
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.tgz) = ac72f82075f9cd2d7a5aaa4556f0e6efcdd6207ecfd3c6eef2773281f9088fca35169b68987c3a95f8481670fbd637caaccc48a6fea450c5334e1a5a61a009ab
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.tgz) = 4a8db5843d949d1d2b6c45e23313628ef2db07ae
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.tgz) = 7c8d15c09c139fc7445d83e669004f26
-SHA1 (NetBSD-6.0/sparc/binary/sets/xcomp.tgz) = 4671cf1becbd220fb0693d8dc580bf90fd558a38
-SHA512 (NetBSD-6.0/sparc/binary/sets/xcomp.tgz) = a37753c7f879f4d7205dfa23488b6fda40aa098cdf5d998f3b8335c487d2bffc7d9edbd57de2f12dfce586d60f2044f1617173fa6902e821a74dacc314382b98
-RMD160 (NetBSD-6.0/sparc/binary/sets/xcomp.tgz) = ed445184a03edb2cf1bf204e9cbbd04ce6f8367e
-MD5 (NetBSD-6.0/sparc/binary/sets/xcomp.tgz) = 82dc6b78584e5997bcdf436f37400177
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SUN4U.tgz) = 478f84d19aae7f5aee8ddfdb45eb9aa37a21a3d3
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SUN4U.tgz) = b9168217a02a3da991b5b3fb069097b663dea23088a529f16ea09dc12c233bc4d63b4310fbc8e26285e6bc9cd566144141898743fc8617bd9296956432b2f9b2
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SUN4U.tgz) = e9e53c86f42b75fcc12853ed2dfd5423b0968581
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SUN4U.tgz) = ee3736e6af879f5d4e0cc369bfa579b5
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-KRUPS.tgz) = bc69fd900a788cd8ce5d7413b4716f656814b804
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-KRUPS.tgz) = 64c42a3748d62926aa10870c08331bce20b67f6b50afd13a19a76b232b2f9f2d1c2fa04819cf88f211badbdff0cc1684ca48ca7f1c6d8f44859257764e882842
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-KRUPS.tgz) = 18df230d31af7e526b9f6fb3254061e6601a9b15
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-KRUPS.tgz) = 1057e644aef74d636a558c03dd9f7e7e
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE.tgz) = 58b500435295d07ef47bd1702ce2f8c5fe798e8c
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE.tgz) = f3657cd11910995d2bf8e4140f4df4d6829311de9d5a4fa39a980af3577035ad7cc1189066aa0d9093803727b0e1405e9e2c5bbad4db8e4e172e9d5d000c2541
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE.tgz) = 91c5e94452446fb8838dfadab79d8f0c915669a5
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE.tgz) = 2535895e15ea9dc1c4806df090d1bc81
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE_OFW.tgz) = cc966bc2458bae8bdd3995d423ae83707d0a0a38
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE_OFW.tgz) = 35967055f863081ef3d16144c5324ab62c2e44942100202414961a58b8b3e1243e8a2b3e2ff4d7075df0e624d9da1ff7889f8c9dc710c888f6654d8d845233d9
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE_OFW.tgz) = 5451d5da667a2a57e3af6df7119703db7a2ec8a2
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE_OFW.tgz) = 8cb1f508b5103088f400e7422e23a34f
-SHA1 (NetBSD-6.0/sparc/binary/sets/modules.tgz) = 6519d6696e013f8a9e51d2856aac1390c0c3e69a
-SHA512 (NetBSD-6.0/sparc/binary/sets/modules.tgz) = 4dd5d8721c4d0733813e1fc884e9242cbf957f33ccf92fa7a8f3255bcf1af3598de843e15ad052a696cd95065251cae8a6927816c041732a6f12823657ef22fd
-RMD160 (NetBSD-6.0/sparc/binary/sets/modules.tgz) = cab574162ec0996f845835763055d6e65bb4ceb4
-MD5 (NetBSD-6.0/sparc/binary/sets/modules.tgz) = a60477fd2b83a211972512c035679276
-SHA1 (NetBSD-6.0/sparc/binary/sets/tests.tgz) = 816dc19db04ba2f95dcf80c62598f9fec7fa92ff
-SHA512 (NetBSD-6.0/sparc/binary/sets/tests.tgz) = 80c23ac0ed623404542d3e6b6e7dc8194ae876c6a0d17b250151ce6e941e874a033dcce8afa002fbe3d875b1c79687e392fa6f527fa46ec0e3c82ae31cfd5eb9
-RMD160 (NetBSD-6.0/sparc/binary/sets/tests.tgz) = 834ebf4c2126e3ec1b2226e48564ab87d7ff8da0
-MD5 (NetBSD-6.0/sparc/binary/sets/tests.tgz) = 9d0c1bd587f83df1b0090f88357f8531
-SHA1 (NetBSD-6.0/sparc/binary/sets/text.tgz) = 92d7911a1d761b73c8d2080e819705f901d1ce6d
-SHA512 (NetBSD-6.0/sparc/binary/sets/text.tgz) = 4e8e2f2abc8cf95a4672ef492e091142b6cc4a4baafddb6fc123fa5b3cc3d67a16e61ab4a7b188dac4b8ea198d8c88c1c81ffe1eca70f9900780a8a134257c36
-RMD160 (NetBSD-6.0/sparc/binary/sets/text.tgz) = 4d5ca8f6d680d3389d6b90c45875bcc4b4e962f3
-MD5 (NetBSD-6.0/sparc/binary/sets/text.tgz) = c16beb242b426177d80af90e40266abf
-SHA1 (NetBSD-6.0/sparc/binary/sets/xbase.tgz) = 2809df01d9a0aa85270f6f77341cf50d72bc78bc
-SHA512 (NetBSD-6.0/sparc/binary/sets/xbase.tgz) = 886f26f21f95ea17ef60d28fabebf415485d13647d335b237a4ee954039c7c6dfc0d9e68c06aec52ef463b6c2b7b88cd6baf514f2c5b567b8f5421c99df12672
-RMD160 (NetBSD-6.0/sparc/binary/sets/xbase.tgz) = 499a1e2a76a05fa4a0b3b53438d60b8434198695
-MD5 (NetBSD-6.0/sparc/binary/sets/xbase.tgz) = 82bb74d040bf256d711afb55db6c4066
-SHA1 (NetBSD-6.0/sparc/binary/sets/xetc.tgz) = 997196c30074dcc988f2dfa2a7f5dfc8c31df3db
-SHA512 (NetBSD-6.0/sparc/binary/sets/xetc.tgz) = 09670a40f33c9902b5b22c4400f9e8151f1985504cc1c956df68697e3bd6a7b841391d6dd32cdbba42aebf42f4a1cdd3559c5783f79da236603dc6b5cf86d33c
-RMD160 (NetBSD-6.0/sparc/binary/sets/xetc.tgz) = 50061239bbe31a4dce18784bfcece78a234e6ef5
-MD5 (NetBSD-6.0/sparc/binary/sets/xetc.tgz) = 12ae04f5957291f424568bb61a138079
-SHA1 (NetBSD-6.0/sparc/binary/sets/xfont.tgz) = 7e5ccc7436f81855bd5e20960adaddd9b9851fd5
-SHA512 (NetBSD-6.0/sparc/binary/sets/xfont.tgz) = f263bf4a2b1bc795c1c4dcaf0db819dca08e90c51b41c144911f897a991a3575dcbbac203060d8f51842c85c6e85c4839297fb7307353a38b1a46e1b446d29a3
-RMD160 (NetBSD-6.0/sparc/binary/sets/xfont.tgz) = cb721308df7413a821278143750bf95844eb4d82
-MD5 (NetBSD-6.0/sparc/binary/sets/xfont.tgz) = 9de78b2d18118d7435a6c95d8a503ae4
-SHA1 (NetBSD-6.0/sparc/binary/sets/xserver.tgz) = 0d3b410b9501560307d3b9b17a431be0da1de869
-SHA512 (NetBSD-6.0/sparc/binary/sets/xserver.tgz) = d3dceb5ebfb5085e905e8121c952a97bf7035bbd4e60898d913fbaf58c147181ae7c97f913a122e9ce83523d05a585d1e771139192d42c44fa85e60e2bed762a
-RMD160 (NetBSD-6.0/sparc/binary/sets/xserver.tgz) = fd59e7a1c949c113ec555a9ee63ab369f64559fa
-MD5 (NetBSD-6.0/sparc/binary/sets/xserver.tgz) = a89a1c519c6d6759f810717fc0ec43ab
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.aout.gz) = c2c368ba46549cb580707b799f4f0f88b26128de
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.aout.gz) = 9fb6bef663b2fb68b9bf3591834f6e653c0b3b7f69ac8c40f2479efaa5d0641140d87623fe8eeb8a21cb0e0065ceacb57d6a5db4e1905db97f7dffa52ba8b565
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.aout.gz) = 8fbcdca0f8214901d1fec117c567cfe93865e391
-MD5 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.aout.gz) = 1cf0fdefa01fee95d494b3418ea4a0ea
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/boot.fs.gz) = e36798e87b9d195c7df8602883c775f8f4268448
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/boot.fs.gz) = acd6ad2fa9c1618b4b14d6a63679e347aad6302001e36ea63c58968252ce993df23af7e05e590b72efbcdbc1013192b1862d70d7737fc2fa804249410c9d2724
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/boot.fs.gz) = 986addabcfd9f0b1faccd9fed0081f88e78f2aaf
-MD5 (NetBSD-6.0/sparc/installation/bootfs/boot.fs.gz) = 93526666c7879bc6391c5b7c38b24cb0
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/instfs.tgz) = 98f621b007b19382a0d529f2056cd8c82feb863f
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/instfs.tgz) = 7131f92cd02791f6d351a8ea5d8b5fe93b643ba5975522e85bf81da8f69157ebb21f80f5696beca47809a9732e79e85c7e97e07a33e830eeac2f9542685a01ce
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/instfs.tgz) = dc7168f774cac7e9f7eba640dc55c878ab2c16db
-MD5 (NetBSD-6.0/sparc/installation/bootfs/instfs.tgz) = 80ed52c842f1d4d56d4506d293e30b57
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.symbols.gz) = 673b10e3d23ee6e204bdba91b52b0b50304cb8e3
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.symbols.gz) = edf95ecf1f6133e5228d4f8b6a8d004c1f172354acfa34f1235a488456a69b2fd19cd959f97a0a7d06f007347815672bfce07a3ee25ae511ce73a6e5de217267
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.symbols.gz) = 8829961d6f2e5487af4bd4418335139d06916659
-MD5 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.symbols.gz) = 75ea54ba199fcf8a56054d15e4fb3b96
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.gz) = 8eb131ce31d568ee4fb0674f1732052bc686bb18
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.gz) = 7345380b1e2e1140564b9886e4d2afc5dc21dacf7148a5680283abc41f7249a8e8512db23ca58533ebf5bffc588bb6a28b18c7e0eb5d50c8a5a06da4043af319
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.gz) = 37ae0d93bd4532ff69c9187a1fd8ee3b75e97671
-MD5 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.gz) = dc1f591b5bca88a07ff8e67a1c3dc01d
-SHA1 (NetBSD-6.0/sparc/installation/miniroot/miniroot.fs.gz) = 4e71664ebc1dc62f55992a935734fe61f52177cd
-SHA512 (NetBSD-6.0/sparc/installation/miniroot/miniroot.fs.gz) = 3cf2607774e1aa7343ed57c78034828878665e9a041561702daf18539a0775d27768ad89d9336c77d897a0f040c71c8cefdd555c00397d26fded0b6ce72c1dc3
-RMD160 (NetBSD-6.0/sparc/installation/miniroot/miniroot.fs.gz) = 39fff07e0ce17f0c62c3a399173b5a8681fa3559
-MD5 (NetBSD-6.0/sparc/installation/miniroot/miniroot.fs.gz) = 0355cc648c33e3ed61ac4ff2f51edd04
-SHA1 (NetBSD-6.0/sparc/installation/netboot/rootfs.tgz) = 98f621b007b19382a0d529f2056cd8c82feb863f
-SHA512 (NetBSD-6.0/sparc/installation/netboot/rootfs.tgz) = 7131f92cd02791f6d351a8ea5d8b5fe93b643ba5975522e85bf81da8f69157ebb21f80f5696beca47809a9732e79e85c7e97e07a33e830eeac2f9542685a01ce
-RMD160 (NetBSD-6.0/sparc/installation/netboot/rootfs.tgz) = dc7168f774cac7e9f7eba640dc55c878ab2c16db
-MD5 (NetBSD-6.0/sparc/installation/netboot/rootfs.tgz) = 80ed52c842f1d4d56d4506d293e30b57
-SHA1 (NetBSD-6.0/sparc/installation/netboot/boot.net) = af35e94ca3d3ca7e07084d17c7d16370c2be1949
-SHA512 (NetBSD-6.0/sparc/installation/netboot/boot.net) = 42e02f39699d1ef5f76a2a07641f5405b74a0ce72df8c1306cdc1bf9e8e176b0857a4c6c1098a35bdaaebb729e887633bfc91cd7ed4316ff549b474e4b29932f
-RMD160 (NetBSD-6.0/sparc/installation/netboot/boot.net) = 5f64296269674b5af481fa3a55d6268bafcdd50c
-MD5 (NetBSD-6.0/sparc/installation/netboot/boot.net) = 9a2b02686d556555bf350f6eb35e07f1
-SHA1 (NetBSD-6.0/sparc/installation/netboot/bootjs.net) = 9bba50438d03cdef774f7572e6260bf1feb544f4
-SHA512 (NetBSD-6.0/sparc/installation/netboot/bootjs.net) = afa66b734ea6f3f9551680c5dc1af1ce43de4b385eed1c732dbf22f676e5adf1432a2048a494932650e36667405df0160b3d1cb87d4d78b5d064dfab2d366cd0
-RMD160 (NetBSD-6.0/sparc/installation/netboot/bootjs.net) = b2cde57103124271b4b9332cb99a7b7e01db3477
-MD5 (NetBSD-6.0/sparc/installation/netboot/bootjs.net) = b6958131d22fe5ced08a41671ddfa073
-SHA1 (NetBSD-6.0/sparc/installation/tape/tapefile1.gz) = c2c368ba46549cb580707b799f4f0f88b26128de
-SHA512 (NetBSD-6.0/sparc/installation/tape/tapefile1.gz) = 9fb6bef663b2fb68b9bf3591834f6e653c0b3b7f69ac8c40f2479efaa5d0641140d87623fe8eeb8a21cb0e0065ceacb57d6a5db4e1905db97f7dffa52ba8b565
-RMD160 (NetBSD-6.0/sparc/installation/tape/tapefile1.gz) = 8fbcdca0f8214901d1fec117c567cfe93865e391
-MD5 (NetBSD-6.0/sparc/installation/tape/tapefile1.gz) = 1cf0fdefa01fee95d494b3418ea4a0ea
-SHA1 (NetBSD-6.0/sparc/installation/tape/tapefile2) = 98f621b007b19382a0d529f2056cd8c82feb863f
-SHA512 (NetBSD-6.0/sparc/installation/tape/tapefile2) = 7131f92cd02791f6d351a8ea5d8b5fe93b643ba5975522e85bf81da8f69157ebb21f80f5696beca47809a9732e79e85c7e97e07a33e830eeac2f9542685a01ce
-RMD160 (NetBSD-6.0/sparc/installation/tape/tapefile2) = dc7168f774cac7e9f7eba640dc55c878ab2c16db
-MD5 (NetBSD-6.0/sparc/installation/tape/tapefile2) = 80ed52c842f1d4d56d4506d293e30b57
-SHA1 (NetBSD-6.0/sparc/INSTALL.html) = 8213ae2b753d10e3eec349c15a7cabde6ae1c3d5
-SHA512 (NetBSD-6.0/sparc/INSTALL.html) = 7a12bfc31cddfda66761861cb87fc54deb5f683863b41ff44152198ea44e9489c8cce0d4702c278e2586dd3189e5c31692a02a3f17b112bfa19f1134571ff8f9
-RMD160 (NetBSD-6.0/sparc/INSTALL.html) = 77a4274595de342e22766d8c468e2a324c26fbf5
-MD5 (NetBSD-6.0/sparc/INSTALL.html) = 80cd31d110f62b89b7b910ee0aecd7b8
-SHA1 (NetBSD-6.0/sparc/INSTALL.more) = fce351f89d2da1fb9f709bbe890892db755f56c4
-SHA512 (NetBSD-6.0/sparc/INSTALL.more) = 496bb7e73d2dda1eb01518c40ab3abc767b8fb6a8b406b07176b9e926c2f4d0e5512bfdc9c26dbfa1b3a4c5069355f6ee1bb8ad8c1d459b71011ea9034f89d17
-RMD160 (NetBSD-6.0/sparc/INSTALL.more) = 89c6de032d286741f2ddde15e4b796205a8b8511
-MD5 (NetBSD-6.0/sparc/INSTALL.more) = 308ae548170c8b1b5a9bf59f64b1df7f
-SHA1 (NetBSD-6.0/sparc/INSTALL.ps) = 3e6e3cbbf8141043fce33e2245513a9683be0edd
-SHA512 (NetBSD-6.0/sparc/INSTALL.ps) = 93b81d3ba2fd2e1fa3ef46360e92e247fa72b320af7b0e60ab35fd90cdd10d7bc3dfc03920b4a8b209ef95facc74e047630cdec03cabe06edde21e795e158e60
-RMD160 (NetBSD-6.0/sparc/INSTALL.ps) = 8d4373a814dc88c7865b14a59e27731783e711e5
-MD5 (NetBSD-6.0/sparc/INSTALL.ps) = ecde0171eda632b616139caf04081ec4
-SHA1 (NetBSD-6.0/sparc/INSTALL.txt) = 556744433939c09c3ef5ee3e9b12c1570ebb1211
-SHA512 (NetBSD-6.0/sparc/INSTALL.txt) = 1686bb5982301002cb580022760f12fe9160a4fe826d7e0fe74cc4a480c891d31099d5219678b0768c0fbc04be329f0f40511d739c201a5e43367b5a27e72545
-RMD160 (NetBSD-6.0/sparc/INSTALL.txt) = cbc495189f2ce52328d87a1a73dc8452ad23e723
-MD5 (NetBSD-6.0/sparc/INSTALL.txt) = 17100faaf077e73c2549484e7623550f
-SHA1 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.symbols.gz) = b76da4e7c7cdcdbebd2148ee815c24554b0c4bee
-SHA512 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.symbols.gz) = f31c311444a309674e2718baab015b47c0139523e7996a29ab8d3e97a941b5d74be8765571bf3239375c979fff1e963d32d2dbae19ad5c7dedcbd79a8827575f
-RMD160 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.symbols.gz) = 95a34099fb1159f17619713ae37d3c6337b479c5
-MD5 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.symbols.gz) = ab2e1333f6d957074854ea8f92320442
-SHA1 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.UP.gz) = 961388f6e1c9522c0d8f19f0a471f14d3c35fef7
-SHA512 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.UP.gz) = 7b3fc655414c6c2334e46315eb91ee562b94400f5729e0a33dcc9e9a79c431b4b5e0c124541b9666731740ce365c034718671348a494c43167eb0b73966133a2
-RMD160 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.UP.gz) = e02a398cd00c0b8ab7bc3b6dbd52e767b18e3275
-MD5 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.UP.gz) = 200fd2ad96dfa6ec886585e20d4b4b06
-SHA1 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.gz) = bf5fe38aaa01c9b2e9963b540f1550562789da22
-SHA512 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.gz) = c2b63ce56ff32ddaa96642ae15a33143a245b9239560c86e51e78db333d8bfd19e761d6cbe27ce69647a62fa4c76317670f0d22aa491a2cadf45dae18573511f
-RMD160 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.gz) = 65f66c6c7f87e3be728339a1b294b4240b14b953
-MD5 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.gz) = 44d6f63922847e6f53d78f10bc776e3d
-SHA1 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.gz) = 1fe47cdf745a00c31a47faf1155eb0f9af2ec4fc
-SHA512 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.gz) = 7a10dbbdcfdcad97fec4ef476e9b6c876a3bb80b78fb4634e3f502b043b392faaf457b90ff572cc9fcf35c8c26fc908fe035b5859ed66ea2f0db490d2638f9a4
-RMD160 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.gz) = 06d3a86dbdb12e0b810888233ed79bc735ab13c7
-MD5 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.gz) = 203f7a8aad11cea65388e14dec6a65f9
-SHA1 (NetBSD-6.0/sparc64/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sparc64/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sparc64/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sparc64/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sparc64/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sparc64/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sparc64/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sparc64/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.UP.tgz) = 643e8b15fb356856d93258e6c5d05cb14eb7d569
-SHA512 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.UP.tgz) = 26c4eb3392f80d4ba7c28038f548e59a04a84742962da3340fb49d09ef42b2e3debc1387710b3c4baa6c735370b5daaa23a6f4da91f1be6552ae4c0cd314f4de
-RMD160 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.UP.tgz) = 37e5fdfd623c179edfa002163e005518b26fab7d
-MD5 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.UP.tgz) = 70d61e4a2588eb3242e66d0cd4cf1b1e
-SHA1 (NetBSD-6.0/sparc64/binary/sets/base.tgz) = cdce0eb09c71244d8362eb4e09c0bdbd92fb4900
-SHA512 (NetBSD-6.0/sparc64/binary/sets/base.tgz) = 455fa6b72e5735a13b3106260b7cb5cabeefd3ca83603dd9daf3805a0abe55acc6b484ad8b4875590e5d949c35b8476cec136f79f8ecfcd7b12cbeee44d6f305
-RMD160 (NetBSD-6.0/sparc64/binary/sets/base.tgz) = 13508c9d394104d0c0b460a895f796e091ca8635
-MD5 (NetBSD-6.0/sparc64/binary/sets/base.tgz) = cdafa4124cc784a56444f96fb24a7a34
-SHA1 (NetBSD-6.0/sparc64/binary/sets/comp.tgz) = 71040515074d030a65e0200afe6dbd6955251af6
-SHA512 (NetBSD-6.0/sparc64/binary/sets/comp.tgz) = 52a075300885b0d15ac960430ac3ed1ecb4434cd0bb2de216c6d8c27239011544628ad1ccd87076ac9d40d64e0c088cc2ce0e928902f80629cea11631f30e35c
-RMD160 (NetBSD-6.0/sparc64/binary/sets/comp.tgz) = 96bd6b8b5758360970d9d5b703019bf660aa56d5
-MD5 (NetBSD-6.0/sparc64/binary/sets/comp.tgz) = be2c961313f29bb9c0282516867850d2
-SHA1 (NetBSD-6.0/sparc64/binary/sets/etc.tgz) = e3bae514025003988d5de6ffcc14e130ee8da818
-SHA512 (NetBSD-6.0/sparc64/binary/sets/etc.tgz) = 2e5d76dc66495eb24d8abd5eed70cb05cfef3190e81875f0d6e6da67af962b0de0062bc4e9758859647ebc5d4334bd9bc28a20508f8ddecc7c183de8174a4ed4
-RMD160 (NetBSD-6.0/sparc64/binary/sets/etc.tgz) = 3fe88c6bd07952ad383d6ab1dbb7d6c3d5315b4a
-MD5 (NetBSD-6.0/sparc64/binary/sets/etc.tgz) = 810c7b6940fd2e8049abf4318577f5fa
-SHA1 (NetBSD-6.0/sparc64/binary/sets/games.tgz) = a40f5681634cff38215edeb22795d4e5f3f35324
-SHA512 (NetBSD-6.0/sparc64/binary/sets/games.tgz) = ff66f16eea28f3191abed7466b21d1c1969f0556cb5a9a61e5167bb7a2c4e55ed8682222a389a04d44306b39b424be25623cf8bcd41c97139960ee48ba91199d
-RMD160 (NetBSD-6.0/sparc64/binary/sets/games.tgz) = c3cc1abe005bc98e0afebadc87f0181ba1fd8d6d
-MD5 (NetBSD-6.0/sparc64/binary/sets/games.tgz) = a70797dbec20b831d406952468b8376a
-SHA1 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.tgz) = c047c462dd890c992df60d0f23657638875f90c2
-SHA512 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.tgz) = 79ca275266c148fa3db47ac564e8f764c75b80a8243a0a32bbd3cd3392621b47733afdedf64f3a2103a99c03ee2f63494d892260951b85949e1383d3bf8c5673
-RMD160 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.tgz) = c0b40543a2674c1db7d554e9ad19f8e289683de8
-MD5 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.tgz) = a9346477bd0ae3d50b4b82f8f8da8531
-SHA1 (NetBSD-6.0/sparc64/binary/sets/modules.tgz) = c24c622359c9e5f8a05c03adb30e56c8a9862abd
-SHA512 (NetBSD-6.0/sparc64/binary/sets/modules.tgz) = f2f834fded5c1142611bd5ff4ebcec67db75f620256fb27689e4cc626785a1bdf90235965e2fc4f2ee7c0ba574e73063e7f13d7f85d291dd23395074517abb9d
-RMD160 (NetBSD-6.0/sparc64/binary/sets/modules.tgz) = 6a1b6845fc699f9837a88fc3c18585162a7a0aaa
-MD5 (NetBSD-6.0/sparc64/binary/sets/modules.tgz) = e8588a8eed7bb775dfb236cfc8c458d4
-SHA1 (NetBSD-6.0/sparc64/binary/sets/tests.tgz) = 1103500cca9a6dcabfafd50046f15e035a1d0914
-SHA512 (NetBSD-6.0/sparc64/binary/sets/tests.tgz) = cc628d649f4d16af2300baf5edbf075bc43c91b027c19dcd59b6f1be0ff1b02a3f8f97eb88db2f2bcfa93f69ef02653021f416c546dcdb0f0aa5bf4726257f79
-RMD160 (NetBSD-6.0/sparc64/binary/sets/tests.tgz) = ce47518fd68d02d821bb4b4060ea3a775f64e37e
-MD5 (NetBSD-6.0/sparc64/binary/sets/tests.tgz) = 2444ea500f4f8363d339a5eb58b50e27
-SHA1 (NetBSD-6.0/sparc64/binary/sets/text.tgz) = 09bdcb54fb74d5ae4e43b5b74a6a35467e385e09
-SHA512 (NetBSD-6.0/sparc64/binary/sets/text.tgz) = 82834b26dc0a102bdb5da4744fe2677fb50a6018b34a656d7f0813919bfe66168e37b5b47ad027ee6912fb77cceaa5a1cc33eef8269eb6a8a9f42368d01b3037
-RMD160 (NetBSD-6.0/sparc64/binary/sets/text.tgz) = 376a9a61492aed41b486fa58060edcb472152739
-MD5 (NetBSD-6.0/sparc64/binary/sets/text.tgz) = 69cce7d6bb4cb104cc27f75f17da32e2
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xbase.tgz) = 865d8aa735ba57980974089ee2e44d79c69cd036
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xbase.tgz) = 2b7f8d15caf6a2b831bdba3e8a2d4f78633f3350d0fc93f107c35cba746c1423c966313224422832484166e384a54b1fc2c75cba78ab138bf36e81c5468c2952
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xbase.tgz) = ec680d9c70f3e6729a19167932b552a727c628a5
-MD5 (NetBSD-6.0/sparc64/binary/sets/xbase.tgz) = a1907a4afda2ea247a6b54b158ac97f3
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xcomp.tgz) = c0b90da52efa86aadb3af4b7de3773c29289c65c
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xcomp.tgz) = d3774cc192c6ea74391dc0323db4f7e1695f290908c1ba68f885a9e670fb2c31f9a0c831a6020cd1a98e1b93691e02fadb260b26d8c6d252e9638ebf9cc0e8e5
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xcomp.tgz) = 40969f50dcfbfd6948b48f819a7f84957bf14134
-MD5 (NetBSD-6.0/sparc64/binary/sets/xcomp.tgz) = 681754abde2de73609efdcbc7370dbe4
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xetc.tgz) = 43c0a0b2db4bc88c509eb0d271a99e11f823babb
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xetc.tgz) = 4d28ba7d6db0b7c7cb005697eabd739544bae3e3128eb29b8ce62297b26b81d944d0992a6ca3522a51bb83ca874c4a5cf844e06a7aac0a6ab26b30838016faf2
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xetc.tgz) = bf885030bc65c540373a06e2b4c6257a5b634b61
-MD5 (NetBSD-6.0/sparc64/binary/sets/xetc.tgz) = 006f8b77a6fb41dad2dcbf2f28efdb8f
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xfont.tgz) = adf52a9866ae0e4b1e871102f664dd42907d327f
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xfont.tgz) = a02de6961b726d4f5fc291ac48a0a59d0f991ba96fd83788e766be8591e94a64eae0fdb23262f965042348516c52a173e332b8d90b21457d9089b7478273221c
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xfont.tgz) = b458181e798b9b33d15ad35adfb734a0b597d042
-MD5 (NetBSD-6.0/sparc64/binary/sets/xfont.tgz) = cf37180a29cdf9bd6a34a24a8608e6bd
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xserver.tgz) = 6ac9cf2e66f22ee56ef1d692e9bed5ae97092088
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xserver.tgz) = b6c611b3360d537e94339536354d0a5904137b519e4debab49a93a874429a115cee276f3550a6db23ec9caeb17af3ab162999d181189311a66d65f5230a3a99c
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xserver.tgz) = eb216c772571b79eb35e44285f8bed559eeb4fd7
-MD5 (NetBSD-6.0/sparc64/binary/sets/xserver.tgz) = e7994f53d2b295259dfb313f86d4fe4d
-SHA1 (NetBSD-6.0/sparc64/installation/miniroot/miniroot.fs.gz) = dcedff4706750585b89433f833cfe99fdd454400
-SHA512 (NetBSD-6.0/sparc64/installation/miniroot/miniroot.fs.gz) = 94360d4f72150432307bd097e8fa02b18bf3d63ea095b8cecfb4de863ab367c73268116681bb94083bef6445842d4718bfdeec200f57124e95c1de8dfff96b4a
-RMD160 (NetBSD-6.0/sparc64/installation/miniroot/miniroot.fs.gz) = 344981ca28094153d14b7d36321dc5e747f214cf
-MD5 (NetBSD-6.0/sparc64/installation/miniroot/miniroot.fs.gz) = 8e457a7c91b800f997cdaf6a17e79bc8
-SHA1 (NetBSD-6.0/sparc64/installation/misc/boot.fs.gz) = d5afbef3f3b358e77789ea7e9f22298a77415d22
-SHA512 (NetBSD-6.0/sparc64/installation/misc/boot.fs.gz) = aba7c9613d7a34e3b939644d37b0a8fb6c27fa0a8aa208aa729499b367f76fc6d5e1a9a06a5a779748c2d2ebfdf9521ac2fcd484608bf64ee3fa0eee8b97fd5c
-RMD160 (NetBSD-6.0/sparc64/installation/misc/boot.fs.gz) = bb8a8ed04649c3369dd5893897f7ea2ce7085739
-MD5 (NetBSD-6.0/sparc64/installation/misc/boot.fs.gz) = b9aef29dae0ef2a33611cd4655ff58f0
-SHA1 (NetBSD-6.0/sparc64/installation/misc/bootblk) = 9aee0c29c2eeb5c2e61aa9bfcd289e88c1fe1e97
-SHA512 (NetBSD-6.0/sparc64/installation/misc/bootblk) = 294708defc60602553eef0ae08ed910845b4c89ed72f33493c5fedad3737c9ae1cc96e947a11227e52505c62e04ad6d1f8f1f292df7e7885346acb824c4ea3fe
-RMD160 (NetBSD-6.0/sparc64/installation/misc/bootblk) = 28bd7d5c0fe6f33afb9627a3e3c8950ca062afa8
-MD5 (NetBSD-6.0/sparc64/installation/misc/bootblk) = 16b4c89c82c34d5795a50c811941022c
-SHA1 (NetBSD-6.0/sparc64/installation/misc/installboot) = d1cb90b57a258cef3671cc649d50aa7ea6f73f4e
-SHA512 (NetBSD-6.0/sparc64/installation/misc/installboot) = bf100237898c168e020c365da754b8a659b7cbc01ab310fd9b77a2ab60982c67e5f28cfbc7cd152ec37bc9591c1d0402c850803d57a45591282f774b97da3e2e
-RMD160 (NetBSD-6.0/sparc64/installation/misc/installboot) = 64f2ea944507466a6f5a61367e6190897cf00dc5
-MD5 (NetBSD-6.0/sparc64/installation/misc/installboot) = 7436c373285d89dc76dc705c3bbba5c0
-SHA1 (NetBSD-6.0/sparc64/installation/misc/instfs.tgz) = 3715a9104cdd1744835ef982a2a95525a5500c42
-SHA512 (NetBSD-6.0/sparc64/installation/misc/instfs.tgz) = 17a2112d5279ffd1a5889e55cf8e7081d564c330645f8c90082e324d413568db5bb58f8281a5b8e22d566b8699c326fa1661a0eb31d4b167874ea828a283bcc6
-RMD160 (NetBSD-6.0/sparc64/installation/misc/instfs.tgz) = 1065f4e43c679d182e72c654ce6a236f57350137
-MD5 (NetBSD-6.0/sparc64/installation/misc/instfs.tgz) = 75c25d3de06e50ff85364600e40380f4
-SHA1 (NetBSD-6.0/sparc64/installation/misc/ofwboot) = 42516022d9da6a2cd08daa28c5e60e68c6accd8b
-SHA512 (NetBSD-6.0/sparc64/installation/misc/ofwboot) = 1d63340007e8aefb0f0a725f444f8cd8bd62c68045c0ba6bede194f5d5f4c05a795f728ae00b4cdf65dd82cfa163c2f954ebc2a8caa54b35a908a337f1cac736
-RMD160 (NetBSD-6.0/sparc64/installation/misc/ofwboot) = 53bf739509e7c3fe2f4ef8cad8aecec6fed9fd1e
-MD5 (NetBSD-6.0/sparc64/installation/misc/ofwboot) = dfafb8bbdf16b3219ff2b38d69dffb87
-SHA1 (NetBSD-6.0/sparc64/installation/netboot/ofwboot.net) = 42516022d9da6a2cd08daa28c5e60e68c6accd8b
-SHA512 (NetBSD-6.0/sparc64/installation/netboot/ofwboot.net) = 1d63340007e8aefb0f0a725f444f8cd8bd62c68045c0ba6bede194f5d5f4c05a795f728ae00b4cdf65dd82cfa163c2f954ebc2a8caa54b35a908a337f1cac736
-RMD160 (NetBSD-6.0/sparc64/installation/netboot/ofwboot.net) = 53bf739509e7c3fe2f4ef8cad8aecec6fed9fd1e
-MD5 (NetBSD-6.0/sparc64/installation/netboot/ofwboot.net) = dfafb8bbdf16b3219ff2b38d69dffb87
-SHA1 (NetBSD-6.0/sparc64/INSTALL.html) = 0422ec241b04a9456f70ae28d29c7bc2be78b7f4
-SHA512 (NetBSD-6.0/sparc64/INSTALL.html) = 15bd5a5a0362c4412c416767608ce7b9580ebe8777ad15fa529af5a2e658a250000fa4a8d9313e2f7f718bc904518943d0ef095d8f0ba50deb50997f6a447fe7
-RMD160 (NetBSD-6.0/sparc64/INSTALL.html) = d534bc86ddea48b776c562b00bf67b686b91ea9d
-MD5 (NetBSD-6.0/sparc64/INSTALL.html) = 90c6044241bca2933db37134f775bf07
-SHA1 (NetBSD-6.0/sparc64/INSTALL.more) = 055a5f58c1a926fdc7d272cf573eddd0c868ef7f
-SHA512 (NetBSD-6.0/sparc64/INSTALL.more) = 403ee0491131f45d867e10305a65b801f95bd8fa195bfd4e95499d63ba74851774ef14f1fcc8cbd03220f973050903279438f15cb824ae2b294ead99c7d07bcc
-RMD160 (NetBSD-6.0/sparc64/INSTALL.more) = 1744bae9283a6f0e12f95e382f3bedd44bb6da14
-MD5 (NetBSD-6.0/sparc64/INSTALL.more) = c42b30d10ac37a1ac1270335414e796b
-SHA1 (NetBSD-6.0/sparc64/INSTALL.ps) = 60073507d2c04d97ccd9cbbf5fc51458cfd12509
-SHA512 (NetBSD-6.0/sparc64/INSTALL.ps) = 86c33bcc6fb6ff78056914afa17cfbd8efbea1f2100569f4169ba49d1033e4a86ea3ce49d1c5932012712bdf49bd356dcbe59aea4f8271c822482722dc08c7ce
-RMD160 (NetBSD-6.0/sparc64/INSTALL.ps) = 51b6801d68738b1606a65969c2ae3c3fa811310f
-MD5 (NetBSD-6.0/sparc64/INSTALL.ps) = bfeb86c3637bf7b5af6fcb553b62ab1b
-SHA1 (NetBSD-6.0/sparc64/INSTALL.txt) = 518f7cf7bfb65b40a409b78375c0276569ac5540
-SHA512 (NetBSD-6.0/sparc64/INSTALL.txt) = f3e1503729f62b588c53747850b7907b92d823f702ec484925d3c0173c6dd866626ef500b8b581f72d54ce4b2aa72788a5543d98c72408a5060067b832e93a88
-RMD160 (NetBSD-6.0/sparc64/INSTALL.txt) = 2716b124f107462bce88b2bc12d54d5d5aaaef81
-MD5 (NetBSD-6.0/sparc64/INSTALL.txt) = 26984ffe79eab5c070bafdc74267e26a
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.symbols.gz) = a1a418aa1a4815cd42b51d842b61002b4acded14
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.symbols.gz) = 272b8dc02294eb259adca2d15a6ea1633066c7708a1d8461d5d299bc7ff5887510fd6f20f490a781813fd61e6f95eed92ef03ba3b4f846ba4ecfe6b7a1d91682
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.symbols.gz) = c69407e3e5bddd21575929744fd986e7795c7382
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.symbols.gz) = c47a2dcd2bac0d4ade29e3ceba7b8b90
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-DISKLESS.gz) = c6cb928563370afd5d467adbd4d24a0ac37bc8c0
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-DISKLESS.gz) = e24a4feb31212693c9c77732473107dc01cbe19c4d23a3f50a7028079f669e66c5252b9d39904e4d1daab0af8ac020b993f36f027df256a008249a8879d848f9
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-DISKLESS.gz) = b3bd2f4f03f92c810f3b21d3163d4fad1383a0a9
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-DISKLESS.gz) = 2d2987883fb76005f8b4ca0686fdb261
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-FOURMEG.gz) = 83451516991b23dddcd67b3d4aed3d4d5eef0af9
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-FOURMEG.gz) = 8ea5066dcd3ab85ca812a169d2a385befcf5717e1dca01c4d5a9daae2368498c1eedcb683aa76d912be0cb6193217c33a5819d8c597521a21fd9ccc5c4f84932
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-FOURMEG.gz) = f8dbe58a262e48a7a1bdddfad8bcbf4c02455f93
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-FOURMEG.gz) = f717bd51debc97e9efb5979b5ba425e8
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-GENERIC.gz) = 89a4c10827c07a9100a4cf7692012221e6f7d99d
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-GENERIC.gz) = f53dd3eaf33dac52acfcbd6657269783ca14c1a33ea4e0cdf47fe96f3a620961e07905d5eccc2e15ff75cb0910f9e47d8a37487c7a8b455db494b5690d9ce5cf
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-GENERIC.gz) = dca21703d8350ff9c84920da0fe38b4e96b58c73
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-GENERIC.gz) = 5be2117280d7f1f78689744e44903f49
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-INSTALL.gz) = 31619c78adb4831a8ae456942ee6a31c5bc0576b
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-INSTALL.gz) = 08d1e00c5013bfab18920543807657eb480d54d0270d1699a9a583ac0c8fd4df0750924727ee2723c7ad6bd1c0450c5c89378c450b412ab6d6e6c8be723f2b86
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-INSTALL.gz) = 3d651236509dbd65a585082b2adffa0abd47c298
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-INSTALL.gz) = d39784e7514b56ad37120e1accca74e9
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.gz) = abe6ff67ad153c993974749b41bbf6b2e207792a
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.gz) = 63fcbf6f7b5582b69aa77b4dcfed2125f32b40a622b2eb533eefd92bf829513488e37c4947c44e004ec8006a7e35030fb3e500f1584922101d376e9cc67dc8aa
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.gz) = aa2ba7c4930e6f557f809407458f12a5fe2da818
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.gz) = 10a7099f6bfc84a63eb89985f93dfab6
-SHA1 (NetBSD-6.0/sun2/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sun2/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sun2/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sun2/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sun2/binary/sets/kern-DISKLESS.tgz) = a6ddacc5894ed442e82fc8ad75e4ba5a85acbdd0
-SHA512 (NetBSD-6.0/sun2/binary/sets/kern-DISKLESS.tgz) = 7b0afaf8fcafd005d56142659c130fa14fed8681f0907c262b52ba367db985390c1ada5b3c22705655fb8fdbdb2577f112b2e867dae8a47d30da17db9f68dca1
-RMD160 (NetBSD-6.0/sun2/binary/sets/kern-DISKLESS.tgz) = b1566d3099e8654a48e74a7f4b959d22ce72241a
-MD5 (NetBSD-6.0/sun2/binary/sets/kern-DISKLESS.tgz) = 320ebbbe9568d045ad4dc2f4284e45e5
-SHA1 (NetBSD-6.0/sun2/binary/sets/base.tgz) = cdfdfc1f6d5fd3fab1cd9e5546d1060a4cb16b45
-SHA512 (NetBSD-6.0/sun2/binary/sets/base.tgz) = d7a0059ea7babe24d603084826c5a338b33ef3ac4ce1a6039f926692141f28e32d654656a85e995aa000742f8971b33d3e4fad8dbee8a9e6b3cac2c15b9cf01d
-RMD160 (NetBSD-6.0/sun2/binary/sets/base.tgz) = 3652a11470a78517f725320750e8a61c5328510f
-MD5 (NetBSD-6.0/sun2/binary/sets/base.tgz) = 3505f44ff71277ff11e5402646e110ef
-SHA1 (NetBSD-6.0/sun2/binary/sets/comp.tgz) = 40c4eb1b75f3e903a92ea86d8919fd23a56e470d
-SHA512 (NetBSD-6.0/sun2/binary/sets/comp.tgz) = a52435520af63ae741654d81bdd5abd611857aaa19dc757bce5c841fa13b15d878780509be22a31ed893a2a4ca1c29548c5a737a2a650a7241805b518f9c70ac
-RMD160 (NetBSD-6.0/sun2/binary/sets/comp.tgz) = d51f8b1dbebe3ba6c4c3623351e647981b20f9da
-MD5 (NetBSD-6.0/sun2/binary/sets/comp.tgz) = cfdfa248cfcb4e2ae4af64f3f8a4eddf
-SHA1 (NetBSD-6.0/sun2/binary/sets/etc.tgz) = 5872a9f5eeb6004802bba9df4a0d4ec1dfccea8d
-SHA512 (NetBSD-6.0/sun2/binary/sets/etc.tgz) = 617be23175e9c578e834e039720a0c23357cd24b22639c5641a54c5b36ccb725446cda8e3c3def6e8e73c39c1f90065c348a0ea990f7a50384ba9a65ada10e16
-RMD160 (NetBSD-6.0/sun2/binary/sets/etc.tgz) = fa533eae2fafa51d8e2643dbe20be6ac179f5d05
-MD5 (NetBSD-6.0/sun2/binary/sets/etc.tgz) = ea43e005a9a50dcbbf704fa27745eb78
-SHA1 (NetBSD-6.0/sun2/binary/sets/games.tgz) = 97fe1f17370ab456fea7c21c66dabbaefbb8bf39
-SHA512 (NetBSD-6.0/sun2/binary/sets/games.tgz) = 2dfb36fb06f40d0ce519fe3808d53b8babd8bc9ae810c4fadb09e84e93e57b88b893c04cecbaf062c4ed2257eacec30127513aaca5c91ef9234da9226f366c4f
-RMD160 (NetBSD-6.0/sun2/binary/sets/games.tgz) = 6affdde9886085d8acd3bef196096dbff77fd99f
-MD5 (NetBSD-6.0/sun2/binary/sets/games.tgz) = 7eeaf3572032c8e522266e0283594105
-SHA1 (NetBSD-6.0/sun2/binary/sets/kern-FOURMEG.tgz) = 81e4d6b63aa15ea1f60604aa24a21d0eb4ddedf0
-SHA512 (NetBSD-6.0/sun2/binary/sets/kern-FOURMEG.tgz) = 117485cb1d871f3e643c009a998998885011c1d2d826ec2db092d0e3569a21fc63618a73a803332fdd936ecb30738e76f75be3e76ee17d71b190a8bb188aa873
-RMD160 (NetBSD-6.0/sun2/binary/sets/kern-FOURMEG.tgz) = 3c7e6d14f1a2a9b288f245ad0d6f115469b060c2
-MD5 (NetBSD-6.0/sun2/binary/sets/kern-FOURMEG.tgz) = f9ac31754f27f2e22aff03c5ce4e166d
-SHA1 (NetBSD-6.0/sun2/binary/sets/kern-GENERIC.tgz) = 05b5ac2735fe34a61df42c13670bf7a758b8c37a
-SHA512 (NetBSD-6.0/sun2/binary/sets/kern-GENERIC.tgz) = d5273855067665e77291f477adc2bcf482db2ac749b078502d04bc53b103977f4f16da05acbe917a97d4bba20626dd1954132939cfcf168cf8b75f5e12fe71b6
-RMD160 (NetBSD-6.0/sun2/binary/sets/kern-GENERIC.tgz) = bf5c45b36a68224af25aca91aa2eac8d213442c9
-MD5 (NetBSD-6.0/sun2/binary/sets/kern-GENERIC.tgz) = baac1013c64948cd3fb2bff22a21e5c4
-SHA1 (NetBSD-6.0/sun2/binary/sets/man.tgz) = 9bb0fc4bb2f60df3acbdcbd6d03d11e52227c70f
-SHA512 (NetBSD-6.0/sun2/binary/sets/man.tgz) = 3bdb75b91c18982b39f2c2842d9260749491f16c6da624510c603ef0e897298f6ecd620a63a96ccf21354f6a4008b4723249635280e4e956a4668d1984faf7f5
-RMD160 (NetBSD-6.0/sun2/binary/sets/man.tgz) = 3b28f01096b5070887994e84b171cd6c59f0ad94
-MD5 (NetBSD-6.0/sun2/binary/sets/man.tgz) = 06cfb9c81392e3ae7b04daa01475db38
-SHA1 (NetBSD-6.0/sun2/binary/sets/modules.tgz) = 0ff7c443e874d15372f107b6772b5004ee0ff6d2
-SHA512 (NetBSD-6.0/sun2/binary/sets/modules.tgz) = ad3913a8edf4494515dab3a4df4a56799f7cb2cf335ca9e4cf78e61a8b92f161cf2148ea2201ce9e9a6966872c5ee749b69642205ef4fa475aae1b3671e49d69
-RMD160 (NetBSD-6.0/sun2/binary/sets/modules.tgz) = ecbeaeb92cd60504c907b743ebf8bc729483eb35
-MD5 (NetBSD-6.0/sun2/binary/sets/modules.tgz) = 94f595d3a8f52f8b7b202c1715896b1e
-SHA1 (NetBSD-6.0/sun2/binary/sets/tests.tgz) = 4651980ab126f0fb7fa3282e401fed649129dd46
-SHA512 (NetBSD-6.0/sun2/binary/sets/tests.tgz) = 4fcec0fde688d32f2f53d0c3d6ec9218a2c670f0006b421ab907098f7210481d0ef690d9e8415dd5201be799f83b303a8a2a5b4f8b35af16b311b4996a353b93
-RMD160 (NetBSD-6.0/sun2/binary/sets/tests.tgz) = d260affd3d3656aa73171aca7e8f40f2f502a645
-MD5 (NetBSD-6.0/sun2/binary/sets/tests.tgz) = 801c9c531d070d152c1f259dd1111f64
-SHA1 (NetBSD-6.0/sun2/binary/sets/text.tgz) = b76b4bc516bd7a1747415f9bdbd6af7370cded48
-SHA512 (NetBSD-6.0/sun2/binary/sets/text.tgz) = 5654c7217b9d02e327c7803de1dc67d5df4225d1399c3c0a433728fb2fc124ddf0fb2e8cc89d304e03a7c1104a1e1b6ff665b5b29825e3afb0acb43f37fa327a
-RMD160 (NetBSD-6.0/sun2/binary/sets/text.tgz) = 89f288a449a1049aabef74f6033bf00611123bf7
-MD5 (NetBSD-6.0/sun2/binary/sets/text.tgz) = bc500c71253fd2e2b3bb1dac2bf2b738
-SHA1 (NetBSD-6.0/sun2/installation/miniroot/miniroot.fs.gz) = 74ae5c6fe766a40a9bf149885809186bdaae96ff
-SHA512 (NetBSD-6.0/sun2/installation/miniroot/miniroot.fs.gz) = 4c7ab73a13c13b3b4cd7a01e12ca25d7a385691dee2b830fb94885c9eece4e62c45cdb9e3961b5426f0e979b2e0f2e951c52774231129f824787ee6daa8d8ed1
-RMD160 (NetBSD-6.0/sun2/installation/miniroot/miniroot.fs.gz) = 032b6ddf1452800c8f824983c6d3c1310ba723dc
-MD5 (NetBSD-6.0/sun2/installation/miniroot/miniroot.fs.gz) = 6d2927b0648b018b2726f7159e60a911
-SHA1 (NetBSD-6.0/sun2/installation/netboot/bootyy) = f97ac30d2c6258791d64d408e295cc2f48e7892b
-SHA512 (NetBSD-6.0/sun2/installation/netboot/bootyy) = c0aa6a81071323564d4445ae06b9e0629b32b118bf6c516e28109d3c2d7a72613b8a2005b6f968a43acc6115e3edba57f15c314b77a774cfbb977ff668dd946b
-RMD160 (NetBSD-6.0/sun2/installation/netboot/bootyy) = 3de2112b92a222b55ffeff2d5930ed5eccf70a7a
-MD5 (NetBSD-6.0/sun2/installation/netboot/bootyy) = 7a6fce60607e791e1c40186b0b7a5403
-SHA1 (NetBSD-6.0/sun2/installation/netboot/netboot) = f0ab4e961148d2d8885a47a4fd1b2bc1350e4978
-SHA512 (NetBSD-6.0/sun2/installation/netboot/netboot) = b462fb05ea093921b40a1042c15b0013a848c7b022f22523e3dfe73e0141b35982d26825812604bbfcb735f8851fafe9709979d90fb1db21ee552f0e93db6a86
-RMD160 (NetBSD-6.0/sun2/installation/netboot/netboot) = c7c6416042d8ed641a8ed033541a7757492229ba
-MD5 (NetBSD-6.0/sun2/installation/netboot/netboot) = 52d961060a7035f07cb1946d71736289
-SHA1 (NetBSD-6.0/sun2/installation/tapeimage/MakeBootTape) = 1c24969b0bded7ed9bed7203e9c577d896d25566
-SHA512 (NetBSD-6.0/sun2/installation/tapeimage/MakeBootTape) = 33eeb495736ac60dabd87faf803defa85f2e400f49b1b4078c16aff18404673a7e668676dc90eb92dc597835ccac8abe26fb68ecb22ddc5afd5afd7de8f2d680
-RMD160 (NetBSD-6.0/sun2/installation/tapeimage/MakeBootTape) = 234492df364f78e2aef3c9cd8ac4496077ba2760
-MD5 (NetBSD-6.0/sun2/installation/tapeimage/MakeBootTape) = 924860ba84acf16d29a70783d6e106a3
-SHA1 (NetBSD-6.0/sun2/installation/tapeimage/MakeInstTape) = 75b8d9faa2e1960a48354922aef5c25c76f66ee6
-SHA512 (NetBSD-6.0/sun2/installation/tapeimage/MakeInstTape) = ba61feb33064bdb843f8cd563135cc8fe28e9bbbaf8d1ac2eba2c5e1ad083daba83b47295f3c677caa014c9be7606ef6a40a6c1bc9b07e4eaed139d8299be97d
-RMD160 (NetBSD-6.0/sun2/installation/tapeimage/MakeInstTape) = 198879d5058f7ee226c4c669f3a7429bb49c12ce
-MD5 (NetBSD-6.0/sun2/installation/tapeimage/MakeInstTape) = 58a95592c402c3f752f4c801fa3d20a7
-SHA1 (NetBSD-6.0/sun2/installation/tapeimage/tapeboot) = 1612942dd5bbca5773de6ac02723ea898ea4e172
-SHA512 (NetBSD-6.0/sun2/installation/tapeimage/tapeboot) = c5b75882d4b9041edfd74cbf9dc4df8393e687503043e77af766452d780cc8a5584b916d0a792748730e9c87bd52803bbfc0a043720e611079a5cdcce6243bff
-RMD160 (NetBSD-6.0/sun2/installation/tapeimage/tapeboot) = 61a36a8d1737147b7b4587353f974c87fca2b442
-MD5 (NetBSD-6.0/sun2/installation/tapeimage/tapeboot) = 751ee54f544a63177c273ea6757dbdc0
-SHA1 (NetBSD-6.0/sun2/INSTALL.html) = 40cf15ad864adcc8d6216b9d4220cc3eab1463ff
-SHA512 (NetBSD-6.0/sun2/INSTALL.html) = 0992031a6cae198c16b08553e94277a39b34886cf0bfea343b95493439d79868cd50a1c2b9f2ce9852068b43beb7ee2a2016480c3ea452b9d62a25b71c72d567
-RMD160 (NetBSD-6.0/sun2/INSTALL.html) = f7aaba481555931612488d204c9a256899f04efb
-MD5 (NetBSD-6.0/sun2/INSTALL.html) = ccf725a8f39711748946cc414f688dde
-SHA1 (NetBSD-6.0/sun2/INSTALL.more) = 21b6ecc61f6d15fd2b54511150b840b242996f02
-SHA512 (NetBSD-6.0/sun2/INSTALL.more) = 5c43f22fe85470c7069ea524ff18570a1a3605a956157d9f662cf8b76fa6f52e4eef41e765488ae00b491830cde3b148254ed5bec6b20db0f5661d29ff0f7fce
-RMD160 (NetBSD-6.0/sun2/INSTALL.more) = 9adc2008a6388ec7ce907c23ac6f1de1f941c979
-MD5 (NetBSD-6.0/sun2/INSTALL.more) = 79afb0a5f30435a2731e455a85884a28
-SHA1 (NetBSD-6.0/sun2/INSTALL.ps) = 37c7ffa52cf698e058442a61d937a0ad09fa0156
-SHA512 (NetBSD-6.0/sun2/INSTALL.ps) = 09998f504688d7144d223f857edd4273bf00c1c50b1ec47294db2be1abdc050cbf73d0037c0b88279fb1028fde2556bbcadc2d4fbb7466834385905c46f3d688
-RMD160 (NetBSD-6.0/sun2/INSTALL.ps) = cac0f152af9ddd8fd643b2578688e7db03a3deb5
-MD5 (NetBSD-6.0/sun2/INSTALL.ps) = b2a094aacd3846aa4c121629daa938fb
-SHA1 (NetBSD-6.0/sun2/INSTALL.txt) = 90377374ac7c61d0fb6bafdaecd790a86fe7a447
-SHA512 (NetBSD-6.0/sun2/INSTALL.txt) = c37c159387cdfa0f40268a16c5a55cef0473b31f51e5c978ec948fe4964d3e9574dd9bbbd758eccb9304a9af6d8216b38aa256676a36537b480a5606b2cb1fde
-RMD160 (NetBSD-6.0/sun2/INSTALL.txt) = b16dee40608a6b8e8022df13c27783e34e48279f
-MD5 (NetBSD-6.0/sun2/INSTALL.txt) = b33826d2ef20420c36a3723256cd4488
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS3X.gz) = 08ec51564fa19e69828a501a60ac05c687f8471f
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS3X.gz) = d31891f04947a6295085ee899ccb5d532b5e50eb66d1c4f7f7779aae9a1c711b54e142c1d26f45ce10f6ef6815894fe545b436d40cc0ba05149e02885981f029
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS3X.gz) = a71a82ee59a431dd5c7a6d5100d84fd264ca4e4c
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS3X.gz) = 261995193793314b7306c5753aed0e23
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS.gz) = 941fbb0e064253228f04d4baaa8e2db4a09b8d88
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS.gz) = 2013168c4985c258bd2f605cda56dd678c394580edf2afa1fb37fd243b748b4d50e049a2f4b314ee5b70f30d181ec684d886094258115a0cdf0e485c120a2628
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS.gz) = 6028696adecea1922e0bdb1d757a4d70725c3639
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS.gz) = a49e05dd12628e1fcf1a30e8815ea72e
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.symbols.gz) = be5066fcab92b01e828769c3766ac902896a9dae
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.symbols.gz) = cc0f0b30fa4b28c2fbaf9229568530ee61e17b9ec8515242e53d4d6ac32d1f3ace313c4d138ff173a2301e208ded7389e93551a4a05d7f9a5bf536a8566c2de2
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.symbols.gz) = 832199c94540e3274e2376b17e23144cf99af3c7
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.symbols.gz) = fb76fe7920f7c1e0138270f64dd90315
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC.gz) = a1458c3d482f170ce26ff1b4ae12fcbe82206cd0
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC.gz) = 703f16ca7fb7cddbf33e84bf7859d73ad619464c859927767e6f3e292c63b7da65ed90d20a32cb7364f425c41aff05e0a08f7ba4e7bcfaa04804f4389425d402
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC.gz) = 5a542bbb7c45f6940f5c9a63deba729d2d6e8b75
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC.gz) = 28729a3aab91b7b81a0bb5af1378c67c
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC3X.gz) = 50f6f8937a0b18960660908aea8a5cd490175077
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC3X.gz) = 2798612a5e0d6d60f80dded7a22bdd6c1f5a64709b65fa33bfe8dfa873c38da0269b0a080185efe2025b5682ba9fd18bb3063a1133f8227cdc41acb03fc4bc2c
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC3X.gz) = ecd36a3bb10a07cb7dacfd2a8add6b4e51eddcf1
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC3X.gz) = 63a3954b02444ee35ebdfc8a280c6eb8
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL.gz) = 2da156899061f57aabfe77a55081e1281cc46107
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL.gz) = a316b1fb791d3df671cf366c911756cd9e87735247eda75372d73075bd8ec8bfae4aba620740f86cfe8011ffe0614777d480d4979ca021912702ce5699865244
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL.gz) = 51a1809d8ddf6701d556d858a18416a72afb0f37
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL.gz) = b4a756c7502efd5883243e26139d206a
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL3X.gz) = 78f041430b2aafc6768aef55603c4427f90c44ed
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL3X.gz) = be3a7f26745d4693d2393f0ee044871dca2ec554f8897b7ec54bba85ff3cd75143a548fa0880bb76810d2811018c9c3b5e8cc44fbe163588b82c0344a2f0cf81
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL3X.gz) = 9d21135a1448a6fdc1fa052c56434cf809e43046
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL3X.gz) = 0ff6857605eea16d5d90a85b77335229
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.gz) = 6f90c82aa6150d861190e41dca228549cedcc458
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.gz) = e4e4f5901d286b164f9e4b471f6084a6ba879c91b21b4e86f44650ccf0447698a11f33008d75cb3e12673396094d91e2d715e24b596727cb97c125340fa82abe
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.gz) = 13e4983150a8508d64c022000d27b77c1e0da384
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.gz) = 6ce2d84c334909c66b0d54b928fdcb2d
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.symbols.gz) = 6c31ae63d1149ae040b2f04fdcce0f41aa8095af
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.symbols.gz) = f986b22aef0685dbb454c95d9f0f6b7379a15b365f56f3a13e1357b8b2bf7fb787b09eb4b474d06dd78e6869152e6493177f911929f972a819f688af90854d1e
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.symbols.gz) = 18640447fceaf27b7ebfd19917bf40521718c441
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.symbols.gz) = 639d60631052afddcfb58f64847964c8
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.gz) = 78efb67e8cb813af99a12a1c67c9238916bb1071
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.gz) = ef27cfba56aff6b13544132e71513598e68e488cb27b7038442279eaec9d6a715cf9196ce98d93acfc4a7e89cb679e5ce787f7c4b14a661a2113b1a987861a9f
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.gz) = 556c68e9415f0795d58c4f8c491eed75755a59fa
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.gz) = ff2a3fad6f6dd6504713e5874b3eb8cb
-SHA1 (NetBSD-6.0/sun3/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/sun3/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/sun3/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/sun3/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/sun3/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sun3/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sun3/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sun3/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sun3/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sun3/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sun3/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sun3/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sun3/binary/sets/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/sun3/binary/sets/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/sun3/binary/sets/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/sun3/binary/sets/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/sun3/binary/sets/xetc.tgz) = d2ca34bd668e108cbbfd4b45720823663339f8bd
-SHA512 (NetBSD-6.0/sun3/binary/sets/xetc.tgz) = 431ca465f300e7eb5d4dbd44c43e412a296fb4d3129217e752f86a720e8a8bdf736c9add05a45518a4f3e6cffa32381ef61e9186d360b68a5f8c64d87e385fb5
-RMD160 (NetBSD-6.0/sun3/binary/sets/xetc.tgz) = 4c5d664679856b02b694534cd6afdf20597e6d53
-MD5 (NetBSD-6.0/sun3/binary/sets/xetc.tgz) = 72bd67556ac14ea0ce147374af0ba624
-SHA1 (NetBSD-6.0/sun3/binary/sets/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/sun3/binary/sets/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/sun3/binary/sets/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/sun3/binary/sets/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS.tgz) = 00b387b99dc84b6128941ae2b849feb76c7f88c8
-SHA512 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS.tgz) = 0b2cf325d14f69c5905bd6d832adfdc806bec302780811c6ad50ecbb646de07d1e91dd0cf16873b0128a44688f9e810d83ae7c6a4415b8393ea0567fe77d5f32
-RMD160 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS.tgz) = 71913a5ec9bab31e74ff27ab154715fd84b34a96
-MD5 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS.tgz) = 6988897d69e304577b9f493c44425ddb
-SHA1 (NetBSD-6.0/sun3/binary/sets/base.tgz) = 43ba28352421316629ca0c4a93709af5e5b588cd
-SHA512 (NetBSD-6.0/sun3/binary/sets/base.tgz) = 1b0efd643066d4cc5d689a64ba97092091ac8b94ac5244ca7955b27aa6ce60eaec0f020390d9ed60c00f894312fce76d1ca0555ac4626a4c5c140beb57b97ba4
-RMD160 (NetBSD-6.0/sun3/binary/sets/base.tgz) = 46456971e8d821c310f3ac304fcda320396916be
-MD5 (NetBSD-6.0/sun3/binary/sets/base.tgz) = ed8d7947e7e5282728b94a7fbae41ea3
-SHA1 (NetBSD-6.0/sun3/binary/sets/comp.tgz) = 960167513f2de6e53e0512ba9d8a8fa891d7f096
-SHA512 (NetBSD-6.0/sun3/binary/sets/comp.tgz) = a6d2d94ad9a752263254736253c7be190d2baa69140ca1e40c06719dfb89dd5660fa83c72392b2c5b30c0caee058cb049029b8414fdd48017fba2615781dc08b
-RMD160 (NetBSD-6.0/sun3/binary/sets/comp.tgz) = 9d995295dc5806397c31541ccd589210c0f675b2
-MD5 (NetBSD-6.0/sun3/binary/sets/comp.tgz) = 3f277a5219ca41a91776606698660e31
-SHA1 (NetBSD-6.0/sun3/binary/sets/etc.tgz) = be0c7f05a0122f7fa7e2bf1cf643080c5b434c1b
-SHA512 (NetBSD-6.0/sun3/binary/sets/etc.tgz) = 64d9a05110471e97c99c53479a14ba17dedd7c42f1471e26e2b8e73770d94a27b77ca12ab6cc014f8c131fb6757a26a565d4b8c71e78cab8dbbd21608fa76c33
-RMD160 (NetBSD-6.0/sun3/binary/sets/etc.tgz) = c4c29b032978e5a6f803c353d4d5b5ab4c58985d
-MD5 (NetBSD-6.0/sun3/binary/sets/etc.tgz) = 68851b8898496b07817e828fee991233
-SHA1 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS3X.tgz) = a63f54a0db8362478ef1f3fbbc18060e3834723a
-SHA512 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS3X.tgz) = 5ff8b7a463fc5e0edd17f47d2c59a01f9c53f23db8e73ba7bb0e67c73cd84d2688a22aa8e6b56bdccc29a0056fafeb6c984ea6a34a01e454a93d62eb2c54b623
-RMD160 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS3X.tgz) = 6ff482b8e336432022ac05a24c376d746fe7f8e8
-MD5 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS3X.tgz) = 1f49b690f568492ba1d2ff5cfd76ec6c
-SHA1 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC.tgz) = 9eb75c58a99f7b046dab7888235bf8162b10834c
-SHA512 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC.tgz) = 9cdcf4835398df2124cc418b977f1cdffaa87d4edaff2c61ded06b44cbd5aa656743e74abd4b5ccd5f7232e0890f4786523d4438feed288bf77df1482fbbb9fd
-RMD160 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC.tgz) = 8a50ed11d968a35170c50ddfcd51c3cfeaa7dfc0
-MD5 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC.tgz) = 510f2e6a9de0cd18e8dfc6cce74964d2
-SHA1 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC3X.tgz) = fc31315a9d236278dc8b6dda1e1385680e35eb4c
-SHA512 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC3X.tgz) = 9de034f2f6ee9cf0c65ba4fc41bf7147205c9918263131957d8555c7d54997d98dead2108ec2fac89805d371e673bd66abb93715b61f3c7a71c9db8caf761c40
-RMD160 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC3X.tgz) = d1b03f8e7188324e362e4fbd7764d4218a3a98d4
-MD5 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC3X.tgz) = b8b84407a1e0d4e215a494aee08eafa8
-SHA1 (NetBSD-6.0/sun3/binary/sets/modules.tgz) = 7c6df8904730e2b7d3ea7e98d3a88ee7450e937c
-SHA512 (NetBSD-6.0/sun3/binary/sets/modules.tgz) = 95d55d7951896249f4b1b3c38ba80c75c415ffee77e3294f40f8680756cb1cd5b5c2b74740ccd66f218474f220f9603feb81bf9e6d72fa130a9ec3c595abba63
-RMD160 (NetBSD-6.0/sun3/binary/sets/modules.tgz) = 485905b274e58b342035d5485507e7c018ee62f0
-MD5 (NetBSD-6.0/sun3/binary/sets/modules.tgz) = 5350f1aec24cf27edd1c4d50c916ba33
-SHA1 (NetBSD-6.0/sun3/binary/sets/tests.tgz) = b76bdb5e8311a0fe1f22aab836007d5cbaf92618
-SHA512 (NetBSD-6.0/sun3/binary/sets/tests.tgz) = 475835a862280be0709e09a8ea5eb132d8c068c63df12dcc925ff3268250afbde228b593f66061d2b946dabc19eeebbb1a4fd313a751c4e5fd8a63ba63f2fdc4
-RMD160 (NetBSD-6.0/sun3/binary/sets/tests.tgz) = 58e77c597950e782b3c75967d864ebbc961ffede
-MD5 (NetBSD-6.0/sun3/binary/sets/tests.tgz) = 729752bb47500babd316c4776ba02e80
-SHA1 (NetBSD-6.0/sun3/binary/sets/text.tgz) = edf2e1f8352a2c45287ecff9c473da4673473a6f
-SHA512 (NetBSD-6.0/sun3/binary/sets/text.tgz) = 2098084f46640c2f45b0fb916a2123eacc2e390faaa04e3a8ea99d93f41c4ca5ba77d4192805b13a053ad8262aecccc2228448c9f048c03c96ca51869f342ebd
-RMD160 (NetBSD-6.0/sun3/binary/sets/text.tgz) = 1adc9b33d9aec637e1f8e7888f07076d500b2ea6
-MD5 (NetBSD-6.0/sun3/binary/sets/text.tgz) = 60c2eabb16dd9df538a98153e2dc7dc7
-SHA1 (NetBSD-6.0/sun3/binary/sets/xbase.tgz) = 404b75757bcc91b281fbd5ec9b9333e6c106579d
-SHA512 (NetBSD-6.0/sun3/binary/sets/xbase.tgz) = 0f1604049c7e1caac48d610304a1490d2e55dcf3f6a325139eaa57a38211836c479b1dc070cc3b8b0afcdddac7a84b679d96330f65f86015a80b7800fdca633e
-RMD160 (NetBSD-6.0/sun3/binary/sets/xbase.tgz) = b1e258608f09cd175c9e15844371daff5fe0f027
-MD5 (NetBSD-6.0/sun3/binary/sets/xbase.tgz) = a7ecfb2c66b224ecf2460fe5c6715f0b
-SHA1 (NetBSD-6.0/sun3/binary/sets/xserver.tgz) = 88091f11f474465d1a996569643d6e22cf08f717
-SHA512 (NetBSD-6.0/sun3/binary/sets/xserver.tgz) = 36de7d4b8be72d53d5f90a144d278359da55008917d2747419d3347d53989e9ceca6230fb2596d4ce6257d1bc9f171c6b9a8e738af86930adc8535e726a8e356
-RMD160 (NetBSD-6.0/sun3/binary/sets/xserver.tgz) = e161f48499d8f1ca64b22d65365704f65344875a
-MD5 (NetBSD-6.0/sun3/binary/sets/xserver.tgz) = 6ed6442ab169c491e991c8074512bb48
-SHA1 (NetBSD-6.0/sun3/installation/miniroot/miniroot.fs.gz) = 8b01f52ec164477fb5ec72725d941e3330c7da94
-SHA512 (NetBSD-6.0/sun3/installation/miniroot/miniroot.fs.gz) = fb6995a81aeb2f9fb89e096290cf0921e92b1b2be0adaf95dd2b62c89bbd047b0879231d4e5805a68bd023026ce563bf6f0fc3214ecfabc449650dee9790385f
-RMD160 (NetBSD-6.0/sun3/installation/miniroot/miniroot.fs.gz) = 54d3f3d3782536c89d2b6bbf6abb793617c83925
-MD5 (NetBSD-6.0/sun3/installation/miniroot/miniroot.fs.gz) = f9994dd6a5b9837915a4ff01a7c9baa2
-SHA1 (NetBSD-6.0/sun3/installation/netboot/netboot) = 88a9ccc7444c4692483705ef90da4af422b33497
-SHA512 (NetBSD-6.0/sun3/installation/netboot/netboot) = f0810823fbe7335cc83516a71bdf4d5ab281fc2fb71309d76cb979e741af00d81b55e4b298af07e4932ec8e70a79518ace9af7ebc3b5d8a3328555785a8c2d2b
-RMD160 (NetBSD-6.0/sun3/installation/netboot/netboot) = 57b89f091bf51dfda7a3b1b3e92bdd0c7e96e958
-MD5 (NetBSD-6.0/sun3/installation/netboot/netboot) = 9041ee544a0625228cbbb93e06d2961f
-SHA1 (NetBSD-6.0/sun3/installation/tapeimage/MakeBootTape) = 2b66897333fbeba29a086477f6d25026b6d60e55
-SHA512 (NetBSD-6.0/sun3/installation/tapeimage/MakeBootTape) = db9307323e7dc0d394fb2b8e012c86df51109357851f2c5ee7894468d4e3b54465ca5015141621fd9d28aeb7a2eef0beac987fc7faeee223f9571ff4589d1036
-RMD160 (NetBSD-6.0/sun3/installation/tapeimage/MakeBootTape) = 986f20c8bab33006ea857b9f925b964ab43b9b03
-MD5 (NetBSD-6.0/sun3/installation/tapeimage/MakeBootTape) = 68ea84a134fa2781294912ca85d4b1ee
-SHA1 (NetBSD-6.0/sun3/installation/tapeimage/MakeInstTape) = a242866885b14ec2e624319b2fe1fc4f940a422f
-SHA512 (NetBSD-6.0/sun3/installation/tapeimage/MakeInstTape) = bd5950ce181ae973784c56bed18085fdfd6fd8b1a46d83564c798c130bc265f7a811cb896be8b9f8f78f014aa1a1d37e34b307a7f806ad8f7790ce2308856b61
-RMD160 (NetBSD-6.0/sun3/installation/tapeimage/MakeInstTape) = cb0330a75c5b5fa600e3789d81ff75f1c1d81078
-MD5 (NetBSD-6.0/sun3/installation/tapeimage/MakeInstTape) = fdc38b08d909159925b6a4efca11a498
-SHA1 (NetBSD-6.0/sun3/installation/tapeimage/tapeboot) = 276be9760458783489c93cea994dc73289ace945
-SHA512 (NetBSD-6.0/sun3/installation/tapeimage/tapeboot) = 7d6f1a348f99e42960f1697105d2771228a921860b0bd78624e96efcd9dde839412511e414f824ea78f4d5c938141c96d896acb3af426fbb393bbc69825c6c57
-RMD160 (NetBSD-6.0/sun3/installation/tapeimage/tapeboot) = 585b74fc55271ea82d4c2e3a38cd3bd7fc9cebd4
-MD5 (NetBSD-6.0/sun3/installation/tapeimage/tapeboot) = 6e786930e4f263c8fd65c0684b10f17f
-SHA1 (NetBSD-6.0/sun3/INSTALL.html) = e1f85d7f20325efe213999b96d606094b64a2c3e
-SHA512 (NetBSD-6.0/sun3/INSTALL.html) = 571b45b18a5fa33d705470440bfc49b38b19f5625aa26b79241f27232a4e902c1689e6acfa563d95204a6bc5a9955565fdd915673db770f739003c8838a7b680
-RMD160 (NetBSD-6.0/sun3/INSTALL.html) = 10984fb54cdde46e9dfe3567fff0a41e2f2fddfa
-MD5 (NetBSD-6.0/sun3/INSTALL.html) = b221aa68f0c0063c7d4ceb493971636b
-SHA1 (NetBSD-6.0/sun3/INSTALL.more) = 3f54bfd9cb004fe817d400878e005dd81f1d2850
-SHA512 (NetBSD-6.0/sun3/INSTALL.more) = 6b56e0d51f7423f74aa64a269fe9a0787b0a71d54f8582242d874066df05cc6bb4840ff6d3fd2817f4919b707ff621ca00a77f32938ece1dada70d8a3e6eedef
-RMD160 (NetBSD-6.0/sun3/INSTALL.more) = 40aec024ba64af07553ff888f3140e1e6793ac68
-MD5 (NetBSD-6.0/sun3/INSTALL.more) = 9c67417a5a30c173b09f1a8b518032d1
-SHA1 (NetBSD-6.0/sun3/INSTALL.ps) = b83169ce92b3dc6bd83a1ca5e858120f8b91db45
-SHA512 (NetBSD-6.0/sun3/INSTALL.ps) = 546cc770038d3194ca5dfab82113644f6b4fbb5930b9560c14550234858d0bb0edc7fe1fe24d44413042dc7f2c64dc5e4002f3fb60b9893c76f0b80dbe02ae02
-RMD160 (NetBSD-6.0/sun3/INSTALL.ps) = 1110e213ad092c715e1c5314d9c11d4e4d0cd977
-MD5 (NetBSD-6.0/sun3/INSTALL.ps) = 848bd14e183958c567bdde20345d9b7b
-SHA1 (NetBSD-6.0/sun3/INSTALL.txt) = f37f80d7db1daf78f66d91f7f76ac9caecc69d65
-SHA512 (NetBSD-6.0/sun3/INSTALL.txt) = aaa6abd3508681ed137796f3f64187fe0e9c7ec26f0d0f81ae73a4e2853ef5aa6b70e861ba69fad5ab51d62f1b09440a0f3f033ef2443a8b12ffc2129e5efdb1
-RMD160 (NetBSD-6.0/sun3/INSTALL.txt) = dfcd996574e4d266e95640301662f4928e3a343b
-MD5 (NetBSD-6.0/sun3/INSTALL.txt) = 194d8eac56ca75bff60e3d8c6e003ab1
-SHA1 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.MP.gz) = 71d44bf3bd2a39ac207a085a22a8310014e4b062
-SHA512 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.MP.gz) = 875f45349bf522e4f63d8f1261433b3e109df5ce7c3ee1edd13e2d4526616b7863507dc305d954300308a4c650b9fa12168219d0deb6622b517442b34e10bcfa
-RMD160 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.MP.gz) = 357c54bfe13253c5fec2c4ca6cd18909b6a3a6a4
-MD5 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.MP.gz) = 5aa951b5c5cb5592f950fa3882b2f60f
-SHA1 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.gz) = 9b77cf6513c4cf4fdb0081400a46c34a1c0cf04b
-SHA512 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.gz) = ff9d18b6c5d3bcd7bf4ea6e341e77180a7c68b034c61e02dc3d540389e9690faf7a157587847b3f1c25199cee097178b0b658118daddd136aa5f5856dcec1c38
-RMD160 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.gz) = 2ed49d64a3f42845c08a8ae30d45569492895cc3
-MD5 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.gz) = 26548ca549cfa4f7c9be70e52a981d69
-SHA1 (NetBSD-6.0/vax/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/vax/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/vax/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/vax/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.MP.tgz) = d4cac92dc06ec7b3c4ec9ca0d60dd1ace1814e50
-SHA512 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.MP.tgz) = 3b10e201e963285a8c3d9319e818510701756a3c33003a5536d273e886cc0b3c02ffe10e762d5d7b4aee2d0098d3600396afc2baafea64cc268fa032203a46f9
-RMD160 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.MP.tgz) = d9b4a6a9c85abeee0178536cd1b5c4f0322067a4
-MD5 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.MP.tgz) = 15126f47c08adefe93c7261b6eeeddec
-SHA1 (NetBSD-6.0/vax/binary/sets/base.tgz) = 9b83f88ab7d06a112cfff79b6657912bddb77987
-SHA512 (NetBSD-6.0/vax/binary/sets/base.tgz) = de7c42524163a5d9de7fda440cd2523834d5c46e4e992724a4a7af5e0768e5b105909e9a60e603b2a942cade3795cf4cc2bb22c7627453eda92bf662da83a16a
-RMD160 (NetBSD-6.0/vax/binary/sets/base.tgz) = 3059d6e4a7d54ebc9c529f90719ca561ebbe8036
-MD5 (NetBSD-6.0/vax/binary/sets/base.tgz) = d06066c8a452b8a7831de680a420ea4c
-SHA1 (NetBSD-6.0/vax/binary/sets/comp.tgz) = 3ad25c223276936b26916121fe8341524e2e51a6
-SHA512 (NetBSD-6.0/vax/binary/sets/comp.tgz) = 852dc3d7a01fc8e11e66723930d90e7141d974b976d8f7986f068fb5202dad396ef2762400c1e9e02b0d6c5a087435a56f65e502079eec9d9e86c24cf81782bb
-RMD160 (NetBSD-6.0/vax/binary/sets/comp.tgz) = a4e74e817807d4d79a43ac450109b14474fda740
-MD5 (NetBSD-6.0/vax/binary/sets/comp.tgz) = cf51957de39d3a72c7dda2633d39e705
-SHA1 (NetBSD-6.0/vax/binary/sets/etc.tgz) = 21f4ff8b449498081fd6dde92b43eaca86d886ef
-SHA512 (NetBSD-6.0/vax/binary/sets/etc.tgz) = c6e43ea57dd0b53f9e0a995aa872d9f7f1d8852fbe7105e125116f577d0ce2acb1e8deddc6a8dcb51e272a982cf549706b23bb26b0acedad416ceef8910a6461
-RMD160 (NetBSD-6.0/vax/binary/sets/etc.tgz) = dd7a5f74812906801bf474d265a4846f069c00ef
-MD5 (NetBSD-6.0/vax/binary/sets/etc.tgz) = fbb2c18ea3be98a3624f54b834399ee9
-SHA1 (NetBSD-6.0/vax/binary/sets/games.tgz) = cd79679fa36349431355dcd14b8a058476f20086
-SHA512 (NetBSD-6.0/vax/binary/sets/games.tgz) = f68c931765849554222cc439d5761411d36e8e95b4331d15525e73f77b31249c220b9de4c2061f5e35207e75e27d5d6ade99a7eadf2baf54fc8eeb16ac243dbe
-RMD160 (NetBSD-6.0/vax/binary/sets/games.tgz) = 7da1dd4ece7e9062635f7b0766af245e2624c032
-MD5 (NetBSD-6.0/vax/binary/sets/games.tgz) = 995e32bef1b920f33c5d7eb946441682
-SHA1 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.tgz) = 6e61cfb380e7cf45e2094ef64d26d44ee33fd086
-SHA512 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.tgz) = 0d35a882e1e98796099bedc0157fc30978b2e43ef0627be603036259069dc13503fee5dd57b2e9da74dd5c2cb1bb823f4bf91d98259d84b993977bae05d8c10c
-RMD160 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.tgz) = 3e2f321e7934e6597ea83627934e88d2214baad3
-MD5 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.tgz) = 2efb4b8d6a76ebb59f4ce1171e1502db
-SHA1 (NetBSD-6.0/vax/binary/sets/man.tgz) = 9c2da95fb72f9fd1eaa8f7baf5fe45496c8b4615
-SHA512 (NetBSD-6.0/vax/binary/sets/man.tgz) = 1a158e92b8414d92745a06fe1c721047e87fd768d7158e078c3a17de1d2634463f8f6b022a001f5f9010e14f0eedf6d5a94e4b73b4dd0ed9ac4576abbf2aeaf4
-RMD160 (NetBSD-6.0/vax/binary/sets/man.tgz) = d2485fd19bffbc6103f8aa7521e52c8f652fafa2
-MD5 (NetBSD-6.0/vax/binary/sets/man.tgz) = 83e81f5c82acdf7ee76ef5854eca3f5b
-SHA1 (NetBSD-6.0/vax/binary/sets/modules.tgz) = 4e60e0177f0e5d6e42ee875a7c30cc612c22ca64
-SHA512 (NetBSD-6.0/vax/binary/sets/modules.tgz) = 0e5926279b9534cb9bd34ff0c4d49fa4cd467966829d080ec8ab739039536f42173c2ec91aea40ca37d94625a5b395c3f55ce7936f963bd8d970d1a81fcff8af
-RMD160 (NetBSD-6.0/vax/binary/sets/modules.tgz) = 54b0d690b929b4df06adc044864e76d47f09c844
-MD5 (NetBSD-6.0/vax/binary/sets/modules.tgz) = aa18ce8768d9fd88206d465fd1ae155d
-SHA1 (NetBSD-6.0/vax/binary/sets/tests.tgz) = ec975a37d490f45fb9e7f0f30f0ec46fc0038531
-SHA512 (NetBSD-6.0/vax/binary/sets/tests.tgz) = 33b8686c97da76e031a9678103ba99a83cc4189545b4020241a83084585f0eb200c0cb44634e578c8882cd849f80151383a54511c80d1a35964a3567f8e6b314
-RMD160 (NetBSD-6.0/vax/binary/sets/tests.tgz) = c27fcdf838dfc43c1527fde3fba2735065a5d12c
-MD5 (NetBSD-6.0/vax/binary/sets/tests.tgz) = 3789eac68014743577dfe22503dd98a5
-SHA1 (NetBSD-6.0/vax/binary/sets/text.tgz) = c7dcf12545842d5563887c983d694fa569d25ab3
-SHA512 (NetBSD-6.0/vax/binary/sets/text.tgz) = 50a7ad69dc23c0d178a3f835e9bed7305cbe432a92cf947e64e28316ac94ddd7def90e91c53515d0cd3ac26c5df23d3f60932ba688ab04525d635555b6078a6a
-RMD160 (NetBSD-6.0/vax/binary/sets/text.tgz) = 24ae1e1016b492c3dd575099936598d00d8ac6fa
-MD5 (NetBSD-6.0/vax/binary/sets/text.tgz) = 99863a74757bc9677befe8c6ef049685
-SHA1 (NetBSD-6.0/vax/binary/sets/xbase.tgz) = 35f6a1b09f246736f7c1c6049831ca0704fe53d1
-SHA512 (NetBSD-6.0/vax/binary/sets/xbase.tgz) = d2d0b6a5702e4a87e4823ce7478f5c8f1527045d96040680960e3d96f98f64e40ac7263ad2ca4c4272d4d253fcb41b7e296a9d27f9ffa7dc03be6c437835878e
-RMD160 (NetBSD-6.0/vax/binary/sets/xbase.tgz) = e2455fc04171cd3aef8662a36820552811c7657b
-MD5 (NetBSD-6.0/vax/binary/sets/xbase.tgz) = ec8b6356f82d4ccb90e93dd78e5c741f
-SHA1 (NetBSD-6.0/vax/binary/sets/xcomp.tgz) = ebadf7653d6173ccc73d1228338a4df09eb7dce2
-SHA512 (NetBSD-6.0/vax/binary/sets/xcomp.tgz) = a4c4cfaaea473e617870a92bfce40fbc2e34413f31ec2159554031c4312dc1e605079a9e0fd3774967bba9cc27bf9efc97899f09959bd401726ceeeec7006790
-RMD160 (NetBSD-6.0/vax/binary/sets/xcomp.tgz) = e6d1591328fcc0af7336d22a5426f72c8343ad49
-MD5 (NetBSD-6.0/vax/binary/sets/xcomp.tgz) = 1cc0fa0971f06c2bd9e296db9d6d6fa5
-SHA1 (NetBSD-6.0/vax/binary/sets/xetc.tgz) = 2c85388aa75c419cc5651c053b00710471a87350
-SHA512 (NetBSD-6.0/vax/binary/sets/xetc.tgz) = 38c9f1abf9d6ff828c361a2c58690f70a7d707aa739f7ded9f256b414e7b78c11ff4f915a59f99884afd5ef0b874c1c1b70aa438f6bdff07e354d67d2257bf72
-RMD160 (NetBSD-6.0/vax/binary/sets/xetc.tgz) = b1186ef0c975fa76d8d4d0c62e24ae86cb3d433c
-MD5 (NetBSD-6.0/vax/binary/sets/xetc.tgz) = 46ca22a86d8052c1044717eb907d7874
-SHA1 (NetBSD-6.0/vax/binary/sets/xfont.tgz) = e9a33e8d99378b3944fc21aa983c02707831f0bf
-SHA512 (NetBSD-6.0/vax/binary/sets/xfont.tgz) = 3d09f4edf49bfa98c7817cdb1b91aa4ec902dc87c1765e9a92f143bf4918a60e011fe614a70d9dd926ca2a019a33e5f0dc2d7198205f2273e755049dd8d5a2a1
-RMD160 (NetBSD-6.0/vax/binary/sets/xfont.tgz) = 9ae96f8628d6a35053f093acee972bdd8b6722cd
-MD5 (NetBSD-6.0/vax/binary/sets/xfont.tgz) = 6e95a6fd030425bb19f0505b9308d20d
-SHA1 (NetBSD-6.0/vax/binary/sets/xserver.tgz) = aa6c021940fae979a4a3a3cd01a138808c49621d
-SHA512 (NetBSD-6.0/vax/binary/sets/xserver.tgz) = 540455f89e8dfe7d376322ab95288e96e54aa0531aab7cb96e0b1354f85ef64778cbf265bfc2fca7827879a286d80b15f9e973d62594e5bf02df4b0add15be0c
-RMD160 (NetBSD-6.0/vax/binary/sets/xserver.tgz) = 84dee738690e4487d7f28cba1d3f61ab9eb12240
-MD5 (NetBSD-6.0/vax/binary/sets/xserver.tgz) = e2df86b6bfa5259e72d02f40de72491b
-SHA1 (NetBSD-6.0/vax/installation/bootfs/boot.fs) = c4d1340eb7d2ea1d555a46fcf2071fa2f091d1d1
-SHA512 (NetBSD-6.0/vax/installation/bootfs/boot.fs) = 155e7faaf14e619309c3ca8cc163e08d6bd3cac41b4d38dc5dc4cd4736e99003a2b6a6d0ffb6cb698772f43d31f577732b9933a71fb1f6315af16dfae34d4f66
-RMD160 (NetBSD-6.0/vax/installation/bootfs/boot.fs) = 52a2200dbef9e624d7ca91eb6d2110599b8010b1
-MD5 (NetBSD-6.0/vax/installation/bootfs/boot.fs) = f02d1ee9291b0dd37f0dc75d0a27ad10
-SHA1 (NetBSD-6.0/vax/installation/miniroot/miniroot.fs.gz) = 5aed885a0dde234caed611cca0f474dc6cf8461b
-SHA512 (NetBSD-6.0/vax/installation/miniroot/miniroot.fs.gz) = 3d647213e86ccb976107853ab81ec82d339d2cc7c7bda4cc0c416f55e521c7a43a73523c7f9ff6e590531f019badcd414f1bdab4c95db0806a606065c6803ef4
-RMD160 (NetBSD-6.0/vax/installation/miniroot/miniroot.fs.gz) = 6ddb63ee115a7b4a78546092ac7b8cee7c056921
-MD5 (NetBSD-6.0/vax/installation/miniroot/miniroot.fs.gz) = 0f860ac5f201e72f4b22392027b25117
-SHA1 (NetBSD-6.0/vax/installation/netboot/install.ram.gz) = 8f48dc649fe71a6f861a9f96e2b63679971b762c
-SHA512 (NetBSD-6.0/vax/installation/netboot/install.ram.gz) = 857920e536fe08897d7e20c62c74a5606ea791d97111740222c8998ee4a1a9ae05f52ac27b5580d5f78a70f75d5a9ea9446802a85297a13411b98ebe8a84a3e1
-RMD160 (NetBSD-6.0/vax/installation/netboot/install.ram.gz) = 9c94e2d64328f88eb7157d6a47e5aec15b1da2a3
-MD5 (NetBSD-6.0/vax/installation/netboot/install.ram.gz) = 23d3d0b714186b3e2e7b70d5f0a1ce21
-SHA1 (NetBSD-6.0/vax/installation/netboot/boot) = 738e9f280ab9874a2eb21af8627d70e2abd2ba0c
-SHA512 (NetBSD-6.0/vax/installation/netboot/boot) = 934496142a69c247ce8b96ea6de19e0cbe0d9e4e8a1ae1043f4d60926c6b3deb30132f3bdc346b3422f1fea02da3a3feaf900d64a9759d265b33fe81ab3da070
-RMD160 (NetBSD-6.0/vax/installation/netboot/boot) = 8a60febc408768e89ebb1a834bffaa06a72d3503
-MD5 (NetBSD-6.0/vax/installation/netboot/boot) = f238dc1fafca2d7f1a83a22b6cb31091
-SHA1 (NetBSD-6.0/vax/installation/netboot/install.ram.symbols.gz) = 6b57f7a857c24539639cce3ed41ed5de16ec233b
-SHA512 (NetBSD-6.0/vax/installation/netboot/install.ram.symbols.gz) = e9ac802e948631231eda425e5bab76bf14bc59462613eb6c1025708d67f54c67e9b928cbf33253473605c6239842667eba5e58240d6cb53afc5c80c8546357f5
-RMD160 (NetBSD-6.0/vax/installation/netboot/install.ram.symbols.gz) = 5a6ea2a19caafd034e75e9440d1e139d1af3ef0c
-MD5 (NetBSD-6.0/vax/installation/netboot/install.ram.symbols.gz) = 712856f65322faccd1b116c548d40196
-SHA1 (NetBSD-6.0/vax/INSTALL.html) = 8d850ffd9374c9bdc63e37fa14dc63eda02a93fe
-SHA512 (NetBSD-6.0/vax/INSTALL.html) = 3c93355dbfd0cbad25eb74c8497975855706a20dafe8a1baa64d0b53801d5e02d81a93c3347c52950fdd424623cbb58c7a0aa58b7989e89116b157f9d18bef51
-RMD160 (NetBSD-6.0/vax/INSTALL.html) = 42d4d65000e12d8f2cbe30f6743d84d7a040bb05
-MD5 (NetBSD-6.0/vax/INSTALL.html) = bbad6392f6badb4a1d0ee2977b9df90c
-SHA1 (NetBSD-6.0/vax/INSTALL.more) = 624b96b802364eb833ca077dc706d75b5f68f336
-SHA512 (NetBSD-6.0/vax/INSTALL.more) = 300954b8c1f3c47a1a45d773f8c7bad3c12dbc292485b7a7206289f56584ce12befa89b8d315511c3e3f7c407de9ca068fbdaae9d75c52dff72a8f8a9b5e4a55
-RMD160 (NetBSD-6.0/vax/INSTALL.more) = ab1b5238e9eb5ad1c937c75901199023c08d2434
-MD5 (NetBSD-6.0/vax/INSTALL.more) = e634a224d0d67c5cc1c7dffd98156b79
-SHA1 (NetBSD-6.0/vax/INSTALL.ps) = 57710ab0d4450b0692b07eb812c9c7e6d70a49d5
-SHA512 (NetBSD-6.0/vax/INSTALL.ps) = 0afac140d664edbb10a41c6dd646c797b78e37c1d36aa4804653fbef64171ddf9688d7220755553ff4add8891bd97f083bde4b03c93fe579f1e9d030c83f3d07
-RMD160 (NetBSD-6.0/vax/INSTALL.ps) = e84f468d6f328faa9889cf2ad76cab5846c45da0
-MD5 (NetBSD-6.0/vax/INSTALL.ps) = 51b9a2a1046494b2443503636fa223da
-SHA1 (NetBSD-6.0/vax/INSTALL.txt) = 0a4b816342615d9a4e60cbc99bfea81afe41d0f1
-SHA512 (NetBSD-6.0/vax/INSTALL.txt) = b1853a3be6cd17449c4e5539945812b9ba87e02e07877dfe791e04c3db39ed1577e795d7d5e3b1048fc60eca5694592bb5671982c24aaa1f78e3783ede603ded
-RMD160 (NetBSD-6.0/vax/INSTALL.txt) = f774566773432a691acf285d569dabcf5037ecfb
-MD5 (NetBSD-6.0/vax/INSTALL.txt) = 43a9353717d9309c11fb5f4a9685942d
-SHA1 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 0e3d568ade336cd6e538d567ea11a965d49588cf
-SHA512 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 721a7e1ec94d9a37f37eb30b96d66b19d387090964ee93233de36771e4d106e72cdbeb4b0b17f8d490d9f64484b8a511526841c511b2d33624bd626b4388b623
-RMD160 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 176ba2b94555c5bda82260a075ba295021d61e8a
-MD5 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.symbols.gz) = aa03bcea1e574f24c1ef0eeb364f1c8d
-SHA1 (NetBSD-6.0/x68k/binary/kernel/netbsd-GENERIC.gz) = 9a7796c7abf7b4828ee7eb7125b73f5ccd25e2db
-SHA512 (NetBSD-6.0/x68k/binary/kernel/netbsd-GENERIC.gz) = 58c7f85cf73d90a04c42c502a3dedd779d9f5013a58f0df8a279cf559dedb80b6bdf2a22804284fa58a7df9c1ba8a8f0454d3f76a43787a7372afb58d5d734b3
-RMD160 (NetBSD-6.0/x68k/binary/kernel/netbsd-GENERIC.gz) = efce8e9537f895492b5becab7878dec07fafe7c1
-MD5 (NetBSD-6.0/x68k/binary/kernel/netbsd-GENERIC.gz) = adf275bc0aec4a8ba50661637b7707e5
-SHA1 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.gz) = e5fee2392b742d34a50bd2236dc4ba26acdd57e2
-SHA512 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.gz) = 6aa21ef102224a5194fd6709b70a47788e073ad0d325dbe3b982a19a24c67b421acb003496ddf42804785b0dae9bb32dccde617e7d6d9185511205ab390cdcb3
-RMD160 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.gz) = 7251ea070e26aa877c85b9eabffd62cd6ee4b04c
-MD5 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.gz) = e5e8b74d980cbbbc0324cab3da12af0b
-SHA1 (NetBSD-6.0/x68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/x68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/x68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/x68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/x68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/x68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/x68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/x68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/x68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/x68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/x68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/x68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/x68k/binary/sets/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/x68k/binary/sets/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/x68k/binary/sets/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/x68k/binary/sets/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/x68k/binary/sets/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/x68k/binary/sets/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/x68k/binary/sets/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/x68k/binary/sets/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/x68k/binary/sets/kern-GENERIC.tgz) = 253e2e072ae66dd896be3d6d936c637bb96ef2c2
-SHA512 (NetBSD-6.0/x68k/binary/sets/kern-GENERIC.tgz) = e2b9221ffad2c150f1529243197e7672c58a41d865dcf02a7252c1bb1f0fdb644e8c6bc3250f16f2091748d2a009badd12c0cbda2ae2b186bbfa0b6302957293
-RMD160 (NetBSD-6.0/x68k/binary/sets/kern-GENERIC.tgz) = cd78ce4ed94bd540d9cfcf2d3a6d51fd83cbef95
-MD5 (NetBSD-6.0/x68k/binary/sets/kern-GENERIC.tgz) = a41a26a51d64ac00f3d0b1f5657a5400
-SHA1 (NetBSD-6.0/x68k/binary/sets/base.tgz) = 97339969786af5934c8db561afd33bf2fdd5cb77
-SHA512 (NetBSD-6.0/x68k/binary/sets/base.tgz) = a5cb607f828570f11ae3653032d442cc191339a00037cc6c37635c726fb2b06a9bf1d2dec7e71bfb824ac11810ff1ccbff55ec69659c66112b36fd28521a304c
-RMD160 (NetBSD-6.0/x68k/binary/sets/base.tgz) = f77783ac8537a39ac77014b7fd8860269a6aae0c
-MD5 (NetBSD-6.0/x68k/binary/sets/base.tgz) = 752b937da621346aaab5b18ac1fc9f3a
-SHA1 (NetBSD-6.0/x68k/binary/sets/comp.tgz) = 5b2f871bf928a68b7ffdf2b2f45e5ee80a8c83a0
-SHA512 (NetBSD-6.0/x68k/binary/sets/comp.tgz) = d037edaa7d8b4a275a39771f2f7ffd4dd46f68a3107af0ca88f9ce205370c756904c6c0bcb7f6138fabeaf0bfb504ce541253c9d6d2892675e7e308358045047
-RMD160 (NetBSD-6.0/x68k/binary/sets/comp.tgz) = b371813449f8d913bf22466d52a7a238522b8a5d
-MD5 (NetBSD-6.0/x68k/binary/sets/comp.tgz) = efab43faa3de48943a5ba3b96a07741d
-SHA1 (NetBSD-6.0/x68k/binary/sets/etc.tgz) = 52e6167471d4788f7f060166de8f23a31f731596
-SHA512 (NetBSD-6.0/x68k/binary/sets/etc.tgz) = ce530878bf230e22786bac9ce6075958eebb52c5119b760ebc183b8f7b2fa59297797768461a44f708b9ce993c21a96e0f49b207c79208e25eea93412889babc
-RMD160 (NetBSD-6.0/x68k/binary/sets/etc.tgz) = ad019f3b95e8cc9d3320909dee7dd91ff45a4da6
-MD5 (NetBSD-6.0/x68k/binary/sets/etc.tgz) = 9f179baf30026ced05db113a623006b9
-SHA1 (NetBSD-6.0/x68k/binary/sets/modules.tgz) = d52fa0ed8a899526add267f705735e9dcbb62a14
-SHA512 (NetBSD-6.0/x68k/binary/sets/modules.tgz) = af60d178109bc5330363f041d688e46e36e1894ca0320c7a1735f5de483349a38e63b316b297a5bbf7fb282c1f69539698f7704e759a27c1c833239ec775e371
-RMD160 (NetBSD-6.0/x68k/binary/sets/modules.tgz) = 5e3db9d5547a118143f5eac40b442cf27dce8a52
-MD5 (NetBSD-6.0/x68k/binary/sets/modules.tgz) = 18d52b98a32e1b37501fb2056be5d356
-SHA1 (NetBSD-6.0/x68k/binary/sets/tests.tgz) = 469b2b371980f0bd11407497ee2c104536867df3
-SHA512 (NetBSD-6.0/x68k/binary/sets/tests.tgz) = bfb64b49fd88386e2012b827d9af754bbc75a21e63650da66a8add45b54bfc700a3d22a3c6e98e8736309f1a1015f82c366e51ac6539556f1645b28d3d018ad5
-RMD160 (NetBSD-6.0/x68k/binary/sets/tests.tgz) = 8e674a86bd2551876719f842f61850d6505b290e
-MD5 (NetBSD-6.0/x68k/binary/sets/tests.tgz) = 5c524dfbbb575f61ff958baa317a4808
-SHA1 (NetBSD-6.0/x68k/binary/sets/text.tgz) = c8b514b008fdd482c7df7df5849c5bbcd04d289c
-SHA512 (NetBSD-6.0/x68k/binary/sets/text.tgz) = 37fe61c52eaa54e8de5709bb3494efe1845a0946c65ed007ec0785902d44acbb3b971bd31b53305ce72d4d32180a56f280a4b29a2a9dcb83c443299edcfe0ea8
-RMD160 (NetBSD-6.0/x68k/binary/sets/text.tgz) = d927619390ecab77ada3966395d227967cb38a43
-MD5 (NetBSD-6.0/x68k/binary/sets/text.tgz) = 1854795033d3fb974637643eed84359a
-SHA1 (NetBSD-6.0/x68k/binary/sets/xbase.tgz) = 012b5faed219406f267667b7d5047ea9e85ac58a
-SHA512 (NetBSD-6.0/x68k/binary/sets/xbase.tgz) = 88b65e79f9801e1d3a0da5d3407754c7d48911bf86e5262fb8d02c46c5653b6fd55e6588177771ff82740b12fc84c8a19e207cee83ceee3a772e5beb182ae72b
-RMD160 (NetBSD-6.0/x68k/binary/sets/xbase.tgz) = e5d43999d4316d561ee7689321c04698af4ed5b4
-MD5 (NetBSD-6.0/x68k/binary/sets/xbase.tgz) = e5cdea5cf19b94dc3ef382951ef923e3
-SHA1 (NetBSD-6.0/x68k/binary/sets/xetc.tgz) = bf1f9fa57ffed50beb8d7d455c95928d560bf224
-SHA512 (NetBSD-6.0/x68k/binary/sets/xetc.tgz) = 3bf13d97afb20cb5e7098d9837f0a1bf471e49ec53672948373fcdb23c25c56fcb6de974a021c7e3bcb00e6069e0a68c5a84cd187e4304af129b3db66942d953
-RMD160 (NetBSD-6.0/x68k/binary/sets/xetc.tgz) = d2f0715f277a6de929f1504d50ce1b5fe27327fc
-MD5 (NetBSD-6.0/x68k/binary/sets/xetc.tgz) = 85342c60f299840da352a811f666392c
-SHA1 (NetBSD-6.0/x68k/binary/sets/xserver.tgz) = 54b441f5b0afb06e26e816a729b259abe8b3c234
-SHA512 (NetBSD-6.0/x68k/binary/sets/xserver.tgz) = a81cf87de57b646f79cbbdf5cf9a69c90bb2f97adccc1310bfaf639313c3027b04cb7591d49cf7dd07f4f6210e971656c7ae8980d8e0a1e854fbbc87ccfd91d0
-RMD160 (NetBSD-6.0/x68k/binary/sets/xserver.tgz) = 0ddef8e502a8ca10a21d59aa99f9476dbac2d29f
-MD5 (NetBSD-6.0/x68k/binary/sets/xserver.tgz) = e60e100d889a7377fd708a441d2a818a
-SHA1 (NetBSD-6.0/x68k/installation/floppy/sysinst1.fs) = 0c52f0ff358294b5fefca38d963f7fcc3c6dfe93
-SHA512 (NetBSD-6.0/x68k/installation/floppy/sysinst1.fs) = aeaba8cc7f83d83ec41a0ffef1a01203de34a89ad6028f8d5df06b2a6523b82ca44f13370f0f2f03e65cf2bb8a76532868471f25ddac4a8e53aa2f8a57f4be57
-RMD160 (NetBSD-6.0/x68k/installation/floppy/sysinst1.fs) = 396eff107455609a3b7322595660741e14a57077
-MD5 (NetBSD-6.0/x68k/installation/floppy/sysinst1.fs) = e1a273155ed6f80cc365bf441909a914
-SHA1 (NetBSD-6.0/x68k/installation/floppy/sysinst2.fs) = 35344d834aba89ce14574026bdc0c3648c4bed0d
-SHA512 (NetBSD-6.0/x68k/installation/floppy/sysinst2.fs) = 59d6206fafca21e1ad29ef12d869f7ad81855f0b1124625278db71dff739a76bc36da83a1bfa4ee920602a246f3f925e4c383ab8ad5455ae3cc19408347da8ed
-RMD160 (NetBSD-6.0/x68k/installation/floppy/sysinst2.fs) = ee5f34edcf9ae13406c1db031b9d99cf2e485c4f
-MD5 (NetBSD-6.0/x68k/installation/floppy/sysinst2.fs) = c5cf691f0b3380cfa9ed93158a0598a2
-SHA1 (NetBSD-6.0/x68k/installation/misc/gz124x5f.lzh) = 50ef2f563b410530f5f52a857705848973a870a4
-SHA512 (NetBSD-6.0/x68k/installation/misc/gz124x5f.lzh) = 7df17f64a217eaba1374a2833326824d43acbe84a8e47e558ec805053fb3d93e07619d5c89287951eb7e6961068aa8e534f74b7da87106d3c0f306bf5191acbe
-RMD160 (NetBSD-6.0/x68k/installation/misc/gz124x5f.lzh) = 2ebf89a1a5ee6564bbd9bdcb5a8d2716f4bc121d
-MD5 (NetBSD-6.0/x68k/installation/misc/gz124x5f.lzh) = e27b76e450d506e3cd555f8ae3a99e61
-SHA1 (NetBSD-6.0/x68k/installation/misc/gzip.x) = 639b9edf903ccc07259e146ac141cc8c102bab95
-SHA512 (NetBSD-6.0/x68k/installation/misc/gzip.x) = cac2274fa0b5e1ac2ef978b8a09c001cf3e3acdeaf7131e93677b4fb13d56412bcfee86fe886758866d6daffb67f54dd6fa4c2796bda49ca0e59e4d3a113e7d6
-RMD160 (NetBSD-6.0/x68k/installation/misc/gzip.x) = 7c431086e8719f5e48c9d698808a1ae74a78b2d1
-MD5 (NetBSD-6.0/x68k/installation/misc/gzip.x) = 69fb6553b4cf7d3825b53c8d7bf5a865
-SHA1 (NetBSD-6.0/x68k/installation/misc/loadbsd.0) = 45a858903634d838d7525fff2db12467195ce1d5
-SHA512 (NetBSD-6.0/x68k/installation/misc/loadbsd.0) = 7c67ae6947fb128acfe72dab897edc0d8cb4c8e82b1886337ed07b5d031e0e550ff791b470f0276ef0fb920b4d6eefdc574efec0dc04116b05b510684ad8044d
-RMD160 (NetBSD-6.0/x68k/installation/misc/loadbsd.0) = 4b30a14f171cf026efa10f44dd0357cc2db91d17
-MD5 (NetBSD-6.0/x68k/installation/misc/loadbsd.0) = 25b2b8aa6efadacb72cf96f497a38d5a
-SHA1 (NetBSD-6.0/x68k/installation/misc/loadbsd.html) = 9cd27c39d6fa54fc2c534e4e6dfb30f86764ea49
-SHA512 (NetBSD-6.0/x68k/installation/misc/loadbsd.html) = 71544bd6ce6c3139654cd55ec1ed293fee603e733fb2cde6574ace66df4ee8450182cf890c4519313ac74bc0d43919340cf277c329e6b7a66734aa33d6465593
-RMD160 (NetBSD-6.0/x68k/installation/misc/loadbsd.html) = d43cd8e0a08f11a2bdd4fcf2d8489761a8dfd629
-MD5 (NetBSD-6.0/x68k/installation/misc/loadbsd.html) = 3228e40e5e967fb87b75ee462388f92a
-SHA1 (NetBSD-6.0/x68k/installation/misc/loadbsd.x) = 9ecad059bb18bfc8fb33c165f63a15770326d3bf
-SHA512 (NetBSD-6.0/x68k/installation/misc/loadbsd.x) = 7ed4df332f2e65e5db31f95bc7635f2ea1f5b638727509ff16ee7a531a0006addf16f1da4eceb727d4148dcad8686b3dc960760d289f361fbdb2177e1089032f
-RMD160 (NetBSD-6.0/x68k/installation/misc/loadbsd.x) = ead03264a128cab57ebeb615b42e3688b5641f80
-MD5 (NetBSD-6.0/x68k/installation/misc/loadbsd.x) = 4b9bcac67fd51cd5bf95911a5431b49a
-SHA1 (NetBSD-6.0/x68k/installation/misc/rawrite.doc) = e2cab55990a4835524655fbaf2ade5d9eee29c17
-SHA512 (NetBSD-6.0/x68k/installation/misc/rawrite.doc) = d9df8ac2fe18ff8cc13ad62af9107e821c40ca41cd0ae6d3cd0dd1c55351f8b0f7bb2cdd7f0917a16738d11e0230c0ec233f2297b8603f3a619ef99b0eb1ed9a
-RMD160 (NetBSD-6.0/x68k/installation/misc/rawrite.doc) = ada5298cb0d2df6d1833f32ff21cc97244376748
-MD5 (NetBSD-6.0/x68k/installation/misc/rawrite.doc) = 53481a27e630ca1b583cd953d24d13ca
-SHA1 (NetBSD-6.0/x68k/installation/misc/rawrite.lzh) = 575e26ad9625ca21e5f3aad4c32fbbe01312c97f
-SHA512 (NetBSD-6.0/x68k/installation/misc/rawrite.lzh) = 36104c3fcd87dbedc2421541f14f54151087348f45f69508e5916c3570915f0b0fc355b3c075e4c1cc3907094abe87e14c85ff333e0064403c8230d93719ea0a
-RMD160 (NetBSD-6.0/x68k/installation/misc/rawrite.lzh) = 4c0538916a9ca007aa9ba66ea42c6c46a4c563f2
-MD5 (NetBSD-6.0/x68k/installation/misc/rawrite.lzh) = c15b00572229133bf9505876ea120a31
-SHA1 (NetBSD-6.0/x68k/installation/misc/rawrite.x) = 30e3d4504bfbf7c55a77a19435d75bb1069ed596
-SHA512 (NetBSD-6.0/x68k/installation/misc/rawrite.x) = 06d706b3581dc972d282ef9a6d254740b721a43d5f9c6325af7fb3d1fc8402071887b0ca99c720c5d02c8edcab6086b819faa69640ba4463c1713b168d432059
-RMD160 (NetBSD-6.0/x68k/installation/misc/rawrite.x) = 844aa4ab7dbef030c140e543475f24fc60f0a075
-MD5 (NetBSD-6.0/x68k/installation/misc/rawrite.x) = 6efe87d85560d8d6e3eec7a7b9d1545a
-SHA1 (NetBSD-6.0/x68k/INSTALL.html) = 5ef0d8d03b7f3f600444752d3763c17000da1e3b
-SHA512 (NetBSD-6.0/x68k/INSTALL.html) = 94181608314a1dcc1fa0c634060b28ce229883affc9f64c33d9eeae09b21f9f88149deff8d84a7f64b6b5e7cfb741b6c43d9ccdd2ccdd4c9d6e043f22452adb5
-RMD160 (NetBSD-6.0/x68k/INSTALL.html) = a5e8a1d8e28859a3e08b662d2363d758baf23eac
-MD5 (NetBSD-6.0/x68k/INSTALL.html) = c7154e6e818d1490ce1dbc392bb8207e
-SHA1 (NetBSD-6.0/x68k/INSTALL.more) = 9771b22f8b8b9a5a3ad2aead71a06bccd63caae8
-SHA512 (NetBSD-6.0/x68k/INSTALL.more) = 4f3561d62f5d3a6f1f936d476d783dca2d4caaa50e21d8571ac795a8f3a06ad10f490d02b05ae8e51ed3e6eeb7aba645215339632aa61c99b93c4c4b37ee5329
-RMD160 (NetBSD-6.0/x68k/INSTALL.more) = a8994368a67cb7bd6df0232815e6c21a1a69537b
-MD5 (NetBSD-6.0/x68k/INSTALL.more) = 13d4f52ad2a72fc92e24c1467463be66
-SHA1 (NetBSD-6.0/x68k/INSTALL.ps) = 3dfb26b142ddfa2771a49a371bcbf72cacd74f7c
-SHA512 (NetBSD-6.0/x68k/INSTALL.ps) = bc12356b462b30559d05d0ce0ccc73f07fda3f5575121bf2911db6c638375416e4a79364f7727ea1adef19ed2679e86600c960585e9ef7899ed583d630655b20
-RMD160 (NetBSD-6.0/x68k/INSTALL.ps) = f46789b092425a148d38cae66d987253e12efecd
-MD5 (NetBSD-6.0/x68k/INSTALL.ps) = 34b1b9c1a6ef25bb677408f0a869ed52
-SHA1 (NetBSD-6.0/x68k/INSTALL.txt) = 7371dc6f22eece4157c00dfb01f59a035f305da6
-SHA512 (NetBSD-6.0/x68k/INSTALL.txt) = 600911e35b9c641ee4315452cc4b534e844695af852328eec243632f462b0685acad59f35588c46d5c083f745ea5c1ab1df32e8e4f2307409dc5dd8cdafe110c
-RMD160 (NetBSD-6.0/x68k/INSTALL.txt) = 8f3c307f17b591859a241414a6a0f33f592e811a
-MD5 (NetBSD-6.0/x68k/INSTALL.txt) = 6bd22ee53bf58cae2454a2f8627718f9
-SHA1 (NetBSD-6.0/zaurus/binary/kernel/netbsd-GENERIC.gz) = 7f4cbcd7d5390357b1873da969b0a7cca60e73c1
-SHA512 (NetBSD-6.0/zaurus/binary/kernel/netbsd-GENERIC.gz) = 0c552ce725209b5686341ac0101cb7969a5a43ab8ba5d1b9a540fa07979e93921acfca844622ee00f5be4d3b06598ef4750772767b72b754e5cae22735ec24e1
-RMD160 (NetBSD-6.0/zaurus/binary/kernel/netbsd-GENERIC.gz) = 2ba59423e410d54f3a829f2ce9e5bcbd43b5b840
-MD5 (NetBSD-6.0/zaurus/binary/kernel/netbsd-GENERIC.gz) = 4cd87eddf3285a67e0f463d4896db002
-SHA1 (NetBSD-6.0/zaurus/binary/kernel/netbsd-C700.gz) = 01cc33fb982cd5f2b188d4688147750a94863fe2
-SHA512 (NetBSD-6.0/zaurus/binary/kernel/netbsd-C700.gz) = ceac21a76cc922a67cbf4d8cc83f471015d36d0896efabbf232ebec9217a3d56f8cea43f3e1c22bc527b32be5179898822807a041ef418e3fd6ff942d09dbac7
-RMD160 (NetBSD-6.0/zaurus/binary/kernel/netbsd-C700.gz) = 781cc21ea042587fe9f4c0fe9305ae159f5a15e5
-MD5 (NetBSD-6.0/zaurus/binary/kernel/netbsd-C700.gz) = 95bcd094f576b6f49e7a1bdbb5048a13
-SHA1 (NetBSD-6.0/zaurus/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/zaurus/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/zaurus/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/zaurus/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/zaurus/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/zaurus/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/zaurus/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/zaurus/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/zaurus/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/zaurus/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/zaurus/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/zaurus/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/zaurus/binary/sets/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/zaurus/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/zaurus/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/zaurus/binary/sets/kern-C700.tgz) = 645cc6b6c3250ead1e2e121bcc179be2e9056b65
-SHA512 (NetBSD-6.0/zaurus/binary/sets/kern-C700.tgz) = 833883cb8aada6c391917ec890282011d2cfa6c5068d9483ab1b8c9b74361baa093b1c6b074dd5cd89709eb67636cbba1a6be292c23b28b8ff7578194c427263
-RMD160 (NetBSD-6.0/zaurus/binary/sets/kern-C700.tgz) = 0867bac200dd8bd12d1c4d225d392a175e06f24a
-MD5 (NetBSD-6.0/zaurus/binary/sets/kern-C700.tgz) = d1c5388985d5693d492ec75713ef3ccd
-SHA1 (NetBSD-6.0/zaurus/binary/sets/base.tgz) = fcee164dc5d4cd72f3c9841b7c7fbe295c4b3e6a
-SHA512 (NetBSD-6.0/zaurus/binary/sets/base.tgz) = 910606c4dedf523e5db213165fd5a244a655a40a7c4686e7a8e80f015d8ca496a1770b1a94532e118ad7cb4d2f4cfd0abb4e07560e0507275b4a27fefa3fb8af
-RMD160 (NetBSD-6.0/zaurus/binary/sets/base.tgz) = c1f5fb6f7b18486f08cacbf1ea6cef5d852a3b4d
-MD5 (NetBSD-6.0/zaurus/binary/sets/base.tgz) = e646c1da6b4ca9c38607d97cbbb6871a
-SHA1 (NetBSD-6.0/zaurus/binary/sets/comp.tgz) = 9af4ccb1edd8eea77f32d50aad4592c483bc41bc
-SHA512 (NetBSD-6.0/zaurus/binary/sets/comp.tgz) = b3eecf648f57fcc3af7ed707bf7f584db4aff71b7755986652e80e2a11e83b7a663263800f143d4dfe668bff0dd606f7733f1ae36be132f70c888a45e210d14c
-RMD160 (NetBSD-6.0/zaurus/binary/sets/comp.tgz) = ef64fdf6c3e118e4aab5264d457278d625408275
-MD5 (NetBSD-6.0/zaurus/binary/sets/comp.tgz) = c22150f0e6684dc1d64fef0abf882dec
-SHA1 (NetBSD-6.0/zaurus/binary/sets/etc.tgz) = 04a520449ff803fefaf80b0beaee929122d9a5bd
-SHA512 (NetBSD-6.0/zaurus/binary/sets/etc.tgz) = a109dffb85cd44758b30a9fd7b5eeb0e68b43babb96984974662ede674c4e4b06cddfdb84fd4377cdcf66944506547585f2e4e1fde1dd2c6ba0c823fec5af6e7
-RMD160 (NetBSD-6.0/zaurus/binary/sets/etc.tgz) = 1412ce7fbadb5bc2a7ea54662dc5af065a52fd06
-MD5 (NetBSD-6.0/zaurus/binary/sets/etc.tgz) = fdcf4276a2adc8bc6b8899a0f92827b2
-SHA1 (NetBSD-6.0/zaurus/binary/sets/kern-GENERIC.tgz) = 5a4db67f97cbf15dfa86f3d1bdd1e0fbf45cf2c3
-SHA512 (NetBSD-6.0/zaurus/binary/sets/kern-GENERIC.tgz) = d47f1b328c845abe0a131e5fec333a5badbbde60e1abb1c2a01032128350ae33a69df720f9a5a944e93a9c29e04b669f530d7d4b803d9262edef1ce8953099d9
-RMD160 (NetBSD-6.0/zaurus/binary/sets/kern-GENERIC.tgz) = 57cc4468fe4f292c4798dcaf7c7ee8b6a79c72cd
-MD5 (NetBSD-6.0/zaurus/binary/sets/kern-GENERIC.tgz) = 7b6a87debe65e4d987181b2a600a0cc9
-SHA1 (NetBSD-6.0/zaurus/binary/sets/modules.tgz) = 97cf73286143f2ee9d1d75d291226b14382bc3e9
-SHA512 (NetBSD-6.0/zaurus/binary/sets/modules.tgz) = 819d952342aedefae4120c8b0f3aa362089528ea9a604479b4242154b52e76688353386c6c6fe7f675086997459a1038f74037840642d4d522145be09d13b01c
-RMD160 (NetBSD-6.0/zaurus/binary/sets/modules.tgz) = 1c5ade56f427ccb12d516da4b60266496a0dbe7f
-MD5 (NetBSD-6.0/zaurus/binary/sets/modules.tgz) = fdf54f31acaaf41ae7e04155dc2ed8e3
-SHA1 (NetBSD-6.0/zaurus/binary/sets/tests.tgz) = d267f0e6d994c769d85698d5fe84dc84d3eb0aea
-SHA512 (NetBSD-6.0/zaurus/binary/sets/tests.tgz) = 400bcfd917639182daf83eddf20aa476be42285c8c5fdeb187b5086c7c00b0ebf2a0aa7badb7f4e1e43e70f43c46972003a4e6b4dd95eb5b7d621e2f8a562623
-RMD160 (NetBSD-6.0/zaurus/binary/sets/tests.tgz) = b8578e18377c21e4f0bc5509eddaacca4e439849
-MD5 (NetBSD-6.0/zaurus/binary/sets/tests.tgz) = ae201c948e67c3c74b0f5f89dde362ce
-SHA1 (NetBSD-6.0/zaurus/binary/sets/text.tgz) = 3467c94a0c6bcd54efe8849c282fa26f9f02624a
-SHA512 (NetBSD-6.0/zaurus/binary/sets/text.tgz) = 0f24772a93aa15de7b2a40e237ea5efeb0f701a6c3645b7add0e478bfcfb3d3050a74d80b1328eb821591ee0464e051572f2afa6bb2935d34ae369809546cf65
-RMD160 (NetBSD-6.0/zaurus/binary/sets/text.tgz) = 6acb227a392a29ef30d17e861ec681c56da75790
-MD5 (NetBSD-6.0/zaurus/binary/sets/text.tgz) = b4ed717b1487f24bf1768305e0c0065d
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xbase.tgz) = 8b5a46ee79d9bffd6d6eb0af06ff3928029b7a92
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xbase.tgz) = c675ab7e92391becf93b9894115e5149b1ef4b4cb9b2f41a58a12c0009c8c1999de4aa8e239f82308c5892accac5cbbe0a3d380f30134bec29b433a5357d1cfc
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xbase.tgz) = 81d52af994bb130ce57e83468b7ce350f107f3bd
-MD5 (NetBSD-6.0/zaurus/binary/sets/xbase.tgz) = 02cd86601f44cd4ba11e466236b04e1d
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xserver.tgz) = e293d1143593154074951807e155c8e87adff50a
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xserver.tgz) = 060d8e60ec568aebafef85ab34b527dafe11516ef5761598e2ba79e5e7994cd4f710812e857fd20bb1e09b0df5692ef1e10949273027c66ce2255e2b15f78132
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xserver.tgz) = 8ea704c20eb2aafb79603904423f7e137136ef4e
-MD5 (NetBSD-6.0/zaurus/binary/sets/xserver.tgz) = f8d5d948e6ccb12094636c6d4106f895
-SHA1 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL_C700) = 08e381ea42ccb632460555771fd7fe6bae057a24
-SHA512 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL_C700) = de5d9f71284b987f67077a0fcf2273d11418b73108ada25e4807614752eea38d58b8d32c53e86293a0492d05a842e81f44e5e5e5bdf3f0ca76e440263becd5ff
-RMD160 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL_C700) = 91c741493cd043610e542d01a4cde6ed30469be3
-MD5 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL_C700) = 5544b1f0b4a87402fc0fc5951aa303ae
-SHA1 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL) = a54eadb65290c45af5e6ae4d0cb0b803640fa2b0
-SHA512 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL) = e78fc99a17c732908af345a40f102ae8eef248f4c5c3a4fad85a8e9d497346f86b65096e816aba26975a71780672040c148f40fc4879cf0b6f5d5ec7f6aa34af
-RMD160 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL) = e0bde1431f7c4b3f649b2721c0c38f02ad273bc3
-MD5 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL) = 02bd814abd9951fec27c269ddefb6346
-SHA1 (NetBSD-6.0/zaurus/installation/zbsdmod.o) = 6f5a55fa2497fac0ae75f20df2074eaedde0aa0c
-SHA512 (NetBSD-6.0/zaurus/installation/zbsdmod.o) = 46e48ce8f3e637b5e708a066847e2f7449c8134f8f8d327e3ace9116cae4fc7b77aeee136cb797e00000277c4d224dcb10d946aff983be3292690580ba666b8b
-RMD160 (NetBSD-6.0/zaurus/installation/zbsdmod.o) = b96bdc9f3009ddb56d5b4b05e01e2cc3862a9e11
-MD5 (NetBSD-6.0/zaurus/installation/zbsdmod.o) = 49e746ab92af22b281d4c15eecf85c10
-SHA1 (NetBSD-6.0/zaurus/installation/zboot) = 142512f9c4e5a1a3762dc5b96416392a19fba367
-SHA512 (NetBSD-6.0/zaurus/installation/zboot) = 30520adab63612d4cf76919b21d2262235d3e2996c5a308f050e480acee5f544aad94993e53cd1e7490ef054b2fecfab7db0483ca1f9c045287debeedd84300e
-RMD160 (NetBSD-6.0/zaurus/installation/zboot) = ebd6148f2ed15ea48fd7a2f2a273136661287134
-MD5 (NetBSD-6.0/zaurus/installation/zboot) = da83febbb31821d4b68c07a9c9487946
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (NetBSD)
-
-iQIcBAEBAgAGBQJQfDnGAAoJEAZJc6xMSnBuq9AP/1n7mninneKOiCjD5RTtdS96
-sjxa7DbX1xd8ZIL+klchZurlqqKeBdk63gALDo6VpAsSbNH45R0Ib9rzvJiwSkRK
-7PHPqijtxgACFV4UclrUXWts+Px6AS8QxMfuLgRwu0KETYMnuR8Ghp9YD6xIGqaw
-kG5Pfnqs2qWi9Q/70uTlmJgl3iEj/KStdDyxcmH2VlejtAGxJxqVVwQ6XpAu5z1Z
-OVMmoZoReFeDiTZAydf0VzvwyfmHuPvXKfO8Z+PhkFboAUfuIKIO8DfljQ7A5OBp
-oEEK1nnjeac59KWPAvI4IbXfVuC1o2rEYmLHz9vBxHKiPf9SxL4XjNbZozejXsMD
-h1NWWt4q6nD4nGQaOPyR4afN0ZWluC+6cASQ+Srmr/0QJbsBwgtXuKza2vwNs0iC
-IF80PL1iPjDPmf1CQnOZqJktUfv4aeAcwNs8oiq+toIlgOkIwCzFQFjflny9pRKp
-/YOxwFY8izCb6pu0/3LM2CSutwDEkR7I6aAn65BFW0ia6Ty5azf9iIFOAIbzefkH
-AP1CJKn36vgtcny/R9KueIw/50Hok2rrFrDqzC8mMq5j3Pletm/4equmVu27e+uc
-0jTiNwCHb6ZvuoO7d1clrIEEJPEXe66Xcmj9iJzo+Ai1nhCj1BDNZnj9zHbIwPIQ
-6yQgxCHP9Ney/0j1V+sF
-=nHXc
------END PGP SIGNATURE-----
+ uudecode << EOF
+begin-base64 644 NetBSD-6.0_hashes.asc.gz
+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
+tyqIlNwhRRNj3K46lymZxdG+jMqP50E7d6omJEqsrdBOyVztIJMqO/9/5t6tx7Yk
+OdL7R6O4X171KggDSBhAb0RcBw2J7AKbwHD+vT5bJ7MrV56duSOzzgCHZLOq67L2
+3ssj3M0i3M2s++Cg6l//9sc/vtSrtkwTM3Qyk6AGQ+aMWiFFRLXou1pMamkfxeyr
+n2fZCtKCy7oWrxoZIH5d22OrM6LHLbNldhokyjUoysV+qNVr1wjVt45tCBU3BF4S
+jUFmKlOKv5RPCP8lUalm0wmwBEBkzWiQZbI0l6P9kJV99XcoxNEngr7rJXftdHNl
+NlVWHcPsyi4lafsw2l8O0iyiFU4tWK4V+cP2JMCutgTf3FeXwr1rdfJ+glPCLH5m
+zV/olkui+2woGRQNnVOM/fUlcP8cE6d6rQFMQhyztySti8v6RDPj3Wd2MYQRFGLm
+VJOXTu63fOs0WeY1FN5tzLwM6Hoi3Q+1xJCotRrUXNM04TcmHFllFFbQdtM8q+yd
+R/166N/JWkmyNy19ZBu6RQ6XI42Am1U+F131fc4vhvydqlXXGQ1fswQTryZSiLCT
+IryRUlT77q5/nbSEMjRe9ZyS48qAD11l1ibFgB78AGHM6Pb3d/sLFQYuOskoOFA3
+u9LIlBNaFwC2/BjZGqQIOpe7xLDXQJ2TAab8EsnGidUIHU8D7JkoZFs3hH56WeQ6
+L0kWSbX7rK4o4APpSX1aUqwrXtPr+/u7/JVxU1hWUmtIANUak9jtQAOeGSflSB6O
+VKH0zd39KpOm06VcItzEF5lCtxVlGNuMDp/z81A/8PVRCmczgeF94FuyoeWzNrr0
+G6FdQiNtf0wlPn8673ZDvJsV/CXVkcsBH7rDbbDlbeTpQArsgc/LItFAPPaLug67
+JlhBBJr69l3zieRyNnYXopWDh24QG5gQ2OGCTAZ03HhdtO0AyJGPgD0J64MWUk3i
+sqs0dkSloeZc7tbqJJAQXQtBLm9xPw3mI2G0qU7ZoTGvreEgp3bnMrwm1ZwphyH8
+hU2knz37d+0i/ew7/6U20s8e/L0+0p+f+AsbST99+O/aSfr5G/krraSfPvl7vaQ/
+PfJhl11X58rmlbbRt9zbqmwRdRI/pbCpsaVVPu57OvoQyohOV7rEXoRuqSYuFXXS
+QOaq0l2lIEi3THd+YYyise4kwRLJmhkFLm6AumUHs4/DJo9JfyVCYclEUrRK0jQu
+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
+0EbuVRbNvuqeIyzPHtaZBRUy5fhekE8fJfe2bSQElczwIC5wY3ckJtlshwUhHc0V
+6dixqqqkB03uzdpOuSp16zjYs1iCISPbEs1iJ2mgNxaygRW7D+WQpJfeURNJlaKT
+teyFzVbo74X69BOWDqel4WZj8i2RnsZh9dS9BfBuJ01RlYw3An76HL2l5rxvRleH
+uqYHo+RQu+6j4Mnvhf2f/nv4p7/7tUNE1kawvVo7gIoSNuAB0jCAiQ+d0MnVJb0b
+9puPgkcKtkhuIAcdkxAK0OrWnMjoY5ETy2pqsJONyMhNfguHsOXSob/MKrSbvXPh
+uD5coU+pvrajLZxUkewxbX+g29UKPGOyFX2lQq+VzLthv/kJMRXJSHRxlwywWyCv
+47oidguz9TY1D+mcb4X95nMyK7noaESKmuqy7pI1A07lxNv41A3j/gf81//5T//w
+j18fDB2AeYriiHeyp5qOEyW+oOlgUmrr5pvi/Avhvv0Iy0bQyRUwF8rbu5WqvwCd
+/BIPsdd9EH/pKFvHRzqZ29SSi5WrSWyHCxq5SM25OS6Ac5yasxQHTw3cJg2jCES3
+JQ8y6xS/tFFiakZ3nK+F+farS6dBLbGFfNLlrZx1YJtWYxmyE0qXwW6Z6ZXw3j4f
+2laUrCWrs2WIO5p0nyOPXG0V+1JY/9v//E//4+///j//519vLFgYvKWkQ6plvJfd
+JXxd4gHZ7hbVQEDpfDGyHz7FfvEOS5qRmmxVAFklWoQXGt+XIpUkFT+tukrc1vWJ
+Lor3MaEaR9vgnjyDhC7VEwZzXxp7Am57ie0VFgD/XtrkVM1ueV6/Y4FIMko9fy8G
+98O37+QIvq92LCSlSe9vFl7SlPI26FqOVeCa/Ep8P3yEJM2dm8blEPhxuoANZGrZ
+HVPKSnsrxP/8P/7+//kWgCI/vuGmVXsx5MPqzYUGxhfnz8doNlvlzTDffFIiD1MX
+dGs657JykipqqZ1xQ4hSLUkld0JsReODJrShJk7uhXX7YKTRA7rdzslDIEsWiARe
+mpFPNxyPPwNvWP4BG3jKIQ+u3NUj2ADlY70Z6ptfsFvXKSN7YpbSJC4qffgaHWsP
+yt+0usZ8DXd/8jFy92MJFXErCalQOouASUkCOp/6Ddw+/w8d3Hr04B9ycOvRF35/
+cOvRU98Y3Pr94/6owa2HT/4hB7cev4u3B7cePvaNwa3fPe800wBr/tXTi4erTX7z
++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
+U/o9Sm1r56e/gN/ulLvyMsZPONUwbMCMlre0xtm1YsKkim4T2i5Ukq9uO2yLM4Zt
+UCkR2CFepQt0dPlIcGhhe6F/FTJ9SKJB/gfz499IgnNIEunP6gU293Twf/sFC1jD
+LIwxA+H0TqbvifEXgdVEixlKck/G/bfbOL2EiZ8Lw2dpKbOnWGgZmUFvwaRvhvxl
+xW+EwQuKG4p4R0VFOC+Ka1llFUUhF/pz3Lfj/come/IDm3QtVEEaFeFER5Bgq2f2
+pymOKBnXmJSm8XlbGd0zRb1gkVD1Pu1lmuDyWKIG2IW5jftcwlssm23EgZuCjQS9
+mH+IU5cvMSOEur8d7NceYpFUfaWMRS3PLCS+mIJVTpwsuGBUZpnN/V6kX7a8w0w7
+CSS4EvJKO2LNhXHfyFlwZn4zwb+Qyb2UTumxEUkyWC2AWgTDo9abwUbWqaTv8e3E
+/rKmmersfY6NRhrz1AMpRz1/7UkcKjXf0XtnWBJbheV3NK4LovWrX7YpbALhZrPq
+tdz32F7cC1iPztFe9MDo46/oji7BMd1N5Hu65JUCW/h2Qn/Z4kYaCimMKUiytKSt
+KaoVwo6T42p9Sq1bP/L3EvnravY7Ny24yXlfS9EzFiuWNZL+x65fhvkPV/b5+NJ/
+tto+Hz/y/566z8fX/aa+z9sL/pEKP59c+89W4+ez9/G/pfLzyYW/qfPz5oq3wd6/
++3e/ZvD80quKWy8klShUdilL6PvXDYfKApZF8ZOewLPbOEbYVQ61vAp1v2nR4Uy7
+xZVX5HSyqWpcJwk4QgcMneqEZwanou4nJ6kelVfT/aA/Hj3liA+b6mRr+jiSvvBW
+LWPFeuGqzXpF7I8EnENPA/rB4/uMT+Fm0mLYrOx9zUxYfXeKjNZoV4JX0jpblR/c
+I5uZ7ArIQxS9KvJhStOgia/fZNdZmB+btcWBOKQXac3CmWEWn9zqYuwisioRU8Gg
++pjT2N4azPH/SPR3gVCwfsZsnYOTLELLPsBiTL7pntfs4mzbF6PirX8SYxuYKaKQ
+U/RfWnjVrCsbCZ13fQhpLIU7bfwvMNSdGbata64LZXhznFpvOkU+GubLPO1m6Ogg
+bm9aqVE3Skxg6HmTj0dRvL9oDNH1jsfI+lExhcuBeXcXWm4fylu8ueLj7La+c3h8
+pC3eeKPKuui5a0ooClyqkQErVcXT0N1UhThajN4IG8SOXlUbNSmbGNWXNe0aPQQf
+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
+63c/sI/ST4/uP3o073xx/8aDm+HLr38bX5V47dcHz2u62b6zz0f+/vY/3/vxYf/P
+90+fPPzllzvzw/FjdD9c/+fNx/Gbn6//+lX7/BMfvjS3W3ny4vdP7z/76scv71xL
+dz+5+8v9B789/+H6jY++8f/qD5/867tvf/v1vbvP4/Wv8r3nn62n//zhy2dPzZ1b
+X//7s0dPv8wf/+fn8u+b8fntj3+pz679+HG4ux798uv2y7f3y70Pknn69cOfPv3h
+obt/68EHd776bdz843n/6ZPtm4fzwW/XP37+6fNfvvnm2b343c/Xn4YX9vtrX3zz
+2U+Pv3/85fxo3rz/9ffX/xjLfPPi92d/rJ8+eXr39+/urC/y9+/d/c+PH7XH1/+1
+nt6+c/uLfHM9fHAvXQ9ffPjztce3bt2xjx494P6s3Pn27vXfb/vb7bv1zdMb9vH2
+5Na/f/rnJy/K7x8+/+TO/burfPX8n/67B5+37x+/mA+++/Wzm9f+Yz//9tvf/C/x
+0U3/6ON79Yu7f3ypiPC5+f7bh09vvBf79a/uvffVk5+efGDufdp+/fDZD7999/TO
+i7r9/uzzX839G9duf5TN3X/a+3cf3Lz707I37j364vtfPv3xt3+t35W6Xe/6bfnx
+/V/e++3x7Yc/fPHj7Wc3Xnx076MH6+GjP8rPX975+doH//7i+bOP/p3vv7jR4s9P
+zQfun59tN756+tuzm7d+/DLdjvX6oxg+/Ohbc7/Gr/8I9cUq929/9MX12+3FXD9+
+cu36XXvj0zuPXPz9h9/6oz8++LLceTpvP/sgmE8e/7g9efLRk5u/vLiRf/rsl/DA
+3X04f/vpAz9/efrTN0/lc9972q+ZB1/f//zZjU9a/P73p4+/IF15+OT2rVuf3r31
+3Yzxu/7Tg3L/0xeP37t+3z76z40H9sObn3//6EF58Um7/ezu7XvX4h/3fnh+45O7
+5fP5xwfmgf3mvV8/uvZ/H33yXT/ZJLc+v3neFvn/qZKFEe79DQA=
+====
EOF
- cat > expected16 << EOF
-Good signature for b.gpg made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ gunzip NetBSD-6.0_hashes.asc.gz
+ uudecode << EOF
+begin-base64 644 expected16
+R29vZCBzaWduYXR1cmUgZm9yIGIuZ3BnIG1hZGUgTW9uIFNlcCAxMCAwMDoxNToz
+OCAyMDEyCnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2lnbikg
+MWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAgZDQxNSA5
+ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAKdWlk
+ICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29rcy5j
+b20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3JjLm9y
+Zz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRic2Qub3Jn
+Pgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZsaXguY29t
+PgoK
+====
EOF
- cat >expected17 <<EOF
-Good signature for a.gpg made Sun Sep 9 17:44:11 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected17
+R29vZCBzaWduYXR1cmUgZm9yIGEuZ3BnIG1hZGUgU3VuIFNlcCAgOSAxNzo0NDox
+MSAyMDEyCnNpZ25hdHVyZSAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2lnbikgMWI2
+OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50OiAgZDQxNSA5ZGVi
+IDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAKdWlkICAg
+ICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29rcy5j
+b20+CnVpZCAgICAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3Jj
+Lm9yZz4KdWlkICAgICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRi
+c2Qub3JnPgp1aWQgICAgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5l
+dGZsaXguY29tPgplbmNyeXB0aW9uIDIwNDgvUlNBIChFbmNyeXB0IG9yIFNpZ24p
+IDc5ZGViNjFlNDg4ZWVlNzQgMjAwNC0wMS0xMgpmaW5nZXJwcmludDogIDU3YzAg
+YzFlNiBiZjcxIDg4NDUgNDE2YiA5NTIyIDc5ZGUgYjYxZSA0ODhlIGVlNzQgCgo=
+====
EOF
- cat >expected18 <<EOF
-Good signature for gpgsigned-a.gpg made Sun Sep 9 17:43:01 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected18
+R29vZCBzaWduYXR1cmUgZm9yIGEuZ3BnIG1hZGUgVHVlIE1heSAzMSAyMzoyOTox
+MCAyMDE2CnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2lnbikg
+MWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAgZDQxNSA5
+ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAKdWlk
+ICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29rcy5j
+b20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3JjLm9y
+Zz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRic2Qub3Jn
+Pgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZsaXguY29t
+PgoK
+====
EOF
- cat >expected19 <<EOF
-Good signature for NetBSD-6.0_RC2_hashes.asc made Wed Sep 19 07:53:18 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected19
+R29vZCBzaWduYXR1cmUgZm9yIE5ldEJTRC02LjBfUkMyX2hhc2hlcy5hc2MgbWFk
+ZSBXZWQgU2VwIDE5IDA3OjUzOjE4IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAo
+RW5jcnlwdCBvciBTaWduKSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmlu
+Z2VycHJpbnQ6ICBkZGVlIDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDcz
+YWMgNGM0YSA3MDZlIAp1aWQgICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBP
+ZmZpY2VyIDxzZWN1cml0eS1vZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24g
+NDA5Ni9SU0EgKEVuY3J5cHQgb3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5
+LTA2LTIzIFtFeHBpcnkgMjAxOS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4
+MDEgZmJkOCBmNDVkIDg5ZjIgMDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- cat >expected20 <<EOF
-1. tag & 0x3f
-2. len
-
-one pass (tag 4)
-========
-b version:3
-b sig type
-b hash alg
-b pubkey alg
-8b keyid
-
-literal data (tag 11)
-=============
-b binary/text
-b length
-c string
-L mtime
-text
+ uudecode << EOF
+begin-base64 644 expected20
+MS4gdGFnICYgMHgzZgoyLiBsZW4KCm9uZSBwYXNzICh0YWcgNCkKPT09PT09PT0K
+YiB2ZXJzaW9uOjMKYiBzaWcgdHlwZQpiIGhhc2ggYWxnCmIgcHVia2V5IGFsZwo4
+YiBrZXlpZAoKbGl0ZXJhbCBkYXRhICh0YWcgMTEpCj09PT09PT09PT09PT0KYiBi
+aW5hcnkvdGV4dApiIGxlbmd0aApjIHN0cmluZwpMIG10aW1lCnRleHQK
+====
EOF
- cat >expected21 <<EOF
-Good signature for [stdin] made Sun Sep 9 17:44:11 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected21
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBUdWUgTWF5IDMxIDIzOjI5
+OjEwIDIwMTYKc2lnbmF0dXJlICAgICAyMDQ4L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAxYjY4ZGNmY2MwNTk2ODIzIDIwMDQtMDEtMTIKZmluZ2VycHJpbnQgICBkNDE1
+IDlkZWIgMzM2ZCBlNGNjIGNkZmEgMDBjZCAxYjY4IGRjZmMgYzA1OSA2ODIzIAp1
+aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQGFsaXN0YWlyY3Jvb2tz
+LmNvbT4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0Bwa2dzcmMu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGJzZC5v
+cmc+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAbmV0ZmxpeC5j
+b20+Cgo=
+====
EOF
- cat >expected22 <<EOF
-Good signature for [stdin] made Sun Sep 30 10:50:20 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected22
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBTdW4gU2VwIDMwIDEwOjUw
+OjIwIDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAxYjY4ZGNmY2MwNTk2ODIzIDIwMDQtMDEtMTIKZmluZ2VycHJpbnQgICBkNDE1
+IDlkZWIgMzM2ZCBlNGNjIGNkZmEgMDBjZCAxYjY4IGRjZmMgYzA1OSA2ODIzIAp1
+aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQGFsaXN0YWlyY3Jvb2tz
+LmNvbT4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0Bwa2dzcmMu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGJzZC5v
+cmc+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAbmV0ZmxpeC5j
+b20+Cgo=
+====
EOF
- cat >expected23 <<EOF
-Good signature for [stdin] made Wed Sep 19 07:53:18 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected23
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBXZWQgU2VwIDE5IDA3OjUz
+OjE4IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAoRW5jcnlwdCBvciBTaWduKSAw
+NjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2VycHJpbnQ6ICBkZGVlIDJi
+ZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMgNGM0YSA3MDZlIAp1aWQg
+ICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZpY2VyIDxzZWN1cml0eS1v
+ZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24gNDA5Ni9SU0EgKEVuY3J5cHQg
+b3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5LTA2LTIzIFtFeHBpcnkgMjAx
+OS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4MDEgZmJkOCBmNDVkIDg5ZjIg
+MDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- cat >expected24 <<EOF
-Good signature for [stdin] made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected24
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBNb24gU2VwIDEwIDAwOjE1
+OjM4IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAxYjY4ZGNmY2MwNTk2ODIzIDIwMDQtMDEtMTIKZmluZ2VycHJpbnQgICBkNDE1
+IDlkZWIgMzM2ZCBlNGNjIGNkZmEgMDBjZCAxYjY4IGRjZmMgYzA1OSA2ODIzIAp1
+aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQGFsaXN0YWlyY3Jvb2tz
+LmNvbT4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0Bwa2dzcmMu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGJzZC5v
+cmc+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAbmV0ZmxpeC5j
+b20+Cgo=
+====
EOF
- cat >expected25 <<EOF
-Good signature for NetBSD-6.0_RC1_hashes.gpg made Tue Oct 16 08:12:16 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected25
+R29vZCBzaWduYXR1cmUgZm9yIE5ldEJTRC02LjBfUkMxX2hhc2hlcy5ncGcgbWFk
+ZSBUdWUgT2N0IDE2IDA4OjEyOjE2IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAo
+RW5jcnlwdCBvciBTaWduKSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmlu
+Z2VycHJpbnQ6ICBkZGVlIDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDcz
+YWMgNGM0YSA3MDZlIAp1aWQgICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBP
+ZmZpY2VyIDxzZWN1cml0eS1vZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24g
+NDA5Ni9SU0EgKEVuY3J5cHQgb3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5
+LTA2LTIzIFtFeHBpcnkgMjAxOS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4
+MDEgZmJkOCBmNDVkIDg5ZjIgMDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- cat >expected26 <<EOF
-Good signature for [stdin] made Tue Oct 16 08:12:16 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected26
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBUdWUgT2N0IDE2IDA4OjEy
+OjE2IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAoRW5jcnlwdCBvciBTaWduKSAw
+NjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2VycHJpbnQ6ICBkZGVlIDJi
+ZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMgNGM0YSA3MDZlIAp1aWQg
+ICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZpY2VyIDxzZWN1cml0eS1v
+ZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24gNDA5Ni9SU0EgKEVuY3J5cHQg
+b3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5LTA2LTIzIFtFeHBpcnkgMjAx
+OS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4MDEgZmJkOCBmNDVkIDg5ZjIg
+MDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- cat >expected27 <<EOF
-Good signature for [stdin] made Mon Oct 15 09:28:54 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected27
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBNb24gT2N0IDE1IDA5OjI4
+OjU0IDIwMTIKc2lnbmF0dXJlICAgICA0MDk2L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2VycHJpbnQgICBkZGVl
+IDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMgNGM0YSA3MDZlIAp1
+aWQgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZpY2VyIDxzZWN1cml0eS1v
+ZmZpY2VyQE5ldEJTRC5vcmc+Cgo=
+====
EOF
- cat >expected28 <<EOF
-Good signature for NetBSD-6.0_hashes.asc made Mon Oct 15 09:28:54 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected28
+R29vZCBzaWduYXR1cmUgZm9yIE5ldEJTRC02LjBfaGFzaGVzLmFzYyBtYWRlIE1v
+biBPY3QgMTUgMDk6Mjg6NTQgMjAxMgpzaWduYXR1cmUgICAgIDQwOTYvUlNBIChF
+bmNyeXB0IG9yIFNpZ24pIDA2NDk3M2FjNGM0YTcwNmUgMjAwOS0wNi0yMwpmaW5n
+ZXJwcmludCAgIGRkZWUgMmJkYiA5Yzk4IGEwZDEgZDRmYiBkYmY3IDA2NDkgNzNh
+YyA0YzRhIDcwNmUgCnVpZCAgICAgICAgICAgTmV0QlNEIFNlY3VyaXR5IE9mZmlj
+ZXIgPHNlY3VyaXR5LW9mZmljZXJATmV0QlNELm9yZz4KCg==
+====
EOF
- cat >expected29 <<EOF
-Good signature for NetBSD-6.0_RC1_hashes_ascii.gpg made Sun Sep 9 17:41:24 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected29
+R29vZCBzaWduYXR1cmUgZm9yIE5ldEJTRC02LjBfUkMxX2hhc2hlc19hc2NpaS5n
+cGcgbWFkZSBTdW4gU2VwICA5IDE3OjQxOjI0IDIwMTIKc2lnbmF0dXJlICA0MDk2
+L1JTQSAoRW5jcnlwdCBvciBTaWduKSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYt
+MjMKZmluZ2VycHJpbnQ6ICBkZGVlIDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAw
+NjQ5IDczYWMgNGM0YSA3MDZlIAp1aWQgICAgICAgICAgICAgIE5ldEJTRCBTZWN1
+cml0eSBPZmZpY2VyIDxzZWN1cml0eS1vZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5
+cHRpb24gNDA5Ni9SU0EgKEVuY3J5cHQgb3IgU2lnbikgOWZmMmMyNGZkZjJjZTYy
+MCAyMDA5LTA2LTIzIFtFeHBpcnkgMjAxOS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAx
+OTE1IDA4MDEgZmJkOCBmNDVkIDg5ZjIgMDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIw
+IAoK
+====
EOF
- cat >expected30 <<EOF
-Good signature for [stdin] made Sun Sep 9 17:41:24 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected30
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBTdW4gU2VwICA5IDE3OjQx
+OjI0IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAoRW5jcnlwdCBvciBTaWduKSAw
+NjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2VycHJpbnQ6ICBkZGVlIDJi
+ZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMgNGM0YSA3MDZlIAp1aWQg
+ICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZpY2VyIDxzZWN1cml0eS1v
+ZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24gNDA5Ni9SU0EgKEVuY3J5cHQg
+b3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5LTA2LTIzIFtFeHBpcnkgMjAx
+OS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4MDEgZmJkOCBmNDVkIDg5ZjIg
+MDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- uudecode <<EOF
+ uudecode << EOF
begin-base64 644 expected31
UFJPRz1wClNSQ1M9cGFyc2UuYwpXQVJOUz01Ck1LTUFOPW5vCkNQUEZMQUdTKz0t
ZyAtTzAKTERGTEFHUys9LWcgLU8wCgouaW5jbHVkZSA8YnNkLnByb2cubWs+Cgp0
@@ -8595,39 +7128,36 @@ Ci5pbmNsdWRlIDxic2QucHJvZy5taz4KCnQ6ICR7UFJPR30KCS4vJHtQUk9HfSBn
cGdzaWduZWQtYS5ncGcK
====
EOF
- cat >expected32 <<EOF
-Good signature for b.gpg made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
-Good signature for b.gpg made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
-Good signature for b.gpg made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected32
+R29vZCBzaWduYXR1cmUgZm9yIGIuZ3BnIG1hZGUgTW9uIFNlcCAxMCAwMDoxNToz
+OCAyMDEyCnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2lnbikg
+MWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAgZDQxNSA5
+ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAKdWlk
+ICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29rcy5j
+b20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3JjLm9y
+Zz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRic2Qub3Jn
+Pgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZsaXguY29t
+PgoKR29vZCBzaWduYXR1cmUgZm9yIGIuZ3BnIG1hZGUgTW9uIFNlcCAxMCAwMDox
+NTozOCAyMDEyCnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2ln
+bikgMWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAgZDQx
+NSA5ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAK
+dWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29r
+cy5jb20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3Jj
+Lm9yZz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRic2Qu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZsaXgu
+Y29tPgoKR29vZCBzaWduYXR1cmUgZm9yIGIuZ3BnIG1hZGUgTW9uIFNlcCAxMCAw
+MDoxNTozOCAyMDEyCnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3Ig
+U2lnbikgMWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAg
+ZDQxNSA5ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgy
+MyAKdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNy
+b29rcy5jb20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtn
+c3JjLm9yZz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRi
+c2Qub3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZs
+aXguY29tPgoK
+====
EOF
- uudecode <<EOF
+ uudecode << EOF
begin-base64 644 expected33
UFJPRz1wClNSQ1M9cGFyc2UuYwpXQVJOUz01Ck1LTUFOPW5vCkNQUEZMQUdTKz0t
ZyAtTzAKTERGTEFHUys9LWcgLU8wCgouaW5jbHVkZSA8YnNkLnByb2cubWs+Cgp0
@@ -8641,44 +7171,35 @@ IC1PMAoKLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgoKdDogJHtQUk9HfQoJLi8ke1BS
T0d9IGdwZ3NpZ25lZC1hLmdwZwo=
====
EOF
- cat >expected34 <<EOF
-Good signature for det.sig made Thu Oct 18 02:12:33 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected34
+R29vZCBzaWduYXR1cmUgZm9yIGRldC5zaWcgbWFkZSBUaHUgT2N0IDE4IDAyOjEy
+OjMzIDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAxYjY4ZGNmY2MwNTk2ODIzIDIwMDQtMDEtMTIKZmluZ2VycHJpbnQgICBkNDE1
+IDlkZWIgMzM2ZCBlNGNjIGNkZmEgMDBjZCAxYjY4IGRjZmMgYzA1OSA2ODIzIAp1
+aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQGFsaXN0YWlyY3Jvb2tz
+LmNvbT4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0Bwa2dzcmMu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGJzZC5v
+cmc+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAbmV0ZmxpeC5j
+b20+Cgo=
+====
EOF
- cat >expected35 <<EOF
-To Do
-=====
-tests with -k sig
-detached sigs
-DSA
-
-Done
+ uudecode << EOF
+begin-base64 644 expected35
+VG8gRG8KPT09PT0KdGVzdHMgd2l0aCAtayBzaWcKZGV0YWNoZWQgc2lncwpEU0EK
+CkRvbmUKPT09PQpiYXNpY3MKbG9jYWxpc2UgcGdwX3JlYWRfcGFja2V0cwpmaXgg
+bGludApXQVJOUz01CmxpYiBtYW4gcGFnZQpwcm9nIG1hbiBwYWdlCmRvIHdlIGRv
+IGl0IHN0YXRpY2FsbHkgbGlua2VkIGFzIHdlbGw/Cm11bHRpcGxlIGZpbGVzIGlu
+IG5ldHBncHZlcmlmeQo=
====
-basics
-localise pgp_read_packets
-fix lint
-WARNS=5
-lib man page
-prog man page
-do we do it statically linked as well?
-multiple files in netpgpverify
EOF
atf_check -s eq:0 -o file:expected16 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c verify b.gpg
- #atf_check -s eq:0 -o file:expected17 -e empty netpgpverify -c verify a.gpg
- #atf_check -s eq:0 -o file:expected18 -e empty netpgpverify -c verify gpgsigned-a.gpg
- #atf_check -s eq:0 -o file:expected19 -e empty netpgpverify -c verify NetBSD-6.0_RC2_hashes.asc
+ atf_check -s eq:0 -o file:expected18 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c verify a.gpg
+# atf_check -s eq:0 -o file:expected19 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c verify NetBSD-6.0_RC2_hashes.asc
atf_check -s eq:0 -o file:expected20 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat jj.asc
- #atf_check -s eq:0 -o file:expected21 -e empty netpgpverify < a.gpg
+ atf_check -s eq:0 -o file:expected21 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < a.gpg
atf_check -s eq:0 -o file:expected22 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < jj.asc
- #atf_check -s eq:0 -o file:expected23 -e empty netpgpverify < NetBSD-6.0_RC2_hashes.asc
+# atf_check -s eq:0 -o file:expected23 -e empty env TZ=US/Pacific netpgpverify < NetBSD-6.0_RC2_hashes.asc
atf_check -s eq:0 -o file:expected24 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < b.gpg
#atf_check -s eq:0 -o file:expected25 -e empty netpgpverify NetBSD-6.0_RC1_hashes.gpg
#atf_check -s eq:0 -o file:expected26 -e empty netpgpverify < NetBSD-6.0_RC1_hashes.gpg
@@ -8690,18 +7211,19 @@ EOF
atf_check -s eq:0 -o file:expected32 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg b.gpg b.gpg b.gpg
atf_check -s eq:0 -o file:expected33 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat b.gpg jj.asc b.gpg
atf_check -s eq:0 -o file:expected34 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg det.sig
- atf_check -s eq:0 -o file:expected35 -e empty env TZ=US/Pacific netpgpverify -c cat -k pubring.gpg det.sig
+ atf_check -s eq:0 -o file:expected35 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat det.sig
#atf_check -s eq:0 -o file:expected46 -e empty netpgpverify -k problem-pubring.gpg NetBSD-6.0_hashes.asc
-
}
-atf_test_case netpgpverify_dsa
-netpgpverify_dsa_head() {
- atf_set "descr" "DSA signatures for netpgpverify"
+# Test set 2 (dsa_signatures) for netpgpverify
+atf_test_case netpgpverify_testset_2_dsa_signatures
+
+netpgpverify_testset_2_dsa_signatures_head() {
+ atf_set "descr" "Test set 2 (dsa_signatures) for netpgpverify"
}
-netpgpverify_dsa_body() {
+netpgpverify_testset_2_dsa_signatures_body() {
uudecode << EOF
-begin-base64 600 dsa-pubring.gpg
+begin-base64 644 dsa-pubring.gpg
mQMuBFCEe2cRCACCpppLdv4Ku5vSFNOp4Qrjc0bO28aoVK77w2lJiPS7F9OAWYg0
N7AzamDMZolNdanmm4QZv8txwQC/d8XDB3viLmNDgi4D8/MNPvyL3PJ8AWi4ulkz
/D6e4DPvLvjZzOH+ZroqIwiixzfIx50crLJdbCM3c5A/dzRSY9IIAthdQsNNIVvX
@@ -8748,23 +7270,18 @@ DIIcDGysTCBXMHBxCsBct0iSkWHa0k9iZ5i+mtQ43zvsb7nA9sWeSrvwubEbQw0P
MNe3Vuky/C+59v/fFbGv5ofnzRSY/ld6vkfIxCtxoVEnvHZVrZeeb60BAA==
====
EOF
- cat > in1.asc << EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA256
-
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (NetBSD)
-
-iF4EAREIAAYFAlCFMdYACgkQJj/nhWLi/H7CkQEAgDQrFwPD76JC+6FnOKEz/9DP
-H7WjRRMoIQNTGC3ZXRsA/1xah8eFePQDmTO1sQGnINbgX9vZ7GAFOgTjW7+tVb7H
-=wtKb
------END PGP SIGNATURE-----
+ uudecode << EOF
+begin-base64 644 in1.asc
+LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBTSEEyNTYK
+CiMJLk5ldEJTRDogTWFrZWZpbGUsdiAxLjUuMTAuMSAyMDEyLzA1LzA2IDE4OjE0
+OjE2IGFnYyBFeHAgLgoKU1VCRElSKz0JbGliIC5XQUlUClNVQkRJUis9CWJpbgoK
+LmluY2x1ZGUgPGJzZC5zdWJkaXIubWs+Ci0tLS0tQkVHSU4gUEdQIFNJR05BVFVS
+RS0tLS0tClZlcnNpb246IEdudVBHIHYxLjQuMTEgKE5ldEJTRCkKCmlGNEVBUkVJ
+QUFZRkFsQ0ZNZFlBQ2drUUpqL25oV0xpL0g3Q2tRRUFnRFFyRndQRDc2SkMrNkZu
+T0tFei85RFAKSDdXalJSTW9JUU5UR0MzWlhSc0EvMXhhaDhlRmVQUURtVE8xc1FH
+bklOYmdYOXZaN0dBRk9nVGpXNyt0VmI3SAo9d3RLYgotLS0tLUVORCBQR1AgU0lH
+TkFUVVJFLS0tLS0K
+====
EOF
uudecode << EOF
begin-base64 644 in2.gpg
@@ -8775,119 +7292,120 @@ LAyCHAxsrEwgZzBwcQrAnFfzjeGv9GtuvQj7X/Kv5IQ8f2s9n/36yaOmu9HPs8/V
8pg+SdfaxMhwdEOjtLVOGtuaizmXnJ8oa4fN/bfL0WfP1smOn38vsLFlBQA=
====
EOF
- cat > in2.asc << EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA256
-
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (NetBSD)
-
-iF4EAREIAAYFAlCFSQoACgkQJj/nhWLi/H6aKAD9HCLTwY8CwiqTXrzKxHZ5lHQn
-qEZbcbXjkCxlk+m/PHUA/2Whlc0t5ZtmI221LQy5inTnzpu1U75E5lJvw0YMTdXJ
-=v788
------END PGP SIGNATURE-----
+ uudecode << EOF
+begin-base64 644 in2.asc
+LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBTSEEyNTYK
+CiMJLk5ldEJTRDogTWFrZWZpbGUsdiAxLjUuMTAuMSAyMDEyLzA1LzA2IDE4OjE0
+OjE2IGFnYyBFeHAgLiAKClNVQkRJUis9CWxpYiAuV0FJVApTVUJESVIrPQliaW4K
+Ci5pbmNsdWRlIDxic2Quc3ViZGlyLm1rPgotLS0tLUJFR0lOIFBHUCBTSUdOQVRV
+UkUtLS0tLQpWZXJzaW9uOiBHbnVQRyB2MS40LjExIChOZXRCU0QpCgppRjRFQVJF
+SUFBWUZBbENGU1FvQUNna1FKai9uaFdMaS9INmFLQUQ5SENMVHdZOEN3aXFUWHJ6
+S3hIWjVsSFFuCnFFWmJjYlhqa0N4bGsrbS9QSFVBLzJXaGxjMHQ1WnRtSTIyMUxR
+eTVpblRuenB1MVU3NUU1bEp2dzBZTVRkWEoKPXY3ODgKLS0tLS1FTkQgUEdQIFNJ
+R05BVFVSRS0tLS0tCg==
+====
EOF
- cat > expected36 << EOF
-Good signature for in1.gpg made Mon Oct 22 04:45:41 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected36
+R29vZCBzaWduYXR1cmUgZm9yIGluMS5ncGcgbWFkZSBNb24gT2N0IDIyIDA0OjQ1
+OjQxIDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected37 <<EOF
-Good signature for [stdin] made Mon Oct 22 04:45:41 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected37
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBNb24gT2N0IDIyIDA0OjQ1
+OjQxIDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected38 <<EOF
-Good signature for in1.asc made Mon Oct 22 04:45:26 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected38
+R29vZCBzaWduYXR1cmUgZm9yIGluMS5hc2MgbWFkZSBNb24gT2N0IDIyIDA0OjQ1
+OjI2IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected39 <<EOF
-Good signature for [stdin] made Mon Oct 22 04:45:26 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected39
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBNb24gT2N0IDIyIDA0OjQ1
+OjI2IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected40 <<EOF
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
+ uudecode << EOF
+begin-base64 644 expected40
+IwkuTmV0QlNEOiBNYWtlZmlsZSx2IDEuNS4xMC4xIDIwMTIvMDUvMDYgMTg6MTQ6
+MTYgYWdjIEV4cCAuCgpTVUJESVIrPQlsaWIgLldBSVQKU1VCRElSKz0JYmluCgou
+aW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
+====
EOF
- cat >expected41 <<EOF
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
+ uudecode << EOF
+begin-base64 644 expected41
+IwkuTmV0QlNEOiBNYWtlZmlsZSx2IDEuNS4xMC4xIDIwMTIvMDUvMDYgMTg6MTQ6
+MTYgYWdjIEV4cCAuCgpTVUJESVIrPQlsaWIgLldBSVQKU1VCRElSKz0JYmluCgou
+aW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
+====
EOF
- cat >expected42 <<EOF
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
+ uudecode << EOF
+begin-base64 644 expected42
+IwkuTmV0QlNEOiBNYWtlZmlsZSx2IDEuNS4xMC4xIDIwMTIvMDUvMDYgMTg6MTQ6
+MTYgYWdjIEV4cCAuCgpTVUJESVIrPQlsaWIgLldBSVQKU1VCRElSKz0JYmluCgou
+aW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
+====
EOF
- cat >expected43 <<EOF
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
+ uudecode << EOF
+begin-base64 644 expected43
+IwkuTmV0QlNEOiBNYWtlZmlsZSx2IDEuNS4xMC4xIDIwMTIvMDUvMDYgMTg6MTQ6
+MTYgYWdjIEV4cCAuCgpTVUJESVIrPQlsaWIgLldBSVQKU1VCRElSKz0JYmluCgou
+aW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
+====
EOF
- cat >expected44 <<EOF
-Good signature for in2.gpg made Mon Oct 22 06:24:09 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected44
+R29vZCBzaWduYXR1cmUgZm9yIGluMi5ncGcgbWFkZSBNb24gT2N0IDIyIDA2OjI0
+OjA5IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected45 <<EOF
-Good signature for in2.asc made Mon Oct 22 06:24:26 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected45
+R29vZCBzaWduYXR1cmUgZm9yIGluMi5hc2MgbWFkZSBNb24gT2N0IDIyIDA2OjI0
+OjI2IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected46 <<EOF
-Ignoring unusual/reserved signature subpacket 18
-Good signature for NetBSD-6.0_hashes.asc made Mon Oct 15 09:28:54 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected46
+SWdub3JpbmcgdW51c3VhbC9yZXNlcnZlZCBzaWduYXR1cmUgc3VicGFja2V0IDE4
+Ckdvb2Qgc2lnbmF0dXJlIGZvciBOZXRCU0QtNi4wX2hhc2hlcy5hc2MgbWFkZSBN
+b24gT2N0IDE1IDA5OjI4OjU0IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAoRW5j
+cnlwdCBvciBTaWduKSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2Vy
+cHJpbnQ6ICBkZGVlIDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMg
+NGM0YSA3MDZlIAp1aWQgICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZp
+Y2VyIDxzZWN1cml0eS1vZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24gNDA5
+Ni9SU0EgKEVuY3J5cHQgb3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5LTA2
+LTIzIFtFeHBpcnkgMjAxOS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4MDEg
+ZmJkOCBmNDVkIDg5ZjIgMDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
atf_check -s eq:0 -o file:expected36 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in1.gpg
atf_check -s eq:0 -o file:expected37 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg < in1.gpg
@@ -8901,7 +7419,9 @@ EOF
atf_check -s eq:0 -o file:expected45 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in2.asc
}
+# all test sets
atf_init_test_cases() {
- atf_add_test_case netpgpverify_rsa
- atf_add_test_case netpgpverify_dsa
+ atf_add_test_case netpgpverify_testset_1_rsa_signatures
+ atf_add_test_case netpgpverify_testset_2_dsa_signatures
}
+
diff --git a/contrib/netbsd-tests/usr.bin/sed/t_sed.sh b/contrib/netbsd-tests/usr.bin/sed/t_sed.sh
index 892feb9..cf535a8 100755
--- a/contrib/netbsd-tests/usr.bin/sed/t_sed.sh
+++ b/contrib/netbsd-tests/usr.bin/sed/t_sed.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_sed.sh,v 1.5 2013/03/14 06:03:44 jmmv Exp $
+# $NetBSD: t_sed.sh,v 1.6 2016/04/05 00:48:53 christos Exp $
#
# Copyright (c) 2012 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -119,9 +119,26 @@ rangeselection_body() {
-x "printf 'A\nB\nA\nC\nD\nC\n' | sed '/A/,/C/d'"
}
+atf_test_case preserve_leading_ws_ia
+preserve_leading_ws_ia_head() {
+ atf_set "descr" "Test that sed(1) preserves leading whitespace " \
+ "in insert and append (PR bin/49872)"
+}
+
+preserve_leading_ws_ia_body() {
+ atf_expect_fail "fails on ^/stable/10"
+
+ atf_check -o inline:" 1 2 3\n4 5 6\n 7 8 9\n\n" \
+ -x 'echo | sed -e "/^$/i\\
+ 1 2 3\\
+4 5 6\\
+ 7 8 9"'
+}
+
atf_init_test_cases() {
atf_add_test_case c2048
atf_add_test_case emptybackref
atf_add_test_case longlines
atf_add_test_case rangeselection
+ atf_add_test_case preserve_leading_ws_ia
}
diff --git a/contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txt b/contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txt
index a435545..610c470 100644
--- a/contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txt
+++ b/contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txt
Binary files differ
diff --git a/contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txt b/contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txt
index a435545..2bfbda8 100644
--- a/contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txt
+++ b/contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txt
Binary files differ
diff --git a/contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txt b/contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txt
index a435545..99d3ae6 100644
--- a/contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txt
+++ b/contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txt
Binary files differ
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_struct.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_struct.c
new file mode 100644
index 0000000..367b56f
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_struct.c
@@ -0,0 +1,26 @@
+/* Anonymous struct test */
+
+typedef int type;
+
+struct point {
+ int x;
+ int y;
+};
+
+struct bar {
+ struct {
+ struct point top_left;
+ struct point bottom_right;
+ };
+ type z;
+};
+
+
+int
+main(void)
+{
+ struct bar b;
+ b.top_left.x = 1;
+ return 0;
+}
+
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_union.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_union.c
new file mode 100644
index 0000000..508bcc9
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_union.c
@@ -0,0 +1,16 @@
+/* struct with only anonymous members */
+
+struct foo {
+ union {
+ long loo;
+ double doo;
+ };
+};
+
+int
+main(void) {
+
+ struct foo *f = 0;
+ printf("%p\n", &f[1]);
+ return 0;
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c
new file mode 100644
index 0000000..ca70694
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c
@@ -0,0 +1,14 @@
+struct bintime {
+ unsigned long long sec;
+ unsigned long long frac;
+};
+
+struct bintime
+us2bintime(unsigned long long us)
+{
+
+ return (struct bintime) {
+ .sec = us / 1000000U,
+ .frac = (((us % 1000000U) >> 32)/1000000U) >> 32,
+ };
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c
new file mode 100644
index 0000000..e7b8756
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c
@@ -0,0 +1,6 @@
+/* Allow packed c99 flexible arrays */
+struct {
+ int x;
+ char y[0];
+} __packed foo;
+
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_nested_struct.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_nested_struct.c
new file mode 100644
index 0000000..15410c8
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_nested_struct.c
@@ -0,0 +1,25 @@
+/* C99 nested struct init with named and non-named initializers */
+typedef struct pthread_mutex_t {
+ unsigned int ptm_magic;
+ char ptm_errorcheck;
+
+ char ptm_pad1[3];
+
+ char ptm_interlock;
+
+ char ptm_pad2[3];
+
+ volatile void * ptm_owner;
+ void * volatile ptm_waiters;
+ unsigned int ptm_recursed;
+ void *ptm_spare2;
+} pthread_mutex_t;
+
+
+struct arc4random_global {
+
+ pthread_mutex_t lock;
+} arc4random_global = {
+
+ .lock = { 0x33330003, 0, { 0, 0, 0 }, 0, { 0, 0, 0 }, ((void *)0), ((void *)0), 0, ((void *)0) },
+};
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_cast.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_cast.c
new file mode 100644
index 0000000..31628b4
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_cast.c
@@ -0,0 +1,18 @@
+/* union cast */
+
+struct bar {
+ int a;
+ int b;
+};
+
+union foo {
+ struct bar *a;
+ int b;
+};
+
+void
+foo(void) {
+ struct bar *a;
+
+ ((union foo)a).a;
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_init4.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_init4.c
new file mode 100644
index 0000000..f73b113
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_init4.c
@@ -0,0 +1,15 @@
+/* test .data.l[x] */
+typedef struct {
+ int type;
+ union {
+ char b[20];
+ short s[10];
+ long l[5];
+ } data;
+} foo;
+
+
+foo bar = {
+ .type = 3,
+ .data.l[0] = 4
+};
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c
new file mode 100644
index 0000000..345c783
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c
@@ -0,0 +1,9 @@
+
+static void f(void *b[4]) {
+ (void)&b;
+}
+
+void *
+foo(void *fn) {
+ return fn == 0 ? f : (void (*)(void *[4])) fn;
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_type_question_colon.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_type_question_colon.c
new file mode 100644
index 0000000..00f69cd
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_type_question_colon.c
@@ -0,0 +1,14 @@
+/* the type of the ?: expression should be the more specific type */
+
+struct foo {
+ int bar;
+};
+
+void
+test(void) {
+ int i;
+ struct foo *ptr = 0;
+
+ for (i = (ptr ? ptr : (void *)0)->bar; i < 10; i++)
+ test();
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_typefun.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_typefun.c
new file mode 100644
index 0000000..ad69c51
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_typefun.c
@@ -0,0 +1,22 @@
+/* typedef of function parameter */
+
+typedef void (*free_func) (void * opaque, void* address);
+typedef struct stack_st
+{
+ int num;
+ char **data;
+ int sorted;
+
+ int num_alloc;
+ int (*comp)(const void *, const void *);
+} _STACK; /* Use STACK_OF(...) instead */
+
+typedef void *OPENSSL_BLOCK;
+struct stack_st_OPENSSL_BLOCK { _STACK stack; };
+typedef void *d2i_of_void(void **,const unsigned char **,long); typedef int i2d_of_void(void *,unsigned char **);
+
+struct stack_st_OPENSSL_BLOCK *d2i_ASN1_SET(struct stack_st_OPENSSL_BLOCK **a,
+ const unsigned char **pp,
+ long length, d2i_of_void *d2i,
+ void (*free_func)(OPENSSL_BLOCK), int ex_tag,
+ int ex_class);
diff --git a/contrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh b/contrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh
index cc2b2f4..7727683 100755
--- a/contrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh
+++ b/contrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_traceroute.sh,v 1.5 2013/02/19 21:08:25 joerg Exp $
+# $NetBSD: t_traceroute.sh,v 1.6 2016/08/10 23:17:35 kre Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -26,7 +26,7 @@
#
netserver=\
-"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
+"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
atf_test_case basic cleanup
basic_head()
OpenPOWER on IntegriCloud