Builds a very basic WA, but it fails to import currently.
This commit is contained in:
parent
24837c68c1
commit
5fa0116111
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,4 @@
|
||||
/target
|
||||
result*
|
||||
|
||||
.direnv/
|
||||
|
||||
8
.markdownlint.yaml
Normal file
8
.markdownlint.yaml
Normal file
@ -0,0 +1,8 @@
|
||||
# Indentation
|
||||
MD007:
|
||||
indent: 2
|
||||
# Maximum multiple consecutive blank lines
|
||||
MD012:
|
||||
maximum: 2
|
||||
# Disable the line-length warnings.
|
||||
MD013: false
|
||||
78
Cargo.lock
generated
78
Cargo.lock
generated
@ -39,6 +39,12 @@ version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.8.9"
|
||||
@ -48,11 +54,31 @@ dependencies = [
|
||||
"adler2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.95"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quick-start"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"serde_json",
|
||||
"weakauras-codec",
|
||||
"weakauras-codec-lua-value",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.40"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -61,6 +87,55 @@ version = "1.0.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.219"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.219"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.141"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.104"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
||||
|
||||
[[package]]
|
||||
name = "weakauras-codec"
|
||||
version = "0.1.0"
|
||||
@ -105,3 +180,6 @@ name = "weakauras-codec-lua-value"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ff4de98489c6a5c9be2710562d464b76ef21e3b2ac0e5ddae7ff639075293958"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
@ -7,4 +7,6 @@ license = "MIT"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
weakauras-codec = "0.1.0"
|
||||
serde_json = "1.0.141"
|
||||
weakauras-codec = { version = "0.1.0", features = ["serde"] }
|
||||
weakauras-codec-lua-value = "0.1.0"
|
||||
|
||||
1772
example-wa.json
Normal file
1772
example-wa.json
Normal file
File diff suppressed because it is too large
Load Diff
127
src/builder.rs
Normal file
127
src/builder.rs
Normal file
@ -0,0 +1,127 @@
|
||||
use std::collections::BTreeMap;
|
||||
use weakauras_codec_lua_value::{LuaMapKey, LuaValue};
|
||||
|
||||
pub struct Group {
|
||||
pub name: String,
|
||||
pub icon: i32,
|
||||
pub contents: Vec<Aura>,
|
||||
}
|
||||
|
||||
pub struct Icon {
|
||||
pub name: String,
|
||||
pub icon: i32,
|
||||
}
|
||||
|
||||
pub enum Aura {
|
||||
Group(Group),
|
||||
Icon(Icon),
|
||||
}
|
||||
|
||||
pub trait Builder {
|
||||
fn build(&self) -> LuaValue;
|
||||
|
||||
fn build_root(&self) -> LuaValue {
|
||||
let mut map: BTreeMap<LuaMapKey, LuaValue> = BTreeMap::new();
|
||||
map.insert(str_to_key("d"), LuaValue::Array(vec![self.build()]));
|
||||
map.insert(str_to_key("m"), LuaValue::from("d"));
|
||||
map.insert(str_to_key("s"), LuaValue::from("5.20.0"));
|
||||
map.insert(str_to_key("v"), LuaValue::from(2000.0));
|
||||
LuaValue::Map(map)
|
||||
}
|
||||
}
|
||||
|
||||
fn str_to_key(str: &str) -> LuaMapKey {
|
||||
LuaMapKey::try_from(LuaValue::from(str.to_string()))
|
||||
.expect("Somehow could not convert string into LuaMapKey")
|
||||
}
|
||||
|
||||
impl Builder for Group {
|
||||
fn build(&self) -> LuaValue {
|
||||
let mut map: BTreeMap<LuaMapKey, LuaValue> = BTreeMap::new();
|
||||
map.insert(str_to_key("actions"), LuaValue::Array(Vec::new()));
|
||||
map.insert(str_to_key("alpha"), LuaValue::from(1.0));
|
||||
map.insert(str_to_key("anchorFrameType"), LuaValue::from("SCREEN"));
|
||||
map.insert(str_to_key("anchorPoint"), LuaValue::from("CENTER"));
|
||||
map.insert(str_to_key("animation"), LuaValue::Map(BTreeMap::new()));
|
||||
map.insert(str_to_key("authorOptions"), LuaValue::Array(Vec::new()));
|
||||
map.insert(
|
||||
str_to_key("backdropColor"),
|
||||
LuaValue::Array(vec![
|
||||
LuaValue::from(0.0),
|
||||
LuaValue::from(0.0),
|
||||
LuaValue::from(0.0),
|
||||
LuaValue::from(1.0),
|
||||
]),
|
||||
);
|
||||
map.insert(str_to_key("border"), LuaValue::from(false));
|
||||
map.insert(
|
||||
str_to_key("borderBackdrop"),
|
||||
LuaValue::from("Blizzard Tooltip"),
|
||||
);
|
||||
map.insert(
|
||||
str_to_key("borderColor"),
|
||||
LuaValue::Array(vec![
|
||||
LuaValue::from(0.0),
|
||||
LuaValue::from(0.0),
|
||||
LuaValue::from(0.0),
|
||||
LuaValue::from(1.0),
|
||||
]),
|
||||
);
|
||||
map.insert(
|
||||
str_to_key("borderEdge"),
|
||||
LuaValue::from("Square Full White"),
|
||||
);
|
||||
map.insert(str_to_key("borderInset"), LuaValue::from(1.0));
|
||||
map.insert(str_to_key("borderOffset"), LuaValue::from(4.0));
|
||||
map.insert(str_to_key("borderSize"), LuaValue::from(2.0));
|
||||
map.insert(str_to_key("conditions"), LuaValue::Array(vec![]));
|
||||
map.insert(str_to_key("config"), LuaValue::Array(vec![]));
|
||||
map.insert(str_to_key("controlledChildren"), LuaValue::Array(vec![]));
|
||||
map.insert(str_to_key("frameStrata"), LuaValue::from(1.0));
|
||||
map.insert(str_to_key("id"), LuaValue::from(self.name.clone()));
|
||||
map.insert(str_to_key("information"), LuaValue::Array(vec![]));
|
||||
map.insert(str_to_key("internalVersion"), LuaValue::from(85.0));
|
||||
|
||||
map.insert(str_to_key("load"), LuaValue::Map(BTreeMap::new()));
|
||||
// Testing the load above with an empty map because this list looks pretty arbitrary
|
||||
// "load": {
|
||||
// "class": {
|
||||
// "multi": []
|
||||
// },
|
||||
// "size": {
|
||||
// "multi": []
|
||||
// },
|
||||
// "spec": {
|
||||
// "multi": []
|
||||
// },
|
||||
// "talent": {
|
||||
// "multi": []
|
||||
// }
|
||||
// },
|
||||
map.insert(str_to_key("regionType"), LuaValue::from("group"));
|
||||
map.insert(str_to_key("scale"), LuaValue::from(1.0));
|
||||
map.insert(str_to_key("selfPoint"), LuaValue::from("CENTER"));
|
||||
map.insert(str_to_key("subRegions"), LuaValue::Array(vec![]));
|
||||
map.insert(str_to_key("tocversion"), LuaValue::from(110107.0));
|
||||
map.insert(str_to_key("triggers"), LuaValue::Array(vec![]));
|
||||
map.insert(str_to_key("uid"), LuaValue::from("Ia6kyAYs1zP"));
|
||||
map.insert(str_to_key("xOffset"), LuaValue::from(0.0));
|
||||
map.insert(str_to_key("yOffset"), LuaValue::from(0.0));
|
||||
LuaValue::Map(map)
|
||||
}
|
||||
}
|
||||
|
||||
impl Builder for Icon {
|
||||
fn build(&self) -> LuaValue {
|
||||
LuaValue::Null
|
||||
}
|
||||
}
|
||||
|
||||
impl Builder for Aura {
|
||||
fn build(&self) -> LuaValue {
|
||||
match self {
|
||||
Aura::Group(group) => group.build(),
|
||||
Aura::Icon(icon) => icon.build(),
|
||||
}
|
||||
}
|
||||
}
|
||||
40
src/main.rs
40
src/main.rs
@ -1,16 +1,42 @@
|
||||
use weakauras_codec::decode;
|
||||
use serde_json as serde;
|
||||
use weakauras_codec::{encode, OutputStringVersion};
|
||||
|
||||
use crate::builder::{Aura, Builder, Group, Icon};
|
||||
|
||||
mod builder;
|
||||
|
||||
fn main() {
|
||||
let result = decode(TEST_WA, None);
|
||||
let test_aura = Group {
|
||||
name: "Test Group".to_string(),
|
||||
icon: 12345,
|
||||
contents: vec![
|
||||
Aura::Icon(Icon {
|
||||
name: "Test Icon".to_string(),
|
||||
icon: 67890,
|
||||
}),
|
||||
Aura::Group(Group {
|
||||
name: "Nested Group".to_string(),
|
||||
icon: 54321,
|
||||
contents: Vec::new(),
|
||||
}),
|
||||
],
|
||||
};
|
||||
|
||||
match result {
|
||||
Ok(output) => {
|
||||
println!("Result: {output:#?}");
|
||||
let aura_lua = test_aura.build_root();
|
||||
|
||||
let output_str = serde::to_string_pretty(&aura_lua).unwrap();
|
||||
println!("{output_str}");
|
||||
|
||||
let output_compressed = encode(&aura_lua, OutputStringVersion::BinarySerialization);
|
||||
|
||||
match output_compressed {
|
||||
Ok(encoded) => {
|
||||
println!("Encoded Aura: {encoded}");
|
||||
}
|
||||
Err(e) => {
|
||||
println!("Error: {e:?}");
|
||||
eprintln!("Error encoding aura: {e}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const TEST_WA: &[u8] = b"!TN1wVjUru4)liTQKQwIVGb8kTvkKMSB2MqIwtAvFXXdMXGBmEqJhtcV4F79CgBW3WK7DB3UWd2mEMZLVZ58nNXyRAp22AHT1uBRiBlTo96OyBDhzg7SF12I)z9po8pjl6JphMh9(LKWP0P2dTTwr5r(Sq7rQ2w(WQTeKzZO8eNHeUT19x65frf2J(zLokkkDhmqBGQMHTLG7JtdLw0C2DxgU56rUc)vuBbOk)O)kom9NwKGaq(HckpKe87B0PoSk6cWeSTu7OGMmro)XPs)c2ukOAvfCAbExXabyBn8YXJV8IZp5uq3bmI0JM67557ghiwlXb4gF4gbAgEOibLvDC3asuK0(9dNfaM4fxo63Wha)KZIxwBbCIlT2GXr0BsLeajXGu4SG6ZA5QLcsafS(QpzVdRvDCuHCaiNlelJE)HhIb4o(Sd3gGpeIIC6mWFhVEjynPEI16THrnfToMMM91m07QoW2kmErgyhHPaGcwbx7QbYHivQLlCzKm96o)PI52J0Wh2qAdSQPt9r8MeCJyJG3iG4W80grPCOP0jXEEP28No6lxC61NNITHKfumnfVMjiRZ9NnxK4SrLzrHOL0GGZK50S7cVmmynEBCOpI)bK1OXTZuvRO4jUmW2W5V5(JLdGjOcPrrI5e4PP6ik1(rB6g2skNiyGW)Wh2obiDwRRwFOoHUcdVwFIscaSZYloiiYLeMPk5tTap3)EBRBo(iRX3yn(OVmov2180Tl5kovUeRRo58ZL5fJ0EgaCrqfR1ahHwgxlHEnJYLD7UpdGwRC4(Hb6DIeVq4Uogum6lHz9ximdw2Q1plmUuE4Bo8wkGQ)sb2kE9(YJ7UFaUcAfMzxKybRXKc0ZjtIy8jYnugU1BoMfMswfTbEJeerC0d4tO8K2XWmzhChzDKK(F4gA6YB(fUE3B(nH4Elsrho9ywaJNMJmsPJQA)ED7RyaB3QBOJHVDmO(UgSBglEbiBj7okx6EJmn3dACfoVQabo7CbmSIZxc(X9AzHItdiZGfE51Jp)SrN8y2WsqVxCkdLZj3VKtJIa4SYotgsefd7JHj)fKw02kXbqvxakNuRnc38i7MnFCNtDVfVzd0GLJRiCFYeC3FSuc)DaeftHq35KWz0CbSKJ1iqhgqyJNgVYM)MWMcW9zOyoqr3ut1OVmUPMfO0YFqVb92gOYyUffiXRBOAVUgQAwcL5GU6Q6qRaDnv0snZc2voDxDds)TXGQHF7WKqXhhjylWebKiku2Ex7ds(CIt6xFVeNqgSV5qo9UfKiOUBmJfeL4iMtdtC4urmhU2U176O616G37X4liI2xdP1zuu)qkdZpCiowkP3fK73mAIZpM4OQOCqIdnCAUIZVRjvalsU4kwwNpsfJa)zSV7TTpy3kfCWuLj)wQE4CQxw5au26EBewqi8xq51RQ20WSC3akwYmP5wKZ2mYfR1FDAxwkTCHKMUK3d9Wg6FUH2HBQ759CAGg7ex6j(IBaeKlGJgHSdnDyKIDyJBipbpQeYIfZHrojy11NL4mcI4aXhvYvns1ap)KsxJ(97P3RFXtwPUTYpVnDdSjDZEMDha7)QAUT3Bvv5dmGsKb66750ByMeMq4vldOOXlK1qn5MpmZDLtpumN026DU7UufQkoOyTsaZLeK4ijesC(qItH6W2TsZ(BvAf5tnXbQQM3XlGX4TLdFOMYbLQdLZRvRQvO(ETZeZVK4yk)0X8GmkI8k6kYb2LhYC7KvnNwC)tzg0HQkYpDqEHoDaLErRCjrdIOv15JqH1Cp1sA42wf9PA6qvoZ9RH0zNlJIeAP0yTHlvzFQSF7l4C4pksgCsz1Tt(ArTahlgKcujN1LxJmFpjoM6VLKcTUv8iw7SL)6TNvUJ4k9(vUtVh(m1L7tSyRFL6suuGNRcb1o66DtBfV6SDdz)XUi82vJ3FJr5177uEFlt5n8FAkVTcuVYuEouEfp9EnoL3aATI0ufiq3pBxv(S6DjvNOUzoVYC8BERg5eE9KndQRyO23O)a1NoH3rlKVxNV(SD5TXA2v(ILnmgyyQJV6Z3gIWNe92Rc52JLA75rS9yP1(2GuB)um4pg(6F6XM)3xAIoR5)(L)t2CwDQR60BpbYmJhhzMUXEiWUIYDP)lGb7DfOWmn((7w67mdf(FDzlMqKfuViEI)V20d(1(V)";
|
||||
const TEST_WA: &[u8] = b"!WA:2!9MvEWTX15DUALJIHCtjHeLfLvcPzIvSuJuPOKihzhfzasqrkrcsTaKusXJbwS7dyxrWDxT7cELM2ywBxMKEj2ihh70KAMZw76uJ2ANQC4m0nJBUM5RmtCCUtysCtVYHY4oD8F02VV3BbWYdj3HES)hWDFyFV99(E)UEGsJe1l3roq7TDG2IoEu9O6Z18s5u1gt312Pl7I2UNuwwEi52oWrCIQzB57AxSitVldZI6UmRZ5S90SXDkQ6ZAz)TelNzrtFtMNt9HADi7jzUR456Y2UOU9KwEongQ1Uz5zwEMtGDFBHAEaB(Oo9Y5SD1zUXdMBo1hVO5mZO6Q3sAC48nDwsTKVHT7Go(M2wErwW3wBcMRhEZoLESBkNO7gli(Bc9cmNgsDHsQUSw6PuXITmQHPpBbxwbSdPN2HPuW1UKtWJNYCg21TO46bZN3J5F9Lf3jQrsssYUtj(gj3PRCHQgFU0HINVQRFKC5nTm9mIeh)JFKz9DnluaNH7ApUbxEFlOZYvkFE6972BI(hQNH7pUpnzul5Q2(SEoSIf7t3lYYELYXMGz5NcFAZPkNPRyPsNjv6ykPJxch8Cy1BAMRIL64mVik8hnxVm1I(gv76qUmSRkPgkr)9pFjRGPqKYQwAyzCiBtSlDLiz6ekxbVK5APwCer98ru80ulYKN3Jvmp)bH93QPUt0zM5aT0vrvpVwQSbMdXm5nlerrTOJHQ8vedEpU48IwK5s1LsIejlBAL32DCvQAfP9sM6L7tTJXMU0z9o4mdnVQLP4R6a2zplYu9yP8rSxbFJTanh3Y2ITKowEONidvSC9y4Bv3Bw6rP3cC7Xhx10Qh42Woa3o8wHJbVn8VnT6wwaRnkCeGxKY5Pjj(Mu9vLxGgqtbWkErBv9EY5Jval)DOmEje8fjoU1OTdirefnA9txf3dbn0fbiL(SqmHCuTlp3rIJyRjxO3bv67CdMmDS(b5D5uVG9mD1shC9qeOrP554W(WjWo30M)vZwW1uNwtTQ09c5rCBxMUAfzzv8Cu1ysWnI1OiWUIanfbUPDThy33h86H3aUgBbU5iqRWBeEtWTa7f2h8MHBf2te43kszn7ILg3kfnaYWbEKzl5X63CCtFdCtZSGLIsFNO30ZIZyXJGx5Zl2sWDebElW(HJsBm86iwoRuCp(AAPP10sx9a9sviOh(NNG)z30N5Cv1nl5Dp3aSPQcqW2f8mbEGz4ISkcYkb)24geJWO8kt)kWVHb86GFtO(f1NgPaMA8Aie96ukslSTcDwwzKKjoYK2ETpLIt9HqL8pC21Om1XIHGkVBlg)7QPTf3Z21hU95PnIrn19n26Y4EdovS87b572U5uI1DFdNAEvxT(5O07zhW2UEiMmCdKqesuGndThboKmC4YPs0FIUs3JsSbsmVNpZjMvHISMH(KZ5GktiX6GWoKGTgbIhb6ic0wU4dMo9Gdm3(wWeFRPSl5QX2DDimPSQ(5lHJG(aQt1A7Tv7wtRnrdbUpTKwGUBQjnDyzxSYTKwOXkroVoe58SqZkCbhc240aIkYuGzXCn1szyp5GwzH3SttvKYBzix7cUmK5FRPO(SxogdHElr9JpmjXcBwefU0kgLf8W)eR4KQt7XHM7jY8upqAN2yzNVAhLqGQtdKE6eS0cLQbS1zpADiGDzNG3TOCSVDx3MG2G9JAPEQ(KWaU6UJZTdO5Lq6n5TrObl98b8YmepDllfCJTq6oqRpJwv59a)Nmty6zMdzCv6ndREiuR55PbN30CB3jQpBk)mEgQyT5mbUbonXBK)HqTlJxWfiCQ6316TG2NH6EndMLfTwrZT90doKZ24THoF2KePghqgpgE7veVhZPycu6DVKaKF2GzZI8VNWiM5NglwCsnln2y8KdMmb0SlUEONzb(dQvjkG88blalFNTnu6wsPA51ssvxuEOL4iwyfl9kVSL4TnjwDg1v1z2rdUqmhQuqxumbZ4WnuU3LQ(EiZ39gm9pZkgr6B5ELdoC6(7lzI5Uj4Djb3nQSmBR3Id87ZlBW9agW9b)bWC3TZBAnBboz8nhNLPiRGQ20zYx0221aEpOO27f(dH3TKZEVA9iqzjJVbc9mWvEJO62FKZnF1EEhxMMj5Ekd)X8cj8Na)PRdM4qvXeWfLCEdxTHtCNemp8NbVVSWdaFG1zSCcUqH6IoCjSqC)3m8(LCA5QnSJBRNHymzF(Lku0EYECzxOeZsB6H2CBhO9Jiqf0xSi9r3bUUYZt3LINjyb6sHUxJLPRRGb4pt1eLYZs3YZzneIrlgNU1G)otByQnMfsN3cV)v2XxeLforLHWGpA9BIpwd83yCr6UCgmZcgO3zx3pxgXct64MvyPuMAycgo6frbbUJJt9uB6UQfSTq5CtRcglqTOzpEov)S8Ha9aNa1TeEt9wTxXc0x5cUzvMK4ySv)nMwgq9XjLAucF2k6TzlRB6rb0QyQFLXyOYpLGWxHkOgBCh12JeFgB7XLC2EL3grP720tfPy6zRzb1p6)4efNUvuWr5ufAJhomCeYSQZYtnzNkhUNd6D6HWIJfLLgRBfGnRutmaIFB7rrZGPnwhWULNDcvxt6f50OPLhLmvZe9WuyECHzpLjulwIj7QzOAvGH5EHN5Ks9E8hD37(oQRU6qmbkKJKz)PHNEpW)ypWUFl11QTt03g8fBpwYUZXFpE7dBxg(I0G4Idc(aTESJbpt02eTVmBkhtbSmncOf9)zANIp8prVWSWxcMch9o4pDzUbZW8Qd8msHEeYT9YzN7WWjJ39GJMeK3Nt98tYunFwlhAnTCyEMTcctBkz0GzHH2qHYGttrXqBS7fsHJZWYWi84wIiqxJGtBCOtOGwJI5UoJbMQatwbNliq1D5SJ1KkIV(H6H3oMTcYIdcMuPZYN(SkSbsRDOutDuqXGY6Kd0a1TsXG0X0qvbHxhb0OCqadYtPEG7CRqsmAlp9MiYZzLMRZfW0TUJX9XAemX8ofWUE(nbJvnAd)buQem1PHvCpLuiESHtpiCzdr2M)FSbmXJwhpJviRpAhzsE8InArUmFE1RPUoZsjzIrsOmBo1GZqk37X)fp1t9drMqVhFHOrBHOeWuglY7Iqe8Sig4Kyqgy6G0mO4ntKMzUMG3L8QS92FGTh8GHT0iBk4HMoKle8bLHlIv1pm8xuXp5djbpq8K4rRGlTyFjtMqjJ4OGc)d4HZobmJm8oKG3zw43H)(co3ygm2QA74Ic(DPurWVh84nZnRl5Ye5ZAV)udaDncuoqxoa92tnb2L5l5445R0PTU2J1D3WtA4STc0HcqbLbDPp5BTWPMVsbSDC9ijFLAb8QMCsaQdZcrK9)akn7shRg7F4A8zKqa788DEptDgKwa(Q5CrcKb7JCZMJ5gS8u6Qit1cH0IHlTOvNBTp6Kj5XJoDNDPIXTSkex19ohUV9x7U9NIdx5DZOg94Fg(8se94tV5Meelv2fSoAYH9hOTtblASmZI0TorqvXOSD46sLtma7FUoHVHG2Gl7WSg4zLGVj8CxBwbYgisbroeSc4BTUKHvD26J)sFABA19DjdGN8gVroANG7W3lmgh((HW1e8meOgrYva1i(La1iWmeO(HZYb1bSbcx)aWpGa2i8(sWpKqYil4bnMGGXeqTkug(rWYC4lcXF8MHFm8tU24v4NcppcqPAnvY)xxnMRjoS7fm4yo4Fd(3LW9Yrl4hpXuwNyGJQc)hqAAdM2N)5hd(fWVK21)vWvGFDaAa(2W3HqelrcMKb9)PyDIsRlAWvd)Ve74)moja(xGtn3rGtIdR8UCAO6H0wXpTa(chyNYF4LfcUHDQeZ3RUt1kHebovU4Xr6prpPHuX5)He6fEwOQfc8qlRUxJLLO8fyQfYacDnoJXghyfY1I)Zai8NqVfSEDxRZH7R(dsY9WWAp5xHEUR6y7VgYHcTXcSR6S8j02RL2mtE0CwM1C9FXaMhAIo3(40oSsF(wpuBHiEfZcJBSYQDWrUblEz2gpDn4qvAQ(Fb6CZGl4v1NYplusQcH8LptCQGtidtNVcBiGkGKcotylZT9qNTYRMjZ9Uo8rImgIjEXQht5s4JF)7LiQ4bww1P1e0BJ1XZcP3VFHTfYPdnU)58ZirdviBRGjwWzDEOgX51Zdlu58lWhbEmd4JjdF8gHpHe8jfd2Fj8xbp6wGhXa(RLGpQm8PAa(BmGh)04XiQr7)Bdo0a83zaprw4VFfNjaEsrWzod)Yiy41qqG47Av5yHVm8vccWcF1vhDf(AbPvB9GTfojkjR85mq42ytn5qTDUX6Ud3eWtLLKpRcn)VjulIv)0Ng(czdKfqs3LZcF2DUPB4NbFMSWtZxRCzHxKKfIw9hCFD0f20MFbHUqa3CJNILYs22SO4a)NretZ(IeZ6SCLbCgIm9RrywuvkKQaIZpZlJZgTISS30AebQ9)FGi3c9Iol7NVJE1ZDWtFKrNIloqAjOeajqOV2FyVTu5h2dviibbuVGZ4thkq7isbYcfWhFD1fWDTRQCaY6xx1aARy9Ld2avQWYbKwWmBzvYbVdPxrKdqI(v)hVj8iIIdpe)3BHMeRvr4djf43)bO3cjSu9N(aLqwPCas3xp5aulaveq5auU4Luoa1cEI1ihGuXa1aIa)z4mrKvfMg95PSMev(Zfk13)dHO(cc5KdrNdFg9sdF2bIDyRXBJO1i)8Pdo8DG8Y1q7OdIKvJZ3qL)BARlL)RV(u(nsCGnSt0k0huOmv)VxROdJUY)dbyGduHG4BRkcGGrteyKssC47YPP1OauP4ujbqm51CI1xlUFmI2Hoy(os3w3wjRKgqeTaLZqEmQzji6OaqvM(R9vPeaeulm7fzUOF(kjViJ(vC27QmZdnCefDDDZXj0f5HZRqDxpZ8h04vFZ8a2wi)CoHJZ1eSUqeUxohgQZYPN48NAVNpFVNxxLKfounRLNtIlkiS4r(AvlEu64ZY5UOcZLZgDIn)o))(d";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user