Started simX

This commit is contained in:
felsabbagh3
2019-11-10 01:21:09 -05:00
parent ea7bd485ca
commit fbf708e419
192 changed files with 28093 additions and 368 deletions

0
simX/BUGS Normal file
View File

12
simX/LICENSE Normal file
View File

@@ -0,0 +1,12 @@
Copyright (c) 2011, Georgia Institute of Technology
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

29
simX/Makefile Normal file
View File

@@ -0,0 +1,29 @@
################################################################################
# HARPtools by Chad D. Kersey, Summer 2011 #
################################################################################
CXXFLAGS ?= -std=c++11 -fPIC -O3 # -g -DUSE_DEBUG=3 -DPRINT_ACTIVE_THREADS
LIB_OBJS=simX.cpp args.cpp mem.cpp core.cpp instruction.cpp enc.cpp util.cpp
INCLUDE=-I. -I../rtl/shared_memory -I../rtl/cache -I../rtl/interfaces -Isimulate -I../rtl
FILE=cache_simX.v
COMP=--compiler gcc
LIB=
CF=-CFLAGS '-std=c++11 -fPIC -O3'
LIGHTW=-Wno-UNOPTFLAT -Wno-BLKLOOPINIT
EXE=--exe $(LIB_OBJS)
all: simX
# simX:
# g++ $(LDFLAGS) $(LIB_OBJS) -o simX.run
simX:
verilator $(COMP) -cc $(FILE) $(INCLUDE) $(EXE) $(LIB) $(CF) $(LIGHTW)
(cd obj_dir && make -j -f Vcache_simX.mk OPT='-DVL_DEBUG' VL_DEBUG=1 DVL_DEBUG=1)
clean:
rm -rf *~ \#* *.o *.a *.so include/*~ include/\#* simX.run obj_dir

14
simX/WISHLIST Normal file
View File

@@ -0,0 +1,14 @@
- Anonymous chunks whose names are not saved by the object writer.
- 32-bit instruction encoding for larger-pointered architecture versions.
- HOFDump mode for HARPTool/HOFTool
- Make operation information tables into member functions of Instruction, if
possible.
- Anonymous assigned values in the assembler.
- References (pointers) as .word directive contents in the assembler.
- Instruction validation before encoding.
- Make readError in obj.cpp throw something instead of printing a message and
exiting.
- Limit checking for byte/word encoders (e.g. 255 pRegs, 256 regs for byte)
- Eliminate the tmp_buf nonsense from the chunk encoder.
- Loosen arch restrictions imposed for interoperability (the number of lanes is
typically unimportant)

52
simX/args.cpp Normal file
View File

@@ -0,0 +1,52 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include "include/args.h"
#include <iostream>
#include <string>
using namespace HarpTools;
using std::string;
std::string CommandLineArg::helpString;
std::map<string, CommandLineArg *> CommandLineArg::longArgs;
std::map<string, CommandLineArg *> CommandLineArg::shortArgs;
CommandLineArg::CommandLineArg(string s, string l, const char *helpText)
{
helpString += helpText;
longArgs[l] = this;
shortArgs[s] = this;
}
CommandLineArg::CommandLineArg(string l, const char *helpText) {
helpString += helpText;
longArgs[l] = this;
}
void CommandLineArg::readArgs(int argc, char **argv) {
for (int i = 0; i < argc; i++) {
std::map<string, CommandLineArg *>::iterator
s = shortArgs.find(std::string(argv[i])),
l = longArgs.find(std::string(argv[i]));
if (s != shortArgs.end()) {
i += s->second->read(argc - i, &argv[i]);
} else if (l != longArgs.end()) {
i += l->second->read(argc - i, &argv[i]);
} else {
throw BadArg(string(argv[i]));
}
}
}
void CommandLineArg::clearArgs() {
shortArgs.clear();
longArgs.clear();
helpString = "";
}
void CommandLineArg::showHelp(std::ostream &os) {
os << helpString;
}

126
simX/cache_simX.v Normal file
View File

