Release Healer Man 0.1.40

This commit is contained in:
phenom committed 2026-09-13 13:21:27 -04:00
1 parent ed0d2fea3d
commit 197a64117c
215 files changed
+5131 -181

No files matched your search

+149
View File
@@ -2879,3 +2879,152 @@ Vite's existing large-chunk advisory remains informational.
tests plus the real-combat integration test passed. The 432-test focused
combat/party/class/health/input regression suite and 18 server tests passed.
Production build, final TypeScript check, and release candidate check passed.
## 2026-09-13 - RoM character nameplate class labels
- RoM overhead nameplates and AI party frames now show the active class alone,
or primary/secondary class names joined with `/`, without race or `Primary`.
- An isolated local fixture using the real scene, party frames, and shared
character preview verified `Warrior`, `Priest`, and `Priest/Warrior` labels.
The two-class dungeon screenshot showed the label above the rendered body
and equipped staff silhouettes. The roster preview also retained its body
and equipment. The fixture used in-memory identities without saving a roster.
- Evidence: `artifacts/rom-nameplates/dungeon-dual-class.png` and
`artifacts/rom-nameplates/roster-preview.png`.
- Validation: 70 avatar, party-store, and mob-nameplate tests passed. Production
build, asset audits, compression/bundle verification, and release check passed.
## 2026-09-13 - Dungeon boss durability and difficulty leaderboards
- Campaign bosses now use a level-scaled health floor above their original
health when needed. Final bosses receive an additional 1.8 multiplier on
that floor. Larger authored health values remain effective.
- The dungeon browser offers a 1-10 boss difficulty slider, native keyboard
adjustment, and controller decrement/increment buttons. Difficulty 1 is
Easy; each step adds 25% health and 15% damage to bosses. The selected source
Normal/Heroic variant also applies to entry. Trash retains its existing stats.
- Boss difficulty is fixed at entry, preserved through saves and renderer
restarts, and passed from the online group leader to followers. Changing
difficulty starts a new run; completed checkpoints also start fresh.
- Device and world leaderboards isolate each difficulty's final/full-clear
records, ranks, and pages. Existing records migrate to a separate legacy
bracket. Migration and repeat submissions were verified against SQLite;
HTTP tests verify difficulty selection and reject invalid values.
- Deterministic Ragefire simulations tested 12 RoM party compositions at levels
1, 8, 20, 40, and 80 against the shared runtime scaling function. All ordinary
boss samples exceeded 25 seconds and final-boss samples exceeded 45 seconds.
Additional damage-role Mage samples passed those bounds; at level 8 the
ordinary boss took 29.8 seconds and the final boss took 55 seconds. Timings
remain dependent on party composition, player actions, and equipment.
- A final-boss fight with enemy attacks and Priest healing verified repeated
attacks, incoming damage, healing, and party survival before the boss died.
Balance evidence: `artifacts/boss-difficulty/ragefire-balance.json`.
- Desktop screenshots at 1280x720 verified the Easy and difficulty-10 layouts,
stat preview, and matching leaderboard labels. Pointer and keyboard changes
were exercised. At 390x844 the slider remained operable and its DOM width
stayed within the viewport, but the in-app browser's viewport-override
screenshots scaled incorrectly, as in the earlier compact playtest. Those
captures do not establish mobile visual quality. The viewport was restored.
- Validation: 169 focused game/client/UI tests and 20 server tests passed.
The production build, asset audits, bundle verification, and release check
passed. Existing RoM nameplate changes were retained.
## 2026-09-13 - Original WoW dungeon atlas
- Added 107 unique original map images across 51 standard WoW dungeons using
the supplied patch-enUS-M archive and existing client archives. A duplicated
Trial of the Champion floor record is deduplicated before packaging. The
source MPQs and Mapster addon were read without modification; no Lua addon
code is installed into HealerMan.
- Coordinate inverses were checked against 10,342 matching source spawns and
the event-driven Trial of the Champion source entrance. Maximum discrepancy
is 0.189 yards in authored Wailing Caverns rounding; other imported maps
have substantially smaller discrepancies. All 107 image checksums match
their local immutable content objects.
- The production preview at localhost:5174 loaded Wailing Caverns and showed
original artwork with the player/camera direction, entrance, numbered
encounters, and a 45.7%, 60.5% entrance-position readout. The map was visually
reviewed at 1280x720, with the rendered dungeon visible behind it. Pressing
M opened it; toggling patrol routes then pressing M closed it despite the
checkbox retaining focus. Reopening restores the clean default overlay.
- Evidence: `artifacts/wow-maps/wailing-caverns-atlas.png`. No production-preview
errors were captured in the bounded console check. Earlier development HMR
errors from concurrent equipment edits were not treated as production errors.
Testing used the existing offline Hudtest QA character, not a live account.
- Multi-floor rendering, floor controls, rebound shortcuts, repeat/capture
guards, PNG dimensions/checksums, axis projection, shifted/rotated scene
transforms, and RuneWaker survey fallback are covered by automated tests.
Every dungeon was not individually traversed in the browser. Auto floor
selection is horizontal best fit, not WMO-group/height detection; overlapping
stacked rooms require manual floor selection. Mobile hardware was not tested.
- Tinkertech Showdown, Frozen Reach, and Forgotten Mine have no matching
artwork records and retain their survey maps. RuneWaker maps are unchanged.
Failed artwork loads also retain a correctly reprojected survey fallback.
- Validation: 50 focused map/UI/input tests and three BLP/tile-layout tests
passed. The production build, texture/performance audits, and compressed
release-bundle verification passed. Local downloadable packs were published;
no online deployment was performed.
## 2026-09-13 - Boss card collection and leveling loot
- Boss deaths roll a guaranteed Normal card plus independent Rare (1/10),
Epic (1/50), and Legendary (1/100) bonuses. The collection catalogue covers
330 distinct WoW/RoM bosses and 1,320 rarity variants using existing models.
Repeated appearances share counts and list every source dungeon.
- Copies and the latest claim per boss spawn persist per character through the
roster/cloud-save path. Shared-world hydration grants the authority's rolls
to followers and ignores duplicate/reconnected and older reward snapshots.
- Equipment drops and bonus equipment are suppressed below player level 80;
existing inventory and authored non-equipment drops are preserved. Level-80
equipment loot remains enabled. Bosses without equipment tables award cards.
- The production browser at 1280x720 verified the main-menu entry, all four
Lady Anacondra model portraits, dungeon location, odds, search, All/Earned,
dungeon/rarity grouping, and in-dungeon pause-menu access. Roster and dungeon
screenshots show player/party bodies and starter weapon/shield silhouettes.
- At 390x844 the collection switched to two columns, with no horizontal page
overflow and dialog bounds within the viewport. The in-app browser again
scaled the viewport-override screenshot incorrectly; that capture does not
establish mobile visual quality. The viewport was restored.
- Deterministic tests cover exact odds boundaries, counts, persistence,
no-loot-table bosses, loot restrictions, and online replay. Live browser QA
did not perform a boss clear; earned-copy display was checked with seeded
render tests. Evidence: `artifacts/boss-cards/collection-desktop.png`,
`collection-mobile.png`, `roster.png`, and `dungeon.png`.
## WoW and CoA default boss difficulty review — September 13, 2026
- Reviewed all 10 WoW and 21 CoA classes: 61 canonical class-role builds at
levels 8, 20, 40, and 80 with three deterministic companion compositions.
The 1,464 durability simulations used live boss scaling, starter heirlooms,
legal level-appropriate talents, live companion AI, and the existing baseline
player rotation. CoA characters currently use WoW companions.
- Fixed Death Pact and other instant-kill effects bypassing boss health in the
player, triggered-spell, and companion paths. Fixed repeated proc activations
across branches, duplicate execution of expanded CoA payloads, invented
damage on proc auras and Waterfall, and critical-damage talent bonuses
affecting ordinary hits. Regenerated the CoA runtime catalog and shards.
- Raised the shared health floor by 40% to cover the remaining CoA burst.
Every class uses the same boss stats at the same level and difficulty.
Fastest sampled kills were 26.2 seconds for an ordinary boss and 48.6 for
the final boss. All duration assertions passed. The refreshed RoM regression
also passed; its level-eight damage-role Mage sample took 41.8/74.9 seconds.
- Durability samples disabled enemy attacks and stopped at 60 seconds to
isolate damage. Most WoW and CoA samples still had a living boss at the cap;
these are lower bounds, not proof of typical 25-30/45-second kill times.
Default class throughput is still uneven, especially for WoW parties.
- An additional 26 final-boss attack samples exercised healer builds at levels
8 and 80. Paladin, Priest, Shaman, and Tinker kept their parties alive in both.
Druid and several CoA samples lost companions; Bloodmage also lost the player
at 80. This basic policy can refresh HoTs too early or choose self-healing
hybrids, so these outcomes need a dedicated healer rotation/playtest pass
before treating them as class throughput limits. No live boss clear was
performed in this numerical review.
- Validation: 122 combat/catalog checks, 91 class-damage/avatar checks, eight
RoM boss regressions, TypeScript, and the production build passed. All six
large-matrix assertions passed, but its progress reporter timed out during
CPU-heavy loops. Added worker yields and reran the affected level-40 test;
it exited cleanly without the reporter error.
- Evidence: `artifacts/boss-difficulty/wow-coa-balance.json` and
`artifacts/boss-difficulty/wow-coa-review.md`. Coverage is a canonical build
per role with starter gear, rather than every specialization or later gear
combination. `npm run release:check` is required for handoff.
+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"
]
}
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "healer-man",
"version": "0.1.39",
"version": "0.1.40",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "healer-man",
"version": "0.1.39",
"version": "0.1.40",
"dependencies": {
"@capacitor/android": "8.4.1",
"@capacitor/core": "8.4.1",
+2 -1
View File
@@ -1,7 +1,7 @@
{
"name": "healer-man",
"private": true,
"version": "0.1.39",
"version": "0.1.40",
"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",
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 KiB

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