Hi Pascal, Please see inline > -----Original Message----- > From: Pascal Mazon [mailto:pascal.ma...@6wind.com] > Sent: Wednesday, January 10, 2018 11:35 AM > To: Ophir Munk <ophi...@mellanox.com>; dev@dpdk.org > Cc: Thomas Monjalon <tho...@monjalon.net>; Olga Shern > <ol...@mellanox.com> > Subject: Re: [PATCH v3 1/2] net/tap: add eBPF instructions to TAP device > > Hi Ophir, > > I have a few remarks. > > - Why do you define ARRAY_SIZE in tap_flow.h while it's used only in > tap_bpf_insns.c? >
ARRAY_SIZE is not defined only in tap_bpf_insns.c. Please note ARRAY_SIZE is used several times in tap_flow.c as well. > - I really dislike having the BPF bytecode hardcoded in tap_bpf_insns.c. > You don't provide the commands used to generate that bytecode. > And you don't provide the way to translate bytecode into these insns[] > arrays. > So we're just supposed to trust that these instructions are indeed > what they pretend to be. > The process is not repeatable nor verifiable. > Please note that file tap_bpf_program.c is the C source code for the bytecode. The plan for next release (18.05) is: 1. Ask the user to install clang version 3.7 in order to compile the C source into BPF assembly object file 2. Supply a tool that will generate the bytecode from the object file 3. Advanced option: use the generated bytecode to transparently compile TAP PMD If a user is reluctant to install clang 3.7 he has the option to compile TAP PMD without external tool dependency. For this release please confirm the bytecode alone without the tool (expected in next release) > > On 10/01/2018 08:06, Ophir Munk wrote: > > TAP PMD is required to support RSS queue mapping based on rte_flow API. > An > > example usage for this requirement is failsafe transparent switching from a > > PCI device to TAP device while keep redirecting packets to the same RSS > > queues on both devices. > > > > TAP RSS implementation is based on eBPF programs sent to Linux kernel > > through BPF system calls and using netlink messages to reference the > > programs as part of traffic control commands. > > > > An eBPF program acts as a traffic control classifier or action. Each > > program is written in C code under a different ELF section name. Clang 3.7 > > is used to compile the C code into eBPF-formatted object file. The ELF file > > is parsed and its sections (programs) can be downloaded to the kernel using > > BPF system call. The BPF system call parameters contain the array of eBPF > > instructions. This commit includes BPF classifier and action programs > > (tap_bpf_program.c) as reference and their corresponding arrays of eBPF > > instructions (tap_bpf_insns.c). The reference file does not take part in > > dpdk compilation. The details on how to generate new eBPF code will be > > presented in another commit. > > > > In a follow up commit TAP PMD will use the eBPF programs to implement > RSS > > flow rules. > > > > TAP eBPF requires Linux version 4.9 configured with BPF. TAP PMD will > > successfully compile on systems with old or non-BPF configured kernels but > > RSS rules creation on TAP devices will not be supported. > > > > Signed-off-by: Ophir Munk <ophi...@mellanox.com> > > --- > > drivers/net/tap/Makefile | 11 + > > drivers/net/tap/tap_bpf.h | 96 ++ > > drivers/net/tap/tap_bpf_insns.c | 1845 > +++++++++++++++++++++++++++++++++++++ > > drivers/net/tap/tap_bpf_program.c | 221 +++++ > > drivers/net/tap/tap_flow.h | 5 + > > 5 files changed, 2178 insertions(+) > > create mode 100644 drivers/net/tap/tap_bpf.h > > create mode 100644 drivers/net/tap/tap_bpf_insns.c > > create mode 100644 drivers/net/tap/tap_bpf_program.c > > > > diff --git a/drivers/net/tap/Makefile b/drivers/net/tap/Makefile > > index fd4195f..feaa5b7 100644 > > --- a/drivers/net/tap/Makefile > > +++ b/drivers/net/tap/Makefile > > @@ -12,6 +12,9 @@ EXPORT_MAP := rte_pmd_tap_version.map > > > > LIBABIVER := 1 > > > > +# TAP_MAX_QUEUES must be a power of 2 as it will be used for masking > */ > > +TAP_MAX_QUEUES = 16 > > + > > CFLAGS += -O3 > > CFLAGS += -I$(SRCDIR) > > CFLAGS += -I. > > @@ -20,6 +23,8 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool - > lrte_ring > > LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs -lrte_hash > > LDLIBS += -lrte_bus_vdev > > > > +CFLAGS += -DTAP_MAX_QUEUES=$(TAP_MAX_QUEUES) > > + > > # > > # all source are stored in SRCS-y > > # > > @@ -27,6 +32,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += > rte_eth_tap.c > > SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_flow.c > > SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_netlink.c > > SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_tcmsgs.c > > +SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_bpf_insns.c > > > > include $(RTE_SDK)/mk/rte.lib.mk > > > > @@ -53,6 +59,11 @@ tap_autoconf.h.new: $(RTE_SDK)/buildtools/auto- > config-h.sh > > linux/pkt_cls.h \ > > enum TCA_FLOWER_KEY_VLAN_PRIO \ > > $(AUTOCONF_OUTPUT) > > + $Q sh -- '$<' '$@' \ > > + HAVE_BPF_PROG_LOAD \ > > + linux/bpf.h \ > > + enum BPF_PROG_LOAD \ > > + $(AUTOCONF_OUTPUT) > > > > # Create tap_autoconf.h or update it in case it differs from the new one. > > > > diff --git a/drivers/net/tap/tap_bpf.h b/drivers/net/tap/tap_bpf.h > > new file mode 100644 > > index 0000000..82775b7 > > --- /dev/null > > +++ b/drivers/net/tap/tap_bpf.h > > @@ -0,0 +1,96 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright 2017 Mellanox Technologies, Ltd. > > + */ > > + > > +#ifndef __TAP_BPF_H__ > > +#define __TAP_BPF_H__ > > + > > +#include <tap_autoconf.h> > > + > > +#ifdef HAVE_BPF_PROG_LOAD > > +#include <linux/bpf.h> > > +#else > > +/* BPF_MAP_UPDATE_ELEM command flags */ > > +#define BPF_ANY 0 /* create a new element or update an > existing */ > > + > > +/* BPF architecture instruction struct */ > > +struct bpf_insn { > > + __u8 code; > > + __u8 dst_reg:4; > > + __u8 src_reg:4; > > + __s16 off; > > + __s32 imm; /* immediate value */ > > +}; > > + > > +/* BPF program types */ > > +enum bpf_prog_type { > > + BPF_PROG_TYPE_UNSPEC, > > + BPF_PROG_TYPE_SOCKET_FILTER, > > + BPF_PROG_TYPE_KPROBE, > > + BPF_PROG_TYPE_SCHED_CLS, > > + BPF_PROG_TYPE_SCHED_ACT, > > +}; > > + > > +/* BPF commands types */ > > +enum bpf_cmd { > > + BPF_MAP_CREATE, > > + BPF_MAP_LOOKUP_ELEM, > > + BPF_MAP_UPDATE_ELEM, > > + BPF_MAP_DELETE_ELEM, > > + BPF_MAP_GET_NEXT_KEY, > > + BPF_PROG_LOAD, > > +}; > > + > > +/* BPF maps types */ > > +enum bpf_map_type { > > + BPF_MAP_TYPE_UNSPEC, > > + BPF_MAP_TYPE_HASH, > > +}; > > + > > +/* union of anonymous structs used with TAP BPF commands */ > > +union bpf_attr { > > + /* BPF_MAP_CREATE command */ > > + struct { > > + __u32 map_type; > > + __u32 key_size; > > + __u32 value_size; > > + __u32 max_entries; > > + __u32 map_flags; > > + __u32 inner_map_fd; > > + }; > > + > > + /* BPF_MAP_UPDATE_ELEM, BPF_MAP_DELETE_ELEM commands > */ > > + struct { > > + __u32 map_fd; > > + __aligned_u64 key; > > + union { > > + __aligned_u64 value; > > + __aligned_u64 next_key; > > + }; > > + __u64 flags; > > + }; > > + > > + /* BPF_PROG_LOAD command */ > > + struct { > > + __u32 prog_type; > > + __u32 insn_cnt; > > + __aligned_u64 insns; > > + __aligned_u64 license; > > + __u32 log_level; > > + __u32 log_size; > > + __aligned_u64 log_buf; > > + __u32 kern_version; > > + __u32 prog_flags; > > + }; > > +} __attribute__((aligned(8))); > > +#endif > > + > > +enum { > > + BPF_MAP_ID_KEY, > > + BPF_MAP_ID_SIMPLE, > > +}; > > + > > +static int bpf_load(enum bpf_prog_type type, const struct bpf_insn *insns, > > + size_t insns_cnt, const char *license); > > + > > +#endif /* __TAP_BPF_H__ */ > > diff --git a/drivers/net/tap/tap_bpf_insns.c > b/drivers/net/tap/tap_bpf_insns.c > > new file mode 100644 > > index 0000000..25aa82c > > --- /dev/null > > +++ b/drivers/net/tap/tap_bpf_insns.c > > @@ -0,0 +1,1845 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright 2017 Mellanox Technologies, Ltd. > > + */ > > + > > +#include <errno.h> > > +#include <string.h> > > +#include <unistd.h> > > +#include <sys/queue.h> > > +#include <sys/mount.h> > > + > > +#include <rte_byteorder.h> > > +#include <rte_jhash.h> > > +#include <rte_malloc.h> > > +#include <rte_eth_tap.h> > > +#include <tap_flow.h> > > +#include <tap_autoconf.h> > > +#include <tap_tcmsgs.h> > > +#include <tap_bpf.h> > > + > > +#define ERROR 0 > > + > > +/* > > + * The queue number is offset by 1, to distinguish packets that have > > + * gone through this rule (skb->cb[1] != 0) from others. > > + */ > > +#define QUEUE_OFFSET 1 > > + > > +/* bpf_insn array matching cls_q section. See tap_bpf_program.c file */ > > +static struct bpf_insn cls_q_insns[] = { > > + {0x61, 1, 1, 52, 0x00000000}, > > + {0x18, 2, 0, 0, 0xdeadbeef}, > > + {0x00, 0, 0, 0, 0x00000000}, > > + {0x63, 10, 2, -4, 0x00000000}, > > + {0x61, 2, 10, -4, 0x00000000}, > > + {0x07, 2, 0, 0, 0x00000001}, > > + {0x67, 2, 0, 0, 0x00000020}, > > + {0x77, 2, 0, 0, 0x00000020}, > > + {0xb7, 0, 0, 0, 0xffffffff}, > > + {0x1d, 1, 2, 1, 0x00000000}, > > + {0xb7, 0, 0, 0, 0x00000000}, > > + {0x95, 0, 0, 0, 0x00000000}, > > +}; > > + > > +/** > > + * Load BPF program (section cls_q) into the kernel and return a bpf fd > > + * > > + * @param queue_idx > > + * Queue index matching packet cb > > + * > > + * @return > > + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. > > + */ > > +int tap_flow_bpf_cls_q(__u32 queue_idx) > > +{ > > + cls_q_insns[1].imm = queue_idx; > > + > > + return bpf_load(BPF_PROG_TYPE_SCHED_CLS, > > + (struct bpf_insn *)cls_q_insns, > > + ARRAY_SIZE(cls_q_insns), > > + "Dual BSD/GPL"); > > +} > > + > > +/* bpf_insn array matching l3_l4 section. see tap_bpf_program.c file */ > > +static struct bpf_insn l3_l4_hash_insns[] = { > > + {0xbf, 7, 1, 0, 0x00000000}, > > + {0x61, 8, 7, 16, 0x00000000}, > > + {0x61, 6, 7, 76, 0x00000000}, > > + {0x61, 9, 7, 80, 0x00000000}, > > + {0x18, 1, 0, 0, 0xdeadbeef}, > > + {0x00, 0, 0, 0, 0x00000000}, > > + {0x63, 10, 1, -4, 0x00000000}, > > + {0xbf, 2, 10, 0, 0x00000000}, > > + {0x07, 2, 0, 0, 0xfffffffc}, > > + {0x18, 1, 1, 0, 0x0000cafe}, > > + {0x00, 0, 0, 0, 0x00000000}, > > + {0x85, 0, 0, 0, 0x00000001}, > > + {0x55, 0, 0, 21, 0x00000000}, > > + {0xb7, 1, 0, 0, 0x00000a64}, > > + {0x6b, 10, 1, -16, 0x00000000}, > > + {0x18, 1, 0, 0, 0x69666e6f}, > > + {0x00, 0, 0, 0, 0x65727567}, > > + {0x7b, 10, 1, -24, 0x00000000}, > > + {0x18, 1, 0, 0, 0x6e207369}, > > + {0x00, 0, 0, 0, 0x6320746f}, > > + {0x7b, 10, 1, -32, 0x00000000}, > > + {0x18, 1, 0, 0, 0x20737372}, > > + {0x00, 0, 0, 0, 0x2079656b}, > > + {0x7b, 10, 1, -40, 0x00000000}, > > + {0x18, 1, 0, 0, 0x68736168}, > > + {0x00, 0, 0, 0, 0x203a2928}, > > + {0x7b, 10, 1, -48, 0x00000000}, > > + {0xb7, 7, 0, 0, 0x00000000}, > > + {0x73, 10, 7, -14, 0x00000000}, > > + {0xbf, 1, 10, 0, 0x00000000}, > > + {0x07, 1, 0, 0, 0xffffffd0}, > > + {0xb7, 2, 0, 0, 0x00000023}, > > + {0x85, 0, 0, 0, 0x00000006}, > > + {0x05, 0, 0, 1632, 0x00000000}, > > + {0xb7, 1, 0, 0, 0x0000000e}, > > + {0x61, 2, 7, 20, 0x00000000}, > > + {0x15, 2, 0, 10, 0x00000000}, > > + {0x61, 2, 7, 28, 0x00000000}, > > + {0x55, 2, 0, 8, 0x0000a888}, > > + {0xbf, 2, 7, 0, 0x00000000}, > > + {0xb7, 7, 0, 0, 0x00000000}, > > + {0xbf, 1, 6, 0, 0x00000000}, > > + {0x07, 1, 0, 0, 0x00000012}, > > + {0x2d, 1, 9, 1622, 0x00000000}, > > + {0xb7, 1, 0, 0, 0x00000012}, > > + {0x69, 8, 6, 16, 0x00000000}, > > + {0xbf, 7, 2, 0, 0x00000000}, > > + {0x7b, 10, 7, -56, 0x00000000}, > > + {0x57, 8, 0, 0, 0x0000ffff}, > > + {0x15, 8, 0, 409, 0x0000dd86}, > > + {0xb7, 7, 0, 0, 0x00000003}, > > + {0x55, 8, 0, 1614, 0x00000008}, > > + {0x0f, 6, 1, 0, 0x00000000}, > > + {0xb7, 7, 0, 0, 0x00000000}, > > + {0xbf, 1, 6, 0, 0x00000000}, > > + {0x07, 1, 0, 0, 0x00000018}, > > + {0x2d, 1, 9, 1609, 0x00000000}, > > + {0x71, 3, 6, 12, 0x00000000}, > > + {0xbf, 1, 3, 0, 0x00000000}, > > + {0x67, 1, 0, 0, 0x00000038}, > > + {0xc7, 1, 0, 0, 0x00000020}, > > + {0x77, 1, 0, 0, 0x0000001f}, > > + {0x57, 1, 0, 0, 0x2cc681d1}, > > + {0x67, 3, 0, 0, 0x00000018}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x40000000}, > > + {0xb7, 2, 0, 0, 0x00000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x598d03a2}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x20000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb31a0745}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x10000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x66340e8a}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x08000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xcc681d15}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x04000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x98d03a2b}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x02000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x31a07456}, > > + {0x57, 3, 0, 0, 0x01000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6340e8ad}, > > + {0x71, 3, 6, 13, 0x00000000}, > > + {0x67, 3, 0, 0, 0x00000010}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00800000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc681d15b}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00400000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8d03a2b7}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00200000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1a07456f}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00100000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x340e8ade}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00080000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x681d15bd}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00040000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd03a2b7b}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00020000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa07456f6}, > > + {0x57, 3, 0, 0, 0x00010000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x40e8aded}, > > + {0x71, 3, 6, 14, 0x00000000}, > > + {0x67, 3, 0, 0, 0x00000008}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00008000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x81d15bdb}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00004000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x03a2b7b7}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00002000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x07456f6f}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00001000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x0e8adedf}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000800}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1d15bdbf}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000400}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3a2b7b7e}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000200}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7456f6fd}, > > + {0x57, 3, 0, 0, 0x00000100}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe8adedfa}, > > + {0x71, 3, 6, 15, 0x00000000}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000080}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd15bdbf4}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000040}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa2b7b7e9}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000020}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x456f6fd3}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000010}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8adedfa7}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000008}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x15bdbf4f}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000004}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x2b7b7e9e}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000002}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x56f6fd3d}, > > + {0x57, 3, 0, 0, 0x00000001}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xadedfa7b}, > > + {0x71, 4, 6, 16, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000038}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0xb7, 3, 0, 0, 0xffffffff}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x5bdbf4f7}, > > + {0x67, 4, 0, 0, 0x00000018}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb7b7e9ef}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6f6fd3df}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdedfa7bf}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xbdbf4f7f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7b7e9eff}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf6fd3dff}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xedfa7bfe}, > > + {0x71, 4, 6, 17, 0x00000000}, > > + {0x67, 4, 0, 0, 0x00000010}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00800000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdbf4f7fc}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00400000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb7e9eff9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00200000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6fd3dff2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00100000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdfa7bfe5}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00080000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xbf4f7fca}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00040000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7e9eff94}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00020000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfd3dff28}, > > + {0x57, 4, 0, 0, 0x00010000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfa7bfe51}, > > + {0x71, 4, 6, 18, 0x00000000}, > > + {0x67, 4, 0, 0, 0x00000008}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00008000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf4f7fca2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00004000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe9eff945}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00002000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd3dff28a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00001000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa7bfe514}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000800}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x4f7fca28}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000400}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9eff9450}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000200}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3dff28a0}, > > + {0x57, 4, 0, 0, 0x00000100}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7bfe5141}, > > + {0x71, 4, 6, 19, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000080}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf7fca283}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000040}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xeff94506}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000020}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdff28a0c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000010}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xbfe51418}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000008}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7fca2831}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000004}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xff945063}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000002}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xff28a0c6}, > > + {0x57, 4, 0, 0, 0x00000001}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfe51418c}, > > + {0x71, 4, 6, 20, 0x00000000}, > > + {0x67, 4, 0, 0, 0x00000008}, > > + {0x71, 5, 6, 21, 0x00000000}, > > + {0x4f, 4, 5, 0, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000030}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfca28319}, > > + {0x67, 4, 0, 0, 0x00000010}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x40000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf9450633}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x20000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf28a0c67}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x10000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe51418ce}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x08000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xca28319d}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x04000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9450633b}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x02000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x28a0c676}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x01000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x51418ced}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00800000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa28319db}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00400000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x450633b6}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00200000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8a0c676c}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00100000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1418ced8}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00080000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x28319db1}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00040000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x50633b63}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00020000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa0c676c6}, > > + {0x57, 4, 0, 0, 0x00010000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x418ced8d}, > > + {0x71, 3, 6, 22, 0x00000000}, > > + {0x67, 3, 0, 0, 0x00000008}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00008000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8319db1a}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00004000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x0633b634}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00002000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x0c676c68}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00001000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x18ced8d1}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000800}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x319db1a3}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000400}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x633b6347}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000200}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc676c68f}, > > + {0x57, 3, 0, 0, 0x00000100}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8ced8d1f}, > > + {0x71, 3, 6, 23, 0x00000000}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000080}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x19db1a3e}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000040}, > > + {0x79, 5, 10, -56, 0x00000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x33b6347d}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000020}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x676c68fa}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000010}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xced8d1f4}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000008}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9db1a3e9}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000004}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3b6347d2}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000002}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x76c68fa5}, > > + {0x57, 3, 0, 0, 0x00000001}, > > + {0x1d, 3, 2, 1177, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xed8d1f4a}, > > + {0x05, 0, 0, 1175, 0x00000000}, > > + {0x0f, 6, 1, 0, 0x00000000}, > > + {0xb7, 7, 0, 0, 0x00000000}, > > + {0xbf, 1, 6, 0, 0x00000000}, > > + {0x07, 1, 0, 0, 0x0000002c}, > > + {0x2d, 1, 9, 1202, 0x00000000}, > > + {0x61, 4, 6, 8, 0x00000000}, > > + {0xbf, 1, 4, 0, 0x00000000}, > > + {0x67, 1, 0, 0, 0x00000038}, > > + {0xc7, 1, 0, 0, 0x00000020}, > > + {0x77, 1, 0, 0, 0x0000001f}, > > + {0x57, 1, 0, 0, 0x2cc681d1}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000040}, > > + {0xb7, 2, 0, 0, 0x00000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x598d03a2}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000020}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb31a0745}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000010}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x66340e8a}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000008}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xcc681d15}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000004}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x98d03a2b}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000002}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x31a07456}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000001}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6340e8ad}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00008000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc681d15b}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00004000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8d03a2b7}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00002000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1a07456f}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00001000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x340e8ade}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000800}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x681d15bd}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000400}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd03a2b7b}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000200}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa07456f6}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00000100}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x40e8aded}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00800000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x81d15bdb}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00400000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x03a2b7b7}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00200000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x07456f6f}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00100000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x0e8adedf}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00080000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1d15bdbf}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00040000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3a2b7b7e}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00020000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7456f6fd}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00010000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe8adedfa}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000020}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0xb7, 3, 0, 0, 0xffffffff}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd15bdbf4}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa2b7b7e9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x456f6fd3}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8adedfa7}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x15bdbf4f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x2b7b7e9e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x56f6fd3d}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xadedfa7b}, > > + {0x61, 4, 6, 12, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000080}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x5bdbf4f7}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000040}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb7b7e9ef}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000020}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6f6fd3df}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000010}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdedfa7bf}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000008}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xbdbf4f7f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000004}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7b7e9eff}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000002}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf6fd3dff}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000001}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xedfa7bfe}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00008000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdbf4f7fc}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00004000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb7e9eff9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00002000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6fd3dff2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00001000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdfa7bfe5}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000800}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xbf4f7fca}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000400}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7e9eff94}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000200}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfd3dff28}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000100}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfa7bfe51}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00800000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf4f7fca2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00400000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe9eff945}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00200000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd3dff28a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00100000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa7bfe514}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00080000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x4f7fca28}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00040000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9eff9450}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00020000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3dff28a0}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00010000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7bfe5141}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000020}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf7fca283}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xeff94506}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdff28a0c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xbfe51418}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7fca2831}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xff945063}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xff28a0c6}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfe51418c}, > > + {0x61, 4, 6, 16, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000080}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfca28319}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000040}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf9450633}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000020}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf28a0c67}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000010}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe51418ce}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000008}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xca28319d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000004}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9450633b}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000002}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x28a0c676}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000001}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x51418ced}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00008000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa28319db}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00004000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x450633b6}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00002000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8a0c676c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00001000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1418ced8}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000800}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x28319db1}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000400}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x50633b63}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000200}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa0c676c6}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000100}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x418ced8d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00800000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8319db1a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00400000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x0633b634}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00200000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x0c676c68}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00100000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x18ced8d1}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00080000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x319db1a3}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00040000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x633b6347}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00020000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc676c68f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00010000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8ced8d1f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000020}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x19db1a3e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x33b6347d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x676c68fa}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xced8d1f4}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9db1a3e9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3b6347d2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x76c68fa5}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xed8d1f4a}, > > + {0x61, 4, 6, 20, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000080}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xdb1a3e94}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000040}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb6347d28}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000020}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6c68fa51}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000010}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd8d1f4a3}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000008}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb1a3e946}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000004}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6347d28d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000002}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc68fa51a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000001}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8d1f4a35}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00008000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1a3e946b}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00004000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x347d28d7}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00002000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x68fa51ae}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00001000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd1f4a35c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000800}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa3e946b9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000400}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x47d28d73}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000200}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8fa51ae7}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000100}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1f4a35cf}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00800000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3e946b9e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00400000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7d28d73c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00200000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfa51ae78}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00100000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf4a35cf1}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00080000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe946b9e3}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00040000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd28d73c7}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00020000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa51ae78e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00010000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x4a35cf1c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000020}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x946b9e38}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x28d73c71}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x51ae78e3}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa35cf1c6}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x46b9e38d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8d73c71b}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1ae78e36}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x35cf1c6c}, > > + {0x61, 4, 6, 24, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000080}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6b9e38d9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000040}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd73c71b2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000020}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xae78e364}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000010}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x5cf1c6c9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000008}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb9e38d92}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000004}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x73c71b25}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000002}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe78e364b}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000001}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xcf1c6c96}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00008000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9e38d92c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00004000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3c71b259}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00002000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x78e364b2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00001000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf1c6c964}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000800}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe38d92c9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000400}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc71b2593}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000200}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8e364b27}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000100}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1c6c964e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00800000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x38d92c9c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00400000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x71b25938}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00200000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe364b270}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00100000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc6c964e0}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00080000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8d92c9c0}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00040000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1b259380}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00020000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x364b2700}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00010000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6c964e01}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000020}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd92c9c03}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb2593807}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x64b2700f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc964e01e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x92c9c03d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x2593807a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x4b2700f4}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x964e01e8}, > > + {0x61, 4, 6, 28, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000080}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x2c9c03d1}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000040}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x593807a3}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000020}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb2700f46}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000010}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x64e01e8d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000008}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc9c03d1a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000004}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x93807a35}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000002}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x2700f46b}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000001}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x4e01e8d6}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00008000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9c03d1ad}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00004000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3807a35b}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00002000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x700f46b6}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00001000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe01e8d6c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000800}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc03d1ad9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000400}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x807a35b3}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000200}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x00f46b66}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000100}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x01e8d6cc}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00800000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x03d1ad99}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00400000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x07a35b32}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00200000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x0f46b665}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00100000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1e8d6cca}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00080000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3d1ad994}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00040000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7a35b328}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00020000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf46b6651}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00010000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe8d6cca2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000020}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd1ad9944}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa35b3289}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x46b66512}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8d6cca25}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1ad9944a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x35b32894}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6b665129}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd6cca253}, > > + {0x61, 4, 6, 32, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000080}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xad9944a7}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000040}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x5b32894f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000020}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb665129f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000010}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6cca253e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000008}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd9944a7d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000004}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb32894fb}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000002}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x665129f6}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000001}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xcca253ec}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00008000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9944a7d9}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00004000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x32894fb2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00002000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x65129f65}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00001000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xca253eca}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000800}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x944a7d95}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000400}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x2894fb2a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000200}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x5129f655}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000100}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa253ecab}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00800000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x44a7d956}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00400000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x894fb2ac}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00200000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x129f6558}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00100000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x253ecab1}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00080000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x4a7d9563}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00040000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x94fb2ac7}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00020000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x29f6558f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00010000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x53ecab1e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000020}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xa7d9563d}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x4fb2ac7a}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9f6558f5}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3ecab1ea}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7d9563d5}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfb2ac7ab}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf6558f56}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xecab1eac}, > > + {0x61, 4, 6, 36, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000080}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd9563d59}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000040}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb2ac7ab2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000020}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6558f564}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000010}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xcab1eac8}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000008}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9563d590}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000004}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x2ac7ab20}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000002}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x558f5641}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000001}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xab1eac83}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00008000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x563d5906}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00004000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xac7ab20c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00002000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x58f56418}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00001000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb1eac831}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000800}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x63d59063}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000400}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc7ab20c7}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000200}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8f56418f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00000100}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1eac831e}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00800000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3d59063c}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00400000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7ab20c78}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00200000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf56418f0}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00100000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xeac831e1}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00080000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xd59063c2}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00040000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xab20c784}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00020000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x56418f09}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x00010000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xac831e12}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000020}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x59063c25}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x40000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xb20c784b}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x20000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x6418f097}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x10000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc831e12f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x08000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9063c25f}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x04000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x20c784be}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x57, 5, 0, 0, 0x02000000}, > > + {0x1d, 5, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x418f097c}, > > + {0x57, 4, 0, 0, 0x01000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x831e12f9}, > > + {0x71, 4, 6, 40, 0x00000000}, > > + {0x67, 4, 0, 0, 0x00000008}, > > + {0x71, 5, 6, 41, 0x00000000}, > > + {0x4f, 4, 5, 0, 0x00000000}, > > + {0xbf, 5, 4, 0, 0x00000000}, > > + {0x67, 5, 0, 0, 0x00000030}, > > + {0xc7, 5, 0, 0, 0x00000020}, > > + {0x6d, 5, 3, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x063c25f3}, > > + {0x67, 4, 0, 0, 0x00000010}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x40000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x0c784be7}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x20000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x18f097cf}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x10000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x31e12f9f}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x08000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x63c25f3f}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x04000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc784be7f}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x02000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x8f097cff}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x01000000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x1e12f9fe}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00800000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3c25f3fc}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00400000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x784be7f8}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00200000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf097cff0}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00100000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe12f9fe0}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00080000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xc25f3fc1}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00040000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x84be7f83}, > > + {0xbf, 3, 4, 0, 0x00000000}, > > + {0x57, 3, 0, 0, 0x00020000}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x097cff07}, > > + {0x57, 4, 0, 0, 0x00010000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x12f9fe0f}, > > + {0x71, 3, 6, 42, 0x00000000}, > > + {0x67, 3, 0, 0, 0x00000008}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00008000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x25f3fc1f}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00004000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x4be7f83f}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00002000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x97cff07f}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00001000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x2f9fe0fe}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000800}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x5f3fc1fd}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000400}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xbe7f83fb}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000200}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7cff07f7}, > > + {0x57, 3, 0, 0, 0x00000100}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf9fe0fee}, > > + {0x71, 3, 6, 43, 0x00000000}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000080}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xf3fc1fdc}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000040}, > > + {0x79, 5, 10, -56, 0x00000000}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xe7f83fb8}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000020}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xcff07f70}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000010}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x9fe0fee1}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000008}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x3fc1fdc2}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000004}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0x7f83fb85}, > > + {0xbf, 4, 3, 0, 0x00000000}, > > + {0x57, 4, 0, 0, 0x00000002}, > > + {0x1d, 4, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xff07f70a}, > > + {0x57, 3, 0, 0, 0x00000001}, > > + {0x1d, 3, 2, 1, 0x00000000}, > > + {0xa7, 1, 0, 0, 0xfe0fee15}, > > + {0x71, 2, 0, 201, 0x00000000}, > > + {0x67, 2, 0, 0, 0x00000008}, > > + {0x71, 3, 0, 200, 0x00000000}, > > + {0x4f, 2, 3, 0, 0x00000000}, > > + {0x71, 3, 0, 203, 0x00000000}, > > + {0x67, 3, 0, 0, 0x00000008}, > > + {0x71, 4, 0, 202, 0x00000000}, > > + {0x4f, 3, 4, 0, 0x00000000}, > > + {0x67, 3, 0, 0, 0x00000010}, > > + {0x4f, 3, 2, 0, 0x00000000}, > > + {0x67, 1, 0, 0, 0x00000020}, > > + {0x77, 1, 0, 0, 0x00000020}, > > + {0xbf, 2, 1, 0, 0x00000000}, > > + {0x3f, 2, 3, 0, 0x00000000}, > > + {0x2f, 2, 3, 0, 0x00000000}, > > + {0x1f, 1, 2, 0, 0x00000000}, > > + {0x57, 1, 0, 0, 0x0000000f}, > > + {0x67, 1, 0, 0, 0x00000002}, > > + {0x0f, 0, 1, 0, 0x00000000}, > > + {0x71, 1, 0, 137, 0x00000000}, > > + {0x67, 1, 0, 0, 0x00000008}, > > + {0x71, 2, 0, 136, 0x00000000}, > > + {0x4f, 1, 2, 0, 0x00000000}, > > + {0x71, 2, 0, 138, 0x00000000}, > > + {0x71, 3, 0, 139, 0x00000000}, > > + {0x67, 3, 0, 0, 0x00000008}, > > + {0x4f, 3, 2, 0, 0x00000000}, > > + {0x67, 3, 0, 0, 0x00000010}, > > + {0x4f, 3, 1, 0, 0x00000000}, > > + {0x07, 3, 0, 0, 0x00000001}, > > + {0x63, 5, 3, 52, 0x00000000}, > > + {0xb7, 7, 0, 0, 0x00000001}, > > + {0xbf, 0, 7, 0, 0x00000000}, > > + {0x95, 0, 0, 0, 0x00000000}, > > +}; > > + > > +/** > > + * Load BPF program (section l3_l4) into the kernel and return a bpf fd. > > + * > > + * @param[in] key_idx > > + * RSS MAP key index > > + * > > + * @param[in] map_fd > > + * BPF RSS map file descriptor > > + * > > + * @return > > + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. > > + */ > > +int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd) > > +{ > > + l3_l4_hash_insns[4].imm = key_idx; > > + l3_l4_hash_insns[9].imm = map_fd; > > + > > + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, > > + (struct bpf_insn *)l3_l4_hash_insns, > > + ARRAY_SIZE(l3_l4_hash_insns), > > + "Dual BSD/GPL"); > > +} > > + > > + > > +#ifndef __NR_bpf > > +# if defined(__i386__) > > +# define __NR_bpf 357 > > +# elif defined(__x86_64__) > > +# define __NR_bpf 321 > > +# elif defined(__aarch64__) > > +# define __NR_bpf 280 > > +# elif defined(__sparc__) > > +# define __NR_bpf 349 > > +# elif defined(__s390__) > > +# define __NR_bpf 351 > > +# else > > +# error __NR_bpf not defined. libbpf does not support your arch. > > +# endif > > +#endif > > + > > +/** > > + * Helper function to convert a pointer to unsigned 64 bits > > + * > > + * @param[in] ptr > > + * pointer to address > > + * > > + * @return > > + * 64 bit unsigned long type of pointer address > > + */ > > +static inline __u64 ptr_to_u64(const void *ptr) > > +{ > > + return (__u64)(unsigned long)ptr; > > +} > > + > > +/** > > + * Call BPF system call > > + * > > + * @param[in] cmd > > + * BPF command for program loading, map creation, map entry update, > etc > > + * > > + * @param[in] attr > > + * System call attributes relevant to system call command > > + * > > + * @param[in] size > > + * size of attr parameter > > + * > > + * @return > > + * -1 if BPF system call failed, 0 otherwise > > + */ > > +static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr, > > + unsigned int size) > > +{ > > + return syscall(__NR_bpf, cmd, attr, size); > > +} > > + > > +/** > > + * Load BPF instructions to kernel > > + * > > + * @param[in] type > > + * BPF program type: classifieir or action > > + * > > + * @param[in] insns > > + * Array of BPF instructions (equivalent to BPF instructions) > > + * > > + * @param[in] insns_cnt > > + * Number of BPF instructions (size of array) > > + * > > + * @param[in] lincense > > + * License string that must be acknowledged by the kernel > > + * > > + * @return > > + * -1 if the BPF program couldn't be loaded, fd (file descriptor) > > otherwise > > + */ > > +static int bpf_load(enum bpf_prog_type type, > > + const struct bpf_insn *insns, > > + size_t insns_cnt, > > + const char *license) > > +{ > > + union bpf_attr attr; > > + > > + bzero(&attr, sizeof(attr)); > > + attr.prog_type = type; > > + attr.insn_cnt = (__u32)insns_cnt; > > + attr.insns = ptr_to_u64(insns); > > + attr.license = ptr_to_u64(license); > > + attr.log_buf = ptr_to_u64(NULL); > > + attr.log_level = 0; > > + attr.kern_version = 0; > > + > > + return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr)); > > +} > > diff --git a/drivers/net/tap/tap_bpf_program.c > b/drivers/net/tap/tap_bpf_program.c > > new file mode 100644 > > index 0000000..08bc881 > > --- /dev/null > > +++ b/drivers/net/tap/tap_bpf_program.c > > @@ -0,0 +1,221 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright 2017 Mellanox Technologies, Ltd. > > + */ > > + > > +#include <stdint.h> > > +#include <stdbool.h> > > +#include <sys/types.h> > > +#include <sys/socket.h> > > +#include <asm/types.h> > > +#include <linux/in.h> > > +#include <linux/if.h> > > +#include <linux/if_ether.h> > > +#include <linux/ip.h> > > +#include <linux/ipv6.h> > > +#include <linux/if_tunnel.h> > > +#include <linux/filter.h> > > +#include <linux/bpf.h> > > + > > +#include "tap_rss.h" > > + > > +/** Create IPv4 address */ > > +#define IPv4(a, b, c, d) ((__u32)(((a) & 0xff) << 24) | \ > > + (((b) & 0xff) << 16) | \ > > + (((c) & 0xff) << 8) | \ > > + ((d) & 0xff)) > > + > > +#define PORT(a, b) ((__u16)(((a) & 0xff) << 8) | \ > > + ((b) & 0xff)) > > + > > +/* > > + * The queue number is offset by 1, to distinguish packets that have > > + * gone through this rule (skb->cb[1] != 0) from others. > > + */ > > +#define QUEUE_OFFSET 1 > > +#define PIN_GLOBAL_NS 2 > > + > > +#define KEY_IDX 0 > > +#define BPF_MAP_ID_KEY 1 > > + > > +struct vlan_hdr { > > + __be16 proto; > > + __be16 tci; > > +}; > > + > > +struct bpf_elf_map __attribute__((section("maps"), used)) > > +map_keys = { > > + .type = BPF_MAP_TYPE_HASH, > > + .id = BPF_MAP_ID_KEY, > > + .size_key = sizeof(__u32), > > + .size_value = sizeof(struct rss_key), > > + .max_elem = 256, > > + .pinning = PIN_GLOBAL_NS, > > +}; > > + > > +__section("cls_q") int > > +match_q(struct __sk_buff *skb) > > +{ > > + __u32 queue = skb->cb[1]; > > + volatile __u32 q = 0xdeadbeef; > > + __u32 match_queue = QUEUE_OFFSET + q; > > + > > + /* printt("match_q$i() queue = %d\n", queue); */ > > + > > + if (queue != match_queue) > > + return TC_ACT_OK; > > + return TC_ACT_UNSPEC; > > +} > > + > > + > > +struct ipv4_l3_l4_tuple { > > + __u32 src_addr; > > + __u32 dst_addr; > > + __u16 dport; > > + __u16 sport; > > +} __attribute__((packed)); > > + > > +struct ipv6_l3_l4_tuple { > > + __u8 src_addr[16]; > > + __u8 dst_addr[16]; > > + __u16 dport; > > + __u16 sport; > > +} __attribute__((packed)); > > + > > +static const __u8 def_rss_key[] = { > > + 0xd1, 0x81, 0xc6, 0x2c, > > + 0xf7, 0xf4, 0xdb, 0x5b, > > + 0x19, 0x83, 0xa2, 0xfc, > > + 0x94, 0x3e, 0x1a, 0xdb, > > + 0xd9, 0x38, 0x9e, 0x6b, > > + 0xd1, 0x03, 0x9c, 0x2c, > > + 0xa7, 0x44, 0x99, 0xad, > > + 0x59, 0x3d, 0x56, 0xd9, > > + 0xf3, 0x25, 0x3c, 0x06, > > + 0x2a, 0xdc, 0x1f, 0xfc, > > +}; > > + > > +static __u32 __attribute__((always_inline)) > > +rte_softrss_be(const __u32 *input_tuple, const uint8_t *rss_key, > > + __u8 input_len) > > +{ > > + __u32 i, j, hash = 0; > > +#pragma unroll > > + for (j = 0; j < input_len; j++) { > > +#pragma unroll > > + for (i = 0; i < 32; i++) { > > + if (input_tuple[j] & (1 << (31 - i))) { > > + hash ^= ((const __u32 *)def_rss_key)[j] << i | > > + (__u32)((uint64_t) > > + (((const __u32 *)def_rss_key)[j + 1]) > > + >> (32 - i)); > > + } > > + } > > + } > > + return hash; > > +} > > + > > +static int __attribute__((always_inline)) > > +rss_l3_l4(struct __sk_buff *skb) > > +{ > > + void *data_end = (void *)(long)skb->data_end; > > + void *data = (void *)(long)skb->data; > > + __u16 proto = (__u16)skb->protocol; > > + __u32 key_idx = 0xdeadbeef; > > + __u32 hash; > > + struct rss_key *rsskey; > > + __u64 off = ETH_HLEN; > > + int j; > > + __u8 *key = 0; > > + __u32 len; > > + __u32 queue = 0; > > + > > + rsskey = map_lookup_elem(&map_keys, &key_idx); > > + if (!rsskey) { > > + printt("hash(): rss key is not configured\n"); > > + return TC_ACT_OK; > > + } > > + key = (__u8 *)rsskey->key; > > + > > + /* Get correct proto for 802.1ad */ > > + if (skb->vlan_present && skb->vlan_proto == htons(ETH_P_8021AD)) > { > > + if (data + ETH_ALEN * 2 + sizeof(struct vlan_hdr) + > > + sizeof(proto) > data_end) > > + return TC_ACT_OK; > > + proto = *(__u16 *)(data + ETH_ALEN * 2 + > > + sizeof(struct vlan_hdr)); > > + off += sizeof(struct vlan_hdr); > > + } > > + > > + if (proto == htons(ETH_P_IP)) { > > + if (data + off + sizeof(struct iphdr) + sizeof(__u32) > > + > data_end) > > + return TC_ACT_OK; > > + > > + __u8 *src_dst_addr = data + off + offsetof(struct iphdr, > saddr); > > + __u8 *src_dst_port = data + off + sizeof(struct iphdr); > > + struct ipv4_l3_l4_tuple v4_tuple = { > > + .src_addr = IPv4(*(src_dst_addr + 0), > > + *(src_dst_addr + 1), > > + *(src_dst_addr + 2), > > + *(src_dst_addr + 3)), > > + .dst_addr = IPv4(*(src_dst_addr + 4), > > + *(src_dst_addr + 5), > > + *(src_dst_addr + 6), > > + *(src_dst_addr + 7)), > > + .sport = PORT(*(src_dst_port + 0), > > + *(src_dst_port + 1)), > > + .dport = PORT(*(src_dst_port + 2), > > + *(src_dst_port + 3)), > > + }; > > + __u8 input_len = sizeof(v4_tuple) / sizeof(__u32); > > + if (rsskey->hash_fields & (1 << HASH_FIELD_IPV4_L3)) > > + input_len--; > > + hash = rte_softrss_be((__u32 *)&v4_tuple, key, 3); > > + } else if (proto == htons(ETH_P_IPV6)) { > > + if (data + off + sizeof(struct ipv6hdr) + > > + sizeof(__u32) > data_end) > > + return TC_ACT_OK; > > + __u8 *src_dst_addr = data + off + > > + offsetof(struct ipv6hdr, saddr); > > + __u8 *src_dst_port = data + off + > > + sizeof(struct ipv6hdr); > > + struct ipv6_l3_l4_tuple v6_tuple; > > + for (j = 0; j < 4; j++) > > + *((uint32_t *)&v6_tuple.src_addr + j) = > > + __builtin_bswap32(*((uint32_t *) > > + src_dst_addr + j)); > > + for (j = 0; j < 4; j++) > > + *((uint32_t *)&v6_tuple.dst_addr + j) = > > + __builtin_bswap32(*((uint32_t *) > > + src_dst_addr + 4 + j)); > > + v6_tuple.sport = PORT(*(src_dst_port + 0), > > + *(src_dst_port + 1)); > > + v6_tuple.dport = PORT(*(src_dst_port + 2), > > + *(src_dst_port + 3)); > > + > > + __u8 input_len = sizeof(v6_tuple) / sizeof(__u32); > > + if (rsskey->hash_fields & (1 << HASH_FIELD_IPV6_L3)) > > + input_len--; > > + hash = rte_softrss_be((__u32 *)&v6_tuple, key, 9); > > + } else { > > + return TC_ACT_PIPE; > > + } > > + > > + queue = rsskey->queues[(hash % rsskey->nb_queues) & > > + (TAP_MAX_QUEUES - 1)]; > > + skb->cb[1] = QUEUE_OFFSET + queue; > > + /* printt(">>>>> rss_l3_l4 hash=0x%x queue=%u\n", hash, queue); */ > > + > > + return TC_ACT_RECLASSIFY; > > +} > > + > > +#define RSS(L) \ > > + __section(#L) int \ > > + L ## _hash(struct __sk_buff *skb) \ > > + { \ > > + return rss_ ## L (skb); \ > > + } > > + > > +RSS(l3_l4) > > + > > +BPF_LICENSE("Dual BSD/GPL"); > > diff --git a/drivers/net/tap/tap_flow.h b/drivers/net/tap/tap_flow.h > > index 9e332b0..6cc01b4 100644 > > --- a/drivers/net/tap/tap_flow.h > > +++ b/drivers/net/tap/tap_flow.h > > @@ -50,6 +50,8 @@ > > #define GROUP_SHIFT 12 > > #define MAX_GROUP GROUP_MASK > > > > +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) > > + > > /** > > * These index are actually in reversed order: their priority is processed > > * by subtracting their value to the lowest priority (PRIORITY_MASK). > > @@ -80,4 +82,7 @@ int tap_flow_implicit_destroy(struct pmd_internals > *pmd, > > int tap_flow_implicit_flush(struct pmd_internals *pmd, > > struct rte_flow_error *error); > > > > +int tap_flow_bpf_cls_q(__u32 queue_idx); > > +int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd); > > + > > #endif /* _TAP_FLOW_H_ */