@@ -0,0 +1,126 @@
`include "../rtl/VX_define.v"
module cache_simX (
input wire clk, // Clock
input wire reset,
// Icache
input wire[31:0] in_icache_pc_addr,
input wire in_icache_valid_pc_addr,
output wire out_icache_stall,
// Dcache
input wire[2:0] in_dcache_mem_read,
input wire[2:0] in_dcache_mem_write,
input wire in_dcache_in_valid[`NT_M1:0],
input wire[31:0] in_dcache_in_address[`NT_M1:0],
output wire out_dcache_stall
);
//////////////////// ICACHE ///////////////////
VX_icache_request_inter VX_icache_req;
assign VX_icache_req.pc_address = in_icache_pc_addr;
assign VX_icache_req.out_cache_driver_in_mem_read = (in_icache_valid_pc_addr) ? `LW_MEM_READ : `NO_MEM_READ;
assign VX_icache_req.out_cache_driver_in_mem_write = `NO_MEM_WRITE;
assign VX_icache_req.out_cache_driver_in_valid = in_icache_valid_pc_addr;
assign VX_icache_req.out_cache_driver_in_data = 0;
VX_icache_response_inter VX_icache_rsp;
assign out_icache_stall = VX_icache_rsp.delay;
VX_dram_req_rsp_inter #(
.NUMBER_BANKS(`ICACHE_BANKS),
.NUM_WORDS_PER_BLOCK(`ICACHE_NUM_WORDS_PER_BLOCK)
) VX_dram_req_rsp_icache();
reg icache_i_m_ready;
assign VX_dram_req_rsp_icache.i_m_ready = icache_i_m_ready;
//////////////////// DCACHE ///////////////////
VX_dcache_request_inter VX_dcache_req;
assign VX_dcache_req.out_cache_driver_in_mem_read = in_dcache_mem_read;
assign VX_dcache_req.out_cache_driver_in_mem_write = in_dcache_mem_write;
assign VX_dcache_req.out_cache_driver_in_data = 0;
genvar curr_t;
for (curr_t = 0; curr_t < `NT; curr_t=curr_t+1)
begin
assign VX_dcache_req.out_cache_driver_in_address[curr_t] = in_dcache_in_address[curr_t];
assign VX_dcache_req.out_cache_driver_in_valid[curr_t] = in_dcache_in_valid[curr_t];
end
VX_dcache_response_inter VX_dcache_rsp;
assign out_dcache_stall = VX_dcache_rsp.delay;
VX_dram_req_rsp_inter #(
.NUMBER_BANKS(`DCACHE_BANKS),
.NUM_WORDS_PER_BLOCK(`DCACHE_NUM_WORDS_PER_BLOCK)
) VX_dram_req_rsp();
reg dcache_i_m_ready;
assign VX_dram_req_rsp.i_m_ready = dcache_i_m_ready;
VX_dmem_controller dmem_controller (
.clk (clk),
.reset (reset),
.VX_dram_req_rsp (VX_dram_req_rsp),
.VX_dram_req_rsp_icache(VX_dram_req_rsp_icache),
.VX_icache_req (VX_icache_req),
.VX_icache_rsp (VX_icache_rsp),
.VX_dcache_req (VX_dcache_req),
.VX_dcache_rsp (VX_dcache_rsp)
);
always @(posedge clk, posedge reset) begin
if (reset)
begin
icache_i_m_ready <= 0;
dcache_i_m_ready <= 0;
end else begin
if (VX_dram_req_rsp_icache.o_m_valid) begin
icache_i_m_ready <= 1;
end else if (icache_i_m_ready) begin
icache_i_m_ready <= 0;
end else begin
icache_i_m_ready <= 0;
end
if (VX_dram_req_rsp.o_m_valid) begin
dcache_i_m_ready <= 1;
end else if (dcache_i_m_ready) begin
dcache_i_m_ready <= 0;
end else begin
dcache_i_m_ready <= 0;
end
end
end
endmodule

286
simX/core.cpp Normal file
View File

@@ -0,0 +1,286 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <iomanip>
// #define USE_DEBUG 7
// #define PRINT_ACTIVE_THREADS
#include "include/types.h"
#include "include/util.h"
#include "include/archdef.h"
#include "include/mem.h"
#include "include/enc.h"
#include "include/core.h"
#include "include/debug.h"
#ifdef EMU_INSTRUMENTATION
#include "include/qsim-harp.h"
#endif
using namespace Harp;
using namespace std;
#ifdef EMU_INSTRUMENTATION
void Harp::reg_doRead(Word cpuId, Word regNum) {
Harp::OSDomain::osDomain->do_reg(cpuId, regNum, 8, true);
}
void Harp::reg_doWrite(Word cpuId, Word regNum) {
Harp::OSDomain::osDomain->do_reg(cpuId, regNum, 8, false);
}
#endif
Core::Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id):
a(a), iDec(d), mem(mem), steps(0)
{
cache_simulator = new Vcache_simX;
for (unsigned i = 0; i < a.getNWarps(); ++i)
w.push_back(Warp(this, i));
w[0].activeThreads = 1;
w[0].spawned = true;
}
bool Core::interrupt(Word r0) {
w[0].interrupt(r0);
}
void Core::step()
{
this->fetch();
}
void Core::fetch()
{
++steps;
#ifdef PRINT_ACTIVE_THREADS
cout << endl << "Threads:";
#endif
for (unsigned i = 0; i < w.size(); ++i) {
if (w[i].activeThreads) {
trace_inst_t trace_inst;
trace_inst.valid_inst = false;
trace_inst.pc = 0;
trace_inst.wid = i;
trace_inst.rs1 = -1;
trace_inst.rs2 = -1;
trace_inst.rd = -1;
trace_inst.is_lw = false;
trace_inst.is_sw = false;
trace_inst.mem_addresses = new unsigned[a.getNThds()];
trace_inst.mem_stall_cycles = 0;
trace_inst.fetch_stall_cycles = 0;
trace_inst.stall_warp = false;
D(3, "Core step stepping warp " << i << '[' << w[i].activeThreads << ']');
w[i].step(&trace_inst);
D(3, "Now " << w[i].activeThreads << " active threads in " << i);
D(-1, "********************************");
D(-1, "*** valid: " << trace_inst.valid_inst << " pc: " << hex << trace_inst.pc << dec << " rs1..rs2..rd " << trace_inst.rs1 << ".." << trace_inst.rs2 << ".." << trace_inst.rd << "\n");
D(-1, "********************************");
}
#ifdef PRINT_ACTIVE_THREADS
for (unsigned j = 0; j < w[i].tmask.size(); ++j) {
if (w[i].activeThreads > j && w[i].tmask[j]) cout << " 1";
else cout << " 0";
if (j != w[i].tmask.size()-1 || i != w.size()-1) cout << ',';
}
#endif
}
#ifdef PRINT_ACTIVE_THREADS
cout << endl;
#endif
}
void Core::decode()
{
}
void Core::scheduler()
{
}
void Core::gpr_read()
{
}
void Core::execute_unit()
{
}
void Core::load_store()
{
}
bool Core::running() const {
for (unsigned i = 0; i < w.size(); ++i)
if (w[i].running()) return true;
return false;
}
void Core::printStats() const {
unsigned long insts = 0;
for (unsigned i = 0; i < w.size(); ++i)
insts += w[i].insts;
cout << "Total steps: " << steps << endl;
cout << "Total insts: " << insts << endl;
for (unsigned i = 0; i < w.size(); ++i) {
cout << "=== Warp " << i << " ===" << endl;
w[i].printStats();
}
}
Warp::Warp(Core *c, Word id) :
core(c), pc(0x80000000), interruptEnable(true),
supervisorMode(true), activeThreads(0), reg(0), pred(0),
shadowReg(core->a.getNRegs()), shadowPReg(core->a.getNPRegs()), id(id),
spawned(false), steps(0), insts(0), loads(0), stores(0)
{
D(3, "Creating a new thread with PC: " << hex << this->pc << '\n');
/* Build the register file. */
Word regNum(0);
for (Word j = 0; j < core->a.getNThds(); ++j) {
reg.push_back(vector<Reg<Word> >(0));
for (Word i = 0; i < core->a.getNRegs(); ++i) {
reg[j].push_back(Reg<Word>(id, regNum++));
}
pred.push_back(vector<Reg<bool> >(0));
for (Word i = 0; i < core->a.getNPRegs(); ++i) {
pred[j].push_back(Reg<bool>(id, regNum++));
}
bool act = false;
if (j == 0) act = true;
tmask.push_back(act);
shadowTmask.push_back(act);
}
Word csrNum(0);
for (Word i = 0; i < (1<<12); i++)
{
csr.push_back(Reg<uint16_t>(id, regNum++));
}
/* Set initial register contents. */
reg[0][0] = (core->a.getNThds()<<(core->a.getWordSize()*8 / 2)) | id;
}
void Warp::step(trace_inst_t * trace_inst) {
Size fetchPos(0), decPos, wordSize(core->a.getWordSize());
vector<Byte> fetchBuffer(wordSize);
if (activeThreads == 0) return;
++steps;
D(3, "in step pc=0x" << hex << pc);
// std::cout << "pc: " << hex << pc << "\n";
trace_inst->pc = pc;
/* Fetch and decode. */
if (wordSize < sizeof(pc)) pc &= ((1ll<<(wordSize*8))-1);
Instruction *inst;
bool fetchMore;
fetchMore = false;
unsigned fetchSize(wordSize - (pc+fetchPos)%wordSize);
fetchBuffer.resize(fetchPos + fetchSize);
Word fetched = core->mem.fetch(pc + fetchPos, supervisorMode);
writeWord(fetchBuffer, fetchPos, fetchSize, fetched);
decPos = 0;
inst = core->iDec.decode(fetchBuffer, decPos, trace_inst);
D(3, "Fetched at 0x" << hex << pc);
D(3, "0x" << hex << pc << ": " << *inst);
// Update pc
pc += decPos;
// Execute
inst->executeOn(*this);
// At Debug Level 3, print debug info after each instruction.
#ifdef USE_DEBUG
if (USE_DEBUG >= 3) {
D(3, "Register state:");
for (unsigned i = 0; i < reg[0].size(); ++i) {
D_RAW(" %r" << setfill(' ') << setw(2) << dec << i << ':');
for (unsigned j = 0; j < reg.size(); ++j)
D_RAW(' ' << setfill('0') << setw(8) << hex << reg[j][i] << setfill(' ') << ' ');
D_RAW('(' << shadowReg[i] << ')' << endl);
}
D(3, "Thread mask:");
D_RAW(" ");
for (unsigned i = 0; i < tmask.size(); ++i) D_RAW(tmask[i] << ' ');
D_RAW(endl);
D_RAW(endl);
D_RAW(endl);
}
#endif
// Clean up.
delete inst;
}
bool Warp::interrupt(Word r0) {
if (!interruptEnable) return false;
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->do_int(0, r0);
#endif
shadowActiveThreads = activeThreads;
shadowTmask = tmask;
shadowInterruptEnable = interruptEnable; /* For traps. */
shadowSupervisorMode = supervisorMode;
for (Word i = 0; i < reg[0].size(); ++i) shadowReg[i] = reg[0][i];
for (Word i = 0; i < pred[0].size(); ++i) shadowPReg[i] = pred[0][i];
for (Word i = 0; i < reg.size(); ++i) tmask[i] = 1;
shadowPc = pc;
activeThreads = 1;
interruptEnable = false;
supervisorMode = true;
reg[0][0] = r0;
pc = core->interruptEntry;
return true;
}
void Warp::printStats() const {
cerr << "Steps : " << steps << endl
<< "Insts : " << insts << endl
<< "Loads : " << loads << endl
<< "Stores: " << stores << endl;
unsigned const grade = reg[0][28];
if (grade == 1) cerr << "GRADE: PASSED\n";
else cerr << "GRADE: FAILED " << (grade >> 1) << "\n";
}

234
simX/enc.cpp Normal file
View File

@@ -0,0 +1,234 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <string>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <vector>
#include "include/debug.h"
#include "include/types.h"
#include "include/util.h"
#include "include/enc.h"
#include "include/archdef.h"
#include "include/instruction.h"
using namespace std;
using namespace Harp;
// ByteDecoder::ByteDecoder(const ArchDef &ad) {
// wordSize = ad.getWordSize();
// }
static void decodeError(string msg) {
cout << "Instruction decoder error: " << msg << '\n';
exit(1);
}
static unsigned ceilLog2(RegNum x) {
unsigned z = 0;
bool nonZeroInnerValues(false);
if (x == 0) return 0;
while (x != 1) {
z++;
if (x&1) nonZeroInnerValues = true;
x >>= 1;
}
if (nonZeroInnerValues) z++;
return z;
}
WordDecoder::WordDecoder(const ArchDef &arch) {
inst_s = arch.getWordSize() * 8;
opcode_s = 7;
reg_s = 5;
func3_s = 3;
shift_opcode = 0;
shift_rd = opcode_s;
shift_func3 = opcode_s + reg_s;
shift_rs1 = opcode_s + reg_s + func3_s;
shift_rs2 = opcode_s + reg_s + func3_s + reg_s;
shift_func7 = opcode_s + reg_s + func3_s + reg_s + reg_s;
shift_j_u_immed = opcode_s + reg_s;
shift_s_b_immed = opcode_s + reg_s + func3_s + reg_s + reg_s;
shift_i_immed = opcode_s + reg_s + func3_s + reg_s;
reg_mask = 0x1f;
func3_mask = 0x7;
func7_mask = 0x7f;
opcode_mask = 0x7f;
i_immed_mask = 0xfff;
s_immed_mask = 0xfff;
b_immed_mask = 0x1fff;
u_immed_mask = 0xfffff;
j_immed_mask = 0xfffff;
}
static Word signExt(Word w, Size bit, Word mask) {
if (w>>(bit-1)) w |= ~mask;
return w;
}
Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx, trace_inst_t * trace_inst) {
Word code(readWord(v, idx, inst_s/8));
// std::cout << "code: " << (int) code << " v: " << v << " indx: " << idx << "\n";
Instruction &inst = * new Instruction();
// bool predicated = (code>>(n-1));
bool predicated = false;
if (predicated) { inst.setPred((code>>(inst_s-p-1))&pMask); }
Opcode op = (Opcode)((code>>shift_opcode)&opcode_mask);
// std::cout << "opcode: " << op << "\n";
inst.setOpcode(op);
bool usedImm(false);
Word imeed, dest_bits, imm_bits, bit_11, bits_4_1, bit_10_5,
bit_12, bits_19_12, bits_10_1, bit_20, unordered, func3;
// std::cout << "op: " << std::hex << op << " what " << instTable[op].iType << "\n";
switch(instTable[op].iType)
{
case InstType::N_TYPE:
break;
case InstType::R_TYPE:
inst.setPred((code>>shift_rs1) & reg_mask);
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
inst.setFunc7 ((code>>shift_func7) & func7_mask);
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
trace_inst->rd = ((code>>shift_rd) & reg_mask);
break;
case InstType::I_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setFunc7 ((code>>shift_func7) & func7_mask);
func3 = (code>>shift_func3) & func3_mask;
inst.setFunc3 (func3);
if ((func3 == 5) && (op != L_INST))
{
// std::cout << "func7: " << func7 << "\n";
inst.setSrcImm(signExt(((code>>shift_rs2)&reg_mask), 5, reg_mask));
}
else
{
inst.setSrcImm(signExt(code>>shift_i_immed, 12, i_immed_mask));
}
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rd = ((code>>shift_rd) & reg_mask);
break;
case InstType::S_TYPE:
// std::cout << "************STORE\n";
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
dest_bits = (code>>shift_rd) & reg_mask;
imm_bits = (code>>shift_s_b_immed & func7_mask);
imeed = (imm_bits << reg_s) | dest_bits;
// std::cout << "ENC: store imeed: " << imeed << "\n";
inst.setSrcImm(signExt(imeed, 12, s_immed_mask));
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
break;
case InstType::B_TYPE:
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
dest_bits = (code>>shift_rd) & reg_mask;
imm_bits = (code>>shift_s_b_immed & func7_mask);
bit_11 = dest_bits & 0x1;
bits_4_1 = dest_bits >> 1;
bit_10_5 = imm_bits & 0x3f;
bit_12 = imm_bits >> 6;
imeed = 0 | (bits_4_1 << 1) | (bit_10_5 << 5) | (bit_11 << 11) | (bit_12 << 12);
inst.setSrcImm(signExt(imeed, 13, b_immed_mask));
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
break;
case InstType::U_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcImm(signExt(code>>shift_j_u_immed, 20, u_immed_mask));
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rd = ((code>>shift_rd) & reg_mask);
break;
case InstType::J_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
// [20 | 10:1 | 11 | 19:12]
unordered = code>>shift_j_u_immed;
bits_19_12 = unordered & 0xff;
bit_11 = (unordered>>8) & 0x1;
bits_10_1 = (unordered >> 9) & 0x3ff;
bit_20 = (unordered>>19) & 0x1;
imeed = 0 | (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20);
inst.setSrcImm(signExt(imeed, 20, j_immed_mask));
usedImm = true;
trace_inst->valid_inst = true;
trace_inst->rd = ((code>>shift_rd) & reg_mask);
break;
defualt:
cout << "Unrecognized argument class in word decoder.\n";
exit(1);
}
if (haveRefs && usedImm && refMap.find(idx-n/8) != refMap.end()) {
Ref *srcRef = refMap[idx-n/8];
/* Create a new ref tied to this instruction. */
Ref *r = new SimpleRef(srcRef->name, *(Addr*)inst.setSrcImm(),
inst.hasRelImm());
inst.setImmRef(*r);
}
D(2, "Decoded 0x" << hex << code << " into: " << inst << '\n');
return &inst;
}

116
simX/include/archdef.h Normal file
View File

@@ -0,0 +1,116 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ARCHDEF_H
#define __ARCHDEF_H
#include <string>
#include <sstream>
#include <cstdlib>
#include <stdio.h>
#include "types.h"
namespace Harp {
class ArchDef {
public:
struct Undefined {};
ArchDef(const std::string &s) {
std::istringstream iss(s.c_str());
wordSize = 4;
encChar = 'w';
nRegs = 32;
nPRegs = 0;
nThds = 8;
nWarps = 8;
extent = EXT_WARPS;
// if (!iss) { extent = EXT_NULL; return; }
// iss >> encChar;
// if (!iss) { extent = EXT_WORDSIZE; return; }
// iss >> nRegs;
// if (!iss) { extent = EXT_ENC; return; }
// char sep;
// iss >> sep >> nPRegs;
// if (!iss || sep != '/') { extent = EXT_REGS; return; }
// iss >> sep >> nThds;
// if (!iss || sep != '/') { extent = EXT_PREGS; return; }
// iss >> sep >> nWarps;
// if (!iss || sep != '/') { extent = EXT_THDS; return; }
// extent = EXT_WARPS;
}
operator std::string () const {
if (extent == EXT_NULL) return "";
std::ostringstream oss;
if (extent >= EXT_WORDSIZE) oss << wordSize;
if (extent >= EXT_ENC ) oss << encChar;
if (extent >= EXT_REGS ) oss << nRegs;
if (extent >= EXT_PREGS ) oss << '/' << nPRegs;
if (extent >= EXT_THDS ) oss << '/' << nThds;
if (extent >= EXT_WARPS ) oss << '/' << nWarps;
return oss.str();
}
bool operator==(const ArchDef &r) const {
Extent minExtent(r.extent > extent ? extent : r.extent);
// Can't be equal if we can't specify a binary encoding at all.
if (minExtent < EXT_PREGS) return false;
if (minExtent >= EXT_WORDSIZE) { if (wordSize!=r.wordSize) return false; }
if (minExtent >= EXT_ENC ) { if (encChar != r.encChar) return false; }
if (minExtent >= EXT_REGS ) { if (nRegs != r.nRegs) return false; }
if (minExtent >= EXT_PREGS ) { if (nPRegs != r.nPRegs) return false; }
if (minExtent >= EXT_THDS ) { if (nThds != r.nThds) return false; }
if (minExtent >= EXT_WARPS ) { if (nWarps != r.nWarps) return false; }
return true;
}
bool operator!=(const ArchDef &r) const { return !(*this == r); }
Size getWordSize() const {
if (extent < EXT_WORDSIZE) throw Undefined(); else return wordSize;
}
char getEncChar() const {
if (extent<EXT_ENC||encChar=='x') throw Undefined(); else return encChar;
}
RegNum getNRegs() const {
if (extent < EXT_REGS) throw Undefined(); else return nRegs;
}
RegNum getNPRegs() const {
if (extent < EXT_PREGS) throw Undefined(); else return nPRegs;
}
ThdNum getNThds() const {
if (extent < EXT_THDS) throw Undefined(); else return nThds;
}
ThdNum getNWarps() const {
if (extent < EXT_WARPS) throw Undefined(); else return nWarps;
}
private:
enum Extent {
EXT_NULL, EXT_WORDSIZE, EXT_ENC, EXT_REGS, EXT_PREGS, EXT_THDS, EXT_WARPS
};
Extent extent;
Size wordSize;
ThdNum nThds, nWarps;
RegNum nRegs, nPRegs;
char encChar;
};
};
#endif

61
simX/include/args.h Normal file
View File

@@ -0,0 +1,61 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ARGS_H
#define __ARGS_H
#include <iostream>
#include <string>
#include <sstream>
#include <map>
namespace HarpTools {
struct BadArg { BadArg(std::string s) : arg(s) {} std::string arg; };
class CommandLineArg {
public:
CommandLineArg(std::string s, std::string l, const char *helpText);
CommandLineArg(std::string l, const char *helpText);
virtual int read(int argc, char** argv) = 0;
static void readArgs(int argc, char **argv);
static void clearArgs();
static void showHelp(std::ostream &os);
private:
static std::string helpString;
static std::map<std::string, CommandLineArg *> longArgs;
static std::map<std::string, CommandLineArg *> shortArgs;
};
template <typename T> class CommandLineArgSetter : public CommandLineArg {
public:
CommandLineArgSetter(std::string s, std::string l, const char *ht, T &x) :
CommandLineArg(s, l, ht), x(x) {}
CommandLineArgSetter(std::string l, const char *ht, T &x) :
CommandLineArg(l, ht), x(x) {}
int read(int argc, char **argv) {
std::istringstream iss(argv[1]);
iss >> x;
return 1;
}
private:
T &x;
};
class CommandLineArgFlag : public CommandLineArg {
public:
CommandLineArgFlag(std::string s, std::string l, const char *ht, bool &x) :
CommandLineArg(s, l, ht), x(x) { x = false; }
CommandLineArgFlag(std::string l, const char *ht, bool &x) :
CommandLineArg(l, ht), x(x) { x = false; }
int read(int argc, char **argv) { x = true; return 0; }
private:
bool &x;
};
};
#endif

16
simX/include/asm-tokens.h Normal file
View File

@@ -0,0 +1,16 @@
#ifndef HARPTOOL_ASM_TOKENS
#define HARPTOOL_ASM_TOKENS
namespace HarpTools {
enum AsmTokens {
ASM_T_DIR_DEF = 1, ASM_T_DIR_PERM, ASM_T_DIR_BYTE, ASM_T_DIR_WORD,
ASM_T_DIR_SPACE, ASM_T_DIR_STRING, ASM_T_DIR_ALIGN, ASM_T_DIR_ENTRY,
ASM_T_DIR_GLOBAL, ASM_T_DIR_ARG_NUM, ASM_T_DIR_ARG_STRING,
ASM_T_DIR_ARG_SYM, ASM_T_DIR_ARG_R, ASM_T_DIR_ARG_W, ASM_T_DIR_ARG_X,
ASM_T_DIR_END, ASM_T_LABEL, ASM_T_PRED, ASM_T_INST,
ASM_T_PREG, ASM_T_REG, ASM_T_REG_RA, ASM_T_REG_SP,
ASM_T_REG_FP, ASM_T_LIT, ASM_T_SYM, ASM_T_PEXP
};
};
#endif

166
simX/include/core.h Normal file
View File

@@ -0,0 +1,166 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __CORE_H
#define __CORE_H
#include <string>
#include <vector>
#include <stack>
#include <map>
#include <set>
#include "types.h"
#include "archdef.h"
#include "enc.h"
#include "mem.h"
#include "debug.h"
#include "Vcache_simX.h"
#include "verilated.h"
#ifdef VCD_OUTPUT
#include <verilated_vcd_c.h>
#endif
#include "trace.h"
namespace Harp {
#ifdef EMU_INSTRUMENTATION
void reg_doWrite(Word cpuId, Word regNum);
void reg_doRead(Word cpuId, Word regNum);
#endif
template <typename T> class Reg {
public:
Reg(): cpuId(0), regNum(0), val(0) {}
Reg(Word c, Word n): cpuId(c), regNum(n), val(0) {}
Reg &operator=(T r) { if (regNum) {val = r; doWrite();} return *this; }
operator T() const { doRead(); return val; }
void trunc(Size s) {
Word mask((~0ull >> (sizeof(Word)-s)*8));
val &= mask;
}
private:
Word cpuId, regNum;
T val;
#ifdef EMU_INSTRUMENTATION
/* Access size here is 8, representing the register size of 64-bit cores. */
void doWrite() const { reg_doWrite(cpuId, regNum); }
void doRead() const { reg_doRead(cpuId, regNum); }
#else
void doWrite() const {}
void doRead() const {}
#endif
};
// Entry in the IPDOM Stack
struct DomStackEntry {
DomStackEntry(
unsigned p, const std::vector<std::vector<Reg<Word> > >& m,
std::vector<bool> &tm, Word pc
): pc(pc), fallThrough(false), uni(false)
{
std::cout << "DomStackEntry TMASK: ";
for (unsigned i = 0; i < m.size(); ++i)
{
std::cout << " " << (!bool(m[i][p]) && tm[i]);
tmask.push_back(!bool(m[i][p]) && tm[i]);
}
std::cout << "\n";
}
DomStackEntry(const std::vector<bool> &tmask):
tmask(tmask), fallThrough(true), uni(false) {}
bool fallThrough;
bool uni;
std::vector<bool> tmask;
Word pc;
};
class Warp;
class Core {
public:
Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id=0);
Vcache_simX * cache_simulator;
bool interrupt(Word r0);
bool running() const;
void fetch();
void decode();
void scheduler();
void gpr_read();
void execute_unit();
void load_store();
void step();
void printStats() const;
const ArchDef &a;
Decoder &iDec;
MemoryUnit &mem;
Word interruptEntry;
unsigned long steps;
std::vector<Warp> w;
std::map<Word, std::set<Warp *> > b; // Barriers
};
class Warp {
public:
Warp(Core *c, Word id=0);
void step(trace_inst_t *);
bool interrupt(Word r0);
bool running() const { return activeThreads; }
#ifdef EMU_INSTRUMENTATION
bool getSupervisorMode() const { return supervisorMode; }
#endif
void printStats() const;
struct MemAccess {
MemAccess(bool w, Word a): wr(w), addr(a) {}
bool wr;
Word addr;
};
std::vector<MemAccess> memAccesses;
// private:
Core *core;
Word pc, shadowPc, id;
Size activeThreads, shadowActiveThreads;
std::vector<std::vector<Reg<Word> > > reg;
std::vector<std::vector<Reg<bool> > > pred;
std::vector<Reg<uint16_t> > csr;
std::vector<bool> tmask, shadowTmask;
std::stack<DomStackEntry> domStack;
std::vector<Word> shadowReg;
std::vector<bool> shadowPReg;
bool interruptEnable, shadowInterruptEnable, supervisorMode,
shadowSupervisorMode, spawned;
unsigned long steps, insts, loads, stores;
friend class Instruction;
};
};
#endif

30
simX/include/debug.h Normal file
View File

@@ -0,0 +1,30 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Spring 2013
*******************************************************************************/
#ifndef __DEBUG_H
#define __DEBUG_H
// #define USE_DEBUG 9
#define USE_DEBUG -1
#ifdef USE_DEBUG
#include <iostream>
#define D(lvl, x) do { \
using namespace std; \
if ((lvl) <= USE_DEBUG) { \
cout << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \
<< x << endl; \
} \
} while(0)
#define D_RAW(x) do { \
std::cout << x; \
} while (0)
#else
#define D(lvl, x) do {} while(0)
#endif
#endif

73
simX/include/enc.h Normal file
View File

@@ -0,0 +1,73 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ENC_H
#define __ENC_H
#include <map>
#include "types.h"
#include "instruction.h"
#include "obj.h"
#include "trace.h"
// } trace_inst_t;
namespace Harp {
class DataChunk;
class TextChunk;
class Ref;
class Encoder {
public:
Encoder() {}
virtual ~Encoder() {}
virtual Size encode(Ref *&ref, std::vector<Byte> &v, Size n,
Instruction &i) = 0;
void encodeChunk(DataChunk &dest, const TextChunk &src);
};
class Decoder {
public:
Decoder() : haveRefs(false) {}
Decoder(const std::vector<Ref*> &refVec) : haveRefs(true) {
setRefs(refVec);
}
virtual ~Decoder() {}
void setRefs(const std::vector<Ref*> &);
void clearRefs() { refMap.clear(); }
virtual Instruction *decode(const std::vector<Byte> &v, Size &n, trace_inst_t * trace_inst) = 0;
virtual Instruction *decode(const std::vector<Byte> &v, Size &n) = 0;
void decodeChunk(TextChunk &dest, const DataChunk &src);
protected:
bool haveRefs;
std::map <Size, Ref*> refMap;
};
class WordDecoder : public Decoder {
public:
WordDecoder(const ArchDef &);
virtual Instruction *decode(const std::vector<Byte> &v, Size &n, trace_inst_t * trace_inst);
virtual Instruction *decode(const std::vector<Byte> &v, Size &n) {printf("Not implemented\n");}
private:
Size n, o, r, p, i1, i2, i3;
Word oMask, rMask, pMask, i1Mask, i2Mask, i3Mask;
// FARES
Size inst_s, opcode_s, reg_s, func3_s;
Size shift_opcode, shift_rd, shift_rs1, shift_rs2, shift_func3, shift_func7;
Size shift_j_u_immed, shift_s_b_immed, shift_i_immed;
Word reg_mask, func3_mask, func7_mask, opcode_mask, i_immed_mask,
s_immed_mask, b_immed_mask, u_immed_mask, j_immed_mask;
};
};
#endif

123
simX/include/harpfloat.h Normal file
View File

@@ -0,0 +1,123 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <math.h>
#include <stdlib.h>
#include "types.h"
#ifdef DEBUG
#include <iostream>
#define DEBUGMSG(x) do { \
std::cout << __FILE__ << ':' <<__LINE__ << ": " << x << '\n'; \
} while(0)
#else
#define DEBUGMSG(x) do { } while(0)
#endif
namespace Harp {
// This class serves to handle the strange-precision floating point that can
// crop up in HARP.
class Float {
public:
Float(Word_u bin, Size n): sz(n) {
DEBUGMSG("Float(0x" << std::hex << bin << ", " << std::dec << n << ')');
bool sign(bin >> (n*8 - 1));
Size expSz;
if (n < 4) {
expSz = 5;
} else if (n < 8) {
expSz = 8;
} else {
expSz = 11;
}
Size sigSz = n*8 - expSz - 1;
DEBUGMSG(" exp: " << std::dec << expSz <<
" bits, sig: " << std::dec << sigSz << " bits.");
int exp = (bin >> sigSz) & ((1<<expSz) - 1);
Word_u sig = bin & ((1llu<<sigSz) - 1);
DEBUGMSG(" sig=" << std::dec << sig << " exp=" << exp);
if (exp == 0) {
// Subnormal
d = sig / pow(2, ((1<<(expSz-1))-2)) / pow(2, sigSz);
DEBUGMSG(" Denorm.");
} else if (exp == ((1<<expSz) - 1)) {
// Infinity
d = HUGE_VAL;
DEBUGMSG(" Inf.");
} else {
// Normalized, implied 1.
exp -= (1<<(expSz - 1)) - 1;
d = pow(2.0, exp - int(sigSz)) * double((1ll << sigSz) + sig);
DEBUGMSG(" Norm, exp=" << exp);
}
if (sign) d = -d;
DEBUGMSG("Set to " << d);
}
Float(double d, Size n): sz(n), d(d) { DEBUGMSG("Float(double, size)"); }
operator Word_u() {
DEBUGMSG("Float -> Word_u: " << d);
Size expSz;
if (sz < 4) {
expSz = 5;
} else if (sz < 8) {
expSz = 8;
} else {
expSz = 11;
}
Size sigSz = 8*sz - expSz - 1;
bool sign(d < 0);
bool inf(isinf(d)), zero(d == 0.0);
int exp;
if (!inf && !zero) exp = floor(log2(fabs(d)));
Word_u rval;
if (inf) {
// Infinity
DEBUGMSG(" Inf.");
rval = ((1llu<<expSz)-1llu)<<sigSz;
} else if (!zero && abs(exp) < (1<<(expSz-1)) - 1) {
// Normalized with implied 1.
Word_u sig = (fabs(d) * pow(2.0, -exp) - 1.0) * pow(2.0, sigSz);
DEBUGMSG(" Norm, exp=" << exp << ", sig=" << sig);
rval = ((((exp + ((1llu<<(expSz-1)) - 1llu))
&((1llu<<expSz)-1llu)))<<sigSz) | sig;
} else if (!zero && exp > -(1<<(expSz-1)) - sigSz) {
// Subnormal number.
Word_u sig = round(fabs(d)*pow(2.0,((1<<(expSz-1))-2))*pow(2.0, sigSz));
DEBUGMSG(" Denorm, exp=" << exp << ", sig=" << sig);
rval = sig;
} else {
// Zero.
rval = 0;
}
if (sign) rval |= 1llu<<(sz*8 - 1);
DEBUGMSG(" Returning 0x" << std::hex << rval);
return rval;
}
operator double() { DEBUGMSG("Float->double " << d); return d; }
private:
double d;
Size sz;
};
};

37
simX/include/help.h Normal file
View File

@@ -0,0 +1,37 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __HELP_H
#define __HELP_H
/* Help messages. */
namespace HarpTools {
namespace Help {
const char *mainHelp =
"--help, -h, no arguments\n"
" Print this message.\n"
"-E, --emu; -A, --asm; -L, --ld; -D, --disasm\n"
" Invoke the emulator, assembler, linker, and disassembler, "
"respectively.\n"
"<mode> --help\n"
" Display contextual help.\n",
*emuHelp = "HARP Emulator command line arguments:\n"
" -c, --core <filename> RAM image\n"
" -a, --arch <arch string> Architecture string\n"
" -s, --stats Print stats on exit.\n"
" -b, --basic Disable virtual memory.\n"
" -i, --batch Disable console input.\n",
*asmHelp = "HARP Assembler command line arguments:\n"
" -a, --arch <arch string>\n"
" -o, --output <filename>\n",
*ldHelp = "HARP Linker command line arguments:\n"
" -o, --output <filename>\n"
" -a, --arch <filename>\n"
" -f, --format <foramt string>\n"
" --offset <bytes>\n",
*disasmHelp = "HARP Disassembler command line arguments:\n"
" -a, --arch <arch string> Architecture string.\n"
" -o, --output <filename> Output filename.\n";
};
};
#endif

144
simX/include/instruction.h Normal file
View File

@@ -0,0 +1,144 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __INSTRUCTION_H
#define __INSTRUCTION_H
#include <map>
#include <iostream>
#include "types.h"
namespace Harp {
class Warp;
class Ref;
enum Opcode
{
NOP = 0,
R_INST = 51,
L_INST = 3,
I_INST = 19,
S_INST = 35,
B_INST = 99,
LUI_INST = 55,
AUIPC_INST = 23,
JAL_INST = 111,
JALR_INST = 103,
SYS_INST = 115,
TRAP = 0x7f,
FENCE = 0x0f,
PJ_INST = 0x7b,
GPGPU = 0x6b
};
enum InstType { N_TYPE, R_TYPE, I_TYPE, S_TYPE, B_TYPE, U_TYPE, J_TYPE};
// We build a table of instruction information out of this.
struct InstTableEntry_t {
const char *opString;
bool controlFlow, relAddress, allSrcArgs, privileged;
InstType iType;
};
static std::map<int, struct InstTableEntry_t> instTable =
{
{Opcode::NOP, {"nop" , false, false, false, false, InstType::N_TYPE }},
{Opcode::R_INST, {"r_type", false, false, false, false, InstType::R_TYPE }},
{Opcode::L_INST, {"load" , false, false, false, false, InstType::I_TYPE }},
{Opcode::I_INST, {"i_type", false, false, false, false, InstType::I_TYPE }},
{Opcode::S_INST, {"store" , false, false, false, false, InstType::S_TYPE }},
{Opcode::B_INST, {"branch", true , false, false, false, InstType::B_TYPE }},
{Opcode::LUI_INST, {"lui" , false, false, false, false, InstType::U_TYPE }},
{Opcode::AUIPC_INST, {"auipc" , false, false, false, false, InstType::U_TYPE }},
{Opcode::JAL_INST, {"jal" , true , false, false, false, InstType::J_TYPE }},
{Opcode::JALR_INST, {"jalr" , true , false, false, false, InstType::I_TYPE }},
{Opcode::SYS_INST, {"SYS" , true , false, false, false, InstType::I_TYPE }},
{Opcode::TRAP, {"TRAP" , true , false, false, false, InstType::I_TYPE }},
{Opcode::FENCE, {"fence" , true , false, false, false, InstType::I_TYPE }},
{Opcode::PJ_INST, {"pred j", true , false, false, false, InstType::R_TYPE }},
{Opcode::GPGPU, {"gpgpu" , false, false, false, false, InstType::R_TYPE }}
};
static const Size MAX_REG_SOURCES(3);
static const Size MAX_PRED_SOURCES(2);
class Instruction;
struct DivergentBranchException {};
struct DomainException {};
std::ostream &operator<<(std::ostream &, Instruction &);
class Instruction {
public:
Instruction() :
predicated(false), nRsrc(0), nPsrc(0), immsrcPresent(false),
rdestPresent(false), pdestPresent(false), refLiteral(NULL)
{
}
void executeOn(Warp &warp);
friend std::ostream &operator<<(std::ostream &, Instruction &);
/* Setters used to "craft" the instruction. */
void setOpcode (Opcode opc) { op = opc; }
void setPred (RegNum pReg) { predicated = true; pred = pReg; }
void setDestReg (RegNum destReg) { rdestPresent = true; rdest = destReg; }
void setSrcReg (RegNum srcReg) { rsrc[nRsrc++] = srcReg; }
void setFunc3 (Word func3) { this->func3 = func3; }
void setFunc7 (Word func7) { this->func7 = func7; }
void setDestPReg(RegNum dPReg) { pdestPresent = true; pdest = dPReg; }
void setSrcPReg (RegNum srcPReg) { psrc[nPsrc++] = srcPReg; }
Word *setSrcImm () { immsrcPresent = true; immsrc = 0xa5; return &immsrc;}
void setSrcImm (Word srcImm) { immsrcPresent = true; immsrc = srcImm; }
void setImmRef (Ref &r) { refLiteral = &r; }
/* Getters used by encoders. */
Opcode getOpcode() const { return op; }
bool hasPred() const { return predicated; }
RegNum getPred() const { return pred; }
RegNum getNRSrc() const { return nRsrc; }
RegNum getRSrc(RegNum i) const { return rsrc[i]; }
RegNum getNPSrc() const { return nPsrc; }
RegNum getPSrc(RegNum i) const { return psrc[i]; }
bool hasRDest() const { return rdestPresent; }
RegNum getRDest() const { return rdest; }
bool hasPDest() const { return pdestPresent; }
RegNum getPDest() const { return pdest; }
bool hasImm() const { return immsrcPresent; }
Word getImm() const { return immsrc; }
bool hasRefLiteral() const { return refLiteral != NULL; }
Ref *getRefLiteral() const { return refLiteral; }
/* Getters used as table lookup. */
bool hasRelImm() const { return (*(instTable.find(op))).second.relAddress; }
private:
bool predicated;
RegNum pred;
Opcode op;
int nRsrc, nPsrc;
RegNum rsrc[MAX_REG_SOURCES], psrc[MAX_PRED_SOURCES];
bool immsrcPresent;
Word immsrc;
Word func3;
Word func7;
bool rdestPresent, pdestPresent;
RegNum rdest, pdest;
Ref *refLiteral;
public:
};
};
#endif
// static struct InstTableEntry {
// const char *opString;
// bool controlFlow, relAddress, allSrcArgs, privileged;
// InstType iType;
// };

432
simX/include/mem.h Normal file
View File

@@ -0,0 +1,432 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __MEM_H
#define __MEM_H
#include <ostream>
#include <vector>
#include <queue>
#include <map>
#include <pthread.h>
#include "types.h"
namespace Harp {
void *consoleInputThread(void *);
struct BadAddress {};
class MemDevice {
public:
virtual ~MemDevice() {}
virtual Size size() const = 0;
virtual Word read(Addr) = 0;
virtual void write(Addr, Word) = 0;
virtual Byte *base() { return NULL; } /* Null if unavailable. */
};
class RamMemDevice : public MemDevice {
public:
RamMemDevice(Size size, Size wordSize);
RamMemDevice(const char* filename, Size wordSize);
~RamMemDevice() {}
virtual Size size() const { return contents.size(); };
virtual Word read(Addr);
virtual void write(Addr, Word);
virtual Byte *base() { return &contents[0]; }
protected:
Size wordSize;
std::vector<Byte> contents;
};
class RomMemDevice : public RamMemDevice {
public:
RomMemDevice(const char* filename, Size wordSize) :
RamMemDevice(filename, wordSize) {}
RomMemDevice(Size size, Size wordSize) :
RamMemDevice(size, wordSize) {}
~RomMemDevice();
virtual void write(Addr, Word);
};
class Core;
class ConsoleMemDevice : public MemDevice {
public:
ConsoleMemDevice(Size wS, std::ostream &o, Core &core, bool batch = false);
~ConsoleMemDevice() {}
//virtual Size wordSize() const { return wordSize; }
virtual Size size() const { return wordSize; }
virtual Word read(Addr) { pthread_mutex_lock(&cBufLock);
char c = cBuf.front();
cBuf.pop();
pthread_mutex_unlock(&cBufLock);
return Word(c); }
virtual void write(Addr a, Word w) { output << char(w); }
void poll();
friend void *Harp::consoleInputThread(void *);
private:
std::ostream &output;
Size wordSize;
Core &core;
std::queue<char> cBuf;
pthread_mutex_t cBufLock;
};
class DiskControllerMemDevice : public MemDevice {
public:
DiskControllerMemDevice(Size wordSize, Size blockSize, Core &c) :
wordSize(wordSize), blockSize(blockSize), core(c), disks() {}
void addDisk(Byte *file, Size n) { disks.push_back(Disk(file, n)); }
virtual Size size() const { return wordSize * 6; }
virtual Word read(Addr);
virtual void write(Addr, Word);
private:
Word curDisk, curBlock, nBlocks, physAddr, command, status;
enum Status { OK = 0, INVALID_DISK, INVALID_BLOCK };
struct Disk {
Disk(Byte *f, Size n): file(f), blocks(n) {}
Byte *file;
Size blocks;
};
std::vector <Disk> disks;
Core &core;
Size wordSize, blockSize;;
};
class MemoryUnit {
public:
MemoryUnit(Size pageSize, Size addrBytes, bool disableVm = false) :
pageSize(pageSize), addrBytes(addrBytes), ad(), disableVm(disableVm)
{
if (!disableVm)
tlb[0] = TLBEntry(0, 077);
}
void attach(MemDevice &m, Addr base);
//Size wordSize();
struct PageFault {
PageFault(Addr a, bool nf) : faultAddr(a), notFound(nf) {}
Addr faultAddr;
bool notFound;
}; /* Thrown on page fault. */
Word read(Addr, bool sup); /* For data accesses. */
Word fetch(Addr, bool sup); /* For instruction accesses. */
Byte *getPtr(Addr, Size);
void write(Addr, Word, bool sup, Size);
void tlbAdd(Addr virt, Addr phys, Word flags);
void tlbRm(Addr va);
void tlbFlush() { tlb.clear(); }
#ifdef EMU_INSTRUMENTATION
Addr virtToPhys(Addr va);
#endif
private:
class ADecoder {
public:
ADecoder() : zeroChild(NULL), oneChild(NULL), range(0) {}
ADecoder(MemDevice &md, Size range) :
zeroChild(NULL), oneChild(NULL), range(range), md(&md) {}
Byte *getPtr(Addr a, Size sz, Size wordSize);
Word read(Addr a, bool sup, Size wordSize);
void write(Addr a, Word w, bool sup, Size wordSize);
void map(Addr a, MemDevice &md, Size range, Size bit);
private:
MemDevice &doLookup(Addr a, Size &bit);
ADecoder *zeroChild, *oneChild;
MemDevice *md;
Size range;
};
ADecoder ad;
struct TLBEntry {
TLBEntry() {}
TLBEntry(Word pfn, Word flags): pfn(pfn), flags(flags) {}
Word flags;
Word pfn;
};
std::map<Addr, TLBEntry> tlb;
TLBEntry tlbLookup(Addr vAddr, Word flagMask);
Size pageSize, addrBytes;
bool disableVm;
};
class RAM : public MemDevice {
public:
uint8_t* mem[1 << 12];
RAM(){
for(uint32_t i = 0;i < (1 << 12);i++) mem[i] = NULL;
}
~RAM(){
for(uint32_t i = 0;i < (1 << 12);i++) if(mem[i]) delete [] mem[i];
}
void clear(){
for(uint32_t i = 0;i < (1 << 12);i++)
{
if(mem[i])
{
delete mem[i];
mem[i] = NULL;
}
}
}
uint8_t* get(uint32_t address){
if(mem[address >> 20] == NULL) {
uint8_t* ptr = new uint8_t[1024*1024];
for(uint32_t i = 0;i < 1024*1024;i+=4) {
ptr[i + 0] = 0xaa;
ptr[i + 1] = 0xbb;
ptr[i + 2] = 0xcc;
ptr[i + 3] = 0xdd;
}
mem[address >> 20] = ptr;
}
return &mem[address >> 20][address & 0xFFFFF];
}
void read(uint32_t address,uint32_t length, uint8_t *data){
for(unsigned i = 0;i < length;i++){
data[i] = (*this)[address + i];
}
}
void write(uint32_t address,uint32_t length, uint8_t *data){
for(unsigned i = 0;i < length;i++){
(*this)[address + i] = data[i];
}
}
virtual Size size() const { return (1<<31); };
void getBlock(uint32_t address, uint8_t *data)
{
uint32_t block_number = address & 0xffffff00; // To zero out block offset
uint32_t bytes_num = 256;
this->read(block_number, bytes_num, data);
}
void getWord(uint32_t address, uint32_t * data)
{
data[0] = 0;
uint8_t first = *get(address + 0);
uint8_t second = *get(address + 1);
uint8_t third = *get(address + 2);
uint8_t fourth = *get(address + 3);
// std::cout << std::hex;
// std::cout << "RAM: READING ADDRESS " << address + 0 << " DATA: " << (uint32_t) first << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 1 << " DATA: " << (uint32_t) second << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 2 << " DATA: " << (uint32_t) third << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 3 << " DATA: " << (uint32_t) fourth << "\n";
data[0] = (data[0] << 0) | fourth;
data[0] = (data[0] << 8) | third;
data[0] = (data[0] << 8) | second;
data[0] = (data[0] << 8) | first;
// data[0] = (data[0] << 0) | first;
// data[0] = (data[0] << 8) | second;
// data[0] = (data[0] << 8) | third;
// data[0] = (data[0] << 8) | fourth;
// std::cout << "FINAL DATA: " << data[0] << "\n";
}
void writeWord(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
for (int i = 0; i < 4; i++)
{
// std::cout << "RAM: DATA TO WRITE " << data_to_write << "\n";
// std::cout << "RAM: DATA TO MASK " << byte_mask << "\n";
// std::cout << "RAM: WRITING ADDRESS " << address + i << " DATA: " << (data_to_write & byte_mask) << "\n";
(*this)[address + i] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
}
void writeHalf(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
for (int i = 0; i < 2; i++)
{
// std::cout << "RAM: DATA TO WRITE " << data_to_write << "\n";
// std::cout << "RAM: DATA TO MASK " << byte_mask << "\n";
// std::cout << "RAM: WRITING ADDRESS " << address + i << " DATA: " << (data_to_write & byte_mask) << "\n";
(*this)[address + i] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
}
void writeByte(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
(*this)[address] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
uint8_t& operator [](uint32_t address) {
return *get(address);
}
virtual void write(Addr addr, Word w)
{
uint32_t word = (uint32_t) w;
writeWord(addr, &word);
}
virtual Word read(Addr addr)
{
uint32_t w;
getWord(addr, &w);
// std::cout << "RAM: read -> " << w << " at addr: " << addr << "\n";
return (Word) w;
}
virtual Byte *base()
{
return (Byte *) this->get(0);
}
// MEMORY UTILS
uint32_t hti_old(char c) {
if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
return c - '0';
}
uint32_t hToI_old(char *c, uint32_t size) {
uint32_t value = 0;
for (uint32_t i = 0; i < size; i++) {
value += hti_old(c[i]) << ((size - i - 1) * 4);
}
return value;
}
void loadHexImpl(std::string path) {
this->clear();
FILE *fp = fopen(&path[0], "r");
if(fp == 0){
std::cout << path << " not found" << std::endl;
}
//Preload 0x0 <-> 0x80000000 jumps
((uint32_t*)this->get(0))[0] = 0xf1401073;
((uint32_t*)this->get(0))[1] = 0xf1401073;
// ((uint32_t*)this->get(0))[1] = 0xf1401073;
((uint32_t*)this->get(0))[2] = 0x30101073;
((uint32_t*)this->get(0))[3] = 0x800000b7;
((uint32_t*)this->get(0))[4] = 0x000080e7;
((uint32_t*)this->get(0x80000000))[0] = 0x00000097;
((uint32_t*)this->get(0xb0000000))[0] = 0x01C02023;
// F00FFF10
((uint32_t*)this->get(0xf00fff10))[0] = 0x12345678;
fseek(fp, 0, SEEK_END);
uint32_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
char* content = new char[size];
int x = fread(content, 1, size, fp);
if (!x) { std::cout << "COULD NOT READ FILE\n"; exit(1);}
int offset = 0;
char* line = content;
// std::cout << "WHTA\n";
while (1) {
if (line[0] == ':') {
uint32_t byteCount = hToI_old(line + 1, 2);
uint32_t nextAddr = hToI_old(line + 3, 4) + offset;
uint32_t key = hToI_old(line + 7, 2);
switch (key) {
case 0:
for (uint32_t i = 0; i < byteCount; i++) {
unsigned add = nextAddr + i;
*(this->get(add)) = hToI_old(line + 9 + i * 2, 2);
// std::cout << "lhi: Address: " << std::hex <<(add) << "\tValue: " << std::hex << hToI_old(line + 9 + i * 2, 2) << std::endl;
}
break;
case 2:
// cout << offset << endl;
offset = hToI_old(line + 9, 4) << 4;
break;
case 4:
// cout << offset << endl;
offset = hToI_old(line + 9, 4) << 16;
break;
default:
// cout << "??? " << key << endl;
break;
}
}
while (*line != '\n' && size != 0) {
line++;
size--;
}
if (size <= 1)
break;
line++;
size--;
}
if (content) delete[] content;
}
};
};
#endif

210
simX/include/obj.h Normal file
View File

@@ -0,0 +1,210 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __OBJ_H
#define __OBJ_H
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <stdlib.h>
#include "types.h"
#include "archdef.h"
#include "instruction.h"
#include "enc.h"
#include "asm-tokens.h"
namespace Harp {
class Decoder;
class Encoder;
class Ref {
public:
std::string name;
Ref(const std::string &n, bool r, Size ib = 0):
name(n), bound(false), relative(r), ibase(ib) { }
virtual ~Ref() { }
virtual void bind(Addr addr, Addr base = 0) = 0;
virtual Addr getAddr() const = 0;
bool bound, relative;
Size ibase;
};
/* Used in not-yet-encoded code objects, plain old data. */
class SimpleRef : public Ref {
public:
SimpleRef(const std::string &name, Addr &addr, bool rel = false) :
Ref(name, rel), addr(addr) { }
virtual void bind(Addr addr, Addr base = 0) {
std::cout << "Attempted to bind a SimpleRef.\n";
exit(1);
}
virtual Addr getAddr() const { return this->addr; }
Byte *getAddrPtr() { return (Byte*)&addr; }
private:
Addr &addr;
};
// /* Used in already-encoded code objects. */
// class OffsetRef : public Ref {
// public:
// OffsetRef(
// const std::string &name, std::vector<Byte> &v, Size offset, Size bits,
// Size ws, bool rel = false, Size ibase = 0
// ) : Ref(name, rel, ibase), data(v), offset(offset), bits(bits), wordSize(ws)
// {}
// virtual void bind(Addr addr, Addr base = 0) {
// Size bytes(bits/8), remainder(bits%8);
// if (relative) {
// addr = addr - base;
// Word_s addr_s(addr);
// if ((addr_s >> bits) != ~0ull && (addr_s >> bits) != 0) goto noFit;
// } else {
// Addr mask = (1ull<<bits)-1;
// if (addr > mask) goto noFit;
// }
// { Byte mask((1ull<<remainder) - 1);
// Size i;
// for (i = 0; i < bytes; i++) {
// data[offset+i] = addr & 0xff;
// addr >>= 8;
// }
// data[offset+i] &= ~mask;
// data[offset+i] |= (addr&mask);
// bound = true;
// }
// return;
// noFit:
// std::cout << "Attempt to bind a " << bits << "-bit "
// << (relative?"":"non-") << "relative symbol to an address"
// " it cannot reach.\n";
// exit(1);
// }
// virtual Addr getAddr() const {
// Size bytes = bits/8, remainder = bits%8;
// Byte mask((1<<remainder)-1);
// Addr a(data[offset]&mask);
// for (Size i = 0; i < bytes-1; i++) {
// a |= data[offset + bytes - i - 1];
// a <<= 8;
// }
// return a;
// }
// Size getOffset() const { return offset; }
// Size getBits() const { return bits; }
// private:
// std::vector<Byte> &data;
// Size offset, bits, wordSize;
// };
// class Chunk {
// public:
// Chunk(std::string n, Size a = 0, Word f = 0) :
// name(n), alignment(a), bound(false), flags(f), global(false) {}
// virtual ~Chunk() { for (Size i = 0; i < refs.size(); i++) delete refs[i]; }
// void bind(Addr a) { address = a; bound = true; }
// void setGlobal() { global = true; }
// bool isGlobal() const { return global; }
// std::string name;
// Size alignment;
// bool bound, global;
// Addr address;
// Word flags;
// std::vector<Ref*> refs;
// };
// class TextChunk : public Chunk {
// public:
// TextChunk(std::string n, Size a = 0, Word f = 0)
// : Chunk(n, a, f), instructions() {}
// ~TextChunk() {
// for (Size i = 0; i < instructions.size(); i++) delete instructions[i];
// }
// std::vector<Instruction*> instructions;
// };
// class DataChunk : public Chunk {
// public:
// DataChunk(std::string n, Size a = 0, Word f = 0)
// : Chunk(n, a, f), size(0), contents() {}
// Size size;
// std::vector<Byte> contents; /* 0 to size bytes in length. */
// };
// class Obj {
// public:
// ~Obj() { for (Size i = 0; i < chunks.size(); i++) delete chunks[i]; }
// std::vector<Chunk*> chunks;
// Size entry;
// };
// class DynObj : public Obj {
// public:
// std::vector<std::string> deps;
// };
// class ObjReader {
// public:
// virtual Obj *read(std::istream &input) = 0;
// private:
// };
// class ObjWriter {
// public:
// virtual void write(std::ostream &output, const Obj &o) = 0;
// private:
// };
// class AsmReader : public ObjReader {
// public:
// AsmReader(ArchDef arch) :
// wordSize(arch.getWordSize()), nRegs(arch.getNRegs()) {}
// virtual Obj *read(std::istream &input);
// private:
// Size wordSize, nRegs;
// // Operand type sequences indexed by argument class
// enum ArgType {AT_END, AT_REG, AT_PREG, AT_LIT};
// static ArgType operandtype_table[][4]; // ArgClass -> ArgType[arg_idx]
// };
// class HOFReader : public ObjReader {
// public:
// HOFReader(ArchDef &arch) : arch(arch) {}
// Obj *read(std::istream &input);
// private:
// const ArchDef &arch;
// };
// class AsmWriter : public ObjWriter {
// public:
// AsmWriter(ArchDef arch): wordSize(arch.getWordSize()) {}
// virtual void write(std::ostream &output, const Obj &obj);
// private:
// Size wordSize;
// };
// class HOFWriter : public ObjWriter {
// public:
// HOFWriter(ArchDef &arch) : arch(arch) {}
// virtual void write(std::ostream &output, const Obj &obj);
// private:
// const ArchDef &arch;
// };
};
#endif

169
simX/include/qsim-harp.h Normal file
View File

@@ -0,0 +1,169 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef EMU_INSTRUMENTATION
#define EMU_INSTRUMENTATION
#endif
#ifndef __QSIM_HARP_H
#define __QSIM_HARP_H
#include "types.h"
#include "core.h"
#include "enc.h"
#include "instruction.h"
#include "mem.h"
#include "obj.h"
#include "archdef.h"
#include <stdint.h>
#include <iostream>
#include <vector>
#include <string>
#include <qsim.h>
namespace Harp {
class OSDomain {
public:
OSDomain(Harp::ArchDef &arch, std::string imgFile);
bool idle(unsigned i) const { return cpus[i].idle(); }
int get_tid(unsigned i) const { return cpus[i].get_tid(); }
bool get_prot(unsigned i) const { return cpus[i].get_prot(); }
int get_n() const { return cpus.size(); }
uint64_t run(unsigned i, uint64_t n) { return cpus[i].run(n); }
void connect_console(std::ostream &s);
void timer_interrupt() { /* TODO: timer convention */ }
void interrupt(unsigned i, int vec) { cpus[i].interrupt(vec); }
bool booted(unsigned i) const { return cpus[i].booted(); }
void save_state(const char* state_file);
template <typename T>
void set_atomic_cb
(T *p, typename Qsim::OSDomain::atomic_cb_obj<T>::atomic_cb_t f)
{
atomic_cbs.push_back(new Qsim::OSDomain::atomic_cb_obj<T>(p, f));
}
template <typename T>
void set_inst_cb
(T* p, typename Qsim::OSDomain::inst_cb_obj<T>::inst_cb_t f)
{
inst_cbs.push_back(new Qsim::OSDomain::inst_cb_obj<T>(p, f));
}
template <typename T>
void set_int_cb
(T *p, typename Qsim::OSDomain::int_cb_obj<T>::int_cb_t f)
{
int_cbs.push_back(new Qsim::OSDomain::int_cb_obj<T>(p, f));
}
template <typename T>
void set_mem_cb
(T *p, typename Qsim::OSDomain::mem_cb_obj<T>::mem_cb_t f)
{
mem_cbs.push_back(new Qsim::OSDomain::mem_cb_obj<T>(p, f));
}
template <typename T>
void set_magic_cb
(T *p, typename Qsim::OSDomain::magic_cb_obj<T>::magic_cb_t f)
{
magic_cbs.push_back(new Qsim::OSDomain::magic_cb_obj<T>(p, f));
}
template <typename T>
void set_io_cb
(T *p, typename Qsim::OSDomain::io_cb_obj<T>::io_cb_t f)
{ /* Do nothing. We have no separate IO address space. */ }
template <typename T>
void set_reg_cb
(T *p, typename Qsim::OSDomain::reg_cb_obj<T>::reg_cb_t f)
{
reg_cbs.push_back(new Qsim::OSDomain::reg_cb_obj<T>(p, f));
}
template <typename T> void mem_rd(T& d, uint64_t paddr);
template <typename T> void mem_rd_virt(unsigned i, T& d, uint64_t vaddr);
template <typename T> void mem_wr(T& d, uint64_t paddr);
template <typename T> void mem_wr_virt(unsigned i, T& d, uint64_t vaddr);
static OSDomain *osDomain;
bool do_atomic(unsigned c) {
bool rval(false);
for (unsigned i = 0; i < atomic_cbs.size(); ++i)
if ((*atomic_cbs[i])(c)) rval = true;
return rval;
}
void do_inst(unsigned c, uint64_t va, uint64_t pa, uint8_t l,
const uint8_t *b, enum inst_type t)
{
for (unsigned i = 0; i < inst_cbs.size(); ++i)
(*inst_cbs[i])(c, va, pa, l, b, t);
}
void do_int(unsigned c, int v) {
for (unsigned i = 0; i < int_cbs.size(); ++i)
(*int_cbs[i])(c, v);
}
void do_mem(unsigned c, uint64_t va, uint64_t pa, uint8_t s, bool w) {
for (unsigned i = 0; i < mem_cbs.size(); ++i)
(*mem_cbs[i])(c, va, pa, s, w);
}
bool do_magic(unsigned c, uint64_t r0) {
bool rval(false);
for (unsigned i = 0; i < magic_cbs.size(); ++i)
if ((*magic_cbs[i])(c, r0)) rval = true;
return rval;
}
void do_reg(unsigned c, int r, uint8_t s, bool w) {
for (unsigned i = 0; i < reg_cbs.size(); ++i)
(*reg_cbs[i])(c, r, s, w);
}
private:
class Cpu {
public:
Cpu(Harp::OSDomain &osd);
Cpu(): dec(NULL), core(NULL) {}
~Cpu() { if (dec) delete dec; if (core) delete core; }
bool idle() const { return false; }
int get_tid() const { return 0; }
bool get_prot() const { return core->getSupervisorMode(); }
uint64_t run(uint64_t n);
void interrupt(int vec) { core->interrupt(vec); }
bool booted() const { return core->running(); }
Harp::OSDomain *osd;
Harp::Decoder *dec;
Harp::Core *core;
};
Harp::ArchDef arch;
Harp::MemoryUnit mu;
Harp::RamMemDevice ram;
Harp::ConsoleMemDevice *console;
std::vector <Harp::OSDomain::Cpu> cpus;
std::vector <Qsim::OSDomain::atomic_cb_obj_base*> atomic_cbs;
std::vector <Qsim::OSDomain::inst_cb_obj_base*> inst_cbs;
std::vector <Qsim::OSDomain::int_cb_obj_base*> int_cbs;
std::vector <Qsim::OSDomain::mem_cb_obj_base*> mem_cbs;
std::vector <Qsim::OSDomain::magic_cb_obj_base*> magic_cbs;
std::vector <Qsim::OSDomain::reg_cb_obj_base*> reg_cbs;
};
};
#endif

33
simX/include/trace.h Normal file
View File

@@ -0,0 +1,33 @@
#pragma once
namespace Harp {
typedef struct
{
// Warp step
bool valid_inst;
unsigned pc;
// Core scheduler
int wid;
// Encoder
int rs1;
int rs2;
int rd;
// Instruction execute
bool is_lw;
bool is_sw;
unsigned * mem_addresses;
// dmem interface
int mem_stall_cycles;
int fetch_stall_cycles;
// Instruction execute
bool stall_warp;
} trace_inst_t;
}

25
simX/include/types.h Normal file
View File

@@ -0,0 +1,25 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __TYPES_H
#define __TYPES_H
#include <stdint.h>
namespace Harp {
typedef uint8_t Byte;
typedef uint32_t Word;
typedef uint32_t Word_u;
typedef int32_t Word_s;
typedef Word_u Addr;
typedef Word_u Size;
typedef unsigned RegNum;
typedef unsigned ThdNum;
enum MemFlags {RD_USR = 1, WR_USR = 2, EX_USR = 4,
RD_SUP = 8, WR_SUP = 16, EX_SUP = 32};
};
#endif

24
simX/include/util.h Normal file
View File

@@ -0,0 +1,24 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __UTIL_H
#define __UTIL_H
#include <vector>
#include "types.h"
namespace Harp {
Word_u bytesToWord(const Byte *b, Size wordSize);
void wordToBytes(Byte *b, Word_u w, Size wordSize);
Word_u flagsToWord(bool r, bool w, bool x);
void wordToFlags(bool &r, bool &w, bool &x, Word_u f);
class OutOfBytes {};
Byte readByte(const std::vector<Byte> &b, Size &n);
Word_u readWord(const std::vector<Byte> &b, Size &n, Size wordSize);
void writeByte(std::vector<Byte> &p, Size &n, Byte b);
void writeWord(std::vector<Byte> &p, Size &n, Size wordSize, Word w);
};
#endif

887
simX/instruction.cpp Normal file
View File

@@ -0,0 +1,887 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <stdlib.h>
#include "include/instruction.h"
#include "include/obj.h"
#include "include/core.h"
#include "include/harpfloat.h"
#include "include/debug.h"
#ifdef EMU_INSTRUMENTATION
#include "include/qsim-harp.h"
#endif
using namespace Harp;
using namespace std;
/* It is important that this stays consistent with the Harp::Instruction::Opcode
enum. */
ostream &Harp::operator<<(ostream& os, Instruction &inst) {
os << dec;
// if (inst.predicated) {
// os << "@p" << dec << inst.pred << " ? ";
// }
// os << inst.instTable[inst.op].opString << ' ';
// if (inst.rdestPresent) os << "%r" << dec << inst.rdest << ' ';
// if (inst.pdestPresent) os << "@p" << inst.pdest << ' ';
// for (int i = 0; i < inst.nRsrc; i++) {
// os << "%r" << dec << inst.rsrc[i] << ' ';
// }
// for (int i = 0; i < inst.nPsrc; i++) {
// os << "@p" << dec << inst.psrc[i] << ' ';
// }
// if (inst.immsrcPresent) {
// if (inst.refLiteral) os << inst.refLiteral->name;
// else os << "#0x" << hex << inst.immsrc;
// }
os << instTable[inst.op].opString;
os << ';';
return os;
}
bool checkUnanimous(unsigned p, const std::vector<std::vector<Reg<Word> > >& m,
const std::vector<bool> &tm) {
bool same;
unsigned i;
for (i = 0; i < m.size(); ++i) {
if (tm[i]) {
same = m[i][p];
break;
}
}
if (i == m.size()) throw DivergentBranchException();
//std::cout << "same: " << same << " with -> ";
for (; i < m.size(); ++i) {
if (tm[i]) {
//std::cout << " " << (bool(m[i][p]));
if (same != (bool(m[i][p]))) {
//std::cout << " FALSE\n";
return false;
}
}
}
//std::cout << " TRUE\n";
return true;
}
Word signExt(Word w, Size bit, Word mask) {
if (w>>(bit-1)) w |= ~mask;
return w;
}
void Instruction::executeOn(Warp &c) {
D(3, "Begin instruction execute.");
/* If I try to execute a privileged instruction in user mode, throw an
exception 3. */
if (instTable[op].privileged && !c.supervisorMode) {
std::cout << "INTERRUPT SUPERVISOR\n";
c.interrupt(3);
return;
}
// /* Also throw exceptions on non-masked divergent branches. */
// if (instTable[op].controlFlow) {
// Size t, count, active;
// for (t = 0, count = 0, active = 0; t < c.activeThreads; ++t) {
// if ((!predicated || c.pred[t][pred]) && c.tmask[t]) ++count;
// if (c.tmask[t]) ++active;
// }
// if (count != 0 && count != active)
// throw DivergentBranchException();
// }
Size nextActiveThreads = c.activeThreads;
Size wordSz = c.core->a.getWordSize();
Word nextPc = c.pc;
c.memAccesses.clear();
// If we have a load, overwriting a register's contents, we have to make sure
// ahead of time it will not fault. Otherwise we may perform an indirect load
// by mistake.
// if (op == L_INST && rdest == rsrc[0]) {
// for (Size t = 0; t < c.activeThreads; t++) {
// if ((!predicated || c.pred[t][pred]) && c.tmask[t]) {
// Word memAddr = c.reg[t][rsrc[0]] + immsrc;
// c.core->mem.read(memAddr, c.supervisorMode);
// }
// }
// }
bool sjOnce(true), // Has not yet split or joined once.
pcSet(false); // PC has already been set
for (Size t = 0; t < c.activeThreads; t++) {
vector<Reg<Word> > &reg(c.reg[t]);
vector<Reg<bool> > &pReg(c.pred[t]);
stack<DomStackEntry> &domStack(c.domStack);
//std::cout << std::hex << "opcode: " << op << " func3: " << func3 << "\n";
//if (op == GPGPU) //std::cout << "OPCODE MATCHED GPGPU\n";
// If this thread is masked out, don't execute the instruction, unless it's
// a split or join.
// if (((predicated && !pReg[pred]) || !c.tmask[t]) &&
// op != SPLIT && op != JOIN) continue;
bool split = (op == GPGPU) && (func3 == 2);
bool join = (op == GPGPU) && (func3 == 3);
// predicated = (op == GPGPU) && ((func3 == 7) || (func3 == 2));
// bool is_branch = (op == B_INST);
// bool is_jump = (op == JAL_INST) || (op == JALR_INST);
bool is_gpgpu = (op == GPGPU);
bool is_tmc = is_gpgpu && (func3 == 0);
bool is_wspawn = is_gpgpu && (func3 == 1);
bool is_barrier = is_gpgpu && (func3 == 4);
bool is_split = is_gpgpu && (func3 == 2);
bool is_join = is_gpgpu && (func3 == 3);
bool gpgpu_zero = (is_tmc || is_barrier || is_wspawn) && (t != 0);
bool not_active = !c.tmask[t];
if (not_active || gpgpu_zero)
{
continue;
}
// printf("Predicated: %d, split: %d, join: %d\n",predicated, split, join );
// printf("%d && ((%d) || (%d))\n",(op == GPGPU), (func3 == 7), (func3 == 2) );
// cout << "before " << op << " = " << GPGPU << "\n";
// if (((predicated && !reg[pred]) || !c.tmask[t]) && !split && !join)
// {
// // cout << "about to continue\n";
// continue;
// }
// cout << "after\n";
++c.insts;
Word memAddr;
Word shift_by;
Word shamt;
Word temp;
Word data_read;
int op1, op2;
bool m_exten;
// std::cout << "op = " << op << "\n";
// std::cout << "R_INST: " << R_INST << "\n";
int num_to_wspawn;
switch (op) {
case NOP:
//std::cout << "NOP_INST\n";
break;
case R_INST:
// std::cout << "R_INST\n";
m_exten = func7 & 0x1;
if (m_exten)
{
// std::cout << "FOUND A MUL/DIV\n";
switch (func3)
{
case 0:
// MUL
// cout << "MUL\n";
reg[rdest] = ((int) reg[rsrc[0]]) * ((int) reg[rsrc[1]]);
break;
case 1:
// MULH
{
int64_t first = (int64_t) reg[rsrc[0]];
if (reg[rsrc[0]] & 0x80000000)
{
first = first | 0xFFFFFFFF00000000;
}
int64_t second = (int64_t) reg[rsrc[1]];
if (reg[rsrc[1]] & 0x80000000)
{
second = second | 0xFFFFFFFF00000000;
}
// cout << "mulh: " << std::dec << first << " * " << second;
uint64_t result = first * second;
reg[rdest] = ( result >> 32) & 0xFFFFFFFF;
// cout << " = " << result << " or " << reg[rdest] << "\n";
}
break;
case 2:
// MULHSU
{
int64_t first = (int64_t) reg[rsrc[0]];
if (reg[rsrc[0]] & 0x80000000)
{
first = first | 0xFFFFFFFF00000000;
}
int64_t second = (int64_t) reg[rsrc[1]];
reg[rdest] = (( first * second ) >> 32) & 0xFFFFFFFF;
}
break;
case 3:
// MULHU
{
uint64_t first = (uint64_t) reg[rsrc[0]];
uint64_t second = (uint64_t) reg[rsrc[1]];
// cout << "MULHU\n";
reg[rdest] = (( first * second) >> 32) & 0xFFFFFFFF;
}
break;
case 4:
// DIV
if (reg[rsrc[1]] == 0)
{
reg[rdest] = -1;
break;
}
// cout << "dividing: " << dec << ((int) reg[rsrc[0]]) << " / " << ((int) reg[rsrc[1]]);
reg[rdest] = ( (int) reg[rsrc[0]]) / ( (int) reg[rsrc[1]]);
// cout << " = " << ((int) reg[rdest]) << "\n";
break;
case 5:
// DIVU
if (reg[rsrc[1]] == 0)
{
reg[rdest] = -1;
break;
}
reg[rdest] = ((uint32_t) reg[rsrc[0]]) / ((uint32_t) reg[rsrc[1]]);
break;
case 6:
// REM
if (reg[rsrc[1]] == 0)
{
reg[rdest] = reg[rsrc[0]];
break;
}
reg[rdest] = ((int) reg[rsrc[0]]) % ((int) reg[rsrc[1]]);
break;
case 7:
// REMU
if (reg[rsrc[1]] == 0)
{
reg[rdest] = reg[rsrc[0]];
break;
}
reg[rdest] = ((uint32_t) reg[rsrc[0]]) % ((uint32_t) reg[rsrc[1]]);
break;
default:
cout << "unsupported MUL/DIV instr\n";
exit(1);
}
}
else
{
// std::cout << "NORMAL R-TYPE\n";
switch (func3)
{
case 0:
if (func7)
{
reg[rdest] = reg[rsrc[0]] - reg[rsrc[1]];
reg[rdest].trunc(wordSz);
}
else
{
reg[rdest] = reg[rsrc[0]] + reg[rsrc[1]];
reg[rdest].trunc(wordSz);
}
break;
case 1:
reg[rdest] = reg[rsrc[0]] << reg[rsrc[1]];
reg[rdest].trunc(wordSz);
break;
case 2:
if ( int(reg[rsrc[0]]) < int(reg[rsrc[1]]))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 3:
if ( Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]]))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 4:
reg[rdest] = reg[rsrc[0]] ^ reg[rsrc[1]];
break;
case 5:
if (func7)
{
reg[rdest] = int(reg[rsrc[0]]) >> int(reg[rsrc[1]]);
reg[rdest].trunc(wordSz);
}
else
{
reg[rdest] = Word_u(reg[rsrc[0]]) >> Word_u(reg[rsrc[1]]);
reg[rdest].trunc(wordSz);
}
break;
case 6:
reg[rdest] = reg[rsrc[0]] | reg[rsrc[1]];
break;
case 7:
reg[rdest] = reg[rsrc[0]] & reg[rsrc[1]];
break;
default:
cout << "ERROR: UNSUPPORTED R INST\n";
exit(1);
}
}
break;
case L_INST:
//std::cout << "L_INST\n";
memAddr = ((reg[rsrc[0]] + immsrc) & 0xFFFFFFFC);
shift_by = ((reg[rsrc[0]] + immsrc) & 0x00000003) * 8;
data_read = c.core->mem.read(memAddr, c.supervisorMode);
// //std::cout <<std::hex<< "EXECUTE: " << reg[rsrc[0]] << " + " << immsrc << " = " << memAddr << " -> data_read: " << data_read << "\n";
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
#endif
switch (func3)
{
case 0:
// LB
reg[rdest] = signExt((data_read >> shift_by) & 0xFF, 8, 0xFF);
break;
case 1:
// LH
// //std::cout << "shifting by: " << shift_by << " final data: " << ((data_read >> shift_by) & 0xFFFF, 16, 0xFFFF) << "\n";
reg[rdest] = signExt((data_read >> shift_by) & 0xFFFF, 16, 0xFFFF);
break;
case 2:
reg[rdest] = int(data_read & 0xFFFFFFFF);
break;
case 4:
// LBU
reg[rdest] = unsigned((data_read >> shift_by) & 0xFF);
break;
case 5:
reg[rdest] = unsigned((data_read >> shift_by) & 0xFFFF);
break;
default:
cout << "ERROR: UNSUPPORTED L INST\n";
exit(1);
c.memAccesses.push_back(Warp::MemAccess(false, memAddr));
}
break;
case I_INST:
//std::cout << "I_INST\n";
switch (func3)
{
case 0:
// ADDI
reg[rdest] = reg[rsrc[0]] + immsrc;
reg[rdest].trunc(wordSz);
break;
case 2:
// SLTI
if ( int(reg[rsrc[0]]) < int(immsrc))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 3:
// SLTIU
op1 = (unsigned) reg[rsrc[0]];
if ( unsigned(reg[rsrc[0]]) < unsigned(immsrc))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 4:
// XORI
reg[rdest] = reg[rsrc[0]] ^ immsrc;
break;
case 6:
// ORI;
reg[rdest] = reg[rsrc[0]] | immsrc;
break;
case 7:
// ANDI
reg[rdest] = reg[rsrc[0]] & immsrc;
break;
case 1:
// SLLI
reg[rdest] = reg[rsrc[0]] << immsrc;
reg[rdest].trunc(wordSz);
break;
case 5:
if ((func7 == 0))
{
// SRLI
// //std::cout << "WTF\n";
bool isNeg = ((0x80000000 & reg[rsrc[0]])) > 0;
Word result = Word_u(reg[rsrc[0]]) >> Word_u(immsrc);
// if (isNeg)
// {
// Word mask = 0x80000000;
// for (int i = 32; i < Word_u(immsrc); i++)
// {
// result |= mask;
// mask = mask >> 1;
// }
// }
reg[rdest] = result;
reg[rdest].trunc(wordSz);
}
else
{
// SRAI
// //std::cout << "WOHOOOOO\n";
op1 = reg[rsrc[0]];
op2 = immsrc;
reg[rdest] = op1 >> op2;
reg[rdest].trunc(wordSz);
}
break;
default:
cout << "ERROR: UNSUPPORTED L INST\n";
exit(1);
}
break;
case S_INST:
//std::cout << "S_INST\n";
++c.stores;
memAddr = reg[rsrc[0]] + immsrc;
std::cout << "STORE MEM ADDRESS: " << std::hex << reg[rsrc[0]] << " + " << immsrc << "\n";
// //std::cout << "FUNC3: " << func3 << "\n";
if ((memAddr == 0x00010000) && (t == 0))
{
unsigned num = reg[rsrc[1]];
fprintf(stderr, "%c", (char) reg[rsrc[1]]);
break;
}
switch (func3)
{
case 0:
// //std::cout << "SB\n";
c.core->mem.write(memAddr, reg[rsrc[1]] & 0x000000FF, c.supervisorMode, 1);
break;
case 1:
// //std::cout << "SH\n";
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 2);
break;
case 2:
// //std::cout << std::hex << "SW: about to write: " << reg[rsrc[1]] << " to " << memAddr << "\n";
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 4);
break;
default:
cout << "ERROR: UNSUPPORTED S INST\n";
exit(1);
}
c.memAccesses.push_back(Warp::MemAccess(true, memAddr));
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
#endif
break;
case B_INST:
//std::cout << "B_INST\n";
switch (func3)
{
case 0:
// BEQ
if (int(reg[rsrc[0]]) == int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 1:
// BNE
if (int(reg[rsrc[0]]) != int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 4:
// BLT
if (int(reg[rsrc[0]]) < int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 5:
// BGE
if (int(reg[rsrc[0]]) >= int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 6:
// BLTU
if (Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 7:
// BGEU
if (Word_u(reg[rsrc[0]]) >= Word_u(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
}
break;
case LUI_INST:
//std::cout << "LUI_INST\n";
reg[rdest] = (immsrc << 12) & 0xfffff000;
break;
case AUIPC_INST:
//std::cout << "AUIPC_INST\n";
reg[rdest] = ((immsrc << 12) & 0xfffff000) + (c.pc - 4);
break;
case JAL_INST:
//std::cout << "JAL_INST\n";
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
if (!pcSet) {/*std::cout << "JAL... SETTING PC: " << nextPc << "\n"; */}
if (rdest != 0)
{
reg[rdest] = c.pc;
}
pcSet = true;
break;
case JALR_INST:
std::cout << "JALR_INST\n";
if (!pcSet) nextPc = reg[rsrc[0]] + immsrc;
if (!pcSet) {/*std::cout << "JALR... SETTING PC: " << nextPc << "\n";*/ }
if (rdest != 0)
{
reg[rdest] = c.pc;
}
pcSet = true;
break;
case SYS_INST:
//std::cout << "SYS_INST\n";
temp = reg[rsrc[0]];
if (immsrc == 0x20) // ThreadID
{
reg[rdest] = t;
D(2, "CSR Reading tid " << hex << immsrc << dec << " and returning " << reg[rdest]);
} else if (immsrc == 0x21) // WarpID
{
reg[rdest] = c.id;
D(2, "CSR Reading wid " << hex << immsrc << dec << " and returning " << reg[rdest]);
}
// switch (func3)
// {
// case 1:
// // printf("Case 1\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = temp;
// break;
// case 2:
// // printf("Case 2\n");
// if (rdest != 0)
// {
// // printf("Reading from CSR: %d = %d\n", (immsrc & 0x00000FFF), c.csr[immsrc & 0x00000FFF]);
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// // printf("Writing to CSR --> %d = %d\n", immsrc, (temp | c.csr[immsrc & 0x00000FFF]));
// c.csr[immsrc & 0x00000FFF] = temp | c.csr[immsrc & 0x00000FFF];
// break;
// case 3:
// // printf("Case 3\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = temp & (~c.csr[immsrc & 0x00000FFF]);
// break;
// case 5:
// // printf("Case 5\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = rsrc[0];
// break;
// case 6:
// // printf("Case 6\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = rsrc[0] | c.csr[immsrc & 0x00000FFF];
// break;
// case 7:
// // printf("Case 7\n");
// if (rdest != 0)
// {
// reg[rdest] = c.csr[immsrc & 0x00000FFF];
// }
// c.csr[immsrc & 0x00000FFF] = rsrc[0] & (~c.csr[immsrc & 0x00000FFF]);
// break;
// case 0:
// if (immsrc < 2)
// {
// //std::cout << "INTERRUPT ECALL/EBREAK\n";
// nextActiveThreads = 0;
// c.spawned = false;
// // c.interrupt(0);
// }
// break;
// default:
// break;
// }
break;
case TRAP:
//std::cout << "INTERRUPT TRAP\n";
nextActiveThreads = 0;
c.interrupt(0);
break;
case FENCE:
//std::cout << "FENCE_INST\n";
break;
case PJ_INST:
// pred jump reg
//std::cout << "pred jump... src: " << rsrc[0] << std::hex << " val: " << reg[rsrc[0]] << " dest: " << reg[rsrc[1]] << "\n";
if (reg[rsrc[0]])
{
if (!pcSet) nextPc = reg[rsrc[1]];
pcSet = true;
}
break;
case GPGPU:
//std::cout << "GPGPU\n";
switch(func3)
{
case 1:
// WSPAWN
std::cout << "WSPAWN\n";
if (sjOnce)
{
sjOnce = false;
// //std::cout << "SIZE: " << c.core->w.size() << "\n";
num_to_wspawn = reg[rsrc[0]];
D(0, "Spawning " << num_to_wspawn << " new warps at PC: " << hex << reg[rsrc[1]]);
for (unsigned i = 1; i < num_to_wspawn; ++i)
{
// std::cout << "SPAWNING WARP\n";
Warp &newWarp(c.core->w[i]);
// //std::cout << "STARTING\n";
// if (newWarp.spawned == false)
{
// //std::cout << "ABOUT TO START\n";
newWarp.pc = reg[rsrc[1]];
// newWarp.reg[0] = reg;
// newWarp.csr = c.csr;
for (int kk = 0; kk < newWarp.tmask.size(); kk++)
{
if (kk == 0)
{
newWarp.tmask[kk] = true;
}
else
{
newWarp.tmask[kk] = false;
}
}
newWarp.activeThreads = 1;
newWarp.supervisorMode = false;
newWarp.spawned = true;
}
}
break;
}
break;
case 2:
{
// SPLIT
//std::cout << "SPLIT\n";
if (sjOnce)
{
sjOnce = false;
if (checkUnanimous(pred, c.reg, c.tmask)) {
std::cout << "Unanimous pred: " << pred << " val: " << reg[pred] << "\n";
DomStackEntry e(c.tmask);
e.uni = true;
c.domStack.push(e);
break;
}
cout << "Split: Original TM: ";
for (auto y : c.tmask) cout << y << " ";
cout << "\n";
DomStackEntry e(pred, c.reg, c.tmask, c.pc);
c.domStack.push(c.tmask);
c.domStack.push(e);
for (unsigned i = 0; i < e.tmask.size(); ++i)
{
c.tmask[i] = !e.tmask[i] && c.tmask[i];
}
cout << "Split: New TM\n";
for (auto y : c.tmask) cout << y << " ";
cout << "\n";
cout << "Split: Pushed TM PC: " << hex << e.pc << dec << "\n";
for (auto y : e.tmask) cout << y << " ";
cout << "\n";
}
break;
}
case 3:
// JOIN
//std::cout << "JOIN\n";
D(3, "JOIN INSTRUCTION");
if (sjOnce)
{
sjOnce = false;
if (!c.domStack.empty() && c.domStack.top().uni) {
D(2, "Uni branch at join");
printf("NEW DOMESTACK: \n");
c.tmask = c.domStack.top().tmask;
c.domStack.pop();
break;
}
if (!c.domStack.top().fallThrough) {
if (!pcSet) {
nextPc = c.domStack.top().pc;
cout << "join: NOT FALLTHROUGH PC: " << hex << nextPc << dec << '\n';
}
pcSet = true;
}
cout << "Join: Old TM: ";
for (auto y : c.tmask) cout << y << " ";
cout << "\n";
c.tmask = c.domStack.top().tmask;
cout << "Join: New TM: " << '\n';
for (auto y : c.tmask) cout << y << " ";
cout << "\n";
c.domStack.pop();
}
break;
case 4:
// is_barrier
break;
case 0:
// TMC
//std::cout << "JALRS\n";
nextActiveThreads = reg[rsrc[0]];
{
for (int ff = 0; ff < c.tmask.size(); ff++)
{
if (ff < nextActiveThreads)
{
c.tmask[ff] = true;
}
else
{
c.tmask[ff] = false;
}
}
}
if (nextActiveThreads == 0)
{
c.spawned = false;
}
// reg[rdest] = c.pc;
// if (!pcSet) nextPc = reg[rsrc[0]];
// pcSet = true;
// //std::cout << "ACTIVE_THREDS: " << rsrc[1] << " val: " << reg[rsrc[1]] << "\n";
// //std::cout << "nextPC: " << rsrc[0] << " val: " << std::hex << reg[rsrc[0]] << "\n";
break;
default:
cout << "ERROR: UNSUPPORTED GPGPU INSTRUCTION " << *this << "\n";
}
break;
default:
cout << "pc: " << hex << (c.pc) << "\n";
cout << "aERROR: Unsupported instruction: " << *this << "\n" << flush;
exit(1);
}
}
D(3, "End instruction execute.");
c.activeThreads = nextActiveThreads;
// if (nextActiveThreads != 0)
// {
// for (int i = 7; i >= c.activeThreads; i--)
// {
// c.tmask[i] = c.tmask[i] && false;
// }
// }
// //std::cout << "new thread mask: ";
// for (int i = 0; i < c.tmask.size(); ++i) //std::cout << " " << c.tmask[i];
// //std::cout << "\n";
// This way, if pc was set by a side effect (such as interrupt), it will
// retain its new value.
if (pcSet)
{
c.pc = nextPc;
cout << "Next PC: " << hex << nextPc << dec << "\n";
}
if (nextActiveThreads > c.reg.size()) {
cerr << "Error: attempt to spawn " << nextActiveThreads << " threads. "
<< c.reg.size() << " available.\n";
abort();
}
}

284
simX/mem.cpp Normal file
View File

@@ -0,0 +1,284 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <stdlib.h>
#include <pthread.h>
#include "include/debug.h"
#include "include/types.h"
#include "include/util.h"
#include "include/mem.h"
#include "include/core.h"
using namespace std;
using namespace Harp;
RamMemDevice::RamMemDevice(const char *filename, Size wordSize) :
wordSize(wordSize), contents()
{
ifstream input(filename);
if (!input) {
cout << "Error reading file \"" << filename << "\" into RamMemDevice.\n";
exit(1);
}
do { contents.push_back(input.get()); } while (input);
while (contents.size() % wordSize) contents.push_back(0x00);
}
RamMemDevice::RamMemDevice(Size size, Size wordSize) :
contents(size), wordSize(wordSize) {}
void RomMemDevice::write(Addr, Word) {
cout << "Attempt to write to ROM.\n";
exit(1);
}
Word RamMemDevice::read(Addr addr) {
D(2, "RAM read, addr=0x" << hex << addr);
Word w = readWord(contents, addr, wordSize - addr%wordSize);
return w;
}
void RamMemDevice::write(Addr addr, Word w) {
D(2, "RAM write, addr=0x" << hex << addr);
writeWord(contents, addr, wordSize - addr%wordSize, w);
}
MemDevice &MemoryUnit::ADecoder::doLookup(Addr a, Size &bit) {
if (range == 0 || (a&((1ll<<bit)-1)) >= range) {
ADecoder *p(((a>>bit)&1)?oneChild:zeroChild);
if (p) { bit--; return p->doLookup(a, bit); }
else {cout << "lookup of 0x" << hex << a << " failed.\n";
throw BadAddress();}
} else {
return *md;
}
}
void MemoryUnit::ADecoder::map(Addr a, MemDevice &m, Size r, Size bit)
{
if ((1llu << bit) <= r) {
md = &m;
range = m.size();
} else {
ADecoder *&child(((a>>bit)&1)?oneChild:zeroChild);
if (!child) child = new ADecoder();
child->map(a, m, r, bit-1);
}
}
Byte *MemoryUnit::ADecoder::getPtr(Addr a, Size sz, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
a &= (2<<bit)-1;
if (a + sz <= m.size()) return m.base() + a;
return NULL;
}
Word MemoryUnit::ADecoder::read(Addr a, bool sup, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
a &= (2<<bit)-1;
// std::cout << std::hex << "ADecoder::read(Addr " << a << ", sup " << sup << ", wordSize " << wordSize << " -> ";
// std::cout << "Data: " << m.read(a) << "\n";
return m.read(a);
}
void MemoryUnit::ADecoder::write(Addr a, Word w, bool sup, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
RAM & r = (RAM &) m;
// a &= (2<<bit)-1;
// std::cout << std::hex << "ADecoder::write(Addr " << a << ", w " << w << ", sup " << sup << ", wordSize " << wordSize << "\n";
Word before = m.read(a);
Word new_word = w;
// if (a == 0x00010000)
// {
// fprintf(stderr, "%c", w);
// }
if (wordSize == 8)
{
r.writeByte(a, &w);
}
else if (wordSize == 16)
{
r.writeHalf(a, &w);
}
else
{
r.writeWord(a, &w);
}
// m.write(a, new_word);
}
Byte *MemoryUnit::getPtr(Addr a, Size s) {
return ad.getPtr(a, s, addrBytes*8);
}
void MemoryUnit::attach(MemDevice &m, Addr base) {
ad.map(base, m, m.size(), addrBytes*8 - 1);
}
MemoryUnit::TLBEntry MemoryUnit::tlbLookup(Addr vAddr, Word flagMask) {
map<Addr, MemoryUnit::TLBEntry>::iterator i;
if ((i = tlb.find(vAddr/pageSize)) != tlb.end()) {
TLBEntry &t = i->second;
if (t.flags & flagMask) return t;
else {
D(2, "Page fault on addr 0x" << hex << vAddr << "(bad flags)");
throw PageFault(vAddr, false);
}
} else {
D(2, "Page fault on addr 0x" << hex << vAddr << "(not in TLB)");
throw PageFault(vAddr, true);
}
}
#ifdef EMU_INSTRUMENTATION
Addr MemoryUnit::virtToPhys(Addr vAddr) {
TLBEntry t = tlbLookup(vAddr, 077);
return t.pfn*pageSize + vAddr%pageSize;
}
#endif
Word MemoryUnit::read(Addr vAddr, bool sup) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?8:1;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
// std::cout << "MU::write: About to read: " << std::hex << pAddr << " = " << (ad.read(pAddr, sup, 8*addrBytes)) << " with " << std::dec << (8*addrBytes) << "\n";
return ad.read(pAddr, sup, 8*addrBytes);
}
Word MemoryUnit::fetch(Addr vAddr, bool sup) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?32:4;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
Word instruction = ad.read(pAddr, sup, 8*addrBytes);
return instruction;
}
void MemoryUnit::write(Addr vAddr, Word w, bool sup, Size bytes) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?16:2;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
// std::cout << "MU::write: About to write: " << std::hex << pAddr << " = " << w << " with " << std::dec << 8*bytes << "\n";
ad.write(pAddr, w, sup, 8*bytes);
// std::cout << std::hex << "reading same address: " << (this->read(vAddr, sup)) << "\n";
}
void MemoryUnit::tlbAdd(Addr virt, Addr phys, Word flags) {
D(1, "tlbAdd(0x" << hex << virt << ", 0x" << phys << ", 0x" << flags << ')');
tlb[virt/pageSize] = TLBEntry(phys/pageSize, flags);
}
void MemoryUnit::tlbRm(Addr va) {
if (tlb.find(va/pageSize) != tlb.end()) tlb.erase(tlb.find(va/pageSize));
}
void *Harp::consoleInputThread(void* arg_vp) {
ConsoleMemDevice *arg = (ConsoleMemDevice *)arg_vp;
char c;
while (cin) {
c = cin.get();
pthread_mutex_lock(&arg->cBufLock);
arg->cBuf.push(c);
pthread_mutex_unlock(&arg->cBufLock);
}
cout << "Console input ended. Exiting.\n";
exit(4);
}
ConsoleMemDevice::ConsoleMemDevice(Size wS, std::ostream &o, Core &core,
bool batch) :
wordSize(wS), output(o), core(core), cBuf()
{
// Create a console input thread if we are running in interactive mode.
if (!batch) {
pthread_t *thread = new pthread_t;
pthread_create(thread, NULL, consoleInputThread, (void*)this);
}
pthread_mutex_init(&cBufLock, NULL);
}
void ConsoleMemDevice::poll() {
pthread_mutex_lock(&cBufLock);
if (!cBuf.empty()) core.interrupt(8);
pthread_mutex_unlock(&cBufLock);
}
Word DiskControllerMemDevice::read(Addr a) {
switch (a/8) {
case 0: return curDisk;
case 1: return curBlock;
case 2: return disks[curDisk].blocks * blockSize;
case 3: return physAddr;
case 4: return command;
case 5: return status;
default:
cout << "Attempt to read invalid disk controller register.\n";
exit(1);
}
}
void DiskControllerMemDevice::write(Addr a, Word w) {
switch (a/8) {
case 0: if (w <= disks.size()) {
curDisk = w;
status = OK;
} else {
status = INVALID_DISK;
}
break;
case 1: if (w < disks[curDisk].blocks) {
curBlock = w;
} else {
status = INVALID_BLOCK;
}
break;
case 2: nBlocks = w >= disks[curDisk].blocks?disks[curDisk].blocks - 1 : w;
status = OK;
break;
case 3: physAddr = w;
status = OK;
break;
case 4: if (w == 0) {
} else {
}
cout << "TODO: Implement disk read and write!\n";
break;
}
}

1
simX/results.txt Normal file
View File

@@ -0,0 +1 @@
start

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10142814192910EC081441F
:100100000544269422C201469305F0FFB2952EC401
:100110000147B78600009386F6FFBA9636C60148B7
:10012000A167C2973EC8171100001301E1EE05490F
:100130008148CA9846C0054A8549D2994EC2054BA6
:10014000930AF0FFDA9A56C4054CB78B0000938BE4
:10015000FBFFE29B5EC6054DA16CEA9C66C81711C9
:1001600000001301A1EC130EF0FF814DF29D6EC053
:10017000130FF0FF854EFA9E76C29301F0FF930FA6
:10018000F0FF8E9F7EC41304F0FF3782000013023D
:10019000F2FF229212C69305F0FFA164AE9426C826
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146369632C0B78700009387F7FF0547A0
:1001C0003E973AC2B78800009388F8FF1308F0FF03
:1001D000469842C4B78900009389F9FF3789000027
:1001E0001309F9FF4E994AC6B78A0000938AFAFFAD
:1001F000216A569A52C8171100001301A1E5A16B9C
:10020000014B5E9B5AC0A16C054C669C62C2A16DFD
:10021000130DF0FF6E9D6AC4A16E378E0000130EA1
:10022000FEFF769E72C6A16F216F7E9F7AC817155A
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814185010EC00142090276
:1001000012C201443D0422C48144C10426C6814573
:10011000FD052EC817110000130101F00546050664
:1001200032C08546890636C205473D073AC4854731
:10013000C1073EC605487D0842C8171100001301DB
:10014000E1EE9308F0FF850846C01309F0FF0909A6
:100150004AC29309F0FFBD094EC4130AF0FF410AD9
:1001600052C6930AF0FFFD0A56C81711000013018A
:1001700021ED370B0800130BFBFF050B5AC0B70B23
:100180000800938BFBFF890B5EC2370C0800130C31
:10019000FCFF3D0C62C4B70C0800938CFCFFC10C43
:1001A00066C6370D0800130DFDFF7D0D6AC81711D7
:1001B0000000130121EAB70D0800850D6EC0370E4F
:1001C0000800090E72C2B70E0800BD0E76C4370FC4
:1001D0000800410F7AC6B70F0800FD0F7EC817153B
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,29 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1410123A020009710000010
:10010000938080F0056123A0200097100000938069
:10011000E0EF216123A0200097100000938040EFC2
:100120007D6123A02000971000009380A0EE017154
:1001300023A02000171500001305C5EC971500003B
:10014000938545EE370610F01306C6F2630CB50032
:10015000544514C2144514C2544114C2144114C26B
:100160004105EDB7370510F0130505F22320050012
:0201700000008D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,29 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1500023A0C0009710000062
:10010000938080F0340023A0D000971000009380EB
:10011000E0EF780023A0E00097100000938040EF0C
:100120001C0823A0F000971000009380A0EEE01FB1
:1001300023A08000171500001305C5EC97150000DB
:10014000938545EE370610F01306C6F2630CB50032
:10015000544514C2144514C2544114C2144114C26B
:100160004105EDB7370510F0130505F22320050012
:0201700000008D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181458144ED8C26C0814629
:100100000546758E32C281471307F0FF7D8F3AC4D2
:100110008144378400001304F4FF658C22C6014635
:10012000A165F18D2EC8171100001301E1EE0547FE
:100130008146F98E36C005448547E18F3EC285452C
:100140009304F0FFED8C26C4854637860000130625
:10015000F6FF758E32C6854721677D8F3AC8171125
:1001600000001301A1EC9304F0FF0144658C22C050
:100170001306F0FF8545F18D2EC21307F0FF93069D
:10018000F0FFF98E36C41304F0FFB78700009387A1
:10019000F7FFE18F3EC69305F0FFA164ED8C26C802
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146758E32C0B78700009387F7FF054769
:1001C0007D8F3AC2B78400009384F4FF1304F0FFDC
:1001D000658C22C4378600001306F6FFB785000041
:1001E0009385F5FFF18D2EC6378700001307F7FFC3
:1001F000A166F98E36C8171100001301A1E521642C
:100200008147E18F3EC0A1658544ED8C26C2A16681
:100210001306F0FF758E32C4A167378700001307FD
:10022000F7FF7D8F3AC6A1642164658C22C817153B
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814581892EC00146058A46
:1001000032C28146C18A36C401477D8B3AC68147D7
:10011000859B3EC817110000130101F005440188BA
:1001200022C08544858826C28545C1892EC40546DE
:100130007D8A32C68546859A36C81711000013019C
:10014000E1EE1307F0FF018B3AC09307F0FF858BB8
:100150003EC21304F0FF418822C49304F0FFFD88DF
:1001600026C69305F0FF85992EC8171100001301CC
:1001700021ED370608001306F6FF018A32C0B706E4
:1001800008009386F6FF858A36C2370708001307F2
:10019000F7FF418B3AC4B70708009387F7FFFD8B41
:1001A0003EC6370408001304F4FF059822C817114F
:1001B0000000130121EAB7040800818826C0B705B2
:1001C000080085892EC237060800418A32C4B70666
:1001D0000800FD8A36C637070800059B3AC8171580
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,33 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181479D8F89C7B7270100B7
:100100009387B73A3EC0171100001301E1EF054491
:10011000018C09C4372401001304B43A22C017111A
:1001200000001301A1EEFD54858C89C4B7240100A1
:100130009384B43A26C017110000130161EDB7850E
:1001400000009385F5FF8D8D89C5B7250100938546
:10015000B53A2EC0171100001301C1EB2166118EB4
:1001600009C6372601001306B63A32C0171500003B
:10017000130545E9971500009385C5EA370610F089
:100180001306C6F2630CB500544514C2144514C2DC
:10019000544114C2144114C24105EDB7370510F0A3
:1001A000130505F2232005000000000000000000F8
:0201B00000004D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,30 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814691E2814636C01711BB
:100100000000130161F0054711E301473AC01711E0
:1001100000001301A1EFFD5791E381473EC0171185
:1001200000001301E1EE378400001304F4FF11E036
:10013000014422C0171100001301C1EDA16491E038
:10014000814426C0171500001305C5EB9715000064
:10015000938545ED370610F01306C6F2630CB50023
:10016000544514C2144514C2544114C2144114C25B
:100170004105EDB7370510F0130505F22320050002
:0201800000007D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,32 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814529A0B7250100938556
:10010000B53A2EC017110000130101F0054629A0D1
:10011000372601001306B63A32C01711000013014A
:10012000E1EEFD5629A0B72601009386B63A36C007
:10013000171100001301C1ED378700001307F7FF07
:1001400029A0372701001307B73A3AC0171100005A
:10015000130141ECA16729A0B72701009387B73AA3
:100160003EC0171500001305E5E9971500009385BB
:1001700065EB370610F01306C6F2630CB500544564
:1001800014C2144514C2544114C2144114C241058E
:10019000EDB7370510F0130505F223200500000028
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,32 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101442920372401001304D9
:10010000B43A22C017110000130101F085442920E0
:10011000B72401009384B43A26C0171100001301DC
:10012000E1EEFD552920B72501009385B53A2EC093
:10013000171100001301C1ED378600001306F6FF0A
:100140002920372601001306B63A32C017110000E5
:10015000130141ECA1662920B72601009386B63A27
:1001600036C0171500001305E5E9971500009385C3
:1001700065EB370610F01306C6F2630CB500544564
:1001800014C2144514C2544114C2144114C241058E
:10019000EDB7370510F0130505F223200500000028
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,35 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10145170600001306260137
:100100000296372501001305B53A32C017110000D9
:10011000130181EF0545970600009386260182961C
:10012000372501001305B53A36C017110000130139
:10013000E1ED7D55170700001307270102973725CA
:1001400001001305B53A3AC017110000130141EC44
:10015000378500001305F5FF9707000093872701F7
:100160008297372501001305B53A3EC017110000EC
:10017000130141EA216517080000130828010298BD
:10018000372501001305B53A42C0171500001305C5
:1001900065E7971500009385E5E8370610F013062C
:1001A000C6F2630CB500544514C2144514C2544140
:1001B00014C2144114C24105EDB7370510F0130500
:1001C00005F22320050000000000000000000000F0
:0201D00000002D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,35 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101459701000093812101C6
:100100008281372501001305B53A0EC01711000092
:10011000130181EF0545170200001302220102823C
:10012000372501001305B53A12C01711000013015D
:10013000E1ED7D55170400001304240102843725E6
:1001400001001305B53A22C017110000130141EC5C
:10015000378500001305F5FF970400009384240100
:100160008284372501001305B53A26C01711000017
:10017000130141EA216597050000938525018285D9
:10018000372501001305B53A2EC0171500001305D9
:1001900065E7971500009385E5E8370610F013062C
:1001A000C6F2630CB500544514C2144514C2544140
:1001B00014C2144114C24105EDB7370510F0130500
:1001C00005F22320050000000000000000000000F0
:0201D00000002D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814181410EC001420542FE
:1001000012C20144414422C48144FD4426C68145B3
:1001100085552EC817110000130101F00546014650
:1001200032C08546854636C2054741473AC48547B1
:10013000FD473EC60548055842C817110000130187
:10014000E1EE9308F0FF814846C01309F0FF05492E
:100150004AC29309F0FFC1494EC4130AF0FF7D4A19
:1001600052C6930AF0FF855A56C8171100001301B2
:1001700021ED370B0800130BFBFF014B5AC0B70BE7
:100180000800938BFBFF854B5EC2370C0800130CF5
:10019000FCFF414C62C4B70C0800938CFCFFFD4C83
:1001A00066C6370D0800130DFDFF055D6AC81711FF
:1001B0000000130121EAB70D0800814D6EC0370E13
:1001C0000800054E72C2B70E0800C14E76C4370F44
:1001D00008007D4F7AC6B70F0800855F7EC81715E7
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814185610EC001420962B6
:1001000012C201443D6422C48144FD6426C6814577
:10011000FD752EC817110000130101F00546056694
:1001200032C08546896636C205473D673AC4854771
:10013000FD673EC605487D7842C8171100001301CF
:10014000E1EE9308F0FF856846C01309F0FF0969E6
:100150004AC29309F0FFBD694EC4130AF0FF7D6ADD
:1001600052C6930AF0FFFD7A56C81711000013011A
:1001700021ED370B0800130BFBFF056B5AC0B70BC3
:100180000800938BFBFF896B5EC2370C0800130CD1
:10019000FCFF3D6C62C4B70C0800938CFCFFFD6C47
:1001A00066C6370D0800130DFDFF7D7D6AC8171167
:1001B0000000130121EAB70D0800856D6EC0370EEF
:1001C0000800096E72C2B70E0800BD6E76C4370F04
:1001D00008007D6F7AC6B70F0800FD7F7EC817152F
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,39 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1171700001307E7F118435F
:100100003AC017110000130121F0971700009387E0
:10011000A7F0DC433EC017110000130121EF1714B4
:100120000000130464EF004422C017110000130103
:1001300021EE97140000938424EEE45026C017119A
:100140000000130121ED971600009386E6ECF45EA3
:1001500036C0171500001305E5EA971500009385D2
:1001600065F4370610F01306C6F2630CB50054456B
:1001700014C2144514C2544114C2144114C241059E
:10018000EDB7370510F0130505F223200500000038
:0201900000006D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000100000002000000D1
:1010200003000000040000000500000006000000AE
:101030000700000008000000090000000A0000008E
:101040000B0000000C0000000D0000000E0000006E
:101050000F0000001000000011000000120000004E
:10106000130000001400000015000000160000002E
:101070001700000018000000190000001A0000000E
:101080001B0000001C0000001D0000001E000000EE
:101090001F00000000000000000000000000000031
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,40 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1171100001301E1F102428A
:1001000023A0400097100000938000F0171100001A
:10011000130181F0124423A0800097100000938007
:10012000E0EE17110000130121EF224823A0000187
:10013000971000009380C0ED171100001301C1ED6E
:10014000F65F23A0F001971000009380A0EC171138
:100150000000130161ECFE5A23A0500117150000A6
:10016000130545EA971500009385C5F3370610F08F
:100170001306C6F2630CB500544514C2144514C2EC
:10018000544114C2144114C24105EDB7370510F0B3
:10019000130505F223200500000000000000000008
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000100000002000000D1
:1010200003000000040000000500000006000000AE
:101030000700000008000000090000000A0000008E
:101040000B0000000C0000000D0000000E0000006E
:101050000F0000001000000011000000120000004E
:10106000130000001400000015000000160000002E
:101070001700000018000000190000001A0000000E
:101080001B0000001C0000001D0000001E000000EE
:101090001F00000000000000000000000000000031
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101468145B2852EC0014760
:100100008546BA8636C201449307F0FFA2873EC4F3
:100110008145B78400009384F4FFAE8426C68146EF
:100120002166368632C8171100001301E1EE8547BB
:1001300001473E873AC085440544268422C20546CD
:100140009305F0FFB2852EC40547B786000093865D
:10015000F6FFBA8636C60544A167A2873EC81711C6
:1001600000001301A1EC9305F0FF8144AE8426C08A
:100170009306F0FF0546368632C29307F0FF130759
:10018000F0FF3E873AC49304F0FF37840000130465
:10019000F4FF268422C61306F0FFA165B2852EC89F
:1001A000171100001301C1E9378700001307F7FF9B
:1001B0008146BA8636C0378400001304F4FF8547B1
:1001C000A2873EC2B78500009385F5FF9304F0FF38
:1001D000AE8426C4B78600009386F6FF37860000FB
:1001E0001306F6FF368632C6B78700009387F7FFFF
:1001F00021673E873AC8171100001301A1E5A164E9
:100200000144268422C021668545B2852EC221671D
:100210009306F0FFBA8636C42164B787000093873F
:10022000F7FFA2873EC6A165A164AE8426C8171554
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101448147C18F3EC08145B9
:100100008544CD8C26C281461306F0FF558E32C43D
:100110008147378700001307F7FF5D8F3AC6814498
:100120002164458C22C8171100001301E1EE054639
:100130008145D18D2EC005478546D98E36C20544EE
:100140009307F0FFC18F3EC48545B78400009384B8
:10015000F4FFCD8C26C685462166558E32C8171110
:1001600000001301A1EC9307F0FF01475D8F3AC037
:100170009304F0FF0544458C22C21306F0FF93055B
:10018000F0FFD18D2EC41307F0FFB78600009386D1
:10019000F6FFD98E36C61304F0FFA167C18F3EC8A3
:1001A000171100001301C1E9B78500009385F5FF21
:1001B0008144CD8C26C0B78600009386F6FF0546A5
:1001C000558E32C2B78700009387F7FF1307F0FF01
:1001D0005D8F3AC4B78400009384F4FF3784000035
:1001E0001304F4FF458C22C6378600001306F6FF81
:1001F000A165D18D2EC8171100001301A1E521675B
:100200008146D98E36C021648547C18F3EC2A16523
:100210009304F0FFCD8C26C4A16637860000130638
:10022000F6FF558E32C6A16721675D8F3AC8171554
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814186010EC001420A0274
:1001000012C201443E0422C48144C20426C6814571
:10011000FE052EC817110000130101F00546060662
:1001200032C085468A0636C205473E073AC485472F
:10013000C2073EC605487E0842C8171100001301D9
:10014000E1EE9308F0FF860846C01309F0FF0A09A4
:100150004AC29309F0FFBE094EC4130AF0FF420AD7
:1001600052C6930AF0FFFE0A56C817110000130189
:1001700021ED370B0800130BFBFF060B5AC0B70B22
:100180000800938BFBFF8A0B5EC2370C0800130C30
:10019000FCFF3E0C62C4B70C0800938CFCFFC20C41
:1001A00066C6370D0800130DFDFF7E0D6AC81711D6
:1001B0000000130121EAB70D0800860D6EC0370E4E
:1001C00008000A0E72C2B70E0800BE0E76C4370FC2
:1001D0000800420F7AC6B70F0800FE0F7EC8171539
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F18144858426C08145898552
:100100002EC201463D8632C48146C18636C60147AD
:100110007D873AC817110000130101F085478587D4
:100120003EC00544098422C28544BD8426C4854559
:10013000C1852EC605467D8632C817110000130101
:10014000E1EE9306F0FF858636C01307F0FF0987BE
:100150003AC29307F0FFBD873EC41304F0FF418409
:1001600022C69304F0FFFD8426C817110000130176
:1001700021EDB70508009385F5FF85852EC037066C
:1001800008001306F6FF098632C2B70608009386F8
:10019000F6FFBD8636C4370708001307F7FF41870F
:1001A0003AC6B70708009387F7FFFD873EC81711C7
:1001B0000000130121EA37040800058422C0B704B7
:1001C0000800898426C2B7050800BD852EC43706FD
:1001D0000800418632C6B7060800FD8636C81715E6
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1014705833AC0814789833C
:100100003EC201443D8022C48144C18026C681454F
:10011000FD812EC817110000130101F0054605826C
:1001200032C08546898236C205473D833AC4854739
:10013000C1833EC605447D8022C81711000013010B
:10014000E1EE9304F0FF858026C09305F0FF8981DE
:100150002EC21306F0FF3D8232C49306F0FFC18227
:1001600036C61307F0FF7D833AC81711000013014C
:1001700021EDB70708009387F7FF85833EC037045A
:1001800008001304F4FF098022C2B7040800938416
:10019000F4FFBD8026C4B70508009385F5FFC18133
:1001A0002EC6370608001306F6FF7D8232C81711E7
:1001B0000000130121EAB7060800858236C0370720
:1001C000080009833AC2B7070800BD833EC437045C
:1001D0000800418022C6B7040800FD8026C8171514
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814581448D8C26C0814689
:100100000546158E32C281471307F0FF1D8F3AC492
:100110008144378400001304F4FF058C22C6014695
:10012000A165918D2EC8171100001301E1EE05475E
:100130008146998E36C005448547818F3EC28545EC
:100140009304F0FF8D8C26C4854637860000130685
:10015000F6FF158E32C6854721671D8F3AC81711E5
:1001600000001301A1EC9304F0FF0144058C22C0B0
:100170001306F0FF8545918D2EC21307F0FF9306FD
:10018000F0FF998E36C41304F0FFB7870000938701
:10019000F7FF818F3EC69305F0FFA1648D8C26C8C2
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146158E32C0B78700009387F7FF0547C9
:1001C0001D8F3AC2B78400009384F4FF1304F0FF3C
:1001D000058C22C4378600001306F6FFB7850000A1
:1001E0009385F5FF918D2EC6378700001307F7FF23
:1001F000A166998E36C8171100001301A1E521648C
:100200008147818F3EC0A16585448D8C26C2A16641
:100210001306F0FF158E32C4A1673787000013075D
:10022000F7FF1D8F3AC6A1642164058C22C81715FB
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,41 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10144171600001306C6F198
:1001000000C2004222C0171100001301E1EF854434
:1001100097170000938747F0C4C3C44326C0171144
:1001200000001301A1EE7D55971400009384C4EEE6
:1001300088C488442AC017110000130161EDB786F6
:1001400000009386F6FF171700001307E7EC14CBA7
:10015000144B36C0171100001301C1EBA16717162D
:100160000000130666EB7CDE7C5E3EC017150000C7
:10017000130545E9971500009385C5F2370610F081
:100180001306C6F2630CB500544514C2144514C2DC
:10019000544114C2144114C24105EDB7370510F0A3
:1001A000130505F2232005000000000000000000F8
:0201B00000004D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFF00000000000000000000000054
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,41 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1171100001301E1F181410C
:100100000EC0824123A03000971000009380C0EF02
:1001100017110000130141F0054212C2124223A040
:10012000400097100000938060EE1711000013014B
:10013000A1EE7D58C2C0064823A000019710000020
:10014000938000ED17110000130101ED378C0000C2
:10015000130CFCFFE2DC665C23A08001971000001A
:10016000938040EB17110000130101EBA16FFEDF3C
:10017000FE5F23A0F001171500001305A5E89715F1
:100180000000938525F2370610F01306C6F2630CC3
:10019000B500544514C2144514C2544114C214414C
:1001A00014C24105EDB7370510F0130505F2232001
:0201B000050048
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFF00000000000000000000000054
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181440144258C22C00146F6
:100100008545B18D2EC201479306F0FFB98E36C4E6
:100110000144B78700009387F7FFA18F3EC6814552
:10012000A164AD8C26C8171100001301E1EE8546CD
:100130000146358E32C0854705473D8F3AC285441A
:100140001304F0FF258C22C40546B7850000938573
:10015000F5FFB18D2EC60547A166B98E36C81711B9
:1001600000001301A1EC1304F0FF8147A18F3EC0F2
:100170009305F0FF8544AD8C26C29306F0FF13066D
:10018000F0FF358E32C49307F0FF37870000130766
:10019000F7FF3D8F3AC69304F0FF2164258C22C8F7
:1001A000171100001301C1E9378600001306F6FF9E
:1001B0008145B18D2EC0378700001307F7FF8546B4
:1001C000B98E36C2378400001304F4FF9307F0FFA2
:1001D000A18F3EC4B78500009385F5FFB78400006A
:1001E0009384F4FFAD8C26C6B78600009386F6FF95
:1001F0002166358E32C8171100001301A1E5A167F1
:1002000001473D8F3AC0A1640544258C22C2216676
:100210009305F0FFB18D2EC42167B7860000938649
:10022000F6FFB98E36C62164A167A18F3EC81715A7
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,52 @@
:0200000480007A
:1000000017110000130101001309000093080000FC
:10001000B348190323201101130A000093091000AB
:10002000B3493A0323223101130B0000930AF0FF76
:10003000B34A5B0323245101130C0000B70B00806B
:10004000938BFBFFB34B7C0323267101130D000040
:10005000B70C0080B34C9D032328910117110000B9
:10006000130181FB130E1000930D0000B34DBE036E
:100070002320B101130F1000930E1000B34EDF03C5
:100080002322D10193011000930FF0FFB3CFF103AE
:100090002324F10113041000370200801302F2FF41
:1000A000334244022326410093051000B704008028
:1000B000B3C495022328910017110000130101F722
:1000C0009306F0FF1306000033C6C6022320C100CA
:1000D0009307F0FF1307100033C7E7022322E10064
:1000E0009308F0FF1308F0FF33C80803232401012D
:1000F0009309F0FF370900801309F9FF33C9290379
:1001000023262101930AF0FF370A008033CA4A03ED
:100110002328410117110000130181F2B70B008061
:10012000938BFBFF130B000033CB6B032320610188
:10013000B70C0080938CFCFF130C100033CC8C03A5
:1001400023228101B70D0080938DFDFF130DF0FF79
:1001500033CDAD032324A101B70E0080938EFEFFA3
:10016000370E0080130EFEFF33CECE032326C101CF
:10017000B70F0080938FFFFF370F008033CFEF035F
:100180002328E101171100001301C1EC37020080A0
:1001900093010000B341320223203100B7040080F4
:1001A0001304100033C48402232281003706008028
:1001B0009305F0FFB345B6022324B1003707008052
:1001C000B70600809386F6FFB346D7022326D100F8
:1001D00037080080B7070080B347F8022328F100F2
:1001E00017150000130505E297150000938585EEAD
:1001F000370610F01306C6F26306B5028326C50063
:100200002320D600832685002320D60083264500A0
:100210002320D600832605002320D60013050501E0
:100220006FF09FFD370510F0130505F22320050040
:0402300000000000CA
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFF000000000000000028
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,52 @@
:0200000480007A
:1000000017110000130101001309000093080000FC
:10001000B358190323201101130A0000930910009B
:10002000B3593A0323223101130B0000930AF0FF66
:10003000B35A5B0323245101130C0000B70B00805B
:10004000938BFBFFB35B7C0323267101130D000030
:10005000B70C0080B35C9D032328910117110000A9
:10006000130181FB130E1000930D0000B35DBE035E
:100070002320B101130F1000930E1000B35EDF03B5
:100080002322D10193011000930FF0FFB3DFF1039E
:100090002324F10113041000370200801302F2FF41
:1000A000335244022326410093051000B704008018
:1000B000B3D495022328910017110000130101F712
:1000C0009306F0FF1306000033D6C6022320C100BA
:1000D0009307F0FF1307100033D7E7022322E10054
:1000E0009308F0FF1308F0FF33D80803232401011D
:1000F0009309F0FF370900801309F9FF33D9290369
:1001000023262101930AF0FF370A008033DA4A03DD
:100110002328410117110000130181F2B70B008061
:10012000938BFBFF130B000033DB6B032320610178
:10013000B70C0080938CFCFF130C100033DC8C0395
:1001400023228101B70D0080938DFDFF130DF0FF79
:1001500033DDAD032324A101B70E0080938EFEFF93
:10016000370E0080130EFEFF33DECE032326C101BF
:10017000B70F0080938FFFFF370F008033DFEF034F
:100180002328E101171100001301C1EC37020080A0
:1001900093010000B351320223203100B7040080E4
:1001A0001304100033D48402232281003706008018
:1001B0009305F0FFB355B6022324B1003707008042
:1001C000B70600809386F6FFB356D7022326D100E8
:1001D00037080080B7070080B357F8022328F100E2
:1001E00017150000130505E297150000938585EEAD
:1001F000370610F01306C6F26306B5028326C50063
:100200002320D600832685002320D60083264500A0
:100210002320D600832605002320D60013050501E0
:100220006FF09FFD370510F0130505F22320050040
:0402300000000000CA
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFF000000000000000028
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,65 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033824100DD
:10003000B382510033836100B38371003384810044
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B30494003305A400B305B400A0
:100090003306C400B306D40023208100232291003C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF370900803387E6006F
:1000E000B387F60033880601B388160133892601E9
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3093901330A4901B30A5901E9
:10014000330B6901B30B79012320210123223101F3
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E0080338C8B01FF
:10019000B38C9B01338DAB01B38DBB01338ECB018F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C00930D1000F3
:1001D000B30EBE01338FBE01B30FBF01B380BF01A9
:1001E0003381B001B301B1012320BD012322CD0130
:1001F0002324DD012326ED012328FD01232A1D00F0
:10020000232C2D00232E3D0097100000938000E149
:1002100017110000130181EB03AE0000B79DFFF73B
:10022000938D8D813300BE012320010097100000C3
:10023000938000DF17110000130181E903AE000075
:10024000B79DFFF7938D8D813300BE01B30200008F
:10025000232001002322510097100000938080DCAE
:1002600017110000130141E783A100003382010050
:10027000B30202003303500033070300B307070043
:1002800033880700B30C0001330D9001B30D0D004E
:10029000232041002322A1012324B10117150000CE
:1002A000130545D9971500009385C5E3370610F06F
:1002B0001306C6F26306B5028326C5002320D600C6
:1002C000832685002320D600832645002320D600E0
:1002D000832605002320D600130505016FF09FFD3E
:1002E000370510F0130505F223200500000000007B
:0402F000000000000A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,56 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A10000138211009382F17F1383F1FF0B
:1000200093830100138401802320310023224100A7
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101007D
:1000500003A40000930414001305F47F9305F4FF38
:1000600013060400930604802320810023229100BC
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FD84
:1000900083A60000138716009387F67F1388F6FF68
:1000A00093880600138906802320D1002322E100D3
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FB8A
:1000D00003A9000093091900130AF97F930AF9FF95
:1000E000130B0900930B09802320210123223101E6
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F88F
:1001100083AB0000138C1B00938CFB7F138DFBFFC4
:10012000938D0B00138E0B802320710123228101FC
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF64A
:10015000032E0D00930E1E00138F1E00930F1F0021
:1001600093801F00138110009301110023A0CD0183
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F383A200001380120025
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F183A2000013801200930210000A
:1001C000232001002322510097100000938080E536
:1001D00017110000130101F083A100001382010038
:1001E0009302020013830200130703009307070022
:1001F00013880700930C0800138D0C00930D0D005D
:1002000023203100232241002324A1012326B10110
:1002100017150000130505E297150000938585EC7E
:10022000370610F01306C6F26306B5028326C50032
:100230002320D600832685002320D6008326450070
:100240002320D600832605002320D60013050501B0
:100250006FF09FFD370510F0130505F22320050010
:04026000000000009A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,66 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033F241006D
:10003000B3F2510033F36100B3F3710033F4810084
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B37494003375A400B375B40050
:100090003376C400B376D40023208100232291005C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF3709008033F7E600FF
:1000E000B3F7F60033F80601B3F8160133F9260129
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3793901337A4901B37A590199
:10014000337B6901B37B7901232021012322310113
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E008033FC8B018F
:10019000B3FC9B0133FDAB01B3FDBB0133FECB01CF
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C001302F00797
:1001D0009302F0031303F0019303F0001304700083
:1001E00093043000B37E4E0033FF5E00B37F6F0098
:1001F000B3F07F0033F18000B371910023204D00F4
:100200002322CD012324DD012326ED012328FD0136
:10021000232A1D00232C2D00232E3D0097100000C3
:100220009380C0DF17110000130141EA03AE000004
:10023000B79DFFF7938D8D813370BE0123200100A0
:10024000971000009380C0DD17110000130141E8F2
:1002500003AE0000B79DFFF7938D8D813370BE0113
:10026000B3720000232001002322510097100000E8
:10027000938040DB17110000130101E683A1000009
:100280009303F0FF33F27100B372720033F3530043
:1002900033777300B377770033F87700B3FC03014B
:1002A00033FD9301B37D7D00232041002322A10172
:1002B0002324B101171500001305C5D797150000B9
:1002C000938545E2370610F01306C6F26306B502C1
:1002D0008326C5002320D600832685002320D60050
:1002E000832645002320D600832605002320D60040
:1002F000130505016FF09FFD370510F0130505F29A
:0403000023200500B1
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFCDAB7856341298BADCFE9A
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,56 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013F2110093F2F17F13F3F1FFBB
:1000200093F3010013F401802320310023224100C7
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101007D
:1000500003A40000937414001375F47F9375F4FFE8
:1000600013760400937604802320810023229100DC
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FD84
:1000900083A6000013F7160093F7F67F13F8F6FF18
:1000A00093F8060013F906802320D1002322E100F3
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FB8A
:1000D00003A9000093791900137AF97F937AF9FF45
:1000E000137B0900937B0980232021012322310106
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F88F
:1001100083AB000013FC1B0093FCFB7F13FDFBFF74
:1001200093FD0B0013FE0B8023207101232281011C
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF64A
:10015000032E0D00937EFE0713FFFE03937FFF0126
:1001600093F0FF0013F170009371310023A0CD01D3
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F383A2000013F01200B5
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F183A2000013F01200937210002A
:1001C000232001002322510097100000938080E536
:1001D00017110000130101F083A1000013F2F1FFD9
:1001E0009372F2FF13F3F2FF1377F3FF9377F7FFA6
:1001F00013F8F7FF937CF8FF13FDFCFF937DFDFFE1
:1002000023203100232241002324A1012326B10110
:1002100017150000130505E297150000938585EC7E
:10022000370610F01306C6F26306B5028326C50032
:100230002320D600832685002320D6008326450070
:100240002320D600832605002320D60013050501B0
:100250006FF09FFD370510F0130505F22320050010
:04026000000000009A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFCDAB7856341298BADCFE9A
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,42 @@
:0200000480007A
:100000001717000013070700971700009387870151
:10001000832007003711000013014100B7F1FFFFF3
:100020009381810037F2FF7F1302C200B702008084
:100030009382020133812000B3813000338240007B
:10004000B3825000170300009713000017F8FFFF5A
:1000500097FEFF7F970F008033431300B3C3230045
:1000600033483800B3CE4E00B3CF5F0023A0670003
:1000700023A2770023A4070123A6D70123A8F70111
:1000800097180000938848F8171800001308C8FA5A
:10009000B710111193801011372122221301212250
:1000A000B737333393873733374E4444130E4E44B8
:1000B000375F5555130F5F5583A108003702008045
:1000C000B7F2FF7F9382420013038000B713000052
:1000D0009383C30037F4FFFF13040401338241000C
:1000E000B382510033836100B38371003384810094
:1000F0009700008017F1FF7F97070000171E000090
:1001000017FFFFFFB3C0400033415100B3C7670082
:10011000334E7E00334F8F00232018002322280007
:100120002324F8002326C8012328E801171900001A
:100130001309C9ED97180000938848F1832009003E
:10014000032149008321890017020000130242FFA6
:100150009707000093878701170F0000130F0F0404
:10016000970200009382C2FD1708000013080800E0
:10017000970F0000938F8F0233421200B3C72700FE
:10018000334F3F00B382124033482800B3CF3F00C3
:1001900023A0480023A2F80023A4E80123A65800C6
:1001A00023A8080123AAF80117150000130585E705
:1001B00097150000938505EB370610F01306C6F27D
:1001C0006306B5028326C5002320D600832685005A
:1001D0002320D600832645002320D6008326050051
:1001E0002320D600130505016FF09FFD370510F0A1
:1001F000130505F2232005000000000000000000A8
:0402000000000000FA
:1010000044000080F00000803C0100806801008006
:1010100098010080000000000000000000000000B7
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:100030006384410093EF1F006384510093EF2F000E
:100040006384610093EF4F006384710093EF8F002E
:100050006384810093EF0F012320310023224100AC
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006304730093EF1F006304830049
:1000B00093EF2F006304930093EF4F006304A300BA
:1000C00093EF8F006304B30093EF0F0123206100CF
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006304D60093EF1F0020
:100120006304E60093EF2F006304F60093EF4F00A3
:100130006304060193EF8F006304160193EF0F0130
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F000063043901D2
:1001900093EF1F006304490193EF2F00630459019B
:1001A00093EF4F006304690193EF8F0063047901BB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063049C0193EF1F006304AC0193EF2F0084
:100210006304BC0193EF4F006304CC0193EF8F00A4
:100220006304DC0193EF0F0123208101232291015C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F00006384000093EF1F002B
:100270006304010093EF2F006384010093EF4F00AC
:100280006304020093EF8F006384020093EF0F0179
:100290006304100093EF0F026304200093EF0F0438
:1002A0006304300093EF0F086304400093EF0F10D6
:1002B0006304500093EF0F2023A0FD01971A000064
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063840F0213010000930100001302000059
:1002F000B74165879381113263840F0213010000B7
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3800FFE130100009301000013020000B0
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:101010000000008000000000000000000000000050
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063D4410093EF1F0063D4510093EF2F006E
:1000400063D4610093EF4F0063D4710093EF8F008E
:1000500063D4810093EF0F0123203100232241005C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006354730093EF1F0063548300A9
:1000B00093EF2F006354930093EF4F006354A3001A
:1000C00093EF8F006354B30093EF0F01232061007F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006354D60093EF1F00D0
:100120006354E60093EF2F006354F60093EF4F0003
:100130006354060193EF8F006354160193EF0F0190
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006354390182
:1001900093EF1F006354490193EF2F0063545901FB
:1001A00093EF4F006354690193EF8F00635479011B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063549C0193EF1F006354AC0193EF2F00E4
:100210006354BC0193EF4F006354CC0193EF8F0004
:100220006354DC0193EF0F0123208101232291010C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063D4000093EF1F00DB
:100270006354010093EF2F0063D4010093EF4F000C
:100280006354020093EF8F0063D4020093EF0F01D9
:100290006354100093EF0F026354200093EF0F0498
:1002A0006354300093EF0F086354400093EF0F1036
:1002B0006354500093EF0F2023A0FD01971A000014
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063D40F0213010000930100001302000009
:1002F000B74165879381113263D40F021301000067
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3D00FFE13010000930100001302000060
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063F4410093EF1F0063F4510093EF2F002E
:1000400063F4610093EF4F0063F4710093EF8F004E
:1000500063F4810093EF0F0123203100232241003C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006374730093EF1F006374830069
:1000B00093EF2F006374930093EF4F006374A300DA
:1000C00093EF8F006374B30093EF0F01232061005F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006374D60093EF1F00B0
:100120006374E60093EF2F006374F60093EF4F00C3
:100130006374060193EF8F006374160193EF0F0150
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006374390162
:1001900093EF1F006374490193EF2F0063745901BB
:1001A00093EF4F006374690193EF8F0063747901DB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063749C0193EF1F006374AC0193EF2F00A4
:100210006374BC0193EF4F006374CC0193EF8F00C4
:100220006374DC0193EF0F012320810123229101EC
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063F4000093EF1F00BB
:100270006374010093EF2F0063F4010093EF4F00CC
:100280006374020093EF8F0063F4020093EF0F0199
:100290006374100093EF0F026374200093EF0F0458
:1002A0006374300093EF0F086374400093EF0F10F6
:1002B0006374500093EF0F2023A0FD01971A0000F4
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063F40F02130100009301000013020000E9
:1002F000B74165879381113263F40F021301000047
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3F00FFE13010000930100001302000040
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063C4410093EF1F0063C4510093EF2F008E
:1000400063C4610093EF4F0063C4710093EF8F00AE
:1000500063C4810093EF0F0123203100232241006C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006344730093EF1F0063448300C9
:1000B00093EF2F006344930093EF4F006344A3003A
:1000C00093EF8F006344B30093EF0F01232061008F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006344D60093EF1F00E0
:100120006344E60093EF2F006344F60093EF4F0023
:100130006344060193EF8F006344160193EF0F01B0
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006344390192
:1001900093EF1F006344490193EF2F00634459011B
:1001A00093EF4F006344690193EF8F00634479013B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063449C0193EF1F006344AC0193EF2F0004
:100210006344BC0193EF4F006344CC0193EF8F0024
:100220006344DC0193EF0F0123208101232291011C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063C4000093EF1F00EB
:100270006344010093EF2F0063C4010093EF4F002C
:100280006344020093EF8F0063C4020093EF0F01F9
:100290006344100093EF0F026344200093EF0F04B8
:1002A0006344300093EF0F086344400093EF0F1056
:1002B0006344500093EF0F2023A0FD01971A000024
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063C40F0213010000930100001302000019
:1002F000B74165879381113263C40F021301000077
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3C00FFE13010000930100001302000070
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFFFFF000000000000000054
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063E4410093EF1F0063E4510093EF2F004E
:1000400063E4610093EF4F0063E4710093EF8F006E
:1000500063E4810093EF0F0123203100232241004C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006364730093EF1F006364830089
:1000B00093EF2F006364930093EF4F006364A300FA
:1000C00093EF8F006364B30093EF0F01232061006F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006364D60093EF1F00C0
:100120006364E60093EF2F006364F60093EF4F00E3
:100130006364060193EF8F006364160193EF0F0170
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006364390172
:1001900093EF1F006364490193EF2F0063645901DB
:1001A00093EF4F006364690193EF8F0063647901FB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063649C0193EF1F006364AC0193EF2F00C4
:100210006364BC0193EF4F006364CC0193EF8F00E4
:100220006364DC0193EF0F012320810123229101FC
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063E4000093EF1F00CB
:100270006364010093EF2F0063E4010093EF4F00EC
:100280006364020093EF8F0063E4020093EF0F01B9
:100290006364100093EF0F026364200093EF0F0478
:1002A0006364300093EF0F086364400093EF0F1016
:1002B0006364500093EF0F2023A0FD01971A000004
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E0006364F00313010000930100001302000097
:1002F000B7416587938111326364F00313010000F5
:10030000930100001302000037E1BC9A130101EFD2
:10031000E360F0FF130100009301000013020000EE
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:100030006394410093EF1F006394510093EF2F00EE
:100040006394610093EF4F006394710093EF8F000E
:100050006394810093EF0F0123203100232241009C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006314730093EF1F006314830029
:1000B00093EF2F006314930093EF4F006314A3009A
:1000C00093EF8F006314B30093EF0F0123206100BF
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006314D60093EF1F0010
:100120006314E60093EF2F006314F60093EF4F0083
:100130006314060193EF8F006314160193EF0F0110
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F000063143901C2
:1001900093EF1F006314490193EF2F00631459017B
:1001A00093EF4F006314690193EF8F00631479019B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063149C0193EF1F006314AC0193EF2F0064
:100210006314BC0193EF4F006314CC0193EF8F0084
:100220006314DC0193EF0F0123208101232291014C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F00006394000093EF1F001B
:100270006314010093EF2F006394010093EF4F008C
:100280006314020093EF8F006394020093EF0F0159
:100290006314100093EF0F026314200093EF0F0418
:1002A0006314300093EF0F086314400093EF0F10B6
:1002B0006314500093EF0F2023A0FD01971A000054
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063940F0213010000930100001302000049
:1002F000B74165879381113263940F0213010000A7
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3900FFE130100009301000013020000A0
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFFFFF000000000000000054
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,39 @@
:0200000480007A
:10000000971700009387070093001000130100006A
:10001000B701F17F9381F1FF370200809302F0FF77
:1000200073900234F3B00034F3900234733101342E
:1000300073910234F3B10134F39102347332023418
:1000400073920234F3B20234F312003423A0070097
:1000500023A2170023A4270023A6370023A84700C4
:1000600023AA570097120000938242FB93051000C9
:1000700013060000B706F17F9386F6FF370700806E
:100080009307F0FF73900734F3B5053473360634E5
:10009000F3B6063473370734F3B7073473380034D4
:1000A00023A0B20023A2C20023A4D20023A6E20010
:1000B00023A8F20023AA0201171D0000130D8DF7DB
:1000C000B75A3412938A8A67130AF0FF73100A34FE
:1000D00073BB0A34F33A0B34F31B0A3473BC0B348E
:1000E000F33C003423205D0123226D0123247D0194
:1000F00023268D0123289D01971000009380C0F4D2
:10010000377F7242130FFFE673100F3473300F34D2
:1001100023A0000023A2E00117110000130141F306
:10012000B79FFFF7938F8F8173900F347330003434
:1001300073300034F33F0034232001002322F10107
:1001400017110000130141F11302F0FFB752389666
:1001500093824227B7531632938383497310023434
:10016000F3B20234F3B30334733404342320510064
:10017000232271002324810017150000130585E850
:1001800097150000938505EE370610F01306C6F2AA
:100190006306B5028326C5002320D600832685008A
:1001A0002320D600832645002320D6008326050081
:1001B0002320D600130505016FF09FFD370510F0D1
:1001C000130505F2232005000000000000000000D8
:0401D000000000002B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,25 @@
:0200000480007A
:1000000097170000938707001304F0FF7310043460
:10001000F3F00034F31004347371003473110434BA
:10002000F3F10F34F311043473720834731204348F
:10003000F3F20734F312043423A0070023A21700BD
:1000400023A4270023A6370023A8470023AA57008C
:1000500023AC870097120000938282FC1304F0FF08
:1000600073100434F3F5003473760034F3F60F3470
:1000700073770834F3F707347378003423A0B200A1
:1000800023A2C20023A4D20023A6E20023A8F200E8
:1000900023AA020123AC820097100000938000FA8B
:1000A000375A1632130A8A4973100A3473F0073428
:1000B000731A0A3423A0000023A240011715000080
:1000C000130545F4971500009385C5F7370610F022
:1000D0001306C6F26306B5028326C5002320D600A8
:1000E000832685002320D600832645002320D600C2
:1000F000832605002320D600130505016FF09FFD20
:10010000370510F0130505F223200500000000005C
:0401100000000000EB
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,38 @@
:0200000480007A
:10000000971700009387070093001000130100006A
:10001000B701F17F9381F1FF370200809302F0FF77
:1000200073100034F3A00034F31000347321013452
:1000300073110034F3A10134F3110034732202343C
:1000400073120034F3A20234F312003423A0070029
:1000500023A2170023A4270023A6370023A84700C4
:1000600023AA570097120000938242FB93051000C9
:1000700013060000B706F17F9386F6FF370700806E
:100080009307F0FF73100034F3A50534732606348C
:10009000F3A6063473270734F3A707347328003414
:1000A00023A0B20023A2C20023A4D20023A6E20010
:1000B00023A8F20023AA0201171D0000130D8DF7DB
:1000C000B75A3412938A8A677310003473AB0A34B8
:1000D000F32B0B34F31B003473AC0B34F32C0034D0
:1000E00023205D0123226D0123247D0123268D0120
:1000F00023289D0197100000938000F5377F7242FE
:10010000130FFFE673100F3473200F3423A0000089
:1001100023A2E00117110000130181F3B79FFFF73D
:10012000938F8F8173900F347320003473200034C9
:10013000F32F0034232001002322F10117110000C6
:10014000130181F1B753163293838349B75238961E
:100150009382422773100034F3A20234F3A30334D2
:1001600073240434232051002322710023248100AE
:1001700017150000130505E997150000938585EE16
:10018000370610F01306C6F26306B5028326C500D3
:100190002320D600832685002320D6008326450011
:1001A0002320D600832605002320D6001305050151
:1001B0006FF09FFD370510F0130505F223200500B1
:0401C000000000003B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,24 @@
:0200000480007A
:10000000971700009387070073100034F3E0003463
:10001000F31000347361003473110034F3E10F34D2
:10002000F31100347362083473120034F3E20734BE
:10003000F312003423A0070023A2170023A42700F3
:1000400023A6370023A8470023AA570097120000D1
:100050009382C2FC73100034F3E5003473660034FD
:10006000F3E60F3473670834F3E70734736800343A
:1000700023A0020023A2B20023A4C20023A6D20020
:1000800023A8E20023AAF20023AC0201971000008B
:10009000938080FA375A1632130A8A4973100A3449
:1000A00073E00734F31A0A3423A0000023A250019E
:1000B00023A44001171500001305C5F4971500008F
:1000C000938545F8370610F01306C6F26306B502AD
:1000D0008326C5002320D600832685002320D60052
:1000E000832645002320D600832605002320D60042
:1000F000130505016FF09FFD370510F0130505F29C
:0401000023200500B3
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,30 @@
:0200000480007A
:1000000097170000938707009300100093010000EA
:100010009302F0FFB70D0080938DFDFFB70E0080B7
:10002000731000347391003473920134739302346B
:10003000739E0D34739F0E34F31F003423A02700EA
:1000400023A2470023A4670023A6C70123A8E70132
:1000500023AAF701171D0000130D4DFCB7503412F1
:100060009380806737E1BC9A130101EF73900034ED
:10007000F311013473920134F31202347313003418
:1000800023203D0023224D0023245D0023266D0004
:1000900097100000938080F9377172421301F1E6E6
:1000A000731001347310003423A0000017110000F6
:1000B000130101F8B79DFFF7938D8D8173900D3477
:1000C0007310003473100034F31200342320010045
:1000D0002322510017110000130101F6B753163205
:1000E000938383493763721413036383B75238963B
:1000F0009382422773100334F3920234F393033450
:100100007314003423205100232271002324810022
:1001100017150000130505EF97150000938585F26C
:10012000370610F01306C6F26306B5028326C50033
:100130002320D600832685002320D6008326450071
:100140002320D600832605002320D60013050501B1
:100150006FF09FFD370510F0130505F22320050011
:04016000000000009B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,16 @@
:0200000480007A
:1000000097170000938707007310003473D10034F2
:100010007352003473D30F3473DE0734735F0834C4
:10002000F35F003423A0070023A2270023A4470086
:1000300023A6670023A8C70123AAE70123ACF70181
:10004000971000009380C0FD73D0073473500034C4
:1000500023A00000171500001305C5FA971500002E
:10006000938545FC370610F01306C6F26306B50209
:100070008326C5002320D600832685002320D600B2
:10008000832645002320D600832605002320D600A2
:10009000130505016FF09FFD370510F0130505F2FC
:0400A0002320050014
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,29 @@
:0200000480007A
:100000009710000093800000371111111301111196
:100010006F0080001301000023A020009710000053
:10002000938080FE37212222130121221702000033
:1000300013020201670002001301000023A0200048
:1000400097100000938080FC93025000130360001F
:10005000373133331301313363845200130100000D
:1000600023A0200097100000938080FA9302500094
:100070001303600037414444130141446394620018
:100080001301000023A0200097100000938080F847
:100090009302500013036000375155551301515519
:1000A00063C462001301000023A020009710000029
:1000B000938080F6930250001303600037616666F8
:1000C0001301616663E462001301000023A02000B5
:1000D00097100000938080F4930250001303600097
:1000E0003771777713017177635453001301000060
:1000F00023A0200097100000938080F2930250000C
:10010000130360003791888813018188637453005A
:100110001301000023A0200017150000130585EE31
:1001200097150000938505F0370610F01306C6F208
:100130006306B5028326C5002320D60083268500EA
:100140002320D600832645002320D60083260500E1
:100150002320D600130505016FF09FFD370510F031
:10016000130505F223200500000000000000000038
:04017000000000008B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,15 @@
:0200000480007A
:10000000970000009380C002F39F503097100000CB
:10001000938040FF3711111113011111730010006B
:1000200023A0000073905F306F008002732F1034A4
:10003000130F4F0073101F34732F203423A0E001DF
:1000400023A2200023A400009380C000730020306E
:1000500017150000130505FB97150000938585FB18
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,15 @@
:0200000480007A
:10000000970000009380C002F39F503097100000CB
:10001000938040FF3711111113011111730000007B
:1000200023A0000073905F306F008002732F1034A4
:10003000130F4F0073101F34732F203423A0E001DF
:1000400023A2200023A400009380C000730020306E
:1000500017150000130505FB97150000938585FB18
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,17 @@
:0200000480007A
:10000000171800001308480097180000938888000C
:100010008320080003510800835128000342F8FFA1
:100020008342080003431800834328000344380038
:1000300023A0180023A2280023A4380023A64800E8
:1000400023A8580023AA680023AC780023AE8800B8
:1000500017150000130505FC97150000938585FD15
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000EFCDAB8967452301000000000000000020
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,16 @@
:0200000480007A
:10000000171800001308480097180000938888000C
:10001000930100008320080003214800171A000004
:10002000130A4AFE970A0000938A4A0183270A00AE
:1000300023A0FA000F1000003701000023A01800D1
:1000400023A2280023A4380023A6F80017150000D7
:10005000130545FC971500009385C5FC370610F085
:100060001306C6F26306B5028326C5002320D60018
:10007000832685002320D600832645002320D60032
:10008000832605002320D600130505016FF09FFD90
:10009000370510F0130505F22320050000000000CD
:0400A000000000005C
:10100000B3011100300000001200000000000000D9
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,65 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033824100DD
:10003000B382510033836100B38371003384810044
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B30494003305A400B305B400A0
:100090003306C400B306D40023208100232291003C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF370900803387E6006F
:1000E000B387F60033880601B388160133892601E9
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3093901330A4901B30A5901E9
:10014000330B6901B30B79012320210123223101F3
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E0080338C8B01FF
:10019000B38C9B01338DAB01B38DBB01338ECB018F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C00930D1000F3
:1001D000B30EBE01338FBE01B30FBF01B380BF01A9
:1001E0003381B001B301B1012320BD012322CD0130
:1001F0002324DD012326ED012328FD01232A1D00F0
:10020000232C2D00232E3D0097100000938000E149
:1002100017110000130181EB03AE0000B79DFFF73B
:10022000938D8D813300BE012320010097100000C3
:10023000938000DF17110000130181E903AE000075
:10024000B79DFFF7938D8D813300BE01B30200008F
:10025000232001002322510097100000938080DCAE
:1002600017110000130141E783A100003382010050
:10027000B30202003303500033070300B307070043
:1002800033880700B30C0001330D9001B30D0D004E
:10029000232041002322A1012324B10117150000CE
:1002A000130545D9971500009385C5E3370610F06F
:1002B0001306C6F26306B5028326C5002320D600C6
:1002C000832685002320D600832645002320D600E0
:1002D000832605002320D600130505016FF09FFD3E
:1002E000370510F0130505F223200500000000007B
:0402F000000000000A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,46 @@
:0200000480007A
:10000000971000009380000137513412130181676B
:100010006F0080001301000023A0000023A2200035
:1000200097100000938080FF1301F0FF9301F0FF11
:1000300037D2ED0F130292BA6F0080021301000055
:100040009301000013020000B741658793811132CC
:100050006F008002130100009301000013020000F2
:1000600037E1BC9A130101EF6FF01FFE130100008E
:10007000930100001302000023A0000023A220002F
:1000800023A4300023A6400097140000938484F733
:1000900017150000130585F91301F0FF9301F0FF18
:1000A0001302F0FF9302F0FF3753555513035355D6
:1000B00083AC040003AC4400EF00C001B72122224E
:1000C00093812122EF0F0003B742444493824244BC
:1000D0006F004004371111111301111167800000E6
:1000E00013010000930100001302000093020000BE
:1000F00013030000373233331302323367800F00AB
:10010000130100009301000013020000930200009D
:1001100013030000B3C3900133C48F0123202500D3
:10012000232235002324450023265500232865007B
:10013000232A7500232C850097140000938404ED76
:1001400017150000130545F01301F0FF9301F0FFB0
:100150001302F0FF9302F0FF1303F0FF03AC04005F
:1001600083AC44006F004002B77177779381717759
:1001700067800F00130100009301000013020000CC
:100180009302000013030000376166661301616685
:10019000EFFF9FFD3792888813028288EF000001ED
:1001A00037B3AAAA1303A3AA6F004002B7A2999972
:1001B0009382929967800000130100009301000070
:1001C000130200009302000013030000B3C38F0169
:1001D00033C4900123202500232235002324450029
:1001E0002326550023286500232A7500232C85002B
:1001F00017150000130505E297150000938585E6A5
:10020000370610F01306C6F26306B5028326C50052
:100210002320D600832685002320D6008326450090
:100220002320D600832605002320D60013050501D0
:100230006FF09FFD370510F0130505F22320050030
:0402400000000000BA
:10100000BC000080C800008094010080A001008026
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,60 @@
:0200000480007A
:10000000971000009380000137513412130181676B
:100010009701000093810101678001001301000036
:1000200023A0000023A2200097100000938000FF6F
:100030001301F0FF9301F0FF37D2ED0F130292BAD4
:10004000970F0000938F8F0367800F00130100004C
:100050009301000013020000B741658793811132BC
:100060009702000093828203678002001301000060
:10007000930100001302000037E1BC9A130101EF65
:1000800097070000938787FD678007001301000032
:10009000930100001302000023A0000023A220000F
:1000A00023A4300023A6400097140000938484F515
:1000B00017150000130585F71301F0FF9301F0FFFA
:1000C0001302F0FF9302F0FF3753555513035355B6
:1000D00083AC040003AC4400970300009383430304
:1000E000E7800300B7212222938121221704000018
:1000F00013040404E70F0400B742444493824244CB
:10010000170F0000130FCF0467000F0037111111F4
:10011000130111116780000013010000930100001A
:100120001302000093020000130300003732333340
:100130001302323367800F001301000093010000A7
:10014000130200009302000013030000B3C39001E8
:1001500033C48F01232025002322350023244500AA
:100160002326550023286500232A7500232C8500AB
:1001700097140000938484E9171500001305C5EC5B
:100180001301F0FF9301F0FF1302F0FF9302F0FF61
:100190001303F0FF03AC040083AC44009707000096
:1001A0009387C70267800700B7717777938171776C
:1001B00067801F001301000093010000130200007C
:1001C0009302000013030000376166661301616645
:1001D000970F0000938F9FFDE78F0F00379288885D
:1001E000130282889700000093801002E7800000CD
:1001F00037B3AAAA1303A3AA170F0000130FCF0245
:1002000067000F00B7A299999382929967801000B6
:10021000130100009301000013020000930200008C
:1002200013030000B3C38F0133C4900123202500C2
:10023000232235002324450023265500232865006A
:10024000232A7500232C850097100000938080E1FD
:100250003712111113021211970100009381F1005E
:100260006780110013020000B7222222938222220B
:1002700097010000938111016780F1FF9302000054
:1002800037333333130333339701000093811181E4
:100290006780F17F13030000B743444493834344D2
:1002A0009711000093810181678001809303000012
:1002B00023A0400023A2500023A4600023A67000C6
:1002C00017150000130505D597150000938585DAED
:1002D000370610F01306C6F26306B5028326C50082
:1002E0002320D600832685002320D60083264500C0
:1002F0002320D600832605002320D6001305050100
:100300006FF09FFD370510F0130505F2232005005F
:0403100000000000E9
:10100000E4000080F8000080DC010080F001008036
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,51 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083810F0003821F0083822F0003833F0030
:100020002320310023224100232451002326610094
:10003000171C0000130C5CFD9712000093828201D4
:10004000830CFCFF030D0C00830D1C00030E2C0021
:1000500023A0920123A2A20123A4B20123A6C201DC
:1000600097130000938373FA17140000130484FF9E
:10007000038F1300838F23008380330003814300A9
:100080002320E4012322F401232414002326240046
:10009000171500001305C57797150000938585FD9A
:1000A00003060580830615800307258083073580B6
:1000B00023A0C50023A2D50023A4E50023A6F500B4
:1000C000970600009386467517170000130787FBF5
:1000D0008387C67F0388D67F8388E67F0389F67F80
:1000E0002320F700232207012324170123262701B9
:1000F00017180000130888F297180000938888F9F1
:100100000309C8FF8309D8FF030AE8FF830AF8FF41
:10011000030B0800830B1800030C2800830C380025
:10012000030D4800830D5800030E6800830E78000D
:1001300023A0280123A2380123A4480123A65801A3
:1001400023A8680123AA780123AC880123AE980173
:1001500023A0A80323A2B80323A4C80323A6D8037B
:10016000971A0000938A0AEC171B0000130B8BF5FB
:1001700003800A0023200B00971A0000938ACAEA22
:10018000171B0000130B4BF483AB0A00038C0B000E
:10019000930C0C0023209B01971C0000938C4CE9CE
:1001A000171D0000130D8DF2838C0C0023209D0180
:1001B000971D0000938D1DE8171E0000130E4EF1D1
:1001C000838DFDFF2320BE0117150000130585E771
:1001D00097150000938505F0370610F01306C6F258
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,51 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083C10F0003C21F0083C22F0003C33F0030
:100020002320310023224100232451002326610094
:10003000171C0000130C5CFD9712000093828201D4
:10004000834CFCFF034D0C00834D1C00034E2C0021
:1000500023A0920123A2A20123A4B20123A6C201DC
:1000600097130000938373FA17140000130484FF9E
:1000700003CF130083CF230083C0330003C14300A9
:100080002320E4012322F401232414002326240046
:10009000171500001305C57797150000938585FD9A
:1000A00003460580834615800347258083473580B6
:1000B00023A0C50023A2D50023A4E50023A6F500B4
:1000C000970600009386467517170000130787FBF5
:1000D00083C7C67F03C8D67F83C8E67F03C9F67F80
:1000E0002320F700232207012324170123262701B9
:1000F00017180000130888F297180000938888F9F1
:100100000349C8FF8349D8FF034AE8FF834AF8FF41
:10011000034B0800834B1800034C2800834C380025
:10012000034D4800834D5800034E6800834E78000D
:1001300023A0280123A2380123A4480123A65801A3
:1001400023A8680123AA780123AC880123AE980173
:1001500023A0A80323A2B80323A4C80323A6D8037B
:10016000971A0000938A0AEC171B0000130B8BF5FB
:1001700003C00A0023200B00971A0000938ACAEAE2
:10018000171B0000130B4BF483AB0A0003CC0B00CE
:10019000930C0C0023209B01971C0000938C4CE9CE
:1001A000171D0000130D8DF283CC0C0023209D0140
:1001B000971D0000938D1DE8171E0000130E4EF1D1
:1001C00083CDFDFF2320BE0117150000130585E731
:1001D00097150000938505F0370610F01306C6F258
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,39 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083910F0003922F002320310023224100FF
:10002000171C0000130C5CFE971200009382020262
:10003000831CFCFF031D1C0023A0920123A2A2012C
:1000400097130000938373FC1714000013048400BB
:10005000039F1300839F33002320E4012322F40134
:10006000171500001305C57A97150000938505FF45
:10007000031605808316258023A0C50023A2D50082
:10008000970600009386367917170000130787FD3F
:100090008397D67F0398F67F2320F700232207015A
:1000A00017180000130888F797180000938808FCB9
:1000B0000319C8FF8319E8FF031A0800831A2800F0
:1000C000031B4800831B680023A0280123A23801DA
:1000D00023A4480123A6580123A8680123AA780174
:1000E000971A0000938A0AF4171B0000130B8BF970
:1000F00003900A0023200B00971A0000938ACAF28B
:10010000171B0000130B4BF883AB0A00039C0B007A
:10011000930C0C0023209B01971C0000938C4CF146
:10012000171D0000130D8DF6839C0C0023209D01EC
:10013000971D0000938D1DF0171E0000130E4EF545
:10014000839DFDFF2320BE0117150000130585EFD9
:1001500097150000938505F4370610F01306C6F2D4
:100160006306B5028326C5002320D60083268500BA
:100170002320D600832645002320D60083260500B1
:100180002320D600130505016FF09FFD370510F001
:10019000130505F223200500000000000000000008
:0401A000000000005B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,39 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083D10F0003D22F0023203100232241007F
:10002000171C0000130C5CFE971200009382020262
:10003000835CFCFF035D1C0023A0920123A2A201AC
:1000400097130000938373FC1714000013048400BB
:1000500003DF130083DF33002320E4012322F401B4
:10006000171500001305C57A97150000938505FF45
:10007000035605808356258023A0C50023A2D50002
:10008000970600009386367917170000130787FD3F
:1000900083D7D67F03D8F67F2320F70023220701DA
:1000A00017180000130888F797180000938808FCB9
:1000B0000359C8FF8359E8FF035A0800835A2800F0
:1000C000035B4800835B680023A0280123A238015A
:1000D00023A4480123A6580123A8680123AA780174
:1000E000971A0000938A0AF4171B0000130B8BF970
:1000F00003D00A0023200B00971A0000938ACAF24B
:10010000171B0000130B4BF883AB0A0003DC0B003A
:10011000930C0C0023209B01971C0000938C4CF146
:10012000171D0000130D8DF683DC0C0023209D01AC
:10013000971D0000938D1DF0171E0000130E4EF545
:1001400083DDFDFF2320BE0117150000130585EF99
:1001500097150000938505F4370610F01306C6F2D4
:100160006306B5028326C5002320D60083268500BA
:100170002320D600832645002320D60083260500B1
:100180002320D600130505016FF09FFD370510F001
:10019000130505F223200500000000000000000008
:0401A000000000005B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,27 @@
:0200000480007A
:100000009717000093870701B7000000B7110000A1
:10001000B7F2FFFFB7FEFF7FB70F008023A01700E6
:1000200023A2370023A4570023A6D70123A8F70152
:1000300097170000938707FD171800001308C8FEE4
:1000400003A1070003A2070003A3070003AE0700F4
:1000500003AF07003701008037F2FF7F370300004E
:10006000371E000037FFFFFF23202800232248000F
:10007000232468002326C8012328E80197180000DC
:100080009388C8FBB77072429380F0E6B75734127A
:100090009387876737EFBC9A130F0FEF3771724260
:1000A0001301F1E63758341213088867B7EFBC9A8A
:1000B000938F0FEF23A0180023A2F80023A4E801D8
:1000C00023A6280023A8080123AAF8011715000079
:1000D000130545F4971500009385C5F7370610F012
:1000E0001306C6F26306B5028326C5002320D60098
:1000F000832685002320D600832645002320D600B2
:10010000832605002320D600130505016FF09FFD0F
:10011000370510F0130505F223200500000000004C
:0401200000000000DB
:10100000111111110000000000000000000000009C
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,33 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083A10F0023203100171C0000130CDCFE0D
:100020009712000093824202832CFCFF23A09201CE
:1000300097130000938373FD171400001304040149
:1000400083AF13002320F401171500001305457C2E
:10005000971500009385C5FF0326058023A0C500E2
:10006000970600009386167B17170000130787FE7C
:1000700083A7F67F2320F70017180000130808FA5B
:1000800097180000938848FD0329C8FF83290800BA
:10009000032A480023A0280123A2380123A44801F1
:1000A000971A0000938A0AF8171B0000130B8BFBAA
:1000B00003A00A0023200B00971A0000938ACAF6B7
:1000C000171B0000130B4BFA83AB0A0003AC0B00A9
:1000D000930C0C0023209B01971C0000938C4CF583
:1000E000171D0000130D8DF883AC0C0023209D011B
:1000F000971D0000938D1DF4171E0000130E4EF780
:1001000083ADFDFF2320BE0117150000130585F305
:1001100097150000938505F6370610F01306C6F212
:100120006306B5028326C5002320D60083268500FA
:100130002320D600832645002320D60083260500F1
:100140002320D600130505016FF09FFD370510F041
:10015000130505F223200500000000000000000048
:04016000000000009B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,53 @@
:0200000480007A
:100000009700000093808020F39F5030737012306F
:1000100097100000938000FF371111111301111187
:100020006F00A0001301000097100000938040FEB5
:10003000372122221301212217020000130212018C
:10004000670002001301000023A0200093804000FD
:100050003731333313013133170200001302020129
:10006000670012001301000023A0200093804000CD
:100070003741444413014144170200001302420176
:100080006700D2FF1301000023A0200093804000EE
:1000900097100000938080F8375155551301515542
:1000A0001702000013022201670002001301000082
:1000B00037616666130161661702000013023201A0
:1000C0006700020013010000377177771301717721
:1000D0001702000013020201670022001301000052
:1000E00037918888130181881702000013020201EA
:1000F000670032001301000097100000938000F5A4
:1001000093025000130360006387620037A199993E
:100110001301919913000000130000006385520041
:100120001301000097100000938000F39302500029
:10013000130360006397520037B1AAAA1301A1AA62
:10014000130000001300000063956200130100001B
:1001500097100000938000F1930250001303600099
:100160006347530037C1BBBB1301B1BB1300000091
:100170001300000063C56200130100009710000027
:10018000938000EF930250001303600063675300F5
:1001900037D1CCCC1301C1CC1300000013000000F8
:1001A00063E562001301000097100000938000EDEA
:1001B000930250001303600063D7620037E1DDDD76
:1001C0001301D1DD1300000013000000635553003C
:1001D0001301000097100000938000EB9302500081
:1001E0001303600063F7620037F1EEEE1301E1EEF6
:1001F000130000001300000063755300130100009A
:1002000073905F306F000003732F3034130FEFFFD4
:1002100073101F34732F3034137F3F0023A0E0018D
:10022000732F203423A2E00123A420009380C00078
:1002300073002030171500001305C5DC971500006A
:10024000938545E5370610F01306C6F26306B5023E
:100250008326C5002320D600832685002320D600D0
:10026000832645002320D600832605002320D600C0
:10027000130505016FF09FFD370510F0130505F21A
:040280002320050032
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,44 @@
:0200000480007A
:100000009700000093804014F39F50309711000038
:10001000938141FF171100001301C1FF97100000E9
:1000200093804000930250001303600003A201007C
:100030002320410003A211002322410003A221003A
:100040002324410003A23100232641009711000020
:10005000938181FB17110000130141FE97100000EE
:100060009380C0FF930250001303600003920100CD
:10007000232041000392110023224100039221001A
:1000800023244100039231002326410003D20100C2
:100090002328410003D21100232A410003D221006A
:1000A000232C410003D23100232E41001711000000
:1000B0001301C1FC97100000938040FD1303000062
:1000C000B7A299999382929923205100232251003B
:1000D00023245100232651002320610013014100F5
:1000E000A32061001301410023216100130141009D
:1000F000A3216100171100001301C1FA971000003D
:10010000938040FB13030000B7A2999993829299C0
:100110002320510023225100232451002326510083
:100120002310610013014100A3106100130141007D
:100130002311610013014100A311610073905F302E
:100140006F00C002732F1034130F4F0073101F3451
:10015000732F3034137F3F0023A0E001732F20342E
:1001600023A2E00193808000730020301715000067
:10017000130545EA971500009385C5F4370610F07E
:100180001306C6F26306B5028326C5002320D600F7
:10019000832685002320D600832645002320D60011
:1001A000832605002320D600130505016FF09FFD6F
:1001B000370510F0130505F22320050000000000AC
:0401C000000000003B
:10100000C1B1A19102F2E2D2000000000000000094
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,37 @@
:0200000480007A
:10000000971000009380000013012000930130003E
:10001000130240009302500013036000930370002A
:1000200013048000930490001305A0009305B00012
:100030001306C0009306D0001307E0009307F000FA
:1000400013080001930810011309200193093001DE
:10005000130A4001930A5001130B6001930B7001C6
:10006000130C8001930C9001130DA001930DB001AE
:10007000130EC001930ED001130FE001930FF00196
:100080001300000013000000130000001300000024
:10009000130000001300000023A0000023A2200092
:1000A00023A4300023A6400023A8500023AA600008
:1000B00023AC700023AE800023A0900223A2A002F4
:1000C00023A4B00223A6C00223A8D00223AAE002E0
:1000D00023ACF00223AE000323A0100523A22005C9
:1000E00023A4300523A6400523A8500523AA6005B4
:1000F00023AC700523AE800523A0900723A2A007A0
:1001000023A4B00723A6C00723A8D00723AAE0078B
:1001100023ACF00797110000938181F617040000CB
:100120001300000013000000130000001300000083
:100130001300000097040000B384844023A09100C2
:1001400017150000130505EC97150000938585F33E
:10015000370610F01306C6F26306B5028326C50003
:100160002320D600832685002320D6008326450041
:100170002320D600832605002320D6001305050181
:100180006FF09FFD370510F0130505F223200500E1
:04019000000000006B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,66 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033E241007D
:10003000B3E2510033E36100B3E3710033E48100C4
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B36494003365A400B365B40080
:100090003366C400B366D40023208100232291007C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF3709008033E7E6000F
:1000E000B3E7F60033E80601B3E8160133E9260169
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3693901336A4901B36A5901C9
:10014000336B6901B36B7901232021012322310133
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E008033EC8B019F
:10019000B3EC9B0133EDAB01B3EDBB0133EECB010F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C00130200018D
:1001D00093020002130300049303000813040010A9
:1001E00093040080B36E4E0033EF5E00B36F6F0078
:1001F000B3E07F0033E18000B361910023204D0024
:100200002322CD012324DD012326ED012328FD0136
:10021000232A1D00232C2D00232E3D0097100000C3
:100220009380C0DF17110000130141EA03AE000004
:10023000B79DFFF7938D8D813360BE0123200100B0
:10024000971000009380C0DD17110000130141E8F2
:1002500003AE0000B79DFFF7938D8D813360BE0123
:10026000B3620000232001002322510097100000F8
:10027000938040DB17110000130101E683A1000009
:1002800033E20100B36202003363500033670300BE
:10029000B367070033E80700B36C0001336D9001CA
:1002A000B36D0D00232041002322A1012324B101BD
:1002B00017150000130505D897150000938585E2F2
:1002C000370610F01306C6F26306B5028326C50092
:1002D0002320D600832685002320D60083264500D0
:1002E0002320D600832605002320D6001305050110
:1002F0006FF09FFD370510F0130505F22320050070
:0403000000000000F9
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800D0000007856341298BADCFE03
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,56 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013E2110093E2F17F13E3F1FFEB
:1000200093E3010013E401802320310023224100E7
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101007D
:1000500003A40000936414001365F47F9365F4FF18
:1000600013660400936604802320810023229100FC
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FD84
:1000900083A6000013E7160093E7F67F13E8F6FF48
:1000A00093E8060013E906802320D1002322E10013
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FB8A
:1000D00003A9000093691900136AF97F936AF9FF75
:1000E000136B0900936B0980232021012322310126
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F88F
:1001100083AB000013EC1B0093ECFB7F13EDFBFFA4
:1001200093ED0B0013EE0B8023207101232281013C
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF64A
:10015000032E0D00936E0E0113EF0E02936F0F042A
:1001600093E00F0813E100109361018023A0CD01FB
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F383A2000013E01200C5
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F183A2000013E01200936210004A
:1001C000232001002322510097100000938080E536
:1001D00017110000130101F083A1000013E20100D8
:1001E0009362020013E302001367030093670700A2
:1001F00013E80700936C080013ED0C00936D0D00DD
:1002000023203100232241002324A1012326B10110
:1002100017150000130505E297150000938585EC7E
:10022000370610F01306C6F26306B5028326C50032
:100230002320D600832685002320D6008326450070
:100240002320D600832605002320D60013050501B0
:100250006FF09FFD370510F0130505F22320050010
:04026000000000009A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800D0000007856341298BADCFE03
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:100000001718000013080800377072421300F0E65A
:10001000B7303356938090243721562D1301210594
:10002000B77169529381313637826B731302029232
:10003000B7627473938222573753206E1303F3E62B
:10004000B773694D938313C63764646F1304341711
:10005000B744796B93843406377565741305352777
:10006000B7756E28938535F737266B6513068604BA
:10007000B76652209386461637376D6F1307C792BF
:10008000B7377069938737E62320080023221800CA
:10009000232428002326380023284800232A580038
:1000A000232C6800232E7800232088022322980224
:1000B0002324A8022326B8022328C802232AD80210
:1000C000232CE802232EF80217120000130282F7F5
:1000D00037686F6313081846B778656A938808B461
:1000E0003779282013091986B7696A619389B95647
:1000F000376A7661130A0A52B75A202E938A5AC673
:10010000377B6F63130B9BD2B77B6973938BEB02C7
:10011000378C2066130CFC96B72C6567938C9C0675
:10012000377D7365130D1D36B72D7375938DDD0601
:10013000371E293A130EAED0B77E6968938E0E3201
:10014000372F6461130F4F07B77F2075938F5F269A
:10015000232002012322120123242201232632011B
:1001600023284201232A5201232C6201232E7201EB
:1001700023208203232292032324A2032326B203F3
:100180002328C203232AD203232CE203232EF203C3
:1001900017120000130202EF232002002322120094
:1001A000232422002326320017150000130585E5BD
:1001B00097150000938505EE370610F01306C6F27A
:1001C0006306B5028326C5002320D600832685005A
:1001D0002320D600832645002320D6008326050051
:1001E0002320D600130505016FF09FFD370510F0A1
:1001F000130505F2232005000000000000000000A8
:0402000000000000FA
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,57 @@
:0200000480007A
:1000000017180000130808001300100093001000D8
:10001000130110009301100013021000930210004E
:100020001303100093031000130410009304100036
:10003000130510009305100013061000930610001E
:1000400013071000930710009390F00163C40000A1
:10005000930000001311F10163440100130100003B
:100060009391F10163C40100930100001312F201A6
:1000700063440200130200009392F20163C4020081
:10008000930200001313F301634403001303000001
:100090009393F30163C40300930300001314F4016A
:1000A00063440400130400009394F40163C4040047
:1000B000930400001315F5016344050013050000C7
:1000C0009395F50163C40500930500001316F6012E
:1000D00063440600130600009396F60163C406000D
:1000E000930600001317F70163440700130700008D
:1000F0009397F70163C407009307000023200800CB
:10010000232218002324280023263800232848000F
:10011000232A5800232C6800232E780023208802ED
:10012000232298022324A8022326B8022328C802E7
:10013000232AD802232CE802232EF802971000006D
:10014000938040F01308100093081000130910006A
:1001500093091000130A1000930A1000130B1000EB
:10016000930B1000130C1000930C1000130D1000D3
:10017000930D1000130E1000930E1000130F1000BB
:10018000930F10001318F8016344080013080000CF
:100190009398F80163C40800930800001319F9014B
:1001A00063440900130900009399F90163C409002D
:1001B00093090000131AFA0163440A00130A0000AD
:1001C000939AFA0163C40A00930A0000131BFB010F
:1001D00063440B00130B0000939BFB0163C40B00F3
:1001E000930B0000131CFC0163440C00130C000073
:1001F000939CFC0163C40C00930C0000131DFD01D3
:1002000063440D00130D0000939DFD0163C40D00B8
:10021000930D0000131EFE0163440E00130E000038
:10022000939EFE0163C40E00930E0000131FFF0196
:1002300063440F00130F0000939FFF0163C40F007E
:10024000930F000023A0000123A2100123A420018A
:1002500023A6300123A8400123AA500123AC60014A
:1002600023AE700123A0800323A2900323A4A00344
:1002700023A6B00323A8C00323AAD00323ACE00322
:1002800023AEF003171500001305C5D7971500001E
:10029000938545DF370610F01306C6F26306B502F4
:1002A0008326C5002320D600832685002320D60080
:1002B000832645002320D600832605002320D60070
:1002C000130505016FF09FFD370510F0130505F2CA
:0402D00023200500E2
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,29 @@
:0200000480007A
:10000000971F0000938F0F0137E0CDAB1300100056
:100010001360007F1370F0531340308013105000B2
:10002000135020401350400023A00F00971F0000E2
:10003000938F8FFE930010001301007F9301F05304
:1000400013023080930250001303200093034000FA
:100050001304800117E0CDAB3300100033602000A3
:100060003370300033404000331050003350604054
:10007000335070003300804023A00F00971F000012
:10008000938FCFF9930010001301200033A02000BC
:1000900023A00F0033B0200023A20F0013A02000E4
:1000A00023A40F0013B0200023A60F00971F000009
:1000B000938FCFF76F00400023A00F009700000040
:1000C0009380C0006780000023A20F0097100000FB
:1000D000938040F3971F0000938FCFF503A000009B
:1000E00023A00F000390000023A20F000380000054
:1000F00023A40F0003C0000023A60F001715000063
:10010000130545F1971500009385C5F3370610F0E8
:100110001306C6F26306B5028326C5002320D60067
:10012000832685002320D600832645002320D60081
:10013000832605002320D600130505016FF09FFDDF
:10014000370510F0130505F223200500000000001C
:0401500000000000AB
:101000004F4E5242000000000000000000000000AF
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:100000009710000093800001B7CFAAAA938FBFBBBF
:1000100023A0F00137F1F1111301212223802000E8
:1000200097120000938252FFA3AF02FEB74C33F346
:10003000938C4C4FA38F92FF171400001304F4FD10
:10004000A3200400B7FFF555938F6F66A300F4015A
:10005000971500009385C57C23A00580379677F718
:100060001306868F2380C580170700001307977B30
:10007000A32F077EB71709999387A7AAA30FF77E27
:1000800097180000938888FA371911111309C910BD
:10009000B72922229389C92C373A3333130ABA3B42
:1000A000B74A4444938ABA40375B5555130BEB5E0D
:1000B000B76B6666938BEB60377C7777130CDC70DD
:1000C000B79C8888938CDC8D37AD9999130D0D9F63
:1000D000B7BDAAAA938D0DA037CEBBBB130EFEBF32
:1000E000B7DECCCC938EFEC0238E28FFA38E38FFC4
:1000F000238F48FFA38F58FF23806801A3807801D6
:1001000023818801A38198012382A801A382B801D9
:100110002383C801A383D801171B0000130B8BF1A5
:10012000B74065879380103223201B00375034126C
:100130001300806723000B00971A0000938A8AEC53
:1001400083A00A0023A00000B73922119389493403
:1001500083AB0A0023803B01971B0000938BCBEA03
:10016000171C0000130C8CED23200C0083AC0B003B
:1001700023009C01171D0000130D8DEC23200D00A2
:10018000B73C5476938C0C2123009D01930C000006
:10019000171E0000130E0EEB23200E00B7DDAB89F7
:1001A000938DFDDE2300BE01130ECEFF971E0000CF
:1001B000938E8EE923A00E0023A20E00B76D721459
:1001C000938D6D832380BE0103AF0E002382EE0169
:1001D000971000009380C0E723A0000037513896A5
:1001E00013011120B751812593813196238020007E
:1001F00023803000171500001305C5E19715000096
:10020000938545E5370610F01306C6F26306B5027E
:100210008326C5002320D600832685002320D60010
:10022000832645002320D600832605002320D60000
:10023000130505016FF09FFD370510F0130505F25A
:040240002320050072
:1010000034100080F0DEBC9A0000000000000000F8
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,41 @@
:0200000480007A
:100000009710000093800001B7CFAAAA938FBFBBBF
:1000100023A0F00137F1F1111301212223902000D8
:1000200097120000938252FFA3AF02FEB74C33F346
:10003000938C4C4FA39F92FF171400001304F4FD00
:10004000A3200400B7FFF555938F6F66A310F4014A
:10005000971500009385C57C23A00580379677F718
:100060001306868F2390C580170700001307977B20
:10007000A32F077EB71709999387A7AAA31FF77E17
:1000800097180000938888FA37D911111309C9C04D
:10009000B71922229389B9BB371A3333130AEAEE10
:1000A000B7EA4444938ADAD0370B7777130B0B0FF8
:1000B000B71B6666938BFBFF239E28FF239F38FFA9
:1000C00023904801239158012392680123937801DA
:1000D000171B0000130B0BF6B74065879380103297
:1000E00023201B00375034121300806723100B00AD
:1000F000971A0000938A0AF183A00A0023A0000047
:10010000B73922119389493483AB0A0023903B010C
:10011000971B0000938B4BEF171C0000130C0CF285
:1001200023200C0083AC0B0023109C01171D000042
:10013000130D0DF123200D00B73C5476938C0C2148
:1001400023109D01930C0000171E0000130E8EEF6C
:1001500023200E00B7DDAB89938DFDDE2310BE0199
:10016000130ECEFF971E0000938E0EEE23A00E00FE
:1001700023A20E00B76D7214938D6D832390BE0180
:1001800003AF0E002392EE0197100000938040EC25
:1001900023A000003751389613011120B751812553
:1001A0009381319623902000239030001715000092
:1001B000130545E6971500009385C5E9370610F04D
:1001C0001306C6F26306B5028326C5002320D600B7
:1001D000832685002320D600832645002320D600D1
:1001E000832605002320D600130505016FF09FFD2F
:1001F000370510F0130505F223200500000000006C
:0402000000000000FA
:1010000034100080F0DEBC9A0000000000000000F8
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,64 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A10000130210009302F0001303F0010B
:10002000930300001304000133924100B392510086
:1000300033936100B3937100339481002320310026
:10004000232241002324510023266100232871002C
:10005000232A810097100000938000FB17110000F5
:100060001301C1FE03A40000930410001305F00067
:100070009305F0011306000093060001B3149400E9
:100080003315A400B315B4003316C400B316D4005E
:1000900023208100232291002324A1002326B100E4
:1000A0002328C100232AD10097100000938000F676
:1000B00017110000130101FB83A6000013071000B5
:1000C0009307F0001308F0019308000013090001E2
:1000D0003397E600B397F60033980601B3981601FC
:1000E000339926012320D1002322E1002324F100AB
:1000F0002326010123281101232A210117160000BC
:10010000130606F197160000938646F703290600AA
:1001100093091000130AF000930AF001130B00007A
:10012000930B0001B3193901331A4901B31A59016C
:10013000331B6901B31B790123A0260123A23601D9
:1001400023A4460123A6560123A8660123AA76010B
:1001500017160000130606EC97160000938686F328
:10016000832B0600130C1000930CF000130DF0010C
:10017000930D0000130E0001339C8B01B39C9B0177
:10018000339DAB01B39DBB01339ECB0123A0760110
:1001900023A2860123A4960123A6A60123A8B601C3
:1001A00023AAC601971C0000938C0CE7171D0000C2
:1001B000130DCDEF03AE0C00930D1000B31EBE0166
:1001C000339FBE01B31FBF01B390BF013391B00194
:1001D000B311B1012320CD012322DD012324ED0140
:1001E0002326FD0123281D00232A2D00232C3D005A
:1001F00097100000938080E2171100001301C1ECFA
:1002000083A20000930D10003390B201232001005F
:10021000971000009380C0E017110000130101EB5C
:1002200083A20000930D10003390B201B312B0010D
:10023000232001002322510097100000938080DECC
:1002400017110000130101E983A10000370200101B
:10025000130202FEB7020010938212FE3703001051
:100260001303F3FEB70300109383F3FF33924100AF
:10027000B392510033936100B39371002320410086
:10028000232251002324610023267100171500004A
:10029000130545DA971500009385C5E4370610F07D
:1002A0001306C6F26306B5028326C5002320D600D6
:1002B000832685002320D600832645002320D600F0
:1002C000832605002320D600130505016FF09FFD4E
:1002D000370510F0130505F223200500000000008B
:0402E000000000001A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:101010000000008010EFCDAB7856341298BADCFE99
:101020002143658700000000000000000000000070
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A10000139211009392F1001393F10158
:100020009393010013940101232031002322410006
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101FF7E
:1000500003A40000931414001315F4009315F40185
:10006000131604009316040123208100232291001B
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FC85
:1000900083A60000139716009397F6001398F601B5
:1000A00093980600139906012320D1002322E10032
:1000B0002324F1002326010123281101232A2101F1
:1000C000171600001306C6F497160000938606FA6A
:1000D0000329060093191900131AF900931AF9015C
:1000E000131B0900931B090123A0260123A236013B
:1000F00023A4460123A6560123A8660123AA76015C
:1001000017160000130606F197160000938686F76F
:10011000832B0600139C1B00939CFB00139DFB018B
:10012000939D0B00139E0B0123A0760123A2860151
:1001300023A4960123A6A60123A8B60123AAC601DB
:10014000171D0000130D4DED971D0000938D0DF54B
:10015000032E0D00931E1E00139F1E00931F1F00F1
:1001600093901F00139110009311110023A0CD0153
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F283A200001390120016
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F083A200001390120093121000EB
:1001C000232001002322510017150000130585E5A7
:1001D00097150000938505EF370610F01306C6F259
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:101000000000000001000000FFFFFFFFFFFFFF7F67
:101010000000008010EFCDAB7856341298BADCFE99
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,63 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013021000B70200809382F2FF58
:100020001303F0FF930300003704008033A2410064
:10003000B3A2510033A36100B3A3710033A48100C4
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FD03A400009304100088
:10007000370500801305F5FF9305F0FF1306000018
:10008000B7060080B32494003325A400B325B40040
:100090003326C400B326D4002320810023229100FC
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181F95B
:1000C00083A6000013071000B70700809387F7FF8F
:1000D0001308F0FF930800003709008033A7E600FB
:1000E000B3A7F60033A80601B3A8160133A9260169
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F503A9000093091000D5
:10012000370A0080130AFAFF930AF0FF130B00004E
:10013000B70B0080B3293901332A4901B32A590189
:10014000332B6901B32B79012320210123223101B3
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F13C
:1001700083AB0000130C1000B70C0080938CFCFFC5
:10018000130DF0FF930D0000370E008033AC8B0190
:10019000B3AC9B0133ADAB01B3ADBB0133AECB010F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101171D0000130DCDE52D
:1001C000971D0000938D8DED83200D00130110000D
:1001D00033A0200023A00D0023A21D0023A42D0086
:1001E000971F0000938F4FEC930010001301F07FD6
:1001F0009301F0FF130200009302008033231000EC
:10020000B323200033243000B324400033255000B2
:10021000B3A5000033260100B3A601003327020076
:10022000B3A7020023A06F0023A27F0023A48F00A6
:1002300023A69F0023A8AF0023AABF0023ACCF00B2
:1002400023AEDF0023A0EF0223A2FF02971F0000CE
:10025000938F0FE893011000B320300033A13000DA
:10026000332E3100B32E3E0033AF3E0023A01F00DB
:1002700023A22F0023A4CF0123A6DF0123A8EF018F
:1002800017150000130505DA97150000938585E51D
:10029000370610F01306C6F26306B5028326C500C2
:1002A0002320D600832685002320D6008326450000
:1002B0002320D600832605002320D6001305050140
:1002C0006FF09FFD370510F0130505F223200500A0
:0402D000000000002A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFFFFF000000000000000054
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,51 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013A2110093A2F17F13A3F1FFAB
:1000200093A3010013A40180232031002322410067
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101FF7E
:1000500003A40000932414001325F47F9325F4FFD8
:10006000132604009326048023208100232291007C
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FC85
:1000900083A6000013A7160093A7F67F13A8F6FF08
:1000A00093A8060013A906802320D1002322E10093
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FA8B
:1000D00003A9000093291900132AF97F932AF9FF35
:1000E000132B0900932B09802320210123223101A6
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F790
:1001100083AB000013AC1B0093ACFB7F13ADFBFF64
:1001200093AD0B0013AE0B802320710123228101BC
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF54B
:1001500083200D0013A0100023A01D0023A20D007A
:10016000971F0000938F0FF4932010001321F07F4E
:100170009321F0FF132200009322008023A00F00A0
:1001800023A21F0023A42F0023A63F0023A84F0073
:1001900023AA5F00971F0000938F4FF29320100057
:1001A00013A11000132E1100932E1E0013AF1E007A
:1001B00023A00F0023A21F0023A42F0023A6CF01FA
:1001C00023A8DF0123AAEF0117150000130585E519
:1001D00097150000938505F0370610F01306C6F258
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFFFFF000000000000000054
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,51 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013B2110093B2F17F13B3F1FF7B
:1000200093B3010013B40180232031002322410047
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101FF7E
:1000500003A40000933414001335F47F9335F4FFA8
:10006000133604009336048023208100232291005C
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FC85
:1000900083A6000013B7160093B7F67F13B8F6FFD8
:1000A00093B8060013B906802320D1002322E10073
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FA8B
:1000D00003A9000093391900133AF97F933AF9FF05
:1000E000133B0900933B0980232021012322310186
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F790
:1001100083AB000013BC1B0093BCFB7F13BDFBFF34
:1001200093BD0B0013BE0B8023207101232281019C
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF54B
:1001500083200D0013B0F0FF23A01D0023A20D008B
:10016000971F0000938F0FF4933010001331F07F2E
:100170009331F0FF133200009332008023A00F0070
:1001800023A21F0023A42F0023A63F0023A84F0073
:1001900023AA5F00971F0000938F4FF29330100047
:1001A00013B11000133E1100933E1E0013BF1E003A
:1001B00023A00F0023A21F0023A42F0023A6CF01FA
:1001C00023A8DF0123AAEF0117150000130585E519
:1001D00097150000938505F0370610F01306C6F258
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,63 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013021000B70200809382F2FF58
:100020001303F0FF930300003704008033B2410054
:10003000B3B2510033B36100B3B3710033B4810084
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FD03A400009304100088
:10007000370500801305F5FF9305F0FF1306000018
:10008000B7060080B33494003335A400B335B40010
:100090003336C400B336D4002320810023229100DC
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181F95B
:1000C00083A6000013071000B70700809387F7FF8F
:1000D0001308F0FF930800003709008033B7E600EB
:1000E000B3B7F60033B80601B3B8160133B9260129
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F503A9000093091000D5
:10012000370A0080130AFAFF930AF0FF130B00004E
:10013000B70B0080B3393901333A4901B33A590159
:10014000333B6901B33B7901232021012322310193
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F13C
:1001700083AB0000130C1000B70C0080938CFCFFC5
:10018000130DF0FF930D0000370E008033BC8B0180
:10019000B3BC9B0133BDAB01B3BDBB0133BECB01CF
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101171D0000130DCDE52D
:1001C000971D0000938D8DED83200D001301F0FF2E
:1001D00033B0200023A00D0023A21D0023A42D0076
:1001E000971F0000938F4FEC930010001301F07FD6
:1001F0009301F0FF130200009302008033331000DC
:10020000B333200033343000B33440003335500072
:10021000B3B5000033360100B3B601003337020036
:10022000B3B7020023A06F0023A27F0023A48F0096
:1002300023A69F0023A8AF0023AABF0023ACCF00B2
:1002400023AEDF0023A0EF0223A2FF02971F0000CE
:10025000938F0FE893011000B330300033B13000BA
:10026000333E3100B33E3E0033BF3E0023A01F00AB
:1002700023A22F0023A4CF0123A6DF0123A8EF018F
:1002800017150000130505DA97150000938585E51D
:10029000370610F01306C6F26306B5028326C500C2
:1002A0002320D600832685002320D6008326450000
:1002B0002320D600832605002320D6001305050140
:1002C0006FF09FFD370510F0130505F223200500A0
:0402D000000000002A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

Some files were not shown because too many files have changed in this diff Show More