{
  "schema_version": 1,
  "set_version": "2026.08.17+9322bac9",
  "content_digest": "9322bac928f16c28e774bd5bb2d0fd558635f2ba06197278bb4b05b51f4e19f1",
  "generated_utc": "2026-08-17T07:13:00Z",
  "channel": "live",
  "min_launcher_version": "1.0.0",
  "realm": {
    "name": "HasteServer",
    "host": "38.247.161.169",
    "auth_port": 3726,
    "world_port": 8087
  },
  "register_url": null,
  "support_url": null,
  "client": {
    "required_build": 12340,
    "required_version": "3.3.5a",
    "wow_exe_size": 7699456,
    "version_signature_hex": "3132333430000000332e332e3500",
    "required_data_files": [
      "common.MPQ",
      "common-2.MPQ",
      "expansion.MPQ",
      "lichking.MPQ",
      "patch.MPQ",
      "patch-2.MPQ",
      "patch-3.MPQ"
    ],
    "reject_globs": [
      "wow-update-base-*.MPQ"
    ],
    "min_free_bytes": 524288000
  },
  "exe_patch": {
    "required": true,
    "reason": "The stock client signature-checks Interface\\GlueXML and refuses to boot with 'login interface files are corrupt'. All three shipped archives contain GlueXML, so there is no configuration that avoids this.",
    "backup_to": "Wow.exe.backup-preHaste",
    "exe_size": 7699456,
    "known_stock_md5": "5758d89ed392e2190c44c5183a6d23a3",
    "known_patched_md5": "bdb9daa7612762f9ad3368dd50fb189c",
    "match_policy": "probe_sites",
    "match_policy_note": "Classify by probing the sites, NOT by whole-file md5. Many 3.3.5a repacks ship an already-patched exe with different bytes elsewhere; a md5 gate would reject working clients. All sites stock -> patch. All sites patched -> already done, skip. Mixed or unknown -> abort and tell the user, never guess.",
    "sites": [
      {
        "offset": 4282917,
        "offset_hex": "0x415A25",
        "stock": "75",
        "patched": "EB"
      },
      {
        "offset": 4282943,
        "offset_hex": "0x415A3F",
        "stock": "01",
        "patched": "03"
      },
      {
        "offset": 4283029,
        "offset_hex": "0x415A95",
        "stock": "01",
        "patched": "03"
      },
      {
        "offset": 4283206,
        "offset_hex": "0x415B46",
        "stock": "7F",
        "patched": "EB"
      },
      {
        "offset": 4283231,
        "offset_hex": "0x415B5F",
        "stock": "83C0035E8BE55D",
        "patched": "B803000000EBED"
      }
    ]
  },
  "files": [
    {
      "id": "patch-C",
      "kind": "patch",
      "url": "patches/patch-C.MPQ",
      "dest": "Data/patch-C.MPQ",
      "size": 247626692,
      "sha256": "f591d31dadec2df66bd83ea8a3e0dce1396f8b0e3d470d8519cdd21bb6cb3f96",
      "required": true,
      "default_on": true,
      "note": "glue art + GlueParent.lua + GameObjectDisplayInfo.dbc",
      "archive_entries": 3288
    },
    {
      "id": "patch-H",
      "kind": "patch",
      "url": "patches/patch-H.MPQ",
      "dest": "Data/patch-H.MPQ",
      "size": 3921171,
      "sha256": "6f3d0861f2b1d01d38ede169edb41f8a252650c7be00458ecc483fb47950af85",
      "required": true,
      "default_on": true,
      "note": "the 8-class roster: ChrClasses + CharBaseInfo + CharStartOutfit",
      "archive_entries": 50
    },
    {
      "id": "patch-S",
      "kind": "patch",
      "url": "patches/patch-S.MPQ",
      "dest": "Data/patch-S.MPQ",
      "size": 167442327,
      "sha256": "2ed08111956d1949ab8e9c17298a409a1b94fd142c2fa6bcd00eeb8ee4eb4133",
      "required": true,
      "default_on": true,
      "note": "spell DBCs + Ascension FX + the authoritative 8-button CharacterCreate.xml",
      "archive_entries": 4908
    },
    {
      "id": "addon-AIO_Client",
      "kind": "addon",
      "url": "addons/AIO_Client.zip",
      "dest": "Interface/AddOns/AIO_Client",
      "unpack": "zip",
      "replace_dir": true,
      "size": 27046,
      "sha256": "0b43bf154e051460fa4a3c30c97ad99db8a60b352f22c06cbcbfec06cf827115",
      "required": true,
      "default_on": true,
      "note": "transport for the talent pane; HasteTalents declares it as a dependency"
    },
    {
      "id": "addon-HasteTalents",
      "kind": "addon",
      "url": "addons/HasteTalents.zip",
      "dest": "Interface/AddOns/HasteTalents",
      "unpack": "zip",
      "replace_dir": true,
      "size": 84661,
      "sha256": "695c438f8bc8ce7adef6f093c4f42163af9d752c582eaf44f240479a7912db5a",
      "required": true,
      "default_on": true,
      "note": "include_only is deliberate: the folder also holds 5 .bak files (~288 KB) and HasteTalents_Kits.lua, which no .toc or .xml loads."
    },
    {
      "id": "addon-EternionResourceBars",
      "kind": "addon",
      "url": "addons/EternionResourceBars.zip",
      "dest": "Interface/AddOns/EternionResourceBars",
      "unpack": "zip",
      "replace_dir": true,
      "size": 14034,
      "sha256": "9e6f7dfe0f09c9840d25c95f4bd167769c6caeedd0d1b0675a25d449bad46a77",
      "required": false,
      "default_on": true,
      "note": "per-class resource HUD for the 8 custom classes"
    },
    {
      "id": "addon-EternionTicketUI",
      "kind": "addon",
      "url": "addons/EternionTicketUI.zip",
      "dest": "Interface/AddOns/EternionTicketUI",
      "unpack": "zip",
      "replace_dir": true,
      "size": 11804,
      "sha256": "6de19855d0f74157226ae7c4ae75979a1f408193c2d36961633957b36bf9ef31",
      "required": false,
      "default_on": true,
      "note": "the bug-report channel for a playtest; has a server-side counterpart"
    },
    {
      "id": "addon-EternionGameMenu",
      "kind": "addon",
      "url": "addons/EternionGameMenu.zip",
      "dest": "Interface/AddOns/EternionGameMenu",
      "unpack": "zip",
      "replace_dir": true,
      "size": 13155,
      "sha256": "3acbb8d71389ea640c0171f19ee0cbfb8206142e9447c31525ed5ecc529afbb1",
      "required": false,
      "default_on": true,
      "note": "Discord + Help/Report Bug buttons"
    },
    {
      "id": "addon-EternionNamePlates",
      "kind": "addon",
      "url": "addons/EternionNamePlates.zip",
      "dest": "Interface/AddOns/EternionNamePlates",
      "unpack": "zip",
      "replace_dir": true,
      "size": 6401,
      "sha256": "0c16de43af62071deb894f9bc4d6a0aa3340ffab64a05cbfab364d854dbf96f5",
      "required": false,
      "default_on": true,
      "note": ""
    },
    {
      "id": "addon-EternionRaidFrames",
      "kind": "addon",
      "url": "addons/EternionRaidFrames.zip",
      "dest": "Interface/AddOns/EternionRaidFrames",
      "unpack": "zip",
      "replace_dir": true,
      "size": 7051,
      "sha256": "beef96971ec7533c67c2aa47769740b2f210e9dce592008762143c8050d8ac43",
      "required": false,
      "default_on": true,
      "note": ""
    },
    {
      "id": "addon-EternionInspectUI",
      "kind": "addon",
      "url": "addons/EternionInspectUI.zip",
      "dest": "Interface/AddOns/EternionInspectUI",
      "unpack": "zip",
      "replace_dir": true,
      "size": 5810,
      "sha256": "90c8d09a963eae72ca67f6083db1ad0f63a2d5dfe5b87477820dc097212b24d5",
      "required": false,
      "default_on": true,
      "note": ""
    },
    {
      "id": "addon-Eternion_DeathRecap",
      "kind": "addon",
      "url": "addons/Eternion_DeathRecap.zip",
      "dest": "Interface/AddOns/Eternion_DeathRecap",
      "unpack": "zip",
      "replace_dir": true,
      "size": 6678,
      "sha256": "af27b516c86b16558bcaebda56e92a2f92a79621e879188d814afa4cbac13a4f",
      "required": false,
      "default_on": true,
      "note": ""
    }
  ],
  "post_install": {
    "clear_paths": [
      "Cache/WDB"
    ],
    "quarantine_foreign_patches": true,
    "quarantine_dir": "Data/_disabled_by_HasteLauncher",
    "foreign_patch_whitelist": [
      "patch.MPQ",
      "patch-2.MPQ",
      "patch-3.MPQ",
      "patch-C.MPQ",
      "patch-H.MPQ",
      "patch-S.MPQ"
    ]
  },
  "total_download_bytes": 419166830
}
