Compare commits

...
10 Commits
Author SHA1 Message Date
phenom ccc01396cd Release Healer Man 0.1.43 2026-09-14 13:20:20 -04:00
phenom c7e8163790 Release Healer Man 0.1.42 2026-09-13 15:48:12 -04:00
phenom c3f8a69b51 Release Healer Man 0.1.41 2026-09-13 15:09:35 -04:00
phenom 197a64117c Release Healer Man 0.1.40 2026-09-13 13:21:27 -04:00
phenom ed0d2fea3d Release Healer Man 0.1.39 2026-09-13 11:07:56 -04:00
phenom b417b7c3c3 Release Healer Man 0.1.38 2026-09-12 23:55:24 -04:00
phenom 361734bc41 Release Healer Man 0.1.37 2026-09-12 21:14:41 -04:00
phenom 03a4e3f51c Release Healer Man 0.1.36 2026-09-12 19:16:01 -04:00
phenom 40d9f346d8 Release Healer Man 0.1.35 2026-09-12 16:02:15 -04:00
phenom 46c272f889 Release Healer Man 0.1.34 2026-09-12 15:14:56 -04:00
378 changed files with 32675 additions and 965 deletions

No files matched your search

+1054
View File
File diff suppressed because it is too large. Load diff
@@ -139,6 +139,8 @@ public class ThorDualScreenPlugin extends Plugin implements DisplayManager.Displ
if (forceEnabled) scheduleEnsurePresentation(300L);
});
presentation.show();
bridge.getWebView().getSettings().setUseWideViewPort(true);
bridge.getWebView().getSettings().setLoadWithOverviewMode(true);
bridge.getWebView().loadUrl(currentUrl);
}
@@ -279,6 +281,8 @@ public class ThorDualScreenPlugin extends Plugin implements DisplayManager.Displ
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
settings.setDatabaseEnabled(true);
settings.setMediaPlaybackRequiresUserGesture(false);
settings.setAllowFileAccess(true);
+48
View File
@@ -0,0 +1,48 @@
# WoW dungeon atlas
Press **M** in a loaded WoW dungeon to open its original game map. The atlas
shows a white player marker with camera direction, a green entrance, and gold
numbered encounter markers. Patrol routes are optional. The minimap and companion
map use the same artwork and coordinate projection.
Multi-floor dungeons have a floor selector. Auto chooses the smallest containing
map rectangle; it is a horizontal best fit, not the WoW client's WMO-group floor
detection. Select a floor manually when stacked rooms overlap. Coordinates outside
the selected floor are not clamped to a misleading marker at the map edge.
The current import includes 51 standard WoW dungeons and 107 unique map images. The
custom Tinkertech Showdown, Frozen Reach, and Forgotten Mine have no matching map
records in the supplied archives and retain their survey maps. RuneWaker maps are
unchanged. Missing images also fall back to the survey projection.
## Reimporting
Run `npm run dungeon:maps:import` from the HealerMan project root. An optional
archive argument replaces the default `../downloads/patch-enUS-M.MPQ`.
`WOW_CLIENT_ROOT` supplies the client archives for original Wrath map tiles;
`WOW_DUNGEON_WORK_ROOT` supplies runtime drafts for alignment checks. Defaults
are `../wow335a` and `../HealerMan-Storage/pipeline-work/dungeons`.
The importer reads the patch and client archives without modifying them. It
decodes BLP2 tiles into cropped 1002x668 PNGs, reads WorldMapArea/DungeonMap bounds,
and inverts the reviewed scene coordinate mapper, including shifted ADT packages
and rotated global WMOs. It verifies alignment against imported creature spawns
or the source entrance for an event-driven arena without static actors.
Wailing Caverns retains its authored coordinate convention.
Images live in `public/assets/game/dungeons/<id>/maps/`, so existing dungeon
content-pack rules include them. Runtime metadata is generated in
`src/game/generated/wowDungeonMaps.generated.json`; provenance and coverage are in
`dungeon-pipeline/WOW_DUNGEON_MAP_REPORT.json`. Changes to environment checksums or
coordinate conventions require reimporting. Mapster is a Lua WoW-client addon;
HealerMan does not execute or install it.
After reimporting, run `npm run content:publish` to update the local downloadable
content catalog and `npm run build` to refresh the bundled Wailing Caverns atlas.
Those commands prepare local artifacts; they do not deploy the online game.
## Verification
Run `npm test -- --run src/game/wowDungeonMap.test.ts src/ui/DungeonMapGraphic.test.ts src/ui/MapPanel.test.ts`
and `node --test scripts/lib/wow-map-image.test.mjs`. Visual evidence and observed
limitations are recorded in `PLAYTEST_NOTES.md`.
@@ -0,0 +1,388 @@
{
"source": "patch-enUS-M.MPQ",
"sourceSha256": "b69713077e19498d20efa5eeaefdba98850764db6bdc99e292bfbdf7b1c858d6",
"imported": [
{
"id": "shadowfang-keep",
"floors": 7,
"checkedSpawns": 109,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "stormwind-stockade",
"floors": 1,
"checkedSpawns": 93,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004000000000026205
},
{
"id": "deadmines",
"floors": 2,
"checkedSpawns": 179,
"checkedEntrances": 0,
"maxAlignmentError": 0.00005830951894693099
},
{
"id": "wailing-caverns",
"floors": 1,
"checkedSpawns": 251,
"checkedEntrances": 0,
"maxAlignmentError": 0.188595526192965
},
{
"id": "razorfen-kraul",
"floors": 1,
"checkedSpawns": 179,
"checkedEntrances": 0,
"maxAlignmentError": 0.00006573939954203296
},
{
"id": "blackfathom-deeps",
"floors": 3,
"checkedSpawns": 201,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "uldaman",
"floors": 2,
"checkedSpawns": 302,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "gnomeregan",
"floors": 4,
"checkedSpawns": 371,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "sunken-temple",
"floors": 3,
"checkedSpawns": 244,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "razorfen-downs",
"floors": 1,
"checkedSpawns": 192,
"checkedEntrances": 0,
"maxAlignmentError": 5.084354071042896e-13
},
{
"id": "scarlet-monastery",
"floors": 4,
"checkedSpawns": 310,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "zulfarrak",
"floors": 1,
"checkedSpawns": 251,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "blackrock-spire",
"floors": 7,
"checkedSpawns": 565,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "blackrock-depths",
"floors": 2,
"checkedSpawns": 1040,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "scholomance",
"floors": 4,
"checkedSpawns": 327,
"checkedEntrances": 0,
"maxAlignmentError": 0.00009095950916596921
},
{
"id": "stratholme",
"floors": 2,
"checkedSpawns": 430,
"checkedEntrances": 0,
"maxAlignmentError": 9.096057172999542e-13
},
{
"id": "maraudon",
"floors": 2,
"checkedSpawns": 525,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "ragefire-chasm",
"floors": 1,
"checkedSpawns": 127,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "dire-maul",
"floors": 6,
"checkedSpawns": 755,
"checkedEntrances": 0,
"maxAlignmentError": 0.00006403124240144967
},
{
"id": "shattered-halls",
"floors": 1,
"checkedSpawns": 198,
"checkedEntrances": 0,
"maxAlignmentError": 0.00006403124237426248
},
{
"id": "blood-furnace",
"floors": 1,
"checkedSpawns": 139,
"checkedEntrances": 0,
"maxAlignmentError": 0.00006403124237384636
},
{
"id": "hellfire-ramparts",
"floors": 1,
"checkedSpawns": 85,
"checkedEntrances": 0,
"maxAlignmentError": 0.00006753673068807912
},
{
"id": "steamvault",
"floors": 2,
"checkedSpawns": 127,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "underbog",
"floors": 1,
"checkedSpawns": 161,
"checkedEntrances": 0,
"maxAlignmentError": 0.0000617170964964256
},
{
"id": "slave-pens",
"floors": 1,
"checkedSpawns": 122,
"checkedEntrances": 0,
"maxAlignmentError": 0.0000640312423744012
},
{
"id": "arcatraz",
"floors": 3,
"checkedSpawns": 84,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "botanica",
"floors": 1,
"checkedSpawns": 171,
"checkedEntrances": 0,
"maxAlignmentError": 0.00006403124237384636
},
{
"id": "mechanar",
"floors": 2,
"checkedSpawns": 84,
"checkedEntrances": 0,
"maxAlignmentError": 0.000046699999999996744
},
{
"id": "shadow-labyrinth",
"floors": 1,
"checkedSpawns": 189,
"checkedEntrances": 0,
"maxAlignmentError": 0.00006403124237426248
},
{
"id": "sethekk-halls",
"floors": 2,
"checkedSpawns": 104,
"checkedEntrances": 0,
"maxAlignmentError": 0.00005324368507145524
},
{
"id": "mana-tombs",
"floors": 1,
"checkedSpawns": 119,
"checkedEntrances": 0,
"maxAlignmentError": 0.000056568542495137386
},
{
"id": "auchenai-crypts",
"floors": 2,
"checkedSpawns": 93,
"checkedEntrances": 0,
"maxAlignmentError": 0.00005415025392387915
},
{
"id": "magisters-terrace",
"floors": 2,
"checkedSpawns": 147,
"checkedEntrances": 0,
"maxAlignmentError": 0.00007071067811848996
},
{
"id": "black-morass",
"floors": 1,
"checkedSpawns": 134,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "escape-from-durnholde",
"floors": 1,
"checkedSpawns": 380,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "utgarde-keep",
"floors": 3,
"checkedSpawns": 112,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004700000000001925
},
{
"id": "utgarde-pinnacle",
"floors": 2,
"checkedSpawns": 83,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "the-nexus",
"floors": 1,
"checkedSpawns": 234,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "the-oculus",
"floors": 5,
"checkedSpawns": 112,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "culling-of-stratholme",
"floors": 2,
"checkedSpawns": 209,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "halls-of-stone",
"floors": 1,
"checkedSpawns": 76,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "draktharon-keep",
"floors": 2,
"checkedSpawns": 99,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "azjol-nerub",
"floors": 3,
"checkedSpawns": 70,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "halls-of-lightning",
"floors": 2,
"checkedSpawns": 112,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "gundrak",
"floors": 2,
"checkedSpawns": 85,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "violet-hold",
"floors": 2,
"checkedSpawns": 8,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "ahnkahet-old-kingdom",
"floors": 1,
"checkedSpawns": 133,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004999999999988347
},
{
"id": "forge-of-souls",
"floors": 1,
"checkedSpawns": 41,
"checkedEntrances": 0,
"maxAlignmentError": 0
},
{
"id": "trial-of-the-champion",
"floors": 1,
"checkedSpawns": 0,
"checkedEntrances": 1,
"maxAlignmentError": 0
},
{
"id": "pit-of-saron",
"floors": 1,
"checkedSpawns": 167,
"checkedEntrances": 0,
"maxAlignmentError": 0.00004000000000026205
},
{
"id": "halls-of-reflection",
"floors": 1,
"checkedSpawns": 13,
"checkedEntrances": 0,
"maxAlignmentError": 0
}
],
"skipped": [
{
"id": "tinkertech-showdown",
"reason": "No matching WorldMapArea record"
},
{
"id": "frozen-reach",
"reason": "No matching WorldMapArea record"
},
{
"id": "forgotten-mine",
"reason": "No matching WorldMapArea record"
}
],
"coordinateSources": [
"WorldMapArea.dbc",
"DungeonMap.dbc"
],
"layoutSource": "https://github.com/wowgaming/3.3.5-interface-files/blob/main/WorldMapFrame.xml",
"archives": [
"patch-enUS-M.MPQ",
"patch-enUS-3.MPQ",
"patch-enUS.MPQ",
"patch-enUS-2.MPQ"
]
}
+119
View File
@@ -0,0 +1,119 @@
# WoW dungeon lighting and stair review - 2026-09-13
## Implemented coverage
All 54 campaign WoW dungeons now receive environment-specific lighting using
Stockades' reviewed ambient/hemisphere fill as the baseline. Stone, cavern,
fire, arcane, crypt, and outdoor profiles preserve atmosphere without applying
the old dark expansion palettes. Stockades' existing presentation and three
reviewed stair proxies remain unchanged. RuneWaker environments are excluded.
The fleet scan produced 347 additional collision-verified walking proxies in
22 dungeons, and eight filled Recast boundary bridges in Uldaman. This makes
350 walking proxies including the three existing Stockades flights. Visual
stairs remain steps: source visual/collision/navigation GLBs were not modified.
The shared prepared collision is used by players, companions, and enemies.
| Dungeon | Additional walking proxies | Additional navigation bridges |
| --- | ---: | ---: |
| Shadowfang Keep | 41 | 0 |
| Blackfathom Deeps | 5 | 0 |
| Uldaman | 5 | 8 |
| Gnomeregan | 4 | 0 |
| Sunken Temple | 2 | 0 |
| Scarlet Monastery | 37 | 0 |
| Zul'Farrak | 1 | 0 |
| Scholomance | 36 | 0 |
| Stratholme | 12 | 0 |
| Blood Furnace | 1 | 0 |
| Shadow Labyrinth | 1 | 0 |
| Mana-Tombs | 3 | 0 |
| Auchenai Crypts | 5 | 0 |
| Magister's Terrace | 10 | 0 |
| Escape From Durnholde | 120 | 0 |
| Utgarde Keep | 8 | 0 |
| Utgarde Pinnacle | 32 | 0 |
| Culling of Stratholme | 11 | 0 |
| Halls of Stone | 2 | 0 |
| Halls of Lightning | 1 | 0 |
| Pit of Saron | 1 | 0 |
| Halls of Reflection | 9 | 0 |
The machine-readable `src/game/generated/wowDungeonStairs.generated.json`
records a scan for every WoW dungeon, including entries with no accepted new
proxy, collision package identities, candidate/rejection counts, and exact
navigation portals. Authored Wailing Caverns is scanned against its actual
source assets, rather than the campaign's separate canonical package.
## Safety and verification
- Require repeated short risers with consistent rise/run and overlapping width.
- Merge compatible continuous flights; independently verify short fallbacks
when a merged flight is unsafe.
- Rebuild after rejected proxies are removed, so accepted paths do not depend
on rejected geometry edits.
- Check real terrain support and capsule sweeps uphill/downhill along the center
and two interior lateral lanes at approximately 0.35m intervals.
- Fill only separate existing boundary portals wholly within a verified flight.
Do not invent off-mesh links across unrelated floors or walls.
- Gate generated coordinates by collision package URL/checksum identity, and
navigation identity where exact portal bridges are present.
- Keep existing validation/availability gates unchanged. Stair checks do not
certify boss routes, encounters, resets, checkpoints, or complete runs.
- Spatially index ramp footprints during preparation to avoid checking every
ramp against every vertex in large, multi-chunk environments.
The shipping-asset regression tests independently exercise all 347 new proxies
through `prepareCollision` and the live NPC direct-segment validator in both
directions and all three tested lanes. All generated portals match the actual
shipping navigation vertices. Existing Stockades player/NPC/wall regressions pass.
Full validation: 247 Vitest files passed, 1,599 tests passed, six existing tests
skipped. Production TypeScript/Vite build, texture/performance audits, bundle
compression/verification, and release candidate checking passed. Existing
physics initialization and bundle-size/import advisories remain.
## Visual evidence and remaining QA
The local visual viewer uses the runtime definitions/material policy, shipped
GLBs, Meshopt/KTX2 decoding, ACES tone mapping, and 1280x720 screenshots. It does
not modify saved characters or party state. Evidence is under
`artifacts/wow-dungeon-environment/` (ignored QA artifacts).
Uldaman's new/old-fill comparison shows clearer stone walls, columns, and floor
tiles. Wailing Caverns retains green coloration with readable rock formations.
Mechanar retains cool purple/blue interiors and unchanged visible steps.
Scholomance's entrance stairs and masonry remain visible with the crypt profile.
Blood Furnace's dark source textures remain atmospheric; the entrance viewpoint
faces a nearby wall, so this is not a full-room traversal review.
Zul'Farrak showed a geometry/viewpoint gap in the standalone entrance and boss
views. Do not treat its lighting profile or passing isolated proxy sweep as an
end-to-end visual/playability pass. Durnholde's large package completed loading
without console errors; its cavern entrance and outdoor fort masonry/trees were
readable, but the boss viewpoint also showed missing terrain/viewpoint coverage.
That environment needs a separate terrain/spawn review and live traversal check.
This is not an exhaustive certification that every staircase is repaired.
Conservative repeated-riser detection can miss curved flights, one/two-step
transitions, and heavily decimated source geometry. A rejected candidate may be
decorative, lack headroom/ground, or require an individually reviewed footprint.
An entry with no new proxy is not proof that it contains no stairs. Full-dungeon
actor traversal, entrance/exit lips, outer stair edges, manual review of rejected
or undetected flights, full clears, and physical Android QA remain open.
## Repeating the checks
Requires the project's Node 24 runtime for native TypeScript pipeline execution.
```text
npm run dungeon:wow:stairs:audit
npm run dungeon:wow:stairs:refresh
npm run dungeon:wow:stairs:audit -- scholomance --diagnostics
node scripts/dungeon-pipeline/audit-wow-stairs.ts wailing-caverns --update
npm test -- --run src/game/wowDungeonStairAssets.test.ts
```
The audit is read-only by default. Refresh writes the full generated catalog;
`--update` replaces only the named entry while retaining the other entries.
Campaign regeneration does not erase the runtime lighting/stair adapter.
@@ -24,6 +24,41 @@
"authoredReason": "Bridges the reviewed 1.537m Recast seam from the central cell block to the south wing stairs."
}
],
"traversalRamps": [
{
"id": "entrance-stair-ramp",
"start": [-52.8, -18.16, 0.8],
"end": [-72.4, -25.609, 0.8],
"width": 10.8,
"navigationBridge": {
"linkId": "entrance-to-central-stairs",
"startPortal": [[-66.674328, -23.150503, -3.904271], [-66.674328, -23.150503, 5.501851]],
"endPortal": [[-67.664446, -23.755576, -2.895818], [-67.664446, -23.755576, 4.493397]]
}
},
{
"id": "north-wing-stair-ramp",
"start": [-129.17, -25.609, 11.7],
"end": [-129.17, -33.944, 32.85],
"width": 10.8,
"navigationBridge": {
"linkId": "central-to-north-wing-stairs",
"startPortal": [[-133.878601, -27.349338, 16.099782], [-124.46789, -27.349338, 16.099782]],
"endPortal": [[-132.668457, -27.95441, 17.0899], [-125.476344, -27.95441, 17.0899]]
}
},
{
"id": "south-wing-stair-ramp",
"start": [-129.17, -25.609, -10.3],
"end": [-129.17, -33.944, -31.45],
"width": 10.8,
"navigationBridge": {
"linkId": "central-to-south-wing-stairs",
"startPortal": [[-133.878601, -27.349338, -14.703893], [-124.46789, -27.349338, -14.703893]],
"endPortal": [[-132.668457, -27.95441, -15.694011], [-125.476344, -27.95441, -15.694011]]
}
}
],
"presentation": {
"background": "#171815",
"fog": {
@@ -49,7 +84,7 @@
"navigation": "green",
"report": "PLAYTEST_NOTES.md",
"warnings": [
"Three reviewed bidirectional links bridge the entrance, central block, and both prison wings; minor decorative navmesh islands remain intentionally discarded.",
"Three reviewed smooth stair collision proxies and filled navigation bridges connect the entrance, central block, and both prison wings; minor decorative navmesh islands remain intentionally discarded.",
"Stockades uses a dungeon-specific warm indoor lighting profile because the imported WMO has no baked lightmap or vertex-lighting channel."
]
}
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "healer-man",
"version": "0.1.33",
"version": "0.1.43",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "healer-man",
"version": "0.1.33",
"version": "0.1.43",
"dependencies": {
"@capacitor/android": "8.4.1",
"@capacitor/core": "8.4.1",
+4 -1
View File
@@ -1,7 +1,7 @@
{
"name": "healer-man",
"private": true,
"version": "0.1.33",
"version": "0.1.43",
"type": "module",
"scripts": {
"dev": "vite --host 0.0.0.0",
@@ -45,6 +45,7 @@
"dungeon:epoch:sync": "node scripts/dungeon-pipeline/sync-epoch-dungeons.mjs",
"dungeon:source:azerothcore": "node scripts/dungeon-pipeline/import-azerothcore-world.mjs",
"dungeon:catalog": "node scripts/dungeon-pipeline/compile-campaign-catalog.mjs",
"dungeon:maps:import": "node scripts/dungeon-pipeline/import-wow-maps.mjs",
"dungeon:canonicalize-environments": "node scripts/dungeon-pipeline/relink-canonical-environments.mjs",
"dungeon:dedupe-creatures": "node scripts/dungeon-pipeline/dedupe-shared-creatures.mjs",
"dungeon:test-creature-animation-policy": "node --test scripts/dungeon-pipeline/runtime-creature-animations.test.mjs",
@@ -56,6 +57,8 @@
"dungeon:five-player:verify": "node scripts/dungeon-pipeline/verify-five-player-dungeon-imports.mjs",
"dungeon:wow:audit": "vite-node scripts/dungeon-pipeline/audit-wow-dungeon-content.mjs",
"dungeon:wow:functionality:audit": "vite-node scripts/dungeon-pipeline/audit-wow-dungeon-functionality.ts",
"dungeon:wow:stairs:audit": "node --max-old-space-size=8192 scripts/dungeon-pipeline/audit-wow-stairs.ts",
"dungeon:wow:stairs:refresh": "node --max-old-space-size=8192 scripts/dungeon-pipeline/audit-wow-stairs.ts --write",
"dungeon:wow:test": "vitest run src/game/wowDungeonContent.test.ts",
"dungeon:wow:export-tool:test": "node --test scripts/dungeon-pipeline/wow-export-tool.test.mjs",
"dungeon:ascension:recovery:validate": "node scripts/dungeon-pipeline/validate-ascension-custom-dungeon-recovery.mjs --skip-dbc",
Binary file not shown.

After

Width:  |  Height:  |  Size: 772 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 773 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 741 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 745 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 776 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 773 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 773 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 745 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 774 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 KiB

Loaded 100 of 378 files, more files were not shown because too many files have changed in this diff. Show more