mirror of
https://github.com/taigrr/gopher-os
synced 2025-01-18 04:43:13 -08:00
Merge pull request #42 from achilleasa/parse-additional-multiboot-tags
Parse additional multiboot tags
This commit is contained in:
commit
8a0fd0ade4
@ -1,6 +1,16 @@
|
||||
package multiboot
|
||||
|
||||
import "unsafe"
|
||||
import (
|
||||
"reflect"
|
||||
"strings"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
var (
|
||||
infoData uintptr
|
||||
cmdLineKV map[string]string
|
||||
elfSectionList []*ElfSection
|
||||
)
|
||||
|
||||
type tagType uint32
|
||||
|
||||
@ -52,8 +62,8 @@ type mmapHeader struct {
|
||||
type FramebufferType uint8
|
||||
|
||||
const (
|
||||
// FrameBufferTypeIndexed specifies a 256-color palette.
|
||||
FrameBufferTypeIndexed FramebufferType = iota
|
||||
// FramebufferTypeIndexed specifies a 256-color palette.
|
||||
FramebufferTypeIndexed FramebufferType = iota
|
||||
|
||||
// FramebufferTypeRGB specifies direct RGB mode.
|
||||
FramebufferTypeRGB
|
||||
@ -78,6 +88,41 @@ type FramebufferInfo struct {
|
||||
|
||||
// Framebuffer type.
|
||||
Type FramebufferType
|
||||
|
||||
reserved uint16
|
||||
|
||||
// The colorInfo data begins after the reserved block and has different
|
||||
// contents depending on the framebuffer type. This dummy field is used
|
||||
// for obtaining a pointer to the color info block data.
|
||||
colorInfo [0]byte
|
||||
}
|
||||
|
||||
// RGBColorInfo returns the FramebufferRGBColorInfo for a RGB framebuffer.
|
||||
func (i *FramebufferInfo) RGBColorInfo() *FramebufferRGBColorInfo {
|
||||
if i.Type != FramebufferTypeRGB {
|
||||
return nil
|
||||
}
|
||||
|
||||
// The color info data begins after the reserved attribute. To access
|
||||
// it, a pointer is created to the dummy colorInfo attribute which
|
||||
// points to the color info data start.
|
||||
return (*FramebufferRGBColorInfo)(unsafe.Pointer(&i.colorInfo))
|
||||
}
|
||||
|
||||
// FramebufferRGBColorInfo describes the order and width of each color component
|
||||
// for a 15-, 16-, 24- or 32-bit framebuffer.
|
||||
type FramebufferRGBColorInfo struct {
|
||||
// The position and width (in bits) of the red component.
|
||||
RedPosition uint8
|
||||
RedMaskSize uint8
|
||||
|
||||
// The position and width (in bits) of the green component.
|
||||
GreenPosition uint8
|
||||
GreenMaskSize uint8
|
||||
|
||||
// The position and width (in bits) of the blue component.
|
||||
BluePosition uint8
|
||||
BlueMaskSize uint8
|
||||
}
|
||||
|
||||
// MemoryEntryType defines the type of a MemoryMapEntry.
|
||||
@ -101,10 +146,6 @@ const (
|
||||
memUnknown
|
||||
)
|
||||
|
||||
var (
|
||||
infoData uintptr
|
||||
)
|
||||
|
||||
// MemRegionVisitor defies a visitor function that gets invoked by VisitMemRegions
|
||||
// for each memory region provided by the boot loader. The visitor must return true
|
||||
// to continue or false to abort the scan.
|
||||
@ -139,6 +180,115 @@ func (t MemoryEntryType) String() string {
|
||||
}
|
||||
}
|
||||
|
||||
type elfSections struct {
|
||||
numSections uint16
|
||||
sectionSize uint32
|
||||
strtabSectionIndex uint32
|
||||
sectionData [0]byte
|
||||
}
|
||||
|
||||
/*
|
||||
type elfSection32 struct {
|
||||
nameIndex uint32
|
||||
sectionType uint32
|
||||
flags uint32
|
||||
address uint32
|
||||
offset uint32
|
||||
size uint32
|
||||
link uint32
|
||||
info uint32
|
||||
addrAlign uint32
|
||||
entSize uint32
|
||||
}
|
||||
*/
|
||||
|
||||
type elfSection64 struct {
|
||||
nameIndex uint32
|
||||
sectionType uint32
|
||||
flags uint64
|
||||
address uint64
|
||||
offset uint64
|
||||
size uint64
|
||||
link uint32
|
||||
info uint32
|
||||
addrAlign uint64
|
||||
entSize uint64
|
||||
}
|
||||
|
||||
// ElfSectionFlag defines an OR-able flag associated with an ElfSection.
|
||||
type ElfSectionFlag uint32
|
||||
|
||||
const (
|
||||
// ElfSectionWritable marks the section as writable.
|
||||
ElfSectionWritable ElfSectionFlag = 1 << iota
|
||||
|
||||
// ElfSectionAllocated means that the section is allocated in memory
|
||||
// when the image is loaded (e.g .bss sections)
|
||||
ElfSectionAllocated
|
||||
|
||||
// ElfSectionExecutable marks the section as executable.
|
||||
ElfSectionExecutable
|
||||
)
|
||||
|
||||
// ElfSection deefines the name, flags and virtual address of an ELF section
|
||||
// which is part of the kernel image.
|
||||
type ElfSection struct {
|
||||
// The section name.
|
||||
Name string
|
||||
|
||||
// The list of flags associated with this section
|
||||
Flags ElfSectionFlag
|
||||
|
||||
// The virtual address of this section.
|
||||
Address uintptr
|
||||
}
|
||||
|
||||
// GetElfSections returns a slice of ElfSections for the loaded kernel image.
|
||||
func GetElfSections() []*ElfSection {
|
||||
if elfSectionList != nil {
|
||||
return elfSectionList
|
||||
}
|
||||
|
||||
curPtr, size := findTagByType(tagElfSymbols)
|
||||
if size == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
ptrElfSections := (*elfSections)(unsafe.Pointer(curPtr))
|
||||
sectionData := *(*[]elfSection64)(unsafe.Pointer(&reflect.SliceHeader{
|
||||
Len: int(ptrElfSections.numSections),
|
||||
Cap: int(ptrElfSections.numSections),
|
||||
Data: uintptr(unsafe.Pointer(&ptrElfSections.sectionData)),
|
||||
}))
|
||||
|
||||
var (
|
||||
strTable = *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{
|
||||
Len: int(sectionData[ptrElfSections.strtabSectionIndex].size),
|
||||
Cap: int(sectionData[ptrElfSections.strtabSectionIndex].size),
|
||||
Data: uintptr(sectionData[ptrElfSections.strtabSectionIndex].address),
|
||||
}))
|
||||
)
|
||||
|
||||
for _, secData := range sectionData {
|
||||
if secData.size == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
// String table entries are C-style NULL-terminated strings
|
||||
end := secData.nameIndex
|
||||
for ; strTable[end] != 0; end++ {
|
||||
}
|
||||
|
||||
elfSectionList = append(elfSectionList, &ElfSection{
|
||||
Name: string(strTable[secData.nameIndex:end]),
|
||||
Flags: ElfSectionFlag(secData.flags),
|
||||
Address: uintptr(secData.address),
|
||||
})
|
||||
}
|
||||
|
||||
return elfSectionList
|
||||
}
|
||||
|
||||
// SetInfoPtr updates the internal multiboot information pointer to the given
|
||||
// value. This function must be invoked before invoking any other function
|
||||
// exported by this package.
|
||||
@ -189,6 +339,39 @@ func GetFramebufferInfo() *FramebufferInfo {
|
||||
return info
|
||||
}
|
||||
|
||||
// GetBootCmdLine returns the command line key-value pairs passed to the
|
||||
// kernel. This function must only be invoked after bootstrapping the memory
|
||||
// allocator.
|
||||
func GetBootCmdLine() map[string]string {
|
||||
if cmdLineKV != nil {
|
||||
return cmdLineKV
|
||||
}
|
||||
|
||||
cmdLineKV = make(map[string]string)
|
||||
|
||||
curPtr, size := findTagByType(tagBootCmdLine)
|
||||
if size != 0 {
|
||||
// The command line is a C-style NULL-terminated string
|
||||
cmdLine := *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{
|
||||
Len: int(size - 1),
|
||||
Cap: int(size - 1),
|
||||
Data: curPtr,
|
||||
}))
|
||||
pairs := strings.Fields(string(cmdLine))
|
||||
for _, pair := range pairs {
|
||||
kv := strings.Split(pair, "=")
|
||||
switch len(kv) {
|
||||
case 2: // foo=bar
|
||||
cmdLineKV[kv[0]] = kv[1]
|
||||
case 1: // nofoo
|
||||
cmdLineKV[kv[0]] = kv[0]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return cmdLineKV
|
||||
}
|
||||
|
||||
// findTagByType scans the multiboot info data looking for the start of of the
|
||||
// specified type. It returns a pointer to the tag contents start offset and
|
||||
// the content length exluding the tag header.
|
||||
|
@ -1,6 +1,9 @@
|
||||
package multiboot
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"reflect"
|
||||
"testing"
|
||||
"unsafe"
|
||||
)
|
||||
@ -10,13 +13,13 @@ func TestFindTagByType(t *testing.T) {
|
||||
tagType tagType
|
||||
expSize uint32
|
||||
}{
|
||||
{tagBootCmdLine, 1},
|
||||
{tagBootLoaderName, 27},
|
||||
{tagBootCmdLine, 28},
|
||||
{tagBootLoaderName, 28},
|
||||
{tagBasicMemoryInfo, 8},
|
||||
{tagBiosBootDevice, 12},
|
||||
{tagMemoryMap, 152},
|
||||
{tagFramebufferInfo, 24},
|
||||
{tagElfSymbols, 972},
|
||||
{tagFramebufferInfo, 30},
|
||||
{tagElfSymbols, 1548},
|
||||
{tagApmTable, 20},
|
||||
}
|
||||
|
||||
@ -49,11 +52,11 @@ func TestVisitMemRegion(t *testing.T) {
|
||||
// This region type is actually MemAvailable but we patch it to
|
||||
// a bogus value to test whether it gets flagged as reserved
|
||||
{0, 654336, MemReserved},
|
||||
{654336, 1024, MemReserved},
|
||||
{983040, 65536, MemReserved},
|
||||
{1048576, 133038080, MemAvailable},
|
||||
{134086656, 131072, MemReserved},
|
||||
{4294705152, 262144, MemReserved},
|
||||
{0x9fc00, 1024, MemReserved},
|
||||
{0xf0000, 65536, MemReserved},
|
||||
{0x100000, 133038080, MemAvailable},
|
||||
{0x7fe0000, 131072, MemReserved},
|
||||
{0xfffc0000, 262144, MemReserved},
|
||||
}
|
||||
|
||||
var visitCount int
|
||||
@ -70,7 +73,7 @@ func TestVisitMemRegion(t *testing.T) {
|
||||
|
||||
// Set a bogus type for the first entry in the map
|
||||
SetInfoPtr(uintptr(unsafe.Pointer(&multibootInfoTestData[0])))
|
||||
multibootInfoTestData[128] = 0xFF
|
||||
multibootInfoTestData[152] = 0xFF
|
||||
|
||||
VisitMemRegions(func(entry *MemoryMapEntry) bool {
|
||||
if entry.PhysAddress != specs[visitCount].expPhys {
|
||||
@ -131,20 +134,118 @@ func TestGetFramebufferInfo(t *testing.T) {
|
||||
SetInfoPtr(uintptr(unsafe.Pointer(&multibootInfoTestData[0])))
|
||||
fbInfo := GetFramebufferInfo()
|
||||
|
||||
if fbInfo.Type != FramebufferTypeEGA {
|
||||
t.Errorf("expected framebuffer type to be %d; got %d", FramebufferTypeEGA, fbInfo.Type)
|
||||
if fbInfo.Type != FramebufferTypeRGB {
|
||||
t.Errorf("expected framebuffer type to be %d; got %d", FramebufferTypeRGB, fbInfo.Type)
|
||||
}
|
||||
|
||||
if fbInfo.PhysAddr != 0xB8000 {
|
||||
t.Errorf("expected physical address for EGA text mode to be 0xB8000; got %x", fbInfo.PhysAddr)
|
||||
if exp := uint64(0xfd000000); fbInfo.PhysAddr != exp {
|
||||
t.Errorf("expected physical address for framebuffer to be 0x%x; got 0x%x", exp, fbInfo.PhysAddr)
|
||||
}
|
||||
|
||||
if fbInfo.Width != 80 || fbInfo.Height != 25 {
|
||||
t.Errorf("expected framebuffer dimensions to be 80x25; got %dx%d", fbInfo.Width, fbInfo.Height)
|
||||
if fbInfo.Width != 1024 || fbInfo.Height != 768 {
|
||||
t.Errorf("expected framebuffer dimensions to be 1024x768; got %dx%d", fbInfo.Width, fbInfo.Height)
|
||||
}
|
||||
|
||||
if fbInfo.Pitch != 160 {
|
||||
t.Errorf("expected pitch to be 160; got %x", fbInfo.Pitch)
|
||||
if exp := fbInfo.Width * 4; fbInfo.Pitch != exp {
|
||||
t.Errorf("expected pitch to be %d; got %d", exp, fbInfo.Pitch)
|
||||
}
|
||||
|
||||
// The expected layout should be "BGR" with 8 bytes per component
|
||||
colorInfo := fbInfo.RGBColorInfo()
|
||||
if expRedPos, expGreenPos, expBluePos := uint8(16), uint8(8), uint8(0); colorInfo.RedPosition != expRedPos || colorInfo.GreenPosition != expGreenPos || colorInfo.BluePosition != expBluePos {
|
||||
t.Errorf("expected color format to be BGR (positions r:%d, g: %d, b:%d); got (r:%d, g:%d, b:%d)",
|
||||
expRedPos, expGreenPos, expBluePos,
|
||||
colorInfo.RedPosition, colorInfo.GreenPosition, colorInfo.BluePosition,
|
||||
)
|
||||
}
|
||||
|
||||
if expSize := uint8(8); colorInfo.RedMaskSize != expSize || colorInfo.GreenMaskSize != expSize || colorInfo.BlueMaskSize != expSize {
|
||||
t.Errorf("expected color mask sizes to be (r:%d, g:%d, b:%d); got (r:%d, g:%d, b:%d)",
|
||||
expSize, expSize, expSize,
|
||||
colorInfo.RedMaskSize, colorInfo.GreenMaskSize, colorInfo.BlueMaskSize,
|
||||
)
|
||||
}
|
||||
|
||||
// RGBColorInfo for non-RGB buffers should return nil
|
||||
fbInfo.Type = FramebufferTypeEGA
|
||||
if got := fbInfo.RGBColorInfo(); got != nil {
|
||||
t.Errorf("expected RGBColorInfo() to return nil for non-RGB framebuffer; got %v", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetBootCmdLine(t *testing.T) {
|
||||
SetInfoPtr(uintptr(unsafe.Pointer(&multibootInfoTestData[0])))
|
||||
|
||||
expKV := map[string]string{
|
||||
"param1": "param1", // "param1" (no value)
|
||||
"param2": "value2", // "param2=value2"
|
||||
}
|
||||
|
||||
kv := GetBootCmdLine()
|
||||
if !reflect.DeepEqual(kv, expKV) {
|
||||
t.Errorf("expected to get: %v; got %v", expKV, kv)
|
||||
}
|
||||
|
||||
// Second call should return the memoized data
|
||||
cmdLineKV["foo"] = "bar"
|
||||
if kv2 := GetBootCmdLine(); !reflect.DeepEqual(kv2, kv) {
|
||||
t.Error("expected second call to GetBootCmdLine() to return the memoized KV pairs")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetElfSections(t *testing.T) {
|
||||
SetInfoPtr(uintptr(unsafe.Pointer(&emptyInfoData[0])))
|
||||
|
||||
if GetElfSections() != nil {
|
||||
t.Fatalf("expected GetElfSections() to return nil when no elf sections tag is present")
|
||||
}
|
||||
|
||||
SetInfoPtr(uintptr(unsafe.Pointer(&multibootInfoTestData[0])))
|
||||
|
||||
// Patch the strtab address to point to out mock data
|
||||
var buf bytes.Buffer
|
||||
binary.Write(&buf, binary.LittleEndian, uint64(uintptr(unsafe.Pointer(&mockStrTable[0]))))
|
||||
for i, b := range buf.Bytes() {
|
||||
multibootInfoTestData[1660+i] = b
|
||||
}
|
||||
|
||||
sections := GetElfSections()
|
||||
|
||||
specs := []struct {
|
||||
secName string
|
||||
expFlags ElfSectionFlag
|
||||
}{
|
||||
{".text", ElfSectionAllocated | ElfSectionExecutable},
|
||||
{".bss", ElfSectionAllocated | ElfSectionWritable},
|
||||
{".noptrbss", ElfSectionAllocated | ElfSectionWritable},
|
||||
{".data", ElfSectionAllocated | ElfSectionWritable},
|
||||
{".rodata", ElfSectionAllocated},
|
||||
{".strtab", 0},
|
||||
}
|
||||
|
||||
for specIndex, spec := range specs {
|
||||
var found *ElfSection
|
||||
for _, sec := range sections {
|
||||
if sec.Name == spec.secName {
|
||||
found = sec
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if found == nil {
|
||||
t.Errorf("[spec %d] missing section %q", specIndex, spec.secName)
|
||||
continue
|
||||
}
|
||||
|
||||
if found.Flags != spec.expFlags {
|
||||
t.Errorf("[spec %d] expected section flags to be: 0x%x; got 0x%x", specIndex, spec.expFlags, found.Flags)
|
||||
}
|
||||
}
|
||||
|
||||
// Second call should return the memoized data
|
||||
sections[0].Name = "foo"
|
||||
if sections2 := GetElfSections(); !reflect.DeepEqual(sections2, sections) {
|
||||
t.Error("expected second call to GetElfSections() to return the memoized section list")
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,90 +259,196 @@ var (
|
||||
|
||||
// A dump of multiboot data when running under qemu.
|
||||
multibootInfoTestData = []byte{
|
||||
72, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 0, 0, 0,
|
||||
0, 171, 253, 7, 118, 119, 123, 0, 2, 0, 0, 0, 35, 0, 0, 0,
|
||||
71, 82, 85, 66, 32, 50, 46, 48, 50, 126, 98, 101, 116, 97, 50, 45,
|
||||
57, 117, 98, 117, 110, 116, 117, 49, 46, 54, 0, 0, 0, 0, 0, 0,
|
||||
10, 0, 0, 0, 28, 0, 0, 0, 2, 1, 0, 240, 4, 213, 0, 0,
|
||||
0, 240, 0, 240, 3, 0, 240, 255, 240, 255, 240, 255, 0, 0, 0, 0,
|
||||
6, 0, 0, 0, 160, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 9, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 252, 9, 0, 0, 0, 0, 0,
|
||||
0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
|
||||
0, 0, 238, 7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 254, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
|
||||
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 0, 0, 0, 0,
|
||||
0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
|
||||
9, 0, 0, 0, 212, 3, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0,
|
||||
21, 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, 27, 0, 0, 0,
|
||||
1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0,
|
||||
24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 38, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0,
|
||||
0, 16, 16, 0, 0, 32, 0, 0, 135, 26, 4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0,
|
||||
1, 0, 0, 0, 2, 0, 0, 0, 0, 48, 20, 0, 0, 64, 4, 0,
|
||||
194, 167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,
|
||||
0, 0, 0, 0, 52, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
|
||||
224, 215, 21, 0, 224, 231, 5, 0, 176, 6, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0,
|
||||
1, 0, 0, 0, 2, 0, 0, 0, 144, 222, 21, 0, 144, 238, 5, 0,
|
||||
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 72, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
|
||||
160, 222, 21, 0, 160, 238, 5, 0, 119, 23, 2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0,
|
||||
7, 0, 0, 0, 2, 0, 0, 0, 32, 246, 23, 0, 32, 6, 8, 0,
|
||||
56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 100, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0,
|
||||
0, 0, 24, 0, 0, 16, 8, 0, 204, 5, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
|
||||
1, 0, 0, 0, 3, 0, 0, 0, 224, 5, 24, 0, 224, 21, 8, 0,
|
||||
178, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
|
||||
0, 0, 0, 0, 117, 0, 0, 0, 8, 0, 0, 0, 3, 4, 0, 0,
|
||||
148, 15, 24, 0, 146, 31, 8, 0, 4, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0,
|
||||
8, 0, 0, 0, 3, 0, 0, 0, 0, 16, 24, 0, 146, 31, 8, 0,
|
||||
176, 61, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,
|
||||
0, 0, 0, 0, 128, 0, 0, 0, 8, 0, 0, 0, 3, 0, 0, 0,
|
||||
192, 77, 25, 0, 146, 31, 8, 0, 32, 56, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 224, 133, 25, 0, 146, 31, 8, 0,
|
||||
64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 153, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
|
||||
32, 134, 25, 0, 210, 31, 8, 0, 129, 26, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 161, 160, 25, 0, 83, 58, 8, 0,
|
||||
2, 201, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
|
||||
163, 105, 27, 0, 85, 3, 10, 0, 25, 1, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 188, 106, 27, 0, 110, 4, 10, 0,
|
||||
67, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 207, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 4, 28, 0, 184, 157, 10, 0, 252, 112, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 252, 116, 28, 0, 180, 14, 11, 0,
|
||||
16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 231, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
|
||||
12, 117, 28, 0, 196, 14, 11, 0, 239, 79, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0, 0, 0, 251, 196, 28, 0, 179, 94, 11, 0,
|
||||
247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
|
||||
244, 197, 28, 0, 108, 99, 11, 0, 80, 77, 0, 0, 23, 0, 0, 0,
|
||||
210, 4, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, 0, 0, 0,
|
||||
3, 0, 0, 0, 0, 0, 0, 0, 68, 19, 29, 0, 188, 176, 11, 0,
|
||||
107, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0,
|
||||
127, 2, 0, 0, 128, 251, 1, 0, 5, 0, 0, 0, 20, 0, 0, 0,
|
||||
224, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
|
||||
8, 0, 0, 0, 32, 0, 0, 0, 0, 128, 11, 0, 0, 0, 0, 0,
|
||||
160, 0, 0, 0, 80, 0, 0, 0, 25, 0, 0, 0, 16, 2, 0, 0,
|
||||
14, 0, 0, 0, 28, 0, 0, 0, 82, 83, 68, 32, 80, 84, 82, 32,
|
||||
89, 66, 79, 67, 72, 83, 32, 0, 220, 24, 254, 7, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 8, 0, 0, 0,
|
||||
0xb8, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
|
||||
0x70, 0x61, 0x72, 0x61, 0x6d, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61,
|
||||
0x72, 0x61, 0x6d, 0x32, 0x3d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x47, 0x52, 0x55, 0x42, 0x20, 0x32, 0x2e, 0x30,
|
||||
0x32, 0x7e, 0x62, 0x65, 0x74, 0x61, 0x32, 0x2d, 0x33, 0x36, 0x75, 0x62, 0x75, 0x6e, 0x74, 0x75,
|
||||
0x33, 0x2e, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
|
||||
0x02, 0x01, 0x00, 0xf0, 0x04, 0xd5, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x03, 0x00, 0xf0, 0xff,
|
||||
0xf0, 0xff, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xfc, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xfc, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x14, 0x06, 0x00, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x09, 0x08, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x18, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x90, 0x03, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xa0, 0x1b, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0xa0, 0xb0, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x0d, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xae, 0x1b, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0x08, 0xbe, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xae, 0x1b, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0xc0, 0xbe, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x60, 0x04, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x4f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x2b, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x21, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0x20, 0x9b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x71, 0x02, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x24, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0x20, 0x9b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x56, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x24, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0x20, 0x9b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
|
||||
0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x24, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0xa0, 0x9b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x60, 0x24, 0x00,
|
||||
0x00, 0x80, 0xff, 0xff, 0xd8, 0x9b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x58, 0x24, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xd8, 0x9b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x24, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x68, 0x9c, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x81, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xe2, 0x24, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x2d, 0x1e, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xa0, 0x04, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x59, 0x24, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xca, 0xbe, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x83, 0x29, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xfd, 0xbf, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xf3, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x76, 0x2a, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x58, 0xb3, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x11, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5a, 0x24, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x98, 0xc4, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x87, 0x2b, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xb8, 0xc4, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xa0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x5a, 0x24, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x91, 0xec, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x2c, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xf8, 0x64, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x40, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x68, 0x2d, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x98, 0xa5, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x46, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0x80, 0xfb, 0x01, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00,
|
||||
0x44, 0x41, 0xff, 0xff, 0x00, 0x60, 0x4f, 0x00, 0x56, 0x45, 0x53, 0x41, 0x00, 0x03, 0xb4, 0x57,
|
||||
0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x60, 0x00, 0x01, 0x00, 0x00, 0xc8, 0x57,
|
||||
0x00, 0xc0, 0xdb, 0x57, 0x00, 0xc0, 0xef, 0x57, 0x00, 0xc0, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01,
|
||||
0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x0d, 0x01, 0x0e, 0x01, 0x0f, 0x01,
|
||||
0x10, 0x01, 0x11, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15, 0x01, 0x16, 0x01, 0x17, 0x01,
|
||||
0x18, 0x01, 0x19, 0x01, 0x1a, 0x01, 0x1b, 0x01, 0x1c, 0x01, 0x1d, 0x01, 0x1e, 0x01, 0x1f, 0x01,
|
||||
0x40, 0x01, 0x41, 0x01, 0x42, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, 0x01, 0x47, 0x01,
|
||||
0x48, 0x01, 0x49, 0x01, 0x4a, 0x01, 0x4b, 0x01, 0x4c, 0x01, 0x75, 0x01, 0x76, 0x01, 0x77, 0x01,
|
||||
0x78, 0x01, 0x79, 0x01, 0x7a, 0x01, 0x7b, 0x01, 0x7c, 0x01, 0x7d, 0x01, 0x7e, 0x01, 0x7f, 0x01,
|
||||
0x80, 0x01, 0x81, 0x01, 0x82, 0x01, 0x83, 0x01, 0x84, 0x01, 0x85, 0x01, 0x86, 0x01, 0x87, 0x01,
|
||||
0x88, 0x01, 0x89, 0x01, 0x8a, 0x01, 0x8b, 0x01, 0x8c, 0x01, 0x8d, 0x01, 0x8e, 0x01, 0x8f, 0x01,
|
||||
0x90, 0x01, 0x91, 0x01, 0x92, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00,
|
||||
0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x0e, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x11, 0x00,
|
||||
0x12, 0x00, 0x13, 0x00, 0x6a, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x07, 0x00, 0x40, 0x00, 0x40, 0x00,
|
||||
0x00, 0xa0, 0x00, 0x00, 0x70, 0x54, 0x00, 0xc0, 0x00, 0x10, 0x00, 0x04, 0x00, 0x03, 0x08, 0x10,
|
||||
0x01, 0x20, 0x01, 0x06, 0x00, 0x04, 0x01, 0x08, 0x10, 0x08, 0x08, 0x08, 0x00, 0x08, 0x18, 0x02,
|
||||
0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x10,
|
||||
0x08, 0x08, 0x08, 0x00, 0x08, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
|
||||
0x00, 0x03, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00,
|
||||
0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x52, 0x53, 0x44, 0x20, 0x50, 0x54, 0x52, 0x20,
|
||||
0x59, 0x42, 0x4f, 0x43, 0x48, 0x53, 0x20, 0x00, 0xdc, 0x18, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
}
|
||||
|
||||
mockStrTable = []byte{
|
||||
0x00, 0x2e, 0x73, 0x79, 0x6d, 0x74, 0x61, 0x62, 0x00, 0x2e, 0x73, 0x74, 0x72, 0x74, 0x61, 0x62, // ..symtab..strtab
|
||||
0x00, 0x2e, 0x73, 0x68, 0x73, 0x74, 0x72, 0x74, 0x61, 0x62, 0x00, 0x2e, 0x74, 0x65, 0x78, 0x74, // ..shstrtab..text
|
||||
0x00, 0x2e, 0x72, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x00, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x6c, 0x69, // ..rodata..typeli
|
||||
0x6e, 0x6b, 0x00, 0x2e, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x00, 0x2e, 0x67, 0x6f, // nk..itablink..go
|
||||
0x70, 0x63, 0x6c, 0x6e, 0x74, 0x61, 0x62, 0x00, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x00, 0x2e, 0x6e, // pclntab..data..n
|
||||
0x6f, 0x70, 0x74, 0x72, 0x64, 0x61, 0x74, 0x61, 0x00, 0x2e, 0x62, 0x73, 0x73, 0x00, 0x2e, 0x6e, // optrdata..bss..n
|
||||
0x6f, 0x70, 0x74, 0x72, 0x62, 0x73, 0x73, 0x00, 0x2e, 0x67, 0x6f, 0x72, 0x65, 0x64, 0x69, 0x72, // optrbss..goredir
|
||||
0x65, 0x63, 0x74, 0x73, 0x74, 0x62, 0x6c, 0x00, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x2e, 0x67, 0x6f, // ectstbl..note.go
|
||||
0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x64, 0x00, 0x2e, 0x74, 0x62, 0x73, 0x73, 0x00, 0x2e, // .buildid..tbss..
|
||||
0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x00, 0x2e, 0x64, // debug_aranges..d
|
||||
0x65, 0x62, 0x75, 0x67, 0x5f, 0x70, 0x75, 0x62, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x00, 0x2e, 0x64, // ebug_pubnames..d
|
||||
0x65, 0x62, 0x75, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x00, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, // ebug_info..debug
|
||||
0x5f, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x00, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x6c, // _abbrev..debug_l
|
||||
0x69, 0x6e, 0x65, 0x00, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, // ine..debug_frame
|
||||
0x00, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x6c, 0x6f, 0x63, 0x00, 0x2e, 0x64, 0x65, 0x62, // ..debug_loc..deb
|
||||
0x75, 0x67, 0x5f, 0x70, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x73, 0x00, // ug_pubtypes.
|
||||
}
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user