Compare commits

..

10 Commits

Author SHA1 Message Date
fbdaa89cc0 Refactor data diffing & expose WASM API (#256)
* Refactor data diffing & expose WASM API

* Update test snapshots
2025-09-07 18:59:46 -06:00
f7cb494a62 Version v3.1.1 2025-09-07 11:32:43 -06:00
iFarbod
7cc6ed2b43 Add support for x86 indirect tables (#251)
* Add support for x86 indirect tables

Closes #239

* Fix formatting issues in x86.rs

* Add x86 indirect table test
2025-09-07 11:28:23 -06:00
Toms
532b684682 Implement automatic symbol pairing for MSVC generated static functions (#255) 2025-09-07 11:28:01 -06:00
LagoLunatic
fb1d434bbc Version v3.1.0 2025-09-03 21:44:03 -04:00
LagoLunatic
23009bf9a3 Implement diffing individual data symbols (#244)
* Implement diffing individual data symbols

* Remove unused code for diffing sections

* Data diff view: Make rows show offset within the symbol, not within the section

* Remove SelectedSymbol enum as it only has a single variant now

* Create fake data section symbols to allow diffing entire sections again

* Fix text sections not having their size zeroed out

* Update test snapshots

* Clean up code for inferring section symbol size

* Fix bug where PPC pool references weren't ignoring section symbols

* Update comment

* Always add unique section symbols for data sections

* Update test snapshots

* Remove unnecessary clone in format! call

* Auto-start mapping for unpaired data symbols
2025-09-02 19:37:17 -06:00
Anghelo Carvajal
6fb4bb8855 [MIPS] Fix symbols being filtered out from target side of diff if target object contains .NON_MATCHING markers (#250)
* Fix filtering out symbols from the target side that have a symbol with the same name and a `.NON_MATCHING` suffix.

- Target side: Show all the symbols except the `.NON_MATCHING` ones.
- Base side: Ignore all the `.NON_MATCHING` symbols and also ignore the ones with the same name without the suffix

* fmt

* comment

* tests

* fmt tests

* maybe this could fix wasm?

* Fix wasm?

* fmt

* Move `DiffSide` to `diff` mod

* Update the stuff the advisories CI told me to
2025-09-02 19:13:29 -06:00
a138dfa907 Gracefully handle OOB in symbol_context/symbol_hover
Resolves decomp.me#1576
2025-09-02 19:11:07 -06:00
rjkiv
0b95613768 Hide certain symbols for X360 COFFs (#248)
* hide except_data symbols

* hide unwinds by default

* move COFF filters to obj/read.rs

* cargo fmt read.rs

* clippy moment

* clippy pls
2025-08-31 16:45:21 -06:00
5d4b33a500 Update README.md & config.schema.json 2025-08-30 23:56:46 -06:00
42 changed files with 17817 additions and 588 deletions

58
Cargo.lock generated
View File

@@ -1898,8 +1898,8 @@ dependencies = [
"aho-corasick",
"bstr",
"log",
"regex-automata 0.4.9",
"regex-syntax 0.8.5",
"regex-automata",
"regex-syntax",
"serde",
]
@@ -2832,11 +2832,11 @@ dependencies = [
[[package]]
name = "matchers"
version = "0.1.0"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
dependencies = [
"regex-automata 0.1.10",
"regex-automata",
]
[[package]]
@@ -3092,12 +3092,11 @@ checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d"
[[package]]
name = "nu-ansi-term"
version = "0.46.0"
version = "0.50.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399"
dependencies = [
"overload",
"winapi",
"windows-sys 0.52.0",
]
[[package]]
@@ -3436,7 +3435,7 @@ dependencies = [
[[package]]
name = "objdiff-cli"
version = "3.0.1"
version = "3.2.0"
dependencies = [
"anyhow",
"argp",
@@ -3459,7 +3458,7 @@ dependencies = [
[[package]]
name = "objdiff-core"
version = "3.0.1"
version = "3.2.0"
dependencies = [
"anyhow",
"arm-attr",
@@ -3514,7 +3513,7 @@ dependencies = [
[[package]]
name = "objdiff-gui"
version = "3.0.1"
version = "3.2.0"
dependencies = [
"anyhow",
"argp",
@@ -3551,7 +3550,7 @@ dependencies = [
[[package]]
name = "objdiff-wasm"
version = "3.0.1"
version = "3.2.0"
dependencies = [
"log",
"objdiff-core",
@@ -3684,12 +3683,6 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "overload"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]]
name = "owned_ttf_parser"
version = "0.25.1"
@@ -4312,17 +4305,8 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata 0.4.9",
"regex-syntax 0.8.5",
]
[[package]]
name = "regex-automata"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
dependencies = [
"regex-syntax 0.6.29",
"regex-automata",
"regex-syntax",
]
[[package]]
@@ -4333,15 +4317,9 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax 0.8.5",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
version = "0.8.5"
@@ -5563,14 +5541,14 @@ dependencies = [
[[package]]
name = "tracing-subscriber"
version = "0.3.19"
version = "0.3.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5"
dependencies = [
"matchers",
"nu-ansi-term",
"once_cell",
"regex",
"regex-automata",
"sharded-slab",
"smallvec",
"thread_local",

View File

@@ -14,7 +14,7 @@ default-members = [
resolver = "3"
[workspace.package]
version = "3.0.1"
version = "3.2.0"
authors = ["Luke Street <luke@street.dev>"]
edition = "2024"
license = "MIT OR Apache-2.0"

132
README.md
View File

@@ -7,12 +7,14 @@ A local diffing tool for decompilation projects. Inspired by [decomp.me](https:/
Features:
- Compare entire object files: functions and data.
- Built-in symbol demangling for C++. (CodeWarrior, Itanium & MSVC)
- Automatic rebuild on source file changes.
- Project integration via [configuration file](#configuration).
- Search and filter all of a project's objects and quickly switch.
- Click to highlight all instances of values and registers.
- Compare entire object files: functions and data
- Built-in C++ symbol demangling (GCC, MSVC, CodeWarrior, Itanium)
- Automatic rebuild on source file changes
- Project integration via [configuration file](#configuration)
- Search and filter objects with quick switching
- Click-to-highlight values and registers
- Detailed progress reporting (powers [decomp.dev](https://decomp.dev))
- WebAssembly API, [web interface](https://github.com/encounter/objdiff-web) and [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=decomp-dev.objdiff) (WIP)
Supports:
@@ -40,7 +42,7 @@ For Linux and macOS, run `chmod +x objdiff-*` to make the binary executable.
### CLI
CLI binaries can be found on the [releases page](https://github.com/encounter/objdiff/releases).
CLI binaries are available on the [releases page](https://github.com/encounter/objdiff/releases).
## Screenshots
@@ -49,33 +51,30 @@ CLI binaries can be found on the [releases page](https://github.com/encounter/ob
## Usage
objdiff works by comparing two relocatable object files (`.o`). The objects are expected to have the same relative path
from the "target" and "base" directories.
objdiff compares two relocatable object files (`.o`). Here's how it works:
For example, if the target ("expected") object is located at `build/asm/MetroTRK/mslsupp.o` and the base ("actual")
object is located at `build/src/MetroTRK/mslsupp.o`, the following configuration would be used:
1. **Create an `objdiff.json` configuration file** in your project root (or generate it with your build script).
This file lists **all objects in the project** with their target ("expected") and base ("current") paths.
- Target build directory: `build/asm`
- Base build directory: `build/src`
- Object: `MetroTRK/mslsupp.o`
2. **Load the project** in objdiff.
objdiff will then execute the build system from the project directory to build both objects:
3. **Select an object** from the sidebar to begin diffing.
```sh
$ make build/asm/MetroTRK/mslsupp.o # Only if "Build target object" is enabled
$ make build/src/MetroTRK/mslsupp.o
```
4. **objdiff automatically:**
- Executes the build system to compile the base object (from current source code)
- Compares the two objects and displays the differences
- Watches for source file changes and rebuilds when detected
The objects will then be compared and the results will be displayed in the UI.
The configuration file allows complete flexibility in project structure - your build directories can have any layout as long as the paths are specified correctly.
See [Configuration](#configuration) for more information.
See [Configuration](#configuration) for setup details.
## Configuration
While **not required** (most settings can be specified in the UI), projects can add an `objdiff.json` file to configure the tool automatically. The configuration file must be located in
Projects can add an `objdiff.json` file to configure the tool automatically. The configuration file must be located in
the root project directory.
If your project has a generator script (e.g. `configure.py`), it's recommended to generate the objdiff configuration
If your project has a generator script (e.g. `configure.py`), it's highly recommended to generate the objdiff configuration
file as well. You can then add `objdiff.json` to your `.gitignore` to prevent it from being committed.
```json
@@ -128,78 +127,69 @@ file as well. You can then add `objdiff.json` to your `.gitignore` to prevent it
### Schema
View [config.schema.json](config.schema.json) for all available options. The below list is a summary of the most important options.
> [!NOTE]
> View [config.schema.json](config.schema.json) for all available options. Below is a summary of the most important options.
`custom_make` _(optional)_: By default, objdiff will use `make` to build the project.
If the project uses a different build system (e.g. `ninja`), specify it here.
The build command will be `[custom_make] [custom_args] path/to/object.o`.
#### Build Configuration
`custom_args` _(optional)_: Additional arguments to pass to the build command prior to the object path.
**`custom_make`** _(optional, default: `"make"`)_
If the project uses a different build system (e.g. `ninja`), specify it here. The build command will be `[custom_make] [custom_args] path/to/object.o`.
`build_target`: If true, objdiff will tell the build system to build the target objects before diffing (e.g.
`make path/to/target.o`).
This is useful if the target objects are not built by default or can change based on project configuration or edits
to assembly files.
Requires the build system to be configured properly.
**`custom_args`** _(optional)_
Additional arguments to pass to the build command prior to the object path.
`build_base`: If true, objdiff will tell the build system to build the base objects before diffing (e.g. `make path/to/base.o`).
It's unlikely you'll want to disable this, unless you're using an external tool to rebuild the base object on source file changes.
**`build_target`** _(default: `false`)_
If true, objdiff will build the target objects before diffing (e.g. `make path/to/target.o`). Useful if target objects are not built by default or can change based on project configuration. Requires proper build system configuration.
`watch_patterns` _(optional)_: A list of glob patterns to watch for changes.
([Supported syntax](https://docs.rs/globset/latest/globset/#syntax))
If any of these files change, objdiff will automatically rebuild the objects and re-compare them.
If not specified, objdiff will use the default patterns listed above.
**`build_base`** _(default: `true`)_
If true, objdiff will build the base objects before diffing (e.g. `make path/to/base.o`). It's unlikely you'll want to disable this unless using an external tool to rebuild the base object.
`ignore_patterns` _(optional)_: A list of glob patterns to explicitly ignore when watching for changes.
([Supported syntax](https://docs.rs/globset/latest/globset/#syntax))
If not specified, objdiff will use the default patterns listed above.
#### File Watching
`units` _(optional)_: If specified, objdiff will display a list of objects in the sidebar for easy navigation.
**`watch_patterns`** _(optional, default: listed above)_
A list of glob patterns to watch for changes ([supported syntax](https://docs.rs/globset/latest/globset/#syntax)). When these files change, objdiff automatically rebuilds and re-compares objects.
> `name` _(optional)_: The name of the object in the UI. If not specified, the object's `path` will be used.
>
> `target_path`: Path to the "target" or "expected" object from the project root.
> This object is the **intended result** of the match.
>
> `base_path`: Path to the "base" or "actual" object from the project root.
> This object is built from the **current source code**.
>
> `metadata.auto_generated` _(optional)_: Hides the object from the object list, but still includes it in reports.
>
> `metadata.complete` _(optional)_: Marks the object as "complete" (or "linked") in the object list.
> This is useful for marking objects that are fully decompiled. A value of `false` will mark the object as "incomplete".
**`ignore_patterns`** _(optional, default: listed above)_
A list of glob patterns to explicitly ignore when watching for changes ([supported syntax](https://docs.rs/globset/latest/globset/#syntax)).
#### Units (Objects)
**`units`** _(optional)_
If specified, objdiff displays a list of objects in the sidebar for easy navigation. Each unit contains:
- **`name`** _(optional)_ - The display name in the UI. Defaults to the object's `path`.
- **`target_path`** _(optional)_ - Path to the "target" or "expected" object (the **intended result**).
- **`base_path`** _(optional)_ - Path to the "base" or "current" object (built from **current source code**). Omit if there is no source object yet.
- **`metadata.auto_generated`** _(optional)_ - Hides the object from the sidebar but includes it in progress reports.
- **`metadata.complete`** _(optional)_ - Marks the object as "complete" (linked) when `true` or "incomplete" when `false`.
## Building
Install Rust via [rustup](https://rustup.rs).
```shell
$ git clone https://github.com/encounter/objdiff.git
$ cd objdiff
$ cargo run --release
git clone https://github.com/encounter/objdiff.git
cd objdiff
cargo run --release
```
Or using `cargo install`.
Or install directly with cargo:
```shell
$ cargo install --locked --git https://github.com/encounter/objdiff.git objdiff-gui objdiff-cli
cargo install --locked --git https://github.com/encounter/objdiff.git objdiff-gui objdiff-cli
```
The binaries will be installed to `~/.cargo/bin` as `objdiff` and `objdiff-cli`.
Binaries will be installed to `~/.cargo/bin` as `objdiff` and `objdiff-cli`.
## Installing `pre-commit`
## Contributing
When contributing, it's recommended to install `pre-commit` to automatically run the linter and formatter before a commit.
[`uv`](https://github.com/astral-sh/uv#installation) is recommended to manage Python version and tools.
Rust nightly is required for `cargo +nightly fmt` and `cargo +nightly clippy`.
Install `pre-commit` to run linting and formatting automatically:
```shell
$ cargo install --locked cargo-deny
$ rustup toolchain install nightly
$ uv tool install pre-commit
$ pre-commit install
rustup toolchain install nightly # Required for cargo fmt/clippy
cargo install --locked cargo-deny # https://github.com/EmbarkStudios/cargo-deny
uv tool install pre-commit # https://docs.astral.sh/uv, or use pipx or pip
pre-commit install
```
## License

View File

@@ -15,7 +15,7 @@
},
"custom_make": {
"type": "string",
"description": "By default, objdiff will use make to build the project.\nIf the project uses a different build system (e.g. ninja), specify it here.\nThe build command will be `[custom_make] [custom_args] path/to/object.o`.",
"description": "If the project uses a different build system (e.g. ninja), specify it here.\nThe build command will be `[custom_make] [custom_args] path/to/object.o`.",
"examples": [
"make",
"ninja"
@@ -41,17 +41,17 @@
},
"build_target": {
"type": "boolean",
"description": "If true, objdiff will tell the build system to build the target objects before diffing (e.g. `make path/to/target.o`).\nThis is useful if the target objects are not built by default or can change based on project configuration or edits to assembly files.\nRequires the build system to be configured properly.",
"description": "If true, objdiff will build the target objects before diffing (e.g. `make path/to/target.o`).\nUseful if target objects are not built by default or can change based on project configuration.\nRequires proper build system configuration.",
"default": false
},
"build_base": {
"type": "boolean",
"description": "If true, objdiff will tell the build system to build the base objects before diffing (e.g. `make path/to/base.o`).\nIt's unlikely you'll want to disable this, unless you're using an external tool to rebuild the base object on source file changes.",
"description": "If true, objdiff will build the base objects before diffing (e.g. `make path/to/base.o`).\nIt's unlikely you'll want to disable this unless using an external tool to rebuild the base object.",
"default": true
},
"watch_patterns": {
"type": "array",
"description": "List of glob patterns to watch for changes in the project.\nIf any of these files change, objdiff will automatically rebuild the objects and re-compare them.\nSupported syntax: https://docs.rs/globset/latest/globset/#syntax",
"description": "A list of glob patterns to watch for changes.\nWhen these files change, objdiff automatically rebuilds and re-compares objects.\nSupported syntax: https://docs.rs/globset/latest/globset/#syntax",
"items": {
"type": "string"
},
@@ -82,7 +82,7 @@
},
"ignore_patterns": {
"type": "array",
"description": "List of glob patterns to explicitly ignore when watching for changes.\nFiles matching these patterns will not trigger a rebuild.\nSupported syntax: https://docs.rs/globset/latest/globset/#syntax",
"description": "A list of glob patterns to explicitly ignore when watching for changes.\nSupported syntax: https://docs.rs/globset/latest/globset/#syntax",
"items": {
"type": "string"
},
@@ -119,7 +119,7 @@
"properties": {
"name": {
"type": "string",
"description": "The name of the object in the UI. If not specified, the object's path will be used."
"description": "The display name in the UI. Defaults to the object's path."
},
"path": {
"type": "string",
@@ -128,11 +128,11 @@
},
"target_path": {
"type": "string",
"description": "Path to the target object from the project root.\nRequired if path is not specified."
"description": "Path to the \"target\" or \"expected\" object (the intended result)."
},
"base_path": {
"type": "string",
"description": "Path to the base object from the project root.\nRequired if path is not specified."
"description": "Path to the \"base\" or \"current\" object (built from current source code).\nOmit if there is no source object yet."
},
"reverse_fn_order": {
"type": "boolean",
@@ -207,7 +207,7 @@
"properties": {
"complete": {
"type": "boolean",
"description": "Marks the object as \"complete\" (or \"linked\") in the object list.\nThis is useful for marking objects that are fully decompiled. A value of `false` will mark the object as \"incomplete\"."
"description": "Marks the object as \"complete\" (linked) when `true` or \"incomplete\" when `false`."
},
"reverse_fn_order": {
"type": "boolean",
@@ -227,7 +227,7 @@
},
"auto_generated": {
"type": "boolean",
"description": "Hides the object from the object list by default, but still includes it in reports."
"description": "Hides the object from the sidebar but includes it in progress reports."
}
}
},

View File

@@ -8,8 +8,8 @@ use objdiff_core::{
Report, ReportCategory, ReportItem, ReportItemMetadata, ReportUnit, ReportUnitMetadata,
},
config::path::platform_path,
diff, obj,
obj::{SectionKind, SymbolFlag},
diff,
obj::{self, SectionKind, SymbolFlag, SymbolKind},
};
use prost::Message;
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
@@ -177,14 +177,16 @@ fn report_object(
.target_path
.as_ref()
.map(|p| {
obj::read::read(p.as_ref(), diff_config).with_context(|| format!("Failed to open {p}"))
obj::read::read(p.as_ref(), diff_config, diff::DiffSide::Target)
.with_context(|| format!("Failed to open {p}"))
})
.transpose()?;
let base = object
.base_path
.as_ref()
.map(|p| {
obj::read::read(p.as_ref(), diff_config).with_context(|| format!("Failed to open {p}"))
obj::read::read(p.as_ref(), diff_config, diff::DiffSide::Base)
.with_context(|| format!("Failed to open {p}"))
})
.transpose()?;
let result =
@@ -245,6 +247,7 @@ fn report_object(
|| symbol.size == 0
|| symbol.flags.contains(SymbolFlag::Hidden)
|| symbol.flags.contains(SymbolFlag::Ignored)
|| symbol.kind == SymbolKind::Section
{
continue;
}

View File

@@ -12,7 +12,7 @@ use rabbitizer::{
use crate::{
arch::{Arch, RelocationOverride, RelocationOverrideTarget},
diff::{DiffObjConfig, MipsAbi, MipsInstrCategory, display::InstructionPart},
diff::{DiffObjConfig, DiffSide, MipsAbi, MipsInstrCategory, display::InstructionPart},
obj::{
InstructionArg, InstructionArgValue, InstructionRef, Relocation, RelocationFlags,
ResolvedInstructionRef, ResolvedRelocation, Section, Symbol, SymbolFlag, SymbolFlagSet,
@@ -27,6 +27,7 @@ pub struct ArchMips {
pub ri_gp_value: i32,
pub paired_relocations: Vec<BTreeMap<u64, i64>>,
pub ignored_symbols: BTreeSet<usize>,
pub diff_side: DiffSide,
}
const EF_MIPS_ABI: u32 = 0x0000F000;
@@ -38,7 +39,7 @@ const EF_MIPS_MACH_5900: u32 = 0x00920000;
const R_MIPS15_S3: u32 = 119;
impl ArchMips {
pub fn new(object: &object::File) -> Result<Self> {
pub fn new(object: &object::File, diff_side: DiffSide) -> Result<Self> {
let mut abi = Abi::O32;
let mut isa_extension = None;
match object.flags() {
@@ -124,7 +125,11 @@ impl ArchMips {
let Ok(name) = obj_symbol.name() else { continue };
if let Some(prefix) = name.strip_suffix(".NON_MATCHING") {
ignored_symbols.insert(obj_symbol.index().0);
if let Some(target_symbol) = object.symbol_by_name(prefix) {
// Only remove the prefixless symbols if we are on the Base side of the diff,
// to allow diffing against target objects that contain `.NON_MATCHING` markers.
if diff_side == DiffSide::Base
&& let Some(target_symbol) = object.symbol_by_name(prefix)
{
ignored_symbols.insert(target_symbol.index().0);
}
}
@@ -137,6 +142,7 @@ impl ArchMips {
ri_gp_value,
paired_relocations,
ignored_symbols,
diff_side,
})
}

View File

@@ -17,7 +17,7 @@ use object::Endian as _;
use crate::{
diff::{
DiffObjConfig,
DiffObjConfig, DiffSide,
display::{ContextItem, HoverItem, InstructionPart},
},
obj::{
@@ -418,15 +418,18 @@ pub trait Arch: Any + Debug + Send + Sync {
}
}
pub fn new_arch(object: &object::File) -> Result<Box<dyn Arch>> {
pub fn new_arch(object: &object::File, diff_side: DiffSide) -> Result<Box<dyn Arch>> {
use object::Object as _;
// Avoid unused warnings on non-mips builds
let _ = diff_side;
Ok(match object.architecture() {
#[cfg(feature = "ppc")]
object::Architecture::PowerPc | object::Architecture::PowerPc64 => {
Box::new(ppc::ArchPpc::new(object)?)
}
#[cfg(feature = "mips")]
object::Architecture::Mips => Box::new(mips::ArchMips::new(object)?),
object::Architecture::Mips => Box::new(mips::ArchMips::new(object, diff_side)?),
#[cfg(feature = "x86")]
object::Architecture::I386 | object::Architecture::X86_64 => {
Box::new(x86::ArchX86::new(object)?)

View File

@@ -21,6 +21,7 @@ use crate::{
obj::{
FlowAnalysisResult, InstructionRef, Object, Relocation, RelocationFlags,
ResolvedInstructionRef, ResolvedRelocation, Section, Symbol, SymbolFlag, SymbolFlagSet,
SymbolKind,
},
};
@@ -832,6 +833,7 @@ fn make_fake_pool_reloc(
&& s.size > 0
&& !s.flags.contains(SymbolFlag::Hidden)
&& !s.flags.contains(SymbolFlag::Ignored)
&& s.kind != SymbolKind::Section
&& (s.address..s.address + s.size).contains(&target_address)
})?;
addend = target_address.checked_sub(symbols[target_symbol].address)? as i64;

View File

@@ -124,7 +124,40 @@ impl Arch for ArchX86 {
opcode: DATA_OPCODE,
branch_dest: None,
});
reloc_iter.next();
// support .byte arrays after jump tables (they're typically known as indirect tables)
let indirect_array_address = address.wrapping_add(size as u64);
let indirect_array_pos = decoder.position();
let max_size = code.len().saturating_sub(indirect_array_pos);
let indirect_array_size = reloc_iter
.peek()
.map(|next_reloc| {
next_reloc.address.saturating_sub(indirect_array_address)
as usize
})
.unwrap_or(max_size)
.min(max_size);
if indirect_array_size > 0 {
for i in 0..indirect_array_size {
out.push(InstructionRef {
address: indirect_array_address + i as u64,
size: 1,
opcode: DATA_OPCODE,
branch_dest: None,
});
}
// move decoder to after the array (there can be multiple jump+indirect tables in one function)
let _ =
decoder.set_position(indirect_array_pos + indirect_array_size);
decoder.set_ip(indirect_array_address + indirect_array_size as u64);
}
continue 'outer;
}
}
@@ -156,6 +189,7 @@ impl Arch for ArchX86 {
) -> Result<()> {
if resolved.ins_ref.opcode == DATA_OPCODE {
let (mnemonic, imm) = match resolved.ins_ref.size {
1 => (".byte", resolved.code[0] as u64),
2 => (".word", self.endianness.read_u16_bytes(resolved.code.try_into()?) as u64),
4 => (".dword", self.endianness.read_u32_bytes(resolved.code.try_into()?) as u64),
_ => bail!("Unsupported x86 inline data size {}", resolved.ins_ref.size),
@@ -791,4 +825,33 @@ mod test {
.unwrap();
assert_eq!(parts, &[InstructionPart::opcode("call", opcode), InstructionPart::reloc()]);
}
#[test]
fn test_display_1_byte_inline_data() {
let arch = ArchX86 { arch: Architecture::X86, endianness: object::Endianness::Little };
let code = [0xAB];
let mut parts = Vec::new();
arch.display_instruction(
ResolvedInstructionRef {
ins_ref: InstructionRef {
address: 0x1234,
size: 1,
opcode: DATA_OPCODE,
branch_dest: None,
},
code: &code,
..Default::default()
},
&DiffObjConfig::default(),
&mut |part| {
parts.push(part.into_static());
Ok(())
},
)
.unwrap();
assert_eq!(parts, &[
InstructionPart::opcode(".byte", DATA_OPCODE),
InstructionPart::unsigned(0xABu64),
]);
}
}

View File

@@ -41,7 +41,13 @@ pub fn no_diff_code(
instruction_rows.push(InstructionDiffRow { ins_ref: Some(*i), ..Default::default() });
}
resolve_branches(&ops, &mut instruction_rows);
Ok(SymbolDiff { target_symbol: None, match_percent: None, diff_score: None, instruction_rows })
Ok(SymbolDiff {
target_symbol: None,
match_percent: None,
diff_score: None,
instruction_rows,
..Default::default()
})
}
const PENALTY_IMM_DIFF: u64 = 1;
@@ -147,12 +153,14 @@ pub fn diff_code(
match_percent: Some(match_percent),
diff_score: Some((diff_score, max_score)),
instruction_rows: left_rows,
..Default::default()
},
SymbolDiff {
target_symbol: Some(left_symbol_idx),
match_percent: Some(match_percent),
diff_score: Some((diff_score, max_score)),
instruction_rows: right_rows,
..Default::default()
},
))
}

View File

@@ -5,7 +5,7 @@ use anyhow::{Result, anyhow};
use similar::{Algorithm, capture_diff_slices, get_diff_ratio};
use super::{
DataDiff, DataDiffKind, DataRelocationDiff, ObjectDiff, SectionDiff, SymbolDiff,
DataDiff, DataDiffKind, DataDiffRow, DataRelocationDiff, ObjectDiff, SectionDiff, SymbolDiff,
code::{address_eq, section_name_eq},
};
use crate::obj::{Object, Relocation, ResolvedRelocation, Symbol, SymbolFlag, SymbolKind};
@@ -24,13 +24,13 @@ pub fn diff_bss_symbol(
target_symbol: Some(right_symbol_ref),
match_percent: Some(percent),
diff_score: None,
instruction_rows: vec![],
..Default::default()
},
SymbolDiff {
target_symbol: Some(left_symbol_ref),
match_percent: Some(percent),
diff_score: None,
instruction_rows: vec![],
..Default::default()
},
))
}
@@ -84,7 +84,77 @@ pub fn resolve_relocation<'obj>(
ResolvedRelocation { relocation: reloc, symbol }
}
/// Compares relocations contained with a certain data range.
/// Compares the bytes within a certain data range.
fn diff_data_range(left_data: &[u8], right_data: &[u8]) -> (f32, Vec<DataDiff>, Vec<DataDiff>) {
let ops = capture_diff_slices(Algorithm::Patience, left_data, right_data);
let bytes_match_ratio = get_diff_ratio(&ops, left_data.len(), right_data.len());
let mut left_data_diff = Vec::<DataDiff>::new();
let mut right_data_diff = Vec::<DataDiff>::new();
for op in ops {
let (tag, left_range, right_range) = op.as_tag_tuple();
let left_len = left_range.len();
let right_len = right_range.len();
let mut len = left_len.max(right_len);
let kind = match tag {
similar::DiffTag::Equal => DataDiffKind::None,
similar::DiffTag::Delete => DataDiffKind::Delete,
similar::DiffTag::Insert => DataDiffKind::Insert,
similar::DiffTag::Replace => {
// Ensure replacements are equal length
len = left_len.min(right_len);
DataDiffKind::Replace
}
};
let left_data = &left_data[left_range];
let right_data = &right_data[right_range];
left_data_diff.push(DataDiff {
data: left_data[..len.min(left_data.len())].to_vec(),
kind,
size: len,
});
right_data_diff.push(DataDiff {
data: right_data[..len.min(right_data.len())].to_vec(),
kind,
size: len,
});
if kind == DataDiffKind::Replace {
match left_len.cmp(&right_len) {
Ordering::Less => {
let len = right_len - left_len;
left_data_diff.push(DataDiff {
data: vec![],
kind: DataDiffKind::Insert,
size: len,
});
right_data_diff.push(DataDiff {
data: right_data[left_len..right_len].to_vec(),
kind: DataDiffKind::Insert,
size: len,
});
}
Ordering::Greater => {
let len = left_len - right_len;
left_data_diff.push(DataDiff {
data: left_data[right_len..left_len].to_vec(),
kind: DataDiffKind::Delete,
size: len,
});
right_data_diff.push(DataDiff {
data: vec![],
kind: DataDiffKind::Delete,
size: len,
});
}
Ordering::Equal => {}
}
}
}
(bytes_match_ratio, left_data_diff, right_data_diff)
}
/// Compares relocations contained within a certain data range.
fn diff_data_relocs_for_range<'left, 'right>(
left_obj: &'left Object,
right_obj: &'right Object,
@@ -143,16 +213,17 @@ fn diff_data_relocs_for_range<'left, 'right>(
pub fn no_diff_data_section(obj: &Object, section_idx: usize) -> Result<SectionDiff> {
let section = &obj.sections[section_idx];
let len = section.data.len();
let data = &section.data[0..len];
let data_diff =
vec![DataDiff { data: data.to_vec(), kind: DataDiffKind::None, len, ..Default::default() }];
let data_diff = vec![DataDiff {
data: section.data.0.clone(),
kind: DataDiffKind::None,
size: section.data.len(),
}];
let mut reloc_diffs = Vec::new();
for reloc in section.relocations.iter() {
let reloc_len = obj.arch.data_reloc_size(reloc.flags);
let range = reloc.address as usize..reloc.address as usize + reloc_len;
let range = reloc.address..reloc.address + reloc_len as u64;
reloc_diffs.push(DataRelocationDiff {
reloc: reloc.clone(),
kind: DataDiffKind::None,
@@ -186,76 +257,10 @@ pub fn diff_data_section(
.min(right_section.size);
let left_data = &left_section.data[..left_max as usize];
let right_data = &right_section.data[..right_max as usize];
let ops = capture_diff_slices(Algorithm::Patience, left_data, right_data);
let match_percent = get_diff_ratio(&ops, left_data.len(), right_data.len()) * 100.0;
let mut left_data_diff = Vec::<DataDiff>::new();
let mut right_data_diff = Vec::<DataDiff>::new();
for op in ops {
let (tag, left_range, right_range) = op.as_tag_tuple();
let left_len = left_range.len();
let right_len = right_range.len();
let mut len = left_len.max(right_len);
let kind = match tag {
similar::DiffTag::Equal => DataDiffKind::None,
similar::DiffTag::Delete => DataDiffKind::Delete,
similar::DiffTag::Insert => DataDiffKind::Insert,
similar::DiffTag::Replace => {
// Ensure replacements are equal length
len = left_len.min(right_len);
DataDiffKind::Replace
}
};
let left_data = &left_section.data[left_range];
let right_data = &right_section.data[right_range];
left_data_diff.push(DataDiff {
data: left_data[..len.min(left_data.len())].to_vec(),
kind,
len,
..Default::default()
});
right_data_diff.push(DataDiff {
data: right_data[..len.min(right_data.len())].to_vec(),
kind,
len,
..Default::default()
});
if kind == DataDiffKind::Replace {
match left_len.cmp(&right_len) {
Ordering::Less => {
let len = right_len - left_len;
left_data_diff.push(DataDiff {
data: vec![],
kind: DataDiffKind::Insert,
len,
..Default::default()
});
right_data_diff.push(DataDiff {
data: right_data[left_len..right_len].to_vec(),
kind: DataDiffKind::Insert,
len,
..Default::default()
});
}
Ordering::Greater => {
let len = left_len - right_len;
left_data_diff.push(DataDiff {
data: left_data[right_len..left_len].to_vec(),
kind: DataDiffKind::Delete,
len,
..Default::default()
});
right_data_diff.push(DataDiff {
data: vec![],
kind: DataDiffKind::Delete,
len,
..Default::default()
});
}
Ordering::Equal => {}
}
}
}
let (bytes_match_ratio, left_data_diff, right_data_diff) =
diff_data_range(left_data, right_data);
let match_percent = bytes_match_ratio * 100.0;
let mut left_reloc_diffs = Vec::new();
let mut right_reloc_diffs = Vec::new();
@@ -269,8 +274,7 @@ pub fn diff_data_section(
) {
if let Some(left_reloc) = left_reloc {
let len = left_obj.arch.data_reloc_size(left_reloc.relocation.flags);
let range = left_reloc.relocation.address as usize
..left_reloc.relocation.address as usize + len;
let range = left_reloc.relocation.address..left_reloc.relocation.address + len as u64;
left_reloc_diffs.push(DataRelocationDiff {
reloc: left_reloc.relocation.clone(),
kind: diff_kind,
@@ -279,8 +283,7 @@ pub fn diff_data_section(
}
if let Some(right_reloc) = right_reloc {
let len = right_obj.arch.data_reloc_size(right_reloc.relocation.flags);
let range = right_reloc.relocation.address as usize
..right_reloc.relocation.address as usize + len;
let range = right_reloc.relocation.address..right_reloc.relocation.address + len as u64;
right_reloc_diffs.push(DataRelocationDiff {
reloc: right_reloc.relocation.clone(),
kind: diff_kind,
@@ -314,6 +317,57 @@ pub fn diff_data_section(
Ok((left_section_diff, right_section_diff))
}
pub fn no_diff_data_symbol(obj: &Object, symbol_index: usize) -> Result<SymbolDiff> {
let symbol = &obj.symbols[symbol_index];
let section_idx = symbol.section.ok_or_else(|| anyhow!("Data symbol section not found"))?;
let section = &obj.sections[section_idx];
let start = symbol
.address
.checked_sub(section.address)
.ok_or_else(|| anyhow!("Symbol address out of section bounds"))?;
let end = start + symbol.size;
if end > section.size {
return Err(anyhow!(
"Symbol {} size out of section bounds ({} > {})",
symbol.name,
end,
section.size
));
}
let range = start as usize..end as usize;
let data = &section.data[range.clone()];
let data_diff = vec![DataDiff {
data: data.to_vec(),
kind: DataDiffKind::None,
size: symbol.size as usize,
}];
let mut reloc_diffs = Vec::new();
for reloc in section.relocations.iter() {
if !range.contains(&(reloc.address as usize)) {
continue;
}
let reloc_len = obj.arch.data_reloc_size(reloc.flags);
let range = reloc.address..reloc.address + reloc_len as u64;
reloc_diffs.push(DataRelocationDiff {
reloc: reloc.clone(),
kind: DataDiffKind::None,
range,
});
}
let data_rows = build_data_diff_rows(&data_diff, &reloc_diffs, symbol.address);
Ok(SymbolDiff {
target_symbol: None,
match_percent: None,
diff_score: None,
data_rows,
..Default::default()
})
}
pub fn diff_data_symbol(
left_obj: &Object,
right_obj: &Object,
@@ -362,6 +416,9 @@ pub fn diff_data_symbol(
let left_data = &left_section.data[left_range.clone()];
let right_data = &right_section.data[right_range.clone()];
let (bytes_match_ratio, left_data_diff, right_data_diff) =
diff_data_range(left_data, right_data);
let reloc_diffs = diff_data_relocs_for_range(
left_obj,
right_obj,
@@ -371,10 +428,9 @@ pub fn diff_data_symbol(
right_range,
);
let ops = capture_diff_slices(Algorithm::Patience, left_data, right_data);
let bytes_match_ratio = get_diff_ratio(&ops, left_data.len(), right_data.len());
let mut match_ratio = bytes_match_ratio;
let mut left_reloc_diffs = Vec::new();
let mut right_reloc_diffs = Vec::new();
if !reloc_diffs.is_empty() {
let mut total_reloc_bytes = 0;
let mut matching_reloc_bytes = 0;
@@ -390,6 +446,27 @@ pub fn diff_data_symbol(
if diff_kind == DataDiffKind::None {
matching_reloc_bytes += reloc_diff_len;
}
if let Some(left_reloc) = left_reloc {
let len = left_obj.arch.data_reloc_size(left_reloc.relocation.flags);
let range =
left_reloc.relocation.address..left_reloc.relocation.address + len as u64;
left_reloc_diffs.push(DataRelocationDiff {
reloc: left_reloc.relocation.clone(),
kind: diff_kind,
range,
});
}
if let Some(right_reloc) = right_reloc {
let len = right_obj.arch.data_reloc_size(right_reloc.relocation.flags);
let range =
right_reloc.relocation.address..right_reloc.relocation.address + len as u64;
right_reloc_diffs.push(DataRelocationDiff {
reloc: right_reloc.relocation.clone(),
kind: diff_kind,
range,
});
}
}
if total_reloc_bytes > 0 {
let relocs_match_ratio = matching_reloc_bytes as f32 / total_reloc_bytes as f32;
@@ -404,20 +481,30 @@ pub fn diff_data_symbol(
}
}
left_reloc_diffs
.sort_by(|a, b| a.range.start.cmp(&b.range.start).then(a.range.end.cmp(&b.range.end)));
right_reloc_diffs
.sort_by(|a, b| a.range.start.cmp(&b.range.start).then(a.range.end.cmp(&b.range.end)));
let match_percent = match_ratio * 100.0;
let left_rows = build_data_diff_rows(&left_data_diff, &left_reloc_diffs, left_symbol.address);
let right_rows =
build_data_diff_rows(&right_data_diff, &right_reloc_diffs, right_symbol.address);
Ok((
SymbolDiff {
target_symbol: Some(right_symbol_idx),
match_percent: Some(match_percent),
diff_score: None,
instruction_rows: vec![],
data_rows: left_rows,
..Default::default()
},
SymbolDiff {
target_symbol: Some(left_symbol_idx),
match_percent: Some(match_percent),
diff_score: None,
instruction_rows: vec![],
data_rows: right_rows,
..Default::default()
},
))
}
@@ -507,3 +594,68 @@ fn symbols_matching_section(
&& !s.flags.contains(SymbolFlag::Ignored)
})
}
pub const BYTES_PER_ROW: usize = 16;
fn build_data_diff_row(
data_diffs: &[DataDiff],
reloc_diffs: &[DataRelocationDiff],
symbol_address: u64,
row_index: usize,
) -> DataDiffRow {
let row_start = row_index * BYTES_PER_ROW;
let row_end = row_start + BYTES_PER_ROW;
let mut row_diff = DataDiffRow {
address: symbol_address + row_start as u64,
segments: Vec::new(),
relocations: Vec::new(),
};
// Collect all segments that overlap with this row
let mut current_offset = 0;
for diff in data_diffs {
let diff_end = current_offset + diff.size;
if current_offset < row_end && diff_end > row_start {
let start_in_diff = row_start.saturating_sub(current_offset);
let end_in_diff = row_end.min(diff_end) - current_offset;
if start_in_diff < end_in_diff {
let data_slice = if diff.data.is_empty() {
Vec::new()
} else {
diff.data[start_in_diff..end_in_diff.min(diff.data.len())].to_vec()
};
row_diff.segments.push(DataDiff {
data: data_slice,
kind: diff.kind,
size: end_in_diff - start_in_diff,
});
}
}
current_offset = diff_end;
if current_offset >= row_start + BYTES_PER_ROW {
break;
}
}
// Collect all relocations that overlap with this row
let row_end_absolute = row_diff.address + BYTES_PER_ROW as u64;
row_diff.relocations = reloc_diffs
.iter()
.filter(|rd| rd.range.start < row_end_absolute && rd.range.end > row_diff.address)
.cloned()
.collect();
row_diff
}
fn build_data_diff_rows(
segments: &[DataDiff],
relocations: &[DataRelocationDiff],
symbol_address: u64,
) -> Vec<DataDiffRow> {
let total_len = segments.iter().map(|s| s.size as u64).sum::<u64>();
let num_rows = total_len.div_ceil(BYTES_PER_ROW as u64) as usize;
(0..num_rows)
.map(|row_index| build_data_diff_row(segments, relocations, symbol_address, row_index))
.collect()
}

View File

@@ -12,7 +12,10 @@ use itertools::Itertools;
use regex::Regex;
use crate::{
diff::{DiffObjConfig, InstructionDiffKind, InstructionDiffRow, ObjectDiff, SymbolDiff},
diff::{
DataDiffKind, DataDiffRow, DiffObjConfig, InstructionDiffKind, InstructionDiffRow,
ObjectDiff, SymbolDiff, data::resolve_relocation,
},
obj::{
FlowAnalysisValue, InstructionArg, InstructionArgValue, Object, ParsedInstruction,
ResolvedInstructionRef, ResolvedRelocation, SectionFlag, SectionKind, Symbol, SymbolFlag,
@@ -379,7 +382,9 @@ pub enum HoverItem {
}
pub fn symbol_context(obj: &Object, symbol_index: usize) -> Vec<ContextItem> {
let symbol = &obj.symbols[symbol_index];
let Some(symbol) = obj.symbols.get(symbol_index) else {
return Vec::new();
};
let mut out = Vec::new();
out.push(ContextItem::Copy { value: symbol.name.clone(), label: None });
if let Some(name) = &symbol.demangled_name {
@@ -403,7 +408,9 @@ pub fn symbol_hover(
addend: i64,
override_color: Option<HoverItemColor>,
) -> Vec<HoverItem> {
let symbol = &obj.symbols[symbol_index];
let Some(symbol) = obj.symbols.get(symbol_index) else {
return Vec::new();
};
let addend_str = match addend.cmp(&0i64) {
Ordering::Greater => format!("+{addend:x}"),
Ordering::Less => format!("-{:x}", -addend),
@@ -490,6 +497,57 @@ pub fn relocation_context(
out
}
pub fn data_row_hover(obj: &Object, diff_row: &DataDiffRow) -> Vec<HoverItem> {
let mut out = Vec::new();
let mut prev_reloc = None;
let mut first = true;
for reloc_diff in diff_row.relocations.iter() {
let reloc = &reloc_diff.reloc;
if prev_reloc == Some(reloc) {
// Avoid showing consecutive duplicate relocations.
// We do this because a single relocation can span across multiple diffs if the
// bytes in the relocation changed (e.g. first byte is added, second is unchanged).
continue;
}
prev_reloc = Some(reloc);
if first {
first = false;
} else {
out.push(HoverItem::Separator);
}
let reloc = resolve_relocation(&obj.symbols, reloc);
let color = match reloc_diff.kind {
DataDiffKind::None => HoverItemColor::Normal,
DataDiffKind::Replace => HoverItemColor::Special,
DataDiffKind::Delete => HoverItemColor::Delete,
DataDiffKind::Insert => HoverItemColor::Insert,
};
out.append(&mut relocation_hover(obj, reloc, Some(color)));
}
out
}
pub fn data_row_context(obj: &Object, diff_row: &DataDiffRow) -> Vec<ContextItem> {
let mut out = Vec::new();
let mut prev_reloc = None;
for reloc_diff in diff_row.relocations.iter() {
let reloc = &reloc_diff.reloc;
if prev_reloc == Some(reloc) {
// Avoid showing consecutive duplicate relocations.
// We do this because a single relocation can span across multiple diffs if the
// bytes in the relocation changed (e.g. first byte is added, second is unchanged).
continue;
}
prev_reloc = Some(reloc);
let reloc = resolve_relocation(&obj.symbols, reloc);
out.append(&mut relocation_context(obj, reloc, None));
}
out
}
pub fn relocation_hover(
obj: &Object,
reloc: ResolvedRelocation,
@@ -673,6 +731,7 @@ pub struct SectionDisplay {
pub size: u64,
pub match_percent: Option<f32>,
pub symbols: Vec<SectionDisplaySymbol>,
pub kind: SectionKind,
}
pub fn display_sections(
@@ -751,6 +810,7 @@ pub fn display_sections(
size: section.size,
match_percent: section_diff.match_percent,
symbols,
kind: section.kind,
});
} else {
// Don't sort, preserve order of absolute symbols
@@ -760,6 +820,7 @@ pub fn display_sections(
size: 0,
match_percent: None,
symbols,
kind: SectionKind::Common,
});
}
}

View File

@@ -13,7 +13,8 @@ use crate::{
code::{diff_code, no_diff_code},
data::{
diff_bss_section, diff_bss_symbol, diff_data_section, diff_data_symbol,
diff_generic_section, no_diff_bss_section, no_diff_data_section, symbol_name_matches,
diff_generic_section, no_diff_bss_section, no_diff_data_section, no_diff_data_symbol,
symbol_name_matches,
},
},
obj::{InstructionRef, Object, Relocation, SectionKind, Symbol, SymbolFlag},
@@ -44,6 +45,7 @@ pub struct SymbolDiff {
pub match_percent: Option<f32>,
pub diff_score: Option<(u64, u64)>,
pub instruction_rows: Vec<InstructionDiffRow>,
pub data_rows: Vec<DataDiffRow>,
}
#[derive(Debug, Clone, Default)]
@@ -80,16 +82,15 @@ pub enum InstructionDiffKind {
#[derive(Debug, Clone, Default)]
pub struct DataDiff {
pub data: Vec<u8>,
pub size: usize,
pub kind: DataDiffKind,
pub len: usize,
pub symbol: String,
}
#[derive(Debug, Clone)]
pub struct DataRelocationDiff {
pub reloc: Relocation,
pub range: Range<u64>,
pub kind: DataDiffKind,
pub range: Range<usize>,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Default)]
@@ -101,6 +102,13 @@ pub enum DataDiffKind {
Insert,
}
#[derive(Debug, Clone, Default)]
pub struct DataDiffRow {
pub address: u64,
pub segments: Vec<DataDiff>,
pub relocations: Vec<DataRelocationDiff>,
}
/// Index of the argument diff for coloring.
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Default)]
@@ -163,7 +171,7 @@ impl ObjectDiff {
target_symbol: None,
match_percent: None,
diff_score: None,
instruction_rows: vec![],
..Default::default()
});
}
for _ in obj.sections.iter() {
@@ -262,7 +270,11 @@ pub fn diff_objs(
left_out.symbols[left_symbol_ref] =
no_diff_code(left_obj, left_symbol_ref, diff_config)?;
}
SectionKind::Data | SectionKind::Bss | SectionKind::Common => {
SectionKind::Data => {
left_out.symbols[left_symbol_ref] =
no_diff_data_symbol(left_obj, left_symbol_ref)?;
}
SectionKind::Bss | SectionKind::Common => {
// Nothing needs to be done
}
SectionKind::Unknown => unreachable!(),
@@ -275,7 +287,11 @@ pub fn diff_objs(
right_out.symbols[right_symbol_ref] =
no_diff_code(right_obj, right_symbol_ref, diff_config)?;
}
SectionKind::Data | SectionKind::Bss | SectionKind::Common => {
SectionKind::Data => {
right_out.symbols[right_symbol_ref] =
no_diff_data_symbol(right_obj, right_symbol_ref)?;
}
SectionKind::Bss | SectionKind::Common => {
// Nothing needs to be done
}
SectionKind::Unknown => unreachable!(),
@@ -669,16 +685,16 @@ fn symbol_section_kind(obj: &Object, symbol: &Symbol) -> SectionKind {
}
}
/// Check if a symbol is a compiler-generated literal like @1234.
fn is_symbol_compiler_generated_literal(symbol: &Symbol) -> bool {
if !symbol.name.starts_with('@') {
return false;
}
if !symbol.name[1..].chars().all(char::is_numeric) {
/// Check if a symbol is a compiler-generated like @1234 or _$E1234.
fn is_symbol_compiler_generated(symbol: &Symbol) -> bool {
if symbol.name.starts_with('@') && symbol.name[1..].chars().all(char::is_numeric) {
// Exclude @stringBase0, @GUARD@, etc.
return false;
return true;
}
true
if symbol.name.starts_with("_$E") && symbol.name[3..].chars().all(char::is_numeric) {
return true;
}
false
}
fn find_symbol(
@@ -694,8 +710,8 @@ fn find_symbol(
// Match compiler-generated symbols against each other (e.g. @251 -> @60)
// If they are in the same section and have the same value
if is_symbol_compiler_generated_literal(in_symbol)
&& matches!(section_kind, SectionKind::Data | SectionKind::Bss)
if is_symbol_compiler_generated(in_symbol)
&& matches!(section_kind, SectionKind::Code | SectionKind::Data | SectionKind::Bss)
{
let mut closest_match_symbol_idx = None;
let mut closest_match_percent = 0.0;
@@ -706,12 +722,12 @@ fn find_symbol(
if obj.sections[section_index].name != section_name {
continue;
}
if !is_symbol_compiler_generated_literal(symbol) {
if !is_symbol_compiler_generated(symbol) {
continue;
}
match section_kind {
SectionKind::Data => {
// For data, pick the first symbol with exactly matching bytes and relocations.
SectionKind::Data | SectionKind::Code => {
// For code or data, pick the first symbol with exactly matching bytes and relocations.
// If no symbols match exactly, and `fuzzy_literals` is true, pick the closest
// plausible match instead.
if let Ok((left_diff, _right_diff)) =
@@ -807,3 +823,11 @@ fn find_section(
s.kind == section_kind && s.name == name && !matches.iter().any(|m| m.right == Some(i))
})
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum DiffSide {
/// The target/expected side of the diff.
Target,
/// The base side of the diff.
Base,
}

View File

@@ -6,7 +6,7 @@ use typed_path::Utf8PlatformPathBuf;
use crate::{
build::{BuildConfig, BuildStatus, run_make},
diff::{DiffObjConfig, MappingConfig, ObjectDiff, diff_objs},
diff::{DiffObjConfig, DiffSide, MappingConfig, ObjectDiff, diff_objs},
jobs::{Job, JobContext, JobResult, JobState, start_job, update_status},
obj::{Object, read},
};
@@ -117,7 +117,7 @@ fn run_build(
&cancel,
)?;
step_idx += 1;
match read::read(target_path.as_ref(), &config.diff_obj_config) {
match read::read(target_path.as_ref(), &config.diff_obj_config, DiffSide::Target) {
Ok(obj) => Some(obj),
Err(e) => {
first_status = BuildStatus {
@@ -141,7 +141,7 @@ fn run_build(
Some(base_path) if second_status.success => {
update_status(context, format!("Loading base {base_path}"), step_idx, total, &cancel)?;
step_idx += 1;
match read::read(base_path.as_ref(), &config.diff_obj_config) {
match read::read(base_path.as_ref(), &config.diff_obj_config, DiffSide::Base) {
Ok(obj) => Some(obj),
Err(e) => {
second_status = BuildStatus {

View File

@@ -12,10 +12,10 @@ use object::{Object as _, ObjectSection as _, ObjectSymbol as _};
use crate::{
arch::{Arch, RelocationOverride, RelocationOverrideTarget, new_arch},
diff::DiffObjConfig,
diff::{DiffObjConfig, DiffSide},
obj::{
FlowAnalysisResult, Object, Relocation, RelocationFlags, Section, SectionData, SectionFlag,
SectionKind, Symbol, SymbolFlag, SymbolKind,
SectionKind, Symbol, SymbolFlag, SymbolFlagSet, SymbolKind,
split_meta::{SPLITMETA_SECTION, SplitMeta},
},
util::{align_data_slice_to, align_u64_to, read_u16, read_u32},
@@ -74,6 +74,14 @@ fn map_symbol(
{
flags |= SymbolFlag::Hidden;
}
if file.format() == object::BinaryFormat::Coff
&& let Ok(name) = symbol.name()
&& (name.starts_with("except_data_")
|| name.starts_with("__unwind")
|| name.starts_with("__catch"))
{
flags |= SymbolFlag::Hidden;
}
let kind = match symbol.kind() {
object::SymbolKind::Text => SymbolKind::Function,
@@ -110,7 +118,7 @@ fn map_symbols(
split_meta: Option<&SplitMeta>,
) -> Result<(Vec<Symbol>, Vec<usize>)> {
let symbol_count = obj_file.symbols().count();
let mut symbols = Vec::<Symbol>::with_capacity(symbol_count);
let mut symbols = Vec::<Symbol>::with_capacity(symbol_count + obj_file.sections().count());
let mut symbol_indices = Vec::<usize>::with_capacity(symbol_count + 1);
for obj_symbol in obj_file.symbols() {
if symbol_indices.len() <= obj_symbol.index().0 {
@@ -127,6 +135,52 @@ fn map_symbols(
Ok((symbols, symbol_indices))
}
/// Add an extra fake symbol to the start of each data section in order to allow the user to diff
/// all of the data in the section at once by clicking on this fake symbol at the top of the list.
fn add_section_symbols(sections: &[Section], symbols: &mut Vec<Symbol>) {
for (section_idx, section) in sections.iter().enumerate() {
if section.kind != SectionKind::Data {
continue;
}
// Instead of naming the fake section symbol after `section.name` (e.g. ".data") we use
// `section.id` (e.g. ".data-0") so that it is unique when multiple sections with the same
// name exist and it also doesn't conflict with any real section symbols from the object.
let name = if section.flags.contains(SectionFlag::Combined) {
// For combined sections, `section.id` (e.g. ".data-combined") is inconsistent with
// uncombined section IDs, so we add the "-0" suffix to the name to enable proper
// pairing when one side had multiple sections combined and the other only had one
// section to begin with.
format!("[{}-0]", section.name)
} else {
format!("[{}]", section.id)
};
// `section.size` can include extra padding, so instead prefer using the address that the
// last symbol ends at when there are any symbols in the section.
let size = symbols
.iter()
.filter(|s| {
s.section == Some(section_idx) && s.kind == SymbolKind::Object && s.size > 0
})
.map(|s| s.address + s.size)
.max()
.unwrap_or(section.size);
symbols.push(Symbol {
name,
demangled_name: None,
address: 0,
size,
kind: SymbolKind::Section,
section: Some(section_idx),
flags: SymbolFlagSet::default() | SymbolFlag::Local,
align: None,
virtual_address: None,
});
}
}
/// When inferring a symbol's size, we ignore symbols that start with specific prefixes. They are
/// usually emitted as branch targets and do not represent the start of a function or object.
fn is_local_label(symbol: &Symbol) -> bool {
@@ -208,7 +262,11 @@ fn infer_symbol_sizes(arch: &dyn Arch, symbols: &mut [Symbol], sections: &[Secti
let section = &sections[section_idx];
let next_address =
next_symbol.map(|s| s.address).unwrap_or_else(|| section.address + section.size);
let new_size = if section.kind == SectionKind::Code {
let new_size = if symbol.kind == SymbolKind::Section && section.kind == SectionKind::Data {
// Data sections already have always-visible section symbols created by objdiff to allow
// diffing them, so no need to unhide these.
0
} else if section.kind == SectionKind::Code {
arch.infer_function_size(symbol, section, next_address)?
} else {
next_address.saturating_sub(symbol.address)
@@ -917,21 +975,25 @@ fn do_combine_sections(
}
#[cfg(feature = "std")]
pub fn read(obj_path: &std::path::Path, config: &DiffObjConfig) -> Result<Object> {
pub fn read(
obj_path: &std::path::Path,
config: &DiffObjConfig,
diff_side: DiffSide,
) -> Result<Object> {
let (data, timestamp) = {
let file = std::fs::File::open(obj_path)?;
let timestamp = filetime::FileTime::from_last_modification_time(&file.metadata()?);
(unsafe { memmap2::Mmap::map(&file) }?, timestamp)
};
let mut obj = parse(&data, config)?;
let mut obj = parse(&data, config, diff_side)?;
obj.path = Some(obj_path.to_path_buf());
obj.timestamp = Some(timestamp);
Ok(obj)
}
pub fn parse(data: &[u8], config: &DiffObjConfig) -> Result<Object> {
pub fn parse(data: &[u8], config: &DiffObjConfig, diff_side: DiffSide) -> Result<Object> {
let obj_file = object::File::parse(data)?;
let mut arch = new_arch(&obj_file)?;
let mut arch = new_arch(&obj_file, diff_side)?;
let split_meta = parse_split_meta(&obj_file)?;
let (mut sections, section_indices) =
map_sections(arch.as_ref(), &obj_file, split_meta.as_ref())?;
@@ -942,6 +1004,7 @@ pub fn parse(data: &[u8], config: &DiffObjConfig) -> Result<Object> {
if config.combine_data_sections || config.combine_text_sections {
combine_sections(&mut sections, &mut symbols, config)?;
}
add_section_symbols(&sections, &mut symbols);
arch.post_init(&sections, &symbols);
let mut obj = Object {
arch,

View File

@@ -6,7 +6,12 @@ mod common;
#[cfg(feature = "arm")]
fn read_arm() {
let diff_config = diff::DiffObjConfig { ..Default::default() };
let obj = obj::read::parse(include_object!("data/arm/LinkStateItem.o"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/arm/LinkStateItem.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx =
obj.symbols.iter().position(|s| s.name == "_ZN13LinkStateItem12OnStateLeaveEi").unwrap();
@@ -20,7 +25,9 @@ fn read_arm() {
#[cfg(feature = "arm")]
fn read_thumb() {
let diff_config = diff::DiffObjConfig { ..Default::default() };
let obj = obj::read::parse(include_object!("data/arm/thumb.o"), &diff_config).unwrap();
let obj =
obj::read::parse(include_object!("data/arm/thumb.o"), &diff_config, diff::DiffSide::Base)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx = obj
.symbols
@@ -37,7 +44,12 @@ fn read_thumb() {
#[cfg(feature = "arm")]
fn combine_text_sections() {
let diff_config = diff::DiffObjConfig { combine_text_sections: true, ..Default::default() };
let obj = obj::read::parse(include_object!("data/arm/enemy300.o"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/arm/enemy300.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
let symbol_idx = obj.symbols.iter().position(|s| s.name == "Enemy300Draw").unwrap();
let diff = diff::code::no_diff_code(&obj, symbol_idx, &diff_config).unwrap();
insta::assert_debug_snapshot!(diff.instruction_rows);

View File

@@ -6,7 +6,9 @@ mod common;
#[cfg(feature = "mips")]
fn read_mips() {
let diff_config = diff::DiffObjConfig { mips_register_prefix: true, ..Default::default() };
let obj = obj::read::parse(include_object!("data/mips/main.c.o"), &diff_config).unwrap();
let obj =
obj::read::parse(include_object!("data/mips/main.c.o"), &diff_config, diff::DiffSide::Base)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx = obj.symbols.iter().position(|s| s.name == "ControlEntry").unwrap();
let diff = diff::code::no_diff_code(&obj, symbol_idx, &diff_config).unwrap();
@@ -19,9 +21,19 @@ fn read_mips() {
#[cfg(feature = "mips")]
fn cross_endian_diff() {
let diff_config = diff::DiffObjConfig::default();
let obj_be = obj::read::parse(include_object!("data/mips/code_be.o"), &diff_config).unwrap();
let obj_be = obj::read::parse(
include_object!("data/mips/code_be.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
assert_eq!(obj_be.endianness, object::Endianness::Big);
let obj_le = obj::read::parse(include_object!("data/mips/code_le.o"), &diff_config).unwrap();
let obj_le = obj::read::parse(
include_object!("data/mips/code_le.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
assert_eq!(obj_le.endianness, object::Endianness::Little);
let left_symbol_idx = obj_be.symbols.iter().position(|s| s.name == "func_00000000").unwrap();
let right_symbol_idx =
@@ -42,6 +54,11 @@ fn cross_endian_diff() {
#[cfg(feature = "mips")]
fn filter_non_matching() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/mips/vw_main.c.o"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/mips/vw_main.c.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj.symbols);
}

View File

@@ -10,7 +10,9 @@ mod common;
#[cfg(feature = "ppc")]
fn read_ppc() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/ppc/IObj.o"), &diff_config).unwrap();
let obj =
obj::read::parse(include_object!("data/ppc/IObj.o"), &diff_config, diff::DiffSide::Base)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx =
obj.symbols.iter().position(|s| s.name == "Type2Text__10SObjectTagFUi").unwrap();
@@ -24,7 +26,12 @@ fn read_ppc() {
#[cfg(feature = "ppc")]
fn read_dwarf1_line_info() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/ppc/m_Do_hostIO.o"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/ppc/m_Do_hostIO.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
let line_infos = obj
.sections
.iter()
@@ -38,7 +45,12 @@ fn read_dwarf1_line_info() {
#[cfg(feature = "ppc")]
fn read_extab() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/ppc/NMWException.o"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/ppc/NMWException.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj);
}
@@ -47,12 +59,18 @@ fn read_extab() {
fn diff_ppc() {
let diff_config = diff::DiffObjConfig::default();
let mapping_config = diff::MappingConfig::default();
let target_obj =
obj::read::parse(include_object!("data/ppc/CDamageVulnerability_target.o"), &diff_config)
.unwrap();
let base_obj =
obj::read::parse(include_object!("data/ppc/CDamageVulnerability_base.o"), &diff_config)
.unwrap();
let target_obj = obj::read::parse(
include_object!("data/ppc/CDamageVulnerability_target.o"),
&diff_config,
diff::DiffSide::Target,
)
.unwrap();
let base_obj = obj::read::parse(
include_object!("data/ppc/CDamageVulnerability_base.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
let diff =
diff::diff_objs(Some(&target_obj), Some(&base_obj), None, &diff_config, &mapping_config)
.unwrap();
@@ -90,7 +108,12 @@ fn diff_ppc() {
#[cfg(feature = "ppc")]
fn read_vmx128_coff() {
let diff_config = diff::DiffObjConfig { combine_data_sections: true, ..Default::default() };
let obj = obj::read::parse(include_object!("data/ppc/vmx128.obj"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/ppc/vmx128.obj"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx =
obj.symbols.iter().position(|s| s.name == "?FloatingPointExample@@YAXXZ").unwrap();

View File

@@ -6,7 +6,12 @@ mod common;
#[cfg(feature = "x86")]
fn read_x86() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/x86/staticdebug.obj"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/x86/staticdebug.obj"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx = obj.symbols.iter().position(|s| s.name == "?PrintThing@@YAXXZ").unwrap();
let diff = diff::code::no_diff_code(&obj, symbol_idx, &diff_config).unwrap();
@@ -23,7 +28,9 @@ fn read_x86_combine_sections() {
combine_text_sections: true,
..Default::default()
};
let obj = obj::read::parse(include_object!("data/x86/rtest.obj"), &diff_config).unwrap();
let obj =
obj::read::parse(include_object!("data/x86/rtest.obj"), &diff_config, diff::DiffSide::Base)
.unwrap();
insta::assert_debug_snapshot!(obj.sections);
}
@@ -31,7 +38,12 @@ fn read_x86_combine_sections() {
#[cfg(feature = "x86")]
fn read_x86_64() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/x86_64/vs2022.o"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/x86_64/vs2022.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx =
obj.symbols.iter().position(|s| s.name == "?Dot@Vector@@QEAAMPEAU1@@Z").unwrap();
@@ -45,7 +57,12 @@ fn read_x86_64() {
#[cfg(feature = "x86")]
fn display_section_ordering() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/x86/basenode.obj"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/x86/basenode.obj"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
let obj_diff =
diff::diff_objs(Some(&obj), None, None, &diff_config, &diff::MappingConfig::default())
.unwrap()
@@ -60,7 +77,12 @@ fn display_section_ordering() {
#[cfg(feature = "x86")]
fn read_x86_jumptable() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/x86/jumptable.o"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/x86/jumptable.o"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx = obj.symbols.iter().position(|s| s.name == "?test@@YAHH@Z").unwrap();
let diff = diff::code::no_diff_code(&obj, symbol_idx, &diff_config).unwrap();
@@ -74,6 +96,29 @@ fn read_x86_jumptable() {
#[cfg(feature = "x86")]
fn read_x86_local_labels() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(include_object!("data/x86/local_labels.obj"), &diff_config).unwrap();
let obj = obj::read::parse(
include_object!("data/x86/local_labels.obj"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj);
}
#[test]
#[cfg(feature = "x86")]
fn read_x86_indirect_table() {
let diff_config = diff::DiffObjConfig::default();
let obj = obj::read::parse(
include_object!("data/x86/indirect_table.obj"),
&diff_config,
diff::DiffSide::Base,
)
.unwrap();
insta::assert_debug_snapshot!(obj);
let symbol_idx = obj.symbols.iter().position(|s| s.name == "?process@@YAHHHH@Z").unwrap();
let diff = diff::code::no_diff_code(&obj, symbol_idx, &diff_config).unwrap();
insta::assert_debug_snapshot!(diff.instruction_rows);
let output = common::display_diff(&obj, &diff, symbol_idx, &diff_config);
insta::assert_snapshot!(output);
}

Binary file not shown.

View File

@@ -1507,6 +1507,19 @@ Object {
align: None,
virtual_address: None,
},
Symbol {
name: "[.data-0]",
demangled_name: None,
address: 0,
size: 76,
kind: Section,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
],
sections: [
Section {

View File

@@ -449,4 +449,17 @@ expression: obj.symbols
align: None,
virtual_address: None,
},
Symbol {
name: "[.data-0]",
demangled_name: None,
address: 0,
size: 0,
kind: Section,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
]

View File

@@ -10,10 +10,10 @@ expression: output
[(Address(20), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jal", 2), Normal, 10), (Symbol(Symbol { name: "xglSleep", demangled_name: None, address: 0, size: 0, kind: Unknown, section: None, flags: FlagSet(Global), align: None, virtual_address: None }), Bright, 0), (Eol, Normal, 0)]
[(Address(24), Normal, 5), (Spacing(4), Normal, 0), (Opcode("nop", 113), Normal, 10), (Eol, Normal, 0)]
[(Address(28), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lw", 26), Normal, 10), (Argument(Opaque("$a1")), Normal, 0), (Basic(", "), Normal, 0), (Basic("%gp_rel("), Normal, 0), (Symbol(Symbol { name: "WorkEnd", demangled_name: None, address: 64, size: 4, kind: Object, section: Some(8), flags: FlagSet(Global), align: None, virtual_address: None }), Bright, 0), (Basic(")"), Normal, 0), (Basic("("), Normal, 0), (Argument(Opaque("$gp")), Normal, 0), (Basic(")"), Normal, 0), (Eol, Normal, 0)]
[(Address(32), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lui", 20), Normal, 10), (Argument(Opaque("$a0")), Normal, 0), (Basic(", "), Normal, 0), (Basic("%hi("), Normal, 0), (Symbol(Symbol { name: "[.sdata]", demangled_name: None, address: 0, size: 64, kind: Section, section: Some(8), flags: FlagSet(Local), align: None, virtual_address: None }), Bright, 0), (Basic(")"), Normal, 0), (Eol, Normal, 0)]
[(Address(32), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lui", 20), Normal, 10), (Argument(Opaque("$a0")), Normal, 0), (Basic(", "), Normal, 0), (Basic("%hi("), Normal, 0), (Symbol(Symbol { name: "[.sdata]", demangled_name: None, address: 0, size: 0, kind: Section, section: Some(8), flags: FlagSet(Local), align: None, virtual_address: None }), Bright, 0), (Basic(")"), Normal, 0), (Eol, Normal, 0)]
[(Address(36), Normal, 5), (Spacing(4), Normal, 0), (Opcode("daddu", 97), Normal, 10), (Argument(Opaque("$a2")), Normal, 0), (Basic(", "), Normal, 0), (Argument(Opaque("$zero")), Normal, 0), (Basic(", "), Normal, 0), (Argument(Opaque("$zero")), Normal, 0), (Eol, Normal, 0)]
[(Address(40), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jal", 2), Normal, 10), (Symbol(Symbol { name: "xglSoundLoadEffect", demangled_name: None, address: 0, size: 0, kind: Unknown, section: None, flags: FlagSet(Global), align: None, virtual_address: None }), Bright, 0), (Eol, Normal, 0)]
[(Address(44), Normal, 5), (Spacing(4), Normal, 0), (Opcode("addiu", 12), Normal, 10), (Argument(Opaque("$a0")), Normal, 0), (Basic(", "), Normal, 0), (Argument(Opaque("$a0")), Normal, 0), (Basic(", "), Normal, 0), (Basic("%lo("), Normal, 0), (Symbol(Symbol { name: "[.sdata]", demangled_name: None, address: 0, size: 64, kind: Section, section: Some(8), flags: FlagSet(Local), align: None, virtual_address: None }), Bright, 0), (Basic(")"), Normal, 0), (Eol, Normal, 0)]
[(Address(44), Normal, 5), (Spacing(4), Normal, 0), (Opcode("addiu", 12), Normal, 10), (Argument(Opaque("$a0")), Normal, 0), (Basic(", "), Normal, 0), (Argument(Opaque("$a0")), Normal, 0), (Basic(", "), Normal, 0), (Basic("%lo("), Normal, 0), (Symbol(Symbol { name: "[.sdata]", demangled_name: None, address: 0, size: 0, kind: Section, section: Some(8), flags: FlagSet(Local), align: None, virtual_address: None }), Bright, 0), (Basic(")"), Normal, 0), (Eol, Normal, 0)]
[(Address(48), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lui", 20), Normal, 10), (Argument(Opaque("$a0")), Normal, 0), (Basic(", "), Normal, 0), (Basic("%hi("), Normal, 0), (Symbol(Symbol { name: "PacketBottomNewVu1DropMicroCode", demangled_name: None, address: 0, size: 12, kind: Object, section: Some(7), flags: FlagSet(Global), align: None, virtual_address: None }), Bright, 0), (Basic(")"), Normal, 0), (Eol, Normal, 0)]
[(Address(52), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lw", 26), Normal, 10), (Argument(Opaque("$a1")), Normal, 0), (Basic(", "), Normal, 0), (Basic("%gp_rel("), Normal, 0), (Symbol(Symbol { name: "WorkEnd", demangled_name: None, address: 64, size: 4, kind: Object, section: Some(8), flags: FlagSet(Global), align: None, virtual_address: None }), Bright, 0), (Basic(")"), Normal, 0), (Basic("("), Normal, 0), (Argument(Opaque("$gp")), Normal, 0), (Basic(")"), Normal, 0), (Eol, Normal, 0)]
[(Address(56), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jal", 2), Normal, 10), (Symbol(Symbol { name: "xglSoundLoadSwd", demangled_name: None, address: 0, size: 0, kind: Unknown, section: None, flags: FlagSet(Global), align: None, virtual_address: None }), Bright, 0), (Eol, Normal, 0)]

View File

@@ -1,5 +1,6 @@
---
source: objdiff-core/tests/arch_mips.rs
assertion_line: 10
expression: obj
---
Object {
@@ -51,6 +52,7 @@ Object {
{},
],
ignored_symbols: {},
diff_side: Base,
},
endianness: Little,
symbols: [
@@ -110,7 +112,7 @@ Object {
name: "[.sdata]",
demangled_name: None,
address: 0,
size: 64,
size: 0,
kind: Section,
section: Some(
8,
@@ -671,6 +673,45 @@ Object {
align: None,
virtual_address: None,
},
Symbol {
name: "[.data-0]",
demangled_name: None,
address: 0,
size: 0,
kind: Section,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.rodata-0]",
demangled_name: None,
address: 0,
size: 12,
kind: Section,
section: Some(
7,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.sdata-0]",
demangled_name: None,
address: 0,
size: 76,
kind: Section,
section: Some(
8,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
],
sections: [
Section {

View File

@@ -2645,6 +2645,7 @@ expression: "(target_symbol_diff, base_symbol_diff)"
arg_diff: [],
},
],
data_rows: [],
},
SymbolDiff {
target_symbol: Some(
@@ -5288,5 +5289,6 @@ expression: "(target_symbol_diff, base_symbol_diff)"
arg_diff: [],
},
],
data_rows: [],
},
)

View File

@@ -1,6 +1,5 @@
---
source: objdiff-core/tests/arch_ppc.rs
assertion_line: 70
expression: sections_display
---
[
@@ -27,6 +26,7 @@ expression: sections_display
is_mapping_symbol: false,
},
],
kind: Common,
},
SectionDisplay {
id: ".ctors-0",
@@ -37,10 +37,11 @@ expression: sections_display
),
symbols: [
SectionDisplaySymbol {
symbol: 2,
symbol: 16,
is_mapping_symbol: false,
},
],
kind: Data,
},
SectionDisplay {
id: ".text-0",
@@ -83,5 +84,6 @@ expression: sections_display
is_mapping_symbol: false,
},
],
kind: Code,
},
]

View File

@@ -308,6 +308,32 @@ Object {
align: None,
virtual_address: None,
},
Symbol {
name: "[extab-0]",
demangled_name: None,
address: 0,
size: 40,
kind: Section,
section: Some(
1,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[extabindex-0]",
demangled_name: None,
address: 0,
size: 36,
kind: Section,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
],
sections: [
Section {

View File

@@ -43,7 +43,7 @@ Object {
name: "[.ctors]",
demangled_name: None,
address: 0,
size: 4,
size: 0,
kind: Section,
section: Some(
1,
@@ -157,6 +157,19 @@ Object {
0,
),
},
Symbol {
name: "[.ctors-0]",
demangled_name: None,
address: 0,
size: 4,
kind: Section,
section: Some(
1,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
],
sections: [
Section {

View File

@@ -1101,6 +1101,45 @@ Object {
align: None,
virtual_address: None,
},
Symbol {
name: "[.XBLD$W-0]",
demangled_name: None,
address: 0,
size: 16,
kind: Section,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.rdata-0]",
demangled_name: None,
address: 0,
size: 416,
kind: Section,
section: Some(
4,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.pdata-0]",
demangled_name: None,
address: 0,
size: 40,
kind: Section,
section: Some(
6,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
],
sections: [
Section {

View File

@@ -14,6 +14,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-1",
@@ -26,6 +27,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-2",
@@ -38,6 +40,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-3",
@@ -50,6 +53,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-4",
@@ -62,6 +66,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-5",
@@ -74,6 +79,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-6",
@@ -86,6 +92,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-7",
@@ -98,6 +105,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-8",
@@ -110,6 +118,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-9",
@@ -122,6 +131,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-10",
@@ -134,6 +144,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-11",
@@ -146,6 +157,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-12",
@@ -158,6 +170,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-13",
@@ -170,6 +183,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-14",
@@ -182,6 +196,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-15",
@@ -194,6 +209,7 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
SectionDisplay {
id: ".text-16",
@@ -206,5 +222,6 @@ expression: section_display
is_mapping_symbol: false,
},
],
kind: Code,
},
]

View File

@@ -124,6 +124,19 @@ Object {
align: None,
virtual_address: None,
},
Symbol {
name: "[.data-0]",
demangled_name: None,
address: 0,
size: 10,
kind: Section,
section: Some(
1,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
],
sections: [
Section {

View File

@@ -854,6 +854,201 @@ Object {
align: None,
virtual_address: None,
},
Symbol {
name: "[.xdata-0]",
demangled_name: None,
address: 0,
size: 8,
kind: Section,
section: Some(
7,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.pdata-0]",
demangled_name: None,
address: 0,
size: 12,
kind: Section,
section: Some(
8,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.xdata-1]",
demangled_name: None,
address: 0,
size: 8,
kind: Section,
section: Some(
9,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.pdata-1]",
demangled_name: None,
address: 0,
size: 12,
kind: Section,
section: Some(
10,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.xdata-2]",
demangled_name: None,
address: 0,
size: 8,
kind: Section,
section: Some(
11,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.pdata-2]",
demangled_name: None,
address: 0,
size: 12,
kind: Section,
section: Some(
12,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.xdata-3]",
demangled_name: None,
address: 0,
size: 8,
kind: Section,
section: Some(
13,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.pdata-3]",
demangled_name: None,
address: 0,
size: 12,
kind: Section,
section: Some(
14,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.rdata-0]",
demangled_name: None,
address: 0,
size: 256,
kind: Section,
section: Some(
15,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.xdata-4]",
demangled_name: None,
address: 0,
size: 20,
kind: Section,
section: Some(
16,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.pdata-4]",
demangled_name: None,
address: 0,
size: 12,
kind: Section,
section: Some(
17,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.rtc$IMZ-0]",
demangled_name: None,
address: 0,
size: 8,
kind: Section,
section: Some(
19,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.rtc$TMZ-0]",
demangled_name: None,
address: 0,
size: 8,
kind: Section,
section: Some(
20,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.rdata-1]",
demangled_name: None,
address: 0,
size: 4,
kind: Section,
section: Some(
21,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.rdata-2]",
demangled_name: None,
address: 0,
size: 4,
kind: Section,
section: Some(
22,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
],
sections: [
Section {

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,995 @@
---
source: objdiff-core/tests/arch_x86.rs
expression: output
---
[(Line(9), Dim, 5), (Address(0), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(9), Dim, 5), (Address(4), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sub", 740), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(500)), Normal, 0), (Eol, Normal, 0)]
[(Line(9), Dim, 5), (Address(9), Normal, 5), (Spacing(4), Normal, 0), (Opcode("push", 640), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(9), Dim, 5), (Address(10), Normal, 5), (Spacing(4), Normal, 0), (Opcode("je", 302), Normal, 10), (BranchDest(223), Normal, 0), (Basic(" ~>"), Rotating(0), 0), (Eol, Normal, 0)]
[(Line(9), Dim, 5), (Address(16), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sub", 740), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(100)), Normal, 0), (Eol, Normal, 0)]
[(Line(9), Dim, 5), (Address(19), Normal, 5), (Spacing(4), Normal, 0), (Opcode("je", 302), Normal, 10), (Argument(Opaque("short")), Normal, 0), (Spacing(1), Normal, 0), (BranchDest(29), Normal, 0), (Basic(" ~>"), Rotating(1), 0), (Eol, Normal, 0)]
[(Line(91), Dim, 5), (Address(21), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(91), Dim, 5), (Address(25), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Eol, Normal, 0)]
[(Line(91), Dim, 5), (Address(27), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(28), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(29), Normal, 5), (Basic(" ~> "), Rotating(1), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(12)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(33), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cmp", 93), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(300)), Normal, 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(38), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jg", 304), Normal, 10), (Argument(Opaque("short")), Normal, 0), (Spacing(1), Normal, 0), (BranchDest(139), Normal, 0), (Basic(" ~>"), Rotating(2), 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(40), Normal, 5), (Spacing(4), Normal, 0), (Opcode("je", 302), Normal, 10), (Argument(Opaque("short")), Normal, 0), (Spacing(1), Normal, 0), (BranchDest(124), Normal, 0), (Basic(" ~>"), Rotating(3), 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(42), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(4294967246)), Normal, 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(45), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cmp", 93), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(200)), Normal, 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(50), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ja", 297), Normal, 10), (BranchDest(217), Normal, 0), (Basic(" ~>"), Rotating(4), 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(56), Normal, 5), (Spacing(4), Normal, 0), (Opcode("movzx", 454), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("byte")), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ptr")), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (BranchDest(448), Normal, 0), (Basic("]"), Normal, 0), (Basic(" ~>"), Rotating(5), 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(63), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jmp", 308), Normal, 10), (Argument(Opaque("dword")), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ptr")), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("*")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Argument(Opaque("+")), Normal, 0), (BranchDest(424), Normal, 0), (Basic("]"), Normal, 0), (Basic(" ~>"), Rotating(6), 0), (Eol, Normal, 0)]
[(Line(57), Dim, 5), (Address(70), Normal, 5), (Basic(" ~> "), Rotating(17), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(57), Dim, 5), (Address(74), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(10)), Normal, 0), (Eol, Normal, 0)]
[(Line(57), Dim, 5), (Address(77), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(78), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(63), Dim, 5), (Address(79), Normal, 5), (Basic(" ~> "), Rotating(19), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(63), Dim, 5), (Address(83), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(4294967288)), Normal, 0), (Eol, Normal, 0)]
[(Line(63), Dim, 5), (Address(86), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(87), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(66), Dim, 5), (Address(88), Normal, 5), (Basic(" ~> "), Rotating(20), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(66), Dim, 5), (Address(92), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(66), Dim, 5), (Address(94), Normal, 5), (Spacing(4), Normal, 0), (Opcode("imul", 277), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(66), Dim, 5), (Address(97), Normal, 5), (Spacing(4), Normal, 0), (Opcode("imul", 277), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(66), Dim, 5), (Address(100), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(101), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(69), Dim, 5), (Address(102), Normal, 5), (Basic(" ~> "), Rotating(21), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(69), Dim, 5), (Address(106), Normal, 5), (Spacing(4), Normal, 0), (Opcode("and", 21), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(2147483651)), Normal, 0), (Eol, Normal, 0)]
[(Line(69), Dim, 5), (Address(111), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jns", 313), Normal, 10), (BranchDest(420), Normal, 0), (Basic(" ~>"), Rotating(7), 0), (Eol, Normal, 0)]
[(Line(69), Dim, 5), (Address(117), Normal, 5), (Spacing(4), Normal, 0), (Opcode("dec", 137), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Eol, Normal, 0)]
[(Line(69), Dim, 5), (Address(118), Normal, 5), (Spacing(4), Normal, 0), (Opcode("or", 467), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(4294967292)), Normal, 0), (Eol, Normal, 0)]
[(Line(69), Dim, 5), (Address(121), Normal, 5), (Spacing(4), Normal, 0), (Opcode("inc", 279), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Eol, Normal, 0)]
[(Line(69), Dim, 5), (Address(122), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(123), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(72), Dim, 5), (Address(124), Normal, 5), (Basic(" ~> "), Rotating(3), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(72), Dim, 5), (Address(128), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(72), Dim, 5), (Address(130), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cdq", 61), Normal, 10), (Eol, Normal, 0)]
[(Line(72), Dim, 5), (Address(131), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sub", 740), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("edx")), Normal, 0), (Eol, Normal, 0)]
[(Line(72), Dim, 5), (Address(133), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sar", 678), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(72), Dim, 5), (Address(135), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(72), Dim, 5), (Address(137), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(138), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(139), Normal, 5), (Basic(" ~> "), Rotating(2), 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(4294966946)), Normal, 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(144), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cmp", 93), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(150)), Normal, 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(149), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ja", 297), Normal, 10), (Argument(Opaque("short")), Normal, 0), (Spacing(1), Normal, 0), (BranchDest(217), Normal, 0), (Basic(" ~>"), Rotating(4), 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(151), Normal, 5), (Spacing(4), Normal, 0), (Opcode("movzx", 454), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("byte")), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ptr")), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (BranchDest(672), Normal, 0), (Basic("]"), Normal, 0), (Basic(" ~>"), Rotating(8), 0), (Eol, Normal, 0)]
[(Line(55), Dim, 5), (Address(158), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jmp", 308), Normal, 10), (Argument(Opaque("dword")), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ptr")), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Argument(Opaque("*")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Argument(Opaque("+")), Normal, 0), (BranchDest(652), Normal, 0), (Basic("]"), Normal, 0), (Basic(" ~>"), Rotating(9), 0), (Eol, Normal, 0)]
[(Line(75), Dim, 5), (Address(165), Normal, 5), (Basic(" ~> "), Rotating(22), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(75), Dim, 5), (Address(169), Normal, 5), (Spacing(4), Normal, 0), (Opcode("neg", 464), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Eol, Normal, 0)]
[(Line(75), Dim, 5), (Address(171), Normal, 5), (Spacing(4), Normal, 0), (Opcode("shl", 712), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(75), Dim, 5), (Address(173), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(174), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(78), Dim, 5), (Address(175), Normal, 5), (Basic(" ~> "), Rotating(23), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(78), Dim, 5), (Address(179), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lea", 374), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(1)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(78), Dim, 5), (Address(183), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(184), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(81), Dim, 5), (Address(185), Normal, 5), (Basic(" ~> "), Rotating(24), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(81), Dim, 5), (Address(189), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(81), Dim, 5), (Address(191), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cdq", 61), Normal, 10), (Eol, Normal, 0)]
[(Line(81), Dim, 5), (Address(192), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(81), Dim, 5), (Address(197), Normal, 5), (Spacing(4), Normal, 0), (Opcode("idiv", 276), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(81), Dim, 5), (Address(199), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(81), Dim, 5), (Address(200), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("edx")), Normal, 0), (Eol, Normal, 0)]
[(Line(81), Dim, 5), (Address(202), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(204), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(84), Dim, 5), (Address(205), Normal, 5), (Basic(" ~> "), Rotating(25), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(84), Dim, 5), (Address(209), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lea", 374), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Argument(Opaque("-")), Normal, 0), (Argument(Signed(1)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(84), Dim, 5), (Address(212), Normal, 5), (Spacing(4), Normal, 0), (Opcode("imul", 277), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(84), Dim, 5), (Address(215), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(216), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(87), Dim, 5), (Address(217), Normal, 5), (Basic(" ~> "), Rotating(4), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(87), Dim, 5), (Address(221), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(222), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(223), Normal, 5), (Basic(" ~> "), Rotating(0), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(12)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(227), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cmp", 93), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(400)), Normal, 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(232), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jg", 304), Normal, 10), (Argument(Opaque("short")), Normal, 0), (Spacing(1), Normal, 0), (BranchDest(334), Normal, 0), (Basic(" ~>"), Rotating(10), 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(234), Normal, 5), (Spacing(4), Normal, 0), (Opcode("je", 302), Normal, 10), (Argument(Opaque("short")), Normal, 0), (Spacing(1), Normal, 0), (BranchDest(323), Normal, 0), (Basic(" ~>"), Rotating(11), 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(236), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(4294967196)), Normal, 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(239), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cmp", 93), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(250)), Normal, 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(244), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ja", 297), Normal, 10), (BranchDest(418), Normal, 0), (Basic(" ~>"), Rotating(12), 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(250), Normal, 5), (Spacing(4), Normal, 0), (Opcode("movzx", 454), Normal, 10), (Argument(Opaque("edx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("byte")), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ptr")), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (BranchDest(852), Normal, 0), (Basic("]"), Normal, 0), (Basic(" ~>"), Rotating(13), 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(257), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jmp", 308), Normal, 10), (Argument(Opaque("dword")), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ptr")), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("edx")), Normal, 0), (Argument(Opaque("*")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Argument(Opaque("+")), Normal, 0), (BranchDest(824), Normal, 0), (Basic("]"), Normal, 0), (Basic(" ~>"), Rotating(14), 0), (Eol, Normal, 0)]
[(Line(14), Dim, 5), (Address(264), Normal, 5), (Basic(" ~> "), Rotating(26), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(14), Dim, 5), (Address(268), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lea", 374), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("*")), Normal, 0), (Argument(Signed(2)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(14), Dim, 5), (Address(271), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(272), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(17), Dim, 5), (Address(273), Normal, 5), (Basic(" ~> "), Rotating(27), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(17), Dim, 5), (Address(277), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(7)), Normal, 0), (Eol, Normal, 0)]
[(Line(17), Dim, 5), (Address(280), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(281), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(20), Dim, 5), (Address(282), Normal, 5), (Basic(" ~> "), Rotating(28), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(20), Dim, 5), (Address(286), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(4294967292)), Normal, 0), (Eol, Normal, 0)]
[(Line(20), Dim, 5), (Address(289), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(290), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(23), Dim, 5), (Address(291), Normal, 5), (Basic(" ~> "), Rotating(29), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(23), Dim, 5), (Address(295), Normal, 5), (Spacing(4), Normal, 0), (Opcode("imul", 277), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Eol, Normal, 0)]
[(Line(23), Dim, 5), (Address(298), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(299), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(26), Dim, 5), (Address(300), Normal, 5), (Basic(" ~> "), Rotating(30), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(26), Dim, 5), (Address(304), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cdq", 61), Normal, 10), (Eol, Normal, 0)]
[(Line(26), Dim, 5), (Address(305), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sub", 740), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("edx")), Normal, 0), (Eol, Normal, 0)]
[(Line(26), Dim, 5), (Address(307), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sar", 678), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(26), Dim, 5), (Address(309), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(310), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(29), Dim, 5), (Address(311), Normal, 5), (Basic(" ~> "), Rotating(31), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(29), Dim, 5), (Address(315), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(29), Dim, 5), (Address(317), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sar", 678), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(29), Dim, 5), (Address(319), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(29), Dim, 5), (Address(321), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(322), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(32), Dim, 5), (Address(323), Normal, 5), (Basic(" ~> "), Rotating(11), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(32), Dim, 5), (Address(327), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lea", 374), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(32), Dim, 5), (Address(330), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sub", 740), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(32), Dim, 5), (Address(332), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(333), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(334), Normal, 5), (Basic(" ~> "), Rotating(10), 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(4294966846)), Normal, 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(339), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cmp", 93), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(200)), Normal, 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(344), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ja", 297), Normal, 10), (Argument(Opaque("short")), Normal, 0), (Spacing(1), Normal, 0), (BranchDest(418), Normal, 0), (Basic(" ~>"), Rotating(12), 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(346), Normal, 5), (Spacing(4), Normal, 0), (Opcode("movzx", 454), Normal, 10), (Argument(Opaque("edx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("byte")), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ptr")), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (BranchDest(1128), Normal, 0), (Basic("]"), Normal, 0), (Basic(" ~>"), Rotating(15), 0), (Eol, Normal, 0)]
[(Line(12), Dim, 5), (Address(353), Normal, 5), (Spacing(4), Normal, 0), (Opcode("jmp", 308), Normal, 10), (Argument(Opaque("dword")), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ptr")), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("edx")), Normal, 0), (Argument(Opaque("*")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Argument(Opaque("+")), Normal, 0), (BranchDest(1104), Normal, 0), (Basic("]"), Normal, 0), (Basic(" ~>"), Rotating(16), 0), (Eol, Normal, 0)]
[(Line(35), Dim, 5), (Address(360), Normal, 5), (Basic(" ~> "), Rotating(18), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(35), Dim, 5), (Address(364), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lea", 374), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Argument(Opaque("*")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(35), Dim, 5), (Address(367), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(368), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(38), Dim, 5), (Address(369), Normal, 5), (Basic(" ~> "), Rotating(32), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(38), Dim, 5), (Address(373), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(38), Dim, 5), (Address(375), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cdq", 61), Normal, 10), (Eol, Normal, 0)]
[(Line(38), Dim, 5), (Address(376), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(3)), Normal, 0), (Eol, Normal, 0)]
[(Line(38), Dim, 5), (Address(381), Normal, 5), (Spacing(4), Normal, 0), (Opcode("idiv", 276), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(38), Dim, 5), (Address(383), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(38), Dim, 5), (Address(384), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("edx")), Normal, 0), (Eol, Normal, 0)]
[(Line(38), Dim, 5), (Address(386), Normal, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(388), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(41), Dim, 5), (Address(389), Normal, 5), (Basic(" ~> "), Rotating(33), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(41), Dim, 5), (Address(393), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(41), Dim, 5), (Address(395), Normal, 5), (Spacing(4), Normal, 0), (Opcode("cdq", 61), Normal, 10), (Eol, Normal, 0)]
[(Line(41), Dim, 5), (Address(396), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sub", 740), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("edx")), Normal, 0), (Eol, Normal, 0)]
[(Line(41), Dim, 5), (Address(398), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sar", 678), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(41), Dim, 5), (Address(400), Normal, 5), (Spacing(4), Normal, 0), (Opcode("sub", 740), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Eol, Normal, 0)]
[(Line(41), Dim, 5), (Address(402), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(41), Dim, 5), (Address(404), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(405), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(44), Dim, 5), (Address(406), Normal, 5), (Basic(" ~> "), Rotating(34), 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("ecx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("esp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(44), Dim, 5), (Address(410), Normal, 5), (Spacing(4), Normal, 0), (Opcode("lea", 374), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(1)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
[(Line(44), Dim, 5), (Address(413), Normal, 5), (Spacing(4), Normal, 0), (Opcode("imul", 277), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("ecx")), Normal, 0), (Eol, Normal, 0)]
[(Line(44), Dim, 5), (Address(416), Normal, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(417), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(50), Dim, 5), (Address(418), Normal, 5), (Basic(" ~> "), Rotating(12), 0), (Opcode("xor", 1518), Normal, 10), (Argument(Opaque("eax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("eax")), Normal, 0), (Eol, Normal, 0)]
[(Line(50), Dim, 5), (Address(420), Normal, 5), (Basic(" ~> "), Rotating(7), 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("esi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(421), Normal, 5), (Spacing(4), Normal, 0), (Opcode("ret", 662), Normal, 10), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(422), Normal, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("edi")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("edi")), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(424), Normal, 5), (Basic(" ~> "), Rotating(6), 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(70), Normal, 0), (Basic(" ~>"), Rotating(17), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(428), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(360), Normal, 0), (Basic(" ~>"), Rotating(18), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(432), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(79), Normal, 0), (Basic(" ~>"), Rotating(19), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(436), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(88), Normal, 0), (Basic(" ~>"), Rotating(20), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(440), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(102), Normal, 0), (Basic(" ~>"), Rotating(21), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(444), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(217), Normal, 0), (Basic(" ~>"), Rotating(4), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(448), Normal, 5), (Basic(" ~> "), Rotating(5), 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(0)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(449), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(450), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(451), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(452), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(453), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(454), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(455), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(456), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(457), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(458), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(459), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(460), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(461), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(462), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(463), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(464), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(465), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(466), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(467), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(468), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(469), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(470), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(471), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(472), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(473), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(474), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(475), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(476), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(477), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(478), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(479), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(480), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(481), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(482), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(483), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(484), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(485), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(486), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(487), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(488), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(489), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(490), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(491), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(492), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(493), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(494), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(495), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(496), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(497), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(498), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(499), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(500), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(501), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(502), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(503), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(504), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(505), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(506), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(507), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(508), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(509), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(510), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(511), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(512), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(513), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(514), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(515), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(516), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(517), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(518), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(519), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(520), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(521), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(522), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(523), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(524), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(525), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(526), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(527), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(528), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(529), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(530), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(531), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(532), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(533), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(534), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(535), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(536), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(537), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(538), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(539), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(540), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(541), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(542), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(543), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(544), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(545), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(546), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(547), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(548), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(2)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(549), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(550), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(551), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(552), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(553), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(554), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(555), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(556), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(557), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(558), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(559), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(560), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(561), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(562), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(563), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(564), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(565), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(566), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(567), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(568), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(569), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(570), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(571), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(572), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(573), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(574), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(575), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(576), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(577), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(578), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(579), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(580), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(581), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(582), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(583), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(584), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(585), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(586), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(587), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(588), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(589), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(590), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(591), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(592), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(593), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(594), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(595), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(596), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(597), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(598), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(3)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(599), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(600), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(601), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(602), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(603), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(604), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(605), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(606), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(607), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(608), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(609), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(610), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(611), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(612), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(613), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(614), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(615), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(616), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(617), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(618), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(619), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(620), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(621), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(622), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(623), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(624), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(625), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(626), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(627), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(628), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(629), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(630), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(631), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(632), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(633), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(634), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(635), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(636), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(637), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(638), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(639), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(640), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(641), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(642), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(643), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(644), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(645), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(646), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(647), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(648), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(649), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(141)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(650), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(73)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(651), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(0)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(652), Normal, 5), (Basic(" ~> "), Rotating(9), 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(165), Normal, 0), (Basic(" ~>"), Rotating(22), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(656), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(175), Normal, 0), (Basic(" ~>"), Rotating(23), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(660), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(185), Normal, 0), (Basic(" ~>"), Rotating(24), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(664), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(205), Normal, 0), (Basic(" ~>"), Rotating(25), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(668), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(217), Normal, 0), (Basic(" ~>"), Rotating(4), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(672), Normal, 5), (Basic(" ~> "), Rotating(8), 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(0)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(673), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(674), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(675), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(676), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(677), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(678), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(679), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(680), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(681), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(682), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(683), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(684), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(685), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(686), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(687), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(688), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(689), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(690), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(691), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(692), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(693), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(694), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(695), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(696), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(697), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(698), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(699), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(700), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(701), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(702), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(703), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(704), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(705), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(706), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(707), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(708), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(709), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(710), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(711), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(712), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(713), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(714), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(715), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(716), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(717), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(718), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(719), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(720), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(721), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(722), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(723), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(724), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(725), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(726), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(727), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(728), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(729), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(730), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(731), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(732), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(733), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(734), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(735), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(736), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(737), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(738), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(739), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(740), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(741), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(742), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(743), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(744), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(745), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(746), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(747), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(748), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(749), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(750), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(751), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(752), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(753), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(754), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(755), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(756), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(757), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(758), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(759), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(760), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(761), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(762), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(763), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(764), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(765), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(766), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(767), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(768), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(769), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(770), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(771), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(772), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(2)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(773), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(774), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(775), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(776), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(777), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(778), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(779), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(780), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(781), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(782), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(783), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(784), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(785), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(786), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(787), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(788), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(789), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(790), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(791), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(792), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(793), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(794), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(795), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(796), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(797), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(798), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(799), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(800), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(801), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(802), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(803), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(804), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(805), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(806), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(807), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(808), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(809), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(810), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(811), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(812), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(813), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(814), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(815), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(816), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(817), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(818), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(819), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(820), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(821), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(822), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(3)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(823), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(144)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(824), Normal, 5), (Basic(" ~> "), Rotating(14), 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(264), Normal, 0), (Basic(" ~>"), Rotating(26), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(828), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(273), Normal, 0), (Basic(" ~>"), Rotating(27), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(832), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(282), Normal, 0), (Basic(" ~>"), Rotating(28), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(836), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(291), Normal, 0), (Basic(" ~>"), Rotating(29), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(840), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(300), Normal, 0), (Basic(" ~>"), Rotating(30), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(844), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(311), Normal, 0), (Basic(" ~>"), Rotating(31), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(848), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(418), Normal, 0), (Basic(" ~>"), Rotating(12), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(852), Normal, 5), (Basic(" ~> "), Rotating(13), 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(0)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(853), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(854), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(855), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(856), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(857), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(858), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(859), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(860), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(861), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(862), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(863), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(864), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(865), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(866), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(867), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(868), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(869), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(870), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(871), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(872), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(873), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(874), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(875), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(876), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(877), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(878), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(879), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(880), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(881), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(882), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(883), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(884), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(885), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(886), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(887), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(888), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(889), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(890), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(891), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(892), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(893), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(894), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(895), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(896), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(897), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(898), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(899), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(900), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(901), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(902), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(903), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(904), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(905), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(906), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(907), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(908), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(909), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(910), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(911), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(912), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(913), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(914), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(915), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(916), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(917), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(918), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(919), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(920), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(921), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(922), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(923), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(924), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(925), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(926), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(927), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(928), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(929), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(930), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(931), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(932), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(933), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(934), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(935), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(936), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(937), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(938), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(939), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(940), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(941), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(942), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(943), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(944), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(945), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(946), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(947), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(948), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(949), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(950), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(951), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(952), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(2)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(953), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(954), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(955), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(956), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(957), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(958), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(959), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(960), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(961), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(962), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(963), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(964), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(965), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(966), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(967), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(968), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(969), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(970), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(971), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(972), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(973), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(974), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(975), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(976), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(977), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(978), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(979), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(980), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(981), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(982), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(983), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(984), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(985), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(986), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(987), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(988), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(989), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(990), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(991), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(992), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(993), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(994), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(995), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(996), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(997), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(998), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(999), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1000), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1001), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1002), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(3)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1003), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1004), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1005), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1006), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1007), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1008), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1009), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1010), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1011), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1012), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1013), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1014), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1015), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1016), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1017), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1018), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1019), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1020), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1021), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1022), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1023), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1024), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1025), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1026), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1027), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1028), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1029), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1030), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1031), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1032), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1033), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1034), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1035), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1036), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1037), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1038), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1039), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1040), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1041), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1042), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1043), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1044), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1045), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1046), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1047), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1048), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1049), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1050), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1051), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1052), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1053), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1054), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1055), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1056), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1057), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1058), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1059), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1060), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1061), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1062), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1063), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1064), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1065), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1066), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1067), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1068), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1069), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1070), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1071), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1072), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1073), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1074), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1075), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1076), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1077), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1078), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1079), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1080), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1081), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1082), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1083), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1084), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1085), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1086), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1087), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1088), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1089), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1090), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1091), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1092), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1093), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1094), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1095), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1096), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1097), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1098), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1099), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1100), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1101), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(6)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1102), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1103), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(144)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1104), Normal, 5), (Basic(" ~> "), Rotating(16), 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(360), Normal, 0), (Basic(" ~>"), Rotating(18), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1108), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(369), Normal, 0), (Basic(" ~>"), Rotating(32), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1112), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(389), Normal, 0), (Basic(" ~>"), Rotating(33), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1116), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(406), Normal, 0), (Basic(" ~>"), Rotating(34), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1120), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(70), Normal, 0), (Basic(" ~>"), Rotating(17), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1124), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".dword", 65534), Normal, 10), (BranchDest(418), Normal, 0), (Basic(" ~>"), Rotating(12), 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1128), Normal, 5), (Basic(" ~> "), Rotating(15), 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(0)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1129), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1130), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1131), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1132), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1133), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1134), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1135), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1136), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1137), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1138), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1139), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1140), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1141), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1142), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1143), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1144), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1145), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1146), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1147), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1148), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1149), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1150), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1151), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1152), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1153), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1154), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1155), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1156), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1157), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1158), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1159), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1160), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1161), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1162), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1163), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1164), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1165), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1166), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1167), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1168), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1169), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1170), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1171), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1172), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1173), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1174), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1175), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1176), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1177), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1178), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(1)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1179), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1180), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1181), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1182), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1183), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1184), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1185), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1186), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1187), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1188), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1189), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1190), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1191), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1192), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1193), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1194), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1195), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1196), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1197), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1198), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1199), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1200), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1201), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1202), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1203), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1204), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1205), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1206), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1207), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1208), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1209), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1210), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1211), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1212), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1213), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1214), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1215), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1216), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1217), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1218), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1219), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1220), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1221), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1222), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1223), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1224), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1225), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1226), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1227), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1228), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(2)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1229), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1230), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1231), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1232), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1233), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1234), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1235), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1236), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1237), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1238), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1239), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1240), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1241), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1242), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1243), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1244), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1245), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1246), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1247), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1248), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1249), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1250), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1251), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1252), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1253), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1254), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1255), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1256), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1257), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1258), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1259), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1260), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1261), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1262), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1263), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1264), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1265), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1266), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1267), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1268), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1269), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1270), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1271), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1272), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1273), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1274), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1275), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1276), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1277), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1278), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(3)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1279), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1280), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1281), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1282), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1283), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1284), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1285), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1286), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1287), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1288), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1289), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1290), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1291), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1292), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1293), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1294), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1295), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1296), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1297), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1298), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1299), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1300), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1301), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1302), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1303), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1304), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1305), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1306), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1307), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1308), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1309), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1310), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1311), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1312), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1313), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1314), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1315), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1316), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1317), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1318), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1319), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1320), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1321), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1322), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1323), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1324), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1325), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1326), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1327), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(5)), Normal, 0), (Eol, Normal, 0)]
[(Line(94), Dim, 5), (Address(1328), Normal, 5), (Spacing(4), Normal, 0), (Opcode(".byte", 65534), Normal, 10), (Argument(Unsigned(4)), Normal, 0), (Eol, Normal, 0)]

View File

@@ -0,0 +1,959 @@
---
source: objdiff-core/tests/arch_x86.rs
expression: obj
---
Object {
arch: ArchX86 {
arch: X86,
endianness: Little,
},
endianness: Little,
symbols: [
Symbol {
name: "C:\\Dev\\Projects\\calineva-legacy\\src\\game\\control\\bridge.cpp",
demangled_name: None,
address: 0,
size: 0,
kind: Unknown,
section: None,
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "@comp.id",
demangled_name: None,
address: 0,
size: 0,
kind: Object,
section: None,
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.drectve]",
demangled_name: None,
address: 0,
size: 44,
kind: Section,
section: Some(
0,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.debug$S]",
demangled_name: None,
address: 0,
size: 271,
kind: Section,
section: Some(
1,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.text]",
demangled_name: None,
address: 0,
size: 0,
kind: Section,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.debug$S]",
demangled_name: None,
address: 0,
size: 620,
kind: Section,
section: Some(
3,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "c:\\dev\\projects\\calineva-legacy\\src\\game\\control\\bridge.cpp",
demangled_name: None,
address: 0,
size: 0,
kind: Unknown,
section: None,
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "?process@@YAHHHH@Z",
demangled_name: Some(
"int __cdecl process(int, int, int)",
),
address: 0,
size: 1329,
kind: Function,
section: Some(
2,
),
flags: FlagSet(Global),
align: None,
virtual_address: None,
},
Symbol {
name: "$L296",
demangled_name: None,
address: 418,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L312",
demangled_name: None,
address: 217,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L294",
demangled_name: None,
address: 406,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L293",
demangled_name: None,
address: 389,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L292",
demangled_name: None,
address: 369,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L291",
demangled_name: None,
address: 360,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L332",
demangled_name: None,
address: 1104,
size: 0,
kind: Object,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L327",
demangled_name: None,
address: 1128,
size: 0,
kind: Object,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L289",
demangled_name: None,
address: 311,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L288",
demangled_name: None,
address: 300,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L287",
demangled_name: None,
address: 291,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L286",
demangled_name: None,
address: 282,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L285",
demangled_name: None,
address: 273,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L284",
demangled_name: None,
address: 264,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L331",
demangled_name: None,
address: 824,
size: 0,
kind: Object,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L326",
demangled_name: None,
address: 852,
size: 0,
kind: Object,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L311",
demangled_name: None,
address: 205,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L310",
demangled_name: None,
address: 185,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L309",
demangled_name: None,
address: 175,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L308",
demangled_name: None,
address: 165,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L330",
demangled_name: None,
address: 652,
size: 0,
kind: Object,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L325",
demangled_name: None,
address: 672,
size: 0,
kind: Object,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L306",
demangled_name: None,
address: 102,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L305",
demangled_name: None,
address: 88,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L304",
demangled_name: None,
address: 79,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L302",
demangled_name: None,
address: 70,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L329",
demangled_name: None,
address: 424,
size: 0,
kind: Object,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "$L324",
demangled_name: None,
address: 448,
size: 0,
kind: Object,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: ".bf",
demangled_name: None,
address: 0,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: ".lf",
demangled_name: None,
address: 0,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: ".ef",
demangled_name: None,
address: 0,
size: 0,
kind: Unknown,
section: Some(
2,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.debug$F]",
demangled_name: None,
address: 0,
size: 16,
kind: Section,
section: Some(
4,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
Symbol {
name: "[.debug$T]",
demangled_name: None,
address: 0,
size: 104,
kind: Section,
section: Some(
5,
),
flags: FlagSet(Local),
align: None,
virtual_address: None,
},
],
sections: [
Section {
id: ".drectve-0",
name: ".drectve",
address: 0,
size: 44,
kind: Unknown,
data: SectionData(
0,
),
flags: FlagSet(),
align: Some(
1,
),
relocations: [],
line_info: {},
virtual_address: None,
},
Section {
id: ".debug$S-0",
name: ".debug$S",
address: 0,
size: 271,
kind: Unknown,
data: SectionData(
0,
),
flags: FlagSet(),
align: Some(
1,
),
relocations: [],
line_info: {},
virtual_address: None,
},
Section {
id: ".text-0",
name: ".text",
address: 0,
size: 1344,
kind: Code,
data: SectionData(
1344,
),
flags: FlagSet(),
align: Some(
16,
),
relocations: [
Relocation {
flags: Coff(
6,
),
address: 59,
target_symbol: 35,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 66,
target_symbol: 34,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 154,
target_symbol: 29,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 161,
target_symbol: 28,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 253,
target_symbol: 23,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 260,
target_symbol: 22,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 349,
target_symbol: 15,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 356,
target_symbol: 14,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 424,
target_symbol: 33,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 428,
target_symbol: 13,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 432,
target_symbol: 32,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 436,
target_symbol: 31,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 440,
target_symbol: 30,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 444,
target_symbol: 9,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 652,
target_symbol: 27,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 656,
target_symbol: 26,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 660,
target_symbol: 25,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 664,
target_symbol: 24,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 668,
target_symbol: 9,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 824,
target_symbol: 21,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 828,
target_symbol: 20,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 832,
target_symbol: 19,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 836,
target_symbol: 18,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 840,
target_symbol: 17,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 844,
target_symbol: 16,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 848,
target_symbol: 8,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 1104,
target_symbol: 13,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 1108,
target_symbol: 12,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 1112,
target_symbol: 11,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 1116,
target_symbol: 10,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 1120,
target_symbol: 33,
addend: 0,
},
Relocation {
flags: Coff(
6,
),
address: 1124,
target_symbol: 8,
addend: 0,
},
],
line_info: {
0: 9,
21: 91,
28: 94,
29: 55,
70: 57,
78: 94,
79: 63,
87: 94,
88: 66,
101: 94,
102: 69,
123: 94,
124: 72,
138: 94,
139: 55,
165: 75,
174: 94,
175: 78,
184: 94,
185: 81,
204: 94,
205: 84,
216: 94,
217: 87,
222: 94,
223: 12,
264: 14,
272: 94,
273: 17,
281: 94,
282: 20,
290: 94,
291: 23,
299: 94,
300: 26,
310: 94,
311: 29,
322: 94,
323: 32,
333: 94,
334: 12,
360: 35,
368: 94,
369: 38,
388: 94,
389: 41,
405: 94,
406: 44,
417: 94,
418: 50,
421: 94,
},
virtual_address: None,
},
Section {
id: ".debug$S-1",
name: ".debug$S",
address: 0,
size: 620,
kind: Unknown,
data: SectionData(
0,
),
flags: FlagSet(),
align: Some(
1,
),
relocations: [],
line_info: {},
virtual_address: None,
},
Section {
id: ".debug$F-0",
name: ".debug$F",
address: 0,
size: 16,
kind: Unknown,
data: SectionData(
0,
),
flags: FlagSet(),
align: Some(
1,
),
relocations: [],
line_info: {},
virtual_address: None,
},
Section {
id: ".debug$T-0",
name: ".debug$T",
address: 0,
size: 104,
kind: Unknown,
data: SectionData(
0,
),
flags: FlagSet(),
align: Some(
1,
),
relocations: [],
line_info: {},
virtual_address: None,
},
],
split_meta: None,
path: None,
timestamp: None,
flow_analysis_results: {},
}

View File

@@ -1,11 +1,11 @@
use std::{cmp::min, default::Default, mem::take};
use std::default::Default;
use egui::{Label, Sense, Widget, text::LayoutJob};
use objdiff_core::{
diff::{
DataDiff, DataDiffKind, DataRelocationDiff,
data::resolve_relocation,
display::{ContextItem, HoverItem, HoverItemColor, relocation_context, relocation_hover},
DataDiffKind, DataDiffRow,
data::BYTES_PER_ROW,
display::{data_row_context, data_row_hover},
},
obj::Object,
};
@@ -13,84 +13,30 @@ use objdiff_core::{
use super::diff::{context_menu_items_ui, hover_items_ui};
use crate::views::{appearance::Appearance, write_text};
pub(crate) const BYTES_PER_ROW: usize = 16;
fn data_row_hover(obj: &Object, diffs: &[(DataDiff, Vec<DataRelocationDiff>)]) -> Vec<HoverItem> {
let mut out = Vec::new();
let reloc_diffs = diffs.iter().flat_map(|(_, reloc_diffs)| reloc_diffs);
let mut prev_reloc = None;
let mut first = true;
for reloc_diff in reloc_diffs {
let reloc = &reloc_diff.reloc;
if prev_reloc == Some(reloc) {
// Avoid showing consecutive duplicate relocations.
// We do this because a single relocation can span across multiple diffs if the
// bytes in the relocation changed (e.g. first byte is added, second is unchanged).
continue;
}
prev_reloc = Some(reloc);
if first {
first = false;
} else {
out.push(HoverItem::Separator);
}
let color = get_hover_item_color_for_diff_kind(reloc_diff.kind);
let reloc = resolve_relocation(&obj.symbols, reloc);
out.append(&mut relocation_hover(obj, reloc, Some(color)));
}
out
}
fn data_row_context(
obj: &Object,
diffs: &[(DataDiff, Vec<DataRelocationDiff>)],
) -> Vec<ContextItem> {
let mut out = Vec::new();
let reloc_diffs = diffs.iter().flat_map(|(_, reloc_diffs)| reloc_diffs);
let mut prev_reloc = None;
for reloc_diff in reloc_diffs {
let reloc = &reloc_diff.reloc;
if prev_reloc == Some(reloc) {
// Avoid showing consecutive duplicate relocations.
// We do this because a single relocation can span across multiple diffs if the
// bytes in the relocation changed (e.g. first byte is added, second is unchanged).
continue;
}
prev_reloc = Some(reloc);
let reloc = resolve_relocation(&obj.symbols, reloc);
out.append(&mut relocation_context(obj, reloc, None));
}
out
}
fn data_row_hover_ui(
ui: &mut egui::Ui,
obj: &Object,
diffs: &[(DataDiff, Vec<DataRelocationDiff>)],
diff_row: &DataDiffRow,
appearance: &Appearance,
) {
ui.scope(|ui| {
ui.style_mut().override_text_style = Some(egui::TextStyle::Monospace);
ui.style_mut().wrap_mode = Some(egui::TextWrapMode::Extend);
hover_items_ui(ui, data_row_hover(obj, diffs), appearance);
hover_items_ui(ui, data_row_hover(obj, diff_row), appearance);
});
}
fn data_row_context_menu(
ui: &mut egui::Ui,
obj: &Object,
diffs: &[(DataDiff, Vec<DataRelocationDiff>)],
diff_row: &DataDiffRow,
column: usize,
appearance: &Appearance,
) {
ui.scope(|ui| {
ui.style_mut().override_text_style = Some(egui::TextStyle::Monospace);
ui.style_mut().wrap_mode = Some(egui::TextWrapMode::Extend);
context_menu_items_ui(ui, data_row_context(obj, diffs), column, appearance);
context_menu_items_ui(ui, data_row_context(obj, diff_row), column, appearance);
});
}
@@ -103,31 +49,23 @@ fn get_color_for_diff_kind(diff_kind: DataDiffKind, appearance: &Appearance) ->
}
}
fn get_hover_item_color_for_diff_kind(diff_kind: DataDiffKind) -> HoverItemColor {
match diff_kind {
DataDiffKind::None => HoverItemColor::Normal,
DataDiffKind::Replace => HoverItemColor::Special,
DataDiffKind::Delete => HoverItemColor::Delete,
DataDiffKind::Insert => HoverItemColor::Insert,
}
}
pub(crate) fn data_row_ui(
ui: &mut egui::Ui,
obj: Option<&Object>,
address: usize,
diffs: &[(DataDiff, Vec<DataRelocationDiff>)],
base_address: u64,
row_address: u64,
diff_row: &DataDiffRow,
appearance: &Appearance,
column: usize,
) {
if diffs.iter().any(|(dd, rds)| {
dd.kind != DataDiffKind::None || rds.iter().any(|rd| rd.kind != DataDiffKind::None)
}) {
if diff_row.segments.iter().any(|dd| dd.kind != DataDiffKind::None)
|| diff_row.relocations.iter().any(|rd| rd.kind != DataDiffKind::None)
{
ui.painter().rect_filled(ui.available_rect_before_wrap(), 0.0, ui.visuals().faint_bg_color);
}
let mut job = LayoutJob::default();
write_text(
format!("{address:08x}: ").as_str(),
format!("{row_address:08x}: ").as_str(),
appearance.text_color,
&mut job,
appearance.code_font.clone(),
@@ -135,21 +73,22 @@ pub(crate) fn data_row_ui(
// The offset shown on the side of the GUI, shifted by insertions/deletions.
let mut cur_addr = 0usize;
// The offset into the actual bytes of the section on this side, ignoring differences.
let mut cur_addr_actual = address;
for (diff, reloc_diffs) in diffs {
let mut cur_addr_actual = base_address + row_address;
for diff in diff_row.segments.iter() {
let base_color = get_color_for_diff_kind(diff.kind, appearance);
if diff.data.is_empty() {
let mut str = " ".repeat(diff.len);
let mut str = " ".repeat(diff.size);
let n1 = cur_addr / 8;
let n2 = (diff.len + cur_addr) / 8;
let n2 = (diff.size + cur_addr) / 8;
str.push_str(" ".repeat(n2 - n1).as_str());
write_text(str.as_str(), base_color, &mut job, appearance.code_font.clone());
cur_addr += diff.len;
cur_addr += diff.size;
} else {
for byte in &diff.data {
let mut byte_text = format!("{byte:02x} ");
let mut byte_color = base_color;
if let Some(reloc_diff) = reloc_diffs
if let Some(reloc_diff) = diff_row
.relocations
.iter()
.find(|reloc_diff| reloc_diff.range.contains(&cur_addr_actual))
{
@@ -178,11 +117,11 @@ pub(crate) fn data_row_ui(
write_text(str.as_str(), appearance.text_color, &mut job, appearance.code_font.clone());
}
write_text(" ", appearance.text_color, &mut job, appearance.code_font.clone());
for (diff, _) in diffs {
for diff in diff_row.segments.iter() {
let base_color = get_color_for_diff_kind(diff.kind, appearance);
if diff.data.is_empty() {
write_text(
" ".repeat(diff.len).as_str(),
" ".repeat(diff.size).as_str(),
base_color,
&mut job,
appearance.code_font.clone(),
@@ -203,69 +142,7 @@ pub(crate) fn data_row_ui(
let response = Label::new(job).sense(Sense::click()).ui(ui);
if let Some(obj) = obj {
response.context_menu(|ui| data_row_context_menu(ui, obj, diffs, column, appearance));
response.on_hover_ui_at_pointer(|ui| data_row_hover_ui(ui, obj, diffs, appearance));
response.context_menu(|ui| data_row_context_menu(ui, obj, diff_row, column, appearance));
response.on_hover_ui_at_pointer(|ui| data_row_hover_ui(ui, obj, diff_row, appearance));
}
}
pub(crate) fn split_diffs(
diffs: &[DataDiff],
reloc_diffs: &[DataRelocationDiff],
) -> Vec<Vec<(DataDiff, Vec<DataRelocationDiff>)>> {
let mut split_diffs = Vec::<Vec<(DataDiff, Vec<DataRelocationDiff>)>>::new();
let mut row_diffs = Vec::<(DataDiff, Vec<DataRelocationDiff>)>::new();
// The offset shown on the side of the GUI, shifted by insertions/deletions.
let mut cur_addr = 0usize;
// The offset into the actual bytes of the section on this side, ignoring differences.
let mut cur_addr_actual = 0usize;
for diff in diffs {
let mut cur_len = 0usize;
while cur_len < diff.len {
let remaining_len = diff.len - cur_len;
let mut remaining_in_row = BYTES_PER_ROW - (cur_addr % BYTES_PER_ROW);
let len = min(remaining_len, remaining_in_row);
let data_diff = DataDiff {
data: if diff.data.is_empty() {
Vec::new()
} else {
diff.data[cur_len..cur_len + len].to_vec()
},
kind: diff.kind,
len,
symbol: String::new(), // TODO
};
let row_reloc_diffs: Vec<DataRelocationDiff> = if diff.data.is_empty() {
Vec::new()
} else {
let diff_range = cur_addr_actual + cur_len..cur_addr_actual + cur_len + len;
reloc_diffs
.iter()
.filter_map(|reloc_diff| {
if reloc_diff.range.start < diff_range.end
&& diff_range.start < reloc_diff.range.end
{
Some(reloc_diff.clone())
} else {
None
}
})
.collect()
};
let row_diff = (data_diff, row_reloc_diffs);
row_diffs.push(row_diff);
remaining_in_row -= len;
cur_len += len;
cur_addr += len;
if remaining_in_row == 0 {
split_diffs.push(take(&mut row_diffs));
}
}
cur_addr_actual += diff.data.len();
}
if !row_diffs.is_empty() {
split_diffs.push(take(&mut row_diffs));
}
split_diffs
}

View File

@@ -2,10 +2,11 @@ use egui::{Id, Layout, RichText, ScrollArea, TextEdit, Ui, Widget, text::LayoutJ
use objdiff_core::{
build::BuildStatus,
diff::{
DiffObjConfig, ObjectDiff, SectionDiff, SymbolDiff,
DiffObjConfig, ObjectDiff, SymbolDiff,
data::BYTES_PER_ROW,
display::{ContextItem, HoverItem, HoverItemColor, SymbolFilter, SymbolNavigationKind},
},
obj::{Object, Section, Symbol},
obj::{Object, Symbol},
};
use time::format_description;
@@ -14,7 +15,7 @@ use crate::{
views::{
appearance::Appearance,
column_layout::{render_header, render_strips, render_table},
data_diff::{BYTES_PER_ROW, data_row_ui, split_diffs},
data_diff::data_row_ui,
extab_diff::extab_ui,
function_diff::{FunctionDiffContext, asm_col_ui},
symbol_diff::{
@@ -25,17 +26,10 @@ use crate::{
},
};
#[derive(Clone, Copy)]
enum SelectedSymbol {
Symbol(usize),
Section(usize),
}
#[derive(Clone, Copy)]
struct DiffColumnContext<'a> {
status: &'a BuildStatus,
obj: Option<&'a (Object, ObjectDiff)>,
section: Option<(&'a Section, &'a SectionDiff, usize)>,
symbol: Option<(&'a Symbol, &'a SymbolDiff, usize)>,
}
@@ -46,49 +40,28 @@ impl<'a> DiffColumnContext<'a> {
obj: Option<&'a (Object, ObjectDiff)>,
selected_symbol: Option<&SymbolRefByName>,
) -> Self {
let selected_symbol = match view {
let selected_symbol_idx = match view {
View::SymbolDiff => None,
View::FunctionDiff | View::ExtabDiff => match (obj, selected_symbol) {
(Some(obj), Some(s)) => {
obj.0.symbol_by_name(&s.symbol_name).map(SelectedSymbol::Symbol)
}
_ => None,
},
View::DataDiff => match (obj, selected_symbol) {
(Some(obj), Some(SymbolRefByName { section_name: Some(section_name), .. })) => {
find_section(&obj.0, section_name).map(SelectedSymbol::Section)
}
View::FunctionDiff | View::DataDiff | View::ExtabDiff => match (obj, selected_symbol) {
(Some(obj), Some(s)) => obj.0.symbol_by_name(&s.symbol_name),
_ => None,
},
};
let (section, symbol) = match (obj, selected_symbol) {
(Some((obj, obj_diff)), Some(SelectedSymbol::Symbol(symbol_ref))) => {
let symbol = match (obj, selected_symbol_idx) {
(Some((obj, obj_diff)), Some(symbol_ref)) => {
let symbol = &obj.symbols[symbol_ref];
(
symbol.section.map(|section_idx| {
(&obj.sections[section_idx], &obj_diff.sections[section_idx], section_idx)
}),
Some((symbol, &obj_diff.symbols[symbol_ref], symbol_ref)),
)
Some((symbol, &obj_diff.symbols[symbol_ref], symbol_ref))
}
(Some((obj, obj_diff)), Some(SelectedSymbol::Section(section_idx))) => (
Some((&obj.sections[section_idx], &obj_diff.sections[section_idx], section_idx)),
None,
),
_ => (None, None),
_ => None,
};
Self { status, obj, section, symbol }
Self { status, obj, symbol }
}
#[inline]
pub fn has_symbol(&self) -> bool { self.section.is_some() || self.symbol.is_some() }
pub fn has_symbol(&self) -> bool { self.symbol.is_some() }
#[inline]
pub fn id(&self) -> Option<&str> {
self.symbol
.map(|(symbol, _, _)| symbol.name.as_str())
.or_else(|| self.section.map(|(section, _, _)| section.name.as_str()))
}
pub fn id(&self) -> Option<&str> { self.symbol.map(|(symbol, _, _)| symbol.name.as_str()) }
}
#[must_use]
@@ -133,10 +106,7 @@ pub fn diff_view_ui(
{
navigation.right_symbol = Some(target_symbol_ref);
}
} else if navigation.left_symbol.is_some()
&& left_ctx.obj.is_some()
&& left_ctx.section.is_none()
{
} else if navigation.left_symbol.is_some() && left_ctx.obj.is_some() {
// Clear selection if symbol goes missing
navigation.left_symbol = None;
}
@@ -147,10 +117,7 @@ pub fn diff_view_ui(
{
navigation.left_symbol = Some(target_symbol_ref);
}
} else if navigation.right_symbol.is_some()
&& right_ctx.obj.is_some()
&& right_ctx.section.is_none()
{
} else if navigation.right_symbol.is_some() && right_ctx.obj.is_some() {
// Clear selection if symbol goes missing
navigation.right_symbol = None;
}
@@ -225,12 +192,6 @@ pub fn diff_view_ui(
{
ret = Some(action);
}
} else if let Some((section, _, _)) = left_ctx.section {
ui.label(
RichText::new(section.name.clone())
.font(appearance.code_font.clone())
.color(appearance.highlight_color),
);
} else if right_ctx.has_symbol() {
ui.label(
RichText::new("Choose target symbol")
@@ -363,12 +324,6 @@ pub fn diff_view_ui(
{
ret = Some(action);
}
} else if let Some((section, _, _)) = right_ctx.section {
ui.label(
RichText::new(section.name.clone())
.font(appearance.code_font.clone())
.color(appearance.highlight_color),
);
} else if left_ctx.has_symbol() {
ui.label(
RichText::new("Choose base symbol")
@@ -509,29 +464,21 @@ pub fn diff_view_ui(
View::DataDiff,
Some((left_obj, _left_diff)),
Some((right_obj, _right_diff)),
Some((_left_section, left_section_diff, _left_symbol_idx)),
Some((_right_section, right_section_diff, _right_symbol_idx)),
Some((left_symbol, left_symbol_diff, _left_symbol_idx)),
Some((right_symbol, right_symbol_diff, _right_symbol_idx)),
) =
(state.current_view, left_ctx.obj, right_ctx.obj, left_ctx.section, right_ctx.section)
(state.current_view, left_ctx.obj, right_ctx.obj, left_ctx.symbol, right_ctx.symbol)
{
// Joint diff view
hotkeys::check_scroll_hotkeys(ui, true);
let left_total_bytes =
left_section_diff.data_diff.iter().fold(0usize, |accum, item| accum + item.len);
let right_total_bytes =
right_section_diff.data_diff.iter().fold(0usize, |accum, item| accum + item.len);
if left_total_bytes != right_total_bytes {
ui.label("Data size mismatch");
let total_rows = left_symbol_diff.data_rows.len();
if total_rows != right_symbol_diff.data_rows.len() {
ui.label("Row count mismatch");
return;
}
if left_total_bytes == 0 {
if total_rows == 0 {
return;
}
let total_rows = (left_total_bytes - 1) / BYTES_PER_ROW + 1;
let left_diffs =
split_diffs(&left_section_diff.data_diff, &left_section_diff.reloc_diff);
let right_diffs =
split_diffs(&right_section_diff.data_diff, &right_section_diff.reloc_diff);
render_table(
ui,
available_width,
@@ -540,14 +487,15 @@ pub fn diff_view_ui(
total_rows,
|row, column| {
let i = row.index();
let address = i * BYTES_PER_ROW;
let row_offset = i as u64 * BYTES_PER_ROW as u64;
row.col(|ui| {
if column == 0 {
data_row_ui(
ui,
Some(left_obj),
address,
&left_diffs[i],
left_symbol.address,
row_offset,
&left_symbol_diff.data_rows[i],
appearance,
column,
);
@@ -555,8 +503,9 @@ pub fn diff_view_ui(
data_row_ui(
ui,
Some(right_obj),
address,
&right_diffs[i],
right_symbol.address,
row_offset,
&right_symbol_diff.data_rows[i],
appearance,
column,
);
@@ -649,11 +598,39 @@ fn diff_col_ui(
if !ctx.status.success {
build_log_ui(ui, ctx.status, appearance);
} else if let Some((obj, diff)) = ctx.obj {
if let Some((_symbol, symbol_diff, symbol_idx)) = ctx.symbol {
if let Some((symbol, symbol_diff, symbol_idx)) = ctx.symbol {
hotkeys::check_scroll_hotkeys(ui, false);
let ctx = FunctionDiffContext { obj, diff, symbol_ref: Some(symbol_idx) };
if state.current_view == View::ExtabDiff {
extab_ui(ui, ctx, appearance, column);
} else if state.current_view == View::DataDiff {
hotkeys::check_scroll_hotkeys(ui, false);
let total_rows = symbol_diff.data_rows.len();
if total_rows == 0 {
return ret;
}
render_table(
ui,
available_width / 2.0,
1,
appearance.code_font.size,
total_rows,
|row, _column| {
let i = row.index();
let row_offset = i as u64 * BYTES_PER_ROW as u64;
row.col(|ui| {
data_row_ui(
ui,
Some(obj),
symbol.address,
row_offset,
&symbol_diff.data_rows[i],
appearance,
column,
);
});
},
);
} else {
render_table(
ui,
@@ -678,29 +655,6 @@ fn diff_col_ui(
},
);
}
} else if let Some((_section, section_diff, _section_idx)) = ctx.section {
hotkeys::check_scroll_hotkeys(ui, false);
let total_bytes =
section_diff.data_diff.iter().fold(0usize, |accum, item| accum + item.len);
if total_bytes == 0 {
return ret;
}
let total_rows = (total_bytes - 1) / BYTES_PER_ROW + 1;
let diffs = split_diffs(&section_diff.data_diff, &section_diff.reloc_diff);
render_table(
ui,
available_width / 2.0,
1,
appearance.code_font.size,
total_rows,
|row, _column| {
let i = row.index();
let address = i * BYTES_PER_ROW;
row.col(|ui| {
data_row_ui(ui, Some(obj), address, &diffs[i], appearance, column);
});
},
);
} else if let Some((_other_symbol, _other_symbol_diff, other_symbol_idx)) = other_ctx.symbol
{
if let Some(action) = symbol_list_ui(
@@ -796,10 +750,6 @@ fn missing_obj_ui(ui: &mut Ui, appearance: &Appearance) {
});
}
fn find_section(obj: &Object, section_name: &str) -> Option<usize> {
obj.sections.iter().position(|section| section.name == section_name)
}
pub fn hover_items_ui(ui: &mut Ui, items: Vec<HoverItem>, appearance: &Appearance) {
for item in items {
match item {

View File

@@ -233,7 +233,6 @@ impl DiffViewState {
let resolved_nav = resolve_navigation(nav.kind, resolved_left, resolved_right);
if (resolved_nav.left_symbol.is_some() && resolved_nav.right_symbol.is_some())
|| (resolved_nav.left_symbol.is_none() && resolved_nav.right_symbol.is_none())
|| resolved_nav.view != View::FunctionDiff
{
// Regular navigation
if state.is_selecting_symbol() {
@@ -416,14 +415,8 @@ fn resolve_navigation(
},
(SectionKind::Data, SectionKind::Data) => ResolvedNavigation {
view: View::DataDiff,
left_symbol: Some(SymbolRefByName {
symbol_name: "".to_string(),
section_name: Some(left.section.name.clone()),
}),
right_symbol: Some(SymbolRefByName {
symbol_name: "".to_string(),
section_name: Some(right.section.name.clone()),
}),
left_symbol: Some(left.symbol_ref),
right_symbol: Some(right.symbol_ref),
},
_ => ResolvedNavigation::default(),
},
@@ -438,14 +431,8 @@ fn resolve_navigation(
},
SectionKind::Data => ResolvedNavigation {
view: View::DataDiff,
left_symbol: Some(SymbolRefByName {
symbol_name: "".to_string(),
section_name: Some(left.section.name.clone()),
}),
right_symbol: Some(SymbolRefByName {
symbol_name: "".to_string(),
section_name: Some(left.section.name.clone()),
}),
left_symbol: Some(left.symbol_ref),
right_symbol: None,
},
_ => ResolvedNavigation::default(),
},
@@ -460,14 +447,8 @@ fn resolve_navigation(
},
SectionKind::Data => ResolvedNavigation {
view: View::DataDiff,
left_symbol: Some(SymbolRefByName {
symbol_name: "".to_string(),
section_name: Some(right.section.name.clone()),
}),
right_symbol: Some(SymbolRefByName {
symbol_name: "".to_string(),
section_name: Some(right.section.name.clone()),
}),
left_symbol: None,
right_symbol: Some(right.symbol_ref),
},
_ => ResolvedNavigation::default(),
},

View File

@@ -1,12 +1,12 @@
{
"name": "objdiff-wasm",
"version": "3.0.1",
"version": "3.2.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "objdiff-wasm",
"version": "3.0.1",
"version": "3.2.0",
"license": "MIT OR Apache-2.0",
"devDependencies": {
"@biomejs/biome": "^1.9.3",

View File

@@ -1,6 +1,6 @@
{
"name": "objdiff-wasm",
"version": "3.0.1",
"version": "3.2.0",
"description": "A local diffing tool for decompilation projects.",
"author": {
"name": "Luke Street",

View File

@@ -24,15 +24,16 @@ wit_bindgen::generate!({
use exports::objdiff::core::{
diff::{
DiffConfigBorrow, DiffResult, Guest as GuestDiff, GuestDiffConfig, GuestObject,
DiffConfigBorrow, DiffResult, DiffSide, Guest as GuestDiff, GuestDiffConfig, GuestObject,
GuestObjectDiff, MappingConfig, Object, ObjectBorrow, ObjectDiff, ObjectDiffBorrow,
SymbolFlags, SymbolInfo, SymbolKind, SymbolRef,
SectionKind, SymbolFlags, SymbolInfo, SymbolKind, SymbolRef,
},
display::{
ContextItem, ContextItemCopy, ContextItemNavigate, DiffText, DiffTextColor, DiffTextOpcode,
DiffTextSegment, DiffTextSymbol, DisplayConfig, Guest as GuestDisplay, HoverItem,
HoverItemColor, HoverItemText, InstructionDiffKind, InstructionDiffRow, SectionDisplay,
SymbolDisplay, SymbolFilter, SymbolNavigationKind,
ContextItem, ContextItemCopy, ContextItemNavigate, DataDiff, DataDiffKind, DataDiffRow,
DataRelocationDiff, DiffText, DiffTextColor, DiffTextOpcode, DiffTextSegment,
DiffTextSymbol, DisplayConfig, Guest as GuestDisplay, HoverItem, HoverItemColor,
HoverItemText, InstructionDiffKind, InstructionDiffRow, SectionDisplay, SymbolDisplay,
SymbolFilter, SymbolNavigationKind,
},
};
@@ -138,6 +139,7 @@ impl GuestDisplay for Component {
size: d.size,
match_percent: d.match_percent,
symbols: d.symbols.into_iter().map(to_symbol_ref).collect(),
kind: d.kind.into(),
})
.collect()
}
@@ -162,6 +164,7 @@ impl GuestDisplay for Component {
} else {
obj_diff.symbols.get(symbol_display.symbol)
};
let section = symbol.section.and_then(|s| obj.sections.get(s));
SymbolDisplay {
info: SymbolInfo {
id: to_symbol_ref(symbol_display),
@@ -171,9 +174,8 @@ impl GuestDisplay for Component {
size: symbol.size,
kind: SymbolKind::from(symbol.kind),
section: symbol.section.map(|s| s as u32),
section_name: symbol
.section
.and_then(|s| obj.sections.get(s).map(|sec| sec.name.clone())),
section_name: section.map(|sec| sec.name.clone()),
section_kind: section.map_or(SectionKind::Unknown, |sec| sec.kind.into()),
flags: SymbolFlags::from(symbol.flags),
align: symbol.align.map(|a| a.get()),
virtual_address: symbol.virtual_address,
@@ -181,7 +183,8 @@ impl GuestDisplay for Component {
target_symbol: symbol_diff.and_then(|sd| sd.target_symbol.map(|s| s as u32)),
match_percent: symbol_diff.and_then(|sd| sd.match_percent),
diff_score: symbol_diff.and_then(|sd| sd.diff_score),
row_count: symbol_diff.map_or(0, |sd| sd.instruction_rows.len() as u32),
row_count: symbol_diff
.map_or(0, |sd| sd.instruction_rows.len().max(sd.data_rows.len()) as u32),
}
}
@@ -335,6 +338,120 @@ impl GuestDisplay for Component {
.map(HoverItem::from)
.collect()
}
fn display_data_row(
diff: ObjectDiffBorrow,
symbol_ref: SymbolRef,
row_index: u32,
) -> DataDiffRow {
let obj_diff = diff.get::<ResourceObjectDiff>();
let obj_diff = &obj_diff.1;
let symbol_display = from_symbol_ref(symbol_ref);
let symbol_diff = if symbol_display.is_mapping_symbol {
obj_diff
.mapping_symbols
.iter()
.find(|s| s.symbol_index == symbol_display.symbol)
.map(|s| &s.symbol_diff)
} else {
obj_diff.symbols.get(symbol_display.symbol)
};
let Some(symbol_diff) = symbol_diff else {
return DataDiffRow::default();
};
symbol_diff.data_rows.get(row_index as usize).map(DataDiffRow::from).unwrap_or_default()
}
fn data_hover(diff: ObjectDiffBorrow, symbol_ref: SymbolRef, row_index: u32) -> Vec<HoverItem> {
let obj_diff = diff.get::<ResourceObjectDiff>();
let obj = &obj_diff.0;
let obj_diff = &obj_diff.1;
let symbol_display = from_symbol_ref(symbol_ref);
let symbol_diff = if symbol_display.is_mapping_symbol {
obj_diff
.mapping_symbols
.iter()
.find(|s| s.symbol_index == symbol_display.symbol)
.map(|s| &s.symbol_diff)
} else {
obj_diff.symbols.get(symbol_display.symbol)
};
let Some(symbol_diff) = symbol_diff else {
return vec![];
};
let Some(diff_row) = symbol_diff.data_rows.get(row_index as usize) else {
return vec![];
};
diff::display::data_row_hover(obj, diff_row).into_iter().map(HoverItem::from).collect()
}
fn data_context(
diff: ObjectDiffBorrow,
symbol_ref: SymbolRef,
row_index: u32,
) -> Vec<ContextItem> {
let obj_diff = diff.get::<ResourceObjectDiff>();
let obj = &obj_diff.0;
let obj_diff = &obj_diff.1;
let symbol_display = from_symbol_ref(symbol_ref);
let symbol_diff = if symbol_display.is_mapping_symbol {
obj_diff
.mapping_symbols
.iter()
.find(|s| s.symbol_index == symbol_display.symbol)
.map(|s| &s.symbol_diff)
} else {
obj_diff.symbols.get(symbol_display.symbol)
};
let Some(symbol_diff) = symbol_diff else {
return vec![];
};
let Some(diff_row) = symbol_diff.data_rows.get(row_index as usize) else {
return vec![];
};
diff::display::data_row_context(obj, diff_row).into_iter().map(ContextItem::from).collect()
}
}
impl From<diff::DataDiffKind> for DataDiffKind {
fn from(kind: diff::DataDiffKind) -> Self {
match kind {
diff::DataDiffKind::None => DataDiffKind::None,
diff::DataDiffKind::Replace => DataDiffKind::Replace,
diff::DataDiffKind::Delete => DataDiffKind::Delete,
diff::DataDiffKind::Insert => DataDiffKind::Insert,
}
}
}
impl Default for DataDiffRow {
fn default() -> Self { Self { address: 0, segments: Vec::new(), relocations: Vec::new() } }
}
impl From<&diff::DataDiffRow> for DataDiffRow {
fn from(row: &diff::DataDiffRow) -> Self {
Self {
address: row.address,
segments: row.segments.iter().map(DataDiff::from).collect(),
relocations: row.relocations.iter().map(DataRelocationDiff::from).collect(),
}
}
}
impl From<&diff::DataDiff> for DataDiff {
fn from(diff: &diff::DataDiff) -> Self {
Self { data: diff.data.clone(), size: diff.size as u32, kind: diff.kind.into() }
}
}
impl From<&diff::DataRelocationDiff> for DataRelocationDiff {
fn from(diff: &diff::DataRelocationDiff) -> Self {
Self {
address: diff.reloc.address,
size: (diff.range.end - diff.range.start) as u32,
kind: diff.kind.into(),
}
}
}
impl From<obj::SymbolKind> for SymbolKind {
@@ -470,8 +587,21 @@ unsafe impl Sync for ObjectCache {}
static OBJECT_CACHE: ObjectCache = ObjectCache::new();
impl From<DiffSide> for objdiff_core::diff::DiffSide {
fn from(value: DiffSide) -> Self {
match value {
DiffSide::Target => Self::Target,
DiffSide::Base => Self::Base,
}
}
}
impl GuestObject for ResourceObject {
fn parse(data: Vec<u8>, diff_config: DiffConfigBorrow) -> Result<Object, String> {
fn parse(
data: Vec<u8>,
diff_config: DiffConfigBorrow,
diff_side: DiffSide,
) -> Result<Object, String> {
let hash = xxh3_64(&data);
let mut cached = None;
OBJECT_CACHE.borrow_mut().retain(|c| {
@@ -487,7 +617,9 @@ impl GuestObject for ResourceObject {
return Ok(Object::new(ResourceObject(obj, hash)));
}
let diff_config = diff_config.get::<ResourceDiffConfig>().0.borrow();
let obj = Rc::new(obj::read::parse(&data, &diff_config).map_err(|e| e.to_string())?);
let obj = Rc::new(
obj::read::parse(&data, &diff_config, diff_side.into()).map_err(|e| e.to_string())?,
);
OBJECT_CACHE.borrow_mut().push(CachedObject(Rc::downgrade(&obj), hash));
Ok(Object::new(ResourceObject(obj, hash)))
}
@@ -508,6 +640,7 @@ impl GuestObjectDiff for ResourceObjectDiff {
}
})?;
let symbol = obj.symbols.get(symbol_idx)?;
let section = symbol.section.and_then(|s| obj.sections.get(s));
Some(SymbolInfo {
id: symbol_idx as SymbolRef,
name: symbol.name.clone(),
@@ -516,9 +649,8 @@ impl GuestObjectDiff for ResourceObjectDiff {
size: symbol.size,
kind: SymbolKind::from(symbol.kind),
section: symbol.section.map(|s| s as u32),
section_name: symbol
.section
.and_then(|s| obj.sections.get(s).map(|sec| sec.name.clone())),
section_name: section.map(|sec| sec.name.clone()),
section_kind: section.map_or(SectionKind::Unknown, |sec| sec.kind.into()),
flags: SymbolFlags::from(symbol.flags),
align: symbol.align.map(|a| a.get()),
virtual_address: symbol.virtual_address,
@@ -529,6 +661,7 @@ impl GuestObjectDiff for ResourceObjectDiff {
let obj = self.0.as_ref();
let symbol_display = from_symbol_ref(symbol_ref);
let symbol = obj.symbols.get(symbol_display.symbol)?;
let section = symbol.section.and_then(|s| obj.sections.get(s));
Some(SymbolInfo {
id: to_symbol_ref(symbol_display),
name: symbol.name.clone(),
@@ -537,9 +670,8 @@ impl GuestObjectDiff for ResourceObjectDiff {
size: symbol.size,
kind: SymbolKind::from(symbol.kind),
section: symbol.section.map(|s| s as u32),
section_name: symbol
.section
.and_then(|s| obj.sections.get(s).map(|sec| sec.name.clone())),
section_name: section.map(|sec| sec.name.clone()),
section_kind: section.map_or(SectionKind::Unknown, |sec| sec.kind.into()),
flags: SymbolFlags::from(symbol.flags),
align: symbol.align.map(|a| a.get()),
virtual_address: symbol.virtual_address,
@@ -624,6 +756,7 @@ impl Default for SymbolInfo {
kind: Default::default(),
section: Default::default(),
section_name: Default::default(),
section_kind: Default::default(),
flags: Default::default(),
align: Default::default(),
virtual_address: Default::default(),
@@ -669,4 +802,20 @@ fn to_symbol_ref(display_symbol: diff::display::SectionDisplaySymbol) -> SymbolR
}
}
impl Default for SectionKind {
fn default() -> Self { Self::Unknown }
}
impl From<obj::SectionKind> for SectionKind {
fn from(kind: obj::SectionKind) -> Self {
match kind {
obj::SectionKind::Unknown => SectionKind::Unknown,
obj::SectionKind::Code => SectionKind::Code,
obj::SectionKind::Data => SectionKind::Data,
obj::SectionKind::Bss => SectionKind::Bss,
obj::SectionKind::Common => SectionKind::Common,
}
}
}
export!(Component);

View File

@@ -19,6 +19,7 @@ interface diff {
parse: static func(
data: list<u8>,
config: borrow<diff-config>,
side: diff-side,
) -> result<object, string>;
hash: func() -> u64;
@@ -53,6 +54,7 @@ interface diff {
kind: symbol-kind,
section: option<u32>,
section-name: option<string>,
section-kind: section-kind,
%flags: symbol-flags,
align: option<u32>,
virtual-address: option<u64>,
@@ -80,6 +82,19 @@ interface diff {
config: borrow<diff-config>,
mapping: mapping-config,
) -> result<diff-result, string>;
enum diff-side {
target,
base,
}
enum section-kind {
unknown,
code,
data,
bss,
common,
}
}
interface display {
@@ -88,7 +103,8 @@ interface display {
object-diff,
diff-config,
symbol-info,
symbol-ref
symbol-ref,
section-kind
};
record display-config {
@@ -108,6 +124,7 @@ interface display {
size: u64,
match-percent: option<f32>,
symbols: list<symbol-ref>,
kind: section-kind,
}
record symbol-display {
@@ -232,6 +249,31 @@ interface display {
delete,
}
enum data-diff-kind {
none,
replace,
delete,
insert,
}
record data-diff {
data: list<u8>,
size: u32,
kind: data-diff-kind,
}
record data-relocation-diff {
address: u64,
size: u32,
kind: data-diff-kind,
}
record data-diff-row {
address: u64,
segments: list<data-diff>,
relocations: list<data-relocation-diff>,
}
display-sections: func(
diff: borrow<object-diff>,
filter: symbol-filter,
@@ -273,6 +315,24 @@ interface display {
row-index: u32,
config: borrow<diff-config>,
) -> list<hover-item>;
display-data-row: func(
diff: borrow<object-diff>,
symbol: symbol-ref,
row-index: u32,
) -> data-diff-row;
data-context: func(
diff: borrow<object-diff>,
symbol: symbol-ref,
row-index: u32,
) -> list<context-item>;
data-hover: func(
diff: borrow<object-diff>,
symbol: symbol-ref,
row-index: u32,
) -> list<hover-item>;
}
world api {