diff --git a/Cargo.lock b/Cargo.lock index b286d28..8979243 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2790,6 +2790,7 @@ dependencies = [ "mimalloc", "open", "postcard", + "quick-xml 0.40.1", "rand 0.10.1", "regex", "reqwest", @@ -5701,6 +5702,16 @@ dependencies = [ "serde", ] +[[package]] +name = "quick-xml" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2474bd2e5029e7ccb6abb2ba48cf2383a333851dedf495901544281590c7da7f" +dependencies = [ + "memchr", + "tokio", +] + [[package]] name = "quote" version = "1.0.46" @@ -8255,7 +8266,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.39.4", "quote", ] @@ -9435,7 +9446,7 @@ version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9" dependencies = [ - "quick-xml", + "quick-xml 0.39.4", "serde", "zbus_names", "zvariant", diff --git a/Cargo.toml b/Cargo.toml index d3a9882..b728c8e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.13", default-features = false, features = ["native-tls-vendored", "charset", "http2", "system-proxy", "json", "query"] } discord-rich-presence = "1.1" +quick-xml = { version = "0.40", features = ["async-tokio"] } [target.'cfg(not(target_os = "android"))'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } diff --git a/data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml b/data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml new file mode 100644 index 0000000..b76ec5d --- /dev/null +++ b/data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml @@ -0,0 +1,22233 @@ + +
+ 20260609-194259 + No-Intro + https://www.no-intro.org + Product names used in this file are registered trademarks of their respective owners, with which No-Intro is in no way associated or affiliated. These trademarks of other manufacturers are used solely to identify said products. + Piracy harms consumers as well as legitimate developers, publishers and retailers. No-Intro does not help or encourage users to download or otherwise obtain any of the listed dumps. No-Intro is not in the Console Scene and is not involved in any P2P sharing. +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + + \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index c2855c5..69fbee0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -334,8 +334,10 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { #[cfg(feature = "gui")] { let app = ui::gui::AppWindow::new().unwrap(); + let no_intro_map = + std::sync::Arc::new(tokio::sync::Mutex::new(rustc_hash::FxHashMap::default())); set_app_id(); - ui::gui::app_window(&app, false); + ui::gui::app_window(&app, false, no_intro_map); } } @@ -380,7 +382,9 @@ fn android_main(app: slint::android::AndroidApp) { std::fs::create_dir_all(dirs.data_dir.join("saves")).unwrap(); std::fs::create_dir_all(dirs.data_dir.join("states")).unwrap(); - ui::gui::app_window(&app_window, true); + let no_intro_map = + std::sync::Arc::new(tokio::sync::Mutex::new(rustc_hash::FxHashMap::default())); + ui::gui::app_window(&app_window, true, no_intro_map); close_tx.send(()).unwrap(); *android::WEAK_SLINT_WINDOW.lock().unwrap() = None; *android::ANDROID_APP.lock().unwrap() = None; diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index 7b84d26..dadc73a 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -3,17 +3,21 @@ use crate::ui::gui::AppWindow; use crate::{cheats, device}; use slint::ComponentHandle; -pub fn cheats_window(app: &AppWindow) { +pub fn cheats_window( + app: &AppWindow, + no_intro_map: std::sync::Arc>>, +) { let weak = app.as_weak(); app.on_cheats_select_rom_clicked(move |rom_dir| { let select_rom = ui::gui::select_rom(rom_dir); let weak = weak.clone(); + let no_intro_map = no_intro_map.clone(); tokio::spawn(async move { if let Some(file) = select_rom.await && let Some(rom_contents) = device::get_rom_contents(&file) { let game_crc = ui::storage::get_game_crc(&rom_contents); - let game_name = ui::storage::get_game_name(&rom_contents); + let game_name = ui::gui::get_nointro_name(&rom_contents, no_intro_map).await; weak.upgrade_in_event_loop(move |handle| { handle.set_cheat_game_name(game_name.into()); }) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 54fcc57..60d59f9 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,3 +1,4 @@ +use crate::device; use crate::retroachievements; use crate::ui; #[cfg(target_os = "android")] @@ -521,7 +522,16 @@ fn about_window(app: &AppWindow) { } } -pub fn app_window(app: &AppWindow, is_android: bool) { +pub fn app_window( + app: &AppWindow, + is_android: bool, + no_intro_map: std::sync::Arc>>, +) { + let no_intro_map_clone = no_intro_map.clone(); + tokio::spawn(async move { + load_no_intro(no_intro_map_clone).await; + }); + retroachievements::init_client(false, false, false); app.set_is_android(is_android); about_window(app); @@ -532,8 +542,8 @@ pub fn app_window(app: &AppWindow, is_android: bool) { controller_window(app, &config); local_game_window(app, &config); } - ui::netplay::netplay_window(app); - ui::cheats::cheats_window(app); + ui::netplay::netplay_window(app, no_intro_map.clone()); + ui::cheats::cheats_window(app, no_intro_map); #[cfg(not(target_os = "android"))] { @@ -657,6 +667,55 @@ pub fn update_recent_roms(app: &AppWindow, file_path: std::path::PathBuf) { app.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new(recent_roms))); } +pub async fn get_nointro_name( + rom: &[u8], + no_intro_map: std::sync::Arc>>, +) -> String { + let hash = device::cart::rom::calculate_hash(rom).to_lowercase(); + if let Some(name) = no_intro_map.lock().await.get(&hash) { + name.clone() + } else { + ui::storage::get_game_name(rom) + } +} + +async fn load_no_intro( + no_intro_map: std::sync::Arc>>, +) { + let mut reader = quick_xml::Reader::from_str(include_str!( + "../../data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml" + )); + let mut buf = Vec::new(); + let mut current_game = String::new(); + let mut map = no_intro_map.lock().await; + loop { + match reader.read_event_into_async(&mut buf).await { + Ok(quick_xml::events::Event::Start(e)) => { + if e.name().as_ref() == b"game" + && let Ok(Some(name_attribute)) = e.try_get_attribute("name") + && let Ok(name) = String::from_utf8(name_attribute.value.into_owned()) + { + current_game = name; + } + } + Ok(quick_xml::events::Event::Empty(e)) => { + if e.name().as_ref() == b"file" + && let Ok(Some(format_attribute)) = e.try_get_attribute("format") + && format_attribute.value.as_ref() == b"BigEndian" + && let Ok(Some(sha256_attribute)) = e.try_get_attribute("sha256") + && let Ok(sha256) = String::from_utf8(sha256_attribute.value.into_owned()) + { + map.insert(sha256.to_lowercase(), current_game.clone()); + } + } + Err(e) => panic!("Error at position {}: {:?}", reader.error_position(), e), + Ok(quick_xml::events::Event::Eof) => break, + _ => (), + } + buf.clear(); + } +} + pub async fn select_rom(rom_dir: slint::SharedString) -> Option { #[cfg(target_os = "android")] return ui::android::select_rom(rom_dir).await; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 9aab429..3e14dda 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -65,13 +65,17 @@ struct NetplayPingMessage { num_of_peers: usize, } -fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { +fn select_rom( + weak: slint::Weak, + rom_dir: slint::SharedString, + no_intro_map: std::sync::Arc>>, +) { let select_rom = ui::gui::select_rom(rom_dir); tokio::spawn(async move { if let Some(file) = select_rom.await { if let Some(rom_contents) = device::get_rom_contents(&file) { let hash = device::cart::rom::calculate_hash(&rom_contents); - let mut game_name = ui::storage::get_game_name(&rom_contents); + let mut game_name = ui::gui::get_nointro_name(&rom_contents, no_intro_map).await; let pal = device::cart::rom::is_system_pal(&rom_contents); let game_crc = ui::storage::get_game_crc(&rom_contents); let cheats = ui::config::Cheats::new(); @@ -108,6 +112,7 @@ fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { }); } +#[allow(clippy::too_many_arguments)] fn setup_callbacks( app: &AppWindow, netplay_write_sender: &tokio::sync::broadcast::Sender>, @@ -116,6 +121,7 @@ fn setup_callbacks( netplay_write_receiver: &tokio::sync::broadcast::Receiver>, close_ping_tx: &tokio::sync::broadcast::Sender<()>, close_ping_rx: &tokio::sync::broadcast::Receiver<()>, + no_intro_map: std::sync::Arc>>, ) { let weak = app.as_weak(); let netplay_write_sender_create_session = netplay_write_sender.clone(); @@ -238,7 +244,7 @@ fn setup_callbacks( let weak_app = app.as_weak(); app.on_netplay_select_rom(move |rom_dir| { - select_rom(weak_app.clone(), rom_dir); + select_rom(weak_app.clone(), rom_dir, no_intro_map.clone()); }); let weak_app = app.as_weak(); @@ -992,7 +998,10 @@ fn setup_join_window( app.invoke_netplay_refresh_sessions(); } -pub fn netplay_window(app: &AppWindow) { +pub fn netplay_window( + app: &AppWindow, + no_intro_map: std::sync::Arc>>, +) { let (netplay_read_sender, netplay_read_receiver): ( tokio::sync::broadcast::Sender>, tokio::sync::broadcast::Receiver>, @@ -1016,5 +1025,6 @@ pub fn netplay_window(app: &AppWindow) { &netplay_write_receiver, &close_ping_tx, &close_ping_rx, + no_intro_map, ); }