blob: 6bb4d98ef5259ce12eeb296af9ad4dc6f9648bb7 [file] [log] [blame]
// INFO: task hung in snd_pcm_oss_write
// https://syzkaller.appspot.com/bug?id=1106bd1fd40754fb1034e8ca884d23e08a4bbc2e
// status:fixed
// autogenerated by syzkaller (http://github.com/google/syzkaller)
#define _GNU_SOURCE
#include <arpa/inet.h>
#include <endian.h>
#include <errno.h>
#include <fcntl.h>
#include <linux/capability.h>
#include <linux/futex.h>
#include <linux/if.h>
#include <linux/if_ether.h>
#include <linux/if_tun.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <net/if_arp.h>
#include <pthread.h>
#include <sched.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/mount.h>
#include <sys/prctl.h>
#include <sys/resource.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <sys/time.h>
#include <sys/uio.h>
#include <sys/wait.h>
#include <unistd.h>
__attribute__((noreturn)) static void doexit(int status)
{
volatile unsigned i;
syscall(__NR_exit_group, status);
for (i = 0;; i++) {
}
}
#include <errno.h>
#include <setjmp.h>
#include <signal.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
const int kFailStatus = 67;
const int kRetryStatus = 69;
static void fail(const char* msg, ...)
{
int e = errno;
va_list args;
va_start(args, msg);
vfprintf(stderr, msg, args);
va_end(args);
fprintf(stderr, " (errno %d)\n", e);
doexit((e == ENOMEM || e == EAGAIN) ? kRetryStatus : kFailStatus);
}
static __thread int skip_segv;
static __thread jmp_buf segv_env;
static void segv_handler(int sig, siginfo_t* info, void* uctx)
{
uintptr_t addr = (uintptr_t)info->si_addr;
const uintptr_t prog_start = 1 << 20;
const uintptr_t prog_end = 100 << 20;
if (__atomic_load_n(&skip_segv, __ATOMIC_RELAXED) &&
(addr < prog_start || addr > prog_end)) {
_longjmp(segv_env, 1);
}
doexit(sig);
}
static void install_segv_handler()
{
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = SIG_IGN;
syscall(SYS_rt_sigaction, 0x20, &sa, NULL, 8);
syscall(SYS_rt_sigaction, 0x21, &sa, NULL, 8);
memset(&sa, 0, sizeof(sa));
sa.sa_sigaction = segv_handler;
sa.sa_flags = SA_NODEFER | SA_SIGINFO;
sigaction(SIGSEGV, &sa, NULL);
sigaction(SIGBUS, &sa, NULL);
}
#define NONFAILING(...) \
{ \
__atomic_fetch_add(&skip_segv, 1, __ATOMIC_SEQ_CST); \
if (_setjmp(segv_env) == 0) { \
__VA_ARGS__; \
} \
__atomic_fetch_sub(&skip_segv, 1, __ATOMIC_SEQ_CST); \
}
static void use_temporary_dir()
{
char tmpdir_template[] = "./syzkaller.XXXXXX";
char* tmpdir = mkdtemp(tmpdir_template);
if (!tmpdir)
fail("failed to mkdtemp");
if (chmod(tmpdir, 0777))
fail("failed to chmod");
if (chdir(tmpdir))
fail("failed to chdir");
}
static void vsnprintf_check(char* str, size_t size, const char* format,
va_list args)
{
int rv;
rv = vsnprintf(str, size, format, args);
if (rv < 0)
fail("tun: snprintf failed");
if ((size_t)rv >= size)
fail("tun: string '%s...' doesn't fit into buffer", str);
}
static void snprintf_check(char* str, size_t size, const char* format, ...)
{
va_list args;
va_start(args, format);
vsnprintf_check(str, size, format, args);
va_end(args);
}
#define COMMAND_MAX_LEN 128
#define PATH_PREFIX \
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin "
#define PATH_PREFIX_LEN (sizeof(PATH_PREFIX) - 1)
static void execute_command(const char* format, ...)
{
va_list args;
char command[PATH_PREFIX_LEN + COMMAND_MAX_LEN];
int rv;
va_start(args, format);
memcpy(command, PATH_PREFIX, PATH_PREFIX_LEN);
vsnprintf_check(command + PATH_PREFIX_LEN, COMMAND_MAX_LEN, format, args);
rv = system(command);
if (rv != 0)
fail("tun: command \"%s\" failed with code %d", &command[0], rv);
va_end(args);
}
static int tunfd = -1;
static int tun_frags_enabled;
#define SYZ_TUN_MAX_PACKET_SIZE 1000
#define MAX_PIDS 32
#define ADDR_MAX_LEN 32
#define LOCAL_MAC "aa:aa:aa:aa:aa:%02hx"
#define REMOTE_MAC "bb:bb:bb:bb:bb:%02hx"
#define LOCAL_IPV4 "172.20.%d.170"
#define REMOTE_IPV4 "172.20.%d.187"
#define LOCAL_IPV6 "fe80::%02hxaa"
#define REMOTE_IPV6 "fe80::%02hxbb"
#define IFF_NAPI 0x0010
#define IFF_NAPI_FRAGS 0x0020
static void initialize_tun(uint64_t pid)
{
if (pid >= MAX_PIDS)
fail("tun: no more than %d executors", MAX_PIDS);
int id = pid;
tunfd = open("/dev/net/tun", O_RDWR | O_NONBLOCK);
if (tunfd == -1) {
printf("tun: can't open /dev/net/tun: please enable CONFIG_TUN=y\n");
printf("otherwise fuzzing or reproducing might not work as intended\n");
return;
}
char iface[IFNAMSIZ];
snprintf_check(iface, sizeof(iface), "syz%d", id);
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, iface, IFNAMSIZ);
ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_NAPI | IFF_NAPI_FRAGS;
if (ioctl(tunfd, TUNSETIFF, (void*)&ifr) < 0) {
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
if (ioctl(tunfd, TUNSETIFF, (void*)&ifr) < 0)
fail("tun: ioctl(TUNSETIFF) failed");
}
if (ioctl(tunfd, TUNGETIFF, (void*)&ifr) < 0)
fail("tun: ioctl(TUNGETIFF) failed");
tun_frags_enabled = (ifr.ifr_flags & IFF_NAPI_FRAGS) != 0;
char local_mac[ADDR_MAX_LEN];
snprintf_check(local_mac, sizeof(local_mac), LOCAL_MAC, id);
char remote_mac[ADDR_MAX_LEN];
snprintf_check(remote_mac, sizeof(remote_mac), REMOTE_MAC, id);
char local_ipv4[ADDR_MAX_LEN];
snprintf_check(local_ipv4, sizeof(local_ipv4), LOCAL_IPV4, id);
char remote_ipv4[ADDR_MAX_LEN];
snprintf_check(remote_ipv4, sizeof(remote_ipv4), REMOTE_IPV4, id);
char local_ipv6[ADDR_MAX_LEN];
snprintf_check(local_ipv6, sizeof(local_ipv6), LOCAL_IPV6, id);
char remote_ipv6[ADDR_MAX_LEN];
snprintf_check(remote_ipv6, sizeof(remote_ipv6), REMOTE_IPV6, id);
execute_command("sysctl -w net.ipv6.conf.%s.accept_dad=0", iface);
execute_command("sysctl -w net.ipv6.conf.%s.router_solicitations=0", iface);
execute_command("ip link set dev %s address %s", iface, local_mac);
execute_command("ip addr add %s/24 dev %s", local_ipv4, iface);
execute_command("ip -6 addr add %s/120 dev %s", local_ipv6, iface);
execute_command("ip neigh add %s lladdr %s dev %s nud permanent", remote_ipv4,
remote_mac, iface);
execute_command("ip -6 neigh add %s lladdr %s dev %s nud permanent",
remote_ipv6, remote_mac, iface);
execute_command("ip link set dev %s up", iface);
}
static void setup_tun(uint64_t pid, bool enable_tun)
{
if (enable_tun)
initialize_tun(pid);
}
static void loop();
static void sandbox_common()
{
prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
setpgrp();
setsid();
struct rlimit rlim;
rlim.rlim_cur = rlim.rlim_max = 128 << 20;
setrlimit(RLIMIT_AS, &rlim);
rlim.rlim_cur = rlim.rlim_max = 8 << 20;
setrlimit(RLIMIT_MEMLOCK, &rlim);
rlim.rlim_cur = rlim.rlim_max = 1 << 20;
setrlimit(RLIMIT_FSIZE, &rlim);
rlim.rlim_cur = rlim.rlim_max = 1 << 20;
setrlimit(RLIMIT_STACK, &rlim);
rlim.rlim_cur = rlim.rlim_max = 0;
setrlimit(RLIMIT_CORE, &rlim);
#define CLONE_NEWCGROUP 0x02000000
unshare(CLONE_NEWNS);
unshare(CLONE_NEWIPC);
unshare(CLONE_NEWCGROUP);
unshare(CLONE_NEWNET);
unshare(CLONE_NEWUTS);
unshare(CLONE_SYSVSEM);
}
static bool write_file(const char* file, const char* what, ...)
{
char buf[1024];
va_list args;
va_start(args, what);
vsnprintf(buf, sizeof(buf), what, args);
va_end(args);
buf[sizeof(buf) - 1] = 0;
int len = strlen(buf);
int fd = open(file, O_WRONLY | O_CLOEXEC);
if (fd == -1)
return false;
if (write(fd, buf, len) != len) {
close(fd);
return false;
}
close(fd);
return true;
}
static int real_uid;
static int real_gid;
__attribute__((aligned(64 << 10))) static char sandbox_stack[1 << 20];
static int namespace_sandbox_proc(void* arg)
{
sandbox_common();
write_file("/proc/self/setgroups", "deny");
if (!write_file("/proc/self/uid_map", "0 %d 1\n", real_uid))
fail("write of /proc/self/uid_map failed");
if (!write_file("/proc/self/gid_map", "0 %d 1\n", real_gid))
fail("write of /proc/self/gid_map failed");
if (mkdir("./syz-tmp", 0777))
fail("mkdir(syz-tmp) failed");
if (mount("", "./syz-tmp", "tmpfs", 0, NULL))
fail("mount(tmpfs) failed");
if (mkdir("./syz-tmp/newroot", 0777))
fail("mkdir failed");
if (mkdir("./syz-tmp/newroot/dev", 0700))
fail("mkdir failed");
if (mount("/dev", "./syz-tmp/newroot/dev", NULL,
MS_BIND | MS_REC | MS_PRIVATE, NULL))
fail("mount(dev) failed");
if (mkdir("./syz-tmp/newroot/proc", 0700))
fail("mkdir failed");
if (mount(NULL, "./syz-tmp/newroot/proc", "proc", 0, NULL))
fail("mount(proc) failed");
if (mkdir("./syz-tmp/pivot", 0777))
fail("mkdir failed");
if (syscall(SYS_pivot_root, "./syz-tmp", "./syz-tmp/pivot")) {
if (chdir("./syz-tmp"))
fail("chdir failed");
} else {
if (chdir("/"))
fail("chdir failed");
if (umount2("./pivot", MNT_DETACH))
fail("umount failed");
}
if (chroot("./newroot"))
fail("chroot failed");
if (chdir("/"))
fail("chdir failed");
struct __user_cap_header_struct cap_hdr = {};
struct __user_cap_data_struct cap_data[2] = {};
cap_hdr.version = _LINUX_CAPABILITY_VERSION_3;
cap_hdr.pid = getpid();
if (syscall(SYS_capget, &cap_hdr, &cap_data))
fail("capget failed");
cap_data[0].effective &= ~(1 << CAP_SYS_PTRACE);
cap_data[0].permitted &= ~(1 << CAP_SYS_PTRACE);
cap_data[0].inheritable &= ~(1 << CAP_SYS_PTRACE);
if (syscall(SYS_capset, &cap_hdr, &cap_data))
fail("capset failed");
loop();
doexit(1);
}
static int do_sandbox_namespace(int executor_pid, bool enable_tun)
{
int pid;
setup_tun(executor_pid, enable_tun);
real_uid = getuid();
real_gid = getgid();
mprotect(sandbox_stack, 4096, PROT_NONE);
pid =
clone(namespace_sandbox_proc, &sandbox_stack[sizeof(sandbox_stack) - 64],
CLONE_NEWUSER | CLONE_NEWPID, NULL);
if (pid < 0)
fail("sandbox clone failed");
return pid;
}
static void test();
void loop()
{
while (1) {
test();
}
}
struct thread_t {
int created, running, call;
pthread_t th;
};
static struct thread_t threads[16];
static void execute_call(int call);
static int running;
static int collide;
static void* thr(void* arg)
{
struct thread_t* th = (struct thread_t*)arg;
for (;;) {
while (!__atomic_load_n(&th->running, __ATOMIC_ACQUIRE))
syscall(SYS_futex, &th->running, FUTEX_WAIT, 0, 0);
execute_call(th->call);
__atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
__atomic_store_n(&th->running, 0, __ATOMIC_RELEASE);
syscall(SYS_futex, &th->running, FUTEX_WAKE);
}
return 0;
}
static void execute(int num_calls)
{
int call, thread;
running = 0;
for (call = 0; call < num_calls; call++) {
for (thread = 0; thread < sizeof(threads) / sizeof(threads[0]); thread++) {
struct thread_t* th = &threads[thread];
if (!th->created) {
th->created = 1;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, 128 << 10);
pthread_create(&th->th, &attr, thr, th);
}
if (!__atomic_load_n(&th->running, __ATOMIC_ACQUIRE)) {
th->call = call;
__atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
__atomic_store_n(&th->running, 1, __ATOMIC_RELEASE);
syscall(SYS_futex, &th->running, FUTEX_WAKE);
if (collide && call % 2)
break;
struct timespec ts;
ts.tv_sec = 0;
ts.tv_nsec = 20 * 1000 * 1000;
syscall(SYS_futex, &th->running, FUTEX_WAIT, 1, &ts);
if (running)
usleep((call == num_calls - 1) ? 10000 : 1000);
break;
}
}
}
}
long r[1];
uint64_t procid;
void execute_call(int call)
{
switch (call) {
case 0:
syscall(__NR_mmap, 0x20000000, 0xfff000, 3, 0x32, -1, 0);
break;
case 1:
NONFAILING(memcpy((void*)0x206f48e5, "/dev/audio", 11));
r[0] = syscall(__NR_openat, 0xffffffffffffff9c, 0x206f48e5, 1, 0);
break;
case 2:
NONFAILING(*(uint64_t*)0x20d30fb0 = 0x20d12f42);
NONFAILING(*(uint64_t*)0x20d30fb8 = 0xbe);
NONFAILING(*(uint64_t*)0x20d30fc0 = 0x20d1afa7);
NONFAILING(*(uint64_t*)0x20d30fc8 = 0x59);
NONFAILING(*(uint64_t*)0x20d30fd0 = 0x20e4f000);
NONFAILING(*(uint64_t*)0x20d30fd8 = 0xd6);
NONFAILING(*(uint64_t*)0x20d30fe0 = 0x20116000);
NONFAILING(*(uint64_t*)0x20d30fe8 = 0x1000);
NONFAILING(*(uint64_t*)0x20d30ff0 = 0x20660000);
NONFAILING(*(uint64_t*)0x20d30ff8 = 0x99);
NONFAILING(memcpy(
(void*)0x20d12f42,
"\xdc\x5e\xd8\x16\xc0\x30\x99\x6d\x53\x33\x22\x01\x9c\x07\xbe\x1f\x77"
"\x34\x5a\x3b\x8d\x72\x5b\x8a\x1b\x3e\x62\x5c\xd5\x59\x58\xfa\x2f\xcd"
"\x87\xdc\xe6\x8b\x5b\x0d\x4f\xc1\x0b\xbe\x2c\xa3\x65\x55\xb8\x34\xa5"
"\x79\x8c\x19\x5b\xf8\xfd\x78\x2d\x6f\xad\x37\x5b\xd0\x07\x98\x3e\x1d"
"\x71\xba\x11\x56\x67\x27\x31\x9c\xa6\x91\x43\x1c\x7a\x26\x26\xe6\x1c"
"\x58\x5b\x55\x4e\xd1\x2f\xec\xa6\xb2\xfa\x88\xd8\x50\x82\xd1\xe0\x06"
"\x1b\xbe\x4c\x5f\xcc\xfb\x81\x58\x44\xbe\x94\x36\xd9\x9a\x1d\xd0\x6c"
"\x96\xaa\xcb\x09\x0e\xfc\xfd\xfe\x7f\x44\x1e\x7d\xcf\x62\x5b\x79\x7e"
"\x1d\x5e\x50\x4c\x2a\xdd\xcf\x2c\xf2\xa2\x3e\xb2\xdb\xa9\xbc\x66\x76"
"\xe3\xbd\xcf\xd6\x96\xcc\x31\xa9\x5c\x19\x20\x24\xa1\x8c\x24\x87\x1c"
"\xf8\xff\x3a\xf4\x37\x08\x79\xcd\xbd\x43\x0d\x44\x95\xb6\xf7\xd4\x75"
"\xdd\xf2\x5d",
190));
NONFAILING(
memcpy((void*)0x20d1afa7,
"\x6a\x38\xe5\x37\x23\xee\xf9\x43\x1b\x20\x2d\x45\x65\x0b\xc7"
"\xa5\xf3\x43\xc7\x48\xbf\x06\xe7\x41\x90\x6a\xac\x6e\x88\x69"
"\x7c\x4e\xc7\x8a\x4c\xba\x02\x85\xc7\x64\xb1\x6d\xf5\xd2\x17"
"\xc7\xe9\x73\xbd\x47\x6d\x83\xb6\x5d\x8a\x13\x25\x49\x00\xc9"
"\xe9\x95\xde\x01\xb4\xb5\xe5\x8f\x63\x4b\x80\x9f\xc8\x0c\xa2"
"\x10\x37\x19\x6e\xb0\xe8\x5b\x30\xef\xfc\x94\xca\xc7\xa0",
89));
NONFAILING(memcpy(
(void*)0x20e4f000,
"\x0a\x8b\x6a\x3b\x88\x50\x99\x46\x94\x3a\x74\xc6\x53\x82\x05\x34\x7d"
"\x1c\x18\x8e\xf4\x4b\x98\x37\xaf\x69\xcd\x4f\xa9\x7a\x8a\x93\xdf\x3d"
"\x6d\x15\xbd\xad\x87\xcd\xff\xb7\x14\x5e\xce\xee\xf5\xd7\xb5\x60\x09"
"\x88\xb4\xed\xe9\xce\x14\x15\x79\x4f\x3a\x79\x15\x22\xd5\xb0\x1e\xc0"
"\xe8\x94\x5a\x5d\xa1\xde\x2e\x3c\xce\xc9\x58\xd0\xdd\x63\x17\x84\x37"
"\x45\xc8\x96\xe9\xc6\x00\xa3\x8e\x27\xb2\x92\x8a\x7b\x35\x9b\x5a\x24"
"\xaa\x3e\x4b\x18\xe2\xdd\x6f\xc9\x41\xcd\x51\xd8\xce\x9f\x8e\x28\xa9"
"\xce\x63\xab\x0f\xd8\xdc\x6d\x93\xc5\x0a\x40\x8a\xd1\x20\xa6\xbc\xaf"
"\x8d\xdd\xaf\xa6\x5c\x2f\x82\x1e\x6d\x94\xb3\x28\xab\xf9\x0d\x91\x63"
"\x70\x11\xd1\x03\x8c\xb9\x9b\x16\x67\x33\x4d\x77\x98\x03\x12\x66\x1b"
"\x62\x57\xc1\xc7\x22\x0c\x9c\x46\xb1\x87\xbd\xbc\x5b\xa2\x4a\x95\x6f"
"\xed\xdf\x54\xed\xe7\xec\x39\x75\xb7\x3d\xad\xde\xe0\x72\x33\xcf\xda"
"\xd2\xf9\x04\xcc\x5f\x32\x10\x41\xe4\x07",
214));
NONFAILING(memcpy(
(void*)0x20116000,
"\x31\xf0\x1e\xef\x86\x0f\x54\x6e\x6d\x31\x27\x00\x4c\xba\x09\x3b\xa8"
"\x48\xf5\xb8\xae\x07\x08\x34\xdd\x4a\x11\xf1\x2f\xbc\xc4\x03\xd8\xe4"
"\xe5\x6f\x95\xd2\x06\x3a\x87\x42\xa9\x1c\x21\x45\x30\x9e\x04\x27\x72"
"\xdb\xda\xa5\x3c\x6d\x00\x03\xa8\x8a\xd2\xc9\x7d\x55\x69\xac\xc5\x16"
"\xb4\xb6\xa2\x64\xbc\x94\xed\xb7\x3f\xeb\x6d\x2f\xe4\xce\x47\x39\x71"
"\xd2\xbe\x5e\x50\x38\xbd\x4e\xad\x88\xdd\x60\xd3\x3b\x2c\xc7\x0b\x98"
"\xe5\xf9\x77\xdc\xe8\x10\xeb\x6b\x1b\xd4\x98\xc7\x6f\xd3\x51\xb0\x48"
"\x0b\xa8\xdb\x26\xf7\xb6\x32\xfa\x37\x28\x6c\x9c\x50\x34\xb6\x69\xbe"
"\x24\xd4\xf8\x50\x86\xc2\x8d\x2c\x56\x5b\xc3\xcc\x2b\x1e\xa3\xd7\x2d"
"\x98\xd2\x52\x19\xec\x83\x73\xb3\xe5\x07\x08\x5e\x3e\x0c\xea\x24\x06"
"\xb6\x59\x45\x75\xf4\xef\x2c\x53\x03\x93\x79\xe1\x62\x9b\xdf\x1f\xf1"
"\xd6\xa9\x55\x3f\xd8\x38\x7f\xad\xb2\x54\xfe\x74\xaf\x72\x75\x0a\xc6"
"\x09\x12\xbc\xb5\xcf\x66\x3a\x65\x53\xb8\xe7\xd4\xca\xf7\x42\xa2\x12"
"\x0e\x64\x19\xe1\x9b\xe0\x45\xf2\x6e\xf7\xc0\x2f\xa4\x1b\x0c\xa7\xcd"
"\x28\x64\x9b\xe0\x81\x93\xa0\xc2\x95\xf5\xdc\x2e\x20\x6a\xad\xb7\x08"
"\x00\x00\x83\x2f\x13\x24\xf1\x01\xbe\x35\xc9\x00\x00\x06\x2b\x80\xf7"
"\x0c\xab\xbe\xdb\x33\x94\x53\xe9\x25\x64\x05\x9c\xdd\x3e\x17\xf7\x30"
"\x82\x29\x4d\x11\x19\x40\xed\x6c\x00\x39\x0b\x34\x4a\xdc\xf1\x49\x3d"
"\xf0\xad\x15\x89\x16\xce\x82\x46\x49\x90\x5e\xb1\xb0\xdd\x0d\x8c\x91"
"\xee\x2a\xa2\x30\x88\x28\x03\x88\x70\xef\x84\x37\x73\x28\x80\x73\xae"
"\x89\x71\xfd\x0f\xe7\x72\xf1\x77\xcb\x64\x35\x6e\xf8\xce\x64\x26\x3b"
"\x25\x88\xa4\xed\xb4\x84\x3e\xed\x75\x94\x80\x70\x0b\x54\x9b\x78\xf3"
"\xf3\x16\xe8\x74\x70\xb3\xd8\x8b\x9b\x06\x0c\x0d\x67\x45\xdd\xdc\x1a"
"\x83\x94\xf9\x75\x6c\x8b\xf0\xa6\xc0\x8a\xab\x71\xd0\xce\x51\xcf\xf7"
"\xb2\x70\x6c\x30\x00\xef\x90\xdd\xd5\xd0\xe6\x56\xac\x68\x8c\xb8\x95"
"\xdb\x20\x9f\x52\xd1\x01\xe1\x42\xa2\xdb\xdf\xbd\xbf\x48\x94\x9e\x12"
"\xf0\x84\x6d\x5b\xee\x43\x29\xa5\x68\x26\x69\x2a\xff\x22\x83\x74\x79"
"\x4f\x78\x88\x84\x7c\xa6\x01\xd8\x7e\x90\xb7\x16\xf9\xe7\xb7\x3d\xa0"
"\xaf\xcf\x12\x5f\x43\xf7\x18\xcc\xef\xce\xee\x83\x2e\xef\xa1\x81\xed"
"\x2a\xf1\x42\x89\xab\xdc\xad\x96\xca\x3c\x96\x4f\x57\x4e\xea\x6f\x53"
"\xdc\x00\x41\x09\x74\x46\x9d\xe0\x4c\x66\x15\x83\xeb\xd0\xf7\x8b\x66"
"\xaf\x5c\x30\x05\x4d\x81\xb9\xa5\x2a\x69\x2f\xd7\x92\x63\x76\x3d\x52"
"\xfa\x98\x64\x5a\xf2\x9a\xc8\xa0\x60\xbd\x67\x17\x03\xf9\xa1\x6e\xb8"
"\xf8\xa5\x35\xe9\x58\xca\xc7\xaa\x28\x5c\xdb\x56\xc9\xb9\xca\xd1\x9d"
"\x2b\xd8\x99\x4e\xfe\xcd\x0b\x30\x25\x29\x03\x92\x81\x8a\xaf\x07\x90"
"\x5e\x4e\x5c\xb3\x71\x6d\x2f\x0a\x7a\xfc\xae\x88\x69\x64\x46\x6f\xfa"
"\xbe\xde\xe0\x6a\x41\x0e\x73\x3d\x31\xd4\xa0\xde\xb6\xed\x86\x13\x2d"
"\x43\x5a\x65\xee\xff\xa5\xb3\xfa\xb1\x79\x6c\x64\x56\x7a\xe9\x6d\x7f"
"\x2d\x7b\x58\x92\x91\x91\xf9\x09\x2a\x9f\x2d\x7e\xe9\x42\xeb\x1a\x4a"
"\x1b\x86\x3d\x83\x47\x36\x08\x46\x10\x6d\x50\xc1\x26\x86\x70\xb5\x8b"
"\x8c\xa0\x28\xac\x1c\x6e\x1f\x74\xac\x1c\x09\x57\x29\x6a\xc7\xdd\xf1"
"\x52\x29\xcd\x28\x30\x31\xd4\x1c\x6e\x69\xe6\x77\xa3\xb8\xc0\x70\x87"
"\x23\xdb\xf0\x89\x2f\x87\x0b\x98\x78\xba\xd6\xb1\x36\xa8\xfd\xa9\x6b"
"\x2f\x81\x72\xbf\xac\xe8\x43\x52\x0d\x35\xf9\x75\x3b\xcd\xe0\x08\xc3"
"\x63\x3d\xfc\x68\xbb\x06\xc4\x44\xeb\x93\xa6\x1c\x1b\x01\x42\xbb\x6e"
"\x70\x9d\xa4\x27\x91\xb4\x3b\xeb\xa3\xb4\x60\x9c\x05\xb1\x93\x60\x63"
"\x42\x08\x53\x45\x9d\xed\x28\xff\x7b\x2c\x86\x07\x5a\x94\x25\x36\x63"
"\x9f\x2f\x0a\xe3\x59\x4c\xf5\x69\x17\xa0\x74\xf5\xe0\xa4\x20\x2b\x0d"
"\xb8\x35\xfe\xb7\x12\xda\x6f\x93\x98\xa3\x5f\x79\x26\x67\x13\x83\x0a"
"\x98\x3d\x97\xa4\xe1\x19\xfa\x6c\xc6\x35\x04\xa9\x7e\x2e\x55\xab\x52"
"\x30\xcb\x9a\x2f\x44\xdb\xfc\x2c\x9a\xd2\xe0\x0b\x92\x82\x0e\xde\x1b"
"\xb5\x4f\x50\x1a\xe8\x3b\x6e\x30\x10\xa6\x7c\xa6\x95\x14\x22\x22\xa2"
"\x8f\x12\xc7\x05\xce\x47\xab\x51\x7c\x49\xcb\xd0\x60\xe0\x3b\x98\x2c"
"\x6d\x31\xc7\x65\x28\x0a\xda\xfe\xd7\xa3\xc2\xaa\x55\x04\x90\x73\x83"
"\x4e\xb0\xc1\xa1\x23\xef\x43\xa9\xe6\x38\x2c\xbf\x6d\x13\xe4\x1b\xa3"
"\x73\x1e\x0f\xad\x72\xcb\x6d\x7c\x6f\x90\xe1\xff\x4b\x98\x84\x80\x9d"
"\xfe\x7d\x17\xf3\x11\x51\xdd\x17\x42\x11\x43\x44\x7d\xb1\x0f\xb5\x91"
"\x75\x91\x16\x43\xbc\xb0\xa2\xdf\x70\x0a\xe2\xda\x6a\xb9\xa1\x34\xe1"
"\x3a\xfb\x67\x8c\x8f\x3c\x94\x73\xdd\x56\x97\xf0\x34\xca\xa1\x72\x16"
"\xf6\x20\x28\x33\x4a\x58\x59\x13\x20\x5f\x04\xf1\x28\xab\x3a\x10\x09"
"\xb3\xf4\x1b\xd2\x38\xa1\x5d\x71\xad\x78\x4b\x3b\xf7\x3b\xa1\x94\x8c"
"\x6f\x52\xe0\x46\x03\x70\x72\xfa\x34\x37\x53\x73\x8d\x8a\x1e\xef\x4e"
"\xa7\x6b\xae\xbc\x6b\x06\x18\x28\x21\xff\xa0\xff\x56\xd2\x1c\xa9\xb3"
"\x0a\xa0\x07\x88\x73\x11\x62\xef\x50\xcf\xdd\x15\xa5\xb0\xb7\x7f\x6f"
"\x04\xd1\x01\xed\x86\x01\x5d\x9d\x82\x39\x24\x4d\xa3\x18\xa9\x9d\x2e"
"\xe7\x45\xd4\x61\xe1\x77\x68\x52\xba\xb1\xa5\x57\x85\x7f\x70\x5e\x1f"
"\x99\xcd\xab\xe7\x95\x5a\x5e\xe7\xfc\x92\x5d\x47\xbb\xef\xb2\x14\x2c"
"\x9c\x6e\xf5\x7b\x84\x18\x12\x01\x93\x87\xe3\xcf\xa1\x2d\x79\x7c\x15"
"\x3d\x58\xb3\x28\xc3\x36\x5f\xae\x4a\x1d\xb8\x84\xc8\x06\x16\x25\xf0"
"\xf7\x35\xdc\xf0\xc2\x03\x60\xa4\xb8\xa2\x74\x5f\xd5\x2d\x9d\xde\x72"
"\x51\x5a\xe0\xe6\xca\x26\x82\xc4\x34\x96\x3f\xbd\x1d\xbc\x6f\x97\x8d"
"\x10\xa2\x28\x89\xa9\x21\x54\xd7\xe0\xb5\x00\xdb\xbd\x29\x78\xef\xc2"
"\xac\x71\xbb\x49\xc8\xb1\x2f\x93\x05\xc9\x24\x70\x88\xd8\x16\xfe\xb4"
"\x37\x29\x8b\xc8\xbc\x29\x15\xf9\x5a\x5a\x77\x62\x08\xe5\x11\x33\xc6"
"\x72\x33\x04\x91\x2c\xbd\xbb\x7e\xb5\xc9\x71\xe1\x0c\xbb\x08\x25\xba"
"\x4d\xff\x67\x38\xa0\x9a\x1a\x7f\x99\x91\x15\x90\x7d\xc9\xd3\xe6\x2d"
"\x77\xd2\x68\xc7\xef\x42\xf9\x86\xdc\x74\x55\x3c\x8e\x20\x09\xc9\xc4"
"\xbe\x43\x6f\x4e\xb0\xe9\xe8\x15\xb3\xf4\xa8\xdb\x96\x68\x7b\xa7\x1e"
"\xd5\xb3\x04\x26\x76\x41\xb7\x4e\xd0\x1f\xa9\x0b\x2f\xd8\x45\xdb\x56"
"\x9b\x4d\xf2\x15\xbe\x6d\x87\x9d\xbc\x30\xd7\xa1\x79\xe3\xac\x20\x3b"
"\x76\xc9\x15\xed\x80\x2d\x1d\x78\x9f\xc4\xf4\x92\xbe\x41\xbd\xd1\x2e"
"\xe3\x22\x31\x77\x16\x42\x14\x6e\x03\x4e\x11\x08\x9a\x8e\xd3\xb5\xfc"
"\x0d\xc2\xcc\x27\x13\x1b\x61\xb8\x7c\x22\xc9\xc1\xe6\xeb\xfa\x96\x6e"
"\x78\x92\xd7\x0d\x1b\xf9\x0d\xf3\xa5\xb4\xb2\xf0\x88\xd6\x2b\x31\x8f"
"\xef\xad\xeb\x4b\xcc\x23\xb0\x85\x16\x5e\xa0\xc2\x1d\x06\x9d\xba\x07"
"\x09\xf1\xa1\xa2\x26\xc7\xad\xdf\xd3\x0d\x4d\xc7\x90\xa0\xc8\xcc\x23"
"\x4d\x4d\x86\x7b\xb9\xab\x32\x14\x46\x42\x75\x5a\x72\x6d\x0d\x8a\x80"
"\xc8\x7f\xd3\x39\x2f\x26\xc8\xe9\xec\x02\xd8\xa3\x6b\xd0\xf1\x7e\xbd"
"\x09\x57\xc2\x38\x93\x94\x81\x90\x74\x41\x62\x50\xde\xb9\xa0\x7c\x26"
"\xbf\x11\x27\x63\x6c\x7f\xd3\x6a\xfd\xea\xce\xfb\xb0\xb8\xa7\xb3\x56"
"\xb5\xb6\xdd\xea\xc9\x58\x7c\x29\x91\x9a\xe4\x14\x54\x2a\xca\xb6\x98"
"\x86\xbb\x7b\xd6\xc8\x81\x99\x65\x17\x1e\x12\xb2\x8f\xfb\xe0\xc7\xf7"
"\x7f\x54\xea\xab\xd9\x32\x87\x76\x37\xeb\x2a\xe7\xb2\x1f\x36\x4c\x86"
"\x74\x61\x22\xe0\x59\x93\xc4\x52\xcf\x54\x29\x89\x15\x91\xcf\x07\x37"
"\x5b\x6a\x26\xe2\x7d\x0d\x32\xec\x19\x72\x91\xc0\x02\x50\x00\x78\x26"
"\xae\xf4\x60\x13\x74\xc2\x5f\xb0\x49\xf7\x41\xe0\x55\x6d\xfe\x7e\x59"
"\xdc\xd4\x3a\xc2\x66\xcc\x69\x14\xb4\x40\x58\x81\x02\x11\x21\x04\xd4"
"\x9e\x55\x1d\x65\xaf\x6a\xb5\xa1\xf8\x22\x3d\x60\xb0\x06\x3c\x90\x21"
"\x02\x25\xea\xee\x27\xb3\x1b\xb8\x8b\x98\xcb\x7c\xcb\x87\xf3\x83\x09"
"\x7f\xdb\x81\x28\xdc\xf9\x0e\xb2\xa3\x5d\x34\x22\xf5\x59\xd8\x19\xb8"
"\x91\x4c\x4b\x6d\x84\xf0\x71\x53\x9e\xbf\xfb\xcf\xa9\x63\xda\xff\x9b"
"\x7e\x72\x44\x5c\x54\xcb\x1e\x33\x5e\x43\x6c\x6c\x61\x5d\x4c\xaf\x62"
"\x7d\xac\x35\x83\x0d\x17\xf3\xed\x04\xf9\x57\xa1\xf7\xe1\x63\x88\x0f"
"\x98\xdb\x80\x66\xc0\x13\xf6\x69\x17\x65\x7f\xed\xe0\xc3\x83\x19\x42"
"\xf4\x68\x06\x0d\x55\x4b\x18\x4a\x96\x8a\x66\x52\x47\x13\x95\x90\x3e"
"\x2a\x20\xb5\xdf\x05\xe1\xde\xa8\x98\x9a\xc9\x40\x4d\x0a\x99\x8e\x7e"
"\x7c\x38\x7b\x11\x80\x09\x16\x9a\xe5\x01\x32\x71\x25\xf7\x53\x54\x5f"
"\xba\xda\x92\x5c\x8c\xc8\x5d\x57\x8f\x90\x0d\xd4\x5f\x01\xb7\x2a\x8f"
"\xa9\xaf\xe8\xef\x75\xfd\xa2\x0f\x4f\x4e\xe9\xdf\x1e\xdb\xab\xff\x09"
"\xaf\x89\x5a\x7c\x3b\xd1\xf5\xcc\x38\xe1\x87\xef\xfc\x49\x95\x61\x34"
"\xf4\x16\xe9\xdc\xab\xef\xef\x3e\xa8\x21\x98\x4c\x0e\x01\xb7\x39\x19"
"\xc0\xc9\x74\xfa\xa5\x89\x53\xdd\x79\x1c\xdd\x6f\x58\x28\xd6\xc5\x6d"
"\x9b\xd5\x5a\x16\x37\xbc\x09\xf7\x34\xbd\x0a\x1d\x3f\x45\x80\x70\xb5"
"\xbe\x87\x6a\xd1\x5a\x57\x45\x4b\x0a\x74\xca\x5c\x36\x63\x0a\x63\x07"
"\x62\xba\x74\xba\x0d\xd0\xbf\x4b\x90\xd0\x74\x21\x17\x19\x7a\x08\x41"
"\x77\x06\x78\x3d\x59\xb4\x9b\x88\x95\x50\x7d\x6f\x99\xbf\x6f\xc6\x9a"
"\xe5\xae\xc5\xea\x31\x79\x83\x2f\x95\x5b\x91\x29\xb2\xcc\x94\x51\x15"
"\xde\x93\xe0\x48\xab\x65\xd4\xb9\xc1\x32\xf9\x68\x7a\x23\x2a\x74\xc2"
"\x7e\xde\x64\xb1\xa5\xd7\xd8\xd9\xd8\xfe\x8f\xc5\x1a\x89\xb9\x70\xa4"
"\x08\xa6\xce\x26\x1b\x73\x03\x7e\x3f\x43\x97\x0f\xdc\x8d\xae\xcf\xe6"
"\x65\xa4\xee\x1c\x6c\xf5\x0e\x35\x51\x34\x44\x6d\x5c\x39\xb4\x38\xb6"
"\x06\xd7\xff\x89\xed\x53\xa8\x6f\x49\x61\x67\xec\x8e\x9a\x90\x15\x47"
"\x29\xae\x4c\xc2\x54\xf6\x63\x88\x07\xf2\x8b\xb3\x3a\xa5\xca\x8c\x84"
"\x86\x82\xc4\x7e\x5f\x65\x6b\xc8\x27\x80\x0f\xcb\xdd\xb6\xc3\xef\xbd"
"\x23\x2a\x3f\x5c\x30\xd7\x4e\x80\xc9\xef\xca\x0f\x9e\x30\x03\x0e\x6b"
"\x88\x83\xf4\x57\x67\x09\xcc\xa5\x85\xe0\x94\xdd\xa5\xb2\x27\x80\x2a"
"\x8c\x71\x3f\x7a\x76\x8f\x03\x44\x69\x72\xd7\x30\xd2\xc9\x7d\x8e\x02"
"\x9b\x5a\x2f\x8c\x18\xb7\x3c\xe2\xd9\x59\xe3\xd5\xee\xac\x12\x81\x9f"
"\xa0\x22\x4c\x92\x01\x62\xa3\xbc\x16\x6b\x0a\x90\x92\xa0\x68\x60\xca"
"\x48\x82\xd9\x3a\x25\x83\xe0\x5b\xdd\xda\x7b\x01\xb7\xa1\x8a\xec\xe1"
"\x15\x95\xa6\x8d\x2d\x9f\x91\xc1\x9b\x90\x49\x9a\xd0\x0c\x7a\x8e\x7c"
"\x04\xd7\xb6\xc1\x34\x9b\x94\xf1\xf5\x94\xcf\xd7\x4b\x6d\xf9\x32\x2c"
"\x67\x4f\xc2\x7a\x2b\x8a\xfa\x85\x41\xb7\x5f\x65\xc8\x07\xea\xfa\x00"
"\x7f\x93\x35\xd9\x6b\xe8\xc6\x84\xbf\xfe\xc2\x1a\x6a\x9f\x0d\x18\x9b"
"\x76\x99\x96\xef\x4a\x70\x53\xa4\x60\xcc\x81\x99\x44\xf5\x0a\xe2\x4c"
"\x9e\x17\x58\x71\x84\x4f\x96\xf9\xd7\x18\x5d\x4f\xa0\x29\xd8\x1b\x54"
"\xd6\xd6\xf8\x8c\xdc\x67\xc4\xb7\x98\x2b\x33\xe0\xec\xcf\x7e\x11\x8d"
"\x82\x25\x0a\x5e\xcc\x59\xc0\x0a\xcd\x95\x10\xca\x69\x3a\xd0\x14\x23"
"\x5f\x1d\x9c\x50\xbb\xab\x97\x5b\x6a\x6a\x7b\x9b\x4b\x15\x25\x31\x4d"
"\x97\x7c\xeb\xdb\xe4\xde\x52\x4c\x8b\xab\x9a\x51\xbf\x45\xbd\xd1\x45"
"\x09\x3b\x75\xd6\xe6\x97\x2a\x96\x93\x5f\x80\x09\x39\xbf\xe6\xe2\x14"
"\x4c\x67\x2b\x8d\xf2\x30\x4a\x19\xaf\x1f\x6e\x13\x5a\xdd\x2e\x38\x01"
"\x33\xa2\x0b\x25\x7b\xa9\x01\x29\x3c\xbc\xc7\x37\xea\xad\x5c\xd9\x1b"
"\xca\xf9\xb1\xbe\x1d\x25\x8b\x9b\xe3\x91\x84\x73\x7e\x9d\x95\x01\xf7"
"\x9c\x42\x32\x9b\xe0\xeb\x41\xc1\x97\xc1\x6a\x13\x40\x1c\xfa\xe5\x9b"
"\x9b\x3d\x4f\x12\x1b\xad\x72\xdd\xa4\x73\x3b\xaf\xf5\xcd\x8a\x66\x97"
"\xd0\x04\xd4\x4e\xaf\xc5\xeb\x9f\xc2\x53\xca\x63\x5b\x99\x81\x74\x33"
"\x06\x57\xb4\x30\xde\x12\x0a\xed\x19\xcb\x5a\x3d\x72\x20\xc8\x10\x6a"
"\xe8\x70\x46\xf6\x38\x35\xa8\x39\xcb\xc1\x28\x15\x24\x4f\x72\xbb\x54"
"\x58\xc4\xdf\x40\x4d\x35\x44\xfc\xe8\xc9\x62\xc9\x7d\x25\x13\xc8\x25"
"\x6c\x35\xe4\x27\xc0\xbe\x92\x6b\xbe\xdb\xd4\xc3\x11\x4b\x6e\x48\x3b"
"\x00\x39\x9f\xee\xc1\x02\xbe\x2f\xb8\x47\xde\xf7\x35\x4f\xef\xc3\x4d"
"\xcd\x5a\x06\x8d\xe8\x6d\x91\x77\x84\x2d\x7d\x48\xbf\x80\xaf\xc7\xbc"
"\xf2\x56\xde\xcc\x90\xc6\xc1\x3a\x2d\xf7\x09\xd3\x48\x47\x9e\x81\xb9"
"\xfa\x37\xf6\x75\x4f\x4b\x71\xb2\xe4\x24\xda\x20\xa3\xf1\xe3\x4c\x4c"
"\xc0\x9b\xfa\x2b\x1e\x7c\xee\x2f\xda\x3a\x7a\x80\xb6\x64\x34\xda\x3d"
"\x3b\x17\x71\xc7\x0a\x2b\x04\x87\xd0\x48\x98\x37\x0f\x11\xbe\x6f\xd0"
"\x67\xf5\xd6\x75\xee\x5a\x1c\xd8\xb4\x40\x34\xb6\x3c\x08\x2a\xf0\x8d"
"\xf7\x97\x2b\x12\x18\x07\x5c\x3b\xce\x06\x49\x4b\xbe\x6c\x71\xdb\x38"
"\x80\x36\xc2\xd8\x3e\x2c\xf1\x69\x52\xa7\x81\x41\x96\xa9\xdd\xf1\x32"
"\xcf\xea\xc3\xfc\x8b\xab\xfa\xe0\xf2\x9b\xd0\xd6\x9b\xc3\x10\x52\x4c"
"\xa5\x67\xe3\xd4\xf3\xb0\x8b\x17\x90\xcb\xf3\x66\x3c\x66\x0d\x04\xdd"
"\x27\xd4\x49\x3d\xc1\x87\xf5\xbe\x68\x3f\xe2\xcc\xff\xb5\xc9\x0d\x8d"
"\xeb\x42\x3a\x8d\x89\xc2\xe8\xf8\x9a\x2c\x4d\xf9\xdd\x95\x6d\x5b\x12"
"\xcc\x8b\x2c\x5c\x62\x42\xc5\x3a\xda\x34\x22\xf2\x5d\xa7\x29\xac\xe0"
"\xd7\x39\x20\xbc\x1a\xc9\x36\xfc\x9d\x72\xb6\x44\xde\x13\xcc\xa1\xf5"
"\xc5\xfe\xf6\x80\xb8\x09\x59\x63\x77\x38\x69\x51\xc7\xe8\x02\x2f\x7c"
"\xd7\x95\x2b\x95\x82\x90\xd9\x09\x9d\xb2\x79\x0a\x5e\x84\x11\x69\xee"
"\xd8\xc7\xe0\x47\x45\x48\xd3\x5a\x7e\x6e\x27\x7e\xc8\x52\xb6\x88\x32"
"\xa4\xb8\xda\x9d\xcb\x52\xe0\x2c\xd9\x3b\x10\xa5\x49\xe2\xde\x8e\xcb"
"\x2a\x4e\xdc\x57\x41\xd0\xe5\xb5\xa7\xee\x06\x27\xbe\xbb\x4a\x55\xd0"
"\x9c\x56\x94\xd2\x44\x7c\xcc\x8f\x59\xb3\x56\xce\x57\x8d\x5c\xc0\xb7"
"\xa5\xff\xcf\x0a\xf2\x3e\x0c\xf1\x56\x4e\x59\x25\xb9\x34\x1b\x1d\x3b"
"\x29\x27\xff\xa3\x0a\xfe\x24\x85\x12\x84\x55\x58\x15\x5a\xa4\x7b\xac"
"\x39\x8f\xf2\x96\x7d\x93\xa3\xa8\x50\xf3\x38\x96\xe2\x3a\x58\x4d\xbf"
"\x17\xd3\x83\x4e\x84\xd8\x7d\xb0\xaf\x0f\x79\xc6\x4b\xd2\x1f\xb3\xd8"
"\xc9\xf9\x81\x57\x5c\x0c\xb4\x34\x9f\xd8\x7e\xe4\x23\x02\xef\x9d\x44"
"\x7d\xef\x81\x93\xf4\x61\xc3\xe5\xf5\xbe\x04\xf5\x99\xdf\x71\x32\x80"
"\x86\x28\xfd\x85\xfa\x89\xbf\xe0\x6b\xc5\x18\xfd\x97\xf8\x66\x87\x2a"
"\xb3\x76\xde\x1e\x1e\x0e\x35\x66\x95\x2f\x2e\x44\x95\x20\xc8\x09\x3c"
"\xfd\x0e\x4d\xc4\x1e\xcd\x55\x05\x56\xd5\x19\xbe\x8d\x9b\xf6\x3c\xc7"
"\x8e\x4a\x16\xc4\x30\x55\x79\x2c\xca\x27\xd9\x4e\x15\xe3\xe7\x1a\x50"
"\xbb\xb0\x9d\xb8\xd3\x82\x6c\xb4\xfd\xf8\xad\x9c\x58\x1e\x9d\x32\x0d"
"\x8f\xe1\x82\x44\x60\xdd\xce\x4c\x2a\x65\xc2\xe3\xf2\xcf\xcb\x08\xa1"
"\x24\x80\x01\xab\x09\x6d\x5d\xf7\xaa\xf1\x29\x7c\xd6\x8d\x32\xf6\xd6"
"\x67\xe9\xb5\xc3\x67\x2e\x1c\x5e\x51\xed\x04\x36\x12\x7e\xc7\x05\x4e"
"\x8a\xbd\xb9\x9a\x33\x15\x94\xf7\x01\x15\x36\x42\x28\xf8\x5a\x39\x16"
"\xd2\x5a\x86\x4d\x19\x22\x73\x01\xde\x48\x77\xa3\x9c\xb1\x93\xea\xa8"
"\x24\x37\x77\x54\x37\x70\x86\xcb\x72\x06\x15\x16\x18\x0f\x12\xe8\xad"
"\x01\xea\x61\x2d\x9a\x14\xd2\x6d\xcd\xb1\x06\x0f\x52\x4d\x50\x19\xca"
"\xf8\xaa\x41\xd7\xba\x58\xb4\x47\x9a\x34\x40\x85\x57\x7e\x35\x84\x6c"
"\x3c\x05\x02\x5e\x88\xff\x58\x34\x15\xe3\xea\xb7\x01\x63\x43\xe6\xbe"
"\x03\xce\x81\x51\xa0\xf5\x43\xc4\x45\x5e\x47\x4e\x4b\x19\xd8\x64\x8c"
"\x9f\x99\xc7\x36\xd4\x28\x18\xff\xed\x1f\xae\x92\xed\x31\x0b\x84\x4b"
"\x88\xe3\x64\xcb\x8c\x43\xd4\x7d\x4c\xdd\xa0\x51\x7e\xcd\xba\x3f\xc5"
"\x57\xa4\xe0\x30\xc6\xa0\x50\xcb\x10\x73\x20\x60\x13\x80\xe3\xc5\x94"
"\xe7\xf8\xef\x3f\x60\xef\xa3\xf0\xc8\x67\x27\x66\x63\xf5\x7e\xcb\x2f"
"\x77\x19\x62\xa6\x90\x23\xbb\xb5\x93\xd7\x2c\xb6\x75\xe9\x2c\x25\xdc"
"\xd7\xb1\x6f\x06\xf8\xb5\x4e\x6b\x6a\xc6\x06\x3a\x87\x9b\x59\x2b\xbc"
"\xd0\x77\xda\x1c\x71\xae\xd6\xab\xe1\x98\xc0\xd5\xb0\x7e\xfc\x28\x6a"
"\xe4\xe9\xbb\xdc\xe0\x2c\x5f\xba\x9e\xd4\x9d\x0a\x54\x0f\xad\xef\x11"
"\x9f\x9e\xe6\x52\x36\x1e\x72\xfa\x71\x1d\x8e\xfa\xfb\x10\x75\x47\xbd"
"\x58\xe4\x20\x30\xd2\x9c\x67\x5b\xe0\x03\x45\xb3\x19\xbd\x23\xf0\xbc"
"\xa7\xac\x64\x23\x00\x93\x2c\xd2\x86\xf0\xb2\x65\x7c\x63\x92\xdb\x2f"
"\xf1\xf7\x91\xf5\xc2\x5f\xee\x4f\x1e\x28\x8e\x48\xbb\xd1\xea\xb0\xb3"
"\x00\xe2\x17\x3b\x69\xaa\xba\x1b\x4f\xac\x40\xd2\x39\xa0\x29\xa8\x5a"
"\x9b\xde\x60\xe9\xc5\xc1\x7f\x72\x02\xe4\x89\x10\x21\xad\x12\x08\xc8"
"\xe8\x08\x95\x5b\x12\xde\xcd\xb0\xc1\x71\xa4\xa1\x5c\x01\x32\x4d\xd9"
"\xfc\x0f\xc0\xd7\x9f\xfa\x1a\xfc\xf8\x61\x7b\x82\x77\x73\x19\x7c\x6e"
"\x8a\xc3\x1f\xda\xba\x29\x80\x2e\x5a\x92\x9a\x5b\xcb\x7c\x24\xa2\x01"
"\xdf\x2b\x8c\xb5\xbf\xc4\xda\xb7\xb8\xa5\x2a\x60\x68\x51\x51\x09\xc4"
"\x9e\xd5\x55\x8f\x40\x40\x66\x9b\x9e\x2f\x26\xf8\x29\x0d\x01\x3b\x21"
"\xa1\x9c\x2c\x8e\x17\xde\xd3\xc7\xf3\xb7\x05\x6c\xe3\x53\x76\x12\xbf"
"\x91\x3a\xfe\x57\x64\x95\x19\x55\x95\x05\x0a\xad\x3d\x9d\xe7\xb1\x1f"
"\x65\x96\x91\xdb\xcb\x11\xb3\xe5\x64\xd1\x4d\x30\xed\xfe\x79\x78\x4a"
"\xca\x05\xde\x70\x4b\x9f\xf3\x6c\xcb\xaa\xa1\xfc\xd2\xbe\xcb\xc1\x46"
"\x38\x39\xef\x11\xb1\xf9\xea\xed\x56\x94\x11\x65\x98\x9f\x26\x72\x1f"
"\x66\x18\xcb\xb0\x7a\x0f\x6c\x88\xdd\x58\x38\xdf\xb5\xac\xad\x2e\x1a"
"\x40\xc4\x99\x1d\x29\x80\x38\xbf\x7a\x7d\x35\x53\x43\xfb\x40\x68\x50"
"\x99\x75\xf8\x8f\x89\xc2\x76\x1f\xa2\x51\xf8\x53\x89\xfd\x65\x3d\xe5"
"\x9d\x4e\xef\x3c\xe6\xec\xdb\xc5\xdc\x51\x1f\x65\xaf\xa4\x86\xad\x18"
"\xe1\x1c\x40\x68\x28\x6d\xe0\xcc\x9a\x16\xb2\x8e\x5c\xf7\x59\xc4\xdb"
"\x70\x2f\xd5\x61\xfe\xfc\x04\xa8\x6a\x5d\x1e\xa0\xe3\x7b\x34\x60\x22"
"\xeb\x5c\x0a\x74\xa3\x89\x82\x6a\x61\x55\x5b\x4d\xc6\x94\x78\x86\x84"
"\x49\x83\xdb\x32\xdd\xb5\x10\x33\x0c\x0b\x4a\x29\x84\x62\xd4\x46\x17"
"\x83\x5d\x30\xec\x8c\xc1\x38\xd3\x7b\xab\xab\x65\x53\x76\xbe\xfb\x5d"
"\x59\x93\x72\x26\xe9\xff\x49\x31\x35\xed\x2a\x96\x9c\x6e\x53\xaf\x91"
"\xc3\xf7\x09\x6a\x72\x2b\xf7\x68\xfe\xe1\x16\xe5\xfc\xf8\x8e\x52\xdb"
"\x16\xe4\x60\x72\xed\x5e\x2c\x1f\xe0\xcb\x1c\x91\x0b\x7c\x1b\xac\xe6"
"\xe8\xaa\x3a\xec\x77\x13\x27\x06\x86\xa1\x8a\x55\x35\x20\x02\xb3\x3d"
"\x63\x3a\x14\xde\xb8\x6b\x62\x31\xb3\x1f\x11\x13\x88\x92\xde\xaa\x3e"
"\xea\x1a\xd1\xee\xe3\x6c\x00\x06\xec\xaf\x6f\x36\xe4\xca\xad\x0b\x21"
"\x35\xdc\x2a\xb8\x79\xd9\x5f\x4e\xe2\xd4\x60\x41\xdd\xb2\x01\xcc\x02"
"\x43\x22\xce\x5e\x87\xa6\xc5\xe1\x72\x09\x7e\x15\xb6\x67\x1b\xb4\x26"
"\xd0\x8e\x30\x03\xe3\x2f\xba\xc0\x5b\xd3\xa8\xf2\x23\xba\xd5\x5d\xd9"
"\xff\x6f\x21\xda\x27\x49\x97\x27\x9d\x9f\x7a\x63\x37\x73\xb8\x41\x1e"
"\x11\xfc\x09\x8d\x10\x84\xf7\x30\xd5\x89\x40\x30\x04\x4e\x8a\xd9\xe4"
"\x37\x54\x16\xb2\x86\xb7\x67\xdc\xdc\x0f\x5d\x70\xe7\x40\x17\x8a\x97"
"\x78\xd7\x8a\xb5\x64\x44\xb0\x1d\x65\x8e\x4d\xda\x48\x8f\xe0\x57\x60"
"\xb5\x18\x2f\x90\x64\x56\xee\xff\xce\xf3\x31\x8b\x3e\xbe\x25\x6e\x49"
"\xe4\x38\xd2\xf9\x5b\x6c\xfd\xcb\x04\xf6\xbc\xfd\x29\x67\x79\x0f",
4096));
NONFAILING(memcpy(
(void*)0x20660000,
"\xcc\x93\x72\x74\xa5\x53\x06\x00\x31\xd6\xa7\xc1\x1e\xd9\x05\x75\x0b"
"\x72\x0f\x6b\xdf\x48\xf6\xf2\x7f\xa4\x03\xaf\xc1\x70\x91\xa7\xcb\xdb"
"\x16\xcc\x54\x69\x31\x2f\xef\xe2\x0b\xb8\x65\xf2\xd5\x31\xe1\x59\xd4"
"\x68\xe1\xa3\x92\xf9\x47\x8a\x1c\xcf\x9c\xf5\x67\x0f\x69\xd8\x95\x7e"
"\x12\x6e\xf3\x83\xab\x43\x8b\x35\x61\xac\xb7\x72\x02\x3e\xf2\xcc\x83"
"\xe2\xcc\xcb\x82\x04\x28\xd5\xb1\x5d\xe7\x6d\xea\x7e\x50\xb6\x6f\x1d"
"\x0a\x65\x29\x14\xee\xea\x91\xd7\x80\xf7\x3c\x23\x00\x09\xa3\x1d\x70"
"\x7e\x45\x43\xa1\x59\xe7\x20\xd2\x18\xb1\x59\x31\x98\x5c\x78\x63\x64"
"\x92\x53\x03\x7f\x59\xbb\x9e\x7b\x4d\xf8\xf6\x7f\x38\x83\x73\x95\xd4",
153));
syscall(__NR_writev, r[0], 0x20d30fb0, 5);
break;
}
}
void test()
{
memset(r, -1, sizeof(r));
execute(3);
collide = 1;
execute(3);
}
int main()
{
char* cwd = get_current_dir_name();
for (procid = 0; procid < 8; procid++) {
if (fork() == 0) {
install_segv_handler();
for (;;) {
if (chdir(cwd))
fail("failed to chdir");
use_temporary_dir();
int pid = do_sandbox_namespace(procid, true);
int status = 0;
while (waitpid(pid, &status, __WALL) != pid) {
}
}
}
}
sleep(1000000);
return 0;
}