Device db fuzy search!
Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com>
@@ -50,6 +50,9 @@ pub struct LogicField {
|
||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||
pub struct Slot {
|
||||
pub typ: SlotType,
|
||||
// FIXME: this actualy needs to be an "Occupant" field
|
||||
// where the Occupant is an items with a
|
||||
// quantity, PrefabName/Hash, fields, etc
|
||||
pub fields: HashMap<grammar::SlotLogicType, LogicField>,
|
||||
}
|
||||
|
||||
@@ -266,38 +269,102 @@ impl Device {
|
||||
slots: Vec::new(),
|
||||
reagents: HashMap::new(),
|
||||
ic: None,
|
||||
connections: vec![Connection::default()],
|
||||
connections: vec![Connection::CableNetwork(None)],
|
||||
};
|
||||
device.connections[0] = Connection::CableNetwork(None);
|
||||
device.fields.insert(
|
||||
LogicType::ReferenceId,
|
||||
LogicField {
|
||||
field_type: FieldType::Read,
|
||||
value: id as f64,
|
||||
},
|
||||
);
|
||||
device
|
||||
}
|
||||
|
||||
pub fn with_ic(id: u16, ic: u16) -> Self {
|
||||
let mut device = Device::new(id);
|
||||
device.ic = Some(ic);
|
||||
device.fields.insert(
|
||||
LogicType::Setting,
|
||||
LogicField {
|
||||
field_type: FieldType::ReadWrite,
|
||||
value: 0.0,
|
||||
},
|
||||
);
|
||||
device.connections = vec![Connection::CableNetwork(None), Connection::Other];
|
||||
device.prefab_name = Some("StructureCircuitHousing".to_owned());
|
||||
device.fields.insert(
|
||||
LogicType::Error,
|
||||
LogicField {
|
||||
field_type: FieldType::ReadWrite,
|
||||
value: 0.0,
|
||||
},
|
||||
);
|
||||
device.prefab_hash = Some(-128473777);
|
||||
device.fields.insert(
|
||||
LogicType::PrefabHash,
|
||||
LogicField {
|
||||
field_type: FieldType::Read,
|
||||
value: -128473777.0,
|
||||
},
|
||||
);
|
||||
device.fields.extend(vec![
|
||||
(
|
||||
LogicType::Power,
|
||||
LogicField {
|
||||
field_type: FieldType::Read,
|
||||
value: 1.0,
|
||||
},
|
||||
),
|
||||
(
|
||||
LogicType::Error,
|
||||
LogicField {
|
||||
field_type: FieldType::ReadWrite,
|
||||
value: 0.0,
|
||||
},
|
||||
),
|
||||
(
|
||||
LogicType::Setting,
|
||||
LogicField {
|
||||
field_type: FieldType::ReadWrite,
|
||||
value: 0.0,
|
||||
},
|
||||
),
|
||||
(
|
||||
LogicType::On,
|
||||
LogicField {
|
||||
field_type: FieldType::ReadWrite,
|
||||
value: 0.0,
|
||||
},
|
||||
),
|
||||
(
|
||||
LogicType::RequiredPower,
|
||||
LogicField {
|
||||
field_type: FieldType::Read,
|
||||
value: 0.0,
|
||||
},
|
||||
),
|
||||
(
|
||||
LogicType::PrefabHash,
|
||||
LogicField {
|
||||
field_type: FieldType::Read,
|
||||
value: -128473777.0,
|
||||
},
|
||||
),
|
||||
(
|
||||
LogicType::LineNumber,
|
||||
LogicField {
|
||||
field_type: FieldType::ReadWrite,
|
||||
value: 0.0,
|
||||
},
|
||||
),
|
||||
(
|
||||
LogicType::ReferenceId,
|
||||
LogicField {
|
||||
field_type: FieldType::Read,
|
||||
value: id as f64,
|
||||
},
|
||||
),
|
||||
]);
|
||||
device.slots.push(Slot {
|
||||
typ: SlotType::ProgramableChip,
|
||||
fields: HashMap::from([
|
||||
(
|
||||
SlotLogicType::PrefabHash,
|
||||
LogicField {
|
||||
field_type: FieldType::Read,
|
||||
value: -744098481.0,
|
||||
},
|
||||
),
|
||||
(
|
||||
SlotLogicType::LineNumber,
|
||||
LogicField {
|
||||
field_type: FieldType::Read,
|
||||
value: 0.0,
|
||||
},
|
||||
),
|
||||
]),
|
||||
});
|
||||
|
||||
device
|
||||
}
|
||||
|
||||
@@ -318,6 +385,7 @@ impl Device {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: this needs some logic to link some special fields like "LineNumber" to the chip
|
||||
pub fn get_field(&self, typ: grammar::LogicType) -> Result<f64, ICError> {
|
||||
if let Some(field) = self.fields.get(&typ) {
|
||||
if field.field_type == FieldType::Read || field.field_type == FieldType::ReadWrite {
|
||||
@@ -330,6 +398,7 @@ impl Device {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: this needs some logic to link some special fields like "LineNumber" to the chip
|
||||
pub fn set_field(&mut self, typ: grammar::LogicType, val: f64) -> Result<(), ICError> {
|
||||
if let Some(field) = self.fields.get_mut(&typ) {
|
||||
if field.field_type == FieldType::Write || field.field_type == FieldType::ReadWrite {
|
||||
@@ -343,6 +412,7 @@ impl Device {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: this needs to work with slot Occupants, see `Slot` decl
|
||||
pub fn get_slot_field(&self, index: f64, typ: grammar::SlotLogicType) -> Result<f64, ICError> {
|
||||
if let Some(field) = self
|
||||
.slots
|
||||
@@ -361,6 +431,7 @@ impl Device {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: this needs to work with slot Occupants, see `Slot` decl
|
||||
pub fn set_slot_field(
|
||||
&mut self,
|
||||
index: f64,
|
||||
@@ -462,15 +533,14 @@ impl VM {
|
||||
}
|
||||
let id = device.id;
|
||||
|
||||
let first_data_network =
|
||||
device
|
||||
.connections
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find_map(|(index, conn)| match conn {
|
||||
&Connection::CableNetwork(_) => Some(index),
|
||||
&Connection::Other => None,
|
||||
});
|
||||
let first_data_network = device
|
||||
.connections
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find_map(|(index, conn)| match conn {
|
||||
&Connection::CableNetwork(_) => Some(index),
|
||||
&Connection::Other => None,
|
||||
});
|
||||
self.devices.insert(id, Rc::new(RefCell::new(device)));
|
||||
if let Some(first_data_network) = first_data_network {
|
||||
let _ = self.add_device_to_network(
|
||||
@@ -508,15 +578,14 @@ impl VM {
|
||||
}
|
||||
let id = device.id;
|
||||
let ic_id = ic.id;
|
||||
let first_data_network =
|
||||
device
|
||||
.connections
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find_map(|(index, conn)| match conn {
|
||||
&Connection::CableNetwork(_) => Some(index),
|
||||
&Connection::Other => None,
|
||||
});
|
||||
let first_data_network = device
|
||||
.connections
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find_map(|(index, conn)| match conn {
|
||||
&Connection::CableNetwork(_) => Some(index),
|
||||
&Connection::Other => None,
|
||||
});
|
||||
self.devices.insert(id, Rc::new(RefCell::new(device)));
|
||||
self.ics.insert(ic_id, Rc::new(RefCell::new(ic)));
|
||||
if let Some(first_data_network) = first_data_network {
|
||||
@@ -798,7 +867,7 @@ impl VM {
|
||||
|
||||
for conn in device_ref.connections.iter_mut() {
|
||||
if let Connection::CableNetwork(conn) = conn {
|
||||
if *conn == Some(network_id) {
|
||||
if *conn == Some(network_id) {
|
||||
*conn = None;
|
||||
}
|
||||
}
|
||||
|
||||
174
www/assets_finding.ipynb
Normal file
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import json\n",
|
||||
"\n",
|
||||
"database = {}\n",
|
||||
"\n",
|
||||
"with open(\"data/database.json\", \"r\") as f:\n",
|
||||
" database = json.load(f)\n",
|
||||
"\n",
|
||||
"db = database[\"db\"]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from pathlib import Path \n",
|
||||
"\n",
|
||||
"datapath = Path(r\"E:\\Games\\SteamLibrary\\steamapps\\common\\Stationeers\\Stationpedia\\exported_textures\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"\n",
|
||||
"images = list(datapath.glob(\"*.png\"))\n",
|
||||
"names = [image.name for image in images]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 23,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"image_candidates = {}\n",
|
||||
"\n",
|
||||
"def filter_candidates(candidates):\n",
|
||||
" max_match_len = 0\n",
|
||||
" max_len_matches = []\n",
|
||||
" for can in candidates:\n",
|
||||
" name, match, mapping = can\n",
|
||||
" match_len = len(match)\n",
|
||||
" if match_len > max_match_len:\n",
|
||||
" max_match_len = 0\n",
|
||||
" max_len_matches = [(name, match, mapping)]\n",
|
||||
" elif match_len == max_match_len:\n",
|
||||
" max_len_matches.append((name, match, mapping))\n",
|
||||
" if len(max_len_matches) > 1:\n",
|
||||
" for can in max_len_matches:\n",
|
||||
" name, match = can\n",
|
||||
" if f\"{match}_White\" in name:\n",
|
||||
" return [name]\n",
|
||||
" return [(name, mapping) for name, _, mapping in max_len_matches]\n",
|
||||
"\n",
|
||||
"for entry in db.values():\n",
|
||||
" candidates = []\n",
|
||||
" for name in names:\n",
|
||||
" if entry[\"name\"] in name:\n",
|
||||
" candidates.append((name, entry[\"name\"], entry[\"name\"]))\n",
|
||||
" if entry[\"name\"].removeprefix(\"Item\") in name:\n",
|
||||
" candidates.append((name, entry[\"name\"].removeprefix(\"Item\"), entry[\"name\"]))\n",
|
||||
" if entry[\"name\"].removeprefix(\"Structure\") in name:\n",
|
||||
" candidates.append((name, entry[\"name\"].removeprefix(\"Structure\"), entry[\"name\"]))\n",
|
||||
" image_candidates[entry[\"name\"]] = filter_candidates(candidates)\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 32,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"ItemAuthoringToolRocketNetwork []\n",
|
||||
"ImGuiCircuitboardAirlockControl []\n",
|
||||
"ItemBiomass []\n",
|
||||
"StructureBlocker []\n",
|
||||
"CartridgePlantAnalyser []\n",
|
||||
"StructureElevatorLevelIndustrial []\n",
|
||||
"ItemPlantEndothermic_Creative []\n",
|
||||
"Flag_ODA_10m []\n",
|
||||
"Flag_ODA_4m []\n",
|
||||
"Flag_ODA_6m []\n",
|
||||
"Flag_ODA_8m []\n",
|
||||
"ItemHorticultureBelt []\n",
|
||||
"StructureHydroponicsTrayData []\n",
|
||||
"ItemKitLiquidRegulator []\n",
|
||||
"ItemKitPortablesConnector []\n",
|
||||
"Landingpad_GasConnectorInwardPiece []\n",
|
||||
"Landingpad_LiquidConnectorInwardPiece []\n",
|
||||
"StructurePlinth []\n",
|
||||
"DynamicGasTankAdvancedOxygen []\n",
|
||||
"Rover_MkI_build_states []\n",
|
||||
"ItemPlantThermogenic_Creative []\n",
|
||||
"StructureWaterBottleFillerPoweredBottom []\n",
|
||||
"StructureWaterBottleFillerPowered []\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"to_copy = []\n",
|
||||
"for name, candidates in image_candidates.items():\n",
|
||||
" if len(candidates) != 1:\n",
|
||||
" print(name, candidates)\n",
|
||||
" else:\n",
|
||||
" to_copy.append((name, candidates[0][0]))\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 34,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"|████████████████████████████████████████| 1216/1216 [100%] in 0.6s (1885.28/s) \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import shutil\n",
|
||||
"from alive_progress import alive_bar\n",
|
||||
"destpath = Path(\"img/stationpedia\")\n",
|
||||
"total_files = len(to_copy)\n",
|
||||
"\n",
|
||||
"with alive_bar(total_files) as bar:\n",
|
||||
" for name, file in to_copy:\n",
|
||||
" source = datapath / file\n",
|
||||
" dest = destpath / f\"{name}.png\"\n",
|
||||
" shutil.copyfile(source, dest)\n",
|
||||
" bar()\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.12.2"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 96 B |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 2.9 MiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 13 KiB |