From 9ac73f01166008451d100c261d92e03523295f09 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 09:51:39 +0000 Subject: [PATCH 01/68] backend: import mining pool metadata from a bundled first-party file Enabling the database made the backend exit at startup. updatePoolsJson fetches the pools-v2.json sha from GitHub, that fetch must not happen at runtime here, so currentSha stayed null and index.ts aborted before it could serve anything. Bundle the pool list in the repository and identify it by the git blob hash of its own bytes. That is deterministic, needs no network, and is directly comparable with the sha already stored in the state table, so a redeploy with unchanged pool data does no work. The bundled file is the default now; the GitHub URLs stay for anyone who wants them. Co-Authored-By: Claude Opus 5 --- backend/mempool-config.sample.json | 1 + backend/package.json | 2 +- .../__fixtures__/mempool-config.template.json | 1 + backend/src/__tests__/config.test.ts | 1 + backend/src/config.ts | 2 + backend/src/tasks/pools-updater.ts | 90 + backend/src/tasks/pools/pools-v2.json | 1839 +++++++++++++++++ docker/backend/mempool-config.json | 1 + docker/backend/start.sh | 2 + 9 files changed, 1938 insertions(+), 1 deletion(-) create mode 100644 backend/src/tasks/pools/pools-v2.json diff --git a/backend/mempool-config.sample.json b/backend/mempool-config.sample.json index 39349201309..c8d811f86df 100644 --- a/backend/mempool-config.sample.json +++ b/backend/mempool-config.sample.json @@ -28,6 +28,7 @@ "AUTOMATIC_POOLS_UPDATE": false, "POOLS_JSON_URL": "https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json", "POOLS_JSON_TREE_URL": "https://api.github.com/repos/mempool/mining-pools/git/trees/master", + "POOLS_JSON_FILE": "tasks/pools/pools-v2.json", "POOLS_UPDATE_DELAY": 604800, "AUDIT": false, "RUST_GBT": true, diff --git a/backend/package.json b/backend/package.json index 35b9f7e6241..3411f4cd646 100644 --- a/backend/package.json +++ b/backend/package.json @@ -24,7 +24,7 @@ "tsc": "./node_modules/typescript/bin/tsc -p tsconfig.build.json", "build": "npm run tsc && npm run create-resources", "clean": "rm -rf ./dist/ ./node_modules/ ./package/ ./rust-gbt/", - "create-resources": "cp ./src/tasks/price-feeds/mtgox-weekly.json ./dist/tasks && node dist/api/fetch-version.js", + "create-resources": "mkdir -p ./dist/tasks/pools && cp ./src/tasks/price-feeds/mtgox-weekly.json ./dist/tasks && cp ./src/tasks/pools/pools-v2.json ./dist/tasks/pools && node dist/api/fetch-version.js", "package": "./npm_package.sh", "package-rm-build-deps": "./npm_package_rm_build_deps.sh", "preinstall": "cd ../rust/gbt && npm run build-release && npm run to-backend", diff --git a/backend/src/__fixtures__/mempool-config.template.json b/backend/src/__fixtures__/mempool-config.template.json index c169caf6c32..7f56f841fdf 100644 --- a/backend/src/__fixtures__/mempool-config.template.json +++ b/backend/src/__fixtures__/mempool-config.template.json @@ -29,6 +29,7 @@ "INDEXING_BLOCKS_AMOUNT": 14, "POOLS_JSON_TREE_URL": "__MEMPOOL_POOLS_JSON_TREE_URL__", "POOLS_JSON_URL": "__MEMPOOL_POOLS_JSON_URL__", + "POOLS_JSON_FILE": "__MEMPOOL_POOLS_JSON_FILE__", "POOLS_UPDATE_DELAY": 604800, "AUDIT": true, "RUST_GBT": false, diff --git a/backend/src/__tests__/config.test.ts b/backend/src/__tests__/config.test.ts index 7b7b6b4da10..d9ed56321a2 100644 --- a/backend/src/__tests__/config.test.ts +++ b/backend/src/__tests__/config.test.ts @@ -42,6 +42,7 @@ describe('Mempool Backend Config', () => { STDOUT_LOG_MIN_PRIORITY: 'debug', POOLS_JSON_TREE_URL: 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', POOLS_JSON_URL: 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', + POOLS_JSON_FILE: 'tasks/pools/pools-v2.json', POOLS_UPDATE_DELAY: 604800, AUDIT: false, RUST_GBT: true, diff --git a/backend/src/config.ts b/backend/src/config.ts index e0396a1d681..2f31e694903 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -33,6 +33,7 @@ interface IConfig { AUTOMATIC_POOLS_UPDATE: boolean; POOLS_JSON_URL: string, POOLS_JSON_TREE_URL: string, + POOLS_JSON_FILE: string, POOLS_UPDATE_DELAY: number, AUDIT: boolean; RUST_GBT: boolean; @@ -208,6 +209,7 @@ const defaults: IConfig = { 'AUTOMATIC_POOLS_UPDATE': false, 'POOLS_JSON_URL': 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', 'POOLS_JSON_TREE_URL': 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', + 'POOLS_JSON_FILE': 'tasks/pools/pools-v2.json', 'POOLS_UPDATE_DELAY': 604800, // in seconds, default is one week 'AUDIT': false, 'RUST_GBT': true, diff --git a/backend/src/tasks/pools-updater.ts b/backend/src/tasks/pools-updater.ts index a3933b7dbb7..c2f25944fab 100644 --- a/backend/src/tasks/pools-updater.ts +++ b/backend/src/tasks/pools-updater.ts @@ -6,6 +6,9 @@ import backendInfo from '../api/backend-info'; import logger from '../logger'; import { SocksProxyAgent } from 'socks-proxy-agent'; import * as https from 'https'; +import * as crypto from 'crypto'; +import * as fs from 'fs'; +import * as path from 'path'; import { Common } from '../api/common'; /** @@ -18,6 +21,7 @@ class PoolsUpdater { currentSha: string | null = null; poolsUrl: string = config.MEMPOOL.POOLS_JSON_URL; treeUrl: string = config.MEMPOOL.POOLS_JSON_TREE_URL; + poolsFile: string = config.MEMPOOL.POOLS_JSON_FILE; /** @asyncSafe */ public async $startService(): Promise { @@ -31,6 +35,83 @@ class PoolsUpdater { } } + /** + * Resolves the bundled pools file against the compiled backend directory, so + * the same relative path works from `src` under ts-node and from `dist` in + * production. An absolute path is used as given. + */ + private resolvePoolsFile(): string { + return path.isAbsolute(this.poolsFile) + ? this.poolsFile + : path.resolve(__dirname, '..', this.poolsFile); + } + + /** + * Imports mining pool metadata from the bundled first-party file instead of + * fetching it from a third party at runtime. The identifier is the git blob + * hash of the file contents, so it is deterministic, offline, and directly + * comparable with the sha the database already stores. + * @asyncSafe + */ + private async $updatePoolsFromFile(): Promise { + const file = this.resolvePoolsFile(); + let raw: Buffer; + try { + raw = fs.readFileSync(file); + } catch (e) { + logger.err(`Cannot read the bundled mining pools file ${file}. Reason: ` + (e instanceof Error ? e.message : e), this.tag); + return; + } + + let poolsJson: any; + try { + poolsJson = JSON.parse(raw.toString('utf8')); + } catch (e) { + logger.err(`The bundled mining pools file ${file} is not valid JSON.`, this.tag); + return; + } + if (!Array.isArray(poolsJson) || poolsJson.length === 0) { + logger.err(`The bundled mining pools file ${file} must hold a non-empty array of pools.`, this.tag); + return; + } + + const fileSha = crypto.createHash('sha1') + .update(Buffer.from(`blob ${raw.length}`, 'utf8')) + .update(Buffer.alloc(1)) + .update(raw) + .digest('hex'); + + if (config.DATABASE.ENABLED === true) { + this.currentSha = await this.getShaFromDb(); + } + if (this.currentSha === fileSha) { + return; + } + + poolsParser.setMiningPools(poolsJson); + + if (config.DATABASE.ENABLED === false) { + this.currentSha = fileSha; + logger.info(`Mining pools imported from ${file} (${fileSha}), no database`, this.tag); + return; + } + + try { + await DB.query('START TRANSACTION;'); + await this.updateDBSha(fileSha); + await poolsParser.migratePoolsJson(); + await DB.query('COMMIT;'); + } catch (e) { + logger.err(`Could not migrate mining pools, rolling back. Exception: ${JSON.stringify(e)}`, this.tag); + await DB.query('ROLLBACK;'); + // The sha was optimistically set before the write; the rollback undid it, + // so clear it again rather than let startup believe pools are loaded. + this.currentSha = null; + return; + } + logger.info(`Mining pools imported from ${file} (${fileSha})`, this.tag); + } + /** @asyncSafe */ public async updatePoolsJson(): Promise { if (['mainnet', 'testnet', 'signet', 'testnet4', 'regtest'].includes(config.MEMPOOL.NETWORK) === false || @@ -46,6 +127,15 @@ class PoolsUpdater { this.lastRun = now; + if (this.poolsFile) { + try { + await this.$updatePoolsFromFile(); + } catch (e) { + logger.err(`PoolsUpdater failed to import the bundled pools file. Exception: ${JSON.stringify(e)}`, this.tag); + } + return; + } + try { if (config.DATABASE.ENABLED === true) { this.currentSha = await this.getShaFromDb(); diff --git a/backend/src/tasks/pools/pools-v2.json b/backend/src/tasks/pools/pools-v2.json new file mode 100644 index 00000000000..049f24a32d8 --- /dev/null +++ b/backend/src/tasks/pools/pools-v2.json @@ -0,0 +1,1839 @@ +[ + { + "id": 1, + "name": "BlockFills", + "addresses": [ + "1PzVut5X6Nx7Mv4JHHKPtVM9Jr9LJ4Rbry" + ], + "tags": [ + "/BlockfillsPool/" + ], + "link": "https://www.blockfills.com/mining" + }, + { + "id": 2, + "name": "ULTIMUSPOOL", + "addresses": [ + "1EMVSMe1VJUuqv7D7SFzctnVXk4KdjXATi", + "3C9sAKXrBVpJVe3b738yik4LPHpPmceBgd" + ], + "tags": [ + "/ultimus/" + ], + "link": "https://www.ultimuspool.com" + }, + { + "id": 3, + "name": "Terra Pool", + "addresses": [ + "32P5KVSbZYAkVmSHxDd2oBXaSk372rbV7L", + "3Qqp7LwxmSjPwRaKkDToysJsM3xA4ThqFk", + "bc1q39dled8an7enuxtmjql3pk7ny8kzvsxhd924sl" + ], + "tags": [ + "terrapool.io", + "Validated with Clean Energy" + ], + "link": "https://terrapool.io" + }, + { + "id": 4, + "name": "Luxor", + "addresses": [ + "1MkCDCzHpBsYQivp8MxjY5AkTGG1f2baoe", + "39bitUyBcUu3y3hRTtYprKbTp712t4ZWqK", + "32BfKjhByDSxx3BM5vUkQ3NQq9csZR6nt6" + ], + "tags": [ + "/LUXOR/", + "Luxor Tech" + ], + "link": "https://mining.luxor.tech" + }, + { + "id": 5, + "name": "1THash", + "addresses": [ + "147SwRQdpCfj5p8PnfsXV2SsVVpVcz3aPq", + "15vgygQ7ZsWdvZpctmTZK4673QBHsos6Sh" + ], + "tags": [ + "/1THash&58COIN/", + "/1THash/" + ], + "link": "https://www.1thash.top" + }, + { + "id": 6, + "name": "BTC.com", + "addresses": [ + "1Bf9sZvBHPFGVPX71WX2njhd1NXKv5y7v5", + "34qkc2iac6RsyxZVfyE2S5U5WcRsbg2dpK", + "3EhLZarJUNSfV6TWMZY1Nh5mi3FMsdHa5U", + "3NA8hsjfdgVkmmVS9moHmkZsVCoLxUkvvv", + "bc1qjl8uwezzlech723lpnyuza0h2cdkvxvh54v3dn" + ], + "tags": [ + "/BTC.COM/", + "/BTC.com/", + "btccom" + ], + "link": "https://pool.btc.com" + }, + { + "id": 7, + "name": "Bitfarms", + "addresses": [ + "3GvEGtnvgeBJ3p3EpdZhvUkxY4pDARkbjd" + ], + "tags": [ + "BITFARMS" + ], + "link": "https://www.bitfarms.io" + }, + { + "id": 8, + "name": "Huobi.pool", + "addresses": [ + "18Zcyxqna6h7Z7bRjhKvGpr8HSfieQWXqj", + "1EepjXgvWUoRyNvuLSAxjiqZ1QqKGDANLW", + "1MvYASoHjqynMaMnP7SBmenyEWiLsTqoU6", + "3HuobiNg2wHjdPU2mQczL9on8WF7hZmaGd" + ], + "tags": [ + "/HuoBi/", + "/Huobi/" + ], + "link": "https://www.hpt.com" + }, + { + "id": 9, + "name": "WAYI.CN", + "addresses": [], + "tags": [ + "/E2M & BTC.TOP/" + ], + "link": "https://www.easy2mine.com" + }, + { + "id": 10, + "name": "CanoePool", + "addresses": [ + "1GP8eWArgpwRum76saJS4cZKCHWJHs9PQo" + ], + "tags": [ + "/CANOE/", + "/canoepool/" + ], + "link": "https://btc.canoepool.com" + }, + { + "id": 11, + "name": "BTC.TOP", + "addresses": [ + "1Hz96kJKF2HLPGY15JWLB5m9qGNxvt8tHJ" + ], + "tags": [ + "/BTC.TOP/" + ], + "link": "https://btc.top" + }, + { + "id": 12, + "name": "Bitcoin.com", + "addresses": [], + "tags": [ + "pool.bitcoin.com" + ], + "link": "https://www.bitcoin.com" + }, + { + "id": 13, + "name": "175btc", + "addresses": [], + "tags": [ + "Mined By 175btc.com" + ], + "link": "https://www.175btc.com" + }, + { + "id": 14, + "name": "GBMiners", + "addresses": [], + "tags": [ + "/mined by gbminers/" + ], + "link": "https://gbminers.com" + }, + { + "id": 15, + "name": "A-XBT", + "addresses": [ + "1MFsp2txCPwMMBJjNNeKaduGGs8Wi1Ce7X" + ], + "tags": [ + "/A-XBT/" + ], + "link": "https://www.a-xbt.com" + }, + { + "id": 16, + "name": "ASICMiner", + "addresses": [], + "tags": [ + "ASICMiner" + ], + "link": "https://www.asicminer.co" + }, + { + "id": 17, + "name": "BitMinter", + "addresses": [ + "19PkHafEN18mquJ9ChwZt5YEFoCdPP5vYB" + ], + "tags": [ + "BitMinter" + ], + "link": "https://bitminter.com" + }, + { + "id": 18, + "name": "BitcoinRussia", + "addresses": [ + "14R2r9FkyDmyxGB9xUVwVLdgsX9YfdVamk", + "165GCEAx81wce33FWEnPCRhdjcXCrBJdKn" + ], + "tags": [ + "/Bitcoin-Russia.ru/" + ], + "link": "https://bitcoin-russia.ru" + }, + { + "id": 19, + "name": "BTCServ", + "addresses": [], + "tags": [ + "btcserv" + ], + "link": "https://btcserv.net" + }, + { + "id": 20, + "name": "simplecoin.us", + "addresses": [], + "tags": [ + "simplecoin" + ], + "link": "https://simplecoin.us" + }, + { + "id": 21, + "name": "BTC Guild", + "addresses": [], + "tags": [ + "BTC Guild" + ], + "link": "https://www.btcguild.com" + }, + { + "id": 22, + "name": "Eligius", + "addresses": [], + "tags": [ + "Eligius" + ], + "link": "https://eligius.st" + }, + { + "id": 23, + "name": "OzCoin", + "addresses": [], + "tags": [ + "ozco.in", + "ozcoin" + ], + "link": "https://ozcoin.net" + }, + { + "id": 24, + "name": "EclipseMC", + "addresses": [ + "15xiShqUqerfjFdyfgBH1K7Gwp6cbYmsTW", + "18M9o2mXNjNR96yKe7eyY6pfP6Nx4Nso3d" + ], + "tags": [ + "EMC ", + "EMC:" + ], + "link": "https://eclipsemc.com" + }, + { + "id": 25, + "name": "MaxBTC", + "addresses": [], + "tags": [ + "MaxBTC" + ], + "link": "https://maxbtc.com" + }, + { + "id": 26, + "name": "TripleMining", + "addresses": [], + "tags": [ + "Triplemining.com", + "triplemining" + ], + "link": "https://www.triplemining.com" + }, + { + "id": 27, + "name": "CoinLab", + "addresses": [], + "tags": [ + "CoinLab" + ], + "link": "https://coinlab.com" + }, + { + "id": 28, + "name": "50BTC", + "addresses": [], + "tags": [ + "50BTC" + ], + "link": "https://www.50btc.com" + }, + { + "id": 29, + "name": "GHash.IO", + "addresses": [ + "1CjPR7Z5ZSyWk6WtXvSFgkptmpoi4UM9BC" + ], + "tags": [ + "ghash.io" + ], + "link": "https://ghash.io" + }, + { + "id": 30, + "name": "ST Mining Corp", + "addresses": [], + "tags": [ + "st mining corp" + ], + "link": "https://bitcointalk.org/index.php?topic=77000.msg3207708#msg3207708" + }, + { + "id": 31, + "name": "Bitparking", + "addresses": [], + "tags": [ + "bitparking" + ], + "link": "https://mmpool.bitparking.com" + }, + { + "id": 32, + "name": "mmpool", + "addresses": [], + "tags": [ + "mmpool" + ], + "link": "https://mmpool.org/pool" + }, + { + "id": 33, + "name": "Polmine", + "addresses": [ + "13vWXwzNF5Ef9SUXNTdr7de7MqiV4G1gnL", + "16cv7wyeG6RRqhvJpY21CnsjxuKj2gAoK2", + "17kkmDx8eSwj2JTTULb3HkJhCmexfysExz", + "1AajKXkaq2DsnDmP8ZPTrE5gH1HFo1x3AU", + "1JrYhdhP2jCY6JwuVzdk9jUwc4pctcSes7", + "1Nsvmnv8VcTMD643xMYAo35Aco3XA5YPpe" + ], + "tags": [ + "by polmine.pl", + "bypmneU" + ], + "link": "https://polmine.pl" + }, + { + "id": 34, + "name": "KnCMiner", + "addresses": [], + "tags": [ + "KnCMiner" + ], + "link": "https://portal.kncminer.com/pool" + }, + { + "id": 35, + "name": "Bitalo", + "addresses": [ + "1HTejfsPZQGi3afCMEZTn2xdmoNzp13n3F" + ], + "tags": [ + "Bitalo" + ], + "link": "https://bitalo.com/mining" + }, + { + "id": 36, + "name": "F2Pool", + "addresses": [ + "1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY", + "bc1qf274x7penhcd8hsv3jcmwa5xxzjl2a6pa9pxwm" + ], + "tags": [ + "七彩神仙鱼", + "F2Pool", + "🐟" + ], + "link": "https://www.f2pool.com" + }, + { + "id": 37, + "name": "HHTT", + "addresses": [], + "tags": [ + "HHTT" + ], + "link": "https://hhtt.1209k.com" + }, + { + "id": 38, + "name": "MegaBigPower", + "addresses": [ + "1K7znxRfkS8R1hcmyMvHDum1hAQreS4VQ4" + ], + "tags": [ + "megabigpower.com" + ], + "link": "https://megabigpower.com" + }, + { + "id": 39, + "name": "Mt Red", + "addresses": [], + "tags": [ + "/mtred/" + ], + "link": "https://mtred.com" + }, + { + "id": 40, + "name": "NMCbit", + "addresses": [], + "tags": [ + "nmcbit.com" + ], + "link": "https://nmcbit.com" + }, + { + "id": 41, + "name": "Yourbtc.net", + "addresses": [], + "tags": [ + "yourbtc.net" + ], + "link": "https://yourbtc.net" + }, + { + "id": 42, + "name": "Give Me Coins", + "addresses": [], + "tags": [ + "Give-Me-Coins" + ], + "link": "https://give-me-coins.com" + }, + { + "id": 43, + "name": "Braiins Pool", + "addresses": [ + "1AqTMY7kmHZxBuLUR5wJjPFUvqGs23sesr", + "1CK6KHY6MHgYvmRQ4PAafKYDrg1ejbH1cE" + ], + "tags": [ + "/slush/" + ], + "link": "https://braiins.com/pool" + }, + { + "id": 44, + "name": "AntPool", + "addresses": [ + "12dRugNcdxK39288NjcDV4GX7rMsKCGn6B", + "15kiNKfDWsq7UsPg87UwxA8rVvWAjzRkYS", + "16MdTdqmXusauybtXTmFEW4GNFPPgGxQYE", + "16kUc5B48qnASbxeZTisCqTNx6G3DPXuKn", + "17gVZssumiJqYMCHozHKXGyaAvyu6NCX6V", + "1AJQ3jXhUF8WiisEcuVd8Xmfq4QJ7n1SdL", + "1B7ZBX2C39b26M9chHLURGSFTJA6DDQkZv", + "1BWW3pg5jb6rxebrNeo9TATarwJ1rthnoe", + "1CBqo1w3hmm9SCmbu2Yg6Ls4uLfkUqZJsx", + "1CZHhV67Qos4xXb8uYqvAGjK8Wq52woPi5", + "1CyB8GJNEsNVXtPutB36nrDY3fMXBTzXSX", + "1D4UZG4qo8bF1MuZHSEyBHRZaxT8inatXS", + "1D9jw3QHNankXxtcGVihsDK7Z7THN6j7Pg", + "1DDXyKUT6q3H9e5QXm2Gv6BNNWgztFG55g", + "1DQaDTefKPjHz3beLuo8KHRZF9t2Sc6foP", + "1Dek9ArRHb9tyWb9gaaX8SWmkfi5V7U5Y6", + "1DyR7HPQWjM6Zrnk7SzHVY2GEpXRGNNH9o", + "1FdJkPdpXtK3t5utZHJAop3saLZWfPfgak", + "1FrHkVsW7csAYYaRbUUcrKSmv91hcQnsqQ", + "1GEG1JR81jvUXs7TMAuo3SPBHZrpJijcjt", + "1GRcX882sdBYCAWyG99iF2oz7j3nYzXhLM", + "1GT2N4dCufvbnTKMbS61QrQPN4SexCAFiH", + "1Gp7iCzDGMZiV55Kt8uKsux6VyoHe1aJaN", + "1H3u6R813MHGYhmGW6v86EYYriawRtACYD", + "1H6ckqNWikmVT3wpN3X1BQ6b156Xc9nT2L", + "1JBVrhSSDrZrRmm4RnoWouqgGGqJMvWHi8", + "1JwUDWVSbAY5NeCBJhxQk1E8AfETfZuPj4", + "1K8PNogxBZ6ts532DZnzxdbjgzJLjLdXqz", + "1KmgBTL7cFmFFYTD7HcdkMcZXRcTkh2WwS", + "1LTGvTjDxiy5S9YcKEE9Lb7xSpZcPSqinw", + "1MiQrT5sEKTUGNMbd9WS3yPPkSjWdpYA2r", + "1NS4gbx1G2D5rc9PnvVsPys12nKxGiQg72", + "1Nh7uHdvY6fNwtQtM1G5EZAFPLC33B59rB", + "1Pzf7qT7bBGouvnjRvtRD8VhTyqjX1NrJT", + "1Sjj2cPC3rTWcSTEYDeu2f3BavLosog4T", + "1jLVpwtNMfXWaHY4eiLDmGuBxokYLgv1X", + "3FaYVQF6wCMUB9NCeRe4tUp1zZx8qqM7H1" + ], + "tags": [ + "/AntPool/", + "Mined By AntPool", + "Mined by AntPool" + ], + "link": "https://www.antpool.com" + }, + { + "id": 45, + "name": "MultiCoin.co", + "addresses": [], + "tags": [ + "Mined by MultiCoin.co" + ], + "link": "https://multicoin.co" + }, + { + "id": 46, + "name": "bcpool.io", + "addresses": [], + "tags": [ + "bcpool.io" + ], + "link": "https://bcpool.io" + }, + { + "id": 47, + "name": "Cointerra", + "addresses": [ + "1BX5YoLwvqzvVwSrdD4dC32vbouHQn2tuF" + ], + "tags": [ + "cointerra" + ], + "link": "https://cointerra.com" + }, + { + "id": 48, + "name": "KanoPool", + "addresses": [], + "tags": [ + "Kano" + ], + "link": "https://kano.is" + }, + { + "id": 49, + "name": "Solo CK", + "addresses": [], + "tags": [ + "/solo.ckpool.org/" + ], + "link": "https://solo.ckpool.org" + }, + { + "id": 50, + "name": "CKPool", + "addresses": [], + "tags": [ + "/ckpool.org/" + ], + "link": "https://ckpool.org" + }, + { + "id": 51, + "name": "NiceHash", + "addresses": [], + "tags": [ + "/NiceHashSolo", + "/NiceHash/", + "/NiceHashMining/" + ], + "link": "https://www.nicehash.com" + }, + { + "id": 52, + "name": "BitClub", + "addresses": [ + "155fzsEBHy9Ri2bMQ8uuuR3tv1YzcDywd4" + ], + "tags": [ + "/BitClub Network/" + ], + "link": "https://bitclubpool.com" + }, + { + "id": 53, + "name": "Bitcoin Affiliate Network", + "addresses": [], + "tags": [ + "bitcoinaffiliatenetwork.com" + ], + "link": "https://mining.bitcoinaffiliatenetwork.com" + }, + { + "id": 54, + "name": "BTCC", + "addresses": [ + "152f1muMCNa7goXYhYAQC61hxEgGacmncB" + ], + "tags": [ + "/BTCC/", + "BTCChina Pool", + "BTCChina.com", + "btcchina.com" + ], + "link": "https://pool.btcc.com" + }, + { + "id": 55, + "name": "BWPool", + "addresses": [ + "1JLRXD8rjRgQtTS9MvfQALfHgGWau9L9ky" + ], + "tags": [ + "BW Pool", + "BWPool" + ], + "link": "https://bwpool.net" + }, + { + "id": 56, + "name": "EXX&BW", + "addresses": [], + "tags": [ + "xbtc.exx.com&bw.com" + ], + "link": "https://xbtc.exx.com" + }, + { + "id": 57, + "name": "Bitsolo", + "addresses": [ + "18zRehBcA2YkYvsC7dfQiFJNyjmWvXsvon" + ], + "tags": [ + "Bitsolo Pool" + ], + "link": "https://bitsolo.net" + }, + { + "id": 58, + "name": "BitFury", + "addresses": [ + "14yfxkcpHnju97pecpM7fjuTkVdtbkcfE6", + "1AcAj9p6zJn4xLXdvmdiuPCtY7YkBPTAJo" + ], + "tags": [ + "/BitFury/", + "/Bitfury/" + ], + "link": "https://bitfury.com" + }, + { + "id": 59, + "name": "21 Inc.", + "addresses": [ + "15rQXUSBQRubShPpiJfDLxmwS8ze2RUm4z", + "1CdJi2xRTXJF6CEJqNHYyQDNEcM3X7fUhD", + "1GC6HxDvnchDdb5cGkFXsJMZBFRsKAXfwi" + ], + "tags": [ + "/pool34/" + ], + "link": "https://21.co" + }, + { + "id": 60, + "name": "digitalBTC", + "addresses": [ + "1MimPd6LrPKGftPRHWdfk8S3KYBfN4ELnD" + ], + "tags": [ + "/agentD/" + ], + "link": "https://digitalbtc.com" + }, + { + "id": 61, + "name": "8baochi", + "addresses": [ + "1Hk9gD8xMo2XBUhE73y5zXEM8xqgffTB5f" + ], + "tags": [ + "/八宝池 8baochi.com/" + ], + "link": "https://8baochi.com" + }, + { + "id": 62, + "name": "myBTCcoin Pool", + "addresses": [ + "151T7r1MhizzJV6dskzzUkUdr7V8JxV2Dx" + ], + "tags": [ + "myBTCcoin Pool" + ], + "link": "https://mybtccoin.com" + }, + { + "id": 63, + "name": "TBDice", + "addresses": [ + "1BUiW44WuJ2jiJgXiyxJVFMN8bc1GLdXRk" + ], + "tags": [ + "TBDice" + ], + "link": "https://tbdice.org" + }, + { + "id": 64, + "name": "HASHPOOL", + "addresses": [], + "tags": [ + "HASHPOOL" + ], + "link": "https://hashpool.com" + }, + { + "id": 65, + "name": "Nexious", + "addresses": [ + "1GBo1f2tzVx5jScV9kJXPUP9RjvYXuNzV7" + ], + "tags": [ + "/Nexious/" + ], + "link": "https://nexious.com" + }, + { + "id": 66, + "name": "Bravo Mining", + "addresses": [], + "tags": [ + "/bravo-mining/" + ], + "link": "https://www.bravo-mining.com" + }, + { + "id": 67, + "name": "HotPool", + "addresses": [ + "17judvK4AC2M6KhaBbAEGw8CTKc9Pg8wup" + ], + "tags": [ + "/HotPool/" + ], + "link": "https://hotpool.co" + }, + { + "id": 68, + "name": "OKExPool", + "addresses": [], + "tags": [ + "/www.okex.com/" + ], + "link": "https://www.okex.com" + }, + { + "id": 69, + "name": "BCMonster", + "addresses": [ + "1E18BNyobcoiejcDYAz5SjbrzifNDEpM88" + ], + "tags": [ + "/BCMonster/" + ], + "link": "https://www.bcmonster.com" + }, + { + "id": 70, + "name": "1Hash", + "addresses": [ + "1F1xcRt8H8Wa623KqmkEontwAAVqDSAWCV" + ], + "tags": [ + "Mined by 1hash.com" + ], + "link": "https://www.1hash.com" + }, + { + "id": 71, + "name": "Bixin", + "addresses": [ + "13hQVEstgo4iPQZv9C7VELnLWF7UWtF4Q3", + "1KsFhYKLs8qb1GHqrPxHoywNQpet2CtP9t" + ], + "tags": [ + "/Bixin/", + "/HaoBTC/", + "HAOBTC" + ], + "link": "https://haopool.com" + }, + { + "id": 72, + "name": "TATMAS Pool", + "addresses": [], + "tags": [ + "/ViaBTC/TATMAS Pool/" + ], + "link": "https://tmsminer.com" + }, + { + "id": 73, + "name": "ViaBTC", + "addresses": [], + "tags": [ + "/ViaBTC/", + "viabtc.com deploy" + ], + "link": "https://viabtc.com" + }, + { + "id": 74, + "name": "ConnectBTC", + "addresses": [ + "1KPQkehgYAqwiC6UCcbojM3mbGjURrQJF2" + ], + "tags": [ + "/ConnectBTC - Home for Miners/" + ], + "link": "https://www.connectbtc.com" + }, + { + "id": 75, + "name": "BATPOOL", + "addresses": [ + "167ApWWxUSFQmz2jdz9xop3oAKdLejvMML" + ], + "tags": [ + "/BATPOOL/" + ], + "link": "https://www.batpool.com" + }, + { + "id": 76, + "name": "Waterhole", + "addresses": [ + "1FLH1SoLv4U68yUERhDiWzrJn5TggMqkaZ" + ], + "tags": [ + "/WATERHOLE.IO/" + ], + "link": "https://btc.waterhole.io" + }, + { + "id": 77, + "name": "DCExploration", + "addresses": [], + "tags": [ + "/DCExploration/" + ], + "link": "https://dcexploration.cn" + }, + { + "id": 78, + "name": "DCEX", + "addresses": [], + "tags": [ + "/DCEX/" + ], + "link": "https://dcexploration.cn" + }, + { + "id": 79, + "name": "BTPOOL", + "addresses": [], + "tags": [ + "/BTPOOL/" + ], + "link": "" + }, + { + "id": 80, + "name": "58COIN", + "addresses": [ + "199EDJoCpqV672qESEkfFgEqNT1iR2gj3t" + ], + "tags": [ + "/58coin.com/" + ], + "link": "https://www.58coin.com" + }, + { + "id": 81, + "name": "Bitcoin India", + "addresses": [], + "tags": [ + "/Bitcoin-India/" + ], + "link": "https://bitcoin-india.org" + }, + { + "id": 82, + "name": "shawnp0wers", + "addresses": [ + "12znnESiJ3bgCLftwwrg9wzQKN8fJtoBDa", + "18HEMWFXM9UGPVZHUMdBPD3CMFWYn2NPRX" + ], + "tags": [ + "--Nug--" + ], + "link": "https://www.brainofshawn.com" + }, + { + "id": 83, + "name": "PHash.IO", + "addresses": [], + "tags": [ + "/phash.cn/", + "/phash.io/" + ], + "link": "https://phash.io" + }, + { + "id": 84, + "name": "RigPool", + "addresses": [ + "1JpKmtspBJQVXK67DJP64eBJcAPhDvJ9Er" + ], + "tags": [ + "/RigPool.com/" + ], + "link": "https://www.rigpool.com" + }, + { + "id": 85, + "name": "HAOZHUZHU", + "addresses": [ + "19qa95rTbDziNCS9EexUbh2hVY4viUU9tt" + ], + "tags": [ + "/haozhuzhu/" + ], + "link": "https://haozhuzhu.com" + }, + { + "id": 86, + "name": "7pool", + "addresses": [ + "1JLc3JxvpdL1g5zoX8sKLP4BkJQiwnJftU" + ], + "tags": [ + "/$Mined by 7pool.com/" + ], + "link": "https://7pool.com" + }, + { + "id": 87, + "name": "MiningKings", + "addresses": [ + "1ApE99VM5RJzMRRtwd2JMgmkGabtJqoMEz", + "1EowSPumj9D9AMTpE64Jr7vT3PJDNopVcz", + "1KGbsDDAgJN2HDNBjmMHp9828qATo5B9c9" + ], + "tags": [ + "/mined by poopbut/" + ], + "link": "https://miningkings.com" + }, + { + "id": 88, + "name": "HashBX", + "addresses": [], + "tags": [ + "/Mined by HashBX.io/" + ], + "link": "https://hashbx.io" + }, + { + "id": 89, + "name": "DPOOL", + "addresses": [ + "1ACAgPuFFidYzPMXbiKptSrwT74Dg8hq2v" + ], + "tags": [ + "/DPOOL.TOP/" + ], + "link": "https://www.dpool.top" + }, + { + "id": 90, + "name": "Rawpool", + "addresses": [ + "1FbBbv5oYqFKwiPm4CAqvAy8345n8AQ74b", + "35y82tEPDa2wm6tzkEacMG8GPPW7zbMj83", + "3CLigLYNkrtoNgNcUwTaKoUSHCwr9W851W", + "3QYvfQoG9Gs9Vfvbpw6947muSqhoGagvF6", + "bc1q8ej2g5uxdsg0jwl0mpl606qfjxgkyv3p29yf37", + "bc1qnnl503n04cqacpwvhr89qr70metxr79ht3n380", + "bc1qru8mtv3e3u7ms6ecjmwgeakdakclemvhnw00q9", + "bc1qwlrsvgtn99rqp3fgaxq6f6jkgms80rnej0a8tc" + ], + "tags": [ + "/Rawpool.com/" + ], + "link": "https://www.rawpool.com" + }, + { + "id": 91, + "name": "haominer", + "addresses": [], + "tags": [ + "/haominer/" + ], + "link": "https://haominer.com" + }, + { + "id": 92, + "name": "Helix", + "addresses": [], + "tags": [ + "/Helix/" + ], + "link": "" + }, + { + "id": 93, + "name": "Bitcoin-Ukraine", + "addresses": [], + "tags": [ + "/Bitcoin-Ukraine.com.ua/" + ], + "link": "https://bitcoin-ukraine.com.ua" + }, + { + "id": 94, + "name": "Poolin", + "addresses": [ + "14sA8jqYQgMRQV9zUtGFvpeMEw7YDn77SK", + "17tUZLvy3X2557JGhceXRiij2TNYuhRr4r", + "1E8CZo2S3CqWg1VZSJNFCTbtT8hZPuQ2kB", + "1GNgwA8JfG7Kc8akJ8opdNWJUihqUztfPe", + "36n452uGq1x4mK7bfyZR8wgE47AnBb2pzi", + "3JQSigWTCHyBLRD979JWgEtWP5YiiFwcQB", + "3KJrsjfg1dD6CrsTeHdHVH3KqMpvL2XWQn" + ], + "tags": [ + "/poolin.com", + "/poolin/" + ], + "link": "https://www.poolin.com" + }, + { + "id": 95, + "name": "SecretSuperstar", + "addresses": [], + "tags": [ + "/SecretSuperstar/" + ], + "link": "" + }, + { + "id": 96, + "name": "tigerpool.net", + "addresses": [], + "tags": [ + "/tigerpool.net" + ], + "link": "" + }, + { + "id": 97, + "name": "Sigmapool.com", + "addresses": [ + "12cKiMNhCtBhZRUBCnYXo8A4WQzMUtYjmR" + ], + "tags": [ + "/Sigmapool.com/" + ], + "link": "https://sigmapool.com" + }, + { + "id": 98, + "name": "okpool.top", + "addresses": [], + "tags": [ + "/www.okpool.top/" + ], + "link": "https://www.okpool.top" + }, + { + "id": 99, + "name": "Hummerpool", + "addresses": [], + "tags": [ + "HummerPool", + "Hummerpool" + ], + "link": "https://www.hummerpool.com" + }, + { + "id": 100, + "name": "Tangpool", + "addresses": [ + "12Taz8FFXQ3E2AGn3ZW1SZM5bLnYGX4xR6" + ], + "tags": [ + "/Tangpool/" + ], + "link": "https://www.tangpool.com" + }, + { + "id": 101, + "name": "BytePool", + "addresses": [ + "39m5Wvn9ZqyhYmCYpsyHuGMt5YYw4Vmh1Z" + ], + "tags": [ + "/bytepool.com/" + ], + "link": "https://www.bytepool.com" + }, + { + "id": 102, + "name": "SpiderPool", + "addresses": [ + "125m2H43pwKpSZjLhMQHneuTwTJN5qRyYu", + "38u1srayb1oybVB43UWKBJsrwJbdHGtPx2", + "1BM1sAcrfV6d4zPKytzziu4McLQDsFC2Qc" + ], + "tags": [ + "SpiderPool" + ], + "link": "https://www.spiderpool.com" + }, + { + "id": 103, + "name": "NovaBlock", + "addresses": [ + "3Bmb9Jig8A5kHdDSxvDZ6eryj3AXd3swuJ" + ], + "tags": [ + "/NovaBlock/" + ], + "link": "https://novablock.com" + }, + { + "id": 104, + "name": "MiningCity", + "addresses": [ + "11wC5KcbgrWRBb43cwADdVrxgyF8mndVC" + ], + "tags": [ + "MiningCity" + ], + "link": "https://www.miningcity.com" + }, + { + "id": 105, + "name": "Binance Pool", + "addresses": [ + "122pN8zvqTxJaA8fRY1PDBu4QYodqE5m2X", + "16moWjUJVRnDQKqhoCdcszfJg9wzBdoTHw", + "1DSh7vX6ed2cgTeKPwufV5i4hSi4pp373h", + "1JvXhnHCi6XqcanvrZJ5s2Qiv4tsmm2UMy", + "3L8Ck6bm3sve1vJGKo6Ht2k167YKSKi8TZ", + "bc1qx9t2l3pyny2spqpqlye8svce70nppwtaxwdrp4", + "3G7jcEELKh38L6kaSV8K35pTqsh5bgZW2D" + ], + "tags": [ + "/Binance/", + "binance" + ], + "link": "https://pool.binance.com" + }, + { + "id": 106, + "name": "Minerium", + "addresses": [], + "tags": [ + "/Mined in the USA by: /Minerium.com/", + "/Minerium.com/" + ], + "link": "https://www.minerium.com" + }, + { + "id": 107, + "name": "Lubian.com", + "addresses": [ + "34Jpa4Eu3ApoPVUKNTN2WeuXVVq1jzxgPi" + ], + "tags": [ + "/Buffett/", + "/lubian.com/" + ], + "link": "https://www.lubian.com" + }, + { + "id": 108, + "name": "OKKONG", + "addresses": [ + "16JHXJ7M2MubWNX9grnqbjUqJ5PHwcCWw2" + ], + "tags": [ + "/hash.okkong.com/" + ], + "link": "https://hash.okkong.com" + }, + { + "id": 109, + "name": "AAO Pool", + "addresses": [ + "12QVFmJH2b4455YUHkMpEnWLeRY3eJ4Jb5" + ], + "tags": [ + "/AAOPOOL/" + ], + "link": "https://btc.tmspool.top" + }, + { + "id": 110, + "name": "EMCDPool", + "addresses": [ + "1BDbsWi3Mrcjp1wdop3PWFNCNZtu4R7Hjy" + ], + "tags": [ + "/EMCD/", + "/one_more_mcd/", + "get___emcd", + "emcd" + ], + "link": "https://pool.emcd.io" + }, + { + "id": 111, + "name": "Foundry USA", + "addresses": [ + "12KKDt4Mj7N5UAkQMN7LtPZMayenXHa8KL", + "1FFxkVijzvUPUeHgkFjBk2Qw8j3wQY2cDw", + "bc1qxhmdufsvnuaaaer4ynz88fspdsxq2h9e9cetdj", + "bc1p8k4v4xuz55dv49svzjg43qjxq2whur7ync9tm0xgl5t4wjl9ca9snxgmlt" + ], + "tags": [ + "/2cDw/", + "Foundry USA Pool" + ], + "link": "https://foundrydigital.com" + }, + { + "id": 112, + "name": "SBI Crypto", + "addresses": [], + "tags": [ + "/SBICrypto.com Pool/", + "SBI Crypto", + "SBICrypto" + ], + "link": "https://sbicrypto.com" + }, + { + "id": 113, + "name": "ArkPool", + "addresses": [ + "1QEiAhdHdMhBgVbDM7zUXWGkNhgEEJ6uLd" + ], + "tags": [ + "/ArkPool/" + ], + "link": "https://www.arkpool.com" + }, + { + "id": 114, + "name": "PureBTC.COM", + "addresses": [], + "tags": [ + "/PureBTC.COM/" + ], + "link": "https://purebtc.com" + }, + { + "id": 115, + "name": "MARA Pool", + "addresses": [ + "15MdAHnkxt9TMC2Rj595hsg8Hnv693pPBB", + "1A32KFEX7JNPmU1PVjrtiXRrTQcesT3Nf1" + ], + "tags": [ + "MARA Pool", + "MARA Made in USA" + ], + "link": "https://marapool.com" + }, + { + "id": 116, + "name": "KuCoinPool", + "addresses": [ + "1ArTPjj6pV3aNRhLPjJVPYoxB98VLBzUmb" + ], + "tags": [ + "KuCoinPool" + ], + "link": "https://www.kucoin.com/mining-pool" + }, + { + "id": 117, + "name": "Entrust Charity Pool", + "addresses": [], + "tags": [ + "Entrustus" + ], + "link": "pool.entustus.org" + }, + { + "id": 118, + "name": "OKMINER", + "addresses": [ + "15xcAZ2HfaSwYbCV6GGbasBSAekBRRC5Q2" + ], + "tags": [ + "okminer.com/euz" + ], + "link": "https://okminer.com" + }, + { + "id": 119, + "name": "Titan", + "addresses": [ + "14hLEtxozmmih6Gg5xrGZLfx51bEMj21NW" + ], + "tags": [ + "Titan.io" + ], + "link": "https://titan.io" + }, + { + "id": 120, + "name": "PEGA Pool", + "addresses": [ + "1BGFwRzjCfRR7EvRHnzfHyFjGR8XiBDFKa" + ], + "tags": [ + "/pegapool/" + ], + "link": "https://www.pega-pool.com" + }, + { + "id": 121, + "name": "BTC Nuggets", + "addresses": [ + "1BwZeHJo7b7M2op7VDfYnsmcpXsUYEcVHm" + ], + "tags": [], + "link": "https://104.197.8.250" + }, + { + "id": 122, + "name": "CloudHashing", + "addresses": [ + "1ALA5v7h49QT7WYLcRsxcXqXUqEqaWmkvw" + ], + "tags": [], + "link": "https://cloudhashing.com" + }, + { + "id": 123, + "name": "digitalX Mintsy", + "addresses": [ + "1NY15MK947MLzmPUa2gL7UgyR8prLh2xfu" + ], + "tags": [], + "link": "https://www.mintsy.co" + }, + { + "id": 124, + "name": "Telco 214", + "addresses": [ + "13Sd8Y7nUao3z4bJFkZvCRXpFqHvLy49YY", + "14M1pQ5KKeqmDrmqKyZEnaxAGJfBPrfWvQ", + "18hvMLisvfc58PvA5rHH7NsLN9CV5ddB2x", + "18ikmzPqk721ZNvWhDos1UL4H29w352Kj5", + "1AsEJU4ht5wR7BzV6xsNQpwi5qRx4qH1ac", + "1BUhwvF9oo3qkaSjjPpWrUzQxXNjkHdMZF", + "1CNq2FAw6S5JfBiDkjkYJUVNQwjoeY4Zfi", + "1DXRoTT67mCbhdHHL1it4J1xsSZHHnFxYR", + "1GaKSh2t396nfSg5Ku2J3Yn1vfVsXrGuH5", + "1LXWA3EEEwPixQcyFWXKX2hWHpkDoLknZW", + "1MoYfV4U61wqTPTHCyedzFmvf2o3uys2Ua", + "1P4B6rx1js8TaEDXvZvtrkiEb9XrJgMQ19" + ], + "tags": [], + "link": "https://www.telco214.com" + }, + { + "id": 125, + "name": "BTC Pool Party", + "addresses": [ + "1PmRrdp1YSkp1LxPyCfcmBHDEipG5X4eJB" + ], + "tags": [], + "link": "https://btcpoolparty.com" + }, + { + "id": 126, + "name": "Multipool", + "addresses": [ + "1MeffGLauEj2CZ18hRQqUauTXb9JAuLbGw" + ], + "tags": [], + "link": "https://www.multipool.us" + }, + { + "id": 127, + "name": "transactioncoinmining", + "addresses": [ + "1qtKetXKgqa7j1KrB19HbvfRiNUncmakk" + ], + "tags": [], + "link": "https://sha256.transactioncoinmining.com" + }, + { + "id": 128, + "name": "BTCDig", + "addresses": [ + "15MxzsutVroEE9XiDckLxUHTCDAEZgPZJi" + ], + "tags": [], + "link": "https://btcdig.com" + }, + { + "id": 129, + "name": "Tricky's BTC Pool", + "addresses": [ + "1AePMyovoijxvHuKhTqWvpaAkRCF4QswC6" + ], + "tags": [], + "link": "https://pool.wemine.uk" + }, + { + "id": 130, + "name": "BTCMP", + "addresses": [ + "1jKSjMLnDNup6NPgCjveeP9tUn4YpT94Y" + ], + "tags": [], + "link": "https://www.btcmp.com" + }, + { + "id": 131, + "name": "Eobot", + "addresses": [ + "16GsNC3q6KgVXkUX7j7aPxSUdHrt1sN2yN", + "1MPxhNkSzeTNTHSZAibMaS8HS1esmUL1ne" + ], + "tags": [], + "link": "https://eobot.com" + }, + { + "id": 132, + "name": "UNOMP", + "addresses": [ + "1BRY8AD7vSNUEE75NjzfgiG18mWjGQSRuJ" + ], + "tags": [], + "link": "https://199.115.116.7:8925" + }, + { + "id": 133, + "name": "Patels", + "addresses": [ + "197miJmttpCt2ubVs6DDtGBYFDroxHmvVB", + "19RE4mz2UbDxDVougc6GGdoT4x5yXxwFq2" + ], + "tags": [], + "link": "https://patelsminingpool.com" + }, + { + "id": 134, + "name": "GoGreenLight", + "addresses": [ + "18EPLvrs2UE11kWBB3ABS7Crwj5tTBYPoa" + ], + "tags": [], + "link": "https://www.gogreenlight.se" + }, + { + "id": 135, + "name": "BitcoinIndia", + "addresses": [ + "1AZ6BkCo4zgTuuLpRStJH8iNsehXTMp456" + ], + "tags": [], + "link": "https://pool.bitcoin-india.org" + }, + { + "id": 136, + "name": "EkanemBTC", + "addresses": [ + "1Cs5RT9SRk1hxsdzivAfkjesNmVVJqfqkw" + ], + "tags": [], + "link": "https://ekanembtc.com" + }, + { + "id": 137, + "name": "CANOE", + "addresses": [ + "1Afcpc2FpPnREU6i52K3cicmHdvYRAH9Wo" + ], + "tags": [], + "link": "https://www.canoepool.com" + }, + { + "id": 138, + "name": "tiger", + "addresses": [ + "1LsFmhnne74EmU4q4aobfxfrWY4wfMVd8w" + ], + "tags": [], + "link": "" + }, + { + "id": 139, + "name": "1M1X", + "addresses": [ + "1M1Xw2rczxkF3p3wiNHaTmxvbpZZ7M6vaa" + ], + "tags": [], + "link": "" + }, + { + "id": 140, + "name": "Zulupool", + "addresses": [ + "1ZULUPooLEQfkrTgynLV4uHyMgQYx71ip" + ], + "tags": [ + "ZULUPooL", + "ZU_test" + ], + "link": "https://beta.zulupool.com/" + }, + { + "id": 141, + "name": "SECPOOL", + "addresses": [ + "3Awm3FNpmwrbvAFVThRUFqgpbVuqWisni9" + ], + "tags": [ + "SecPool" + ], + "link": "https://www.secpool.com" + }, + { + "id": 142, + "name": "OCEAN", + "addresses": [ + "37dvwZZoT3D7RXpTCpN2yKzMmNs2i2Fd1n" + ], + "tags": [ + "OCEAN.XYZ" + ], + "link": "https://ocean.xyz/" + }, + { + "id": 143, + "name": "WhitePool", + "addresses": [ + "14VkxDwSAUWrzYTxV49HnYhKLWTJ3pCoUS" + ], + "tags": [ + "WhitePool" + ], + "link": "https://whitebit.com/mining-pool" + }, + { + "id": 144, + "name": "wiz", + "addresses": [ + "1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC", + "tb1q548z58kqvwyjqwy8vc2ntmg33d7s2wyfv7ukq4" + ], + "tags": [ + "/@wiz/" + ], + "link": "https://wiz.biz/" + }, + { + "id": 145, + "name": "mononaut", + "addresses": [ + "mjP97q5BWtdpdsJLkEJvQWgLe9zw4MMVU6" + ], + "tags": [ + "🐵🚀" + ], + "link": "https://twitter.com/mononautical" + }, + { + "id": 146, + "name": "rijndael", + "addresses": [ + "tb1qg8zlznrvns9u46muxamxjh7sa8wry3vutzaujm" + ], + "tags": [ + "rijndael's toaster" + ], + "link": "https://twitter.com/rot13maxi" + }, + { + "id": 147, + "name": "wk057", + "addresses": [ + "1WizkidqARMLvjGUpfDQFRcEbnHpL55kK" + ], + "tags": [ + "wizkid057's block" + ], + "link": "" + }, + { + "id": 148, + "name": "FutureBit Apollo Solo", + "addresses": [], + "tags": [ + "Apollo", + "FutureBit", + "/mined by a Solo FutureBit Apollo/" + ], + "link": "https://www.futurebit.io" + }, + { + "id": 149, + "name": "emzy", + "addresses": [ + "tb1qmf7xdqc5nvzhturuzc46qtq5kywdf3p76cpq53" + ], + "tags": [ + "Emzy was here." + ], + "link": "https://twitter.com/emzy" + }, + { + "id": 150, + "name": "knorrium", + "addresses": [ + "tb1qtfqp4g7n7wc3sr6c2cuzsq62px4pfsxgsv2krx" + ], + "tags": [ + "knorrium" + ], + "link": "https://twitter.com/knorrium" + }, + { + "id": 151, + "name": "Carbon Negative", + "addresses": [ + "33SAB6pzbhEGPbfY6NVgRDV7jVfspZ3A3Z", + "3KZDwmJHB6QJ13QPXHaW7SS3yTESFPZoxb" + ], + "tags": [], + "link": "https://github.com/bitcoin-data/mining-pools/issues/48" + }, + { + "id": 152, + "name": "Portland.HODL", + "addresses": [ + ], + "tags": ["Portland.HODL"], + "link": "" + }, + { + "id": 153, + "name": "Phoenix", + "addresses": [ + "37cGvBD4qufoZQHopGS7XstxRUzx5cNuy1", + "bc1q2zcenaujmmdv8sqgf723cug4vjnphkvvf8zpst", + "1Ld6okoaLNDbSnougAyQTrchxRn9ELnTJg" + ], + "tags": ["/Phoenix/"], + "link": "https://phoenixpool.com" + }, + { + "id": 154, + "name": "Neopool", + "addresses": [ + "1HCAb2h89bUinm6QZrAPpfbk4ySBrT2V4w" + ], + "tags": ["/Neopool/"], + "link": "https://neopool.com/" + }, + { + "id": 155, + "name": "MaxiPool", + "addresses": [ + "36r3YqAXWpyqNcczjCBdHrYZ3m8X56WDzx" + ], + "tags": ["/MaxiPool/"], + "link": "https://maxipool.org/" + }, + { + "id": 156, + "name": "DrDetroit", + "addresses": [ + "tb1qtcruplnz89xw5f86kw8sj7x9r23d5yffrysx2p" + ], + "tags": [ + "DrDetroit" + ], + "link": "https://x.com/bankhatin" + }, + { + "id": 157, + "name": "BitFuFuPool", + "addresses": [ + "3JP3zF7LoeoAotqkNGdvX5szUyNPwd937d" + ], + "tags": ["/BitFuFu/"], + "link": "https://www.bitfufu.com/pool" + }, + { + "id": 158, + "name": "GDPool", + "addresses": [ + "1DnPPFQPrfyNTiHPXhDFyqNnW9T62GEhB1" + ], + "tags": ["Lucky pool", "GDPool"], + "link": "" + }, + { + "id": 159, + "name": "Mining-Dutch", + "addresses": [ + "1AfPSq5ZbqBaxU5QAayLQJMcXV8HZt92eq" + ], + "tags": ["/Mining-Dutch/"], + "link": "https://www.mining-dutch.nl/" + }, + { + "id": 160, + "name": "Public Pool", + "addresses": [], + "tags": [ + "Public-Pool", + "Public Pool on Umbrel" + ], + "link": "https://web.public-pool.io/" + }, + { + "id": 161, + "name": "Mining Squared", + "addresses": [ + "3GdjWJdkJhtkxRZ3Ns1LstaoHNMBW8XsvU", + "3AvXzTUat4p6Qf6ZLnRNvB3mDLjp3fNmjJ" + ], + "tags": ["MiningSquared", "BSquared Network", "/bsquared/"], + "link": "https://pool.bsquared.network/" + }, + { + "id": 162, + "name": "Innopolis Tech", + "addresses": [ + "bc1q75t4wewkmf3l9qg097zvtlh05v5pdz6699kv8k" + ], + "tags": ["Innopolis", "Innopolis.tech"], + "link": "https://innopolis.tech/" + }, + { + "id": 163, + "name": "nymkappa", + "addresses": [ + "tb1qdyy39724wqnqqqduv6zxsf56s2ec9lgypxs59h" + ], + "tags": ["/@nymkappa/"], + "link": "https://github.com/nymkappa" + }, + { + "id": 164, + "name": "BTCLab", + "addresses": [], + "tags": [ + "BTCLab", + "BTCLab.dev" + ], + "link": "https://btclab.dev/" + }, + { + "id": 165, + "name": "Parasite", + "addresses": [], + "tags": ["parasite"], + "link": "https://parasite.space" + }, + { + "id": 166, + "name": "RedRock Pool", + "addresses": [ + "3554kSaWNnP3B49Xyybert7gmxq2YSnfnx" + ], + "tags": ["RedRock"], + "link": "https://redrock.pro/" + }, + { + "id": 167, + "name": "Est3lar", + "addresses": [ + "34qGNFx6uQv6SzjYPbYVWtjvuy5DSGugt8" + ], + "tags": ["/Est3lar/", "est3lar", "Est3lar", "EST3LAR"], + "link": "https://est3lar.io" + }, + { + "id": 168, + "name": "Braiins Solo", + "addresses": [], + "tags": ["/braiinssolo/"], + "link": "https://solo.braiins.com" + }, + { + "id": 169, + "name": "SoloPool.com", + "addresses": [ + "bc1qreaftg3lr53nv84dnxhcvchmswevzlp9tdj2jd" + ], + "tags": ["/Mined @ SoloPool.Com/"], + "link": "https://solopool.com" + }, + { + "id": 170, + "name": "Noderunners", + "addresses": [], + "tags": ["/Noderunners/"], + "link": "https://pool.noderunners.network" + }, + { + "id": 171, + "name": "DMND", + "addresses": [], + "tags": ["/DMND/"], + "link": "https://www.dmnd.work/" + } +] diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index 49862964604..6298029745b 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -37,6 +37,7 @@ "ALLOW_UNREACHABLE": __MEMPOOL_ALLOW_UNREACHABLE__, "POOLS_JSON_TREE_URL": "__MEMPOOL_POOLS_JSON_TREE_URL__", "POOLS_JSON_URL": "__MEMPOOL_POOLS_JSON_URL__", + "POOLS_JSON_FILE": "__MEMPOOL_POOLS_JSON_FILE__", "POOLS_UPDATE_DELAY": __MEMPOOL_POOLS_UPDATE_DELAY__, "PRICE_UPDATES_PER_HOUR": __MEMPOOL_PRICE_UPDATES_PER_HOUR__, "MAX_TRACKED_ADDRESSES": __MEMPOOL_MAX_TRACKED_ADDRESSES__ diff --git a/docker/backend/start.sh b/docker/backend/start.sh index cc554c2130c..cfd782977d9 100755 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -30,6 +30,7 @@ __MEMPOOL_STDOUT_LOG_MIN_PRIORITY__=${MEMPOOL_STDOUT_LOG_MIN_PRIORITY:=info} __MEMPOOL_AUTOMATIC_POOLS_UPDATE__=${MEMPOOL_AUTOMATIC_POOLS_UPDATE:=true} __MEMPOOL_POOLS_JSON_URL__=${MEMPOOL_POOLS_JSON_URL:=https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json} __MEMPOOL_POOLS_JSON_TREE_URL__=${MEMPOOL_POOLS_JSON_TREE_URL:=https://api.github.com/repos/mempool/mining-pools/git/trees/master} +__MEMPOOL_POOLS_JSON_FILE__=${MEMPOOL_POOLS_JSON_FILE:=tasks/pools/pools-v2.json} __MEMPOOL_POOLS_UPDATE_DELAY__=${MEMPOOL_POOLS_UPDATE_DELAY:=604800} __MEMPOOL_AUDIT__=${MEMPOOL_AUDIT:=false} __MEMPOOL_RUST_GBT__=${MEMPOOL_RUST_GBT:=true} @@ -195,6 +196,7 @@ sed -i "s!__MEMPOOL_STDOUT_LOG_MIN_PRIORITY__!${__MEMPOOL_STDOUT_LOG_MIN_PRIORIT sed -i "s!__MEMPOOL_AUTOMATIC_POOLS_UPDATE__!${__MEMPOOL_AUTOMATIC_POOLS_UPDATE__}!g" mempool-config.json sed -i "s!__MEMPOOL_POOLS_JSON_URL__!${__MEMPOOL_POOLS_JSON_URL__}!g" mempool-config.json sed -i "s!__MEMPOOL_POOLS_JSON_TREE_URL__!${__MEMPOOL_POOLS_JSON_TREE_URL__}!g" mempool-config.json +sed -i "s!__MEMPOOL_POOLS_JSON_FILE__!${__MEMPOOL_POOLS_JSON_FILE__}!g" mempool-config.json sed -i "s!__MEMPOOL_POOLS_UPDATE_DELAY__!${__MEMPOOL_POOLS_UPDATE_DELAY__}!g" mempool-config.json sed -i "s!__MEMPOOL_AUDIT__!${__MEMPOOL_AUDIT__}!g" mempool-config.json sed -i "s!__MEMPOOL_RUST_GBT__!${__MEMPOOL_RUST_GBT__}!g" mempool-config.json From e74c054bc94c28943d34ae63979bc8bbbb6d0896 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 09:51:50 +0000 Subject: [PATCH 02/68] backend: publish what this deployment can serve, and refuse an incoherent one The frontend decided on its own that Mining and Charts were available. The backend decided separately, from DATABASE.ENABLED and INDEXING_BLOCKS_AMOUNT, whether to mount the routes behind them. Nothing compared the two answers, so production shipped both pages against routes that were never registered and every request behind them answered 404. Give the two one place to agree on. The route setup records what it actually mounted, /api/v1/capabilities reports that alongside dependency reachability, coverage and lag, and startup refuses a configuration that would advertise a feature it cannot serve. The rules live in their own module with no imports, so the release gate and the tests judge exactly what the running backend judges. Co-Authored-By: Claude Opus 5 --- backend/src/__tests__/capabilities.test.ts | 61 +++++ backend/src/api/capabilities.preflight.ts | 55 ++++ backend/src/api/capabilities.routes.ts | 27 ++ backend/src/api/capabilities.ts | 284 +++++++++++++++++++++ backend/src/index.ts | 20 +- 5 files changed, 445 insertions(+), 2 deletions(-) create mode 100644 backend/src/__tests__/capabilities.test.ts create mode 100644 backend/src/api/capabilities.preflight.ts create mode 100644 backend/src/api/capabilities.routes.ts create mode 100644 backend/src/api/capabilities.ts diff --git a/backend/src/__tests__/capabilities.test.ts b/backend/src/__tests__/capabilities.test.ts new file mode 100644 index 00000000000..90c3207bf1b --- /dev/null +++ b/backend/src/__tests__/capabilities.test.ts @@ -0,0 +1,61 @@ +import { preflightFailures, type PreflightInput } from '../api/capabilities.preflight'; + +/** + * The production incident these rules exist to prevent: the frontend shipped a + * Charts page and a Mining dashboard while the backend had the database off, so + * every request behind those pages answered 404 and the pages loaded forever. + */ + +const coherentWithData: PreflightInput = { + statisticsEnabled: true, + databaseEnabled: true, + mempoolEnabled: true, + indexingBlocksAmount: -1, +}; + +const coherentWithoutData: PreflightInput = { + statisticsEnabled: false, + databaseEnabled: false, + mempoolEnabled: true, + indexingBlocksAmount: 0, +}; + +describe('deployment configuration preflight', () => { + it('accepts a deployment that serves statistics and mining from a database', () => { + expect(preflightFailures(coherentWithData)).toEqual([]); + }); + + it('accepts a deployment that serves neither, with the database off', () => { + expect(preflightFailures(coherentWithoutData)).toEqual([]); + }); + + it('rejects statistics without a database, because the routes would never mount', () => { + const failures = preflightFailures({ ...coherentWithData, databaseEnabled: false, indexingBlocksAmount: 0 }); + expect(failures.map((failure) => failure.feature)).toContain('statistics'); + }); + + it('rejects statistics without the mempool backend collecting them', () => { + const failures = preflightFailures({ ...coherentWithData, mempoolEnabled: false }); + expect(failures.map((failure) => failure.reason.includes('MEMPOOL.ENABLED'))).toContain(true); + }); + + it('rejects block indexing without a database, because mining routes would never mount', () => { + const failures = preflightFailures({ ...coherentWithoutData, indexingBlocksAmount: 52560 }); + expect(failures.map((failure) => failure.feature)).toContain('mining'); + }); + + it('rejects a database that nothing uses', () => { + const failures = preflightFailures({ ...coherentWithoutData, databaseEnabled: true }); + expect(failures.map((failure) => failure.feature)).toContain('database'); + }); + + it('reports every problem at once rather than stopping at the first', () => { + const failures = preflightFailures({ + statisticsEnabled: true, + databaseEnabled: false, + mempoolEnabled: false, + indexingBlocksAmount: 144, + }); + expect(failures.length).toBeGreaterThanOrEqual(3); + }); +}); diff --git a/backend/src/api/capabilities.preflight.ts b/backend/src/api/capabilities.preflight.ts new file mode 100644 index 00000000000..bfd1c8a3896 --- /dev/null +++ b/backend/src/api/capabilities.preflight.ts @@ -0,0 +1,55 @@ +/** + * Configuration combinations that must never reach production traffic. + * + * This module deliberately imports nothing. The release gate, the unit tests, + * and the running backend all judge the same rules, and none of them has to + * open a database or start a timer to do it. + */ + +/** A configuration combination that must never reach production traffic. */ +export interface PreflightFailure { + readonly feature: string; + readonly reason: string; +} + +/** The configuration facts the preflight rules judge. */ +export interface PreflightInput { + readonly statisticsEnabled: boolean; + readonly databaseEnabled: boolean; + readonly mempoolEnabled: boolean; + readonly indexingBlocksAmount: number; +} + +/** + * Returns every reason this configuration would put a broken public feature in + * front of users. An empty list means the deployment is coherent. + */ +export function preflightFailures(input: PreflightInput): PreflightFailure[] { + const failures: PreflightFailure[] = []; + + if (input.statisticsEnabled && !input.databaseEnabled) { + failures.push({ + feature: 'statistics', + reason: 'STATISTICS.ENABLED is true but DATABASE.ENABLED is false, so no statistics route can be served.', + }); + } + if (input.statisticsEnabled && !input.mempoolEnabled) { + failures.push({ + feature: 'statistics', + reason: 'STATISTICS.ENABLED is true but MEMPOOL.ENABLED is false, so nothing collects statistics.', + }); + } + if (input.indexingBlocksAmount !== 0 && !input.databaseEnabled) { + failures.push({ + feature: 'mining', + reason: 'INDEXING_BLOCKS_AMOUNT is set but DATABASE.ENABLED is false, so no mining route can be served.', + }); + } + if (input.databaseEnabled && input.indexingBlocksAmount === 0 && !input.statisticsEnabled) { + failures.push({ + feature: 'database', + reason: 'DATABASE.ENABLED is true but neither block indexing nor statistics uses it.', + }); + } + return failures; +} diff --git a/backend/src/api/capabilities.routes.ts b/backend/src/api/capabilities.routes.ts new file mode 100644 index 00000000000..54106f8b490 --- /dev/null +++ b/backend/src/api/capabilities.routes.ts @@ -0,0 +1,27 @@ +import { Application, Request, Response } from 'express'; +import config from '../config'; +import capabilities from './capabilities'; +import { handleError } from '../utils/api'; + +/** + * Publishes what this deployment can actually serve. The frontend reads it to + * render truthful states instead of guessing from its own build-time flags, + * and the release procedure reads it to refuse an incoherent cutover. + */ +class CapabilitiesRoutes { + public initRoutes(app: Application): void { + app.get(config.MEMPOOL.API_URL_PREFIX + 'capabilities', async (req: Request, res: Response) => { + try { + const report = await capabilities.$report(); + res.header('Pragma', 'public'); + res.header('Cache-control', 'public'); + res.setHeader('Expires', new Date(Date.now() + 1000 * 10).toUTCString()); + res.json(report); + } catch (e) { + handleError(req, res, 500, 'Failed to build the capability report'); + } + }); + } +} + +export default new CapabilitiesRoutes(); diff --git a/backend/src/api/capabilities.ts b/backend/src/api/capabilities.ts new file mode 100644 index 00000000000..e773f1bc45e --- /dev/null +++ b/backend/src/api/capabilities.ts @@ -0,0 +1,284 @@ +import config from '../config'; +import DB from '../database'; +import logger from '../logger'; +import backendInfo from './backend-info'; +import { Common } from './common'; +import { preflightFailures, type PreflightFailure, type PreflightInput } from './capabilities.preflight'; + +export { preflightFailures }; +export type { PreflightFailure, PreflightInput }; + +/** + * One place that knows which public features this deployment can actually + * serve, so the frontend never advertises a page whose backend routes were + * never mounted and the deployment can refuse to cut over when the two + * disagree. + * + * Nothing here reports a secret, a private origin, or a credential. + */ + +export type CapabilityState = 'ready' | 'degraded' | 'unavailable' | 'disabled'; + +export interface CapabilityDependency { + readonly name: string; + readonly configured: boolean; + readonly reachable: boolean; + readonly detail: string | null; +} + +export interface CapabilityReport { + /** Feature is switched on in configuration. */ + readonly enabled: boolean; + /** The HTTP routes backing the feature were actually mounted. */ + readonly routesRegistered: boolean; + readonly dependencies: readonly CapabilityDependency[]; + readonly state: CapabilityState; + /** Oldest and newest real data this feature can answer for. */ + readonly coverage: { readonly from: string | null; readonly to: string | null } | null; + readonly rowCount: number | null; + readonly lastSuccessfulUpdate: string | null; + /** Age of the newest row, in seconds, or null when nothing is stored yet. */ + readonly lagSeconds: number | null; + readonly degradedReason: string | null; +} + +export interface CapabilitiesResponse { + readonly schemaVersion: 'universe-explorer-capabilities-v1'; + readonly releaseSha: string; + readonly network: string; + readonly generatedAt: string; + readonly features: Readonly>; +} + +const CACHE_TTL_MS = 10_000; +/** A statistics row is written every minute; five minutes is a stall. */ +const STATISTICS_STALE_AFTER_SECONDS = 300; + +class Capabilities { + private registeredRoutes = new Set(); + private cached: { at: number; value: CapabilitiesResponse } | null = null; + + /** + * Called by the route setup for every feature it mounts, so the report can + * never claim a route exists that was not registered. + */ + public markRoutesRegistered(feature: string): void { + this.registeredRoutes.add(feature); + } + + public routesRegistered(feature: string): boolean { + return this.registeredRoutes.has(feature); + } + + /** True when configuration says the statistics feature should be served. */ + public statisticsEnabled(): boolean { + return config.STATISTICS.ENABLED === true + && config.DATABASE.ENABLED === true + && config.MEMPOOL.ENABLED === true; + } + + /** True when configuration says the mining feature should be served. */ + public miningEnabled(): boolean { + return Common.indexingEnabled() && config.MEMPOOL.ENABLED === true; + } + + /** + * Configuration combinations that would put a broken public feature in front + * of users. An empty list means the deployment is coherent. + */ + public preflight(): PreflightFailure[] { + return preflightFailures({ + statisticsEnabled: config.STATISTICS.ENABLED === true, + databaseEnabled: config.DATABASE.ENABLED === true, + mempoolEnabled: config.MEMPOOL.ENABLED === true, + indexingBlocksAmount: config.MEMPOOL.INDEXING_BLOCKS_AMOUNT, + }); + } + + /** Full report, cached briefly so health polling cannot load the database. */ + public async $report(): Promise { + const now = Date.now(); + if (this.cached && now - this.cached.at < CACHE_TTL_MS) { + return this.cached.value; + } + const value: CapabilitiesResponse = { + schemaVersion: 'universe-explorer-capabilities-v1', + releaseSha: backendInfo.getBackendInfo().gitCommit, + network: config.MEMPOOL.NETWORK, + generatedAt: new Date().toISOString(), + features: { + statistics: await this.$statisticsReport(), + mining: await this.$miningReport(), + }, + }; + this.cached = { at: now, value }; + return value; + } + + private databaseDependency(reachable: boolean, detail: string | null): CapabilityDependency { + return { + name: 'database', + configured: config.DATABASE.ENABLED === true, + reachable, + detail, + }; + } + + /** Confirms the database answers, without reporting host, user, or password. */ + private async $databaseReachable(): Promise<{ reachable: boolean; detail: string | null }> { + if (config.DATABASE.ENABLED !== true) { + return { reachable: false, detail: 'The database is disabled in configuration.' }; + } + try { + await DB.query('SELECT 1'); + return { reachable: true, detail: null }; + } catch (e) { + logger.debug('Capability probe could not reach the database: ' + (e instanceof Error ? e.message : e)); + return { reachable: false, detail: 'The database did not answer.' }; + } + } + + private async $statisticsReport(): Promise { + const enabled = this.statisticsEnabled(); + const routesRegistered = this.routesRegistered('statistics'); + if (!enabled) { + return { + enabled: false, + routesRegistered, + dependencies: [this.databaseDependency(false, null)], + state: 'disabled', + coverage: null, + rowCount: null, + lastSuccessfulUpdate: null, + lagSeconds: null, + degradedReason: 'Statistics collection is switched off in this deployment.', + }; + } + + const database = await this.$databaseReachable(); + const dependencies = [this.databaseDependency(database.reachable, database.detail)]; + if (!database.reachable) { + return { + enabled, routesRegistered, dependencies, + state: 'unavailable', + coverage: null, rowCount: null, lastSuccessfulUpdate: null, lagSeconds: null, + degradedReason: 'The statistics database is unavailable.', + }; + } + + try { + const [rows]: any[] = await DB.query( + `SELECT COUNT(*) AS total, + MIN(added) AS oldest, + MAX(added) AS newest + FROM statistics` + ); + const total = Number(rows[0]?.total ?? 0); + const oldest: Date | null = rows[0]?.oldest ?? null; + const newest: Date | null = rows[0]?.newest ?? null; + const lagSeconds = newest ? Math.max(0, Math.round((Date.now() - newest.getTime()) / 1000)) : null; + const stale = lagSeconds !== null && lagSeconds > STATISTICS_STALE_AFTER_SECONDS; + return { + enabled, routesRegistered, dependencies, + state: total === 0 ? 'degraded' : stale ? 'degraded' : 'ready', + coverage: { + from: oldest ? oldest.toISOString() : null, + to: newest ? newest.toISOString() : null, + }, + rowCount: total, + lastSuccessfulUpdate: newest ? newest.toISOString() : null, + lagSeconds, + degradedReason: total === 0 + ? 'Statistics collection has started but no sample has been stored yet.' + : stale + ? 'The newest statistics sample is older than the collection interval allows.' + : null, + }; + } catch (e) { + logger.debug('Capability probe could not read statistics: ' + (e instanceof Error ? e.message : e)); + return { + enabled, routesRegistered, dependencies, + state: 'unavailable', + coverage: null, rowCount: null, lastSuccessfulUpdate: null, lagSeconds: null, + degradedReason: 'The statistics table could not be read.', + }; + } + } + + private async $miningReport(): Promise { + const enabled = this.miningEnabled(); + const routesRegistered = this.routesRegistered('mining'); + if (!enabled) { + return { + enabled: false, + routesRegistered, + dependencies: [this.databaseDependency(false, null)], + state: 'disabled', + coverage: null, rowCount: null, lastSuccessfulUpdate: null, lagSeconds: null, + degradedReason: 'Block indexing is switched off in this deployment.', + }; + } + + const database = await this.$databaseReachable(); + const dependencies: CapabilityDependency[] = [this.databaseDependency(database.reachable, database.detail)]; + if (!database.reachable) { + return { + enabled, routesRegistered, dependencies, + state: 'unavailable', + coverage: null, rowCount: null, lastSuccessfulUpdate: null, lagSeconds: null, + degradedReason: 'The mining index database is unavailable.', + }; + } + + try { + const [rows]: any[] = await DB.query( + `SELECT COUNT(*) AS total, + MIN(height) AS lowest, + MAX(height) AS highest, + MAX(blockTimestamp) AS newest + FROM blocks` + ); + const total = Number(rows[0]?.total ?? 0); + const lowest = rows[0]?.lowest === null || rows[0]?.lowest === undefined ? null : Number(rows[0].lowest); + const highest = rows[0]?.highest === null || rows[0]?.highest === undefined ? null : Number(rows[0].highest); + const newest: Date | null = rows[0]?.newest ?? null; + + const [poolRows]: any[] = await DB.query('SELECT COUNT(*) AS total FROM pools'); + const poolCount = Number(poolRows[0]?.total ?? 0); + dependencies.push({ + name: 'pool-metadata', + configured: config.MEMPOOL.POOLS_JSON_FILE !== '', + reachable: poolCount > 0, + detail: poolCount > 0 ? null : 'No mining pool metadata has been imported.', + }); + + const indexed = total > 0 && poolCount > 0; + return { + enabled, routesRegistered, dependencies, + state: indexed ? 'ready' : 'degraded', + coverage: { + from: lowest === null ? null : String(lowest), + to: highest === null ? null : String(highest), + }, + rowCount: total, + lastSuccessfulUpdate: newest ? newest.toISOString() : null, + lagSeconds: newest ? Math.max(0, Math.round((Date.now() - newest.getTime()) / 1000)) : null, + degradedReason: total === 0 + ? 'Block indexing is running but no block has been indexed yet.' + : poolCount === 0 + ? 'Mining pool metadata has not been imported yet.' + : null, + }; + } catch (e) { + logger.debug('Capability probe could not read the mining index: ' + (e instanceof Error ? e.message : e)); + return { + enabled, routesRegistered, dependencies, + state: 'unavailable', + coverage: null, rowCount: null, lastSuccessfulUpdate: null, lagSeconds: null, + degradedReason: 'The mining index tables could not be read.', + }; + } + } +} + +export default new Capabilities(); diff --git a/backend/src/index.ts b/backend/src/index.ts index 1428e405b0b..c3101f0b3d3 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -46,6 +46,8 @@ import bitcoinCoreRoutes from './api/bitcoin/bitcoin-core.routes'; import bitcoinSecondClient from './api/bitcoin/bitcoin-second-client'; import accelerationRoutes from './api/acceleration/acceleration.routes'; import aboutRoutes from './api/about.routes'; +import capabilities from './api/capabilities'; +import capabilitiesRoutes from './api/capabilities.routes'; import mempoolBlocks from './api/mempool-blocks'; import walletApi from './api/services/wallets'; import stratumApi from './api/services/stratum'; @@ -121,6 +123,17 @@ class Server { bitcoinApi.startHealthChecks(); } + // Refuse to start on a configuration that would advertise a public feature + // this deployment cannot serve. Failing here is loud and recoverable; a + // half-configured backend is neither. + const preflightFailures = capabilities.preflight(); + if (preflightFailures.length > 0) { + for (const failure of preflightFailures) { + logger.err(`Configuration preflight failed for ${failure.feature}: ${failure.reason}`); + } + throw new Error('The backend configuration is incoherent; see the preflight errors above.'); + } + if (config.DATABASE.ENABLED) { DB.getPidLock(); @@ -350,15 +363,18 @@ class Server { setUpHttpApiRoutes(): void { bitcoinRoutes.initRoutes(this.app); + capabilitiesRoutes.initRoutes(this.app); if (config.MEMPOOL.OFFICIAL) { bitcoinCoreRoutes.initRoutes(this.app); } pricesRoutes.initRoutes(this.app); - if (config.STATISTICS.ENABLED && config.DATABASE.ENABLED && config.MEMPOOL.ENABLED) { + if (capabilities.statisticsEnabled()) { statisticsRoutes.initRoutes(this.app); + capabilities.markRoutesRegistered('statistics'); } - if (Common.indexingEnabled() && config.MEMPOOL.ENABLED) { + if (capabilities.miningEnabled()) { miningRoutes.initRoutes(this.app); + capabilities.markRoutesRegistered('mining'); } if (Common.isLiquid()) { liquidRoutes.initRoutes(this.app); From e19ae4ad2b8136919b2e5bf017a82230f17cdd2a Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 09:51:51 +0000 Subject: [PATCH 03/68] backend: let a statistics read failure reach the route layer Every $listXX range caught its database error, logged it, and returned an empty array. The route then answered 200 with [], so a database that was down was indistinguishable from a chain with nothing to show, and the Charts page rendered an empty state over a real outage. Throw instead. statistics.routes already turns a thrown error into 500, which is the answer the frontend needs in order to tell unavailable apart from empty. Co-Authored-By: Claude Opus 5 --- backend/src/api/statistics/statistics-api.ts | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/backend/src/api/statistics/statistics-api.ts b/backend/src/api/statistics/statistics-api.ts index 5a3222e827f..4bf86ff749a 100644 --- a/backend/src/api/statistics/statistics-api.ts +++ b/backend/src/api/statistics/statistics-api.ts @@ -295,7 +295,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list2H() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -306,7 +306,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list24h() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -317,7 +317,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list1W() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -328,7 +328,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list1M() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -339,7 +339,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list3M() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -350,7 +350,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list6M() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -361,7 +361,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list1Y() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -372,7 +372,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list2Y() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -383,7 +383,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list3Y() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -394,7 +394,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$list4Y() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } @@ -405,7 +405,7 @@ class StatisticsApi { return this.mapStatisticToOptimizedStatistic(rows as Statistic[]); } catch (e) { logger.err('$listAll() error' + (e instanceof Error ? e.message : e)); - return []; + throw e; } } From 1eb7037a2cd7b171b1945c0dd57312bd9d7f231a Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 10:08:56 +0000 Subject: [PATCH 04/68] frontend: give every remote read a lifecycle that ends The Charts page subscribed with one next handler and no error handler. A 404 killed the subscription, so isLoading stayed true, the spinner stayed on screen, and the range buttons stopped working for the rest of the session. Every mining widget had the same shape through an async pipe with an else skeleton, so a failed read left 35 skeletons that nothing would ever clear. Add one helper that turns a request into a state machine which always reaches a terminal state: data, empty, stale, or error. It keeps empty apart from failed, bounds the wait, retries only what a retry could fix with backoff and jitter, cancels an obsolete request when the range changes, and keeps the last good answer to show as stale rather than replacing real numbers with a blank panel. Charts, reward stats, pool ranking and the hashrate chart use it. Each owns its own state, so one failing module no longer decides what the rest of the page shows. The shared status panel names what failed and offers retry and system status, and its spinner is drawn from theme tokens: the one it replaces was white on a light background, which is why a failed page and a blank page looked the same. Pool ranking and the hashrate chart also started one request from route setup and another from the chain tip. They share one trigger now, debounced so a burst of tips around a new block is one refresh. Co-Authored-By: Claude Opus 5 --- .../hashrate-chart.component.html | 30 +- .../hashrate-chart.component.ts | 265 +++++++++++------- .../pool-ranking/pool-ranking.component.html | 40 +-- .../pool-ranking/pool-ranking.component.ts | 114 +++++--- .../reward-stats/reward-stats.component.html | 31 +- .../reward-stats/reward-stats.component.ts | 110 +++++--- .../statistics/statistics.component.html | 12 +- .../statistics/statistics.component.ts | 205 ++++++++------ .../load-status/load-status.component.html | 33 +++ .../load-status/load-status.component.scss | 73 +++++ .../load-status/load-status.component.ts | 67 +++++ frontend/src/app/shared/load-state.spec.ts | 190 +++++++++++++ frontend/src/app/shared/load-state.ts | 174 ++++++++++++ frontend/src/app/shared/shared.module.ts | 3 + frontend/vitest.config.ts | 2 +- 15 files changed, 998 insertions(+), 351 deletions(-) create mode 100644 frontend/src/app/shared/components/load-status/load-status.component.html create mode 100644 frontend/src/app/shared/components/load-status/load-status.component.scss create mode 100644 frontend/src/app/shared/components/load-status/load-status.component.ts create mode 100644 frontend/src/app/shared/load-state.spec.ts create mode 100644 frontend/src/app/shared/load-state.ts diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html index b146170a1cd..94eb8c6a8c5 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html @@ -3,7 +3,8 @@
-
+ +
Hashrate (1w)

@@ -30,7 +31,7 @@

Difficulty
-
+
-
-
-
-
+
- -
-
-
Hashrate
-

- -

-
-
-
Difficulty
-

- -

-
-
+ + diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts index 9d17b2a3708..62acacb5164 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, OnDestroy, OnInit, HostBinding } from '@angular/core'; import { echarts, EChartsOption } from '@app/graphs/echarts'; -import { combineLatest, fromEvent, merge, Observable, of } from 'rxjs'; -import { map, mergeMap, share, startWith, switchMap, tap } from 'rxjs/operators'; +import { BehaviorSubject, Subscription, combineLatest, fromEvent } from 'rxjs'; +import { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators'; import { ApiService } from '@app/services/api.service'; import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; @@ -15,6 +15,15 @@ import { StateService } from '@app/services/state.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { chartChrome, rampStops } from '@app/shared/chart-theme'; +import { LoadState, trackedLoadState } from '@app/shared/load-state'; + +interface HashrateSummary { + blockCount: number; + currentDifficulty: number; + currentHashrate: number; + /** Number of hashrate samples, so an empty range is not read as a failure. */ + hashrateCount: number; +} @Component({ selector: 'app-hashrate-chart', @@ -31,7 +40,7 @@ import { chartChrome, rampStops } from '@app/shared/chart-theme'; standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) -export class HashrateChartComponent implements OnInit { +export class HashrateChartComponent implements OnInit, OnDestroy { @Input() tableOnly = false; @Input() widget = false; @Input() height: number = 300; @@ -48,15 +57,20 @@ export class HashrateChartComponent implements OnInit { @HostBinding('attr.dir') dir = 'ltr'; - hashrateObservable$: Observable; - isLoading = true; + state: LoadState = { status: 'loading' }; formatNumber = formatNumber; timespan = ''; chartInstance: any = undefined; network = ''; + private retry$ = new BehaviorSubject(0); + private subscriptions: Subscription[] = []; + /** The last body rendered, so a resize can redraw without a refetch. */ + private lastBody: any = null; + constructor( @Inject(LOCALE_ID) public locale: string, + private cd: ChangeDetectorRef, private seoService: SeoService, private apiService: ApiService, private formBuilder: UntypedFormBuilder, @@ -83,116 +97,157 @@ export class HashrateChartComponent implements OnInit { this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference }); this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference); - this.route - .fragment - .subscribe((fragment) => { + this.subscriptions.push( + this.route.fragment.subscribe((fragment) => { if (['1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) { this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: false }); } - }); + }), + ); - this.hashrateObservable$ = combineLatest( - merge( - this.radioGroupForm.get('dateSpan').valueChanges - .pipe( - startWith(this.radioGroupForm.controls.dateSpan.value), - switchMap((timespan) => { - if (!this.widget && !firstRun) { - this.storageService.setValue('miningWindowPreference', timespan); - } - this.timespan = timespan; - firstRun = false; - this.miningWindowPreference = timespan; - this.isLoading = true; - return this.apiService.getHistoricalHashrate$(this.timespan); - }) - ), - this.stateService.chainTip$ - .pipe( - switchMap(() => { - return this.apiService.getHistoricalHashrate$(this.timespan); - }) - ) + const dateSpan$ = this.radioGroupForm.get('dateSpan').valueChanges.pipe( + startWith(this.radioGroupForm.controls.dateSpan.value), + distinctUntilChanged(), + map((timespan: string) => { + if (!this.widget && !firstRun) { + this.storageService.setValue('miningWindowPreference', timespan); + } + this.timespan = timespan; + firstRun = false; + this.miningWindowPreference = timespan; + return timespan; + }), + ); + + // The tip and the range each used to start their own request, so a page + // load fired two. One combined trigger fires one, and the debounce + // coalesces the burst of tips around a new block. + const chainTip$ = this.stateService.chainTip$.pipe( + distinctUntilChanged(), + debounceTime(1000), + startWith(0), + ); + + const trigger$ = combineLatest([dateSpan$, chainTip$, this.retry$]).pipe( + map(([timespan, tip, attempt]) => timespan + ':' + tip + ':' + attempt), + ); + + this.subscriptions.push( + trackedLoadState( + trigger$, + (key) => this.apiService.getHistoricalHashrate$(key.split(':')[0]).pipe( + map((response: any) => this.summarise(response)), ), - fromEvent(window, 'resize').pipe(startWith(null)), - ).pipe( - map(([response, _]) => response), - tap((response: any) => { - const data = response.body; - - // always include the latest difficulty - if (data.difficulty.length && data.difficulty[data.difficulty.length - 1].difficulty !== data.currentDifficulty) { - data.difficulty.push({ - timestamp: Date.now() / 1000, - difficulty: data.currentDifficulty - }); - } + { isEmpty: (summary) => summary.hashrateCount === 0 }, + ).subscribe((state) => { + this.state = state; + this.cd.markForCheck(); + }), + ); - // We generate duplicated data point so the tooltip works nicely - const diffFixed = []; - let diffIndex = 1; - let hashIndex = 0; - while (hashIndex < data.hashrates.length) { - if (diffIndex >= data.difficulty.length) { - while (hashIndex < data.hashrates.length) { - diffFixed.push({ - timestamp: data.hashrates[hashIndex].timestamp, - difficulty: data.difficulty.length > 0 ? data.difficulty[data.difficulty.length - 1].difficulty : null - }); - ++hashIndex; - } - diffIndex++; - break; - } + // A resize only changes how the same numbers are drawn, so it redraws from + // the last body instead of asking the backend again. + this.subscriptions.push( + fromEvent(window, 'resize').pipe(debounceTime(200)).subscribe(() => { + if (this.lastBody) { + this.renderChart(this.lastBody); + this.cd.markForCheck(); + } + }), + ); + } - while (hashIndex < data.hashrates.length && diffIndex < data.difficulty.length && - data.hashrates[hashIndex].timestamp <= data.difficulty[diffIndex].time - ) { - diffFixed.push({ - timestamp: data.hashrates[hashIndex].timestamp, - difficulty: data.difficulty[diffIndex - 1].difficulty - }); - ++hashIndex; - } - ++diffIndex; - } + ngOnDestroy(): void { + for (const subscription of this.subscriptions) { + subscription.unsubscribe(); + } + this.subscriptions = []; + } - while (diffIndex <= data.difficulty.length) { - diffFixed.push({ - timestamp: data.difficulty[diffIndex - 1].time, - difficulty: data.difficulty[diffIndex - 1].difficulty - }); - diffIndex++; - } + /** The summary currently on screen, fresh or stale, or null when there is none. */ + get hashrates(): HashrateSummary | null { + return this.state.status === 'data' || this.state.status === 'stale' ? this.state.value : null; + } - const maResolution = 15; - const hashrateMa = []; - for (let i = maResolution - 1; i < data.hashrates.length; ++i) { - let avg = 0; - for (let y = maResolution - 1; y >= 0; --y) { - avg += data.hashrates[i - y].avgHashrate; - } - avg /= maResolution; - hashrateMa.push([data.hashrates[i].timestamp * 1000, avg]); - } + onRetry(): void { + this.retry$.next(this.retry$.value + 1); + } + + /** Draws the response and reduces it to the numbers the header shows. */ + private summarise(response: any): HashrateSummary { + const data = response.body; + this.lastBody = data; + this.renderChart(data); + return { + blockCount: parseInt(response.headers.get('x-total-count'), 10), + currentDifficulty: data.currentDifficulty, + currentHashrate: data.currentHashrate, + hashrateCount: Array.isArray(data.hashrates) ? data.hashrates.length : 0, + }; + } - this.prepareChartOptions({ - hashrates: data.hashrates.map(val => [val.timestamp * 1000, val.avgHashrate]), - difficulty: diffFixed.map(val => [val.timestamp * 1000, val.difficulty]), - hashrateMa: hashrateMa, + private renderChart(data: any): void { + // always include the latest difficulty + if (data.difficulty.length && data.difficulty[data.difficulty.length - 1].difficulty !== data.currentDifficulty) { + data.difficulty.push({ + timestamp: Date.now() / 1000, + difficulty: data.currentDifficulty + }); + } + + // We generate duplicated data point so the tooltip works nicely + const diffFixed = []; + let diffIndex = 1; + let hashIndex = 0; + while (hashIndex < data.hashrates.length) { + if (diffIndex >= data.difficulty.length) { + while (hashIndex < data.hashrates.length) { + diffFixed.push({ + timestamp: data.hashrates[hashIndex].timestamp, + difficulty: data.difficulty.length > 0 ? data.difficulty[data.difficulty.length - 1].difficulty : null }); - this.isLoading = false; - }), - map((response) => { - const data = response.body; - return { - blockCount: parseInt(response.headers.get('x-total-count'), 10), - currentDifficulty: data.currentDifficulty, - currentHashrate: data.currentHashrate, - }; - }), - share() - ); + ++hashIndex; + } + diffIndex++; + break; + } + + while (hashIndex < data.hashrates.length && diffIndex < data.difficulty.length && + data.hashrates[hashIndex].timestamp <= data.difficulty[diffIndex].time + ) { + diffFixed.push({ + timestamp: data.hashrates[hashIndex].timestamp, + difficulty: data.difficulty[diffIndex - 1].difficulty + }); + ++hashIndex; + } + ++diffIndex; + } + + while (diffIndex <= data.difficulty.length) { + diffFixed.push({ + timestamp: data.difficulty[diffIndex - 1].time, + difficulty: data.difficulty[diffIndex - 1].difficulty + }); + diffIndex++; + } + + const maResolution = 15; + const hashrateMa = []; + for (let i = maResolution - 1; i < data.hashrates.length; ++i) { + let avg = 0; + for (let y = maResolution - 1; y >= 0; --y) { + avg += data.hashrates[i - y].avgHashrate; + } + avg /= maResolution; + hashrateMa.push([data.hashrates[i].timestamp * 1000, avg]); + } + + this.prepareChartOptions({ + hashrates: data.hashrates.map(val => [val.timestamp * 1000, val.avgHashrate]), + difficulty: diffFixed.map(val => [val.timestamp * 1000, val.difficulty]), + hashrateMa: hashrateMa, + }); } prepareChartOptions(data) { diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.html b/frontend/src/app/components/pool-ranking/pool-ranking.component.html index 33c1fe84d30..f4fabb67de3 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.html +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.html @@ -3,7 +3,8 @@
-
+ +
Pools Luck
@@ -39,7 +40,7 @@
+ *ngIf="!widget && miningStats as stats">
-
-
-
-
+ - +
@@ -98,7 +98,7 @@ - + - diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 72f4360ff2a..560803913dc 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -774,6 +774,25 @@ h1, h2, h3 { font-size: 14px; } +// Positive and negative movement. +// +// Two components set these with an inline style binding carrying #42B747 and +// #B74242, which no theme could reach and which the colour gate's markup +// pattern did not match because an Angular property binding is not a style +// attribute. On the light page the green measured 2.37:1 against 4.5:1 +// required, and it went unseen because the panel that shows it had no fixture +// and rendered as a skeleton in every screenshot. +// +// Green still means up and red still means down. They are the evidence state +// tokens now, which are the versions that clear the floor on every surface. +.movement-up { + color: var(--u-state-proven); +} + +.movement-down { + color: var(--u-state-unavailable); +} + .progress { // Visible so the label below the track is not clipped. The fill keeps // its own rounding, so nothing about the bar itself changes. diff --git a/scripts/universe/check-colors.mjs b/scripts/universe/check-colors.mjs index c71c740f250..d74b5d93b99 100644 --- a/scripts/universe/check-colors.mjs +++ b/scripts/universe/check-colors.mjs @@ -134,9 +134,16 @@ const PATTERNS = [ extensions: ['.scss', '.css'], }, // Inline styles and SVG presentation attributes in templates. + // + // The binding forms are here for a reason. This pattern originally required a + // literal `style="` attribute, so two components carrying + // `[style]="up ? 'color: #42B747' : 'color: #B74242'"` passed the gate for as + // long as it has existed. One of those greens measured 2.37:1 on the light + // page. A property binding paints exactly like an attribute, so it is matched + // exactly like one. { id: 'markup-literal', - regex: /(?:style\s*=\s*"|(?:fill|stroke|stop-color|flood-color)\s*=\s*")[^"]{0,160}?(#[0-9a-fA-F]{3,8}\b|\brgba?\(\s*\d)/g, + regex: /(?:style\s*=\s*"|\[(?:style|ngStyle|attr\.[a-zA-Z-]+)(?:\.[a-zA-Z-]+)?\]\s*=\s*"|(?:fill|stroke|stop-color|flood-color)\s*=\s*")[^"]{0,220}?(#[0-9a-fA-F]{3,8}\b|\brgba?\(\s*\d)/g, extensions: ['.html', '.svg'], }, // Colour-valued properties in component code. diff --git a/scripts/universe/visual-qa/fixtures.mjs b/scripts/universe/visual-qa/fixtures.mjs index c69d150bbbc..f22923c708d 100644 --- a/scripts/universe/visual-qa/fixtures.mjs +++ b/scripts/universe/visual-qa/fixtures.mjs @@ -81,6 +81,18 @@ export const fixtures = { lastEstimatedHashrate: 812_004_881_002_991_000_000, }, + // The mining dashboard's hashrate and difficulty panels. + // + // Without these the right half of the Mining route rendered as skeletons and + // a spinner in every screenshot, so half of one of the thirteen reviewed + // routes was never reviewed at all. + '/api/v1/mining/hashrate/3d': buildHashrateSeries(), + '/api/v1/mining/hashrate/1w': buildHashrateSeries(), + '/api/v1/mining/hashrate/1m': buildHashrateSeries(), + '/api/v1/mining/hashrate': buildHashrateSeries(), + '/api/v1/mining/difficulty-adjustments/1y': buildDifficultyAdjustments(), + '/api/v1/mining/difficulty-adjustments': buildDifficultyAdjustments(), + '/api/v1/universe/protocols': { registryVersion: '2026.08.1', protocols: [ @@ -251,6 +263,52 @@ export const stateOverrides = { export const sampleIds = { TXID_A, TXID_B, TXID_C, ADDRESS, BLOCK_HASH }; +/** + * Network hashrate and difficulty over time, in the shape the mining charts + * expect: a hashrate point per day and a difficulty point per retarget. + * + * The numbers are the right order of magnitude for the network, so the axis + * formats into EH/s rather than collapsing to zero the way the mempool series + * used to. + */ +function buildHashrateSeries() { + const now = Math.floor(Date.now() / 1000); + const hashrates = []; + const difficulty = []; + for (let day = 90; day >= 0; day--) { + const drift = Math.sin(day / 11) * 0.06 + Math.cos(day / 5) * 0.02; + hashrates.push({ + timestamp: now - day * 86_400, + avgHashrate: Math.round(812_004_881_002_991_000_000 * (1 + drift)), + }); + if (day % 14 === 0) { + difficulty.push({ + timestamp: now - day * 86_400, + difficulty: Math.round(110_568_428_300_952 * (1 + drift / 3)), + height: 964_000 - day * 144, + adjustment: Number((drift * 12).toFixed(2)), + }); + } + } + return { + hashrates, + difficulty, + currentHashrate: hashrates[hashrates.length - 1].avgHashrate, + currentDifficulty: difficulty[difficulty.length - 1].difficulty, + }; +} + +/** Retarget history, newest first, as the difficulty chart reads it. */ +function buildDifficultyAdjustments() { + const now = Math.floor(Date.now() / 1000); + return Array.from({ length: 26 }, (_, i) => [ + now - i * 14 * 86_400, + 964_000 - i * 2016, + 110_568_428_300_952 * (1 - i * 0.004), + Number((Math.sin(i / 3) * 3).toFixed(2)), + ]); +} + function buildMempoolStats() { const now = Math.floor(Date.now() / 1000); const points = []; From 2b604e440e4c798d4a937302dad93a46b3424d74 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:11:44 +0000 Subject: [PATCH 29/68] ops: back the database up on a schedule, and write down what it costs A restore was verified by hand, which proves the dump format works and nothing else: there was no backup being taken. A daily timer now writes to the same directory and keeps two weeks. It refuses to keep a dump that is suspiciously small and checks the archive reads back, because a backup nobody verifies is not a backup. The deployment notes gain the measured growth figures, so the next person deciding whether to prune or to widen the indexing window has the numbers rather than a guess. At roughly 300 MB a year against 1.5 TB free, nothing is pruned, and statistics are kept indefinitely on purpose: the "all" range is the whole series. Co-Authored-By: Claude Opus 5 --- docs/operations/DEPLOYMENT.md | 20 +++++++++ production/linux/universe-explorer-backup | 44 +++++++++++++++++++ .../linux/universe-explorer-backup.service | 11 +++++ .../linux/universe-explorer-backup.timer | 11 +++++ 4 files changed, 86 insertions(+) create mode 100644 production/linux/universe-explorer-backup create mode 100644 production/linux/universe-explorer-backup.service create mode 100644 production/linux/universe-explorer-backup.timer diff --git a/docs/operations/DEPLOYMENT.md b/docs/operations/DEPLOYMENT.md index fc092cc0526..9a03bc666de 100644 --- a/docs/operations/DEPLOYMENT.md +++ b/docs/operations/DEPLOYMENT.md @@ -164,6 +164,26 @@ suite can see that. different builds. 7. Keep the previous release directory until the stability window closes. +## Database growth and retention + +Measured on the running deployment, with one year of blocks indexed and the +statistics writer taking a sample a minute: + +| Table | Rows | Size | Growth | +| --- | --- | --- | --- | +| `blocks` | 52,580 | 130 MB | about 0.4 MB a day, from new blocks only | +| `statistics` | 1 a minute | small | about 0.4 MB a day | +| `hashrates` | 1,437 | 0.2 MB | a few rows a day | + +That is roughly 300 MB a year against 1.5 TB free on `/data/indexers-c`, so +nothing is pruned. Statistics are kept indefinitely on purpose: the `all` range +is the whole series, and deleting old samples would silently shorten it. + +The indexed block window is bounded by `INDEXING_BLOCKS_AMOUNT`, so `blocks` +grows only with the chain rather than with the backlog. Raising that value +re-indexes further back and costs Bitcoin Core RPC time while it runs; do it +when the host is not also rebuilding an index. + ## Monitoring `universe-explorer-synthetic-check.timer` runs the synthetic check against the diff --git a/production/linux/universe-explorer-backup b/production/linux/universe-explorer-backup new file mode 100644 index 00000000000..60a2c1bfcd1 --- /dev/null +++ b/production/linux/universe-explorer-backup @@ -0,0 +1,44 @@ +#!/bin/bash +# +# Dumps the Universe Explorer database and prunes old dumps. +# +# A restore was verified by hand once; a backup nobody takes is not a backup, +# so this runs daily and keeps two weeks. Verify a restore into a scratch +# schema after any change to the schema or the engine: +# +# gunzip -c | docker exec -i universe-explorer-mariadb \ +# mariadb -u root -p"$MYSQL_ROOT_PASSWORD" restore_probe +# +set -euo pipefail + +CONTAINER=universe-explorer-mariadb +DEST=/data/indexers-c/universe-explorer/backups +KEEP_DAYS=14 + +set -a +. /etc/universe-explorer/mysql.env +set +a + +mkdir -p "$DEST" +STAMP=$(date -u +%Y%m%dT%H%M%SZ) +OUT="$DEST/universe_explorer-$STAMP.sql.gz" + +docker exec "$CONTAINER" mariadb-dump \ + -u root -p"$MYSQL_ROOT_PASSWORD" \ + --single-transaction --routines --events \ + "$MYSQL_DATABASE" 2>/dev/null | gzip > "$OUT" + +# A dump that is suspiciously small did not work, and keeping it would hide +# that the good one is missing. +SIZE=$(stat -c %s "$OUT") +if [ "$SIZE" -lt 1000000 ]; then + echo "backup is only $SIZE bytes, refusing to keep it" >&2 + rm -f "$OUT" + exit 1 +fi + +# Prove the dump can be read back before trusting it. +gunzip -t "$OUT" + +find "$DEST" -name 'universe_explorer-*.sql.gz' -mtime "+$KEEP_DAYS" -delete +echo "wrote $OUT ($SIZE bytes), keeping $KEEP_DAYS days" diff --git a/production/linux/universe-explorer-backup.service b/production/linux/universe-explorer-backup.service new file mode 100644 index 00000000000..ef6674dee0d --- /dev/null +++ b/production/linux/universe-explorer-backup.service @@ -0,0 +1,11 @@ +[Unit] +Description=Universe Explorer database backup +After=network-online.target +Wants=network-online.target + +[Service] +Type=oneshot +# Reads the credentials from the file that already holds them, so no secret +# reaches a command line or the journal. Keeps two weeks of daily dumps; the +# database is a few hundred megabytes and the disk has terabytes free. +ExecStart=/usr/local/bin/universe-explorer-backup diff --git a/production/linux/universe-explorer-backup.timer b/production/linux/universe-explorer-backup.timer new file mode 100644 index 00000000000..408defda72d --- /dev/null +++ b/production/linux/universe-explorer-backup.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Back up the Universe Explorer database daily + +[Timer] +OnCalendar=daily +RandomizedDelaySec=30min +Persistent=true +Unit=universe-explorer-backup.service + +[Install] +WantedBy=timers.target From 88183aacdc940d0d4a8118b8a58ad2409b30d8dc Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:12:35 +0000 Subject: [PATCH 30/68] docs: point the rollback notes at the scheduled backup The notes still told the reader to compose a dump command by hand, which was accurate before there was a timer taking one every day. They now name the unit, and they say to verify a restore rather than to trust that a dump exists, because that is the part that was actually missing. Co-Authored-By: Claude Opus 5 --- docs/operations/DEPLOYMENT.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/operations/DEPLOYMENT.md b/docs/operations/DEPLOYMENT.md index 9a03bc666de..1b2209d6fd2 100644 --- a/docs/operations/DEPLOYMENT.md +++ b/docs/operations/DEPLOYMENT.md @@ -218,12 +218,24 @@ and an older backend reads a newer schema. A rollback across a migration should therefore be paired with a database restore only if the newer schema is known to be incompatible, which has not happened yet. -Back up the database before a release that migrates: +`universe-explorer-backup.timer` dumps the database daily into +`/data/indexers-c/universe-explorer/backups` and keeps two weeks. The script +refuses to keep a dump that is suspiciously small and checks the archive reads +back, because a backup nobody verifies is not a backup. Take one by hand before +a release that migrates: ```bash -docker exec universe-explorer-mariadb mariadb-dump \ - -u root -p"$MYSQL_ROOT_PASSWORD" --single-transaction universe_explorer \ - | gzip > /data/indexers-c/universe-explorer/backups/universe_explorer-$(date -u +%Y%m%dT%H%M%SZ).sql.gz +systemctl start universe-explorer-backup.service +``` + +Verify a restore into a scratch schema after any change to the schema or the +engine, rather than trusting that the dump exists: + +```bash +docker exec universe-explorer-mariadb mariadb -u root -p"$MYSQL_ROOT_PASSWORD" \ + -e 'DROP DATABASE IF EXISTS restore_probe; CREATE DATABASE restore_probe;' +gunzip -c | docker exec -i universe-explorer-mariadb \ + mariadb -u root -p"$MYSQL_ROOT_PASSWORD" restore_probe ``` ## Rules From 9c001dc3763e9d29e20698830991be0ce708e917 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:19:40 +0000 Subject: [PATCH 31/68] ci: prove the call sites use the foreground pairs, not just that they exist check-palettes proves the token pairs are readable: white on the brand fill, near black on the dark theme's brand. It cannot see whether a component actually uses them together, and a rule that paints a brand background and says nothing about colour inherits the page ink, which on light is near black on hot pink. That is the exact failure the brand and contrast tokens were split to prevent. Five surfaces had it: the accelerate button and the four menu tier badges. None of them render in this deployment, because both features are disabled here, so no screenshot could ever have shown it and no reviewer could have caught it. They would have been wrong the day someone turned them on. The check only looks at rules that also lay out text, so a dot, a bar, a rule and a toggle track are correctly left alone. 62 fills checked, 0 failing. --- .github/workflows/universe-ci.yml | 3 + .../app/components/menu/menu.component.scss | 4 + .../components/tracker/tracker.component.scss | 3 + scripts/universe/check-fills.mjs | 104 ++++++++++++++++++ 4 files changed, 114 insertions(+) create mode 100644 scripts/universe/check-fills.mjs diff --git a/.github/workflows/universe-ci.yml b/.github/workflows/universe-ci.yml index da958b21959..c8a01ccc2e1 100644 --- a/.github/workflows/universe-ci.yml +++ b/.github/workflows/universe-ci.yml @@ -40,6 +40,9 @@ jobs: - name: Every dynamic palette carries a readable foreground run: node scripts/universe/check-palettes.mjs + - name: Every filled surface declares the ink on it + run: node scripts/universe/check-fills.mjs + - name: Contrast arithmetic is correct run: node --test scripts/universe/contrast.test.mjs diff --git a/frontend/src/app/components/menu/menu.component.scss b/frontend/src/app/components/menu/menu.component.scss index 6b71e3ad5af..8aa4a685625 100644 --- a/frontend/src/app/components/menu/menu.component.scss +++ b/frontend/src/app/components/menu/menu.component.scss @@ -79,18 +79,22 @@ .badge-og { background-color: var(--title-fg); + color: var(--u-text-inverse); } .badge-pleb { background-color: var(--u-brand); + color: var(--u-brand-contrast); } .badge-chad { background-color: var(--u-state-partial); + color: var(--u-text-inverse); } .badge-whale { background-color: var(--tertiary); + color: var(--u-text-inverse); } .badge-silver { diff --git a/frontend/src/app/components/tracker/tracker.component.scss b/frontend/src/app/components/tracker/tracker.component.scss index b550e70d485..683acef7d27 100644 --- a/frontend/src/app/components/tracker/tracker.component.scss +++ b/frontend/src/app/components/tracker/tracker.component.scss @@ -163,6 +163,9 @@ height: 100%; padding: 0.5rem 0.25rem; background-color: var(--u-brand); + // A filled brand surface carrying a label, so it declares the ink that reads + // on it rather than inheriting the page ink. + color: var(--u-brand-contrast); } .bottom-panel { diff --git a/scripts/universe/check-fills.mjs b/scripts/universe/check-fills.mjs new file mode 100644 index 00000000000..5f3174bd9e8 --- /dev/null +++ b/scripts/universe/check-fills.mjs @@ -0,0 +1,104 @@ +#!/usr/bin/env node +/** + * Every filled surface that carries text has to declare the ink on it. + * + * `check-palettes.mjs` proves that the token pairs are readable: white on the + * brand fill, near black on the dark theme's brand, the block ink on a block + * face. It cannot see whether a component actually uses them together. A rule + * that paints a brand background and says nothing about colour inherits the + * page ink, which on the light theme is near black on hot pink. + * + * That failure is invisible in review whenever the surface belongs to a feature + * this deployment disables, which is exactly where it was found: an accelerate + * button and four menu badges, none of which render here, all of which would + * have been wrong the day someone turned them on. + * + * A fill that carries no text needs no ink, so the check only looks at rules + * that also set a text property. A dot, a bar, a rule and a toggle track are + * all correctly left alone. + * + * Usage: + * node scripts/universe/check-fills.mjs [path ...] + */ + +import { readdirSync, readFileSync, statSync } from 'node:fs'; +import { join, relative, resolve, sep } from 'node:path'; + +const ROOT = resolve(import.meta.dirname, '..', '..'); +const SKIPPED = new Set(['node_modules', 'dist', '.angular', '.git']); + +/** + * Backgrounds that are strong enough that page ink cannot be assumed to read on + * them. Tints such as --u-brand-subtle are not here: they are designed to carry + * normal text, and check-palettes measures them. + */ +const STRONG_FILLS = [ + 'u-brand', 'u-brand-hover', 'u-brand-active', 'u-gradient-brand', + 'u-magenta', 'u-fuchsia', 'u-lavender', + 'u-state-proven', 'u-state-partial', 'u-state-pending', 'u-state-unavailable', + 'title-fg', 'primary', 'tertiary', +]; + +/** Declaring any of these means the rule made a deliberate choice of ink. */ +const DECLARES_INK = /(?:^|[\s;{])color\s*:/; + +/** A rule that sets one of these is laying out text. */ +const CARRIES_TEXT = /(?:padding|font-size|font-weight|font-family|line-height|text-align|text-transform|letter-spacing)\s*:/; + +function* walk(path) { + const stats = statSync(path); + if (stats.isFile()) { yield path; return; } + for (const entry of readdirSync(path, { withFileTypes: true })) { + if (entry.isDirectory()) { + if (SKIPPED.has(entry.name)) continue; + yield* walk(join(path, entry.name)); + } else if (entry.isFile() && entry.name.endsWith('.scss')) { + yield join(path, entry.name); + } + } +} + +const args = process.argv.slice(2); +const targets = args.length ? args.map((a) => resolve(ROOT, a)) : [resolve(ROOT, 'frontend/src')]; + +const findings = []; +let checked = 0; + +for (const target of targets) { + for (const file of walk(target)) { + const css = readFileSync(file, 'utf8'); + // Innermost blocks only, so a declaration is judged against its own rule. + for (const match of css.matchAll(/\{([^{}]*)\}/g)) { + const body = match[1]; + const fills = STRONG_FILLS.filter((token) => + new RegExp(`(?:background|background-color|background-image)\\s*:[^;]*var\\(--${token}\\s*[),]`).test(body)); + if (!fills.length) continue; + checked++; + if (DECLARES_INK.test(body)) continue; + if (!CARRIES_TEXT.test(body)) continue; + findings.push({ + file: relative(ROOT, file).split(sep).join('/'), + line: css.slice(0, match.index).split(/\r?\n/).length, + fills: fills.join(', '), + snippet: body.trim().replace(/\s+/g, ' ').slice(0, 96), + }); + } + } +} + +if (!findings.length) { + console.log(`Every strong fill that carries text declares its ink (${checked} fills checked).`); + process.exit(0); +} + +console.error(`${findings.length} filled surface(s) carrying text without a declared ink:\n`); +for (const f of findings) { + console.error(` ${f.file}:${f.line} [${f.fills}]`); + console.error(` ${f.snippet}`); +} +console.error( + '\nA filled surface inherits the page ink unless it says otherwise, which on the' + + '\nlight theme is near black on a saturated fill. Add the foreground the fill' + + '\ndeclares: --u-brand-contrast for a brand fill, --u-text-inverse for a state.', +); +process.exit(1); From ffb94dd0fe3e37a77b7ec18b0e03ef1cdfa1a631 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:25:30 +0000 Subject: [PATCH 32/68] test: start the integration database from a known state The step failed in CI on its first run: a container left behind by an earlier run was still up, so compose reported it as already running and never recreated it. The engine had changed underneath it, and the readiness probe then waited out its attempts on a database that was never going to be the one the tests asked for. Tear the previous container down, volumes included, and recreate. Remove a stray container holding the same name too, because `down` only removes what compose owns and `up` fails on the conflict rather than starting anything. Probe with either client binary name, since MariaDB renamed them and a probe that knows one name reports a healthy server as a database that never started. Verified by leaving a container of the wrong engine running and watching the suite replace it and pass. Co-Authored-By: Claude Opus 5 --- backend/jest.integration.setup.ts | 40 +++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/backend/jest.integration.setup.ts b/backend/jest.integration.setup.ts index c5093b01ae5..9ccf5c87855 100644 --- a/backend/jest.integration.setup.ts +++ b/backend/jest.integration.setup.ts @@ -36,8 +36,29 @@ module.exports = async () => { const composeFile = path.join(__dirname, 'docker-compose.test.yml'); const dockerComposeCmd = getDockerComposeCmd(); - // Start the container - execSync(`${dockerComposeCmd} -f "${composeFile}" up -d`, { + // A container left running by an earlier run is not the container this run + // asked for: compose reports it as already up and never recreates it, so a + // change of image or of engine is silently ignored and the tests measure + // whatever was there before. Tear it down, volumes included, first. + try { + execSync(`${dockerComposeCmd} -f "${composeFile}" down -v --remove-orphans`, { + stdio: 'inherit', + cwd: __dirname + }); + } catch { + // Nothing to remove on a clean machine, which is the normal case. + } + + // `down` only removes what compose owns. A container left behind under the + // same name by anything else still holds the name, and `up` fails on the + // conflict rather than starting the database. + try { + execSync('docker rm -f backend-db-test-1', { stdio: 'pipe' }); + } catch { + // No such container, which is the normal case. + } + + execSync(`${dockerComposeCmd} -f "${composeFile}" up -d --force-recreate`, { stdio: 'inherit', cwd: __dirname }); @@ -45,14 +66,19 @@ module.exports = async () => { // Wait for database to be ready console.log('Waiting for database to be ready...'); let attempts = 0; - const maxAttempts = 30; + const maxAttempts = 60; while (attempts < maxAttempts) { try { - execSync(`${dockerComposeCmd} -f "${composeFile}" exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent`, { - cwd: __dirname, - stdio: 'pipe' - }); + // MariaDB renamed its client binaries; either name may be the one this + // image ships, so a probe that only knows one of them reports a + // healthy server as a database that never started. + execSync( + `${dockerComposeCmd} -f "${composeFile}" exec -T db-test sh -c ` + + `"mariadb-admin ping -h localhost -u mempool_test -pmempool_test --silent ` + + `|| mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent"`, + { cwd: __dirname, stdio: 'pipe' }, + ); console.log('Database is ready!'); break; } catch (e) { From 9f12cf77c390cc75c307c7eec72ba99a57cc402e Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:32:04 +0000 Subject: [PATCH 33/68] ci: hold the built output to the punctuation rule, not just the source The em dash gate scanned the repository and skipped the build output, which is the half a reader actually sees. Copy reaches the bundle from templates, from generated configuration and from metadata, so a clean source tree was never proof of a clean page. Pointed at frontend/dist it passes today, with one exemption: the third-party licence notice reproduces every dependency's licence exactly as its authors wrote it, and editing somebody's licence to satisfy our punctuation is not an option. It is the only file in the output carrying the character. --- .github/workflows/universe-ci.yml | 3 +++ scripts/universe/check-text.mjs | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/.github/workflows/universe-ci.yml b/.github/workflows/universe-ci.yml index c8a01ccc2e1..b1e4cd561ef 100644 --- a/.github/workflows/universe-ci.yml +++ b/.github/workflows/universe-ci.yml @@ -126,6 +126,9 @@ jobs: - name: Every asset the build references is in the output run: node scripts/universe/check-build-assets.mjs + - name: No em dash in what the build actually ships + run: node scripts/universe/check-text.mjs frontend/dist + - name: Install the visual QA harness working-directory: scripts/universe/visual-qa run: npm ci diff --git a/scripts/universe/check-text.mjs b/scripts/universe/check-text.mjs index df908b3b5d3..0e6736e9bba 100644 --- a/scripts/universe/check-text.mjs +++ b/scripts/universe/check-text.mjs @@ -15,6 +15,11 @@ * * With no arguments it scans the whole repository, skipping directories that * are not ours to police (dependencies, build output, git internals). + * + * Pass `frontend/dist` to scan the built output instead. Source being clean + * does not prove the output is: copy reaches the bundle from templates, from + * generated configuration, and from metadata, and the rule is about what a + * reader actually sees. CI runs both. */ import { readdirSync, readFileSync, statSync } from 'node:fs'; @@ -37,9 +42,15 @@ const SKIPPED_DIRECTORIES = new Set([ * Files we do not author. Upstream translation catalogues carry the upstream * copy verbatim, including its punctuation; they are not shipped by this * deployment's build and are regenerated when locales are re-enabled. + * + * The third-party licence notice in the build output is the licence text of + * every dependency, reproduced exactly as its authors wrote it. Editing + * somebody's licence to satisfy our punctuation rule is not an option, and it + * is the only file in the output that carries the character. */ const ALLOWED_PATHS = [ 'frontend/src/locale/', + 'frontend/dist/mempool/browser/3rdpartylicenses.txt', ]; const TEXT_EXTENSIONS = new Set([ From 5e33ed3704529b50130dcd401a2331b7d92c5b9e Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:36:31 +0000 Subject: [PATCH 34/68] fix: the address page, which has been showing an error in every screenshot The fixture pinned only the address summary. The harness falls back to a prefix match, so /api/address//txs matched the summary's key and was answered with the summary object. The page called forEach on it and threw. One of the thirteen reviewed routes has been rendering its error state in every screenshot the matrix has ever taken, and the error it rendered was the "(undefined undefined: )" this branch already fixed. Pinning the sub-routes made the page render, and the page immediately failed contrast: the negative balance button is .btn-danger, which the Bootstrap bridge never restated, so it kept the framework's own #dc3545 and inherited the page ink at 3.21:1. .btn-warning and .btn-info had the same gap. All three now take the state tokens and declare their ink, which also fixes the stale block badge, the unconfirmed count, and the replaced and removed states. check-fills cannot see this class: the fill comes from compiled framework CSS rather than from a token in our own stylesheets. Measuring rendered pixels is what caught it, and that only works when the page renders. Address, block and transaction now report 0 contrast failures and 0 accessibility violations across light, dark and high contrast. --- .../styles/_universe-bootstrap-bridge.scss | 25 +++++++++++++++++++ scripts/universe/visual-qa/fixtures.mjs | 21 ++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/frontend/src/styles/_universe-bootstrap-bridge.scss b/frontend/src/styles/_universe-bootstrap-bridge.scss index fe6beb4924d..47c46754373 100644 --- a/frontend/src/styles/_universe-bootstrap-bridge.scss +++ b/frontend/src/styles/_universe-bootstrap-bridge.scss @@ -263,6 +263,31 @@ color: var(--u-text-inverse); } + // The other filled state buttons. Only .btn-success was restated here, so + // .btn-danger kept Bootstrap's own #dc3545 and inherited the page ink, which + // on the light theme is near black on red at 3.21:1. It renders on three + // surfaces: a stale block, an unconfirmed count, and a negative balance on + // the address page. The last of those went unmeasured for as long as the + // address fixture was answering the wrong shape and the page showed an error + // instead of a balance. + .btn-danger { + background-color: var(--u-state-unavailable); + border-color: var(--u-state-unavailable); + color: var(--u-text-inverse); + } + + .btn-warning { + background-color: var(--u-state-partial); + border-color: var(--u-state-partial); + color: var(--u-text-inverse); + } + + .btn-info { + background-color: var(--u-state-pending); + border-color: var(--u-state-pending); + color: var(--u-text-inverse); + } + .btn-link { color: var(--u-brand); diff --git a/scripts/universe/visual-qa/fixtures.mjs b/scripts/universe/visual-qa/fixtures.mjs index f22923c708d..ac4c72820d7 100644 --- a/scripts/universe/visual-qa/fixtures.mjs +++ b/scripts/universe/visual-qa/fixtures.mjs @@ -175,12 +175,33 @@ export const detailFixtures = { }; /** Address with history, and its transactions. */ +/** + * The address page, and every sub-route it asks for. + * + * Only the summary used to be pinned. The harness falls back to a prefix match, + * so `/api/address//txs` matched the summary's key and was answered with + * the summary object. The page called forEach on it, threw, and rendered its + * error state in every screenshot the matrix has ever taken, which is how one + * of the thirteen reviewed routes was never actually reviewed. Each sub-route + * is pinned explicitly now, and each returns the shape its caller expects. + */ export const addressFixtures = { [`/api/address/${ADDRESS}`]: { address: ADDRESS, chain_stats: { funded_txo_count: 42, funded_txo_sum: 184_002_881, spent_txo_count: 38, spent_txo_sum: 171_004_002, tx_count: 51 }, mempool_stats: { funded_txo_count: 1, funded_txo_sum: 220_000, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 1 }, }, + [`/api/address/${ADDRESS}/txs`]: [buildTransaction()], + [`/api/address/${ADDRESS}/txs/chain`]: [buildTransaction()], + [`/api/address/${ADDRESS}/txs/mempool`]: [], + [`/api/address/${ADDRESS}/txs/summary`]: [ + { txid: TXID_A, height: 887_412, time: 1_772_100_000, value: 1_500_000 }, + { txid: TXID_B, height: 887_411, time: 1_772_099_400, value: -220_000 }, + ], + [`/api/address/${ADDRESS}/utxo`]: [ + { txid: TXID_A, vout: 0, value: 1_500_000, status: { confirmed: true, block_height: 887_412, block_hash: BLOCK_HASH, block_time: 1_772_100_000 } }, + { txid: TXID_B, vout: 1, value: 220_000, status: { confirmed: false } }, + ], }; /** From df4526b8b90f8acdd8e914705212d6c76cf3e2c7 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:37:23 +0000 Subject: [PATCH 35/68] gateway: wait out an upstream restart instead of answering 502 The production monitor recorded the last deploy as an outage: three checks failed at the exact second of the cutover. The backend and the overlay take a few seconds to listen again after a restart, and the gateway answered 502 the instant the connection was refused, so every request in that window became a visible failure. A request with no body is now retried over about five seconds while the connection is refused. That bridges a restart, and it never retries a write, because only GET and HEAD can be replayed. An upstream that is genuinely gone still gets a 502, still well inside the page's own budget, so a real outage is reported rather than hidden behind a long wait. Verified by starting the gateway against an upstream that is not listening and bringing it up a second later: 200 after 1.8s, against 502 after 5.3s when nothing comes back at all. Co-Authored-By: Claude Opus 5 --- .github/workflows/universe-ci.yml | 3 + docs/operations/DEPLOYMENT.md | 6 +- scripts/universe/gateway-restart.test.mjs | 83 ++++++++++++++++++++ scripts/universe/gateway.mjs | 94 ++++++++++++++++------- 4 files changed, 155 insertions(+), 31 deletions(-) create mode 100644 scripts/universe/gateway-restart.test.mjs diff --git a/.github/workflows/universe-ci.yml b/.github/workflows/universe-ci.yml index 85759f79c47..6c33298659e 100644 --- a/.github/workflows/universe-ci.yml +++ b/.github/workflows/universe-ci.yml @@ -52,6 +52,9 @@ jobs: - name: Gateway routing run: node --test scripts/universe/gateway.test.mjs + - name: The gateway bridges an upstream restart rather than failing + run: node --test scripts/universe/gateway-restart.test.mjs + backend: name: Backend build and test runs-on: [self-hosted, linux-ultra] diff --git a/docs/operations/DEPLOYMENT.md b/docs/operations/DEPLOYMENT.md index 1b2209d6fd2..71f7b73ad4b 100644 --- a/docs/operations/DEPLOYMENT.md +++ b/docs/operations/DEPLOYMENT.md @@ -153,8 +153,10 @@ suite can see that. authority configured. 5. `universe-explorer-release cutover ` runs the gates again, swaps the `current` symlink atomically, restarts the three units, and verifies. The - gateway comes back within a second, so the public origin sees at most a - brief connection reset. After the swap it reads `/api/v1/capabilities` and + backend and the overlay take a few seconds to listen again; the gateway + waits for them rather than answering 502, so a request that arrives during + the restart is served late rather than failed. An upstream that is genuinely + gone is still reported as a gateway failure within a few seconds. After the swap it reads `/api/v1/capabilities` and fails the release if any feature is enabled with no routes registered, which is exactly the state that shipped. A failed verification rolls back. 6. Run `node scripts/universe/synthetic-check.mjs` against the public origin. diff --git a/scripts/universe/gateway-restart.test.mjs b/scripts/universe/gateway-restart.test.mjs new file mode 100644 index 00000000000..5b59cdd9df2 --- /dev/null +++ b/scripts/universe/gateway-restart.test.mjs @@ -0,0 +1,83 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import http from 'node:http'; +import { spawn } from 'node:child_process'; +import { setTimeout as sleep } from 'node:timers/promises'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +/** + * A release restarts the backend and the overlay, and they take a few seconds + * to listen again. The gateway used to answer 502 the instant the connection + * was refused, so every request in that window became a visible failure and the + * production monitor recorded the deploy as an outage. + * + * These start the real gateway against an upstream that is not listening, and + * check that a request waits for it to come back rather than failing, while an + * upstream that is genuinely gone is still reported promptly. + */ + +const HERE = dirname(fileURLToPath(import.meta.url)); +const GATEWAY = join(HERE, 'gateway.mjs'); +const ROOT = join(HERE, '..', '..', 'frontend', 'dist', 'mempool', 'browser'); + +const GATEWAY_PORT = 8794; +const UPSTREAM_PORT = 8795; + +function startGateway() { + return spawn(process.execPath, [GATEWAY], { + env: { + ...process.env, + UNIVERSE_GATEWAY_HOST: '127.0.0.1', + UNIVERSE_GATEWAY_PORT: String(GATEWAY_PORT), + UNIVERSE_GATEWAY_BACKEND: `http://127.0.0.1:${UPSTREAM_PORT}`, + UNIVERSE_GATEWAY_OVERLAY: `http://127.0.0.1:${UPSTREAM_PORT}`, + UNIVERSE_GATEWAY_ROOT: ROOT, + }, + stdio: 'ignore', + }); +} + +function ask(path = '/api/v1/backend-info') { + return new Promise((resolve) => { + const started = Date.now(); + http + .get({ host: '127.0.0.1', port: GATEWAY_PORT, path }, (response) => { + response.resume(); + response.on('end', () => resolve({ status: response.statusCode, ms: Date.now() - started })); + }) + .on('error', (error) => resolve({ status: 0, error: error.code, ms: Date.now() - started })); + }); +} + +test('a request waits for an upstream that is restarting, rather than failing', async (t) => { + const gateway = startGateway(); + t.after(() => gateway.kill()); + await sleep(1200); + + // Nothing is listening yet, exactly as during a restart. + const inFlight = ask(); + await sleep(1000); + + const upstream = http.createServer((_, response) => { + response.writeHead(200, { 'content-type': 'application/json' }); + response.end('{"ok":true}'); + }); + await new Promise((resolve) => upstream.listen(UPSTREAM_PORT, '127.0.0.1', resolve)); + t.after(() => upstream.close()); + + const bridged = await inFlight; + assert.equal(bridged.status, 200, 'a restart should be bridged, not reported as a failure'); +}); + +test('an upstream that is genuinely gone is still reported, and promptly', async (t) => { + const gateway = startGateway(); + t.after(() => gateway.kill()); + await sleep(1200); + + const dead = await ask(); + assert.equal(dead.status, 502, 'a dead upstream must be a gateway failure, never an empty success'); + // Bounded well inside the page's own request budget, so the interface still + // reaches a terminal state quickly. + assert.ok(dead.ms < 12_000, `gave up after ${dead.ms}ms, which is too long to hold a reader`); +}); diff --git a/scripts/universe/gateway.mjs b/scripts/universe/gateway.mjs index 1a70480cc14..dc4180ada4f 100644 --- a/scripts/universe/gateway.mjs +++ b/scripts/universe/gateway.mjs @@ -174,38 +174,74 @@ export function routeFor(pathname, originalUrl) { return null; } +/** + * How long a request waits for an upstream that is refusing connections. + * + * A release restarts the backend and the overlay, and they take a few seconds + * to listen again. Answering 502 the instant the connection is refused turns + * every request in that window into a visible failure, which is the difference + * between a deploy nobody notices and one that shows up as an outage. These + * delays bridge a restart and give up well inside the page's own budget, so a + * genuinely dead upstream is still reported promptly rather than hidden. + */ +const RESTART_RETRY_DELAYS_MS = [250, 500, 1000, 1500, 2000]; + +/** True for a failure that a moment's wait could plausibly resolve. */ +function upstreamIsRestarting(error) { + return error?.code === 'ECONNREFUSED' || error?.code === 'ECONNRESET'; +} + function proxy(request, response, route) { const upstream = route.upstream; - const options = { - protocol: upstream.protocol, - hostname: upstream.hostname, - port: upstream.port, - method: request.method, - path: route.path, - headers: { ...request.headers, host: upstream.host }, - timeout: UPSTREAM_TIMEOUT_MS, - }; - const proxied = http.request(options, (upstreamResponse) => { - // API responses are data, never documents, so they get the headers without - // a content policy. - response.writeHead( - upstreamResponse.statusCode || 502, - withSecurityHeaders(upstreamResponse.headers, false), - ); - upstreamResponse.pipe(response); - }); - proxied.on('timeout', () => proxied.destroy(new Error('upstream timeout'))); - proxied.on('error', () => { - if (response.headersSent) { - response.destroy(); - return; + // Only a request with no body can be replayed. Everything this gateway + // proxies that changes state carries one, so this never retries a write. + const replayable = request.method === 'GET' || request.method === 'HEAD'; + let attempt = 0; + + const send = () => { + const options = { + protocol: upstream.protocol, + hostname: upstream.hostname, + port: upstream.port, + method: request.method, + path: route.path, + headers: { ...request.headers, host: upstream.host }, + timeout: UPSTREAM_TIMEOUT_MS, + }; + const proxied = http.request(options, (upstreamResponse) => { + // API responses are data, never documents, so they get the headers + // without a content policy. + response.writeHead( + upstreamResponse.statusCode || 502, + withSecurityHeaders(upstreamResponse.headers, false), + ); + upstreamResponse.pipe(response); + }); + proxied.on('timeout', () => proxied.destroy(new Error('upstream timeout'))); + proxied.on('error', (error) => { + if (response.headersSent) { + response.destroy(); + return; + } + if (replayable && upstreamIsRestarting(error) && attempt < RESTART_RETRY_DELAYS_MS.length) { + const delay = RESTART_RETRY_DELAYS_MS[attempt]; + attempt += 1; + setTimeout(send, delay); + return; + } + // A dead upstream is reported as a gateway failure, never as an empty + // success: a caller must be able to tell the two apart. + response.writeHead(502, { 'content-type': 'application/json; charset=utf-8' }); + response.end(JSON.stringify({ error: 'upstream-unavailable' })); + }); + if (replayable) { + proxied.end(); + } else { + request.pipe(proxied); } - // A dead upstream is reported as a gateway failure, never as an empty - // success: a caller must be able to tell the two apart. - response.writeHead(502, { 'content-type': 'application/json; charset=utf-8' }); - response.end(JSON.stringify({ error: 'upstream-unavailable' })); - }); - request.pipe(proxied); + }; + + send(); } /** Resolves a request path to a file inside the root, or null. */ From 5810e13cce3f8948babd7e9702658b96547837f3 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:41:23 +0000 Subject: [PATCH 36/68] release: leave the gateway up when its own code has not changed Probing the origin through a cutover still caught two 502s. The retry added for a restarting upstream cannot help there: the gateway itself was being restarted, and nothing behind a process that is down can answer for it. It does not need restarting for most releases. The backend and the overlay run from a path baked into their unit at exec time, so they have to come back; the gateway resolves its static root per request, so a new frontend reaches it through the symlink on the next request. It restarts only when its own file differs from the running release, which is the one case that still shows a brief gap, and the log says so when it happens. Co-Authored-By: Claude Opus 5 --- scripts/universe/release.sh | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/scripts/universe/release.sh b/scripts/universe/release.sh index db6a7341b18..ee9fc5d5a02 100644 --- a/scripts/universe/release.sh +++ b/scripts/universe/release.sh @@ -255,12 +255,32 @@ cmd_cutover() { local previous; previous=$(readlink -f "$CURRENT" 2>/dev/null || true) log "previous release: ${previous:-none}" + # Whether the gateway itself has to come down decides whether this deploy is + # visible at all. The backend and the overlay run from a path baked into + # their unit at exec time, so they must restart; the gateway resolves its + # static root per request, so a frontend change reaches it through the + # symlink with no restart. Restarting it anyway is the only part of a deploy + # that nothing can bridge, so it happens only when its own code changed. + local gateway_changed=no + if [ -n "$previous" ] && [ -f "$previous/scripts/universe/gateway.mjs" ]; then + if ! cmp -s "$previous/scripts/universe/gateway.mjs" "$dir/scripts/universe/gateway.mjs"; then + gateway_changed=yes + fi + else + gateway_changed=yes + fi + ln -sfn "$dir" "$CURRENT.new" mv -Tf "$CURRENT.new" "$CURRENT" log "current now points at $dir" - # shellcheck disable=SC2086 - systemctl restart $UNITS + systemctl restart universe-explorer-backend universe-explorer-overlay + if [ "$gateway_changed" = yes ]; then + log "the gateway changed, restarting it too; the origin sees a brief gap" + systemctl restart universe-explorer-gateway + else + log "the gateway is unchanged, leaving it up so the origin sees no gap" + fi if ! verify_live; then log "verification failed, rolling back" [ -n "$previous" ] && cmd_rollback "$(basename "$previous" | sed 's/^mempool-//')" From ff476e7a02891dc83492e18262548ab3117e68e4 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:43:19 +0000 Subject: [PATCH 37/68] docs: record what a cutover actually does to the origin The notes said a deploy caused at most a brief connection reset, which was a guess. It has been measured now: probing the origin once a second through a cutover returned 200 for every request. The one case that still shows a gap is a release that changes the gateway itself, and the notes say which case that is rather than leaving the reader to find out. Co-Authored-By: Claude Opus 5 --- docs/operations/DEPLOYMENT.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/operations/DEPLOYMENT.md b/docs/operations/DEPLOYMENT.md index 71f7b73ad4b..3571a692b07 100644 --- a/docs/operations/DEPLOYMENT.md +++ b/docs/operations/DEPLOYMENT.md @@ -152,11 +152,19 @@ suite can see that. that is missing, or where a protocol the registry calls readable has no authority configured. 5. `universe-explorer-release cutover ` runs the gates again, swaps the - `current` symlink atomically, restarts the three units, and verifies. The - backend and the overlay take a few seconds to listen again; the gateway - waits for them rather than answering 502, so a request that arrives during - the restart is served late rather than failed. An upstream that is genuinely - gone is still reported as a gateway failure within a few seconds. After the swap it reads `/api/v1/capabilities` and + `current` symlink atomically, restarts what has to restart, and verifies. + + The backend and the overlay run from a path baked into their unit at exec + time, so they always restart; they take a few seconds to listen again, and + the gateway waits for them rather than answering 502. The gateway resolves + its static root per request, so a new frontend reaches it through the + symlink with no restart, and it is restarted only when its own file + changed. A cutover was probed once a second through the restart window and + every request returned 200. A release that changes the gateway itself is + the one case that still shows a brief gap, and the cutover log says so. + + An upstream that is genuinely gone is still reported as a gateway failure + within a few seconds, so a real outage is never hidden behind a long wait. After the swap it reads `/api/v1/capabilities` and fails the release if any feature is enabled with no routes registered, which is exactly the state that shipped. A failed verification rolls back. 6. Run `node scripts/universe/synthetic-check.mjs` against the public origin. From d701185020c1c4a8e6ba46b83af544889d3f0994 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:44:14 +0000 Subject: [PATCH 38/68] qa: stop the modes check racing the router It read the page with an evaluate that could be in flight when the router redirected, which destroys the execution context underneath it. A race, so it passed here every time and failed on the runner. Zoom is applied through an init script now, so it lands on every document as it is created and nothing has to be evaluated after a navigation that may still be running. The measurement waits for the app to mount, and retries once if the context goes away underneath it. A second failure is a real one. --- scripts/universe/visual-qa/modes-check.mjs | 42 +++++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/scripts/universe/visual-qa/modes-check.mjs b/scripts/universe/visual-qa/modes-check.mjs index 60a9d720563..3074e9463f6 100644 --- a/scripts/universe/visual-qa/modes-check.mjs +++ b/scripts/universe/visual-qa/modes-check.mjs @@ -70,18 +70,49 @@ const browser = await playwright.chromium.launch({ const findings = []; +/** + * Read the page, tolerating one navigation. + * + * This is a single page application: the router can redirect after the network + * has gone quiet, which destroys the execution context underneath an evaluate + * that is already in flight. It is a race, so it passed locally and failed on + * the runner. One retry after the document settles is enough, and a second + * failure is a real one worth reporting. + */ +async function readStable(page, fn) { + try { + return await page.evaluate(fn); + } catch (error) { + if (!/Execution context was destroyed|Target closed/.test(String(error))) throw error; + await page.waitForLoadState('domcontentloaded').catch(() => {}); + await page.waitForTimeout(800); + return page.evaluate(fn); + } +} + async function sweep(label, contextOptions, zoom) { const context = await browser.newContext(contextOptions); await installFixtures(context); + // Applied to every document as it is created, so a redirect cannot land on a + // page that was never zoomed, and nothing has to be evaluated after a + // navigation that may still be in progress. + if (zoom) { + await context.addInitScript((z) => { + const apply = () => { + if (document.documentElement) document.documentElement.style.zoom = String(z); + }; + apply(); + document.addEventListener('DOMContentLoaded', apply); + }, zoom); + } for (const [id, path] of ROUTES) { const page = await context.newPage(); await page.goto(BASE + path, { waitUntil: 'networkidle', timeout: 45000 }).catch(() => {}); - if (zoom) { - await page.evaluate((z) => { document.documentElement.style.zoom = String(z); }, zoom); - } - await page.waitForTimeout(1200); + // Let the router finish before anything is measured. + await page.waitForSelector('app-root', { timeout: 20000 }).catch(() => {}); + await page.waitForTimeout(1500); - const report = await page.evaluate(() => { + const report = await readStable(page, () => { const doc = document.documentElement; // A page whose own content scrolls sideways has failed reflow. A rounding // pixel is not a failure, so the tolerance is one. @@ -97,6 +128,7 @@ async function sweep(label, contextOptions, zoom) { return { overflow, painted, chars: (document.body.innerText || '').trim().length }; }); + findings.push({ label, id, ...report }); await page.screenshot({ path: join(OUT, `${id}__${label}.png`) }); await page.close(); From 61db3f9cb3555bb1effb4b91b629c3ea3f3c3fda Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 13:02:45 +0000 Subject: [PATCH 39/68] search: let the group label sit above its results instead of beside them The rule styling a result group's label declared font-size twice and the second one won, so "Transaction" rendered at the same size as the transaction it was introducing. The grouping did no work: every line in the dropdown looked like a result. It takes the eyebrow register now, which is the one place in this design system where small caps and wide tracking are allowed. The results lead, the labels sit above them, and the dropdown is shorter for it. Search recognises the identifier classes it should, keyboard selection walks the list, and the selected row takes the brand tint. Checked against a transaction id, an address, a height, a prefix, and a string that is none of those, in both themes. --- .../search-results.component.scss | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/search-form/search-results/search-results.component.scss b/frontend/src/app/components/search-form/search-results/search-results.component.scss index 3754e0d4516..8a5132dc53c 100644 --- a/frontend/src/app/components/search-form/search-results/search-results.component.scss +++ b/frontend/src/app/components/search-form/search-results/search-results.component.scss @@ -1,10 +1,18 @@ +// A group label above its results, not a peer of them. +// +// This rule declared font-size twice and the second won, so the label rendered +// at 1rem, the same size as the result underneath it, and the grouping did no +// work: "Transaction" and the transaction it introduced looked like two +// results. It takes the eyebrow register now, which is the one place in this +// design system where small caps and wide tracking are allowed. .card-title { - color: var(--title-fg); - font-size: 10px; - margin-bottom: 4px; - font-size: 1rem; - + color: var(--u-text-muted); + font-size: var(--u-eyebrow-size); + font-weight: var(--u-weight-semibold); + letter-spacing: var(--u-eyebrow-tracking); + margin-bottom: var(--u-space-1); margin-left: 10px; + text-transform: uppercase; } .danger { From 6edc89e0c8d661f422ca0cbc7b3e94f991fcbdc7 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 13:04:29 +0000 Subject: [PATCH 40/68] docs: list the gates that exist now, and say why the fixtures are part of the system The file index named three gates and the matrix. There are seven gates and two harnesses, and four of them were added by the work that found the defects they now prevent. The note on fixtures is the more important half. Five defects on this product were invisible for as long as they existed because the surface that showed them had no fixture and rendered as a skeleton, an error, or a flat shape in every screenshot ever taken. A route that renders nothing passes every automated check, so a missing fixture does not weaken a review. It removes it, and reports success. --- docs/product/DESIGN-SYSTEM.md | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/docs/product/DESIGN-SYSTEM.md b/docs/product/DESIGN-SYSTEM.md index c4150877482..3dfd0e5b1db 100644 --- a/docs/product/DESIGN-SYSTEM.md +++ b/docs/product/DESIGN-SYSTEM.md @@ -296,6 +296,26 @@ changed rather than the chain moving. | `frontend/src/styles/_universe-bootstrap-bridge.scss` | the inherited Bootstrap layer, repainted | | `frontend/src/theme-dark.scss`, `theme-contrast.scss` | the alternate themes | | `frontend/src/app/universe/_universe-tokens.scss` | Universe surface mixins, delegating to the tokens above | -| `scripts/universe/check-text.mjs` | the em dash gate | +| `scripts/universe/check-text.mjs` | the em dash gate, over source and over the built output | +| `scripts/universe/check-colors.mjs` | no raw interface colour, including in style and attribute bindings | +| `scripts/universe/check-palettes.mjs` | every dynamic palette, role separation, theme parity, retired values | +| `scripts/universe/check-fills.mjs` | every filled surface that carries text declares its ink | | `scripts/universe/check-branding.mjs` | the upstream mark gate | -| `scripts/universe/visual-qa/` | the visual, accessibility, and cross-browser matrix | +| `scripts/universe/visual-qa/capture.mjs` | the route matrix: themes, widths, and data states | +| `scripts/universe/visual-qa/modes-check.mjs` | forced colours and 200 percent zoom | +| `scripts/universe/visual-qa/fixtures.mjs` | the data every reviewed route renders from | + +## A note on the fixtures + +They are part of the design system, not a test detail. Five defects on this +product were invisible for as long as they existed because the surface that +showed them had no fixture and rendered as a skeleton, an error, or a flat +shape in every screenshot ever taken: a green at 2.37:1 on the mining +dashboard, a red button at 3.21:1 on the address page, the address page itself +throwing on a response of the wrong shape, the release identity page rendering +blank, and a depth chart whose entire palette collapsed into one band because +the numbers were four orders of magnitude too small. + +A route that renders nothing passes every automated check. When a fixture is +missing or wrong, the review it feeds is not weaker; it is absent, and it +reports success. From 21dae5393a745e91bb815792fd0d0c47c6b46503 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 13:29:46 +0000 Subject: [PATCH 41/68] qa: judge a page on what is on screen, and give it a real deadline The gate failed its first honest run against every route, and each failure was the gate being wrong rather than the page. It probed at a fixed pause, which is a race and not a deadline: on a loaded CI machine a page that finishes perfectly well is still mid-render at 2.6 seconds. It now waits for the page to settle, up to fifteen seconds, and what fails a run is a page that never settles. It counted a spinner nobody can see. The block overview keeps its loader in the tree and fades the wrapper with opacity, so checkVisibility is used now, which walks the ancestors and understands opacity. It counted app-loading-indicator, which is a labelled progress banner and is supposed to stay for as long as the work runs. Failing a release for saying "Indexing blocks" is the opposite of the point. It counted placeholders below the fold. Angular defers work until it scrolls into view, so a block page holds a transaction placeholder there on purpose. The harness judges a viewport, so the probe does too. All thirteen routes pass now, and the judge's own tests still hold it to firing on the states that shipped. Co-Authored-By: Claude Opus 5 --- scripts/universe/visual-qa/capture.mjs | 33 ++++++++++--- .../universe/visual-qa/progress-gate.test.mjs | 2 +- scripts/universe/visual-qa/progress-probe.mjs | 49 +++++++++++++++++-- 3 files changed, 73 insertions(+), 11 deletions(-) diff --git a/scripts/universe/visual-qa/capture.mjs b/scripts/universe/visual-qa/capture.mjs index 389be78c225..8e22d0ed13c 100644 --- a/scripts/universe/visual-qa/capture.mjs +++ b/scripts/universe/visual-qa/capture.mjs @@ -80,6 +80,14 @@ const VIEWPORTS = [ const THEMES = ['default', 'dark', 'contrast']; +/** + * How long a page may take to stop showing loaders before the run calls it + * unfinished. Generous, because a loaded CI machine is slower than a laptop + * and the thing being measured is whether the page ever finishes, not how + * fast the machine is. + */ +const SETTLE_DEADLINE_MS = 15_000; + const STATES = ['populated', ...Object.keys(stateOverrides)]; function pick(list, key, idKey = 'id') { @@ -335,13 +343,26 @@ async function run() { contrast = { text: [], painted: [], canvas: [], sampled: 0, error: String(e).slice(0, 200) }; } - // Judged after the settle wait, so anything still spinning here had - // longer than a user would wait and is not going to resolve. + // A fixed pause is a race, not a deadline: on a loaded machine a + // page that finishes perfectly well can still be mid-render when + // the probe fires. Wait for it to settle, up to a real deadline, + // and record how long it took. What fails the run is a page that + // never settles, which is the actual requirement. let progress; + let settledAfterMs = null; try { - progress = await page.evaluate(progressProbe); + const deadline = Date.now() + SETTLE_DEADLINE_MS; + for (;;) { + progress = await page.evaluate(progressProbe); + const busy = (progress.spinners?.length ?? 0) > 0 || (progress.skeletons ?? 0) > 0; + if (!busy || Date.now() >= deadline) { + settledAfterMs = busy ? null : Date.now() - (deadline - SETTLE_DEADLINE_MS); + break; + } + await page.waitForTimeout(250); + } } catch (e) { - progress = { spinners: [], skeletons: 0, charts: [], statusPanels: [], textLength: 0, error: String(e).slice(0, 200) }; + progress = { spinners: [], skeletons: 0, charts: [], statusPanels: [], loadingAnnouncements: [], textLength: 0, error: String(e).slice(0, 200) }; } await page.screenshot({ path: join(OUT, `${label}.png`), fullPage: Boolean(args.fullPage) }); @@ -349,7 +370,7 @@ async function run() { findings.push({ route: route.id, routeName: route.name, state, theme, viewport: viewport.id, - overflowBy, consoleErrors, brokenImages, violations, contrast, progress, + overflowBy, consoleErrors, brokenImages, violations, contrast, progress, settledAfterMs, }); } catch (error) { findings.push({ @@ -393,7 +414,7 @@ export function progressFailures(report) { if (f.state === 'populated') { if (progress.spinners?.length) { - failures.push(`${where}: still loading after the settle wait (${progress.spinners.join(', ')})`); + failures.push(`${where}: never stopped loading (${progress.spinners.join(', ')})`); } if (progress.skeletons > 0) { failures.push(`${where}: ${progress.skeletons} skeleton(s) never resolved`); diff --git a/scripts/universe/visual-qa/progress-gate.test.mjs b/scripts/universe/visual-qa/progress-gate.test.mjs index a1d619737ff..75098522287 100644 --- a/scripts/universe/visual-qa/progress-gate.test.mjs +++ b/scripts/universe/visual-qa/progress-gate.test.mjs @@ -31,7 +31,7 @@ test('a populated page that finished raises nothing', () => { test('a spinner still turning on a populated page fails the run', () => { const failures = progressFailures(withProgress('populated', { spinners: ['div.spinner-border'] })); assert.equal(failures.length, 1); - assert.match(failures[0], /still loading/); + assert.match(failures[0], /never stopped loading/); }); test('skeletons that never resolved fail the run', () => { diff --git a/scripts/universe/visual-qa/progress-probe.mjs b/scripts/universe/visual-qa/progress-probe.mjs index 2b112245b3e..cd78c878bcd 100644 --- a/scripts/universe/visual-qa/progress-probe.mjs +++ b/scripts/universe/visual-qa/progress-probe.mjs @@ -10,13 +10,49 @@ * Runs in the page. Returns plain data for the harness to judge. */ export function progressProbe() { + /** + * Whether a reader can actually see this element. + * + * Checking only display and visibility on the element itself is not enough: + * the block overview keeps its loader in the tree and hides the wrapper with + * opacity, so a spinner nobody can see was being counted as a page that + * never finished. checkVisibility walks the ancestors and understands + * opacity; the manual checks stay as a fallback where it is missing. + */ const visible = (element) => { + if (typeof element.checkVisibility === 'function') { + return element.checkVisibility({ + opacityProperty: true, + visibilityProperty: true, + contentVisibilityAuto: true, + }); + } const rect = element.getBoundingClientRect(); if (rect.width === 0 && rect.height === 0) return false; const style = getComputedStyle(element); return style.display !== 'none' && style.visibility !== 'hidden'; }; + /** + * Whether the element is somewhere the reader is actually looking. + * + * Angular defers work until it scrolls into view, so a block page keeps a + * transaction placeholder below the fold on purpose until the reader gets + * there. Counting that as a page that never finished would fail a release + * for lazy loading correctly. The harness judges a viewport, so this does + * too, with a margin for content just under the edge. + */ + const inViewport = (element) => { + const rect = element.getBoundingClientRect(); + const margin = 200; + return rect.bottom > -margin + && rect.top < window.innerHeight + margin + && rect.right > -margin + && rect.left < window.innerWidth + margin; + }; + + const onScreen = (element) => visible(element) && inViewport(element); + const selectorFor = (element) => { const id = element.id ? `#${element.id}` : ''; const cls = typeof element.className === 'string' && element.className @@ -25,15 +61,20 @@ export function progressProbe() { return `${element.tagName.toLowerCase()}${id}${cls}`; }; + // Placeholders only. app-loading-indicator is deliberately excluded: it is a + // labelled progress banner, "Indexing blocks" and the like, which is supposed + // to stay on screen for as long as the work runs. Treating it as a page that + // never finished would fail a deployment for telling the truth about a long + // job, which is the opposite of what this gate is for. const spinners = [...document.querySelectorAll( - '.spinner-border, .load-status-spinner, .loadingGraphs, app-loading-indicator', - )].filter(visible); - const skeletons = [...document.querySelectorAll('.skeleton-loader, .skeleton-row')].filter(visible); + '.spinner-border, .load-status-spinner, .loadingGraphs', + )].filter(onScreen); + const skeletons = [...document.querySelectorAll('.skeleton-loader, .skeleton-row')].filter(onScreen); // An ECharts host that drew no series is a blank panel. It is not detectable // from the outside: the container has a size and a background like any other. const charts = [...document.querySelectorAll('div[_echarts_instance_]')] - .filter(visible) + .filter(onScreen) .map((host) => { const svgMarks = host.querySelectorAll('svg path, svg rect, svg circle, svg polyline').length; const canvases = [...host.querySelectorAll('canvas')]; From 7007f64657346939c2fe9961b7eca4711a2ad389 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 13:56:30 +0000 Subject: [PATCH 42/68] qa: block on the routes this work covers, and keep reporting the rest Run across every route and data state, the gate found four more pages with the same fault: home and blocks hold a placeholder with nothing said about why when the chain backend is down, and the transaction and address pages render bare skeletons with no accessible announcement, so a screen reader user hears nothing while they wait. Those are real and were found here, but they are not what this change set reviewed, and quietly widening the blast radius to make a gate green is how gates end up disabled. The gate blocks on the three routes whose request lifecycle has been rebuilt, and prints the rest every run under their own heading, never suppressed. Adding a route to GATED_ROUTES is how that work gets finished. The loading rule also stopped demanding a spinner from pages that have nothing to fetch. The docs and source pages render from the bundle, and failing them for not waiting was the rule being wrong. Co-Authored-By: Claude Opus 5 --- scripts/universe/visual-qa/capture.mjs | 42 +++++++++++++++---- .../universe/visual-qa/progress-gate.test.mjs | 10 +++++ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/scripts/universe/visual-qa/capture.mjs b/scripts/universe/visual-qa/capture.mjs index 8e22d0ed13c..04a90c51dac 100644 --- a/scripts/universe/visual-qa/capture.mjs +++ b/scripts/universe/visual-qa/capture.mjs @@ -405,6 +405,19 @@ async function run() { * A failure fixture has the opposite obligation: the page must say what * happened rather than wait. */ + +/** + * Routes whose request lifecycle has been reviewed and is expected to reach a + * terminal state. A finding on one of these fails the run. + * + * The gate reports findings on every route, but only blocks on these. The rest + * of the application still has pages that hold a loader with nothing said about + * why, which this gate found and which are recorded as known work rather than + * quietly dropped. Adding a route here is how that work gets finished: fix the + * page, add the route, and the gate holds it forever after. + */ +export const GATED_ROUTES = new Set(['graphs', 'mining', 'protocols']); + export function progressFailures(report) { const failures = []; for (const f of report.findings) { @@ -434,10 +447,14 @@ export function progressFailures(report) { // a blank rectangle. The deadline itself is covered by the unit tests // around the request lifecycle, which run far longer than this harness // waits. + // Only a page that is actually holding placeholders is waiting. A page + // with nothing to fetch renders normally under this fixture and owes the + // reader no loader at all. + const waiting = (progress.skeletons ?? 0) > 0; const announced = progress.spinners?.length || progress.statusPanels?.length || progress.loadingAnnouncements?.length; - if (!announced) { + if (waiting && !announced) { failures.push(`${where}: waiting with nothing on screen that says so`); } } else { @@ -547,14 +564,25 @@ function summarise(report) { } const stuck = progressFailures(report); - console.log(`\nunfinished pages : ${stuck.length}`); - if (stuck.length) { - console.log('-- pages that never finished --'); - for (const line of stuck.slice(0, 40)) console.log(` ${line}`); - if (stuck.length > 40) console.log(` ... and ${stuck.length - 40} more, see the report`); + const blocking = stuck.filter((line) => GATED_ROUTES.has(line.split('/')[0])); + const known = stuck.filter((line) => !GATED_ROUTES.has(line.split('/')[0])); + + console.log(`\nunfinished pages : ${stuck.length} (blocking ${blocking.length})`); + if (blocking.length) { + console.log('-- pages that never finished, on routes this gate holds --'); + for (const line of blocking.slice(0, 40)) console.log(` ${line}`); + if (blocking.length > 40) console.log(` ... and ${blocking.length - 40} more, see the report`); + } + if (known.length) { + // Printed every run, never suppressed. These are real, they were found by + // this gate, and they are waiting for the same treatment the gated routes + // have had. + console.log('-- the same fault on routes not yet covered, known work --'); + for (const line of known.slice(0, 40)) console.log(` ${line}`); + if (known.length > 40) console.log(` ... and ${known.length - 40} more, see the report`); } console.log(''); - return stuck; + return blocking; } // Only drive browsers when this file is the program. Importing it, as the diff --git a/scripts/universe/visual-qa/progress-gate.test.mjs b/scripts/universe/visual-qa/progress-gate.test.mjs index 75098522287..3e29b9386be 100644 --- a/scripts/universe/visual-qa/progress-gate.test.mjs +++ b/scripts/universe/visual-qa/progress-gate.test.mjs @@ -95,3 +95,13 @@ test('a page that waits with nothing on screen saying so fails the run', () => { assert.equal(failures.length, 1); assert.match(failures[0], /nothing on screen that says so/); }); + +test('a page with nothing to fetch owes the reader no loader', () => { + // The docs and source pages render from what is already in the bundle. Under + // the loading fixture they simply appear, and demanding a spinner from them + // was the rule failing a page for having nothing to wait for. + assert.deepEqual( + progressFailures(withProgress('loading', { skeletons: 0, spinners: [], loadingAnnouncements: [] })), + [], + ); +}); From 867717aff758621c1e03437d1ae76120e604a55b Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 14:52:30 +0000 Subject: [PATCH 43/68] fix: the four pages the gate found, so it can hold them too The gate's first full run reported home and blocks holding placeholders with nothing said about why when the chain backend is down, and the transaction and address pages rendering skeletons a screen reader hears nothing about. The dashboard now gives live chain data a deadline: when the first socket payload has not arrived after ten seconds, a status panel says so and offers a reconnect, and a late arrival still clears it. Its waiting state is announced to assistive tech from the start. The blocks list stops retrying forever every ten seconds; a failure is bounded, terminal, says what happened, and offers a retry. The transaction and address pages announce their wait. All four routes join GATED_ROUTES, so the gate that found them holds them from now on. Verified across default, dark and contrast at 375 and 1440: zero unfinished pages, zero axe violations, zero measured contrast failures. Co-Authored-By: Claude Fable 5 --- .../components/address/address.component.html | 1 + .../blocks-list/blocks-list.component.html | 5 ++- .../blocks-list/blocks-list.component.ts | 34 +++++++++++++++++-- .../transaction/transaction.component.html | 1 + .../app/dashboard/dashboard.component.html | 17 ++++++++-- .../src/app/dashboard/dashboard.component.ts | 32 ++++++++++++++++- scripts/universe/visual-qa/capture.mjs | 12 +++---- 7 files changed, 88 insertions(+), 14 deletions(-) diff --git a/frontend/src/app/components/address/address.component.html b/frontend/src/app/components/address/address.component.html index cfdd80dbfc7..e1ea8a3bb59 100644 --- a/frontend/src/app/components/address/address.component.html +++ b/frontend/src/app/components/address/address.component.html @@ -181,6 +181,7 @@

+

Loading address

diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.html b/frontend/src/app/components/blocks-list/blocks-list.component.html index 50bc94446be..dc6fd89f5d4 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.html +++ b/frontend/src/app/components/blocks-list/blocks-list.component.html @@ -89,7 +89,7 @@

Blocks

- +
RankEmpty Blocks
{{ pool.rank }} @@ -152,25 +152,7 @@ - -
-
-
Pools Luck
-

- -

-
-
-
Pools Count
-

- -

-
-
-
Blocks (1w)
-

- -

-
-
+ + diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts index 207c9837f10..e6be91aecfe 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts @@ -1,9 +1,9 @@ -import { ChangeDetectionStrategy, Component, Input, NgZone, OnInit, HostBinding } from '@angular/core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, NgZone, OnDestroy, OnInit, HostBinding } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; -import { merge, Observable } from 'rxjs'; -import { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; +import { BehaviorSubject, Subscription, combineLatest } from 'rxjs'; +import { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators'; import { SeoService } from '@app/services/seo.service'; import { StorageService } from '@app//services/storage.service'; import { MiningService, MiningStats } from '@app/services/mining.service'; @@ -13,6 +13,7 @@ import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pip import { download } from '@app/shared/graphs.utils'; import { isMobile } from '@app/shared/common.utils'; import { chartChrome } from '@app/shared/chart-theme'; +import { LoadState, trackedLoadState } from '@app/shared/load-state'; @Component({ selector: 'app-pool-ranking', @@ -21,7 +22,7 @@ import { chartChrome } from '@app/shared/chart-theme'; standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) -export class PoolRankingComponent implements OnInit { +export class PoolRankingComponent implements OnInit, OnDestroy { @Input() height: number = 300; @Input() widget = false; @@ -30,7 +31,6 @@ export class PoolRankingComponent implements OnInit { auditAvailable = false; indexingAvailable = false; - isLoading = true; chartOptions: EChartsOption = {}; chartInitOptions = { renderer: 'svg', @@ -40,10 +40,14 @@ export class PoolRankingComponent implements OnInit { @HostBinding('attr.dir') dir = 'ltr'; - miningStatsObservable$: Observable; + state: LoadState = { status: 'loading' }; + + private retry$ = new BehaviorSubject(0); + private subscriptions: Subscription[] = []; constructor( public stateService: StateService, + private cd: ChangeDetectorRef, private storageService: StorageService, private formBuilder: UntypedFormBuilder, private miningService: MiningService, @@ -69,48 +73,74 @@ export class PoolRankingComponent implements OnInit { this.stateService.env.MINING_DASHBOARD === true); this.auditAvailable = this.indexingAvailable && this.stateService.env.AUDIT; - this.route - .fragment - .subscribe((fragment) => { + this.subscriptions.push( + this.route.fragment.subscribe((fragment) => { if (['24h', '3d', '1w', '1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) { this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: false }); } - }); + }), + ); - this.miningStatsObservable$ = merge( - this.radioGroupForm.get('dateSpan').valueChanges - .pipe( - startWith(this.radioGroupForm.controls.dateSpan.value), // (trigger when the page loads) - tap((value) => { - this.isLoading = true; - this.timespan = value; - if (!this.widget) { - this.storageService.setValue('miningWindowPreference', value); - } - this.miningWindowPreference = value; + const dateSpan$ = this.radioGroupForm.get('dateSpan').valueChanges.pipe( + startWith(this.radioGroupForm.controls.dateSpan.value), + distinctUntilChanged(), + map((value: string) => { + this.timespan = value; + if (!this.widget) { + this.storageService.setValue('miningWindowPreference', value); + } + this.miningWindowPreference = value; + return value; + }), + ); + + // Route setup and the chain tip both used to start their own request, so a + // page load fired two. One combined trigger fires one, and the debounce + // coalesces the burst of tips around a new block. + const chainTip$ = this.stateService.chainTip$.pipe( + distinctUntilChanged(), + debounceTime(1000), + startWith(0), + ); + + const trigger$ = combineLatest([dateSpan$, chainTip$, this.retry$]).pipe( + map(([dateSpan, tip, attempt]) => `${dateSpan}:${tip}:${attempt}`), + ); + + this.subscriptions.push( + trackedLoadState( + trigger$, + (key) => this.miningService.getMiningStats(key.split(':')[0]).pipe( + map((data) => { + data['minersLuck'] = (100 * (data.blockCount / 1008)).toFixed(2); // luck 1w + return data; }), - switchMap(() => { - return this.miningService.getMiningStats(this.miningWindowPreference); - }) ), - this.stateService.chainTip$ - .pipe( - switchMap(() => { - return this.miningService.getMiningStats(this.miningWindowPreference); - }) - ) - ) - .pipe( - map(data => { - data['minersLuck'] = (100 * (data.blockCount / 1008)).toFixed(2); // luck 1w - return data; - }), - tap(data => { - this.isLoading = false; - this.prepareChartOptions(data); - }), - shareReplay(1) - ); + { isEmpty: (data) => !data || !Array.isArray(data.pools) || data.pools.length === 0 }, + ).subscribe((state) => { + this.state = state; + if (state.status === 'data' || state.status === 'stale') { + this.prepareChartOptions(state.value); + } + this.cd.markForCheck(); + }), + ); + } + + ngOnDestroy(): void { + for (const subscription of this.subscriptions) { + subscription.unsubscribe(); + } + this.subscriptions = []; + } + + /** The stats currently on screen, fresh or stale, or null when there are none. */ + get miningStats(): MiningStats | null { + return this.state.status === 'data' || this.state.status === 'stale' ? this.state.value : null; + } + + onRetry(): void { + this.retry$.next(this.retry$.value + 1); } generatePoolsChartSerieData(miningStats) { diff --git a/frontend/src/app/components/reward-stats/reward-stats.component.html b/frontend/src/app/components/reward-stats/reward-stats.component.html index c437ac9e2a1..261a15ef991 100644 --- a/frontend/src/app/components/reward-stats/reward-stats.component.html +++ b/frontend/src/app/components/reward-stats/reward-stats.component.html @@ -1,4 +1,6 @@ -
+ + +
- -
-
-
Miners Reward
-
-
-
-
-
-
-
Avg Block Fees
-
-
-
-
-
-
-
Avg Tx Fee
-
-
-
-
-
-
+ + diff --git a/frontend/src/app/components/reward-stats/reward-stats.component.ts b/frontend/src/app/components/reward-stats/reward-stats.component.ts index b935672f243..510003fefdb 100644 --- a/frontend/src/app/components/reward-stats/reward-stats.component.ts +++ b/frontend/src/app/components/reward-stats/reward-stats.component.ts @@ -1,9 +1,24 @@ -import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; -import { concat, Observable } from 'rxjs'; -import { map, switchMap, tap } from 'rxjs/operators'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { BehaviorSubject, Subscription, combineLatest, merge, of } from 'rxjs'; +import { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; +import { LoadState, trackedLoadState } from '@app/shared/load-state'; +interface RewardSummary { + totalReward: number; + feePerTx: number; + feePerBlock: number; +} + +/** + * Reward numbers for the last 144 blocks. + * + * This widget used to concat the first read with a chain-tip driven refresh and + * render it through one async pipe with an else skeleton. A failing read killed + * the stream, so the skeleton stayed on screen for the rest of the session with + * nothing left to clear it. + */ @Component({ selector: 'app-reward-stats', templateUrl: './reward-stats.component.html', @@ -11,47 +26,64 @@ import { StateService } from '@app/services/state.service'; changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, }) -export class RewardStatsComponent implements OnInit { - public $rewardStats: Observable; - private lastBlockHeight: number; +export class RewardStatsComponent implements OnInit, OnDestroy { + state: LoadState = { status: 'loading' }; + + private retry$ = new BehaviorSubject(0); + private subscription: Subscription | null = null; - constructor(private apiService: ApiService, private stateService: StateService) { } + constructor( + private apiService: ApiService, + private stateService: StateService, + private cd: ChangeDetectorRef, + ) { } ngOnInit(): void { - this.$rewardStats = concat( - // We fetch the latest reward stats when the page load and - // wait for the API response before listening to websocket blocks - this.apiService.getRewardStats$() - .pipe( - tap((stats) => { - this.lastBlockHeight = stats.endBlock; - }) - ), - // Or when we receive a newer block, newer than the latest reward stats api call - this.stateService.blocks$ - .pipe( - switchMap((blocks) => { - const maxHeight = blocks.reduce((max, block) => Math.max(max, block.height), 0); - if (maxHeight <= this.lastBlockHeight) { - return []; // Return an empty stream so the last pipe is not executed - } - this.lastBlockHeight = maxHeight; - return this.apiService.getRewardStats$(); - }) - ) - ) - .pipe( - map((stats) => { - return { - totalReward: stats.totalReward, - feePerTx: stats.totalFee / stats.totalTx, - feePerBlock: stats.totalFee / 144, - }; - }) - ); + // Chain tips arrive in bursts around a new block. Coalescing them means one + // refresh per burst rather than one request per websocket frame. + const tip$ = this.stateService.blocks$.pipe( + map((blocks) => blocks.reduce((max, block) => Math.max(max, block.height), 0)), + distinctUntilChanged(), + debounceTime(1000), + startWith(0), + ); + + const trigger$ = combineLatest([tip$, this.retry$]).pipe( + map(([height, attempt]) => `${height}:${attempt}`), + ); + + this.subscription = trackedLoadState( + trigger$, + () => this.apiService.getRewardStats$().pipe( + map((stats): RewardSummary => ({ + totalReward: stats.totalReward, + // A window with no transactions is a real answer, not a division to + // let through as NaN. + feePerTx: stats.totalTx > 0 ? stats.totalFee / stats.totalTx : 0, + feePerBlock: stats.totalFee / 144, + })), + ), + { isEmpty: () => false }, + ).subscribe((state) => { + this.state = state; + this.cd.markForCheck(); + }); + } + + ngOnDestroy(): void { + this.subscription?.unsubscribe(); + this.subscription = null; + } + + get rewardStats(): RewardSummary | null { + return this.state.status === 'data' || this.state.status === 'stale' ? this.state.value : null; + } + + onRetry(): void { + this.retry$.next(this.retry$.value + 1); } - isEllipsisActive(e) { + isEllipsisActive(e): boolean { return (e.offsetWidth < e.scrollWidth); } } diff --git a/frontend/src/app/components/statistics/statistics.component.html b/frontend/src/app/components/statistics/statistics.component.html index 0e1069d0e43..66a994742e3 100644 --- a/frontend/src/app/components/statistics/statistics.component.html +++ b/frontend/src/app/components/statistics/statistics.component.html @@ -93,10 +93,12 @@
-
+ +
+ [data]="mempoolStats" [isLoading]="false">
@@ -122,9 +124,11 @@
-
+ +
+ [data]="mempoolTransactionsWeightPerSecondData" [outlierCappingEnabled]="outlierCappingEnabled" [isLoading]="false">
diff --git a/frontend/src/app/components/statistics/statistics.component.ts b/frontend/src/app/components/statistics/statistics.component.ts index af486970e37..6791e0e55b2 100644 --- a/frontend/src/app/components/statistics/statistics.component.ts +++ b/frontend/src/app/components/statistics/statistics.component.ts @@ -1,8 +1,8 @@ -import { Component, OnInit, LOCALE_ID, Inject, ViewChild, ElementRef } from '@angular/core'; +import { Component, OnInit, OnDestroy, LOCALE_ID, Inject, ViewChild } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; -import { of, merge} from 'rxjs'; -import { switchMap } from 'rxjs/operators'; +import { BehaviorSubject, Observable, Subscription, combineLatest, of } from 'rxjs'; +import { distinctUntilChanged, map, startWith } from 'rxjs/operators'; import { OptimizedMempoolStats } from '@interfaces/node-api.interface'; import { WebsocketService } from '@app/services/websocket.service'; @@ -14,6 +14,11 @@ import { StorageService } from '@app/services/storage.service'; import { feeLevels, chartColors } from '@app/app.constants'; import { MempoolGraphComponent } from '@components/mempool-graph/mempool-graph.component'; import { IncomingTransactionsGraphComponent } from '@components/incoming-transactions-graph/incoming-transactions-graph.component'; +import { LoadState, trackedLoadState } from '@app/shared/load-state'; + +type DateSpan = '2h' | '24h' | '1w' | '1m' | '3m' | '6m' | '1y' | '2y' | '3y' | '4y' | 'all'; + +const DATE_SPANS: DateSpan[] = ['2h', '24h', '1w', '1m', '3m', '6m', '1y', '2y', '3y', '4y', 'all']; @Component({ selector: 'app-statistics', @@ -21,13 +26,12 @@ import { IncomingTransactionsGraphComponent } from '@components/incoming-transac styleUrls: ['./statistics.component.scss'], standalone: false, }) -export class StatisticsComponent implements OnInit { +export class StatisticsComponent implements OnInit, OnDestroy { @ViewChild('mempoolgraph') mempoolGraph: MempoolGraphComponent; @ViewChild('incominggraph') incomingGraph: IncomingTransactionsGraphComponent; network = ''; - isLoading = true; feeLevels = feeLevels; chartColors = chartColors; filterSize = 100000; @@ -38,6 +42,14 @@ export class StatisticsComponent implements OnInit { outlierCappingEnabled = false; mempoolStats: OptimizedMempoolStats[] = []; + /** + * The single source of truth for what this page is showing. It always reaches + * a terminal state, so the chart can never be left behind a spinner that + * nothing will clear. + */ + state$: Observable>; + state: LoadState = { status: 'loading' }; + mempoolVsizeFeesData: any; mempoolUnconfirmedTransactionsData: any; mempoolTransactionsWeightPerSecondData: any; @@ -49,6 +61,9 @@ export class StatisticsComponent implements OnInit { timespan = ''; titleCount = $localize`Count`; + private retry$ = new BehaviorSubject(0); + private subscriptions: Subscription[] = []; + constructor( @Inject(LOCALE_ID) private locale: string, private formBuilder: UntypedFormBuilder, @@ -60,12 +75,14 @@ export class StatisticsComponent implements OnInit { private storageService: StorageService, ) { } - ngOnInit() { + ngOnInit(): void { this.inverted = this.storageService.getValue('inverted-graph') === 'true'; this.setFeeLevelDropdownData(); this.seoService.setTitle($localize`:@@5d4f792f048fcaa6df5948575d7cb325c9393383:Graphs`); this.seoService.setDescription($localize`:@@meta.description.bitcoin.graphs.mempool:See mempool size (in MvB) and transactions per second (in vB/s) visualized over time.`); - this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.subscriptions.push( + this.stateService.networkChanged$.subscribe((network) => this.network = network), + ); this.graphWindowPreference = this.storageService.getValue('graphWindowPreference') ? this.storageService.getValue('graphWindowPreference').trim() : '2h'; this.outlierCappingEnabled = this.storageService.getValue('cap-outliers') === 'true'; @@ -73,76 +90,102 @@ export class StatisticsComponent implements OnInit { dateSpan: this.graphWindowPreference }); - this.route - .fragment - .subscribe((fragment) => { - if (['2h', '24h', '1w', '1m', '3m', '6m', '1y', '2y', '3y', '4y', 'all'].indexOf(fragment) > -1) { - this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: false }); - } else { - this.radioGroupForm.controls.dateSpan.setValue('2h', { emitEvent: false }); - } - }); + this.subscriptions.push( + this.route.fragment.subscribe((fragment) => { + const span = DATE_SPANS.includes(fragment as DateSpan) ? fragment as DateSpan : '2h'; + this.radioGroupForm.controls.dateSpan.setValue(span, { emitEvent: false }); + }), + ); - merge( - of(''), - this.radioGroupForm.controls.dateSpan.valueChanges - ) - .pipe( - switchMap(() => { - this.timespan = this.radioGroupForm.controls.dateSpan.value; - this.isLoading = true; - if (this.radioGroupForm.controls.dateSpan.value === '2h') { + // A retry re-runs the current range without changing it, so the same + // switchMap cancels whatever is in flight and starts exactly one request. + const trigger$ = combineLatest([ + this.radioGroupForm.controls.dateSpan.valueChanges.pipe( + startWith(this.radioGroupForm.controls.dateSpan.value), + distinctUntilChanged(), + ), + this.retry$, + ]).pipe( + map(([dateSpan, attempt]) => `${dateSpan}:${attempt}`), + ); + + this.state$ = trackedLoadState( + trigger$, + (key) => { + const dateSpan = key.split(':')[0] as DateSpan; + this.timespan = dateSpan; + if (dateSpan === '2h') { this.websocketService.want(['blocks', 'live-2h-chart']); - return this.apiService.list2HStatistics$(); - } - this.websocketService.want(['blocks']); - if (this.radioGroupForm.controls.dateSpan.value === '24h') { - return this.apiService.list24HStatistics$(); - } - if (this.radioGroupForm.controls.dateSpan.value === '1w') { - return this.apiService.list1WStatistics$(); - } - if (this.radioGroupForm.controls.dateSpan.value === '1m') { - return this.apiService.list1MStatistics$(); - } - if (this.radioGroupForm.controls.dateSpan.value === '3m') { - return this.apiService.list3MStatistics$(); - } - if (this.radioGroupForm.controls.dateSpan.value === '6m') { - return this.apiService.list6MStatistics$(); - } - if (this.radioGroupForm.controls.dateSpan.value === '1y') { - return this.apiService.list1YStatistics$(); - } - if (this.radioGroupForm.controls.dateSpan.value === '2y') { - return this.apiService.list2YStatistics$(); - } - if (this.radioGroupForm.controls.dateSpan.value === '3y') { - return this.apiService.list3YStatistics$(); - } - if (this.radioGroupForm.controls.dateSpan.value === '4y') { - return this.apiService.list4YStatistics$(); + } else { + this.websocketService.want(['blocks']); } - if (this.radioGroupForm.controls.dateSpan.value === 'all') { - return this.apiService.listAllTimeStatistics$(); + return this.statisticsFor(dateSpan); + }, + ); + + this.subscriptions.push( + this.state$.subscribe((state) => { + this.state = state; + if (state.status === 'data' || state.status === 'stale') { + this.mempoolStats = state.value; + this.handleNewMempoolData(this.mempoolStats.concat([])); + } else { + this.mempoolStats = []; + this.mempoolTransactionsWeightPerSecondData = null; } - }) - ) - .subscribe((mempoolStats: any) => { - this.mempoolStats = mempoolStats; - this.handleNewMempoolData(this.mempoolStats.concat([])); - this.isLoading = false; - }); + }), + ); - this.stateService.live2Chart$ - .subscribe((mempoolStats) => { + this.subscriptions.push( + this.stateService.live2Chart$.subscribe((mempoolStats) => { + // A live sample is only meaningful on top of a loaded 2h series. With + // no series it would render a one-point chart over a failed load. + if (this.timespan !== '2h' || !this.mempoolStats.length) { + return; + } this.mempoolStats.unshift(mempoolStats); this.mempoolStats = this.mempoolStats.slice(0, this.mempoolStats.length - 1); this.handleNewMempoolData(this.mempoolStats.concat([])); - }); + }), + ); + } + + ngOnDestroy(): void { + for (const subscription of this.subscriptions) { + subscription.unsubscribe(); + } + this.subscriptions = []; + } + + /** Asks for one range. Anything unrecognised falls back to the live range. */ + private statisticsFor(dateSpan: DateSpan): Observable { + switch (dateSpan) { + case '24h': return this.apiService.list24HStatistics$(); + case '1w': return this.apiService.list1WStatistics$(); + case '1m': return this.apiService.list1MStatistics$(); + case '3m': return this.apiService.list3MStatistics$(); + case '6m': return this.apiService.list6MStatistics$(); + case '1y': return this.apiService.list1YStatistics$(); + case '2y': return this.apiService.list2YStatistics$(); + case '3y': return this.apiService.list3YStatistics$(); + case '4y': return this.apiService.list4YStatistics$(); + case 'all': return this.apiService.listAllTimeStatistics$(); + case '2h': return this.apiService.list2HStatistics$(); + default: return of([]); + } } - handleNewMempoolData(mempoolStats: OptimizedMempoolStats[]) { + /** Re-runs the current range after a failure. */ + onRetry(): void { + this.retry$.next(this.retry$.value + 1); + } + + /** True while the chart has real numbers to draw, fresh or stale. */ + get hasData(): boolean { + return (this.state.status === 'data' || this.state.status === 'stale') && this.mempoolStats.length > 0; + } + + handleNewMempoolData(mempoolStats: OptimizedMempoolStats[]): void { mempoolStats.reverse(); const labels = mempoolStats.map(stats => stats.added); @@ -162,16 +205,16 @@ export class StatisticsComponent implements OnInit { }; } - saveGraphPreference() { + saveGraphPreference(): void { this.storageService.setValue('graphWindowPreference', this.radioGroupForm.controls.dateSpan.value); } - invertGraph() { + invertGraph(): void { this.storageService.setValue('inverted-graph', !this.inverted); document.location.reload(); } - setFeeLevelDropdownData() { + setFeeLevelDropdownData(): void { let _feeLevels = feeLevels; let _chartColors = chartColors; if (!this.inverted) { @@ -194,19 +237,11 @@ export class StatisticsComponent implements OnInit { range = `${_feeLevels[i]} - ${_feeLevels[nextIndex]}`; } } - if (this.inverted) { - this.feeLevelDropdownData.push({ - fee: fee, - range, - color: _chartColors[i], - }); - } else { - this.feeLevelDropdownData.push({ - fee: fee, - range, - color: _chartColors[i], - }); - } + this.feeLevelDropdownData.push({ + fee: fee, + range, + color: _chartColors[i], + }); }); } @@ -215,7 +250,7 @@ export class StatisticsComponent implements OnInit { this.storageService.setValue('cap-outliers', e.target.checked); } - onSaveChart(name) { + onSaveChart(name): void { if (name === 'mempool') { this.mempoolGraph.onSaveChart(this.timespan); } else if (name === 'incoming') { @@ -223,7 +258,7 @@ export class StatisticsComponent implements OnInit { } } - isMobile() { + isMobile(): boolean { return (window.innerWidth <= 767.98); } } diff --git a/frontend/src/app/shared/components/load-status/load-status.component.html b/frontend/src/app/shared/components/load-status/load-status.component.html new file mode 100644 index 00000000000..c6e3f9fdd7b --- /dev/null +++ b/frontend/src/app/shared/components/load-status/load-status.component.html @@ -0,0 +1,33 @@ +
+ + + +

Loading {{ label }}

+

Loading

+
+ + +

Nothing to show yet

+

This range has no recorded data. Collection continues.

+
+ + +

{{ label }}

+

{{ message }}

+
+ + System status +
+
+ +
+ +
+ Showing the last known values. + {{ message }} + + Observed + + + +
diff --git a/frontend/src/app/shared/components/load-status/load-status.component.scss b/frontend/src/app/shared/components/load-status/load-status.component.scss new file mode 100644 index 00000000000..75899feeea2 --- /dev/null +++ b/frontend/src/app/shared/components/load-status/load-status.component.scss @@ -0,0 +1,73 @@ +.load-status { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--u-space-3); + padding: var(--u-space-6) var(--u-space-4); + text-align: center; +} + +// The spinner this replaces was drawn in white, which on the light shell was +// invisible: a page that had failed looked identical to a page that was blank. +// Both the track and the head come from theme tokens, so it stays visible in +// every theme. +.load-status-spinner { + width: 2rem; + height: 2rem; + border-radius: 50%; + border: 3px solid var(--u-border-strong); + border-top-color: var(--u-brand); + animation: load-status-spin 900ms linear infinite; +} + +@keyframes load-status-spin { + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: reduce) { + .load-status-spinner { + animation-duration: 3s; + } +} + +.load-status-title { + margin: 0; + font-weight: var(--u-weight-semibold); + color: var(--u-text-primary); +} + +.load-status-text { + margin: 0; + font-size: var(--u-text-sm); + color: var(--u-text-secondary); +} + +.load-status-actions { + display: flex; + flex-wrap: wrap; + gap: var(--u-space-2); + justify-content: center; +} + +// A stale panel keeps its numbers on screen, so this is a band above them +// rather than a replacement for them. +.load-status-stale { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--u-space-2); + padding: var(--u-space-2) var(--u-space-3); + margin-bottom: var(--u-space-3); + border: 1px solid var(--u-state-partial-border); + border-radius: var(--u-radius-md); + background: var(--u-state-partial-surface); + color: var(--u-state-partial); + font-size: var(--u-text-sm); + + .load-status-text { + color: var(--u-state-partial); + } +} diff --git a/frontend/src/app/shared/components/load-status/load-status.component.ts b/frontend/src/app/shared/components/load-status/load-status.component.ts new file mode 100644 index 00000000000..16a727d9081 --- /dev/null +++ b/frontend/src/app/shared/components/load-status/load-status.component.ts @@ -0,0 +1,67 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { LoadFailure, LoadState, loadFailureMessage } from '@app/shared/load-state'; + +/** + * The panel a module shows when it has no fresh data to show. + * + * Every non-data outcome lands here, so a failed module says which outcome it + * is and offers a way forward, rather than leaving a spinner or a skeleton that + * cannot be told apart from a frozen page. + */ +@Component({ + selector: 'app-load-status', + templateUrl: './load-status.component.html', + styleUrls: ['./load-status.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, +}) +export class LoadStatusComponent { + /** The state to describe. Nothing is rendered for a plain data state. */ + @Input() state: LoadState | null = null; + /** Names the module in the message, for example "Hashrate". */ + @Input() label = ''; + /** Height reserved while loading, so the panel does not shift the layout. */ + @Input() minHeight = ''; + @Output() retry = new EventEmitter(); + + get isLoading(): boolean { + return this.state?.status === 'loading'; + } + + get isEmpty(): boolean { + return this.state?.status === 'empty'; + } + + get isStale(): boolean { + return this.state?.status === 'stale'; + } + + get isError(): boolean { + return this.state?.status === 'error'; + } + + get reason(): LoadFailure | null { + const state = this.state; + return state && (state.status === 'error' || state.status === 'stale') ? state.reason : null; + } + + get message(): string { + const reason = this.reason; + return reason ? loadFailureMessage(reason) : ''; + } + + /** A route this deployment does not serve will not start serving it on retry. */ + get canRetry(): boolean { + const reason = this.reason; + return reason !== null && reason !== 'missing'; + } + + get observedAt(): number | null { + const state = this.state; + return state && state.status === 'stale' ? state.at : null; + } + + onRetry(): void { + this.retry.emit(); + } +} diff --git a/frontend/src/app/shared/load-state.spec.ts b/frontend/src/app/shared/load-state.spec.ts new file mode 100644 index 00000000000..534d3313bbc --- /dev/null +++ b/frontend/src/app/shared/load-state.spec.ts @@ -0,0 +1,190 @@ +import { describe, it, expect } from 'vitest'; +import { HttpErrorResponse } from '@angular/common/http'; +import { Subject, firstValueFrom, of, throwError, timer } from 'rxjs'; +import { map, toArray } from 'rxjs/operators'; +import { + classifyLoadFailure, + isRetryableFailure, + toLoadState, + trackedLoadState, + type LoadState, +} from './load-state'; + +/** + * The failure this suite exists to prevent: a request that never resolves, + * leaving a spinner or a skeleton on screen with nothing subscribed to clear + * it. Every case below asserts that a terminal state is reached. + */ + +function statuses(states: LoadState[]): string[] { + return states.map((state) => state.status); +} + +async function collect(source: ReturnType>): Promise[]> { + return firstValueFrom(source.pipe(toArray())); +} + +const noRetry = { retries: 0 }; + +describe('classifyLoadFailure', () => { + it('calls a 404 missing, because this deployment does not serve the route', () => { + expect(classifyLoadFailure(new HttpErrorResponse({ status: 404 }))).toBe('missing'); + }); + + it('calls a 500 unavailable, because the dependency behind it is down', () => { + expect(classifyLoadFailure(new HttpErrorResponse({ status: 500 }))).toBe('unavailable'); + }); + + it('calls status zero a network failure', () => { + expect(classifyLoadFailure(new HttpErrorResponse({ status: 0 }))).toBe('network'); + }); + + it('calls a 403 missing, so it is never retried', () => { + expect(classifyLoadFailure(new HttpErrorResponse({ status: 403 }))).toBe('missing'); + }); +}); + +describe('isRetryableFailure', () => { + it('retries what a retry could fix', () => { + expect(isRetryableFailure('timeout')).toBe(true); + expect(isRetryableFailure('unavailable')).toBe(true); + expect(isRetryableFailure('network')).toBe(true); + }); + + it('does not retry a route this deployment does not serve', () => { + expect(isRetryableFailure('missing')).toBe(false); + expect(isRetryableFailure('malformed')).toBe(false); + }); +}); + +describe('toLoadState', () => { + it('reaches data when the request succeeds', async () => { + const states = await collect(toLoadState(of([1, 2, 3]), noRetry)); + expect(statuses(states)).toEqual(['loading', 'data']); + expect(states[1]).toMatchObject({ status: 'data', value: [1, 2, 3] }); + }); + + it('separates a valid empty answer from a failure', async () => { + const states = await collect(toLoadState(of([]), noRetry)); + expect(statuses(states)).toEqual(['loading', 'empty']); + }); + + it('reaches error on a 404 rather than staying loading', async () => { + const states = await collect( + toLoadState(throwError(() => new HttpErrorResponse({ status: 404 })), noRetry), + ); + expect(statuses(states)).toEqual(['loading', 'error']); + expect(states[1]).toMatchObject({ status: 'error', reason: 'missing' }); + }); + + it('reaches error on a 500', async () => { + const states = await collect( + toLoadState(throwError(() => new HttpErrorResponse({ status: 500 })), noRetry), + ); + expect(states[1]).toMatchObject({ status: 'error', reason: 'unavailable' }); + }); + + it('reaches error on a network failure', async () => { + const states = await collect( + toLoadState(throwError(() => new HttpErrorResponse({ status: 0 })), noRetry), + ); + expect(states[1]).toMatchObject({ status: 'error', reason: 'network' }); + }); + + it('gives up on a request that hangs, instead of loading forever', async () => { + const never = new Subject(); + const states = await collect(toLoadState(never, { timeoutMs: 40, ...noRetry })); + expect(statuses(states)).toEqual(['loading', 'error']); + expect(states[1]).toMatchObject({ reason: 'timeout' }); + }); + + it('treats a null body as malformed rather than as data', async () => { + const states = await collect(toLoadState(of(null as unknown as number[]), noRetry)); + expect(states[1]).toMatchObject({ status: 'error', reason: 'malformed' }); + }); + + it('keeps a previous good answer on screen, labelled stale, when a later read fails', async () => { + const states = await collect( + toLoadState( + throwError(() => new HttpErrorResponse({ status: 500 })), + noRetry, + { value: [7], at: 1000 }, + ), + ); + expect(statuses(states)).toEqual(['loading', 'stale']); + expect(states[1]).toMatchObject({ status: 'stale', value: [7], at: 1000, reason: 'unavailable' }); + }); + + it('retries a retryable failure and reports the recovered answer', async () => { + let attempts = 0; + const flaky = timer(0).pipe( + map(() => { + attempts += 1; + if (attempts < 3) throw new HttpErrorResponse({ status: 503 }); + return [attempts]; + }), + ); + const states = await collect(toLoadState(flaky, { retries: 3, retryDelayMs: 1 })); + expect(statuses(states)).toEqual(['loading', 'data']); + expect(attempts).toBe(3); + }); + + it('does not retry a 404, however many retries are allowed', async () => { + let attempts = 0; + const missing = timer(0).pipe( + map(() => { + attempts += 1; + throw new HttpErrorResponse({ status: 404 }); + }), + ); + const states = await collect(toLoadState(missing, { retries: 5, retryDelayMs: 1 })); + expect(statuses(states)).toEqual(['loading', 'error']); + expect(attempts).toBe(1); + }); + + it('honours a custom emptiness test', async () => { + const states = await collect( + toLoadState(of({ rows: [] }), { ...noRetry, isEmpty: (value) => value.rows.length === 0 }), + ); + expect(statuses(states)).toEqual(['loading', 'empty']); + }); +}); + +describe('trackedLoadState', () => { + it('emits a loading state for each new key', async () => { + const trigger = new Subject(); + const seen: LoadState[] = []; + const subscription = trackedLoadState(trigger, (key) => of([key.length]), noRetry).subscribe((state) => + seen.push(state), + ); + trigger.next('2h'); + trigger.next('24h'); + subscription.unsubscribe(); + expect(statuses(seen)).toEqual(['loading', 'data', 'loading', 'data']); + }); + + it('does not carry a previous range answer into a different range', async () => { + const trigger = new Subject(); + const seen: LoadState[] = []; + const subscription = trackedLoadState( + trigger, + (key) => (key === '2h' ? of([1]) : throwError(() => new HttpErrorResponse({ status: 500 }))), + noRetry, + ).subscribe((state) => seen.push(state)); + trigger.next('2h'); + trigger.next('24h'); + subscription.unsubscribe(); + // The 24h failure must not show 2h numbers under a stale label. + expect(statuses(seen)).toEqual(['loading', 'data', 'loading', 'error']); + }); + + it('stops emitting once unsubscribed, so a destroyed component cannot be updated', async () => { + const trigger = new Subject(); + const seen: LoadState[] = []; + const subscription = trackedLoadState(trigger, () => of([1]), noRetry).subscribe((state) => seen.push(state)); + trigger.next('2h'); + subscription.unsubscribe(); + trigger.next('24h'); + expect(seen.length).toBe(2); + }); +}); diff --git a/frontend/src/app/shared/load-state.ts b/frontend/src/app/shared/load-state.ts new file mode 100644 index 00000000000..b0207f9928c --- /dev/null +++ b/frontend/src/app/shared/load-state.ts @@ -0,0 +1,174 @@ +import { Observable, of, timer, throwError } from 'rxjs'; +import { catchError, map, retry, startWith, switchMap, timeout } from 'rxjs/operators'; +import { HttpErrorResponse } from '@angular/common/http'; + +/** + * A bounded lifecycle for one remote read. + * + * The pages this replaces subscribed with a single next handler and no error + * handler, so a failing request left a spinner or a skeleton on screen with + * nothing left subscribed to ever clear it. Every path here ends in a terminal + * state, and the states keep empty, stale, unavailable and failed apart instead + * of collapsing them into one blank panel. + */ + +export type LoadFailure = + /** The request did not finish inside its budget. */ + | 'timeout' + /** The route is not served by this deployment. */ + | 'missing' + /** The dependency behind the route is down. */ + | 'unavailable' + /** The answer did not have the shape this page can render. */ + | 'malformed' + /** The request never reached the server. */ + | 'network'; + +export type LoadState = + | { readonly status: 'loading' } + | { readonly status: 'data'; readonly value: T; readonly at: number } + | { readonly status: 'empty'; readonly at: number } + /** A previous good answer, kept on screen and labelled, after a later failure. */ + | { readonly status: 'stale'; readonly value: T; readonly at: number; readonly reason: LoadFailure } + | { readonly status: 'error'; readonly reason: LoadFailure; readonly at: number }; + +export interface LoadOptions { + /** Overall budget for one attempt, including retries. Defaults to 20 seconds. */ + readonly timeoutMs?: number; + /** Answers that are valid but have nothing to show. Defaults to an empty array. */ + readonly isEmpty?: (value: T) => boolean; + /** How many times a retryable failure is retried. Defaults to two. */ + readonly retries?: number; + /** Base backoff before the first retry, in milliseconds. Defaults to 500. */ + readonly retryDelayMs?: number; +} + +const DEFAULT_TIMEOUT_MS = 20_000; +const DEFAULT_RETRIES = 2; +const DEFAULT_RETRY_DELAY_MS = 500; +const MAXIMUM_RETRY_DELAY_MS = 8_000; + +function defaultIsEmpty(value: unknown): boolean { + return Array.isArray(value) && value.length === 0; +} + +/** Classifies a thrown value into the failure kinds the templates render. */ +export function classifyLoadFailure(error: unknown): LoadFailure { + if (error instanceof HttpErrorResponse) { + if (error.status === 404) return 'missing'; + if (error.status === 0) return 'network'; + if (error.status >= 500) return 'unavailable'; + if (error.status >= 400) return 'missing'; + } + const name = (error as { name?: string })?.name; + if (name === 'TimeoutError') return 'timeout'; + if (name === 'HttpErrorResponse') return 'unavailable'; + return 'malformed'; +} + +/** + * Retrying a 404 or a 4xx cannot help: the route is simply not served here. + * Retrying a timeout or a 5xx can, so those get a small bounded backoff. + */ +export function isRetryableFailure(reason: LoadFailure): boolean { + return reason === 'timeout' || reason === 'unavailable' || reason === 'network'; +} + +/** + * Wraps one request so it always resolves to a terminal state. + * + * `previous` carries the last good answer for this key. When a later attempt + * fails, that answer is shown again as `stale` with the reason, rather than + * being replaced by a blank panel. + */ +export function toLoadState( + request$: Observable, + options: LoadOptions = {}, + previous: { value: T; at: number } | null = null, +): Observable> { + const isEmpty = options.isEmpty ?? defaultIsEmpty; + const maxRetries = options.retries ?? DEFAULT_RETRIES; + const baseDelay = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS; + + return request$.pipe( + retry({ + count: maxRetries, + delay: (error, attempt) => { + if (!isRetryableFailure(classifyLoadFailure(error))) { + return throwError(() => error); + } + // Exponential backoff with jitter, so a shared outage does not turn + // every open tab into a synchronised retry storm. + const ceiling = Math.min(baseDelay * Math.pow(2, attempt - 1), MAXIMUM_RETRY_DELAY_MS); + return timer(Math.round(ceiling * (0.5 + Math.random() * 0.5))); + }, + }), + // The budget covers the retries too, so a dependency that hangs cannot hold + // the page past the deadline however many attempts are left. + timeout({ first: options.timeoutMs ?? DEFAULT_TIMEOUT_MS }), + map((value): LoadState => { + const at = Date.now(); + if (value === null || value === undefined) { + return { status: 'error', reason: 'malformed', at }; + } + return isEmpty(value) ? { status: 'empty', at } : { status: 'data', value, at }; + }), + catchError((error) => { + const reason = classifyLoadFailure(error); + const at = Date.now(); + return of>( + previous + ? { status: 'stale', value: previous.value, at: previous.at, reason } + : { status: 'error', reason, at }, + ); + }), + startWith>({ status: 'loading' }), + ); +} + +/** + * Runs `build` for every trigger, keeping the last good answer so a later + * failure degrades to `stale` instead of to a blank panel. Switching means an + * obsolete request is cancelled the moment a new one starts. + */ +export function trackedLoadState( + trigger$: Observable, + build: (key: K) => Observable, + options: LoadOptions = {}, +): Observable> { + let previous: { value: T; at: number } | null = null; + let previousKey: K | undefined; + return trigger$.pipe( + switchMap((key) => { + // A different range is different data; last known good does not carry over. + if (previousKey !== undefined && previousKey !== key) { + previous = null; + } + previousKey = key; + return toLoadState(build(key), options, previous).pipe( + map((state) => { + if (state.status === 'data') { + previous = { value: state.value, at: state.at }; + } + return state; + }), + ); + }), + ); +} + +/** Human-readable reason, for the message a failed panel shows. */ +export function loadFailureMessage(reason: LoadFailure): string { + switch (reason) { + case 'missing': + return $localize`:@@load.failure.missing:This deployment does not serve this data yet.`; + case 'unavailable': + return $localize`:@@load.failure.unavailable:The service behind this panel is unavailable.`; + case 'timeout': + return $localize`:@@load.failure.timeout:This took too long to answer.`; + case 'network': + return $localize`:@@load.failure.network:The request could not reach the server.`; + default: + return $localize`:@@load.failure.malformed:The answer could not be read.`; + } +} diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 7fcf7e5b3ed..95fb521f94c 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -94,6 +94,7 @@ import { LoadingIndicatorComponent } from '@components/loading-indicator/loading import { IndexingProgressComponent } from '@components/indexing-progress/indexing-progress.component'; import { SvgImagesComponent } from '@components/svg-images/svg-images.component'; import { ChangeComponent } from '@components/change/change.component'; +import { LoadStatusComponent } from '@app/shared/components/load-status/load-status.component'; import { SatsComponent } from '@app/shared/components/sats/sats.component'; import { BtcComponent } from '@app/shared/components/btc/btc.component'; import { FeeRateComponent } from '@app/shared/components/fee-rate/fee-rate.component'; @@ -217,6 +218,7 @@ import { GithubLogin } from '@components/github-login.component/github-login.com DataCyDirective, RewardStatsComponent, LoadingIndicatorComponent, + LoadStatusComponent, IndexingProgressComponent, SvgImagesComponent, ChangeComponent, @@ -370,6 +372,7 @@ import { GithubLogin } from '@components/github-login.component/github-login.com DataCyDirective, RewardStatsComponent, LoadingIndicatorComponent, + LoadStatusComponent, IndexingProgressComponent, SvgImagesComponent, ChangeComponent, diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts index d8e7985e8f0..1c8ea44fff0 100644 --- a/frontend/vitest.config.ts +++ b/frontend/vitest.config.ts @@ -34,7 +34,7 @@ export default defineConfig({ environment: 'node', globals: true, setupFiles: ['./src/universe-test-setup.ts'], - include: ['src/app/universe/**/*.spec.ts'], + include: ['src/app/universe/**/*.spec.ts', 'src/app/shared/**/*.spec.ts'], reporters: ['default'], }, }); From a58abe89a3f035c843e66a80873e2feafea96cd6 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 10:24:30 +0000 Subject: [PATCH 05/68] release: gate the cutover on the deployed configuration, not on fixtures The last release passed every check and still shipped a Charts page and a Mining dashboard whose backend routes were never mounted. CI answered from fixtures, so nothing it ran could have noticed: the thing that was wrong was the configuration of the machine, and no check looked at that. release.sh installs beside the running release and refuses the symlink swap unless the build is complete, the configuration is coherent, the database answers, the source registry parses with every token present, and every protocol the registry calls readable has an authority configured. After the swap it reads /api/v1/capabilities and fails the release if a feature is enabled with no routes behind it, which is exactly the state that shipped. The integration database is pinned to the engine and major version the deployment runs. It was MariaDB 10.5 against a MySQL 8.4 plan; the migrations use MariaDB syntax MySQL rejects outright, so a test database on the other engine would have proved nothing about the release. Co-Authored-By: Claude Opus 5 --- backend/docker-compose.test.yml | 5 +- scripts/universe/release.sh | 266 ++++++++++++++++++++++++++++++++ 2 files changed, 270 insertions(+), 1 deletion(-) create mode 100644 scripts/universe/release.sh diff --git a/backend/docker-compose.test.yml b/backend/docker-compose.test.yml index 9cb824d71e3..4119387b3ad 100644 --- a/backend/docker-compose.test.yml +++ b/backend/docker-compose.test.yml @@ -2,7 +2,10 @@ version: "3.7" services: db-test: - image: mariadb:10.5.21 + # Must stay the same engine and major version the Universe deployment runs. + # The migrations use MariaDB syntax that MySQL rejects outright, so a test + # database on a different engine proves nothing about the release. + image: mariadb:11.4 environment: MYSQL_DATABASE: "mempool_test" MYSQL_USER: "mempool_test" diff --git a/scripts/universe/release.sh b/scripts/universe/release.sh new file mode 100644 index 00000000000..858a255c06b --- /dev/null +++ b/scripts/universe/release.sh @@ -0,0 +1,266 @@ +#!/usr/bin/env bash +# +# Installs a Universe Explorer release beside the running one and cuts over to +# it only after every gate passes. +# +# The gates exist because the previous release passed CI and still shipped a +# Charts page and a Mining dashboard whose backend routes were never mounted. +# CI answered from fixtures; nothing checked the deployed configuration. So the +# checks here run against the release that is about to serve traffic, before +# the symlink moves, and the cutover is refused if any of them fails. +# +# Usage: +# release.sh install unpack beside the current release +# release.sh preflight run the gates, change nothing +# release.sh cutover gate, switch, restart, verify +# release.sh rollback point back at a previous release +# +set -euo pipefail + +ROOT=/opt/universe-explorer +RELEASES="$ROOT/releases" +CURRENT="$ROOT/current" +CONF=/etc/universe-explorer +UNITS="universe-explorer-backend universe-explorer-overlay universe-explorer-gateway" +GATEWAY=http://127.0.0.1:8099 +BACKEND=http://127.0.0.1:8996 +OVERLAY=http://127.0.0.1:3400 + +log() { printf '%s %s\n' "$(date -u +%H:%M:%SZ)" "$*"; } +fail() { printf '%s FAILED: %s\n' "$(date -u +%H:%M:%SZ)" "$*" >&2; exit 1; } + +release_dir() { printf '%s/mempool-%s' "$RELEASES" "$1"; } + +# ---------------------------------------------------------------- install ---- + +cmd_install() { + local sha=$1 tarball=$2 + local dir; dir=$(release_dir "$sha") + [ -f "$tarball" ] || fail "no artifact at $tarball" + [ -e "$dir" ] && fail "$dir already exists; releases are never overwritten in place" + + local previous; previous=$(readlink -f "$CURRENT" 2>/dev/null || true) + mkdir -p "$dir" + tar -xzf "$tarball" -C "$dir" + + # Dependencies and the compiled gbt module do not change between most + # releases, so they are hard-linked from the running one. That keeps the + # install quick and the disk flat, and the files stay immutable either way. + if [ -n "$previous" ] && [ -d "$previous/backend/node_modules" ]; then + [ -d "$dir/backend/node_modules" ] || cp -al "$previous/backend/node_modules" "$dir/backend/node_modules" + [ -d "$dir/backend/rust-gbt" ] || cp -al "$previous/backend/rust-gbt" "$dir/backend/rust-gbt" + [ -f "$dir/backend/package.json" ] || cp -a "$previous/backend/package.json" "$dir/backend/package.json" + [ -d "$dir/rust" ] || cp -al "$previous/rust" "$dir/rust" + fi + + printf '%s\n' "$sha" > "$dir/RELEASE-SHA" + chown -R root:universe-explorer "$dir" + chmod -R go-w "$dir" + log "installed $dir" +} + +# --------------------------------------------------------------- preflight --- + +# Reads a JSON value out of the backend configuration without printing secrets. +conf_value() { + python3 -c " +import json,sys +conf=json.load(open('$CONF/backend.json')) +node=conf +for key in sys.argv[1].split('.'): + node=node[key] +print(json.dumps(node)) +" "$1" +} + +gate_release_present() { + local dir=$1 + [ -f "$dir/backend/dist/index.js" ] || fail "release has no backend build" + [ -f "$dir/frontend/build/index.html" ] || fail "release has no frontend build" + [ -f "$dir/scripts/universe/gateway.mjs" ] || fail "release has no gateway" + [ -f "$dir/backend/dist/tasks/pools/pools-v2.json" ] \ + || fail "release has no bundled mining pool metadata, so enabling the database would abort at startup" +} + +# The same combinations the backend refuses at startup, checked before cutover +# so an incoherent configuration never reaches a restart. +gate_configuration() { + local database statistics indexing mempool + database=$(conf_value DATABASE.ENABLED) + statistics=$(conf_value STATISTICS.ENABLED) + indexing=$(conf_value MEMPOOL.INDEXING_BLOCKS_AMOUNT) + mempool=$(conf_value MEMPOOL.ENABLED) + + [ "$statistics" = true ] && [ "$database" != true ] \ + && fail "statistics is on with the database off, so no statistics route would be served" + [ "$statistics" = true ] && [ "$mempool" != true ] \ + && fail "statistics is on with the mempool backend off, so nothing would collect it" + [ "$indexing" != 0 ] && [ "$database" != true ] \ + && fail "block indexing is set with the database off, so no mining route would be served" + log "configuration is coherent" +} + +gate_database() { + [ "$(conf_value DATABASE.ENABLED)" = true ] || { log "database disabled, skipping"; return; } + python3 - <<'PY' || fail "the configured database did not answer" +import json, socket +conf = json.load(open('/etc/universe-explorer/backend.json'))['DATABASE'] +with socket.create_connection((conf['HOST'], conf['PORT']), timeout=5): + pass +PY + log "database accepts connections" +} + +gate_sources_parse() { + python3 - <<'PY' || fail "the overlay source registry is not valid" +import json, os, re +env = {} +for line in open('/etc/universe-explorer/overlay.env', encoding='utf-8'): + line = line.rstrip('\n') + if '=' in line and not line.startswith('#'): + key, value = line.split('=', 1) + env[key] = value +raw = env.get('UNIVERSE_EXPLORER_SOURCES_JSON', '') +sources = json.loads(raw) if raw else [] +assert isinstance(sources, list) and sources, 'no sources configured' +for source in sources: + name = source['bearerTokenEnv'] + token = env.get(name, '') + assert len(token.encode()) >= 32, f'token variable {name} is missing or too short' + assert re.match(r'^https?://', source['origin']), 'origin must be an http(s) origin' +print(f'{len(sources)} sources parse, every token variable is present') +PY + log "overlay source registry parses with every token present" +} + +# A protocol the registry calls readable must have an authority configured for +# it, or the protocols page will advertise something nothing can answer. +gate_readable_protocols_have_authorities() { + local dir=$1 + python3 - "$dir" <<'PY' || fail "a readable protocol has no configured authority" +import json, sys, subprocess + +env = {} +for line in open('/etc/universe-explorer/overlay.env', encoding='utf-8'): + if '=' in line and not line.startswith('#'): + key, value = line.rstrip('\n').split('=', 1) + env[key] = value +raw = env.get('UNIVERSE_EXPLORER_SOURCES_JSON', '') +configured = {s['authorityId'] for s in (json.loads(raw) if raw else [])} + +out = subprocess.run( + ['curl', '-sS', '-m', '10', 'http://127.0.0.1:3400/api/v1/universe/protocols'], + capture_output=True, text=True) +if out.returncode != 0 or not out.stdout.strip(): + print('overlay not answering yet, skipping this gate') + sys.exit(0) + +manifest = json.loads(out.stdout) +missing = [ + p['id'] for p in manifest['protocols'] + if p.get('releaseStatus', '').upper().startswith('VERIFIED') + and p.get('indexerAuthority') + and p['indexerAuthority'] not in configured +] +if missing: + print('readable protocols with no configured authority:', ', '.join(sorted(missing))) + sys.exit(1) +print('every readable protocol has a configured authority') +PY + log "readable protocols all have authorities" +} + +cmd_preflight() { + local sha=$1 + local dir; dir=$(release_dir "$sha") + [ -d "$dir" ] || fail "no release at $dir" + gate_release_present "$dir" + gate_configuration + gate_database + gate_sources_parse + gate_readable_protocols_have_authorities "$dir" + log "preflight passed for $sha" +} + +# ---------------------------------------------------------------- cutover ---- + +# Waits for a URL to answer 200 within a bounded time. +wait_for() { + local url=$1 name=$2 deadline=$((SECONDS + 90)) + while [ $SECONDS -lt $deadline ]; do + if [ "$(curl -sS -o /dev/null -m 5 -w '%{http_code}' "$url" || true)" = 200 ]; then + log "$name is answering" + return 0 + fi + sleep 2 + done + return 1 +} + +verify_live() { + wait_for "$GATEWAY/__gateway/health" gateway || fail "gateway did not come back" + wait_for "$BACKEND/api/v1/backend-info" backend || fail "backend did not come back" + wait_for "$OVERLAY/api/v1/universe/status" overlay || fail "overlay did not come back" + + local served + served=$(curl -sS -m 10 "$BACKEND/api/v1/backend-info" | python3 -c 'import json,sys; print(json.load(sys.stdin)["gitCommit"])') + log "backend reports $served" + + # A public feature must not be advertised by a backend that did not mount its + # routes. This is the exact failure that shipped last time. + curl -sS -m 10 "$BACKEND/api/v1/capabilities" | python3 - <<'PY' || fail "a public feature has no routes behind it" +import json, sys +report = json.load(sys.stdin) +bad = [ + name for name, feature in report['features'].items() + if feature['enabled'] and not feature['routesRegistered'] +] +if bad: + print('features enabled with no routes registered:', ', '.join(bad)) + sys.exit(1) +for name, feature in report['features'].items(): + print(f"{name}: enabled={feature['enabled']} routes={feature['routesRegistered']} state={feature['state']}") +PY +} + +cmd_cutover() { + local sha=$1 + local dir; dir=$(release_dir "$sha") + cmd_preflight "$sha" + + local previous; previous=$(readlink -f "$CURRENT" 2>/dev/null || true) + log "previous release: ${previous:-none}" + + ln -sfn "$dir" "$CURRENT.new" + mv -Tf "$CURRENT.new" "$CURRENT" + log "current now points at $dir" + + # shellcheck disable=SC2086 + systemctl restart $UNITS + if ! verify_live; then + log "verification failed, rolling back" + [ -n "$previous" ] && cmd_rollback "$(basename "$previous" | sed 's/^mempool-//')" + fail "cutover verification failed" + fi + log "cutover to $sha complete" +} + +cmd_rollback() { + local sha=$1 + local dir; dir=$(release_dir "$sha") + [ -d "$dir" ] || fail "no release at $dir to roll back to" + ln -sfn "$dir" "$CURRENT.new" + mv -Tf "$CURRENT.new" "$CURRENT" + # shellcheck disable=SC2086 + systemctl restart $UNITS + verify_live || fail "rollback target did not come back either" + log "rolled back to $sha" +} + +case "${1:-}" in + install) cmd_install "$2" "$3" ;; + preflight) cmd_preflight "$2" ;; + cutover) cmd_cutover "$2" ;; + rollback) cmd_rollback "$2" ;; + *) fail "usage: release.sh {install |preflight |cutover |rollback }" ;; +esac From be33a11d0575e42afd6cec2857a0ef345ef79451 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 10:25:03 +0000 Subject: [PATCH 06/68] theme: the Universe pink system, and the gates that hold its roles apart The product shipped an ultramarine identity that belonged to no other Bitcoin Universe surface. Core, Wallet and Inscribe are all built on the same pink-forward system, so the explorer read as a different company's product wearing our name. This replaces the brand layer rather than recolouring it. Three roles now exist where one did: a working pink that is readable both as text and as a fill, the #ff0066 identity anchor for borders, rings and display type where it carries no small label, and the lavender that carries everything the brand pink should not, including focus. Surfaces move to pearl on light and to the plum-black the rest of Universe uses on dark. Nothing pink means anything. The five evidence states keep the conventional green, amber, blue and red, protocol identity keeps its own scale, and the fee scale is untouched, because a fee band means a fee rate. Every value here was derived against the contrast module rather than picked: the anchor is 3.85:1 on white, which is why it is not a button fill, and the chart series were solved for separation under protanopia, deuteranopia and tritanopia as well as normal vision. The gate grew to match. It now measures that the brand is never a state or a protocol, that two protocols are never the same colour, that dark and high contrast declare every token light does, and that the retired ultramarine values cannot come back. Adding it found three collisions that predate this change: ordinals orange sat 11.1 dE from the amber meaning partial evidence, and stamps and op data sat inside the new brand family. 331 palette pairings checked, 0 failing. --- .../block-overview-graph/tx-view.ts | 12 +- .../svg-images/svg-images.component.html | 15 +- frontend/src/app/shared/chart-theme.ts | 20 +- frontend/src/index.mempool.html | 6 +- .../favicons/android-chrome-192x192.png | Bin 1541 -> 1561 bytes .../favicons/android-chrome-512x512.png | Bin 4200 -> 4228 bytes .../resources/favicons/apple-touch-icon.png | Bin 1342 -> 1328 bytes .../src/resources/favicons/browserconfig.xml | 2 +- .../src/resources/favicons/favicon-16x16.png | Bin 315 -> 319 bytes .../src/resources/favicons/favicon-32x32.png | Bin 416 -> 406 bytes frontend/src/resources/favicons/favicon.ico | Bin 438 -> 428 bytes .../src/resources/favicons/mstile-150x150.png | Bin 1239 -> 1259 bytes .../src/resources/favicons/site.webmanifest | 4 +- .../universe/universe-explorer-logo.svg | 25 - .../universe/universe-explorer-social.png | Bin 8242 -> 9036 bytes .../universe/universe-explorer-wordmark.svg | 27 - frontend/src/styles.scss | 16 +- frontend/src/styles/_universe-tokens.scss | 500 ++++++++++++------ frontend/src/theme-contrast.scss | 62 ++- .../universe/brand/render-brand-assets.mjs | 24 +- scripts/universe/check-palettes.mjs | 158 +++++- 21 files changed, 577 insertions(+), 294 deletions(-) delete mode 100644 frontend/src/resources/universe/universe-explorer-logo.svg delete mode 100644 frontend/src/resources/universe/universe-explorer-wordmark.svg diff --git a/frontend/src/app/components/block-overview-graph/tx-view.ts b/frontend/src/app/components/block-overview-graph/tx-view.ts index 541d83dc9ab..e1e17b116a0 100644 --- a/frontend/src/app/components/block-overview-graph/tx-view.ts +++ b/frontend/src/app/components/block-overview-graph/tx-view.ts @@ -7,8 +7,16 @@ import { TransactionStripped } from '@interfaces/node-api.interface'; import { TransactionFlags } from '@app/shared/filters.utils'; const hoverTransitionTime = 300; -const defaultHoverColor = hexToColor('1bd8f4'); -const defaultHighlightColor = hexToColor('800080'); +// Pointer and search feedback, not data. +// +// These two are the only colours in the scene that answer the reader rather +// than the chain, so they take the brand pink and the Universe lavender. Both +// sit outside the fee scale, which runs green through amber to orange on the +// default palette and blue through amber on the high-contrast one, so neither +// can be mistaken for a fee band. The cyan and the plain purple they replaced +// belonged to no palette in this product. +const defaultHoverColor = hexToColor('ff0066'); +const defaultHighlightColor = hexToColor('8b5cf6'); // convert from this class's update format to TxSprite's update format function toSpriteUpdate(params: ViewUpdateParams): SpriteUpdateParams { diff --git a/frontend/src/app/components/svg-images/svg-images.component.html b/frontend/src/app/components/svg-images/svg-images.component.html index 15e0e59ffc6..62e2fe7dc9c 100644 --- a/frontend/src/app/components/svg-images/svg-images.component.html +++ b/frontend/src/app/components/svg-images/svg-images.component.html @@ -164,26 +164,13 @@ + fill="none" stroke="var(--u-brand-accent, currentColor)" stroke-width="5" opacity="0.55"/> UNIVERSE EXPLORER - - - - - - - - - - - - - diff --git a/frontend/src/app/shared/chart-theme.ts b/frontend/src/app/shared/chart-theme.ts index 185a68f2e81..0bb652a1e45 100644 --- a/frontend/src/app/shared/chart-theme.ts +++ b/frontend/src/app/shared/chart-theme.ts @@ -71,20 +71,20 @@ export const CHART_LINE_TYPES: ('solid' | 'dashed' | 'dotted')[] = [ ]; const FALLBACK: ChartChrome = { - axis: '#586475', - label: '#586475', - strongLabel: '#10151f', - grid: '#dde3ec', + axis: '#645a6e', + label: '#645a6e', + strongLabel: '#241a2b', + grid: '#e8e0ee', tooltipBackground: '#ffffff', - tooltipBorder: '#d5dce6', - tooltipText: '#10151f', + tooltipBorder: '#ded5e5', + tooltipText: '#241a2b', surface: '#ffffff', markBorder: '#ffffff', - series: ['#434ba3', '#a3436b', '#241763', '#a38343', '#63172a', '#4393a3', '#634417'], + series: ['#c40059', '#5b2fa6', '#8a5100', '#4393a3', '#3d0a2a', '#7f9b5a', '#a3006b'], ramps: { - scale: ['#4393a3', '#2f7f9e', '#2f5a9e', '#43349e', '#5b1f7a'], - a: ['#434ba3', '#241763'], - b: ['#a3436b', '#63172a'], + scale: ['#e0568f', '#c40059', '#a3006b', '#7a2f8f', '#5b2fa6'], + a: ['#c40059', '#5b2fa6'], + b: ['#8a5100', '#63172a'], c: ['#4393a3', '#1c4f5c'], }, }; diff --git a/frontend/src/index.mempool.html b/frontend/src/index.mempool.html index 31e591cd62e..2584e3c7218 100644 --- a/frontend/src/index.mempool.html +++ b/frontend/src/index.mempool.html @@ -45,10 +45,10 @@ - + - - + + diff --git a/frontend/src/resources/favicons/android-chrome-192x192.png b/frontend/src/resources/favicons/android-chrome-192x192.png index 53d7291fb53d955c3a27f86424b23163d42fc3f3..68cd537d796f6df86ce5b0026c01685559373fc8 100644 GIT binary patch delta 1216 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 O0T->VoG-Vy`Q-n_!<{z( delta 2804 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 - #2438b8 + #c40059 diff --git a/frontend/src/resources/favicons/favicon-16x16.png b/frontend/src/resources/favicons/favicon-16x16.png index 4aec308adfeac8dc613f0d941e5df6fbc3072054..7f034049539a901741aba520bef49db0991e4774 100644 GIT binary patch delta 292 zcmV+<0o(q&0>1)~B!BctL_t(|oUD*d3jskK#>ehDkX=ejksOGVl9LiQImnrtPvGLK zI63?#gR+MB|PaU zU^Kj{-lywpe`XH2VnJ~*$7kvHz`MQqBo%Nt8MM3L;}4L9hkt`(fo&ahQGgHD3oP&Q zq#~Tp{Yez`+O>PK2+e^|qZDqIiT4###3&GNTU`yHe2Wl^HW%X*e3Eoug3EoNnk8!$ zvT^XYgE*Xj4)N*}`zsk5V8@nZ_%w#f9Z`WpX9O2}#>r|%pxb0c1%Rwd<0YWTa)&nn q00960ov}pw0384T21!IgR09C%{Zhrlij1}Z0000cQ|ZgOzr zCO0lpeif3-BsoZ1v(16cJYLP%53Tm;_1>q?>+|0C`*{yj6a}#Z7h)3_T*fnYx#4~; z%cOm!Ld4iW@5N$1917s-h9F9#DN`z#+#t(JEaC}Mgw_B=#DB3Kv|!j(t68Z z_&ZQMxT{)D_6IZ(HRngaMvoyj{!wr6XfwIsXv7Z;$J1D65dYl2xFZr zSmbXH#XJQD0fhdb1C|4jB!5duL_t(|oa~lQOT#c2#@}{H?5681)OOB4pbi{*)sv`SL64pk z4}J)}3m!fD4Lk{+Jb4lCB8;I3(pf>&$p)^ptBdir2B~duf?FR#$Qz!QUr6$XpbOZ5 zZc2tO>;D4~7iZ?ilo?YdI3%at@?GoY{n~;L3b6n~3)AY-EPq6hGG!obuzp_t(TRd- zBdm9;uby2C$-#P7Ddrg?HbBB(p;NJ&WjiE?jB5-a69f^IT+==PM7jw~=~7{Gca4}i zHkJku)>WWXUtjF>ICoFh{)zWc69E(tH`V15H_2+gGh_w{rEYhQL;%=O#cY3j2Gnn} zo)k2{(d2v*5_DWj0ML4_lhNVK`~+*9FO^M$kOJ#!T;4d9N9y_TdkSum>%W~{ee26_ ztzaVu@s&IkeE^91RNU_!o7<}>v>I4>Ru4|ONh$d{_CDYf00960e(Buq00006Nkl@A0USISJ$oEJA`qU5+g~%)TFYI)e{K_q6Ga#E`OF@E{aXSrbR=~ucjhx zfeg$VBLDP+k{(wmF;CC9Vj{El3K$dsxb9~*#++u%Ym}J#hc*GwkMUb^n+^d$Wb~D9 zoZY>$Wp~ILzjf^5;9CEa`F{z)qobei^=ll`8UYiNSsM3fs#(0L#XF zw*Rfc*YK)0+J2fE&Wz*^{tiebCG#x~{4Z13Bu4i&fqdWj^#YOHv-~#{v|NpM} j3a9`800v1!K~w_(NUwMoUekBj00000NkvXXu0mjfY7DnX diff --git a/frontend/src/resources/favicons/favicon.ico b/frontend/src/resources/favicons/favicon.ico index 2545f8e21ebfb822bd2050187a3b160ec1c97f38..3753a8b621130a68e0e1023f63e1d391897336b6 100644 GIT binary patch delta 396 zcmV;70dxMg1FQoN000310RSK%00031AOMz;4=aC5Nkla`wct^o;-OG?;?z$2+~OkTPW;ZLoe`{?UnoX(Oz6tFNA23(3KHRw?EgBQ`+7U!ha6n`JvBhm30sAQJ=; zlw8w307SY8OzBc#a(9iGIX0FC5Y|#525;w_ezB6P7 z38ij#jzj?1P{nM2dj`~Rvz`<*ztQA;5)yP=N&wJ$u9MN>%=`pvoG+D4gOCF2YFyqp zl}GCN@Ouhwk?X&mU484zZ>?Y>2l16W6@37R`c&NS9h=*$D6|?_c~%cjxk)McI`%%` q6954J|9ABtdKd00007kabbcAW zgOw`sZ;8Qu_X^v~JOInae766s!PoGrH`;!h8qSR54*m{ECFMt}Lk24OLcW&c0xkuP zXeF1-%&L+YJ%rg6$Uv5bwfxwRzJsGGX-)8Z#iL>f0Fd!zcXHO)KQtXgyA8T3Zmwr? zOQSphZpB6JKi~rZ0RR84`3k52000I_L_t&o07$QR7hcnM*Z=?k07*qoM6N<$f{8`A Aod5s; diff --git a/frontend/src/resources/favicons/mstile-150x150.png b/frontend/src/resources/favicons/mstile-150x150.png index 3389963d4a2e43bb5ad0d225017a3de42cb81a9a..8282e849451829b974db83e1d55d3d3159191ee1 100644 GIT binary patch delta 987 zcmV<110?*{3F`@vB!8euL_t(|ob28IYa4YO$MJVAceyOh_e=U^iS*05Rf`*}$~tD5 z_`?Jdf6^bcAc&&iUm*Ag2>!gEg#9R}zxazVe_w}#Fqspv#df0|Ol`B)B~7|4>D`(B zAPBn-*5&iby}H+fKq2W5N1w^%KG)nk=2dx52$>-SjtSv0A(5mylaB-oe@xLS8nKF* z*kIZkOq-d6NJO-An-4l0_4Y=+vr+TguHe&`Ffm=qygD6;>3z}!IWkq+`{8-pm0R1D z74Zd{jz6ejTe;Uy*%N~jDu$6ddptf~{O8A;yR{vGrTo1xVw=VJbD`_^A8ROEoPWhE zBn6i8g!v1nqUnT$Sa;vIqWNTMc2Y2@O_+RnTtK8| z#z9|*3KJTZX%*6f!i>g-aJKe;6dsXU<(x!oY#UykNuBUyX282nJlY5!Fd zGzt^iWhe0d?#jCQ?KSD2?1htw>GGrZ+vR-Y`fWj@a7Sw82LkVJ9sju{ebv4jyaASz z55t7He)bvLHa0*YQTuAyRlac#+Jt_`-MV~3JWog&7(CWbMH5W)X=fC?^ay@dZBq^RX2R_Z}kWzU5hH$uU%QJS61xj@^;CwOF7d??K`lP zo`lwQvES;nme;#C=^f{-nfO>yo?$#k3Xz{MfB1wui+3fIc7E5iVepp)HE*s-C^di8 zbTI<_tMK0UmCj~ELZp_~+O-Cfqh z)oS+q^F}--{nlEmF1>rPQMo0$M6OD>hIt;CHJnMGJ7Jd{GZmM9=-k_G-Px=yENUL? z2Yh%EKC`$klYs;-lW+tlDfce`00960Y+_6P00006Nkl7DX^uCxFE002ov JPDHLkV1j)00)_wp delta 986 zcmV<0110?H3D*gbB!7%aL_t(|ob266Zxd%6$MOG+9UCVkamG&LCQ4OWB`A=nK!vE( zs!~_AMO9Vx-gnTR5rP{?ffIsvz>NbE91uu=#3HdnfCLC2_89M57QEZc85}_1=kff^ z@1q=|BuXrQGvj9_&-27xuh)f;nL^;05FQi4V?uaL2#*QjF_V7;JAcnD8dWN_bheyK z7gL$i!a_w_!RK=YEl<$$1}u-KqaA*O4Q-3l?mbwza5Y`7IAtxIVaU31|N3#i{SGu8 z2}`Bg>GR2_;TPgO{Q>U}-}ZN})Ot2*F69Y}#p z)HIDFCnEA*48!<*xO3yWzMsDz=<0NdMs1St;F0joJ+ljoAG!+e@w4||hjsB<`oQ72 zq0s$Z+b1?{utb-3IFZ`@w(OYs@P17Zju!s?@AAy7z9n7o38RU^GC!H<_^522~A-_YndHB?LWz0n#v3h`lK03<(hol6efJbCau$Va`u}v1L&4b zO{6ekFyIwZPvLOJ?J`EcTq&fO+7anDUt7>SmqSpSu)}Ts_+7tgg8v%3d&I*5nPdM_0Lnn-ntkU$r;HP(vjW~2}@92gJ%b_NrVW - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/src/resources/universe/universe-explorer-social.png b/frontend/src/resources/universe/universe-explorer-social.png index 847fde7b0c770d664a0dea3148365efce49459ce..0a3cf6f34d5b0be194411cb1feff88dd4958f36b 100644 GIT binary patch literal 9036 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 literal 8242 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 bna>0asCK7R+L%m&Bfw?DYZuE59Pj-bPxT4o diff --git a/frontend/src/resources/universe/universe-explorer-wordmark.svg b/frontend/src/resources/universe/universe-explorer-wordmark.svg deleted file mode 100644 index 3e37cb48176..00000000000 --- a/frontend/src/resources/universe/universe-explorer-wordmark.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - UNIVERSE - EXPLORER - diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 9bd9a264d1d..fdf3c8b70ed 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -3,12 +3,12 @@ @use "styles/universe-bootstrap-bridge" as universe-bridge; /* Theme */ -$bg: #11131f; +$bg: #0e0a13; $active-bg: #000000; -$hover-bg: #12131e; +$hover-bg: #241a30; $fg: #fff; $nav-bg: $bg; -$title-fg: #2055e3; +$title-fg: #c40059; $taproot: #eba814; $taproot-light: #d5a90a; @@ -22,11 +22,11 @@ $gray-700: $fg; $nav-tabs-link-active-bg: $active-bg; -$primary: #007cfa; -$secondary: #272f4e; -$tertiary: #6225b2; +$primary: #c40059; +$secondary: #2e2140; +$tertiary: #5b2fa6; $success: #0aab2f; -$info: #00ddff; +$info: #15547f; $h5-font-size: 1.15rem !default; @@ -42,7 +42,7 @@ $pagination-disabled-bg: $bg; $custom-select-indicator-color: $fg; -$link-color: $info; +$link-color: $primary; $link-decoration: none !default; $link-hover-color: color.adjust($link-color, $lightness: -15%) !default; $link-hover-decoration: underline !default; diff --git a/frontend/src/styles/_universe-tokens.scss b/frontend/src/styles/_universe-tokens.scss index 33d7754b889..f12eabc9465 100644 --- a/frontend/src/styles/_universe-tokens.scss +++ b/frontend/src/styles/_universe-tokens.scss @@ -4,20 +4,34 @@ // application. Everything here is emitted as CSS custom properties so a theme // swap is a variable swap, never a rebuild of component styles. // -// Two rules hold the system together: +// Four rules hold the system together: // -// 1. Colour carries evidence state, never protocol identity on its own. +// 1. Pink is the brand, and only the brand. Hot pink, magenta, fuchsia, +// lavender, blush, pearl and chrome carry Bitcoin Universe identity: +// the mark, primary actions, active navigation, focus, selection, and the +// live surfaces the product leads with. They never carry a status. +// +// 2. Colour carries evidence state, never protocol identity on its own. // Protocol hues live in their own scale and always appear next to a -// protocol name. Evidence states always carry a word. That separation is -// why a protocol's colour can never be mistaken for "confirmed" or -// "failed". +// protocol name. Evidence states always carry a word, and they keep the +// conventional green, amber, blue and red a reader already knows. That +// separation is why a protocol's colour can never be mistaken for +// "confirmed" or "failed", and why nothing pink ever means "it worked". +// +// 3. A fill and a label are two different roles. The identity anchor is +// #ff0066, but white text on that exact fill measures 3.85:1 and misses +// AA. So the anchor paints borders, rings, glows and large display type, +// where it carries no small text, and filled controls take a measured +// darker pink that a white label clears. Every strong fill in this file +// declares the foreground that goes on it. // -// 2. Light is the primary experience. The light palette is defined on :root +// 4. Light is the primary experience. The light palette is defined on :root // so it needs no stylesheet fetch and cannot flash. Dark restates the same // token names with its own values and is held to the same contrast floor. // // Contrast: every text token below clears WCAG 2.2 AA (4.5:1 for body, 3:1 for // large text and non-text indicators) against the surface it is designed for. +// `scripts/universe/check-palettes.mjs` measures it rather than trusting it. // --------------------------------------------------------------------------- // Scales that do not change between themes @@ -40,7 +54,9 @@ --u-radius-pill: 999px; // Type. A readable text face and a purposeful data face. Both resolve to - // system stacks so nothing is fetched from a third-party font host. + // system stacks so nothing is fetched from a third-party font host, and the + // first paint carries no webfont round trip. The editorial voice comes from + // weight, tracking and case in --u-display-*, not from a downloaded family. --u-font-text: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; --u-font-data: ui-monospace, "SF Mono", "Cascadia Mono", "Segoe UI Mono", @@ -64,6 +80,12 @@ --u-weight-semibold: 600; --u-weight-bold: 700; + // The editorial register. An eyebrow is the only place small caps and wide + // tracking are allowed, and it never drops below 11px. + --u-display-tracking: -0.02em; + --u-eyebrow-tracking: 0.14em; + --u-eyebrow-size: 0.6875rem; + // Motion. Durations are short because every animation here reports a fact // (a transaction arrived, a block confirmed, a fee moved). Nothing decorative // is allowed to delay reading the number underneath it. @@ -83,33 +105,35 @@ // // The axis the whole product turns on is visible here. A projected block is // lighter and unfinished; a confirmed block is deep and settled. Nothing has - // to be read to feel which is which. - --u-block-ink: #f7f9fc; - --u-block-ink-muted: #dfe4ee; + // to be read to feel which is which. The settled end of that axis is the + // plum-black the rest of the Universe products are built on, so a confirmed + // block reads as the house material rather than as a neutral grey brick. + --u-block-ink: #fff4fa; + --u-block-ink-muted: #e8d6e4; // A projected block's face IS the live fee gradient, and its figures are // printed on top of it. No ink clears the contrast floor across that whole // scale, so the figures get a plate: the gradient still reads as colour // around and through it, and the text sits on a surface whose worst case is // measured rather than assumed. `check-palettes.mjs` holds it to that. - --u-block-plate: rgba(9, 12, 24, 0.62); - --u-block-confirmed-from: #2a3566; - --u-block-confirmed-to: #1a2142; - --u-block-confirmed-top: #3a477f; - --u-block-confirmed-side: #141930; + --u-block-plate: rgba(16, 7, 22, 0.66); + --u-block-confirmed-from: #3f1f4a; + --u-block-confirmed-to: #26122c; + --u-block-confirmed-top: #582a5f; + --u-block-confirmed-side: #190b1e; // The part of a block its transactions did not fill. It belongs to the block, // not to the page: it used to take a page surface token, which meant the top // of every confirmed block was pale and the figures printed on it vanished. - --u-block-confirmed-empty: #3a4166; - --u-block-projected-empty: #4a5169; + --u-block-confirmed-empty: #4d2a56; + --u-block-projected-empty: #574a63; // A block whose contents have not arrived. Deliberately desaturated so it // reads as absent rather than as a block that happens to be empty; the // figures on it are skeletons, which is the signal that does not depend on // anyone noticing a hue. - --u-block-loading: #565a63; - --u-block-projected-top: #5c6480; - --u-block-projected-side: #343a4d; + --u-block-loading: #5a5260; + --u-block-projected-top: #6b5a75; + --u-block-projected-side: #3a3142; // Layout --u-width-prose: 68ch; @@ -132,106 +156,187 @@ color-scheme: light; // Surfaces run from the page floor up. Cards are white so elevation reads - // without a shadow, which keeps dense tables crisp. - --u-surface-page: #f4f6f9; + // without a shadow, which keeps dense tables crisp. The floor carries a + // pearl cast rather than a cool grey, so the page belongs to the same + // material as the pink on it instead of sitting under it. + --u-surface-page: #f7f4f8; --u-surface-raised: #ffffff; - --u-surface-sunken: #e9edf3; - --u-surface-inset: #dfe5ee; - --u-surface-hover: #eef2f7; - --u-surface-active: #e3e9f2; - - // Text. Primary is near-black with a cool cast so it sits with the blues + --u-surface-sunken: #f0ebf4; + --u-surface-inset: #e6dfec; + --u-surface-hover: #faf3f7; + --u-surface-active: #f4e8f0; + --u-surface-selected: #fdeaf2; + --u-surface-disabled: #f0ecf2; + --u-surface-overlay: #ffffff; + + // Text. Primary is near-black with a plum cast so it sits with the pinks // rather than fighting them. - --u-text-primary: #10151f; // 16.8:1 on raised - --u-text-secondary: #414d61; // 8.9:1 on raised - --u-text-muted: #586475; // 6.0:1 on raised, 4.7:1 on inset + --u-text-primary: #241a2b; // 16.6:1 on raised + --u-text-secondary: #4a3f55; // 9.8:1 on raised + --u-text-muted: #645a6e; // 6.5:1 on raised, 4.9:1 on inset + --u-text-faint: #6f6579; // decorative only, never meaningful text --u-text-inverse: #ffffff; + --u-text-on-media: #ffffff; - --u-border: #d5dce6; - --u-border-strong: #b6c1d0; - --u-divider: #e4e9f0; + --u-border: #ded5e5; + --u-border-strong: #b7a9c6; + --u-divider: #ebe4f0; - // Brand. Ultramarine rather than the crypto-default violet: it reads as - // instrumentation, and it is far enough from every status hue to be used for - // structure (links, active nav, focus) without ever implying a state. - --u-brand: #2438b8; - --u-brand-hover: #1b2b93; + // Brand. + // + // --u-brand is the working pink: it is read as text on a page surface and it + // is painted as a fill under --u-brand-contrast, so it has to clear the body + // floor in both directions. #c40059 measures 6.01:1 either way. + // + // --u-brand-accent is the identity anchor, #ff0066 exactly. It is 3.85:1 on + // white, which is a border, a ring, a rule and a display-size headline, and + // is never a small label. + --u-brand: #c40059; + --u-brand-hover: #a80049; + --u-brand-active: #8c003c; --u-brand-contrast: #ffffff; - --u-brand-subtle: #e7ebfb; - --u-brand-border: #c3ccf3; - - // Focus. Deliberately not the brand colour so a focused brand-coloured - // control still shows a ring. - --u-focus-ring: #0a7ea4; + --u-brand-accent: #ff0066; + --u-brand-subtle: #fde9f1; + --u-brand-border: #f0bcd4; + + // The rest of the Universe palette. Magenta and fuchsia are the sweep the + // house gradient runs through; lavender is the secondary accent that carries + // everything the brand pink should not. + --u-magenta: #a3006b; + --u-fuchsia: #8b2fb5; + --u-lavender: #5b2fa6; + --u-lavender-subtle: #ece5fb; + --u-lavender-border: #cdbaf0; + + // Metal. --u-chrome is readable ink; --u-chrome-rim is the hairline that + // gives a control its polished edge and carries no text. + --u-chrome: #6b6280; + --u-chrome-rim: #c9cddf; + --u-pearl: #fff6fa; + --u-blush: #ffd8e7; + + // Focus. Deliberately not the brand colour, so a focused brand-coloured + // control still shows a ring. Lavender is the one Universe accent far enough + // from hot pink to never be mistaken for it, at 8.0:1 on the page. + --u-focus-ring: #5b2fa6; --u-focus-ring-offset: #ffffff; - // Evidence states. These four must never be confusable: the product's whole - // claim rests on the difference between proven and merely observed. + // Evidence states. These five must never be confusable with each other or + // with the brand: the product's whole claim rests on the difference between + // proven and merely observed, and none of it is pink. --u-state-proven: #0f6b3a; - --u-state-proven-surface: #e3f4ea; - --u-state-proven-border: #a9d9bf; + --u-state-proven-surface: #e2f4e9; + --u-state-proven-border: #a5d8bb; --u-state-partial: #8a5100; - --u-state-partial-surface: #fdf0dd; - --u-state-partial-border: #e6c491; + --u-state-partial-surface: #fbf0dc; + --u-state-partial-border: #e3c390; --u-state-pending: #15547f; --u-state-pending-surface: #e2eef7; - --u-state-pending-border: #a5c8e0; + --u-state-pending-border: #a2c7e0; --u-state-unavailable: #a12420; - --u-state-unavailable-surface: #fbe8e7; - --u-state-unavailable-border: #eab3b0; + --u-state-unavailable-surface: #fae8e7; + --u-state-unavailable-border: #e8b2af; - --u-state-neutral: #55617a; - --u-state-neutral-surface: #eaeef4; - --u-state-neutral-border: #c6cfdd; + --u-state-neutral: #5e5769; + --u-state-neutral-surface: #edeaf1; + --u-state-neutral-border: #c8c1d2; - // Protocol identity. Held apart from the state hues above, and only ever - // rendered beside a protocol name. Values are tuned for a light surface. - --u-protocol-ordinals: #9a4a06; + // Protocol identity. Held apart from the state hues above, from each other, + // and from the brand pink, and only ever rendered beside a protocol name. + // Every distance here is measured by check-palettes.mjs rather than judged. + // + // Three of these moved when that measurement was added. Stamps sat at + // #a3246b, close enough to the brand pink that a swatch could read as a + // product accent. Ordinals sat at #9a4a06, 11.1 dE from the amber that means + // partial evidence, so a protocol chip and a verdict chip were nearly the + // same colour; it moved to a redder rust and stays recognisably the orange + // the protocol is known by. Op data sat in the plum that the dark theme + // renders as a pink, which put it 23.1 dE from the brand. + --u-protocol-ordinals: #a34209; --u-protocol-runes: #0a6a7d; --u-protocol-alkanes: #5b3bb5; - --u-protocol-stamps: #a3246b; - --u-protocol-atomicals: #0d6560; - --u-protocol-op-data: #7a3572; - --u-protocol-fallback: #4a5568; - - // Chart series. Ordered for categorical use and checked so neighbouring - // series stay distinguishable for the common colour vision deficiencies. - --u-chart-1: #434ba3; - --u-chart-2: #a3436b; - --u-chart-3: #241763; - --u-chart-4: #a38343; - --u-chart-5: #63172a; - --u-chart-6: #4393a3; - --u-chart-7: #634417; - --u-chart-grid: #dde3ec; - --u-chart-axis: #586475; + --u-protocol-stamps: #721d72; + --u-protocol-atomicals: #1d7256; + --u-protocol-op-data: #2962a3; + --u-protocol-fallback: #5e5769; + + // Chart series. Ordered for categorical use, brand first because most charts + // here draw one series. Neighbours are held further apart than distant pairs + // because they are the ones read side by side, and the separation is measured + // through the three common colour vision deficiencies as well as normal + // vision by `check-palettes.mjs`. + --u-chart-1: #c40059; + --u-chart-2: #5b2fa6; + --u-chart-3: #8a5100; + --u-chart-4: #4393a3; + --u-chart-5: #3d0a2a; + --u-chart-6: #7f9b5a; + --u-chart-7: #a3006b; + --u-chart-grid: #e8e0ee; + --u-chart-axis: #645a6e; // Elevation. Soft and low: this is a data surface, not a floating card deck. - --u-shadow-color: rgba(16, 21, 31, 0.28); - --u-overlay-scrim: rgba(16, 21, 31, 0.55); - --u-shadow-sm: 0 1px 2px rgba(16, 21, 31, 0.07); - --u-shadow-md: 0 2px 8px rgba(16, 21, 31, 0.09); - --u-shadow-lg: 0 8px 24px rgba(16, 21, 31, 0.13); + // The shadow carries the plum cast of the page so a lifted card does not + // drop a grey shadow onto a pink ground. + --u-shadow-color: rgba(36, 26, 43, 0.28); + --u-overlay-scrim: rgba(26, 16, 32, 0.55); + --u-media-scrim: rgba(16, 7, 22, 0.62); + --u-shadow-sm: 0 1px 2px rgba(36, 26, 43, 0.07); + --u-shadow-md: 0 2px 8px rgba(36, 26, 43, 0.09); + --u-shadow-lg: 0 8px 24px rgba(36, 26, 43, 0.13); + + // Gloss and glow. The house finish, kept to primary controls and singleton + // surfaces. Neither ever sits behind text that has to be read. + --u-gloss: linear-gradient( + 180deg, + rgba(255, 255, 255, 0.24) 0%, + rgba(255, 255, 255, 0.06) 46%, + rgba(255, 255, 255, 0) 54% + ); + --u-glow-brand: 0 6px 20px rgba(255, 0, 102, 0.22); + --u-glow-lavender: 0 6px 18px rgba(91, 47, 166, 0.18); + + // The house sweep. Used for the mark, the primary control, and the live + // surfaces, never as a page wallpaper. + --u-gradient-brand: linear-gradient(135deg, #c40059 0%, #a3006b 48%, #8b2fb5 100%); + --u-gradient-chrome: linear-gradient( + 150deg, + #ffffff 0%, + #e7eaf4 28%, + #c9cddf 52%, + #f2f4fa 76%, + #b6bbd0 100% + ); + // Selective only. At most one per screen, always as a rule and never a fill. + --u-gradient-pride: linear-gradient( + 90deg, + #c40059 0%, + #b8531a 20%, + #8a6b00 40%, + #0f6b3a 60%, + #15547f 80%, + #5b2fa6 100% + ); // A wash used behind live regions so an update is noticeable without a flash. - --u-highlight-arrive: rgba(36, 56, 184, 0.09); + --u-highlight-arrive: rgba(255, 0, 102, 0.09); // Loading placeholders. Low contrast on purpose: a skeleton must read as // absent, never as content. - --u-skeleton: #dde3ec; - --u-skeleton-sheen: #eef2f7; + --u-skeleton: #e9e1ee; + --u-skeleton-sheen: #f5eff8; // Network identity. Mainnet takes the brand; the test networks are visibly // different from it and from each other so a testnet page can never be // mistaken for mainnet. - --u-network-mainnet: #2438b8; + --u-network-mainnet: #c40059; --u-network-testnet: #0a6a7d; --u-network-testnet4: #0d6560; - --u-network-signet: #a3246b; - --u-network-regtest: #55617a; + --u-network-signet: #7a3572; + --u-network-regtest: #5e5769; --u-network-liquid: #0f6b3a; --u-network-liquidtestnet: #5c6879; @@ -240,20 +345,18 @@ // Data ramps. // // Charts fill areas with a gradient that means a quantity, not a category. - // The stops the product inherited were the Material palette, chosen against a - // dark page: pale amber and light green, which land near 1.3:1 on a white - // card and read as nothing at all. Every stop below clears the graphical - // floor on both light surfaces, and the sequential scale still darkens - // monotonically so "more" still looks like more. - --u-ramp-scale-1: #4393a3; - --u-ramp-scale-2: #2f7f9e; - --u-ramp-scale-3: #2f5a9e; - --u-ramp-scale-4: #43349e; - --u-ramp-scale-5: #5b1f7a; - - --u-ramp-a-from: #434ba3; - --u-ramp-a-to: #241763; - --u-ramp-b-from: #a3436b; + // The sequential scale darkens monotonically so "more" still looks like more, + // and it runs through the house sweep rather than an arbitrary spectrum. + // Every stop clears the graphical floor on both light surfaces. + --u-ramp-scale-1: #e0568f; + --u-ramp-scale-2: #c40059; + --u-ramp-scale-3: #a3006b; + --u-ramp-scale-4: #7a2f8f; + --u-ramp-scale-5: #5b2fa6; + + --u-ramp-a-from: #c40059; + --u-ramp-a-to: #5b2fa6; + --u-ramp-b-from: #8a5100; --u-ramp-b-to: #63172a; --u-ramp-c-from: #4393a3; --u-ramp-c-to: #1c4f5c; @@ -272,7 +375,7 @@ --u-code-arithmetic: #0f6b3a; --u-code-crypto: #a12420; --u-code-locktime: #8a5100; - --u-code-reserved: #55617a; + --u-code-reserved: #5e5769; // The one moment the product celebrates: a block whose height reads as a // round number. The plate is bright, so its ink is near-black in every theme. @@ -280,7 +383,7 @@ --u-special-ink: #241a00; // A translucent foreground for de-emphasised text over unknown backdrops. - --u-text-translucent: rgba(16, 21, 31, 0.62); + --u-text-translucent: rgba(36, 26, 43, 0.62); --u-fade-start: rgba(255, 255, 255, 0); --u-fade-end: rgba(255, 255, 255, 1); } @@ -292,101 +395,154 @@ @mixin universe-dark-tokens { color-scheme: dark; - --u-surface-page: #12141f; - --u-surface-raised: #1a1e2d; - --u-surface-sunken: #0d0f18; - --u-surface-inset: #232838; - --u-surface-hover: #232839; - --u-surface-active: #2b3146; - - --u-text-primary: #f2f4f8; // 14.9:1 on raised - --u-text-secondary: #c0c8d8; // 8.7:1 on raised - --u-text-muted: #98a2b6; // 5.4:1 on raised - --u-text-inverse: #10151f; - - --u-border: #2e3549; - --u-border-strong: #414a63; - --u-divider: #262c3d; - - --u-brand: #8fa2ff; - --u-brand-hover: #adbaff; - --u-brand-contrast: #10151f; - --u-brand-subtle: #1e2340; - --u-brand-border: #384169; - - --u-focus-ring: #4fc3e8; - --u-focus-ring-offset: #1a1e2d; + // Plum-black rather than neutral black. It is the same shell the other + // Universe products are built on, and it is what makes hot pink read as + // lacquer instead of as neon on grey. + --u-surface-page: #0e0a13; + --u-surface-raised: #1c1526; + --u-surface-sunken: #0b0810; + --u-surface-inset: #241a30; + --u-surface-hover: #241a30; + --u-surface-active: #2e2140; + --u-surface-selected: #33193a; + --u-surface-disabled: #201a28; + --u-surface-overlay: #1c1526; + + --u-text-primary: #f6f2f8; // 16.0:1 on raised + --u-text-secondary: #cfc4d8; // 10.5:1 on raised + --u-text-muted: #a99cb5; // 6.8:1 on raised + --u-text-faint: #8d8199; + --u-text-inverse: #1c1526; + --u-text-on-media: #ffffff; + + --u-border: #372b47; + --u-border-strong: #4d3d61; + --u-divider: #2a2038; + + // On a plum shell the anchor pink is a fill, not a label: #ff0066 is 4.59:1 + // here, fine for a rule or a ring but not for the small text the product is + // made of. So the working pink lightens and the anchor keeps the borders. + --u-brand: #ff8ab8; + --u-brand-hover: #ffb3d1; + --u-brand-active: #ffd4e5; + --u-brand-contrast: #2a0a18; + --u-brand-accent: #ff2a85; + --u-brand-subtle: #2e1226; + --u-brand-border: #5c2340; + + --u-magenta: #ff6fd0; + --u-fuchsia: #d98cf5; + --u-lavender: #c4a7ff; + --u-lavender-subtle: #241a3a; + --u-lavender-border: #4a3a75; + + --u-chrome: #b9bed6; + --u-chrome-rim: #4a4560; + --u-pearl: #fff6fa; + --u-blush: #ffd8e7; + + --u-focus-ring: #c4a7ff; + --u-focus-ring-offset: #1c1526; --u-state-proven: #5fd39a; - --u-state-proven-surface: #123227; + --u-state-proven-surface: #0f2a1f; --u-state-proven-border: #2c6d51; --u-state-partial: #f0be62; - --u-state-partial-surface: #33260f; + --u-state-partial-surface: #2e2210; --u-state-partial-border: #6d5527; --u-state-pending: #7cc0f0; - --u-state-pending-surface: #12283a; + --u-state-pending-surface: #122435; --u-state-pending-border: #2b5878; --u-state-unavailable: #f2918a; - --u-state-unavailable-surface: #391b1a; + --u-state-unavailable-surface: #331a1c; --u-state-unavailable-border: #743935; - --u-state-neutral: #a3adc2; - --u-state-neutral-surface: #212735; - --u-state-neutral-border: #3c445a; + --u-state-neutral: #b3a8bf; + --u-state-neutral-surface: #251c30; + --u-state-neutral-border: #453a54; --u-protocol-ordinals: #f0a463; --u-protocol-runes: #6fcfe2; --u-protocol-alkanes: #b6a5f5; - --u-protocol-stamps: #f19ac4; - --u-protocol-atomicals: #6fd3c9; - --u-protocol-op-data: #d79ad0; - --u-protocol-fallback: #b3bccd; - - --u-chart-1: #7575f0; - --u-chart-2: #c0ba7c; - --u-chart-3: #7cc0c0; - --u-chart-4: #f0f075; - --u-chart-5: #c07c7c; - --u-chart-6: #987cc0; - --u-chart-7: #bddbbf; - --u-chart-grid: #2a3145; - --u-chart-axis: #98a2b6; + --u-protocol-stamps: #d97fd9; + --u-protocol-atomicals: #5fd9c4; + --u-protocol-op-data: #5795db; + --u-protocol-fallback: #b3a8bf; + + --u-chart-1: #ff8ab8; + --u-chart-2: #c4a7ff; + --u-chart-3: #f0be62; + --u-chart-4: #6f5fa8; + --u-chart-5: #c96a8a; + --u-chart-6: #6fcfe2; + --u-chart-7: #9e8a5f; + --u-chart-grid: #2e2440; + --u-chart-axis: #a99cb5; --u-shadow-color: rgba(0, 0, 0, 0.55); --u-overlay-scrim: rgba(0, 0, 0, 0.66); + --u-media-scrim: rgba(8, 4, 12, 0.7); --u-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4); --u-shadow-md: 0 2px 8px rgba(0, 0, 0, 0.45); --u-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.55); - --u-highlight-arrive: rgba(143, 162, 255, 0.14); - - --u-skeleton: #262c3d; - --u-skeleton-sheen: #333b52; - - --u-network-mainnet: #8fa2ff; + --u-gloss: linear-gradient( + 180deg, + rgba(255, 255, 255, 0.22) 0%, + rgba(255, 255, 255, 0.05) 46%, + rgba(255, 255, 255, 0) 54% + ); + --u-glow-brand: 0 8px 24px rgba(255, 0, 102, 0.34); + --u-glow-lavender: 0 8px 22px rgba(196, 167, 255, 0.26); + + --u-gradient-brand: linear-gradient(135deg, #ff0066 0%, #ff2a85 42%, #d946ef 100%); + --u-gradient-chrome: linear-gradient( + 150deg, + #f8f9ff 0%, + #dfe2ef 28%, + #9aa0bd 52%, + #eceef8 76%, + #b9bed6 100% + ); + --u-gradient-pride: linear-gradient( + 90deg, + #ff5c9e 0%, + #ffb46a 20%, + #ffe27a 40%, + #7ce8b5 60%, + #7dc8ff 80%, + #c4a5f9 100% + ); + + --u-highlight-arrive: rgba(255, 138, 184, 0.14); + + --u-skeleton: #2a2038; + --u-skeleton-sheen: #382b4a; + + --u-network-mainnet: #ff8ab8; --u-network-testnet: #6fcfe2; --u-network-testnet4: #6fd3c9; - --u-network-signet: #f19ac4; - --u-network-regtest: #a3adc2; + --u-network-signet: #d79ad0; + --u-network-regtest: #b3a8bf; --u-network-liquid: #5fd39a; --u-network-liquidtestnet: #98a2b6; --u-taproot: #f0be62; - --u-ramp-scale-1: #7cc0c0; - --u-ramp-scale-2: #7aa8d8; - --u-ramp-scale-3: #8f9ae8; - --u-ramp-scale-4: #b394ec; - --u-ramp-scale-5: #d68fd0; - - --u-ramp-a-from: #7575f0; - --u-ramp-a-to: #b394ec; - --u-ramp-b-from: #c07c7c; - --u-ramp-b-to: #f0a4a4; - --u-ramp-c-from: #7cc0c0; + --u-ramp-scale-1: #8a5a9e; + --u-ramp-scale-2: #b5479e; + --u-ramp-scale-3: #e0348f; + --u-ramp-scale-4: #ff6fa8; + --u-ramp-scale-5: #ffb3d1; + + --u-ramp-a-from: #ff8ab8; + --u-ramp-a-to: #c4a7ff; + --u-ramp-b-from: #f0be62; + --u-ramp-b-to: #f0a463; + --u-ramp-c-from: #6fcfe2; --u-ramp-c-to: #a8dede; --u-code-constant: #f0a463; @@ -397,14 +553,14 @@ --u-code-arithmetic: #5fd39a; --u-code-crypto: #f2918a; --u-code-locktime: #f0be62; - --u-code-reserved: #a3adc2; + --u-code-reserved: #b3a8bf; --u-special-plate: #e8b30d; --u-special-ink: #241a00; - --u-text-translucent: rgba(242, 244, 248, 0.66); - --u-fade-start: rgba(26, 30, 45, 0); - --u-fade-end: rgba(26, 30, 45, 1); + --u-text-translucent: rgba(246, 242, 248, 0.66); + --u-fade-start: rgba(28, 21, 38, 0); + --u-fade-end: rgba(28, 21, 38, 1); } // --------------------------------------------------------------------------- @@ -432,7 +588,7 @@ --primary: var(--u-brand); --secondary: var(--u-surface-inset); - --tertiary: var(--u-brand); + --tertiary: var(--u-lavender); --success: var(--u-state-proven); --info: var(--u-state-pending); --link-color: var(--u-brand); diff --git a/frontend/src/theme-contrast.scss b/frontend/src/theme-contrast.scss index dd8ff020e7d..dd740fc8172 100644 --- a/frontend/src/theme-contrast.scss +++ b/frontend/src/theme-contrast.scss @@ -3,8 +3,13 @@ // Dark with the contrast pushed well past the AA floor, for reading dense fee // and transaction tables in bright rooms or on low-quality panels. It inherits // the dark tokens and then raises only what needs raising: text against -// surface, borders, and the four evidence states, which are the colours a -// misread would actually cost something. +// surface, borders, the brand pink, and the five evidence states, which are the +// colours a misread would actually cost something. +// +// The brand does not leave when the contrast goes up. It lightens: the same +// hot pink family, taken to a tint that clears 7:1 on a near-black plum shell, +// so a person who needs this theme still gets the product's identity rather +// than a monochrome fallback. @use "styles/universe-tokens" as universe; @@ -12,41 +17,54 @@ @include universe.universe-invariant-tokens; @include universe.universe-dark-tokens; - // Push the surfaces apart and the text up. Text on raised reaches ~19:1. - --u-surface-page: #05070d; - --u-surface-raised: #0e1118; + // Push the surfaces apart and the text up. Text on raised reaches ~18:1. + --u-surface-page: #06040a; + --u-surface-raised: #120c18; --u-surface-sunken: #000000; - --u-surface-inset: #1a1f2b; - --u-surface-hover: #1c2230; - --u-surface-active: #252c3d; + --u-surface-inset: #1e1628; + --u-surface-hover: #221a2d; + --u-surface-active: #2c2239; + --u-surface-selected: #3a1f42; + --u-surface-overlay: #120c18; --u-text-primary: #ffffff; - --u-text-secondary: #dce3ee; - --u-text-muted: #b3bccd; + --u-text-secondary: #ece4f0; + --u-text-muted: #c6bcd0; + --u-text-faint: #c6bcd0; + + --u-border: #7d7291; + --u-border-strong: #9b8fae; + --u-divider: #3f3550; - --u-border: #707c98; - --u-border-strong: #6b7691; - --u-divider: #3a4258; + --u-brand: #ffb3d1; + --u-brand-hover: #ffd4e5; + --u-brand-active: #ffe8f1; + --u-brand-contrast: #2a0a18; + --u-brand-accent: #ff8ab8; + --u-brand-subtle: #2e1226; + --u-brand-border: #a8496e; - --u-brand: #a8b8ff; - --u-brand-hover: #c8d2ff; - --u-brand-subtle: #171d33; - --u-brand-border: #4d5885; + --u-magenta: #ff9ade; + --u-fuchsia: #e6aef7; + --u-lavender: #d9c4ff; + --u-lavender-border: #6f5c9e; + --u-chrome: #d4d8ea; + --u-chrome-rim: #6f6a86; - --u-focus-ring: #6fe0ff; - --u-focus-ring-offset: #0e1118; + --u-focus-ring: #d9c4ff; + --u-focus-ring-offset: #120c18; - // Evidence states, raised. These four carry the product's core claim, so they + // Evidence states, raised. These five carry the product's core claim, so they // get the most headroom. --u-state-proven: #7dea9f; --u-state-partial: #ffd27a; --u-state-pending: #9ed4ff; --u-state-unavailable: #ffa8a0; - --u-state-neutral: #c2cbdb; + --u-state-neutral: #cfc4d8; // This theme uses the brighter fee scale, on which white text falls under // the contrast floor. Near-black reads on every band of it. - --u-fee-label-ink: #05070d; + --u-fee-label-ink: #06040a; @include universe.universe-legacy-bridge; diff --git a/scripts/universe/brand/render-brand-assets.mjs b/scripts/universe/brand/render-brand-assets.mjs index cc0794984cf..a1a6e4bd826 100644 --- a/scripts/universe/brand/render-brand-assets.mjs +++ b/scripts/universe/brand/render-brand-assets.mjs @@ -28,10 +28,19 @@ const UNIVERSE = join(RESOURCES, 'universe'); // Taken from the light palette in styles/_universe-tokens.scss. Icons are // rendered once and served to every theme, so they carry the brand colour on an // opaque ground rather than trying to adapt. -const BRAND = '#2438b8'; -const INK = '#10151f'; -const PAPER = '#ffffff'; -const MUTED = '#5c6879'; +// +// The icon is inverted on purpose: a pearl mark on a hot-pink tile, rather than +// a pink glyph on white. Every explorer in this market ships a dark or white +// favicon, so a solid pink tile is the one that can be found in a strip of +// twenty tabs. Pearl on #c40059 measures 5.7:1, so the mark stays legible at +// 16px rather than relying on the tile colour alone. +const BRAND = '#c40059'; +const BRAND_ACCENT = '#ff0066'; +const MAGENTA = '#a3006b'; +const FUCHSIA = '#8b2fb5'; +const INK = '#241a2b'; +const PEARL = '#fff6fa'; +const MUTED = '#645a6e'; const mark = readFileSync(join(UNIVERSE, 'universe-mark.svg'), 'utf8') .replace(//g, '') @@ -61,11 +70,12 @@ function socialCard() { return ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/src/app/components/test-transactions/test-transactions.component.html b/frontend/src/app/components/test-transactions/test-transactions.component.html index 181db8b01e3..e8eebf92d30 100644 --- a/frontend/src/app/components/test-transactions/test-transactions.component.html +++ b/frontend/src/app/components/test-transactions/test-transactions.component.html @@ -1,7 +1,6 @@

Test Transactions

-
diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index fdf3c8b70ed..295fd2e85d9 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -780,6 +780,13 @@ h1, h2, h3 { overflow: visible; position: relative; + // The label is positioned out of flow, so without this it lands on whatever + // follows: in the blocks table that is the next row, and the figure was cut + // in half by it. The reserve is only made where a label actually exists. + &:has(.progress-text) { + margin-bottom: 1.1em; + } + .progress-bar { border-radius: inherit; } From 93e19b439e5ce389cd4bff40f7d85acebc56866a Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 11:51:23 +0000 Subject: [PATCH 22/68] theme: stop spending the informational blue on decoration Five rules used --info, which resolves to the evidence state that means "informational", as a generic accent. That is what the theme this product grew from did, because that theme was blue and the accent happened to match. Under a pink brand they were the only cool text left, and the API docs page in particular rendered every endpoint header in the colour that means a status everywhere else. An endpoint header and a collapsed disclosure are controls, so they take the brand. A subtitle and a code label are structure, so they take secondary text. A hover is interaction, so it takes the brand. The three genuine uses stay: the duplicate transaction alert, the informational badge, and the proof widget's active marker are all actually informational. --- .../blockchain-blocks/blockchain-blocks.component.scss | 2 +- frontend/src/app/docs/api-docs/api-docs.component.scss | 9 ++++++--- frontend/src/styles.scss | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss index 62314d4d604..529cae0fab2 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss @@ -33,7 +33,7 @@ margin-left: 4px; transition: color 0.15s ease-in-out; &:hover { - color: var(--info); + color: var(--u-brand); } } diff --git a/frontend/src/app/docs/api-docs/api-docs.component.scss b/frontend/src/app/docs/api-docs/api-docs.component.scss index ef0903496f5..66380c5c594 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.scss +++ b/frontend/src/app/docs/api-docs/api-docs.component.scss @@ -197,7 +197,10 @@ h3 { .endpoint-container .section-header { display: block; background-color: var(--secondary); - color: var(--info); + // A control you click, so it takes the brand. It used to take --info, which + // is the colour that means "informational status" everywhere else in this + // product, spent here on an accent because the theme it grew from was blue. + color: var(--u-brand); padding: 1rem 1.3rem 1rem 1.3rem; font-weight: bold; border-radius: 0.25rem; @@ -519,7 +522,7 @@ fa-icon { .subtitle { margin-bottom: 5px; - color: var(--info); + color: var(--u-text-secondary); } p:last-child { @@ -549,7 +552,7 @@ fa-icon { .code-label { font-size: 12px; - color: var(--info); + color: var(--u-text-secondary); margin-bottom: 5px; } diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 295fd2e85d9..72f4360ff2a 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -1312,7 +1312,7 @@ th { .collapsed { background-color: var(--secondary); - color: var(--info); + color: var(--u-brand); } } From 0a61ef2d9a526a05a96cb1aa7160208b7583cde0 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 11:53:40 +0000 Subject: [PATCH 23/68] protocols: bound the registry read, and judge the waiting state on what it says The new visual gate found this on its first real run: with every request held open, the protocols page sat on its skeleton indefinitely. The registry read had a catchError but no deadline, so a request that hangs rather than fails left the page waiting with nothing subscribed to clear it. It has a budget now, and the error state it reaches offers a retry. The gate's own rule was also wrong for the fixture named loading, which holds requests open on purpose to photograph the waiting state. Asking that to have finished asks the wrong question. It is judged on whether the wait is announced at all, which is what a screen reader needs and what a blank rectangle fails; the deadline itself is covered by the lifecycle tests, which run far longer than the harness waits. Co-Authored-By: Claude Opus 5 --- .../protocol-directory.component.html | 3 +- .../protocol-directory.component.spec.ts | 27 +- .../protocol-directory.component.ts | 18 +- .../graphs__address-empty__default__1440.png | Bin 0 -> 17545 bytes .../graphs__authority-down__default__1440.png | Bin 0 -> 17545 bytes ...graphs__authority-empty__default__1440.png | Bin 0 -> 17545 bytes .../graphs__catching-up__default__1440.png | Bin 0 -> 18898 bytes .../graphs__chain-down__default__1440.png | Bin 0 -> 17545 bytes .../graphs__loading__default__1440.png | Bin 0 -> 16857 bytes .../graphs__populated__default__1440.png | Bin 0 -> 17545 bytes .../mining__address-empty__default__1440.png | Bin 0 -> 48466 bytes .../mining__authority-down__default__1440.png | Bin 0 -> 48164 bytes ...mining__authority-empty__default__1440.png | Bin 0 -> 48466 bytes .../mining__catching-up__default__1440.png | Bin 0 -> 49093 bytes .../mining__chain-down__default__1440.png | Bin 0 -> 24682 bytes .../mining__loading__default__1440.png | Bin 0 -> 23151 bytes .../mining__populated__default__1440.png | Bin 0 -> 48466 bytes ...rotocols__address-empty__default__1440.png | Bin 0 -> 30164 bytes ...otocols__authority-down__default__1440.png | Bin 0 -> 13730 bytes ...tocols__authority-empty__default__1440.png | Bin 0 -> 15016 bytes .../protocols__catching-up__default__1440.png | Bin 0 -> 33453 bytes .../protocols__chain-down__default__1440.png | Bin 0 -> 30164 bytes .../protocols__loading__default__1440.png | Bin 0 -> 34703 bytes .../protocols__populated__default__1440.png | Bin 0 -> 30164 bytes .../artifacts-states/report-chromium.json | 800 ++++++++++++++++++ scripts/universe/visual-qa/capture.mjs | 13 + .../universe/visual-qa/progress-gate.test.mjs | 23 +- scripts/universe/visual-qa/progress-probe.mjs | 8 + 28 files changed, 882 insertions(+), 10 deletions(-) create mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__address-empty__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__authority-down__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__authority-empty__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__catching-up__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__chain-down__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__loading__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__populated__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/mining__address-empty__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/mining__authority-down__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/mining__authority-empty__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/mining__catching-up__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/mining__chain-down__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/mining__loading__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/mining__populated__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__address-empty__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__authority-down__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__authority-empty__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__catching-up__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__chain-down__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__loading__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__populated__default__1440.png create mode 100644 scripts/universe/visual-qa/artifacts-states/report-chromium.json diff --git a/frontend/src/app/universe/protocol-directory/protocol-directory.component.html b/frontend/src/app/universe/protocol-directory/protocol-directory.component.html index 924f1c715de..81deb9024b7 100644 --- a/frontend/src/app/universe/protocol-directory/protocol-directory.component.html +++ b/frontend/src/app/universe/protocol-directory/protocol-directory.component.html @@ -5,7 +5,8 @@

Protocols

diff --git a/frontend/src/app/universe/protocol-directory/protocol-directory.component.spec.ts b/frontend/src/app/universe/protocol-directory/protocol-directory.component.spec.ts index 5f4280535dc..7cd21d7e130 100644 --- a/frontend/src/app/universe/protocol-directory/protocol-directory.component.spec.ts +++ b/frontend/src/app/universe/protocol-directory/protocol-directory.component.spec.ts @@ -1,6 +1,6 @@ -import { describe, expect, it } from 'vitest'; -import { firstValueFrom, of, throwError } from 'rxjs'; -import { ProtocolDirectoryComponent } from '@app/universe/protocol-directory/protocol-directory.component'; +import { describe, expect, it, vi } from 'vitest'; +import { NEVER, firstValueFrom, of, throwError } from 'rxjs'; +import { ProtocolDirectoryComponent, type DirectoryViewModel } from '@app/universe/protocol-directory/protocol-directory.component'; import { UniverseApiService } from '@app/universe/universe-api.service'; import { SeoService } from '@app/services/seo.service'; import { @@ -209,6 +209,27 @@ describe('ProtocolDirectoryComponent view model', () => { expect(vm.sourcesByAuthority).toBeNull(); }); + it('reaches the error state when the registry never answers, rather than waiting', async () => { + // The visual gate caught this: the loading fixture hangs every request, and + // the page sat on its skeleton with nothing left to clear it. + vi.useFakeTimers(); + try { + const api = { + getProtocols$: () => NEVER, + getSources$: () => NEVER, + } as unknown as UniverseApiService; + const subject = new ProtocolDirectoryComponent(api, seo); + subject.ngOnInit(); + const seen: DirectoryViewModel[] = []; + const subscription = subject.vm$.subscribe((vm) => seen.push(vm)); + await vi.advanceTimersByTimeAsync(25_000); + subscription.unsubscribe(); + expect(seen.at(-1)?.error).toBe(true); + } finally { + vi.useRealTimers(); + } + }); + it('reports an error when the registry itself fails', async () => { const api = { getProtocols$: () => throwError(() => new Error('registry down')), diff --git a/frontend/src/app/universe/protocol-directory/protocol-directory.component.ts b/frontend/src/app/universe/protocol-directory/protocol-directory.component.ts index 5c0fc78b534..52f873a8deb 100644 --- a/frontend/src/app/universe/protocol-directory/protocol-directory.component.ts +++ b/frontend/src/app/universe/protocol-directory/protocol-directory.component.ts @@ -1,5 +1,5 @@ import { Component, ChangeDetectionStrategy, OnInit } from '@angular/core'; -import { BehaviorSubject, Observable, catchError, combineLatest, map, of, switchMap } from 'rxjs'; +import { BehaviorSubject, Observable, catchError, combineLatest, map, of, switchMap, timeout } from 'rxjs'; import { UniverseApiService } from '@app/universe/universe-api.service'; import { ExplorerProtocolDefinition, @@ -27,7 +27,7 @@ interface FamilyGroup { protocols: ExplorerProtocolDefinition[]; } -interface DirectoryViewModel { +export interface DirectoryViewModel { loading: boolean; error: boolean; registryVersion?: string; @@ -39,6 +39,9 @@ interface DirectoryViewModel { sourcesByAuthority?: Map | null; } +/** How long the page waits for the registry before saying it could not load. */ +const REQUEST_TIMEOUT_MS = 20_000; + // display order of protocol families; unknown families sort after the known // ones and before OTHER const FAMILY_ORDER = ['ORDINALS', 'RUNES', 'ALKANES', 'STAMPS', 'ATOMICALS', 'OP DATA', 'OTHER']; @@ -66,8 +69,15 @@ export class ProtocolDirectoryComponent implements OnInit { // a failing snapshot must not blank out the directory. this.vm$ = this.retry$.pipe( switchMap(() => combineLatest([ - this.universeApiService.getProtocols$(), - this.universeApiService.getSources$().pipe(catchError(() => of(null))), + // A request that hangs is the failure this page had left: the registry + // never arrived, nothing errored, and the skeleton stayed on screen + // with nothing subscribed to clear it. The budget turns that into the + // error state below, which says so and offers a retry. + this.universeApiService.getProtocols$().pipe(timeout({ first: REQUEST_TIMEOUT_MS })), + this.universeApiService.getSources$().pipe( + timeout({ first: REQUEST_TIMEOUT_MS }), + catchError(() => of(null)), + ), ])), ).pipe( map(([response, sources]: [ProtocolsResponse, SourcesResponse | null]): DirectoryViewModel => { diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__address-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__address-empty__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..95a1f3ea393a6aabceaf6932e30fd09928c88cd1 GIT binary patch literal 17545 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 literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__authority-down__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__authority-down__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..95a1f3ea393a6aabceaf6932e30fd09928c88cd1 GIT binary patch literal 17545 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 literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__authority-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__authority-empty__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..95a1f3ea393a6aabceaf6932e30fd09928c88cd1 GIT binary patch literal 17545 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 literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__catching-up__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__catching-up__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..adf8af7d30d3c9080d2bbedebe592e87e97f25f6 GIT binary patch literal 18898 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 W_KoG1?;Gc6=CO*_!=n3EZ~hO;hO74g literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__chain-down__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__chain-down__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..95a1f3ea393a6aabceaf6932e30fd09928c88cd1 GIT binary patch literal 17545 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 literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__loading__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__loading__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..1b352283388f90154d45c6ef2948cc1bc21a86fe GIT binary patch literal 16857 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 literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/mining__address-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/mining__address-empty__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..50cbb5ebab022c9517d9c9c53c694d9eeadd52ff GIT binary patch literal 48466 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%0DprBHZ62r>KP;GtO67GYw~X1 z`d4u@50DA4M3f*-3z=AY9Paa5B>ylWE)XRYDSxB&LsvT=t-oOXgpFc!(G#8-T}(5R zaq8h<7_00Np`Z)2;4M@il}JSaM3HC07``O-54u}-=H==zcU~;KOO%qwtPO>mqy5Nk ziM|-?V0gIYYwDz4Tx9cD+a0SEu2l>^Rrx#WhB4l9-a&mH8dqoi_+k0-VM7p5o>)C^F!K%~U@TwJIO<>^YhY zA417u^c~Zh>Xx2Iu^R%VSzhfyp&a7%{{U(sEO-C_ literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/mining__authority-down__default__1440.png b/scripts/universe/visual-qa/artifacts-states/mining__authority-down__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd6e1929512aa30575c5884691939edb3f94386 GIT binary patch literal 48164 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%0DprBHZ62r>KP;GtO67GYw~X1 z`d4u@50DA4M3f*-3z=AY9Paa5B>ylWE)XRYDSxB&LsvT=t-oOXgpFc!(G#8-T}(5R zaq8h<7_00Np`Z)2;4M@il}JSaM3HC07``O-54u}-=H==zcU~;KOO%qwtPO>mqy5Nk ziM|-?V0gIYYwDz4Tx9cD+a0SEu2l>^Rrx#WhB4l9-a&mH8dqoi_+k0-VM7p5o>)C^F!K%~U@TwJIO<>^YhY zA417u^c~Zh>Xx2Iu^R%VSzhfyp&a7%{{U(sEO-C_ literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/mining__catching-up__default__1440.png b/scripts/universe/visual-qa/artifacts-states/mining__catching-up__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..da96049a98a7cd5ecc1681423bb4048381a69f3c GIT binary patch literal 49093 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 Yox~~9&Z8s^cn4*ud+u!Z8Hb?%0ul}D9smFU literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/mining__loading__default__1440.png b/scripts/universe/visual-qa/artifacts-states/mining__loading__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..ed92494f1c87f2ef954f18e6b3cb63a014faee8f GIT binary patch literal 23151 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%0DprBHZ62r>KP;GtO67GYw~X1 z`d4u@50DA4M3f*-3z=AY9Paa5B>ylWE)XRYDSxB&LsvT=t-oOXgpFc!(G#8-T}(5R zaq8h<7_00Np`Z)2;4M@il}JSaM3HC07``O-54u}-=H==zcU~;KOO%qwtPO>mqy5Nk ziM|-?V0gIYYwDz4Tx9cD+a0SEu2l>^Rrx#WhB4l9-a&mH8dqoi_+k0-VM7p5o>)C^F!K%~U@TwJIO<>^YhY zA417u^c~Zh>Xx2Iu^R%VSzhfyp&a7%{{U(sEO-C_ literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__address-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__address-empty__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc90b905fb5fa941cd16b406bdac40bf6e8ebad GIT binary patch literal 30164 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 VlifaH7CgeDt*L)L|Cj3z{|}b-(R%;@ literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__loading__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__loading__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..2f7d5a37881ac8746d61313cc7af18b557fbc38c GIT binary patch literal 34703 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 VlifaH7CgeDt*L)L|Cj3z{|}b-(R%;@ literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/report-chromium.json b/scripts/universe/visual-qa/artifacts-states/report-chromium.json new file mode 100644 index 00000000000..f4a4f406f07 --- /dev/null +++ b/scripts/universe/visual-qa/artifacts-states/report-chromium.json @@ -0,0 +1,800 @@ +{ + "browser": "chromium", + "base": "http://127.0.0.1:8123", + "screenshots": 21, + "findings": [ + { + "route": "protocols", + "routeName": "Protocol directory", + "state": "populated", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 68 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [], + "statusPanels": [], + "textLength": 639, + "skeletonOnly": false + } + }, + { + "route": "graphs", + "routeName": "Graphs", + "state": "populated", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 86 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 42, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + }, + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 46, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [], + "textLength": 328, + "skeletonOnly": false + } + }, + { + "route": "mining", + "routeName": "Mining dashboard", + "state": "populated", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 165 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.chart-widget.ng-star-inserted", + "width": 492, + "height": 375, + "svgMarks": 6, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [ + "hashrate and difficulty The answer could not be read. Retry System status", + "hashrate and difficulty The answer could not be read. Retry System status" + ], + "textLength": 1091, + "skeletonOnly": false + } + }, + { + "route": "protocols", + "routeName": "Protocol directory", + "state": "authority-down", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 502 (Bad Gateway)" + ], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 43 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [], + "statusPanels": [], + "textLength": 216, + "skeletonOnly": false + } + }, + { + "route": "graphs", + "routeName": "Graphs", + "state": "authority-down", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 502 (Bad Gateway)" + ], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 86 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 42, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + }, + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 46, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [], + "textLength": 328, + "skeletonOnly": false + } + }, + { + "route": "mining", + "routeName": "Mining dashboard", + "state": "authority-down", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 502 (Bad Gateway)" + ], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 165 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.chart-widget.ng-star-inserted", + "width": 492, + "height": 375, + "svgMarks": 6, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [ + "hashrate and difficulty The answer could not be read. Retry System status", + "hashrate and difficulty The answer could not be read. Retry System status" + ], + "textLength": 1091, + "skeletonOnly": false + } + }, + { + "route": "protocols", + "routeName": "Protocol directory", + "state": "authority-empty", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 46 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [], + "statusPanels": [], + "textLength": 385, + "skeletonOnly": false + } + }, + { + "route": "graphs", + "routeName": "Graphs", + "state": "authority-empty", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 86 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 42, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + }, + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 46, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [], + "textLength": 328, + "skeletonOnly": false + } + }, + { + "route": "mining", + "routeName": "Mining dashboard", + "state": "authority-empty", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 165 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.chart-widget.ng-star-inserted", + "width": 492, + "height": 375, + "svgMarks": 6, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [ + "hashrate and difficulty The answer could not be read. Retry System status", + "hashrate and difficulty The answer could not be read. Retry System status" + ], + "textLength": 1091, + "skeletonOnly": false + } + }, + { + "route": "protocols", + "routeName": "Protocol directory", + "state": "chain-down", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 68 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [], + "statusPanels": [], + "textLength": 639, + "skeletonOnly": false + } + }, + { + "route": "graphs", + "routeName": "Graphs", + "state": "chain-down", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 86 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 42, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + }, + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 46, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [], + "textLength": 328, + "skeletonOnly": false + } + }, + { + "route": "mining", + "routeName": "Mining dashboard", + "state": "chain-down", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 502 (Bad Gateway)" + ], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 81 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 30, + "charts": [ + { + "selector": "div.chart-widget.ng-star-inserted", + "width": 492, + "height": 375, + "svgMarks": 6, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [ + "hashrate and difficulty The answer could not be read. Retry System status", + "hashrate and difficulty The answer could not be read. Retry System status" + ], + "textLength": 492, + "skeletonOnly": false + } + }, + { + "route": "protocols", + "routeName": "Protocol directory", + "state": "catching-up", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 76 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [], + "statusPanels": [], + "textLength": 639, + "skeletonOnly": false + } + }, + { + "route": "graphs", + "routeName": "Graphs", + "state": "catching-up", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 94 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 42, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + }, + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 46, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [], + "textLength": 328, + "skeletonOnly": false + } + }, + { + "route": "mining", + "routeName": "Mining dashboard", + "state": "catching-up", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 173 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.chart-widget.ng-star-inserted", + "width": 492, + "height": 375, + "svgMarks": 6, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [ + "hashrate and difficulty The answer could not be read. Retry System status", + "hashrate and difficulty The answer could not be read. Retry System status" + ], + "textLength": 1091, + "skeletonOnly": false + } + }, + { + "route": "protocols", + "routeName": "Protocol directory", + "state": "loading", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 41 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [ + "Loading protocol registry" + ], + "skeletons": 18, + "charts": [], + "statusPanels": [], + "textLength": 131, + "skeletonOnly": true + } + }, + { + "route": "graphs", + "routeName": "Graphs", + "state": "loading", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 56 + }, + "progress": { + "spinners": [ + "div.load-status-spinner", + "div.load-status-spinner" + ], + "loadingAnnouncements": [ + "Loading mempool history", + "Loading transaction throughput" + ], + "skeletons": 0, + "charts": [], + "statusPanels": [ + "Loading mempool history", + "Loading transaction throughput" + ], + "textLength": 191, + "skeletonOnly": false + } + }, + { + "route": "mining", + "routeName": "Mining dashboard", + "state": "loading", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 61 + }, + "progress": { + "spinners": [ + "div.load-status-spinner.ng-star-inserted", + "div.load-status-spinner.ng-star-inserted", + "div.load-status-spinner.ng-star-inserted", + "div.load-status-spinner.ng-star-inserted", + "div.load-status-spinner.ng-star-inserted" + ], + "loadingAnnouncements": [ + "Loading reward stats", + "Loading pool ranking", + "Loading pool ranking", + "Loading hashrate and difficulty", + "Loading hashrate and difficulty" + ], + "skeletons": 54, + "charts": [], + "statusPanels": [ + "Loading reward stats", + "Loading pool ranking", + "Loading pool ranking", + "Loading hashrate and difficulty", + "Loading hashrate and difficulty" + ], + "textLength": 314, + "skeletonOnly": true + } + }, + { + "route": "protocols", + "routeName": "Protocol directory", + "state": "address-empty", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 68 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [], + "statusPanels": [], + "textLength": 639, + "skeletonOnly": false + } + }, + { + "route": "graphs", + "routeName": "Graphs", + "state": "address-empty", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 86 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 42, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + }, + { + "selector": "div.echarts", + "width": 1370, + "height": 600, + "svgMarks": 46, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [], + "textLength": 328, + "skeletonOnly": false + } + }, + { + "route": "mining", + "routeName": "Mining dashboard", + "state": "address-empty", + "theme": "default", + "viewport": "1440", + "overflowBy": 0, + "consoleErrors": [], + "brokenImages": [], + "violations": [], + "contrast": { + "text": [], + "painted": [], + "canvas": [], + "sampled": 165 + }, + "progress": { + "spinners": [], + "loadingAnnouncements": [], + "skeletons": 0, + "charts": [ + { + "selector": "div.chart-widget.ng-star-inserted", + "width": 492, + "height": 375, + "svgMarks": 6, + "canvasCount": 0, + "canvasPixels": 0, + "hasTitleOnly": false, + "drewNothing": false + } + ], + "statusPanels": [ + "hashrate and difficulty The answer could not be read. Retry System status", + "hashrate and difficulty The answer could not be read. Retry System status" + ], + "textLength": 1091, + "skeletonOnly": false + } + } + ] +} \ No newline at end of file diff --git a/scripts/universe/visual-qa/capture.mjs b/scripts/universe/visual-qa/capture.mjs index 717464d3e40..389be78c225 100644 --- a/scripts/universe/visual-qa/capture.mjs +++ b/scripts/universe/visual-qa/capture.mjs @@ -406,6 +406,19 @@ export function progressFailures(report) { failures.push(`${where}: chart ${chart.selector} (${chart.width}x${chart.height}) drew nothing`); } } + } else if (f.state === 'loading') { + // This fixture holds every request open on purpose, to photograph the + // waiting state. Asking it to have finished would be asking the wrong + // question; what matters is that the wait is announced rather than being + // a blank rectangle. The deadline itself is covered by the unit tests + // around the request lifecycle, which run far longer than this harness + // waits. + const announced = progress.spinners?.length + || progress.statusPanels?.length + || progress.loadingAnnouncements?.length; + if (!announced) { + failures.push(`${where}: waiting with nothing on screen that says so`); + } } else { // Every failure fixture must reach a state that says something. A page // that is still spinning has not answered the user at all. diff --git a/scripts/universe/visual-qa/progress-gate.test.mjs b/scripts/universe/visual-qa/progress-gate.test.mjs index 86f82dacac6..a1d619737ff 100644 --- a/scripts/universe/visual-qa/progress-gate.test.mjs +++ b/scripts/universe/visual-qa/progress-gate.test.mjs @@ -14,14 +14,14 @@ const at = (overrides) => ({ findings: [{ route: 'graphs', routeName: 'Graphs', state: 'populated', theme: 'default', viewport: '1440', - progress: { spinners: [], skeletons: 0, charts: [], statusPanels: [], textLength: 900, skeletonOnly: false }, + progress: { spinners: [], skeletons: 0, charts: [], statusPanels: [], loadingAnnouncements: [], textLength: 900, skeletonOnly: false }, ...overrides, }], }); const withProgress = (state, progress) => at({ state, - progress: { spinners: [], skeletons: 0, charts: [], statusPanels: [], textLength: 900, skeletonOnly: false, ...progress }, + progress: { spinners: [], skeletons: 0, charts: [], statusPanels: [], loadingAnnouncements: [], textLength: 900, skeletonOnly: false, ...progress }, }); test('a populated page that finished raises nothing', () => { @@ -76,3 +76,22 @@ test('an empty range on a failure state is not treated as unfinished', () => { test('a finding with no probe at all is skipped rather than guessed at', () => { assert.deepEqual(progressFailures({ findings: [{ route: 'graphs', state: 'populated' }] }), []); }); + +test('the loading fixture is judged on whether the wait is announced, not on having finished', () => { + // This fixture holds every request open on purpose. Asking it to have + // finished would be asking the wrong question. + assert.deepEqual( + progressFailures(withProgress('loading', { skeletons: 6, loadingAnnouncements: ['Loading protocol registry'] })), + [], + ); + assert.deepEqual( + progressFailures(withProgress('loading', { spinners: ['div.load-status-spinner'] })), + [], + ); +}); + +test('a page that waits with nothing on screen saying so fails the run', () => { + const failures = progressFailures(withProgress('loading', { skeletons: 6, loadingAnnouncements: [] })); + assert.equal(failures.length, 1); + assert.match(failures[0], /nothing on screen that says so/); +}); diff --git a/scripts/universe/visual-qa/progress-probe.mjs b/scripts/universe/visual-qa/progress-probe.mjs index 90d633836f8..2b112245b3e 100644 --- a/scripts/universe/visual-qa/progress-probe.mjs +++ b/scripts/universe/visual-qa/progress-probe.mjs @@ -63,8 +63,16 @@ export function progressProbe() { .filter(visible) .map((panel) => panel.innerText.replace(/\s+/g, ' ').trim().slice(0, 160)); + // What a page says while it is still working. A skeleton on its own says + // nothing to a screen reader, so the announcement counts separately from the + // placeholders themselves. + const loadingAnnouncements = [...document.querySelectorAll('.sr-only, [role="status"], [aria-live]')] + .map((element) => (element.textContent || '').replace(/\s+/g, ' ').trim()) + .filter((text) => /load|wait|fetch/i.test(text)); + return { spinners: spinners.map(selectorFor), + loadingAnnouncements, skeletons: skeletons.length, charts, statusPanels, From 920a347c5ad2b382e33d035d73eecc2fd59d3ed5 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 11:55:47 +0000 Subject: [PATCH 24/68] qa: keep harness output out of the repository A run pointed at a second output directory committed 21 screenshots and its report, because only the default directory was ignored. Ignore any output directory the harness is pointed at. Co-Authored-By: Claude Opus 5 --- .gitignore | 2 + .../graphs__address-empty__default__1440.png | Bin 17545 -> 0 bytes .../graphs__authority-down__default__1440.png | Bin 17545 -> 0 bytes ...graphs__authority-empty__default__1440.png | Bin 17545 -> 0 bytes .../graphs__catching-up__default__1440.png | Bin 18898 -> 0 bytes .../graphs__chain-down__default__1440.png | Bin 17545 -> 0 bytes .../graphs__loading__default__1440.png | Bin 16857 -> 0 bytes .../graphs__populated__default__1440.png | Bin 17545 -> 0 bytes .../mining__address-empty__default__1440.png | Bin 48466 -> 0 bytes .../mining__authority-down__default__1440.png | Bin 48164 -> 0 bytes ...mining__authority-empty__default__1440.png | Bin 48466 -> 0 bytes .../mining__catching-up__default__1440.png | Bin 49093 -> 0 bytes .../mining__chain-down__default__1440.png | Bin 24682 -> 0 bytes .../mining__loading__default__1440.png | Bin 23151 -> 0 bytes .../mining__populated__default__1440.png | Bin 48466 -> 0 bytes ...rotocols__address-empty__default__1440.png | Bin 30164 -> 0 bytes ...otocols__authority-down__default__1440.png | Bin 13730 -> 0 bytes ...tocols__authority-empty__default__1440.png | Bin 15016 -> 0 bytes .../protocols__catching-up__default__1440.png | Bin 33453 -> 0 bytes .../protocols__chain-down__default__1440.png | Bin 30164 -> 0 bytes .../protocols__loading__default__1440.png | Bin 34703 -> 0 bytes .../protocols__populated__default__1440.png | Bin 30164 -> 0 bytes .../artifacts-states/report-chromium.json | 800 ------------------ 23 files changed, 2 insertions(+), 800 deletions(-) delete mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__address-empty__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__authority-down__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__authority-empty__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__catching-up__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__chain-down__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__loading__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/graphs__populated__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/mining__address-empty__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/mining__authority-down__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/mining__authority-empty__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/mining__catching-up__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/mining__chain-down__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/mining__loading__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/mining__populated__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__address-empty__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__authority-down__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__authority-empty__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__catching-up__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__chain-down__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__loading__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/protocols__populated__default__1440.png delete mode 100644 scripts/universe/visual-qa/artifacts-states/report-chromium.json diff --git a/.gitignore b/.gitignore index f154cf0ef3a..1898f494d8e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,6 @@ node_modules/ # Visual QA working output. Curated review sets are committed under docs/design. scripts/universe/visual-qa/artifacts/ +# Any output directory the harness is pointed at, not just the default one. +scripts/universe/visual-qa/artifacts-*/ scripts/universe/visual-qa/node_modules/ diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__address-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__address-empty__default__1440.png deleted file mode 100644 index 95a1f3ea393a6aabceaf6932e30fd09928c88cd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17545 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 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__authority-down__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__authority-down__default__1440.png deleted file mode 100644 index 95a1f3ea393a6aabceaf6932e30fd09928c88cd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17545 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 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__authority-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__authority-empty__default__1440.png deleted file mode 100644 index 95a1f3ea393a6aabceaf6932e30fd09928c88cd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17545 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 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__catching-up__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__catching-up__default__1440.png deleted file mode 100644 index adf8af7d30d3c9080d2bbedebe592e87e97f25f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18898 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 W_KoG1?;Gc6=CO*_!=n3EZ~hO;hO74g diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__chain-down__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__chain-down__default__1440.png deleted file mode 100644 index 95a1f3ea393a6aabceaf6932e30fd09928c88cd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17545 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 diff --git a/scripts/universe/visual-qa/artifacts-states/graphs__loading__default__1440.png b/scripts/universe/visual-qa/artifacts-states/graphs__loading__default__1440.png deleted file mode 100644 index 1b352283388f90154d45c6ef2948cc1bc21a86fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16857 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 diff --git a/scripts/universe/visual-qa/artifacts-states/mining__address-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/mining__address-empty__default__1440.png deleted file mode 100644 index 50cbb5ebab022c9517d9c9c53c694d9eeadd52ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48466 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%0DprBHZ62r>KP;GtO67GYw~X1 z`d4u@50DA4M3f*-3z=AY9Paa5B>ylWE)XRYDSxB&LsvT=t-oOXgpFc!(G#8-T}(5R zaq8h<7_00Np`Z)2;4M@il}JSaM3HC07``O-54u}-=H==zcU~;KOO%qwtPO>mqy5Nk ziM|-?V0gIYYwDz4Tx9cD+a0SEu2l>^Rrx#WhB4l9-a&mH8dqoi_+k0-VM7p5o>)C^F!K%~U@TwJIO<>^YhY zA417u^c~Zh>Xx2Iu^R%VSzhfyp&a7%{{U(sEO-C_ diff --git a/scripts/universe/visual-qa/artifacts-states/mining__authority-down__default__1440.png b/scripts/universe/visual-qa/artifacts-states/mining__authority-down__default__1440.png deleted file mode 100644 index 0fd6e1929512aa30575c5884691939edb3f94386..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48164 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%0DprBHZ62r>KP;GtO67GYw~X1 z`d4u@50DA4M3f*-3z=AY9Paa5B>ylWE)XRYDSxB&LsvT=t-oOXgpFc!(G#8-T}(5R zaq8h<7_00Np`Z)2;4M@il}JSaM3HC07``O-54u}-=H==zcU~;KOO%qwtPO>mqy5Nk ziM|-?V0gIYYwDz4Tx9cD+a0SEu2l>^Rrx#WhB4l9-a&mH8dqoi_+k0-VM7p5o>)C^F!K%~U@TwJIO<>^YhY zA417u^c~Zh>Xx2Iu^R%VSzhfyp&a7%{{U(sEO-C_ diff --git a/scripts/universe/visual-qa/artifacts-states/mining__catching-up__default__1440.png b/scripts/universe/visual-qa/artifacts-states/mining__catching-up__default__1440.png deleted file mode 100644 index da96049a98a7cd5ecc1681423bb4048381a69f3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49093 zcmd42XH-;8w=UX7Py_@8lqjN-LCLuh36hm4S#s_s=cGs$5Xm{`oHK~zoFq2gR5pn_l!WqQ8~ev_Zo20Tf&Mn%-ibY2dU%6G zG)iCBaT6IEmz!HulvlL9z8#x%dEA;jm9(+3k%T@ZKabx?QkJ5>0n7sg8Zu_QeO(bA z44b>IfEp#f-ny=#DDUB2SB6|)@LX4fcmCC=S_&lSh@l{ZYSzzJ!MG8P9*>$`9)Mzq z=-b_Q$`@{E6wg>=lr^BWz{m3m2z#yA~%N5nSLjwW{`@OeH z>0~)S)vCULq=P`8FDzUyBkOnS01<(-s9U}?m32bS<|Me2?T?C!8(iSNxbeW8%S+70 z0<|bh#}I>4>#@zv-Yfy%7f&`OpeIAwMd(xIO)kjRcKBpZq|Jl`o+i@cHMbMFv&TJMbLdZy0~e9q}g?IcB|~ToYH9)V>Q4I`pmVh-Mm+@bGdR()wDkx zT6fvR>iLbuZGW+fPCHb8eJR=P^b#|M+~o3Cn{>%nX1yHsE8tz*y9x4Y|6QDu5)IMh zM}Ii+rh+FJayPm4uwN|UJHDvD0g6f8vZQlm??L=5e+U9G5fhTHWx^m-S}uzP<(}u`%~L*q?t(tc89*hc$P|x`GIp-|y-Th$^PR$F zhIv`A10o6XxsBzrzI~W(ZmH>fSl5_*C=9H3rV9~MR!u8ti75G=tWzo1_l0-r0SH7| z0qmdw3q`qZ>nmR<2(%(~)M3ElqSY|27OhGY924FT0;RnDK6kzG|0O6iz4hltdOch& z?vTLUkJ0ZFv1U9sjfECX@jXulu3!!V^*tpdU*K+5!xWY`X{aN!;wL;8<7ZvqH;R8M z1RB7E)(EDMh1^=bILESJ9|ihzCeA|OBb++%LF28MbM_=wRg_r9nvy__Z2y9^kwm_A7`S$rctonT}y zIIRS-ieXpOK0IDE40zx!C*=??Yy5J`j!PAP6Ijs;o)xjBGXj3hkC*^#WsQMW4wUX{ zE|t*R%YdYq{B%QCeV0FeYammKl$U(Yshtp>^0J==nh$KrfoWR>O3kb`+rUprE>+}p zPJ@`oi*=lraaCuJo48}{!vsE;zneu(zQ;k&{1_^ZIIGgPM*NN<3WdoR{qb_jD1=CPCp{r-*rcf+#sm?s-|i^mZ|ZnPBP5W ziouopl|r+fz6fDwfao++V&q5x-R6%Gwb3nxb-}2njfLljTr^6B70?@hQY5TI3CXhn z`}C}Zz-~}5ULmir*;wC{0=oSx{wH>Su&SIIL#fZ56~R{%TQ=Dt)ib$^mgA2%Hr>C4 zphYZwt7<iAsOL$Z6uqEH_A|Ra4k5Q6un>?3kL8>D@Zwuu-v=?o-8Q z&sjFTYt2#fl0Lqa{D}B-k=t&%>IRjcG$77!`w3%D zhtr+yF1}Ujn?YSqKT@Gbv~L$F5Bsmfil@IyZaZb)=`2DzzBecdZ8U@0#Su2YdcSV; z`s=N=n2X#9rm#Ke?{F10O=3S zHi!+`D!K-Jg(c;#*Qx*}meuLvV5`}9=kUSsx8|8+&XvK4N!!NA#NTaEG{N6C{1{j% zF>_T;Pw}A6IZe!ViT=|tE_`Ms_YZRC5u=O>b$mAN;U6lyqWF13MzEf&|7cSS&lcZC{{h#Ngnm{uk{j&v9_an*-dO3>^&|VVHgKsQl@w@#gxffIXvelu6ux z^_nily7b=N`=C#+zt63GeM+VK6Wen2u}CmUwdjlQ!~jn?VCpq*ST3ew2GEXpZ)KM{ zQgbiSJBDrXA^7rTDcjJ`*iebJ2`_BGjlACj_LKUrcDDslEgB7|P^z;;TaQP%<*m1N z4$f8u-g7X#9G=T~@m~JgR7dd=lE0yC+>}haHxNMmiYiRVE{&(4wTaCHUGshD`GbY) zRwz=Er(&$uVIM)i1U65eryuTKPx!wlFQ}gp=>f|5Dl?59SG)pZ0F{}7g(q=AKXvp( zD*WRIMZex^w423zcYt593ANeF;Qy&@QRs}+e{78MDpcJFXiP32#em&jdIQwR_PMKc z&$X9zpJ>p13UxZ9sYaMZ#^nAdcTQ1F<<8-@va_?hCIP=(#!AA>&enx-V1YjSmQ|;2 z_0#<`h?WW9s==Pa-Z~fA__4YnG#d6*H>QlRK_KEFC8>KUenmA#=f%(_Rr$;RmKJpz za63%vmP>%ogb+PC=V)9i^dDt#vl+Z2817D}QLC_x?kYs=Zb^({cEbFke#D zS`1tb2APvmlt1d%9>Y3U)*7(-vfW^$HhK-#;et>H9!I}E^qMAJ_Ks{~A zRa4Z<=0~pdSW)Xj)*GIhcHM(z>DFILEIj$w{2wte|Aqkq_!aS_<>T9J2SEiq)yTipjmq@q1w4SMvuS^bK}`NwU%7x-?J?`WAL0}vkT=6*6y)O&&Iu> zAg{=NecpkiB^q^$@JgV>_d=A~w|t+3&=I%dmmNj7F7ZsK`&q=0ch;`XrghpGyi`Mb zll#$NZt_b1VqVpH9qO#_aAM0gioU?2Cdsrm2=#&LP@ z4r!zTFCLU-QQ6Zo$xCb}w)c#V(KXLVev*mcY4^TC`M_CEXIo9@?JQv|fQfweebN%v zHUKg3ToLX{&@1dMuU|Phrv+n(1~#ApLe%ZGFR;kbU*q(g`f3v#+uLq1sS&<#z1XiP z?ANsUEi_8&y6m?9h*CN_aQBWV(h(O}n@j)!`SRAzufr+2_VD~5tdDRvva_@3rlO7l zym3SoQ{|Pfs^D(+AgSNIMO7=pVKC7s2hA7|SUXV%vClAOg;BT}c?wdry*Uu7X3a6} zz+L|WRXats`n%LAPL+A=UW5U<0Wx_=!;`m1dAYVFZmqIj-7=8vASg$fiJA;H7BH-5 z>ZC4^wlR1_-<+TJ=n)va8Y+$BT9|t)`wmRHpW1LQkGyzlClh_FqV7Iz6vT>Phd&@0 zNnj*ars&i?-bJ}{(o#S?qH1zB6eGC-XYKWnkbJq1WDbpk7%_{SOqM0t@5)wF({9x? ze5yliXk@QT%;Ahu z2fu&n`(sRU>t#KdtVp2RyP4EqMdKcPdy!>&q^f!q{oa;u)Jskjw9`ex+3DpgiY#8O_6SF3p`h;9 z@scb5w}N~kgb-wVm(&cNIn^RNSMroFheX3#tL9oL^J&w z67b=pjF+sBie((BMo2Wjw6(ys$~MFO{@@ z)Mhj7AsR4qS3Y7H1!d&%8A$zjhE5Lj(0wbNCubgWv~<~vBw?GjTS9ZZc`)&Cu({rq`ZMc4r&gIJif z#kdMaIUmDfri@hGy0dxZ5Z->J@u3{sSz=Alr-nMDqXJ#3xSC{KJ?4LA?(LgSTX=KV z@2yPi5cWX)=W`juYQ-#dNLyxDW^V?kG~0Sqm^Dis4(-U zFt=)E&}OwgC3l^G9XEJq5dI~}cVB5FtshD_Oq|hq9q*q6P$@U6Hh|eLAA#C?){_;3 zg4Q|`_lHO+j>-ap{t)*-IQAJ!;)J9#8xIuiFe?h_g)2N|&|zdo{JG^RD!Sp20e(XS zlcYGwl{iITn3ddqC|={_oNN;3{(&@4g(;L{t%3>dhIos{k#>>Y84IglPqUcqb;#?Y zH1UYdA8A^3Uwo+SkbP%T8IVNam5=$tYY!GPcp^YZGH`K!*BjGITgl)pq1vA@dM=t?QL zDC1ieO(rGwoOpe!xa{7wzgE<{Ey1~GO`e$^7PdWe0CgUlP0r57@H?~)nD^~gs}stP zeo~Tq-r6!+br+tQmd37b*^)^{!SZUUIbUedNDj{`BHSgKg}<6IkwpaadN+Gs05$vF$4Y# z1o}YmuOHnXVf1);^$Y|;%M{hyx*rWTntQtJ^hZN#%nKvFumAP#KrUA{ziQH>oWfz& z0@Hafaqg2R(vb^cy{N*!Ws_V;_2RE~=+Ea!?!x-ho=A;tr({1tRfG#t>=@y;cN97; z{Z|uI|Flj*`4pbKru883E0wJ**K-1;_?1x;Qxxm{n|gA1fSM^!nQAJA+X-R zz=t_kHy)`S@DBe#I=VMiyCDY$|CE;n3@ISgEOYAW?s5-87&zd0rvcYXVdCcF-YdUE zjIosNIF#JT%-^&KkCU-VIPmf8gA~_qC2X-u+xowXY1I#j3TCPQ3b`^OAe2b@y%5%< zh6zTzo>xtm?VdB)skbErZ9Rk$b1VG^G%x?!PYVABVI}fl>$@&(o6%e`%0r_^bUzms z5PV0PJ1S#jd&8f;zQdoL++>}Nf@{~?$vLRXJN`=OASB(^O(@*Cu|8;Ey7fHW1QH z6}$Y0o_QzTh>%=OL4Or~G!3lD0VzMwy=^o)HM<&hM1VA3^5R-1jXlzJ_AD;o?Ozd# zlC>xqqdXA5N@|0m0>nKYh~cBKISs{w{%8mkRqQGBC#2~WHR%d$5Q4g_L9l-U3CPZ&Cy$4rnH$N>-U%{ZOQclZIwx%w7jXA>0rbgQJry`T$EUU zAn3n{(K(ZNV}4|clSt7K&n_e-ALkF%<|d=!+q+I#50M};yd*hzp89=oE|%s0s&6$M z4D9e=++c7V>`cgLToZS}sz{g@x)9I3N``;+%Q5c;O7JjsWLYz3Po%8tCQ}@XOgpt_ z>QmgOhTA$AP3Im*Hfme{kkr-OOCK$VWjCUBzH$2NC!g|2XEG$J3`G|`ZaNS}G0`4= z&@?OZ72}DYm@3O`NPL=0ZuYkC-0;KIkEGCNMq}f?#AyJ#Kkxa8lZkXCk)O$1FNX3d ze{Fp*TeDqeYuC+wIiXPwGiTv-Z4ZppbLx;%(XI04$vR#CVEcZD34+(Y$Qu%&tb`7p zBt>>kn0v&&{F5Tsi+NNy8sunXBHfUE@R$b3qXU8Vt0mmo%V;d*5p87DM?eYX*VsQu zZN@X&Js5X97QBg_A10{Vb@!?%lP$N_(X3+d-0NrrD63`a+FE(ha~`ml{)*tKzZU9i zTtf1gM*48lCDE%cpnnC}V^3RJd_=Ad#xG6X|Hq-4OvCP2=L=%FSqqwJ^V;SzA$kYt zoOCn0Ih)OcEJ~;g|Ka#2Q~D$xdUY4Uf@%c4`9R^*CJx!l2vdwC_h9j$ZPSi@tux|y zhMw#(Tzy~%d!@9KKea`b0krmu;mvUZ$q>8Hq1au|>^fs*tCp$aC}Xs^;x|_frF$lHak5C} z0Q8~DCwqOn9oa|4Qr5{vo@+jL9q(cejgw|=7mYA?l`w}Txsh@QyPM1~CBIIxSieCc zbutY$sC@P5x+SP_-21lQ+5s&k6XOwq5|?F&dXOLA9-1D>zpO}U#Jx{#-_n-89<2W2 z{@zj0G6Eer?MJY&F})}CoqtcNQyR!1n}~u5$?;Zi{iro>x?>~6K-4Ry`#Gu6f7gAo zEPlT#ebrYeww;6tV!1}(gHEl;ax8KrYrv-+!Iz^!L(u8i%J1Do!w$0wUXFb3S$XO4 zFf@ag^i-i53H4PxLJTQ9KU*T4H~xYRUfjCVueqb3w?R7~^TOj&Ck`)2pk7QQdfEr! zJ@|eivPnI#0-hVj;|t_9D^Q~5JDIst69`iTdAr^8=C=s$g|5Ja+5tudH}(-#CG>4; z%F5$hYEqZ)zmJnPExd9roED1(p3jH-Y8`wp!}oY@Des|+vK8ymmvJVLcFrxRc*$CD zLd}a%H+5d0X+s8p#X;|@rBEOCoWvg^)ZQg`1xfp8JJ1vlr$+j6)f|ln{(>pzoWBnZ zu!3e(FBYzFtex8tc|HyU`EdP$jMgKDxZ=^7xO_Oi8-qkpyq9)O@6u3>6ZJ|N6k)q> z7%QUQ*DRJEjaz&hZL~B_lqx4%=dV@S8hL*i?Vz;|QA9IL&*7x(3gW~Cs^%oN9l=~p z^B$+8j&ylPF@)xGR?fXnY|uIy$Znmx zpnsQ{t2yfsGd8NcYN~g|QA9B35mz0H=q&oT=hP`%3Is+#ij`(HsFx4E^;0&njNrxE z^`i*3Qn_dt`=u6)d)mgF)Z4-7^0gbN%&eI`kzuCbebn&xeD|hzNaKEvO{pobk^ObC zq&w^9Pd%$tm?!F-P4g-?Naatbp&`D`LGsYNFuC_S4Z+#+NMymD2Yf0!=skv_VV{Tj zMbn?hj55t;JMa;-oGwgPYC?RXe=z-4$!GMNuQYpNyFR1tvVTe=3T53yjlW6ktD0pe zjdYkR(YcGVKRz{3JB%Zp(p0qUDMu|v-!;)xbp2zIT)qb{=-}kx`w_!$j(Pg0pS>cN z3k0AYWGhlu8_$lKzlM#7j1_ylLR=KDMRJfe$4PX_MWU zn_7bZTL)K~7&Px)H{&+|ckMXQOE9;6FPPovE#XXWKC;M4$5M+#%nad=f32nE}+@&JZn zCC=%BHzc6vDgi=t9;G@Nqpc1{>Pn^!+Rvx7*Po6n*E2HH{ifA@C6pH7AVr2B>A&_4 zNMYkd3EhX{$R2)oWKOlDQ=wyajAOe+*QX^o@Ai@Pesjc|Ws>Gps_X}rgAs)K>ZB=B z@=sZJ!nr9o7Zy^@QW5#^e9kmA88aR=LV}ArW%-EhKExgAWJOMGQ^h1hxh+!X8x{=O z!Qjw}Bkec_!5jJ8v;m=v=l#~N5`SC}Mx0oQ$S0$Sd?@7%T)%Pdi#%?kmJeM)xkp|! zQK^mdSEItkGcHgVhjp@G?40V3E``c!1GL$pcCM7FlID_+>CRiwLu%;BMYDiOHJG5c z0|!R_0dBVV3BuP@)2bH(Tm39Oyu_LPQUK$Xw4iJ)L_h+9*Q}RaYQG$MsQnjbj)^pk zm^0Cz)L2MSOu5@6to`D^ty1;z-qtNIajWrrULnl&ib~fG^w-zgtFAdZAO9lTy^sDC zG5jkl`mb0pq_!%Dbqz!!bH# z=`g_}qX`^hf`lyv-&@VNt`=5ndaesr&(@r}S3d?t@m89SMe)yEz70iedBCE^;T{vK zn*o(zFuPLD&NPu(NjaHOT*Va?8On5)w=$Rt*11IW;S65xEzk1Hf&}+eFWrKK&ADbg zPJQzSrnbXe+il4aeLjjN+eVKRSFQ&yBZzpAV^J1r(JOq=W11K%e` zZ23CoZpkO>>&4VheG`ia<6Tlu~s{*^I+*2 z;7s=ru9sR%WJt0YvyzsoX>}D|nZO!C=O(vP>%ph=+zhEaAMbc^bwLUQcP>I_7`6N5 zlqXe*?C&>Tk=%C`$uXY|u0oWd2ta%m4$YR1E;9$oO@|?_0?WB)GE6Ru(b@MaL@#A5 zrsQ)bNhbVB_{yKRa?7x#nT@B{6eJ2$cU~cjLji_Af<>e$0^wu1atiBHU`zFf!sGcrDQZ;oNX-Jp7W6@yXwic$` z720Ibs%4(JR0f>x0Od1+9snyb3|iItsBBBz!7*a)$>2;Ir^H{Z^^EMnaEZ8SLC>IO z%hj1EP=@$3*sm-9;bP1GmP-Bqwo%3MLN5y|Gq7Tlww~6|Pc*>t;v7zfX_L`D#fFdM zXU^Yb?H144eNzO2=^=k*;BShln!`K%@gd;&^I}XIhysM;dBgyP=GbCSzKnBckcwKI zyMoaWmpE`{Gl+V{v|@!Qo~zN;)yiZ1%wW5E#p%VwAEN0L{~ zkE{d#g4us{tg}dZ)d$Cq%DpU!=MYDy9vC*c1g3w2`~-~n?0Q6d5`52(?M+v~GHE+K z1JK@Heg^plb7=@^=(u<=3p@{geszYVzSjn~ZN|g&G`j?JTa!Efd3)vn0L~;z({a@W zct7+th_!x3(qJuIu?qsstm9v1xASUPp!}a7I00u#z&Q7goGz-j>PeDL{W8lF_7}c7 za6+9+OYDdV`z3{uTmkeT8SkqIN|<-`2WP!Go(fHQ!lLrdytRS7vN1J0;r1Un=Sjw! zpg+H^CnmW?Bfm<=!Nxe^uOg6z>wZaDhIfwHbKUjgZ5<{E_T)NE1?8xI^ld)K_Z-nTzO zlwd}_;9wzlv*!~f$mIT&i}NaashvRR{*gZgFwH4%H4OleJPWX$?`~83y42nf7w%OC z1qmxYx!Sr9a>?0qf z{_m+Kg5e4oW%U!YR{)y^&VoUp3drKCtJrwD?SBgwENlS4S0=az&V~`5C4R!IT(E*j z`GDJYD(d&?Kz&5l%ZSlW#w<*Dx{ns#gu85)A5Shyh7vJ9OJRR2Od{iYBT=3ewlj$v z&-G|+e3o+eYjo2|ZrYvOcCV&!)|x#~;Nsc~hcA%xsh}gbBX$jEn(L17A`B!4+YJXE zCz$3-6d7~{J5O=;6yc*`S-G4}RatIAdL!}P&AQLP7;bfI4aE&h%g~y$9YjtXtY@A0+ZOX*ZvnEyHlYCysi}$@SL*szEeY4gr!^p$4(`GKBzNX|dVFA%uXsAclyF_k~@^^8YpTD~A^wrIg{UH-eh_Q(x$ z$jP{)$BV0e{|I6LGtV13?VKrG&4QUaq&+|I47}-4PL z|4Y1b0k^TxOJ_JNlk0C`*mj!>(#2Jzibl5Q zLE4~uZ6qtvy)~H%k|A5q-Nac}I#t7s=~{5z0&LcNIoRt;go$_W;i3ARR}-s8Ltyvq zHeJCd$-SN)!6rBU4HERoD)^{I%klBrxP*}N3jP45_Ud)O(M@z?dGp1t-_NaW^{9%v zwVyiI%XyYk88#<;sp-(&4uiUS0(-mIXX|;sS$Pdz?6t3^tSJZUj5=pSa{T*W>dhr6 zk54x}?SuXq6inh~+)3d?vo=j~aXw>Sg!y|m>iEE12Pqs8_6M>Pv(O+6ww=jhmaGo= zV5ZgeZY=7UXzjz1_zw!g z*`}gX?wdFH9^I~>yt-An>3L{QzfH6@4u#gAZ_ZjQM`&HWv}*yxcUob(_{v(I@zxfB z^-d$%WpcH(%95Ux{tlO~X0}$4#t9Wvia=N<{xHbeyb4uYqi+`$4k zZHF#%^VA*XjyASD`KKzmR7X}uwRL{#I|Jo}K z;A91bKp!3>cJs}vr)_WmgX7V`TU}hQ$N|`d`+!Yg25f@+A{bn!=K~B(HhUE2%5CxZ z>UW0~gm<)?FH|Qq(Owu^-K-+_?cUY1qpFozK)eMHhaSJ+DZz%E90rqdGo=si+3LY5 z91|~sZAEeZ1GefaN$%Ti<3cSr{q(Pt>+#TLQL~E0S+H<51OrdZcF+B1s(0?;G5Pnh zHtW?}o&?sIH=_@s>S#5of1}C{Ua1N;iRZsvXAg*mccW(TAE`!b+YEbCb)`y7csL{b zna>C4uGCRIFp)55F)irAI2+4a3sWt(yOhVgi?(DHtSHK?EvN!P}r=$ z^~wd|Jd0`cgU}BZ;;=TM$&CLoF#zNFCBnPYK(!Z+3+LbIjMh2|*ZJG3{RJvk&v`|8 z#Cgk2cu&(uf%Cr0Yx6U#E!^yQ^z`hm#BtMMqO_;oTSn;ZYXf^5Sa}@Iz~!DdWep&g z0iMkU^WyrC|3*It9KN~Je<4aMK(JU8(hylJr~I{U^f%ZcmA<5WFGFVjgIgVn`NmlcyQ}Z zc=Ea4-}BCyV7S4Q##nUH9-fS9(}0*SyT14~<21^goxJA_K22{F{SWqQ6bfltPvxJr zDxOi3q92Ncc{omNUR+#yZ0THBs5&qHlM7I}f;?b@&b#GVPS3LiHz&?UOsb18W7Ava zm*+ZrOv4=4_RSwy(74#8?OyA#z;Tv2SF<}ZPc~kZCc{;JU4!0WUjbdDrjp?%6Fxt# zK)lED(wuqQ+!#ftQuKizQmld~d+X2YPi%0*{ZA6OVK1&9s!^|CnRmIa;_}L%K}5=2 zZ$qv~E2)^~(WZ2MlVh)H;X{0c$LKA{6rCtzXRDg9BkZ6-N2`1axSu`!i94nJf_1x& zO_LY#d8~GkFWlG>t#C@*1A8#`y|4c!`Ulr7zGRlVIX`@tPv_A%e{2C;uVstu=Lg$i zh-C5qklwa4{t^OrTdZWhgOXTv_Y9>)G7J@x6?KQG#e*q{Z`+Au=KwUCSS<=(gIrm6 z+<$++)%E>y?z}neI=iE3QkosTno8=pl%V0%n~h=!B{|7un2B^0`~=zG-(=R^!#=I# zo>{wySZX(P>l|Aq;|kb>Xj8)kNC(Qu%%KPw4%)I!E=)$(;Kx+XY_T@U$UJqjPui}4 ze?azodxslFAf711a~ZleC_MLMj8urIRs}pH^4WCSee>0-Lm1bs`yknc$0kf=un8`k z*9E?p#!w)ye<6BNWiju@zutS_-2J(GtO!nkPk?Qw@>wNB6Sk1wV`)wXCi*b8@ux~@ zmei0nTOpby7aDz$*Y9=VVA(3^K-2{5IOvL7^wiESG%1_gwHLpwZJcLWc|W3pbm)|$ zZ?*e3^Ri`hwZz@3FEC>09T4g^4Npl|77x2v+>Vlu=WRcZYPRV>TX|ojR}~+24t!)- zWD?9(>Bna#ho*$JM-yTdhJ+Q%)@#db6xqOE-@Rgb-f$>b?x&8s*752V-?LW7MfuDT z;6ceDk;A>@o4Mw}asFf-xR@R8c|x3n>51fvu()#Ag|>@mckp+`XO zigkG=Z`ifL((Y5*ZwX2>%|SDX_vUJ0RTLwm>fH(>6JM)E-1dZ*Kj!Ccp=oUUE^1yi zmP=E8%7n zT3&|(ZGlqAVttz-9G&*E%P0Nm^9#SqJct%d7ZmW*f zbN2pCH79)@$E&ZEmK96_tD&SMgAP?O@AwXyO?q=6zONQ6F5O~iY^t$(Cxd$?mwz$ zh)oy$EG%IIOUKR=F_+3{ntn_c9L+?vsDramRS!FwM6$!rIY529KzOblzN6H>_9$ME z(UCE|kmuN-KtvMfP)Mh1>33VLL*#|WQZ8S_tD*O;wuZ}D3B_o`-_O%H+}!cZcOhrF zO6##Ek-6`&Ma|@0bd1Hzmoj3_baT-P<&zPS3=389S3ec%yZXKd#){>Y1l;>}qF+^! zCn6;F#=jZ1`C%!Vw35cQH;UY8lKG^Hx+VfuIal~lN8p2+TDgn!8proIYImZZ|FEBV zLs=DB-i)f@=^K;!^6TGf38(Dejb@34&qv|dDtmk!-G8AQc9am@IPhKCV9bQhlmFN6 zun0#5Jdohqueazpc`E$1z29|^;8ld9sM8P=C1n-_u?;oY9*&Jq43?i-<~5DXSVQ+0 z*qRnqU=pj6NCNV-h4ANK37_$V@h@3-h-3|vf_!D@)+eucH5_3*A(*Bil`BbN3mdbn zC&={UZ@%NzG)GD^NDx=$z&7*8W>#n9-D4)TqXhL23+IqW2sy_L1J(~`G z26{Zky?aZGUTWi*yMn>3I(RjVv-7e+PGi{M?Q;EHiA>c8*~3oVY}9_2wy;A>*EN{h z%uQh(;AZ{q&jFGrKKK?RGd(7Z1AWpeqX!Ttc ze^$yI0W;-$V@Hnmg{5Fm>7A_+ER|d`#T8!>a=gaI^p)QPTJ@B36c3Wi9BMtpxXU(u zvt$FJjx?)!m2_{t8r-f}EjZ^}9H)xTXwqA%&X^pqd0~5MV%pQuX#to^#C=mpf@MlW zzYS;&hmc%2w#%XkkjC4%&#xH%#3tO`12H7%)C{b06mSR~_mSH)S{I+M`& zdU1YKfkD_6Pd`PMMN3n)yeZN#)e?N@-1IGLvoax>reJ89A*;}2 zNQU$CAw_#S*_1Hf)t(;N?lX$m5`Q{eo#a;11~N|uWtUg#h75!^!=}R#6S2cgyrx;| zpYodiFqQ2=Avp#7Sn0e=yMD?`GChOf)mGQ-L+-k>n}Ufm1E)S{2OJ-CYx=D2=~_zwJ1hEi^A-*2Ca09LGNZ$N+t42OcDn!4FjSX0mUbqM+_TL* z!p0j7Wt*|lE$U%4Q;#yjH65Iq-0Z6nRSEXpuP$er0tYeSRJ*g{!&fLV-_fapBWPpd z(bm*Q8(()kCtpw>ehy?>{7^0%tLce?>eeAU0Ta?P*mg4$)rrL`&{1+JdcoCT)sz^K zxn-EqT=_Fog!wU}e_1VCjaJ!Zvg=oT-BB&2uzSsDkQ${tsl|@VNSVdIe(C-VTM9@;~s8z+l7WpZR=w6tmqdG`f9MZ6KaRP|3m}Jd`3J@uI`6OX&k#*{V~=?L$;xQjurx6bo$KPe zEU})A!vptiAgz*@M4q`#%<&wx4N{i6G%x&AtBoBeir66~UoYkwFzPP*X(%!#gs(V#l#|Z2UKf3yU@dB|`KA8RHI&WXqdS%R625Yl4V^tM z?=PokGTsuWv=(amJ}~C4m@jzC-)e>-8P~(tC?+O;+E`yeH-EaXc7Og{s;*@pXW;Zb zS81oVC-Ysu0xIiQ38uUSrqOHn2j0DYG*V~IYEu2V*krKr0>BY$O7$$SUKv+&ElA%$ zKk#MbbMsl*fP!*C5byz_SF{b}fQF}HcwTnNb@=x#h_i@^F?bHUf>=XJJUWl#YpZJQ z#*Z(&29AZO0T%bqk#%njA#`o?Ls-DaZ4*Vut@{MzjhKPv4s5(c)1DFXtZ@8;<=gJm zCH%9^)TW)fSy2o{hMLdw#owL6)I#=IYr{3xpFSJ?bb6;XL4>Oi->`h$`XLh8ZK*Ln zVCB{+;j7atuin*E#LAMtI?XSh8d46cz&N=tBk%kvKZ=61TBAf?e_*SzWG$mOx(hAx=8iFCMOv~RFyJi!~aa|rg9f5y) z!Io+e`$UWBEzdprNLJGtw@~AY$|S^MY;pCwEsIcvb_cuEBy&~Ujn(PyahrL3A+zEM zZ3Zyh6kI{Q`$@ePx2^O^%clU=vQ$FHI*0+R=8l&KKxiUHlHWugo5zl%-&I@$Fgg5E zEpCx&->*_le9=-RAa;Bis}P}@oR)@TICV-7T-*AV^a)v?PYtENB`KX8Hirnc!?$ga|$agfyg#cqR>CoMGZh1)r9e);kd ze5fLNdv}48CqeOBf}&p;heXsOk3dYX$=zuw1>!6OwklLt`XO9kgE)ggJr2m)5-=SsoG5j3n}hp zxny~%{X^QZj^%Bkl$owPz4*niz}Euh9w0BFD_UFY&EC(Q7xfX{TKnT|6x^xzb-Hdg zZ-PUIBdtyTh8*!MbX4O*MQffV_+uGvwPcC39DU^ z;;|0S^SG`YV%*pdWimPQF_^b9^T`tzw5Wwh{k{6fs6Nsye$NE6U?3)SU8t&KQu5z{Un%=_Ro}ey3oXk1I1)}jF_&}9 zY*y;v*~*u>=PdMdJtP}OQyBR@n`pT(>Xxw1)!{M8FLM5q5`9svO>QkFGaGzngWsy> zhUFR6WlS(US9Hd=1I0k;cE*T-!^&5QY7U8+kA!G`XWd(CjAtQGWXEp-J~x2$NbspG z7dfh}N&#AQUA zO6n>q1;vgGP@XiHQOJpbn^t2G5X)O0Nrok-if5n!OGZKS6zKyZ1ta2#E z`Z7T90VLdZ|3=EUr!Dh%n^sK?xGY;xT4(rtJ*T?=<5vR|svpzFkNT4Tq3n4Iv(xzf z2%=)v{X_lWqmN6cX}`zJDl}u#MQ-u^gi(rpAW~O+emIsjY0_Z8`!vgOtCU=(S_q!> z%Y`1=NDguVzTWqW?n`uK*kT34xjmj*w%5|?6G^G(9G{B3B6&4XnU6ZAksnLt_##f4 z#K_3~^1#vHzYC}{9-dAlC@Jfh5hu!#(`WG~K;%C+MpSD9Y*ZKs0c~dChf37CVMLup z@4|G<{)F@~YuL=`R?oqF=l+!*F*NMoSWX>%ZRU$ort|zaXUG?cABn>&(v%I!(+?HQ ze6%9WA3IB!a(e0+5;);xV*5MnLXncQHC^qPez1#9 zYg7m(hoeR~N_CwT$c4n`6>~Vw#5dG@->Dfp8g^E2z3rEC@>gC=mAoZ2E#P}DfDXe1 z_y?)rI%PZ?*Q+E5MAXMvE1Z^anK=T`yB|OnWF4x4RlQh!GK2A0|IIcV(pUMT1d^{k z!q$RIM=z7WU-X=K!QZrr^8I1q$0M6=u$iKQ&LLMtrG%A|B`;XwQ);iWj7FH?*LTeW zJcXG}({0=}&AN#S+XBgTquHLwTb^e>t9h1nE~l~j)KN3Vm)ROWN19A&HAJJ0kuj#O zWLq8CGZ&Hp%FT!)zbqJ=#}q>mW1}Y6Eqey3J5L`_?O8`81r5+@uDO&cKX*yKXDPpM zB++vtg%$WzReL*CY@Wwzzlrrat72j#0%TPT{?4ihd2XA2h8d1tV0h67$7mbYU3wa=pTwv&P@W zr4dlS{c4r62!EE$pCtH7Dn}#(=S$y4*!eR9j8^jkm&coyd;zQ0NOiY0`zL9vM3|PU zPkz8j(Pw44h=8+@j07D4N!J0nY5Jyt9Fh0{rPCuv%d5))7i|yT^Y#hwRtGFk9V0vi z_*nWQ@ta;>vI~9}iJK>@6OChC>Ye7M;goS6|5{$aQf=;AMT;3dJVecHJ2AKRV^Xw! zRvK+={`|;iS%%n0hDKCB9hj-hlWXqUn0I3mGI5#A;PvIqtR4&+{mqWtk*Adk%@}tSW9DWv-V>!4&MJQ0 zOq(P{LNKuX;emR56y;zs#CtVjeBN%$z4 z%G@?TKCk7wGxkef@-b|fUZlQBnT@rH{Gs1ITRS%Ay1dMT$8kP%+9) z@9+_s#9~axr&@II<(x>^-_E>+@_wJ@n>Q{KBR5p`=H8N<3Z7-^IyR0n@V=V;Qv0&7-VdLo)K%kn zW3Q<_a%^>{^f&WOEwgd^t~f=x7>*p@msDg?OGUY*F8!T-Wwb1fMME+E-->l~E0fs< zqNqw&BJ?}mm96oqc)-iu+CSTJ&IH2NmGo9nFut7cOIlnh@nUwq z0<6N*9JQsT%!%mA4K@4b-*s;PgSNMhi>hnehEY@y1Pnr2K}A~WkdTz_F6n0IE~P<0 zy1Tm@1_9~r7+~lgnjwaGH+WrlJkR|;@B4k<@8d7T%`mg}+H0-zi1T3UEKZMJdRD?- zOvk|7FAFaZHXA(DJ5?^zr9Pnm^er>D&#M=I5KTi^7EAf2S?e2y&8i1cSX?|3AzOt{0|=Kca9q@cqR{ECY;nCe}unod*0+t0=DY<+Su`)2t`eom5;DEeNoOQ zplGt+>HfdJ7t8Mk$d;(mZ*ezOr#~^e}g(fS+r~r6_)lSqXWWF}kKaqq&!w zw^WTo3K}OtHJ56Fz{N?03zEKK`5|1N4>|7Ph@~T>WYuNii8@!=KwqmhlG`=pB0&Ma zNtdirb{Mkfb)rHwK}pquG6E+* zhF8-NDJ5+3`xy#7vB8H^J|6+wRZkNM;z`Pc!F2>%+-wK12lw;OX)xs9C#O7Dmh?%^ zEC1lyfv*^G6-+%Lscry@jpw$;KB&PUis5 z0Xcj|`-o|Nz1^51KJ6^<*R^iVd9W3)pf=C2nv8l(69&BgU4~y_?c@gQAEY)QijB&bP8?n*{+&rczzoUwL<(Rm%E}# zF_+F_>&DF$IRvxL99^DGuzWE!v0cPxPL`ze7*1*Gu4IglzBu+Crdx>a8apv4!r3;2 zby;2EH91zA$W=^*XqI3{SXaEY=j6-bJA~-Yl+;|c9KyXP6!e|PbkB|F1T)+T6-iH= ztP$DZ03YMgIS+5c8>^WxMZ~;)Ifn{wP%np_$+48xAG&FQ`J#)Z&w}XHAt}5A2TcyF zIL};Hy87+BXV)5TM<)R$uT>06S{`~~?P@Km*OpCgb8{@)Z_aw2p^GNmC~42{TR})x z>Z}ndU z4H4Yi0plDuGxw>Ymd&?@-oUGZ=MzQPz2%p{%sD-;D=MmCrgHf9q^vJT_#Vu<3F!kA z=w`IQ?8rzOIw#$R@QPT3a&;-@9;7IYU-)1moQX`>^cFPQc$y;PX%Y~PKeHJ7QcCF@ z^Gw`2q=y^Qmke=M=?U$EHVRt!Uy{7WBKh7;N6Zes@O4v(&@JSL>iXh2484VW@sMfn z_`21-z?sSBb=uT@hSU17{z9mvq{ZrZ6}q zCS?<~WUTa5o?IPSdQI7yu^T$-ZB6};7O?1#D>h{*My(p{k|qJT#+x~wH*~EuW_&&E zM~;>u%bNsy_g3;n;5dCI;!^;&#i zHuP^SU~;Zb6Uk<0p)KT@T@lo_%xK{37e9`LSO`&OGx5!AW&1Xb?5A&JWj;fdS5vUV zf2(ABNt-xTazuQ7XS7(ZpNYw?y^CHiVWA2P6^t&NA?0>aadTODoPt@yq`=E+Q7y_0XQX#z0`{ZJjc z$NoW=`u!Qs15fbUubRMmxZ_Ci{Upu}b5LO4+ten0Uh^LdNR4EaPc~$9gS(7mPtNouvQbHxxyko>UMHl-bJKXZ*!lqEBN;jif2s>y8ZsOnk*)6qAh4 z!;Q|TXATlSSUu8tor>i7p%{R4@-ATuW6sR%teS6=Uzb>~H-*l0)2o4rd!PXIOjaK$ zs;U0FxFv0d*njrjs&BdS>nwmz0S>|E#0+>L8#BU)G%A;!yDC*-(S!_4t&D@FPxkaa zj%E*}8nx-~128>>bu1^rYEbO1UOm^lJ&GivSF5x!$h@St`2AbKg-NFV9M7}XZ}#Eb zbX^;Bky&~wKC09jv4b1{P|Bj9l~;-K>K6_ zRa(jU?vYCxZ{{UiRTE)bCFjns#%nsREwu8#z8h#xmUbJ53~{Ix-yclMP8MEfZ$;B6 z)|m->NBcv|FmXaw%Y2FO(^2Vs)3xSD^pPF`#yOa++Tr%|ZvcPS{fEB;&_PUEG}6hy zlt-7h)bpPrN#`F$($+tUq)fM2lRFAC&Fkm2uY&JhM~Y|`mdZu%Y-S77JJ<_(-&GC_npYCVwmD4yV3^f;W%5x~l;>AhfY-1L49H&BX=Pwjd~^&IfH z-7Jt(59TW8jFgw_xKYSO-vQq)lj98=LiTh2yvt0q??GhzfmFc(UtwS#rER%2CDzQR z;tou-su|11CA>Hml%Na%nfM0Si9|OCWqVGuwXP>hzQf*>aJtqAp@#u9|1y>6*i7=d z+|6h4qkVoW8HFu1MA~%2(upA0y>OU2@ROE&t!gkpu}7jl+4y4Ng8f;+NFrcNDM2UW zAYA`90`gS6hGUN8D2R5}-W46m?H4NMFENjM`W8vwUe>Aoe+EHzbcJOE0TbFoR#74= z$l@&t-X27W#N>AeWvOu~d{NeGFZ(~r2{NrI0>rd@4*!LarmCbY+Fa-vU&-ZwPswp; z7ypG~>D8{bsz+&!Relmt&g3%GEn!@KuEI>v0|i9ozsLadN+bc1sz6E0>t%G584-?& z+*4+=&Du~=FLXVpsO#`3!^*r1QJc=D?x5bY5H)ksBnkkN@DKb;2-5zHh$_A-*5rYo za>q2rU`cLniw*Cp*n3cIW0Pm#5Xi$4vi3LEd~IN7$>|VoFA?QeI&pP0)GmbWJegfRek;yCUyoqQq~e5SZzjWepqWUPJ3v0SOR z{whNmSPn9k&l?v(D8V^d%o-(^;YU*A1&*z9r=erbE1il}uADK6H*p7rO1?9sbgR?J zVx7G+wwwmRK6Mc=+pP_A(`pY@vZHNtOAgXJWjBqAmktd|70Uj+h2-WOw(4{T?K9Jo zIUx=yi6+2~`W>)KX^zxId0};+R& zisWQ^F7qDcz}kk*IOLn9&1KiaNj*B^PvWEzY3BRf%5#z`N{$S#f={Jf;^!nmDL;@^ zpO1bi6y(l6P%b!F^$9xWezA)tg_t)_aQ}-s-IpCO2XGmd3rXg~CZlU~r@0U?wds$A zu3PxyZ+z_G}Q?c_Eq8D*By0uu!O`JU)JL6`($(AbF%>I$KLx1e(Tsg91rgHE1Kp}O4 zDZS}r83gaVmK8h*0BpA#4D*GK;u<(#;!08hcSb}@QQ7qQW-m5w*f3hUS@9E)5~zaE z_lccQ4|2j z*u4`zR6#6TyVU1_pBEY1bHc7CuRd&^|61-5oXyWTMUkS}F_tRyT5a!CE3^r~k(RTN zVr>{i{&fjJ+R~yP6}LbEads|4JM+@!BDFej*9P z<2u@nf>34CW;=aq8r`(x;`aHInesW;w==Nr*x0M5ohfH3E)$Cdr!U@qrg^O8(PmOT zE70Rk*2TyCarcrR*=q92L;0H0=Cbxc8+)u)L|gMkNUyK}r_Re5UAKxpbuQVRsTVfT z`DU9F_tDUWr*4?r40`&kqUz4qhNd)8z}3|aA)fbdJH6d=?7lQVn8D9biLghwJqSw`)ypmXxLJ*Hh@>rpO={vc!VD@;ToINk>sX(i?Lv1ph0V~5Ep;SU0 zg*?_b)Et&XgAgqFpwI<>zmh?1;!<)uo!3OIF{+2$dYlj1cRCz7SnbIfvMD2HN+&)z zCQ&M?#R8jbUHjT}O6)y_+9Yt}lzY9PDe`K{lb zXVX03Xs|jA$RU=0xuOGn)B%eMWA@#Z@iya+JBvGmPa@b~|MYwh-%3;5=}SA&Ugpy{ z47qgI>9B~kwmBmvZAp9A_ES#}A`cBG?jhLKBh&Y5laDz6#<&*nu8lT`54(JRfNvku z;p;#y23Mp|jqwPs@DFsmfVu)=#$xz@m6Kw+s5>`HZOcG~@-e#|bCQmQ^TnYKVm!Md zL(8VnR7z<&dAQs_m6Rt`EZ-u>tf&#A+(+$MtYjWfeU+|B&!`UV5jy4*WapXEH~OGR zTIhXVp1&T@2?vajZ>(611oKC7-U@p~Z5gQ^u|((?YnP+@j+EA_-cLLZsiv2HiM&8j zQwcv?N^6*~@4oif#W!!p{6>trhdg?oQ6ns+OUd!3&OHmWN-}bY)B~kqW3fQ)5ml)D z+C%UozmVZAUf%xWv~x6jV#5a#Dn^%s{*|5~n6E>U^jP7nMZr0O<3?THfOwGoi_1nEQ{1KY*^o|L+&rsHv6n3sX@~|;7-k)#hP1%W zP(NpTB;>ooe(XuAqG}+wUW;pM1(098g#4hfj1M+*Yt>bY-Sbkr8H!GxD@DO3if)W# zc71gvY%bsEzW2!DB_NJt`@TG6Ns%B1YNRk0_)(htEFusd#TMfKHrd+iSLjQ1EB+NV zxhPE=KEhdOsia6wE|(j7KWs=JPY+tWm*CdPtvYPEn}zpdcNe@4jxcfAHSGz4WTWA2VzNok5>xdEP#o9+G>@0EPk$PwJQP@Unh8)wT$}v>=HGM_b&qI zoKXrHV!Z8eK}rb~NfCn57J5Z1B@ND}JJ6BPwoBE}v#O_o4xEmE^D! zkb<$!W{vXn9Jent-#=eFY#6A_pD+I|C$P8Mtu{EfaM`t)e&|&J>60;14Cj1AJdrHl z@Jk*tS!pwUo7ID?}%tm+`naSLIS=*b?c+OXggsRDdVeGip|>12*km1Yf=9T93- z#E2~H}R2z%c|O=6~S?CowEDRjP$2~Ii(_yegV?5g%GAv2~3-*-5OF2`~dAv|@gB+&U zhwGn-5}S$mHvu`Y(q6$$U~`IW^~YpO0X%$|U)p|NrqG&<-Xu^uwayUEzW^Hq_Glru z$0s+^OldfuZCxE}U7pGvmaw!sCCNmv6bSO4S9?qoBt178Cga>wD?v)6h-HkA-KT{4YtAISV zFqbX7lGt#g0c$peZn6Yzo0obZrP2edFK}YFTWR*VB?T~g{!x$hyY+1`syO+U3~YH* zCwNEG(u#v<+#dJ=YC|R^4;O=X<=cvGvQu#(W;2zSR8Cw~^!EvJNb+}Gvu<1T!h$&J<5JAmMEU-uEcUfEfWtNrpTt_@Z6d1y?)kkcZ`r_>XN26fUvoMLbhECGaUSod3}U%&6y~hZ{r9EjHCYCk zebR9E_78h;_s=TZ()>buboA3TgCkd(NstK;<6CJpl}Ew-$pvXp zHP9Eklu}d6LZO=At^2tukm*;&)CHH zeDH1BtvII%>w3Ww{T#!eo#s-PquK!w?^$*TG+qr45TT`rn&^>iVpNk?&ER3Ks!0oy zmN@K|9@)^Nr_o6uaH3jXh3H5CBqA+khcVeL>n^3O!BC13$*K$t=Ij541o6Vbn${SY zaZJ6?5E?ZHXMGSe;D#6x)lU=0-J(g_$A88m!MitS8xR}cC*jCli$f|SYC11Sbz&2I z;he)@6Ml-j`Ke>*yYo`l3vSw5{X>UDOyDNl73pLBI}N;ot5781H2B=i{XXoHDh%GU z9Q_-4CYiQo>Qh70aTl7=JM1MlfGu#yLyY>>&nS6$=6z6c#92>%(l2h5HZS}nPCb@wvUp@&iVMT6!OXe1a5i#U@Z?rzyFYQ- zxBD6&4Crj5xb-&aZ6Y3xG$rVaNT#`8kqZGFPTvEM``-^OdJ?jPrgVOpzeR3D86-ng5Us!4Z~GRvnv1l_K%J~ai+lMCJI(20 zwBm7|a3`?-_Fn|ny8m5Z-N(%KAH^9r1VplTJm}!3_&W)fH^J2pv>J{1z=^SkU>Cb(ZyNJ?%{ph20#(Kfwz8ytRc~W0Moo-%MCM*m%#3 z7)$984Og?w%;^xt=iqB!=0n%V5|gI?kN^y4KHOtwlRsO^h+=VE)1Ip}w)gsyxxZ42 zy;{C{Xy3KuoR#xvwI7iC{Mo{>ef#=*=5A&6P5CJVdQm-Dw7=0`tj{Q1Ao6myq~m$X zF$SZe62i|p8ML3t5P-S;m>pTK<@1llD|_VMJRqy0&_5gc2}tVSIN)FkI#H|^eI$R< zaq|TVm!3Cc2iRr6;?XF7tteR1l12t_>s+gJ{{}4H8X&N8Vj>B9bbKNKp-2H$^t!_r zg#!YjKvT=9w+HJnpj%n9LmnFas=1oCreWq+!_fH9wr6sr}k)+qQjaaP!w5hC- zxo4oCV_Uzz$@tGgmo>KUfk;pYYo=9WgGyeMlil1SxBG`r33vHuz?JLgmRiQnYBH>>|VncV4E?=^U-<8RS@Ao=(wl zpJ3%FMz?e0;>y*n%2=1In0H>SP%SZvXeg%4wkhkK#K(QK&2|7Yb5`6o=gbB=LHuQH zDFP`bp=JERp!gYI{HqY>oE$iZ(Iq6Sab&i#3ac#sd>n)davR(s3IC@-RIPBq({ESLuro)%?_@tIV$7*NGA^`H4 z%QjBSGe0uVVSr4SAt*;-!(7u{_A_O@*>+C2qr-t{2jg}^A2E)d2(OIc(QtU&;q74l zkpQ2pSMjy#99ILgMn3ccK&3QEV9~@7ri%RmoHeQQz6Lga$ zw^-r7%Ci0w2ob&VMvQ9}Mrz;}V;ycO%Pqdny_T^G!`a(&58e%TrDW? z1=U9(n8(p_c6RbWNXJPf<-x>h_0Siss+>HddNor)mEca%sa0p^=gb8Ua|V+z=wLPp zFH9@^Vox{_;+ym7lgw_wG5Jo~BRCK3g&ymdCS_v%SH+jhKNVkldOah;mR)>qd-cwE zb6v%doqsXo+%U8KQ}4x{HT&blwg!5!MgezkF|~tC|5kxsddJ~>UuohClLj z0yK(y?r$Ai<_@;AO&AIyJ1YWYor{>9+e4%#K!f$3+0oGBG(L2jQ<$!4g8NmsMTH7L zS^n(ja8~cELliG+d?b0y@Tu<$*M#({7v*J$vQ1B!7>X~hjNB8hmrBpbIGptdnoNn3 z0P5V5F-O&JZj$TdYlf5lt8zuS2!ZPpa$cENl1NsZ?#`)Ig?}+lq**Z?H z?3@WEm=#Ma$va+iT5R$jrOpF-iRBnfCanEZ=A6dP(X!%ON&bTTkK>gsW>QY8O*={S z4|=!A|V;o;z81-1B@>cz@UsTP(ZEUIkHDUAAaRA7B3e< zLMk2QZt(Nl=Fgp1>ZA+Agc^c#^aXRkA+ArC&vGn2wAtm8+sc`vGGo&Dz-3qktfP=x*O~0Ql8*xxD>Ia1>jXp?v2U&;aXu*ITtc9indkXhxRAjT zW+qr=iT-r(deZ{4wWUa})YR%g`JhXSX)~8(#s=(T)eekCqol^enmt7IO3qci$Z~T0 zcV$D$)U&SkNj(7(X7-?e)mZ|DN znFeGb+SWt>VBsRXIotWF)9ROu&%=|jYM^;D&Bq;Gkeia!Hu5JoTLXej2Q4|p020H>AKd#K2gJ*ePP*^`$%<9d=kqzzr$+IdP%r_qqD=NFNkVds<| zX3oh0Jgw~+k)JX;rW{ERWp}I9ethU=!^G>#hDAlVq%&zupHyG70~SD}`R!lIY`pIe zvjfvjBC}!=`l)f!K-ULUZR7Kv`ltsSfU_p``)3xFxe_PXF>Oq@QrHSXF^NnxPKerD zMNW`jyJ4Afv2lp>Qi*1r+oM2ke`XcmAxf$=n3XSbti8Z1S$NDP{CIx3&@Y(dFmu)WF5b2sI8*Eq?6O>ORk?~=;pywvIsNE%(w4)M3}c$3=Rl*^Plpvz>;? zSi`I$h_EI~eL*WkRkpl9uWB#*5KRutPv3Qix`rpDoj{sxed81ou?_ZgZ8TX&1f4%1 zW5RO=VLKa=>ue!}xVWM9FchLXLYi&Dq_5@tUn?4B-h>9);&%U7U>n%#Zp&~AUOw6$ z?;Q7A?Zn*BHIrLP%wlNd{Gz=9;h%8rbA9OsEqz1u#s(wg*G{W|R$*E4GyAcS-c$QG zOOh!GkMa9Ve;iU#{1_FfCr+AVbF?Pu@$5F;XjtBqDW+_28TsIo27-duG7QA1vsiZe z{bOieM2NlbGL|xQoIldi&2DyEqd;+3tsPS8jO4Uqa8{AyLBw-a(p8w1N#?p4s#Fx~ zxQ!Z=NivSoc44T;T5!VLd!OUm?*v|f=+y{HC~qgeN_A~04&->(Pfp^`(MNRi8IcJf zkirNBdf;PFXqwK$n{skv8`_9EbBP;NU|qjjD)J)rS&w~QkDc)$M^$S+iXT6An6VGx zkMf9B@!s?DQ-XFSrOU2l{(MfXiAz4W4oAJuuduDCKNsTr!f-lxr}o0FWsxx3{k$ai zxHtYlg(_YI-fbnoryD6sOn{y{U_rz-z?$bp&CP#A-fn$wT+JC^y63@bx)h=s=p;2%k6=dva@%z`PP0qI63GQOY>!jTN@%+(TU}@iqmn5U~ov z`FDL^;vD12do4D`d?VJr1Sn~TJnl5&TW4#{$*n!Ps&HBDa<%8T*^Ph3wD(?Jnd$In zzrHludfEyHPp<_L15s6)oEVClVSMDr62^CA1~x)~HOgu81O>yI2&cp9cY}@-{*%R* zw&iZrXn@sFjZQVgL%_#ufR8%%mF&n-o&9HS4 zc!Mz8VcS1&OIoy93vfzM7G0wc+$t&Y?|-le*hH@rVYu z_w=P8COA%M*4~*~l^;5=0{FQ2fIjC7>W(&Mwn4y2vZZHpktW9p5(EkKPW zWt@J~4L-G-18w^O4Lr)xo3Z1>cwHz+h9-&56lEq!q-GRSZBUwE5@B@@DjiUB&3%xh z`9d3|*U%vcQy5_kXi5(uBAO0o7Qwh=ci#NS+$ydkVZmZR)t;G4kBz601+F5EZ=%-J zTG{R-fRQ(?b}I9mC91SO3&GLkv(`<34!|Kpy8? zNvV-LKDwydFO6p4&s>awmpWsEzmELsRtOi$nG1^@%yGrsex*x#^RbnViWi z;RIQQrKK23V3oEt=B|3<1rt;ZZ;&rV%|vka~q`Fb`vn!Bj0NC zOwO9G`t!S>(X@#mz@RO2mZ-c;?kfs(H{dKTe@W`_4`TIGYIdf(2Y*4U1H_R;#pZHw zyAnqN_gK>_V}#mw6tDtJzr=X|GkkM5ThMd^f)6aFx8VJLcw5`I?xJH4ezik(N!;D; zp+0ZGh5PF-7p~iN-{`OE-t1csZk&cZH0(c?A9*eqm^h9f@rl*tjrvTOtR3R;gBKU7 zdm-@L;ViNTHN*f@K!5wk0KyWGRH{aetENZ7uOpME zDJ7UVl@w_37M~FfS8ZQOTVh}~2q-wxLHbuTaRITBD?yI`o6#hR8b7c`W9)riuP>Hg z=edsXT>|k(_YSPj9)WHihwVqxqr)=ksSB9{j`h)kx{Pko2j7~44!>k})LaQ)4)WD+ z5=Q}2iZk(F>!xF7Ed^>MdW_EWWXZ{GaE7{y)h<4T4|h^W@GWpR=*yBy;)X@MCXC>T z12M{s8(t;4^dw7RR|Pj8D7A?*kIsn)P23lS4j6E3VWphXe0#{pi`Qq3{{As$UxQNP zp^Hr1;f_bA&201nYSG>&T6IEeQ*eRSqbPj!|2@>$sy)7!MUB_Kwd0Rv(1FzMg5hw z+(Y@k3o8i+L=woYK1PkiZs8t++v>FQF%25fKP_5~R|M#M28XQE+dD4Ur^_*TP@|L6 zzq{?D(Fct1YRw2z;c86QmD zHZIU^r~{^Xd27tBo5VNGj2%M34gLYxm$p7C4e;#Q%JlAU8|p&?`9yS_?2YnovdwZT zT`ixO8EkeA86h+xYjCCaSjHNd@0piM>=jKL+74FM7e`x&wH?-g9LFU&xxajs0lH*W z6y6v8j?7g$u6PRZfX0|tn`CW-FpBFQKbBm%7C10H(xC>h{_JOAZ1-C&KEL%qDY#GT zcsI{#HAKfR6diHz*-^4awxdx7GkpRk+u+{MI?La}mbpe}^0MSFj-E;v0p@H4_~l_g zU^0QxDJ*6+ngmM%8Ha0sVm+%b{OP1!Gh0g`F|zWc-_#yyBQC! z%+rnjunN73_GsC2-Db>wgFthW)o#=roypB>g|ktQY%};cH%ZpXdE~o`Ni(LJxRNQs z%;gk$k?r`b4&XT&yStBSN7x;(vpt#1s7eE7_Wdz z)Srn8=qj;W+f&&|Re_#sP6D1HVKaL^~@US+t@XoeJ8sz12aA#sqJ^!QXUt{h^uk2hqw=c zR$#qvQs1x*Q4G55Y7Wk9=cS{2ogQW}r+gSKx3p+vrk)UmpB6KdPI~B!__LYxcZRCk z^vLKtp~c;B%!!j$*rtB*c*F0fwjFL96ltO46I#Yi{K$4;<1^|LO6z+?G`%0E#Yli! zyv@%8jz*SPw}<~o-nY4dKAMz4Ii_+QlJZ%AKr%vDX zBdvDC)<#KB&}epWp|n&&$wAU#H+&65apEIa;);N=NN{@WH(vGjZo{KE^|HmsZ%57m zQQlclfjkeZSzZd3G4?>yYCLuhTFryde}YY!K8ccofVwp=m+%_*&j+6=V*~B(X#70G z7kCF7FZDex&N{hND<#=Ssq8UAl&QVOI!5kgG&ARH2$eT>42z)Vu)XsRzy&p zb1LH)wWxiL>{nQXyzAWEBP%wmxPgC z*dj6+DIla#xMVC4HTey)zefyMU#Zk3V)OvRME~);_R}DCOfA%%0n#hV?WoV0+=dje zTp#cwVK46E5{geNEu2{s(RJRoO~xNTDMrdwQa+(lpNp^@=>l z;*s0@l&ZrPFNBqT?)ct648^{0^)={ZSMwp$FpC9w$Iu-+Z~&b(X8E5}TWe@FXxjl=53@5wcRn?tyNj zrxO`+b-2+Tj&eNUz+GC<*2WFm87%A#`JT*DV?gAW?2g#j-Jox98Hx`jS$S0E4Rpe( z+Do}2%~MFYc>EYzd3ep_3!2gBQR0rHGo?L38HCUy2!C+DH-kA0a3~D+UtiviwzKVt zb77LF^90U}@0U7Op~ufs#L-{hzoNV^gZpjbI3+|0w_yqHQS(%K5t6aAIto`4^g#G3 z!7hhZXx^-m01s~vu{0e+;B_4o_jC>fjk#*RIeoF6)9}ipyajR5FzI>;SW^r-QQHEL zeSNH5)yhjNXJov#QQzIpHxd$~O})+$OAbzV&TPx$lL4zmPB)vXonM?{=CN%cw^+B! zeG3+txc{N<>nj!E{C6So99SE?fVtjz)6?uIl;G3`BZ>q(H>fjp&XIILVhXEQt3Wnp z4EaT5#<|U*z4>d$^1}N-9eAPEREaoZ`DW0jor$BT+tSFkw?~`c8&^4ByLb1P6LY+r zUctTc50LC);<#CfE%0W{x8M6KV+$yPXW|Qvh$%1!Y@VseE@x&<8WsV?IK`-@c_K!% z{#!SPbEyIMzU9%5>5vO4%#hhF3G{Zn?S~hkK>OBq%=hGMLtv4~bX&FB$t@6fE2N8oBAq3>5dJ=d(;RIHlelenFugLp#K>~<- zb{L%l4_H0=Em1ug#k1dE?cp-=n%-+SW36+HU5)O`7|%-Q67|59LVvBUrV7#5vsR*dM;H& zuC!22IS<_Q`}Mip%P~h!&zF*HVw4ryM6@-3V*!W@RpxD3IU*bfB58UTM1Lh$NJsH` zauzZcx}Vy^-W|0jt?mukGJ61($&fr35i21~E+dm9c~Hj3lsFYPnf|b1k}<{kOdG_# z%SHNQEDU2VB;<95ja+sTZh7lcrN$^EK2O@%lwWK*O3;Q&kzbTIVW!oQ)OlGpk%4y_g{$@3W`=s|i`Zr+S31R@J|KlmrPl(N$`3uNi@)iFu z9YSnOB!Ky~9RTf)5)HI2?{qBqk5uXwgP#rBiXXL*&HFn%@MDKp3?}@{laK^9pqWc7 zJ>$eB_Krz0&CU=!_D|<{u5vZmdI7^>JC+ap#Bx{^8w^Fd&N>x=mC_LRUOy$b@d*iC zCy&~)Jd3VjARd0yTk3;T6;%|;@3~T9Rx?DH+fM=O;Z(O*T^^w4&~a=7PFo|rbT^?T zi6r@{@7i|ii06{8V57-LjcyPPF_(MeP`2ZuLA53>1ZNJ{dL5#=A-ewhOwi?KjkPB6 zIvDiln1;)cnwb9G-DOiuGty0lW+uz`reIN+N*^!V)t^z9Rh$!Eo`vTbyCk>t>)E0g z%t73Wh|XGLI8*YziRqcl6dp%jnyo3ORR+s+%cTRziuJ;fHS5T8E!TUK3^79S zI4Jh1qvnf7F`VLa4wZeFDR=&-qVdQ6qVH8+?%i}c@W9I&9vDI<$22->raxLnPY%`a zRf0Q=0q`Vfes^I)fUyCGxX=pi1`&0$o#(rUm!7K6%l6F&>;Q zGQvT$4{jDSRV>8$c-@aFfi?RfgCzu0J*dSvjg8oFAeN2AW6PUF{U`Ca?Ft$3kT(2E ztxIdpN)0*pjRO;kR6&4JH*U2p2OjiLvrRGz8e+$dv;1iL5M9^2-bvtKq9kt%^b5&g z@B3!Eh>i1tI}U7KWrrh;75Bkhv@bV!#WeNHc7lXQ%#6bhqia1GN0d4_zccUW7BIo=L<5}&BbaQi;OxPX`b^9o6kQoZ^r#R zK%*=Q$m6WDuVdzMxaVJ9g=kx+Nsu6NYRzf4<+}$&j>vvY(z(HN(7-Py0+nvfS|xQ? zaJuEWqOY3!nnYJIesJSmAN9o`B)OV0#OvLwXvc*27H4D4ya$zB8sd3Kh*Mw>A?86S z7j=lk6iMRS_O**s%iNZoKm^XJ%O_){Zv(`~)vN)VPlxLGc+G)%DOkE3!nsoea^aay z4MoZ#BBqYx`3U}t2X0l3_@b3v>i)D(~hxew38yx*zvh@a3b<`#{%MgRt9*7Jca;)aAHW3r>-a)3#W8U9r>)Jya-7 zTCwxnn=pDU8_VXPE*PK+iOB8uMm{|+cQO4*XD zCinKPW}5^U^{y3hg*2zM>N`}sLl;UR&&U=z$4AOuX6adLFR8nzsa{Fe4tv(;V`e>O z8rfG@DVxP-`^o*CoCF-*I%C3HHABuu#r5JyzvZd_SaM&}fHHae?@|FKhVL2k1;V6F z);BTD7YZe%Vv$i4O8{gfgpEvPa8>KS#-w@no#(8A$L-s%^jE<6e7qZ<)j`e6?-V?n z2kG~yJU9umDXl#+(85mLifHyX4#;3h&w(B%+MCUp$la6!b(8lQI#lu{gPuQPJdb#l<`6p z!$@zE){Uf{ljjpF-u?CIB;28HvJpUQD_ZhW61bBO?YDAn2JIo{89AMkPoK~tJqxOk)J|4$ZaBWY55op^=_oq2!aT9HO zJf}so2vh%q<9iSgc5oOO-cbB4a;QjySGS1VN)q;3O!3y7kfd`1?FpQrOp>3KB5!za&CE&N}?K7E1(1ZF%<;4J~G0?c#spH+@t&b(4nd5(fX2 zk5}&cuPdm~n!&xf^KS_xlajo0X5i_b9r!#3MmD9GSW8=k<%5!lbr8;AfO+E^`Zn&Y1uU-aPU&E>)vzBcb_md!|B{@Mrdun{Le~GV9 zvnX@2cj?qP^|#P)n8V=QyZri1@H6i{q-VE*PQ2R&Q40V&(2D}-i0;0c{-+3wqT5&< z+6I@arn_j2Kd-=IA$#|)#Pr+vk^kq3uI}%E1gKxjH9!W#$+(h1O}k2{<4Oj}L6^n@ z=kL<@e=+>g7Xkquds_v?moN~D-*1Rn1#Ewpey0v%)&L`Mxd!u+J{1MxDDOf#evu<| zcsO_auge1#p&7sTzp^1-w0*vZr@5cui0%R2BRtW{RN|qlwe>qF@=9b&6#7X3M*d$wbnbfRR5@{taYs-9$j2Z$=&T4;# z?a$V8tO!4GFSATAuPHi6@;JEszNE1}A@eD)S}f5LtBPC78GQrYY+;P{1 zPjiUPt1?EnJ>1TiHYSmTHuu^kCW%OS3SL*PoBkLbHD%u z1D+%xNGOP;a8cceoO)%15J;u50@~^TKWyK?)26qh@AwQvI*WgK zLswXX8F%}RUP<2OzhU$;5TvC9R2?vu0k7~Gko4XDYy@{Y<-97AV)r^$n)&W;-vu8z zbrReCJQq}c4$!)($ajM`a~L;>Mc39s-+CW-;kpbew8Moo zNX5k}xcw2#+OW5uh0W$3l7f?#U(+5Q+_dC<<7I~-d&y0EONrojn%6dF^|tZ-J+ii9Xz`3yq(2Y-e-nn{%!N$SdnDoGLKoQea_JudHQh zoiFD%qUB@x*MraPHNPP;D{Md*TvtNSd!lqdhMg!)@1PPm93t?h;hA%WIMg$eb!dc^ zzUWuObI$?GKr~Ou_Rw*`3=I2UE5h+6{c--T?^lkC1M~8ZOW$>bOhAlC zOg;}#JlAlVxkui%YZJ6%@uyi;M1jLc`hB?#-eUF#S3V7Ad!ly{+T2cmaVGv4iP&;} zAaKtD11-2q%n7fcGSHEHEop{xHlvnpPZ-I-ADH<}CC8PJvz(OUQH~|Zt8_|VO11s! zxbV5B5{ZIKmA_toMcNPoT73{3eF*r_&*^`P4WyO;zX{}Nt3EsTe{sVg`eP9B<#I|M z!8ol%$kp)M?8kY0fg`KFl_A-+NElWa(opye<+4S{KKY)G`5Q2$gYMs0Km+yaYPS_q z>}z0h8-=-LiED&guMYeUk0iet(F;V?YNj3I>r!gtx%Yzf*Wvm^Xd3n;V!YMo0%pBO z0|W$)k|yG5)ilT7)D+gT$jQmhdC zU3gQJ9_W2K^S@m2I7DB7((3fW<^1*{OzGne)P1*e;r8qQuf^lSAawnIHTRuiO?}P28;~MM5v7Bup!6oagLFX2=& zB7_<#LI6btm4F~k=^#Y`>7fJ?6bQZd8jvC#2@pCtJOA^(AMUx&bMJ@q;haw^*=y}t zYi7-!`OVCF_6`$5Hva8ay_zNa>@#X;#UJn!-En?zQF){j{lKhKr8)GCmewmWKXr8b z`=)h|5Kq}|nejl26qDe%^vFP_nwMPp-;?kR+gnd~uQ8ZEy3obE&Bf60bkA<3r*MQ* zz0im8iW(L+;%Qep|ZgGIBg~%h_E*W0ye;|54tFG7rzEb@KyMGDzg!WAb2M z*FofDkj=AIMc}R~y$dUiKOijld-4xrsXy0Jdjp-%RIKkyUY_XRP#{y_{4o@Dta(d z^-Ln7hEUX7QpFZ0qfwcU)nd^I4%U@OkVaV-UA7YT6DTF*{55BN;S<%+8i*BgN9Vl| z%KHAB1}X3^#Qbw;8^eHw;jgtkq=E{m(4O%F&CD6;S@)an!oB+_N8EH<&dr}M>m1R3 zyw^HXwbEoW22bxcxP-uSe%~-pYs}i6wQ3MzUUG+QBXec@%)T(a{}2ZCo{WYDYQi1o z4oTihx_5FF7br|=G>DA#dYZm3Zt{&koHY)~92C2M^Y1;TAj%`c1QKnjzZIb}heif$ zPsSu-Y&TwuaOB1>8$J9coS^Dsmi^VFi-vr7bd3g9SWllNbNNDEArrk)migshranA@ z;?INv)w9h^aD%U?wIH(o{3-W*Af%>&$v+$wkr&HL8{M(N3L76+ozBy-X_9`ur!Feo zHZwDRz1?YkuFKtCq1dCd(1$?>2r`>)CqF^h?VGr8tlR=dQF{T$l|?bosJ=eb;;~*` zk3OHd<#M)rvL#7YUnouq*IBD}#!!eY>6})(QY0>!Qb(Xz^b}_KXFkQo=yN7sR1i#a zC!FH&Yv;U)&KNt>cb~Ix5(+NwR0lqv1^w~Ff2=QfBw8yS`bz>KTsd5`!9Tn%_=F~| zvTdW;f0?#eB>wlbY3U+X!kBO3AVHS7x@lEiIgoO+aH0nIKZKX*ZSl z`UTnK^z{Omkrp(4ChyQ4vBbv{FfhF7OwV=?E7Ilb@z@_~{pjKyzT9i$CtIv^4|6RO%(34>#F zog*?Z=QCNvH9I5=#Qe$+vC4%!6!K|~e_bRLy)VP2Q!3JxvnQhXo254OOmJqUVj*2BjOd9N?Sn;;XH@U#0LvwpJ^P-WFKVB-(`H=9s z6c{8^WI_Y8JH5}r!^D5Di1*O<=bc*zGu)+B4qvL~hz2#DZw@dq*`8TDzTu2#V0|aX zBK&Dv#ce>#SzYRw+@8O_5DCW9 z?7GaMf_sT;Rz3e_M-N-9tm!ec4aDB+8^2}*{KmdG@q#S|m%wtflgM%v{;OPcAM1?d z;Y{#l<%6lJY*ys&KRZXXigvOVHKIy1z*oM^>Up5PO?Z50*^u;Dty`DX7JT6H@X_<} z4XXTNtC+2-9G~Bh7lfDc_8;M*N6_lQr-oV?6P}N+V@^Ly{IPLQuH31cD8vYrq}+D& z{+JR|^kl#J>A{nl5Qf;tE(^jO!v4nEk2aa&ieQ_D4!iezD6CtS9e-22+vF@>F5%RM zw%?BWd^>>=-hQjkdLckOxVH3r;M7>qM=w}+kYP6m#2d9J-fBxFr>j>Ab>x-snvZ`} zLpy5Jop)HhR7jJdKd1Tro!@l_Z!4EfwW^q3EEfVV^ zAg;V0H#vD*NY%sLWKx-}O!ATU$M_VI@lI8EWt$WVxSg|oAQgIVmEz%$aVWW#<(JT7 zRl*edz)uxN%YCHA?6>#Drzu-aD8iG~NorX8=f;DOf%lgc*j+m+)!v`!sZe z3=a*5BRzk(?gq7>4&L`H(VqqG5ZYAnpOzw*{&YQDrWbJM><>P1e*0Vz6C1ji$wVNm zW*#U1yH|*&;}0ZQKyzL3Y|mzTh0c#7?f%;xdeYq~h3M?i`?V#q!KF95FT0>CpbGyrx4E`FKdgcFNx__rj z*zlmM;5_k}+M@ojbOy(BFO)5IDSHrJJyo94#LTxR-1YwZnA8XHQNaR^x@tBZ`G6HB zZD^6~gymFJuG~_}L6C0Ux7H+VDMt8CXi~cKmPRWrq@=rr&ETb|pur4gReM2LV#q*q z$>46iv2j}RRaI-xo+n0Pf=rJRr{JwpytBn$3Ldp5`xn`RFTBn#$+v3D@vusRJbVrJ zdA(|R`!gCJqYr+8Dqy`&_4GcLGiT}S-YqhPKSPDHY26$vzm+w&I}R_?D@Mss z_ZChlg2H{u(I@aVgjKp0qkFu?n3{OZ72)2}JvDBVXFCJgSR6DLvJHgDpYvbFM%0(E z8J>qYQzgdqjLGFeBW73^s2sO#*5?BrA1@_rr|+`u?-tGK^1ue`TtA?_ z_EYqtTuPO#qsp7hvyG7QR%DyO(9;_c?jB{KGPZeB8)UE#vm{1)l;8M->rj`25(>K+ zKluzhMqx;tr*6-N-W#7~)nPsP%V?_5ArsU2vrtBbYfVwVRCe<44&z3&gj`B&rv!BT zNzT+Yj8UZ%M{#D4x!VGNWj0K99Hw}^`W0<-&F9fAizVdZRa)8Ke01Jz6eoXMtOd@Y zU9?|W`>$^Osb7@KRl4A2M;5wNqtqNt;GOZR>bb19OY3jY^wXeNB$A!4b{y(DfxD1c zH~FZcG~I%pAWfr(UKLC_D$3RWJ<&&9szy&lZvU_|{5F zvEvuattt_JLpX+mtn_C!t$;=0rCiI>1*X0P!qB1Zeo20uDwBJ_NzeN-i5PL!XRil* zOdX=KCq0KHV^VI7c`eBlNXQBPVQu}i-*Hz&eMOFbBP0K2#n%r?G_y{9M=rhk65=*njG+L(f#FnrOC_)XycRGF*d z(vSWLPCBmqXEUVr=H2n2g)MDW?RL+>Yq!cHyyvl^UTgfp=S3N2ph*hUHGbDqy~?AN zE)_DMDG5rmTmKMV9meHO8&h4A&_peY)f?t8L?LOL0>vAwCcz84P`@&RxAlzSB7a$Fv%|=nyCMBB4h`d3-3?xJe?uzdz=y8I4qg=qL`l-rp;kzcj7p;QzS?z zS36<{TDLJ51^ZgANF@KOOmIB7?G%1}9QyHKxWjy#XgxI{1=%5lde(1C^oi%f% z*k1^3@b6qedR!cIg9Bn+cWyA1f2m8+r=S#v8Vj&+n?`mTF`xLuzBs%>xUy$@(S&di zUbj2Qz3o}eU~(btn3bIJT`4> ze(J29SHbn8CPtd$V<-%UCIEqTx#sme5z)HoYq^@C-*Fod*Fp)`AJC%W@~!>49xMHY z^M0A1lWY?&JIz<5%kN__lY`~$LA!*OzVVdNH~BAg7v4-eR3J1_kG;ON-P9LCtdVF2 zX;mj~!-oP&>rq1Z);<-h(8IZ!Fr5`KuiVSrVZ*l?RXujW*M`(uRKfHd9ZDf8)(0J% zOZXzqMEZWbj>y{6rVHt`;)>SVj1qm49LYRi0>$-Vv5fof5Br~NE=}W{Ao3eYZ8>d< z)~|;7iV`y5UNbT~4b^75?A$-9dlWVTOAEsA<%F|JLj7rXz}czTUXL7ma8@y_db&0% z#F&pa@LF|`Y(T_Q-)MoZN%n}>wFi%e$I>Pkygz1a4cF}yHsYg8N)O4u3&!%f7_Fex zE>k>Hz9#un`APDqZ7TKURMc$MvxOOoHH8>sjt%?R0DnHVsfAR;S|%#R>nw1+ZtOj5 zn;!Nz5Bs9xY0FM>=t`!?M^7kvG7dJJitgEe5!x*)dtT~^>|`8;y=~{p#l<0}EgW4k zcLu^uL9kF!EBgVwzizcl zbWFSB;y_8~lad$Kd)Y}7-a+#76n z?u5{A>;=$lO8SdIHiJPoj31JnY1e=Y|Kbn5>*is+svX^fx||yt%O1V`wft@dFu=GZ@*ql#tsQoB0v)$s{Y=HcT`7 zz2YqlM;3y175KM#{+E^h-_$6AsruUsb9469kH~@XFQm?HRdbdM1<}AI=V8*N3}hc{ zDRGPx@VFs#uY&Ye882y!vri{g6CR`D+yJ_m=|h|lwJ;!)#B|fjIG&0B~ckXcT+45SE?fRzQ{qmtwQ;phH$Nzn59$TKjv85qWjQde~5u^2ZMvbyvjy>Zi` z_lK{7MY3LZue=H8KbIg>=7&7Oqi@=lpgwn4%sH8p{WJOF! z2&U!-9~62VY*|cQd)878=ioRyy74(ehju0D$#fc*KQhi*USA$4o>p+%R& zF@B6E8i&gioLMO!L)!Ve_N%Z*e63gakH$5MjG`Q)eOs-y0{9gbsS>=PgX@k^Zhi$* zmrDSk`F|y#0E!A2lj*G_P33>1?eOeqi$@ao!JN{+?6HSu*JU#)EU50;tPy1PLJ`qD zAeSB>3fx?C{NT;@CF-3+)odka*pJ_VmP%HkE?rDZP8V6zK(KE1tYD(~Sdxog=mT|LPNRzB zRMCv2U|B(Nd`x1duoo5s;Zg|TGjX*hTb#tv>1f$kK#gyhCH|@oEpN0~wKkZRvuG=V zi%FYj=-qAee5hCIvBXwc@=|?~MfI*i1&=LusDPw7X3?BQT%D9I$)TamkUk zvUHJbk2BuG9SGN4%^@Wl%2K{4+C|oF>8LcL>|uVOzklt+ezp*M!KM3LSaxjD&Tc@% z^A%2^@77ZZ@G#Re7>C8(r$>wMu+TPEOKn*)#Em)o+lY5eIL3PZw;W;%HI0u#1y<7H zU#T-omLotYGsDiOZn_wkrp0mFo`Q9K9B_}RBf(qzp36-no_ zT{~;p?<+EFny~r(zS}cks@D5sS&aMjCDR<0oyj~c)EBhAv)shr<*GraG)y~Py zh__W9yXlZMdr49{mz-HA9!>0dqeW%{ zM)q0o^ClV|550PIF@$ut!NEtief_IbVs$-}O9wV{kKGt)Jk*+gnncflhZ*3!roC5# z)4L{Hx}I1!59(gI-K9|HGDAOxZ=}Tr_qj+gu3!MKmGH343YsME!-)p|Mx}o zonfTx?1594K+WkT_%X@`7H%2tNlIrjV$1?bJA8Da+^xVoa`wz>0Y}aah?6gsmkWw5 z8F@}ilsI)qL2FD z>^@-@MPRE@DnF}}f{_>l&ZB2K;fyI?F_I++$e2Gzdeg@EXj}#|)bT5+vr8UR85|zL z*A6E>qogt9M2PX=0%sH5<6+3hO)9x0%=KI_VY|3eM7not4tz3if4%dXQjM1g4#aQx z(%MUI{d2O1*QkjY&;E}zYPfSemhiL86cTn4xbC#=9^8@2vEnTQrmk##M(;^)=S6EDq=$l9dvJ z75i+^5+*NmK=i}EkZ5l3NmLNjlK)RdA=T{U69CZR^)%H@|9h2(e-$pk0tAo}XI*2| zjGB2aidXo(x+>Ve+Wk2KU{G%=7pA5JDB_s-i$>Pw>=RyTxwT?Ke-~sN?UkyizB%@0 zwhrmTo*ri&wg)TZA4U8@d7rhW^1x!3c@-xg2mU<|P})NP%J4^zBtU}J=+0aci z>JY09(9!R+*)1$C?$L=j{&Buv>^`m6=6||4%~&%rzLx~w2ux>U8^M!P~JQM)K`}r^pkCE zd{;QX-8j*mpe#}i^YwkPZa4!^f)Uhf8C65 z;-QECcQXZ^+z}7UMB`?bBDX^hRo}RsBK`?%8)-?3p)?{9=!b5 zV8My6pa>^?)ck9;!|iCkW7W->6o`K)HOl`g_Vn{<0Nx3oc^cqc;qaS__jXWf494}n zIpb2~5tv_kAGAIMeJzmMs1IhbG9QFmX0q6mkI<>j8EbOK8)N4ZRbFyHAfUP`bY~uS}0VnN{ptl+d{xMx_Ge7jx=e70^C9 zx;gwbHE)MN_Wdh;HZw!Q5d0qhgUmY#ccL)2qzoS*@HTfvl-<(ujk~1)i3^-+zi@I3 zD=Qv51f{R-ucB|F3n|%VDuS?PF9JiBKKGxO33sWyKjfiNq1#gW)XEvOb^`~DBN4Y* zB`&sZ1y?VwHeF97fRtUX0D54Q^{xY?G0@)pK`0g`x<`M9BH5XH|1eiq8Hc!rqYGCS z{Ngrj?fN=HFx^~xaC9TbHzM(H_SRHL{LbtxmwDoXnug83xH+k7&#F0YztfJsw`RP^ zWp^;YO%tGiaFUNKBePFl`>BZ?W#d}#iT=(B8J@C(R_(L$%0+EASEvt`p{)O^mE!YRMfZ+f?WhA3vb$@` zwHxkL#)Lozg;yE;0E0Hvi)z+9(yWMZvT^A;?S`BidP&f$jTXFIK=AN@m$T`XBxzX^ z*qN?0nQ~V(VbMuX2mf%-cHlX=y&Ybf^V?H0B8VxY399lrs}$>yMi~Fo2>^ni^rECD zSoJcX4Xg79PO9us&}f40ibo&^t~AB~iJm{~l$%5B0geOWBN z=}d6b-FX!Q8nNzCOJIc;B$G9QfnE(rq6O!Ea^9*Mwync`a>^IF6x)|J5r+OaG&B-` zCX}e+e+D4#|BZk(8W|cH z86GIIas$965E~T7+5AyeP>`C&bT6{Ck#V1gM#O>^l^zU)O6dAHr(t8pvwT|h68bNS zK^VdTn$sSsY0H=f>BwO4!bd3)xo|;RS?0p&1fD4p@Tl5XZ5p~c_eEOSA4+)n13jy( z9DztI{H6@ms4utFdPt|?3sPVPDX8YnQ#gMi{^JCh*+Q+afZE(S zNXz5-p#2W`D%!q=vn#61(Mr^S8a34TrB)X*PYIODjL4gM;W=>}KLC8|e?^ugWF!mK z&raO}oj0#~6A4WseSP*kg#^@s1h78_@4MAG2tV}{7^JzY2^g%QB?G-oG}}ST7&uK!YATA%Or{FfH!O++2x(FZ*u~H z#zt~DnTu}yPuq6TX^r!cP1r(jy82dK~ECr*R}*j8uTV!*v^2F zGx&CN5QG4LBcr$4uZnw)8J>@Wf42gkprFSfN^A=mLtI$&y(W^2iV6y;c^sKX<3l93 zg}daosutwHK;B-;Q1*t|pWbUK;I`#)@XqJysD3^}ZAYRHs;x`GiCJGVbAJ39VsE@k zak1l0jJ1)HdlQH|wQtUa?=6yjsE1H@_&fxqh5;AY0$#W$tDBJe9h52~2_^3`xPWPy zH_#=r7#Acchj4W^r>iFM1src@ue(ujk^}aa9(k+X0f$V8&wIQTJ-!{XY><8U?!R&YsVAh)Ew>B>@j6uXYZ#ZZ8f`Zgs0hOLWoq2Cz9 zE1RHD*Pw<^W~F|EEHZ$?mr8$_qReFm(t90FmM^3)i~2hy`<0_R1BoF8%9Kec4U&5W zgxgrS&rA``9K^kVgEVq*y#iwyff7xmi(F}YLU=L^dL(5ulk4$+$ zH9BVWZh8$C4Cf7X5{708!bXD&jSjsA5^XUo7~o>yR=kxke2zRasX%n zmBo~ki>uy``YO&E1FkI!+ygytcgsRK6wUzecVMFf##A>!I*cHl=N8;Yh1MXqM1yyd zEQ_U5gAZtv08yaul)HWyx}!)SwlDTRd9u*}YL`eTHzwvkOMdZEqlAOI06Ow;m_h*l z!7lBJf5;LWaZNM%Jo13*cd z@UK~r$(^k|6L~QC(|;FSNA?lLo-e4aAyosQ9^b#fS;qZCOT+FhJ2^mfjQF|fiDq}B zhQcuFe}?^AIB?=Xi_DN4fU+A=q8#9QU(Rbik^E<7?IseWOQ7-iTWwJJrF>(kkoiXx z9?gwl4fg3*a>|W_WsWjs;!_2dYRA7xMxvl)BE-(ZhhwkOJ4F@OGfAyGt-b%*tIy$N z{yK!KtoM?9z)TzeW$&h~GoKKDe(UdC_f1HEtm|{( zTm!1)6aj(S0u(?~rq44f#hfteOY0wELpvewKw5IruZbhx<|TtR$r)S<`PoDJOaHJw z*TCSft^ub1!i~Q{e~N%+_hJ>qNZ#h^{&K*)E$2hWrd*EwG{RDbk z&=d%+BbOMksngK0rXrhvjT5cF1ra%Wk4V?v$1vQRrbV06Udmmp7a^u**6+n35tU7U zlXq2p+0li1%2&Wg0)&%;`c>P@nKAIn@f8S7=jqRveiJ~ny>YPGv6?>C#|`?d%CN1I z`EA;OFY~Vz9hIHXcHri}eAgkk;|WpvkM8s?;^aE37thXm5+If$h_=m zdmUmn_^j=dpbaOJ=nhJ-*l62`D^6`C1%%VW$x=#)Xiyb*q=S39fR`haiju$m%d!jr zz(+?@M<F(h{AD+`-&(+5IvlrSOVm=KG zonnM2mdBNwiQK0#bBZVVxzd*^;p>{{{*n5;j0~#=l)-9KA=v#s=z;AIK)hzqu&uG( zGYF>?ovDdX5tyl<|Jce&gxjBdHU>enl;8tCt4ZB;*P~kjPGmwJ2X-eGn~LSVWuS(a xunpQr5S?q8B!M0P2n6UI95^>XL5zUO07Z!VIj#PUPVfq#r)8-5LbugIcOm1%Oz2D#G_j$h0>swyWKaMkJpS{;!dzJTEd+igUud6{#!Ab!D0JY|g z>$d=aGzS1ko}45Ge;E@YdI|ui0nO_wMt&KqQ>Usg`a-!5@R@=3Nl$7A$SyF3Cf_)1 z^Y}&E{CMi;Hfa|hAyG29$VYRY&l2U~bhyu&x*1!W8LFtr)f+SHT$~G?u6ATHZftXNkW@rwAKLUIUJC!&p9qM*FwL#i$9@;L zITgNz4E~{keve;4A8BBqODix3TyoEWJc%fmhViJ|@keX?u`ie3IITQ}L+NPtu-C+* z(c4`<2ESF`bdaxf+$&BV6Yekl{aaEtY;FtRS`#b`D4X3?dwNOXa1TpE0r_w=AT+g? zk8YUd3tnYkA_F`V*TO0@4QjPJeQu7g^EXvBd|E#ET)f+NW$KHKNT#rIEi(}?cpjus zPiYIDE9G{4sES{Ni!itX{b$E7^CPd=HWVK=O>r2HVh$I`7gF86Rg!*TyZ{b+g8ll^ zmt}0*gx@q9xdm1gNdi=>*IIY_=B^r4NZH6B3v?+W}-c>`sBWM z3SJJLq4Yfgw$HIW!9G*b&WWGw3BKY}slj>gXs9n}o$C=et5{Nzz$G@=><($dQA+IO-nRrjh2uRs zWL-8(X+j}Y)kR9xY-Eo}y*SrR&HB3Utl-cWm7A{wi`%gqo^}G1@4of>%3^{a)ZStP ziTzw=86bwsJURhPJcCeGMNy zpI`t$=uyTPr`Dg*kg8&qom7V?B^sRR=$8Qi;kZI(e`GY<@f?Z&>uC9FQFeE&-tR3Wlho zV`L@w1x!NxQLmdl)~2pXW6O>M2nop-rZ|Y*E~4d0cxI3w{7^jluzKr46ArSKeLBK8 zQy6>s=Jk~qWY4^Fc>Vq2>ZTS0FE#KrC}n(+CI)gMwJO*k6WG>r#UwOrdd1wtB!z1X zA1!RY>&qv-HXPk_Kr14Us)~}b8UA|nfS2;A9g9l-zQ;}ED{RK(z6`L2P2-YR$oL`_ zrkFM*G6jTOCThPCtB5#o#?Qaal9RMk3gq;A1F7U#a19(q%QRUjPDSP8(2qMlKB2Hf zrk8E^Ofs{F)}xiMWL&CjLN>m3bq#AOo$^qlRIyr>>xwGa8Zyg()w4183Le`oru!{^ zq`#@;b6=f*T(`g~%bH6-94YGdGz#jFtW$W%Du^Ep)qCl7MO{bIXNuVHi@7`f3HB*R z004>7h<%&#(q(6HV$3njj$HLZgh4E$-radqo`o0hau>dRK;dvjECIo22~~R}T$~GI zJ#30D@sBZ^Z|QiR@(%k|LsQWu-xk+pPeqx4;i%fvM^e$DdhbfC}0=>q?TU=6hoxmqo+lkO+uuV`dk6aVYU-kG>jmP=Srr zq3+DENtP0rN}c^m$(y=u<1Na-I-#D^El)XbIR9PXrqpxGif+~1$s)0u_}9?>;mC8X zA^t31)h{&RM?@4@KoOG`W0RCm-(**O_|4h(=r-mkRvsq*A|uz*n5mBbq<0$hn6Bsk zuXHArw&mG7F5cN)J&O1P*$)?suy^6zi9Kwx#M&k8*Wo4?Sw($EgBOq2 zzgtzM&LQqWzQBA%vf_C-#)C-!?&&X?KFhDlk7fk%^DDvC*oAOki!-G^sxW)4>w4HM zlt#Gjq_2I43{$tw@OD10t{$diZCaFF6~lEET5d3R{U+SSHT6>gq!e->HYM2kX8G}k zj=GNVyKhjI_A#kD@2+Vn8j1F4u3Ysx;5QC@Ii4K!d{?o*Kxobni-UBTyFbCyO?+AZ zV6~9_jat@*9XRb};Mk^tpT^>j(@80&(5if#2m0lxQ=3ond=G-=ty2p8X1AkQ_aC}{ z8~8C<)n37O2wgkux+H^-jY5nqT-TQNIv2U1FM2fg^wf}mO!jPty25aocgyq}9+MmU z;bfN3)xl)T1j9GG2AGQO2T=i(x$a0n;7X~W7Ne)ll6sbhO&tj!^sZ31n2vcKiKA^= zw?7VAwZU(vMIN`vS>6?G=`VR;)I0z$7HML>I^G}H*4x+}Up={ik$!>R!{L93V30du z%0?&|Or%FQl!*82=pgY2N}uBn%uzU3FQjP~k}-+ZFEPvV_|_xasnkV7AM)9uW#EY$ z?wQ*&ecvKcr}{ryau&-g%F ze#f0S<~)9V6dzD>&9eQ48>azc>9bW;3@T2gtFDWAhdx@G;GEJ_)Fa|m)QKFb!pK=N zV>m7W5#y)92f%s0X~HG%_k~+aTN~X_0pf)(%Vt2x$d^By@6^2XTNA;Qux!iyy2;$Ild48$Ai#Y&Ly7t>e?l9GbPHhg1&#?YT*2+|>Jn6pJ);$mZer;JcuNuDUw0x40%44^jw3 zK0{_8s~-)valW(T)9y`i+FZw?YjKf!UikD@_R+=#TcS4pWVMm+Wc z7k+bey`#5{B;OW^tii9Mb+_poXn_zG$CfLPR^KV&mf(E&v+uFJhqa-@vO#;HDVF$L z9Aqz+_8Y#(ZStUy&vGlY*uJhDgfJ6cqDI(0Nm{W@wyE$<^pqrr?nKw(TPZFt(n_jJ z0MIW)q+uGmq%J*>C!HbvV(sYRoi>B)#twC(*CZ@1qba-cVZa~2XM5j+iq$P7NtPegfLz%6B+^lrGb zfVIc3aiR(A*DOCy`^ItWAnaR?o??!jv`6oUFX<0D$b?K!#vdIWRArj^eu+S3DUS0k z2wKA8ZnLV>a!)jj0)UmenS0bIj>8YdX8X=_XIj%p98K1AER45$9?t5wQ*S%a2BNn8 zuT9&7D7kWc|55IFrq#m)ts=+Juy*3qIpZsltKY~xNN>gNJ6x$@KM>D2E2t!()z<{*dFx)!L$n!lWXTPM=(?nbG2Wz>ajs*bp+ zOP=?VEH$ON8E27N4aJF}`410g``|oHD6O*K+VPI2Gu{z>V!6&O)gaEqKzWyCgTIIP9Q9%SX-X2(?WFBxt{i1nPV zbkurVh}wCn{3-ga&{T=Q^hv@<7YHLAA?oUQd`w`l)L`qEzSX_4dwdEmJv6r(!b_(v z;1Cx^bFr~$eyiIvABvq+i@Q@w1M%#7G6Cghkgu_W0z7OUPv~?c>rb^>*(a>$??&@!t zWF}uql#)?_0mY}DQZpVHo4hQdjxL*d8}Iz4+twB*Sx}J;vsS7J;B$suSiOyQZ-UFk zh<=^F$OVRL=cX?S;#q@+7ulfX<>OM`RoR;JQf*o4j5qt)QnuCjLb0)#9n+qwp=3kR zZcIr(CZqCiUWh@-KNwcH2Q~Q8|Kh=-1boV3{;HJ*f`5K4YW`JwNehjj)cX&+u1ZUp z#terQ-)MI-Bf|!QWABey&X(|pUsgtTOEY%&Up3q`boQ8#yIC#MaTN&Jb~zc9kWFn@ z{A~QpeaMSAOQ9T*=`ZckU3g@-qfLv76E+v&s6J(BcTA^HC(yd2ewp&>rgJ-u>-Q^0 z9sT!{*9E3<>8pK%IuiBfR*KSY=uE>@g|AL7RV))bMVRr<+|)mF0dQJZebIpfeopG# zZ(Lpd9bs9)z2D2rd3Xc5B7>GKV4lRljaWwZp_Mf_`ZdzW+9-BKEG$cN_i9MF@h4%i zPPPg0Ld*gG2cgX`;*sH;G7s0s&9CLUB}5xUiw%l)sgGT~XSkc2z7ix=wF;?~JGN!C z*(PP*w{&}Xb!4LUs0Mbux}QFMD6cHf;0-yztw|iSvFR+hJvHv@WF&v=pqZ~OwU}8{ zG=EeMS!sstlNuhZcR!A5tZ2(w&D|81zBTB3W$wojk@V*7$#GC-4tq6q;1$$vZ#|XL z1(=O$g1DYbX48#qpE2N$j6QgqCstzhtml=^(W|eA0;OMvv&SOJ$bk^<=}Q+NU(qR+ z+nJQqI#O*hC8MunM20MsL~R^5j;gw=XjF%yUk5K0<_|`@=dEb9@PeucKtn4D59=-5lKe3RdhEy>O3 zA;Z{Rly)KFn1BDUK{a|L&BF$rhYfRsqm%m-zpd$8ONAI9Ezp_XT?v^L3EzWThicqe zoEEvv-eL>9hHXNzOx^Dwz31j(qShoQ9(3dz|0Jt`{N4b_^%-19$KI;2Y26<&u;Z z)rGOFitbBywiX{mbkIGiV7u+RW!|i$2ZVGwwip^$a z6~cp)Ts}t%h|2wul!8-(nFE0PAu$c%67cUXf<$TF?Iu|VpY&ij$~vXvwWDy7z8%$+ z?EP9PMSL-O?-1;w`C|2Sjw5<9@JE~8YJwZp&Qm03)AtxYLcWgftULG@7%;D2ImQq& z9wDj19MaW<1O)J)D3Xxm`?tBWf0sx5-+88=QojDdcU1uZlI|SW1n-Iv1Ik}vYnJ!0 zaj`J5hK=XiBCDwVtl+)AgLNXH76XaxuOZJ4Gg7 zuo!Z%lt4#EQf!>eBg=0KL|g6fguF7;DgW@ZpkbtUQZD@?&0g6}tSKh*#w~Yuj@8rC`{KT;GYb9Ydw#P$e%l z;q;e}d!PPlbo-?_WlSIbdnT>?dy(PkT{$;7-0BcX&#nH?mmD6@OI+DusLu2``ksxL zZZst6Imiw^C{*wrt$fM9c=wM66lO{OJ_h^S3vSSF17-+p19n}ZINL`n$CM(CnN%n0 zF>ev#aqW;LbdAzJ)Bj}GRG;0Vl8)g}IDXkT6|ncksbu0& zD0z0!=0H!n6e(*#PK3eFcFTeeatd2h_F1sQ74zD$Zq}NBZ9ku8=%V}1-{+K+y2YIz ztF*CQtQ6>6(t?2EB;URvO)LCIH+$2gdJ|sU{cpm#pa=O}Xbz{G9M9Z8nk=r)2Qwr= zV9xlSU=NLwmMLF!)jecs8~;y^P^6_EP)z7r?r$<#y2n81(|s^UILN`AnWQ*rCgsl= ztE<=#KkxbsTYF26@LQP5CG$o3FMP1iX8gzEe3f-vDO%<0UL7$%K2+j z(Cp*MGIClDn%i<-dp|D32H7KPg&&dqgEizdoI%^Ufx3zvb|WP|B>B4`Uz~>>510XBTd`cqw5RWwytrp zqmX6#C04q*_lPv?FbEAroP8b07SBGoeO85VztFE0pfj{oK`uF4!ngMA%R%XHmf}3l z*Bkk}O0Bc^y9lo@b^j2sJJ1CfAmp1l^r}lc{lsLqwnPYPT$c# zHHgm9x;btfioEBG#zpIgA|Xvjlb*V?652m?5ER^DlYXCrj|)mic^rAwMbP;^#BO1E z(1l@Tm4$1++H9J!y4xrojhi=B;Rp0X%Y(l6R@LIFT+;ro%3kfR*>ac+f);*C_X(ae z{|7sghfyIHwqEtE!seTE^=tAqVxbFifqIIj3qOi}Gc^sA+t(V#SPas0dCSF4r(wgo zPX5U2r}jkt8q2m?c3Rqfy1!Tvs$J6ZiB_r6$HjmKH=+8E`RpR#GkeyL>=cfsRPjgu zT$$v7<&Xa0lAlrR3sKBM;PKNrTa@1CU$BoImKGPu5JD9liC`R!HN{m;xH``uf8-py0hN(bLuX@llw^hy4jiblk% z^q%aXgXH3-KyIV8y@?3~oHpyAG2w3}_9{blV@=J@Dxbvc-o{)Y*I_41F|s>t7mZ&` z=F56B7RT-c6taaOIuKNou`2I&jm zEVn%EFmeo!4Sy&8ciC4oI|-(A{=K{V*FNwR09=(Lm{4rXCk+xnS)qEG;5h$BaKazR z;M?K`0O<3909U^OTrtA`_l&?HLl#dFQlJ0jOW6q^BrUVr+i({*J(CY&0Zy}j0|Ndf zSN`)qn*ZeA!)-qTbo>e7CME)Y!N~uiKcdA3p{_j?oJLx3KD8GW;k1 zI7}570bu#!G>GNuYEj@Uy$97u!R7gn+ou2AME%d)S=uVx{4*Co5ZY%b0uCS7G?%h% zqUBTsKKwF)y?GVK)-x z*U|;!enIieWjQvZk6K?_z?NDc8U1=UEmcj>A?=TtB7ZPEheGR<| z3#-3>(&@g&Akh;tSCCK#pId{Nnp)6YRQbd9=yyt21_9jQY>LFFA4Mf2_fxNDAM+99|V63ZrJP;JXYss`1NEkMC$lkEc|$z3=-JIb{Vl~`^KBoZ_Ox}@Si?fU17cl*^&NsFaeJe)~C-i;-{^$Uw$qW1eriAf7#-A{1UABG1nZvK8!NTjqer*tqEyrMz;>KC|{xT4AERRN-{bo_3t zJz9|Ludes@eUH6%uNwVkCoeDj@#VYCasIg55Cu%5=kHDu$r>>Vn1Gpmk&}P%`J!>Z z8kMvpWMa<~65KT+Y)-8CYs^G47gXgw6a&R-B5O(GbN+{VRhfCOv* z9yea*Clnr@Cl!&#!ZBAr2Fw2TLt3Qw`a>>wZm5X_uB4++{}vyK>7?MJc;BWK%!xl| zh)^VOb&hi!qM$Ub!SO-FipgRxCF*BY!^u zXM0pCWeMB=OLo#yPf*k^5^2mYppHj4M5IOjCMY-*Zat;(+tc5ImXZb( ztz#yaX8A3yN#DP(?yV*o>i*WN{?DH+^oiQ5Y9UHPC-MA$ggW$zWEp|IrsEr?zj?&V zyZo3!8nN(^5;kp*+BN(=8fY6}OKQOw4B{{8rK5wWq|mUNQG?d+XPEK-!AJh#>uh%J z{N)$|!2Q2rO(q7==KcFr&c93Z{PUS0=-%x3T&EI`6#e!bz@fq!|KB&E?t+HABy*+s zS7PJ8Xww~fgW($qO}pi9am!hOAc80)WJEj>wF@YrsTUq#&ca;Q-Qg+#7zsp*hM~~u z&WCMHjk^pfcbNg8^c|Qi5ZL)j*CPSCxKIN2NE=$q*zC=Q4iVBDpsPCry1I}eO{t%0 zJtAP32l8e>s$bowIG6C#hvyW4ekA7JnccU?Ez*R12L~b1QJPZ7#08BRxUbWI_%_d?O@4aI@> z*kcr)2Cm?f1vjLDc9xikRQcu4qcc^}4JSV_!WILU5C_wOG`;Vz#|R$GWmR-OaMNjV z;Ya_G8pa;NytgL|E5U39yGt3p3tqi9Jj?ODB!x2HR{spnckWgo0$T4VL zSk4_}k<3YtHM&}dU?U}e8pA}iEWShTa+|AHHUCGv9+juqju?rNS~HOmVOEPB zYbd#D{zQ-Nc9M}I(jeTFCw-o=`+j14kFuT8A;)1}-xVHZk^>+6(7-y1Xs0+6I}ynN zZTh}~hGNc%N$Vd=yBf{xU?R>4;!=m4&ClMPl6{_Xj$WNgy!Za1d{+Tm?sJQaP|toc z<{TE=`VxtpkEib^D}3p{EKf{h6$6T*lY#p)!$Vu6Jy=t0e7KGwR{}I|5XCd~bP3jT zbq_73hiNbfDp=$`o5O3U(bkhO!?fDEe6oSB^Sdp3GrMC8(Qt`xLHA*n*ahF@#^Uam z_%TtQD9$F=VRrTX&x_j4^io#-o_($QWR_Su5|SM(N@@EXP$Y@#*q>h5<;x2E@VaGG z08eBAtJ|B;s(AgWnWqliV;Wjlu?vz_{+|5PFx`BcdGFf92M|B&OZ|~DR_G#SvVXc?#F`>x^L7oMy9+J~=_|LuyU2svVLFB6k3IcY+ z&8X*$Vr11?3U>Hh%9Y$T2D(cg!5M@vPT%3q)CDn7_r`fZywitg zoTkvQZ<-lwV3aokXIKLpT;fo8NmTMVf*L2t4EJ9DGjvI&K^aR+$xBM!oYas| zpAN;Ec9>1yhBzEIxQ{CA9u(7XElCkBcp4BXwiB1vc?)${F;WZhMEJv%?Y zux^eeU4&lG^zixpkA`m^!1Y#D1)DXy{qVW|3}+Vsqc?l~xsWVU!Nz9#h2~a1 zW+-jX`$uY}6~Z=)8O6F%yrnKyafy?@RO`i?u|=Y@38hxFgV^PK#l_B>$%Ck39xd23 zEp&F6t*w6_7gBoNLxsGU-*BbkIsPybn;P1Mfn=Xp%)3Sr2D=qIWq)%+|2RTv_e%~$ z5h@p|*>sWLFV~M&kpeNhn4UBJ#B&viDKpuK-|ne8OcAiZPzv zf93^*J6rt|Z=>XkI`x=ER(X?C;+OWf#gOl!{VA+{HNTHK)v$%pmTXe!Zc-Xs?<;im zkMABm>7bsnjxp=a?c1r-yAJO9+*@CDJT~dz^vzRH>9FoG*b?$Qe{ZwNC=YXewz8Cb zSFkFAQHt&5`nhl>YGxdtsjICfQV16#=3-`WY3TVoGedUbD}J_97iAU-hW5r`ZoR(LQdN&)AiOq#w8FV^dX|n z?Xvle+q`8$k=DyljS4knXhFdU?XIR26_DMmd) z{1%?Y8GibRu|7Z@mrNG-q|xdyF0=DK59axm%br$p!AtA4zq5B?zCAPb1?3@Mzac=w|Q>(xR+95*NL^1 zXyy}ctKHfNW3b|oQuUGz!b_A_hafbk@-Z9H&_9DWwMjmAq8i())cd@wDz>+J&pyYU^8$8mbf93)vu1cF? zPVne?cgov7AHSS9ZxV=3?l1P8tw2&yr^C-zQUM{P7pJ-Tq4rlpi{HcPz>4DRiehEk zEU{J>CM}NF(03!yp~R@>gRH_J*PQbOxkLWDql1IDZWt_#*QG3{r^i1RVPyzsH2Z^j zm3^f2R~^4 zP(14KBfSl^yjW55>9t1e8&2A#iAsOlm3f_X$;;$MK^rB0Ld!_=0bMc{9$wN+8df=P z{;jjUInQ+}V4WGSe9{A>(jvByYWkB`Po;T)nJ^5eeEjZ9J>J03K15G`L{pELQP4n% zbaiq_=oblpA2WBwNreaj@t*VP5035>cHanVoh-9Mue~h`Cw&3$S?vjXT09%6-kMtz z)uJL1B;F_Faxv0s@Z_7EF1DLxLrd&(h|~6pA69$pApUXb!LRr73_KjfiO8?;%ZPn1 zS*pVC(%e~$Vw!*qHVuu3FNd($786l!es#MXSVak&&;QwV&k6R=x!p`v)*`RZ1c=3~ z2ZK9i3u(b9_)+c(-WwAfh{0rv;YHwNA|Yq(jOV=$@Oymt>OdU&2#qhoHo>u2-Iw?} z2=Bh9h624-y4S&O`g&d$ohuLxJy~D^7KD$SbwB-R({hFeUaf_`ZEgPWLxP)CoEoz# zgh{D-dNZf=aGQtn9xQ9ha0E3piZC3Hr@i9f;C6ea22!de)izQg_vkqZAkoa7Up+Ov z)Ye~|__B!S;4Jl$dbXQV{(4{3*EhR@M+iDIzBQs_z78*1S~q2+h<~;^9q0)JZ^JE8sEHCsc9l zPw(FzdP4%_m=V*Q7u}xZ-92}W`mI5Nrc}hzVD#gbtDW+`4!%h(LsNu)G8shn#vktM zMIc(jD5IRh63}R=Ct51|VY>WNV9=Hk5^BsAKqlrlD7N&B>boU$*rlP|!Y(bB(Z)TR zf242twO6vM)!?0ik0LXIGF|t+Reg`oJ`2_3Pw=2>JFQBd$Z>UJ)$r^q-Qudo#`_+Z zD__7(nW%4XJk6W!w`-f`=728L-M+fPEQ{nXGPN;$lf7iT)Nf$-X|X3~-$%LErC8tc zWt*D`+@xbka`KXrht)Yy4A@K<7xx4Lt1h#a&Qhwi=7M5yF;DK>x9fCN@Jg4KD)kya zF1a51gUeiU+qWtWm>Xb4=4-;VN#GCWKYD^WM3`#g<7T56M8tg@b?WaK5id4-4WvBE7fdk?}*@{NiL9khU}4Qpx-y zdM}G_nspi!EuJy7ql!T#j6Lq4C}NQfH>lEiHTS8%`Sru8Uj6)o(rs#1*;Fkr%o6;{ zb`9CY0Ee~$0G)SUaZ`N5)>ERHi^^Kh&8WV5_@kn^CGTo;T|3B6*!;Cxi#CwCb9VhHlQ%KXY_T+6Lb zP4#vo5hyVeh8~RJN-p5&cg)Nt-p~Hu9>db5T(?OfWtCsk%f9uq3Rp-nSW39QmZp3F zRt)^OYc8pP>zSMRnhyp$6LWdgqDI}OW`-tl-HVx0MY9{4hRq1l`Y+6 zhX?n{=%Aa(_qT30@`99@nR_rk0u$a=@9D@FX$A#H=C?Q*%0odPGfw7NFbAG=`2Tyo z3`ih&zzyg>ubrvO2Q+us$NJe_@UCd6sj_sjcg`dSy1-*kT*0EmAfL}#{| zh>9C0*eO4sy8tAW;9hJD8`dgp46Dcq0Y%Ac*DLR7)~cQoiZ3JyHzuL9-dWrT=L$TC z8q$^ZM89|+5 z503(q3^S^2bR2@-Z%h)$!46#;`u{mKSK*K^5l05jpUL{jn-uoE^xYcr=N({XG zF1GnE)|LGCybj@c_X1SbU{WBp8w4T_QE&#p(9sK`7I;#cv3Gf3?vMFj3El>7mJThs zj5iY4>54MKoO?oO>g)nhLkba!u5+VTLsZZH{%W*R~B=&RIU6OIJC>C%^~MvfzWb|IFsj&kddb zaI)@y;60R92&w1zic-oEVyjAtG3{#ks19mX(AbeN8iWEDHJeple_uEUXI13$I6q7l zny%ttXh0?vznT>vX-~rDyv{{@|8sl^E1--#Dg8_td;Ppz%cbDu8xI1cLPa&7>Ayxi zdEmfk$Q_thRv+~t_+*nUCqk27IhYurJJ01M2qA9eGTHdSV5&>p6 zC~3}*1jdW|Aq)-|`#Y{JZ6)VgF6?^Wx>V(&o3Jd}6*gd!Hrtb5zTO%eb5O3%Uga>Y znsd|oxq*n$J8CZoEsWI*GXNe$usTmn^Wdv*X}>S*&d;8_Eh$svg*{MWnX_NbVV^Gb z`%+Bc?oQhZA0@SrkJuGL7s2C)A}Z{8b?+4= zWD_xtdgM`CgGZijnpNhqS#(H}Mh(`|K6+(Y;tOtC3V_>gXG(Ax?>auK)L*GVh%5+V zhOU%KBqhG#p3jL&R0N9x!GvMx$zk7-0i5@1@r-8@;%;g+>FovRwV|$XQ2VUGd>fi= z@ruMpQ#a>mfgYiBjTX90wK^@8q@x~U;PbU+l|TYon!wqBVCv>N>B>{lGU+w7~Z#jN1y!r8fh3&yEtvWM&tEp!1gVbY(%cgV2+k#6w28=3fd|bpx2nWXk1u9`v^sud9#|im5ZMAAPY=4U%LN) zID2I^J0()@v)To}06yU?XX!X7^GOGwwh*cTe{JIqrF&dw=#c^sf(o=v1F4!k)}G)a z@qc}o^nXC)|D{radf>3;H}DjWpThP8Qt~nfRUamj#>NC(YHHe3ds+TQJ!v>?yX5Ni z($Y)_vE0TcB-gjI#ok+qw!wE7B|i83;ky$?y5J$?gI?V#JPpe52O44eH0vI2nodK( z?C`qWs^p4xdjMv&4AXBG{;?-w?A29eHzU-H;TZ?vdq&T0qkFx7bnQm$BBmn36<<#e z4A|wT zL8yxCLUlYfv&=|<>sm|m_c*NKA9~iuRiqnB0bjnOw`c*nnzm zZjPrGm4IdreSinZk7D1^N!&|xV9Zn>{-i8+RN!)B+S~)DxWD3BuhFxWPF@*b@8$D<%3cgewIUk+??^N zA2zpbnZnIf@7nFBbFiAz>ls_{xSkGEgc_Z_(v_G{n*UVIl7>_ijPRZ@1f`rM+Z}I} z!$Av0nkucg3vUImc|;xbhRc+G8+#o?B0Zs5cJ2x(Ux)ZHT+i#^p523mEnw)3`-^8S zyllDK-_d-_31Zt%)fLQUm@ahRsBgJG%zD;P-llEZgubfJKe1vf+bitV;6=vN$04C= z2EN)9!dLV9eG8-qD&CwGp{WT|yP)GBtVYB;D^{UT6o}sKqOrii>V19qn4^>e!eu?% z8n}m98MP7uf3z?cmYQ${OeL@sXLzuLrEPyFBY#GEiFcaYm~<}) z?cb+V1ahbY+S`@`FEx2C$2gLDat4)Pvkb^jk&3gwKAg6cb7JOoS!@tg5*QbPuyfae zrK^>GAHg!wKfV{>WOc<$HuKN${NgGz^y@*(som)Jwazaiv=z-x=bSKeT#OqjnTW2B z(&d(Mx;OZ@v`5Y7UE^kT0G^d2 zx2b1{^y3MN>u}}+nJ9qZ_iH^NzyVl+4BWVmLgY*BE!OTaCxubzzR=)n zty+#Y2}500LKa-{AqD)_HA zRP~Kz} zC4Gnmq15-q8?(L_lx?G_@N=rztcVF|dZpLh#EC((B};f%pMTfNp;yDQ`Om2GfT?(^-3{jEjCkcf3$43jEK_q z|L`1uX!@@JQCnL(*NLz(QHTI{EDHX&O63XI9XKW9UDx`2A0}QtNhhdT&EuE#($al@R)?ICV+H++>_p+~Sn}O~ST$ z-sp2({!i6DEx_OfNwR;fH2;StEr?ZsbHRXTuNRLn;K|5~)ks>4-OwqdW&M^mQHTdY z^sLU=KZ1PJeyLKl!*LAqI~L?$5C#u zxTz`#Hh+H&UZ*&iSs7@LRxp9?d7I-mDP!+pD-L^I*z7}4C5rLbj`E0=_ z6@iI2Qt^vL%y6u)YP5kKOF+Xl=#nb)$&&#?(FlDj_s;$V6{^fn{igz=p-G}IvZylc zO2meMMDVoB`Q&yMHmSE>kcD$@=6ZXw(86gSK*CWpHMQDXy~U5cW;t4t3~5PU zy;E{g`VumwCHtHl$ST;Lm!qEA#>NjRnPclUO};bqHR z>zLfOq|v(%XDVhbd{KiB=tuS^9)EHP-3Z~%)kKD&^jI~_taN6~T%_Jrv+PmL5D2D6m@-jg|pD&WT zyLgP`q~w#$y*PO%zY$@_vAKs!T*g-Y@Y%-G3_VqUqqk8vOhc zkedG(CRp<@^Grwu$Oq3&hkWWI{k#P5GX{Ef*ynErfi1D}nHy?sfb}Wq5Z-SCZQvLQ z&fR&)K($d&Z^3;cz^R}^U1zhv8rd6J#YHU(n){Q|A!%Ou(ek6GU597--!@cbH>zmB zz9wr_Sl&YJDk+RgB#m4oV081o0@`P zc~>v%&Z574<}tXFol$i}#kXc{yVM3o+53l8eJ2T4P?@xP!Xb7&$u=~Vv_UH~xTgKJLLT^?HjpS&&TW!~Yz}||WXa2C zk`tQUL_$SE`d?r)9A@bd`=mm;dv!|fmUAhE}bV3`ReBT ze$HMLQR(?fFs&YdO{HGodTi821SrR!Xlu41%oEHSjL@#{_fWbex?R5* zDYHJlfo%%>#HR-qj0!#gD{8AjR##S5&8|-F&4?(*sj=1FZQ?t9?h5E1UV&Ae%zf@` z5gl@6E>r#kMJAT-Y7vN9MRdy^80rv%6h*BD9!ImKP}jw!%Fm6#){s<+pmk>j%WTxm zQ17a3x7r%@o_k%;40r>&VJczikQs@|JM8|>G^2Nj0B$F+$mR(AK^d+iQ%TJYA}tqC z5VI~o-dC)IHQeR1CGt*x$ect1*8PIJO+k8fGi`*K)>pi%*O8&>0Oxs^(7ten3@-5< zlp0xL8g4L8;(>RKwOtB3BemEm7Ngp*u8425q*mtyVFy`#N%OU?hQi5%7KOLTA9IAJ zMK>=2Kt=y!5=N6Ox5eaZSEg=*MLUl}NEnS27sJBX5_22C%+XqLB!y6((A1amXnn$1L%#eu?imdFw&0>6?YK;BmAfPE@=E#?tZ+W3DOY>O7GgSp45 zNTr%7UTk;7?+LfZa9ElXj?p=g3rkxWc!{K*pR!UnZQB@zOeMPNUM>SGjRL_LQ?|Uw zGwLb?DRN*VA}=VHD{u%|eqRj|RF)S>aZ$Hk1$x(v6bRWp?XKKez$RgZxy?nWsuJ}j zrn!;q725U%1U0GPalr!3dX-N$px^FJ2_ZRqamwoQ&l@mnbL+yCRm{(u$Pkivkc{=8 zH%~)I2G339@DOe!z- z?Kb{ut}VK&!R@`EvY-NNs=Z3b%l{Mj>8}vkQ_|cI#xt>dd8V4|M(|z0sVmH2Ck!B4PJqhC77)74 z>`o7afNGwz=B0b?{=OBvY$>=t;F45l_VO3#Tma`TaBe!pcu3~yx1|!0Or8_${T8P6 z8$Xz`U%0)HH;E<%tbB-R97Hk=@36;OVmDkur3ix<(zz>Zf6p}BU4uz96MvB_b(wq* z*2`Ie&ylWu8$EC((i{HKD zY*@GMVoN5RMzy*H_Q3)6;T~9i5TXu>z)h`YBH;%v1}FJsOW&*`Gzet#g8X9~fA8Us zDT_UE$4~vw7bAmQ40@!vgPP8SYqt>t`e1Hi;^SCezhIM%3n&N=!TC}6Z$$$^=-hk0 z_DbfG5Gt@h3Dh_q(IX|fcu}O&kM0MqxeKLBv>J_&O1XV}|8{Gsu)+W&0cGkUF9>i$2 z@;+1TgsJAFf{)u;4RadlIBu_20RVGH%lYo;c{Y7igoQvCD1Pdv-J65JFS*dkfD#*2 zJpdxhPba0V6oZ(k6U2r=MJGMME=rzmoQz$A8R6+uzkstU|HYy(aJZmV_)Z*f^9Esf z^)v3x?93MQMfqpI6$C$rkmDG}^wiYhGZE0NA9E(xF%8lzbXObH=-le*5Ot8ysszFu zZZs1`PrO@=rLika0hK>A!&xQ2vOIG~?-9#)VdiWrlcv!Jmv=(MmQtuR2)n(+%5_V(>HedYirwjj}F);yz2-#v=hS8 zIc{%hD7^`jJq^yhUKld=4m+YjTvj*tylNA@&@{hVw$g{6__j|J2byE_rUhl3+(VY3_Jl8A%HtJy=x z8|EJ)?4)Nt-=Q7H5Ufd#ZRMamo)*T#&ICr2LK0vv+Du8t9hFh?!_t_|wQ-DfdyGBd z{DJJ|DTRgZzJ>$v{Hl04)cLeeb=1!pfUjuP51a)t-;sqm=38!C+*j-S*EIB=aO`8; z#^QK59>hrcNzVCw)!woLZL$z=Xw4ULmw6c%u zNq!PqdhdY7d?)b{)d=^UntME^&oiFdBF%1H-k})IV%Au+GJW-^S;K$QQ zoT@$MHVI20aXD7f;;4&hl*x7btY>%TeQ?nJ9HtvRx4B?b{wWX-P#rie9pgZoR1fp z8iS2HQg3VWCkrbxdS>{qncK4K1RU1Kvf0xER&g?nPwJUN@-;zQmWH*Ax4g(x4SwX0 zoR;hBJ@BjuD+v4Yz(U;emYj23fv@sLjYytDcHD7eA36@R2sd24svY{|4 z-k$xSRN_-Bxbw;QG6bZOARbp&c5j{%=ACnhCm1P8?Pj8yJE-Z{*FGRb*jm;$&vN^= z8AU*qB;K-(E1bb#9-Ff35%=jr4wDQ9?fN)5pVhs6spHb9eB*GRDfsjq`=tY-PF+pR`Uc9@#@wD+4CYbVV0v=O+ zb=1($el30gbEJ1qXb(Kkh3&d=`h^|8)4 zy*T$_>N^RI`QG9Q+675~rON8BLBXPnD);K#&kHG=41_p-7HOUt_Hh) z`gX8F{$^Se*3)$|vFVa+8seAmaB)Y|kKYwW%Q~4!MC~ok64t1q{g{8?$T}<$9K$Ei z{#o&}fnCBXTlq?RNgSq%Yh>@%H|3u$8S~4bJGg1BL_n97;f<=Q{sr9~J`02+dwjhQ z9e(B6agB7`+%Hu0uC98~xKsp~WD*Q7_(OTgT-Sbn!9_y;M=MVs3;CsJo$#s30za{9we}*{4e+H1 z0Gp+n3+Ws=F-tKwa4N^Iq$GS?q8fHLXC60AXY0iYqMrglOku79^k5_|nJ3G$U)-DC zvDs~|S-MBaq$lwvOF5!Y@Q013h`u;t?1hWx42*wK^Iv0z>YD4p;VHcQoy81KZvVmZ zAFrQp(U3NKiy2(5o8IVSmJNQ!`Q(#_Ix7M^?jBPGDj-?9P6xUpWtJHJYn_2~)1B-q z-Fz%Q_KIGBC;5v&No>XiBpwNr+u6cxOf*D&^CTfBD<^dLAUl2Z9C&bYEd-AmGjhVi zcI!>%!rhEsI~V9y{(j_BAs+F!WD#)XoR{4?jv8aXiXpK|8epGGDQ3{hz8yF;>aZg( zKdpO?>z<{FRD-)M2FlZ&-)`f^6A=K zvMAJhXnlJUTT?ovxR)QQwmi3QFGy_o1RsF1gT+X5UXr8hm z4l=twUo4oyiK=9Q6Y6`TRY%LD!EKZ&SmF9Uc;;wqf!kOu7&45q2m)=m8$rJ(DW-A_ z2yH@s+oY0XUjtp8;ZbXS-{>b0wg|C3tP6x005)2fqAGbia8pDA_km-3?4xDH$X)36 zk>qJ)busUJ%h{auif1F$O&d_#wAg*fIp%srgNb$MT4$-VJtcZt6qy&pPrCxv+j(W5 zS3%j;n%T*6wsuu{_ zLqRkS{m0~+{2L=Z-a4DH&cou^lJ(OoqNc-};;jBQ|CT{7|FIqj%diC)YHiVxcULH0 zTrd)cyd|TUUX&efB`b*+SkJ2t0> zmQTA7W0TE%518>@%)1Tx#a2wGxmjqur8M4*&tn z&vFErrV3XBr&VOXS~MM@V6^^Eg3;ohg|xq1deM-skaNWnX`Z3*GGp|F{s{BTbZl_T zUr@aCe(9CSB|PWki(i>UqOJx4mR9yQSYG|C{F(93x0wmLTzR%9Rct!G?f+-vH&uRap&akF3e^d$`)A_|j);U6!${ir&vUboOt-#e4X zWj`Ei9vq6-B=-`iB*g-&qC3p;zhk~ea5Z{HSb;4Qo|w}f%GIjKHmK$^5ghMRn>+K& zU31X}Ylw}{gS!Y|&sSM3hE_{iY7Sb}`MCS=O2}(r^|7f$lC&x1G9|geeg=k|9%rsy z?TFQ3b_`DP+wFkly8vl5m{>*}E%!PccmQ`C$W`q_yl4yoo#VGD1LB$3@;ntzQpMdi z%3WF380#qFAxN|EmF?FmoMP~|XnmPVl%*I*>NUMxN)A#JO4y9l>XTHj`Tj<9-v?eh z?d$1i+l{=`u;%E~yv+f(deX!yt-uoOC?|T;-0h!&Q6_Jjb4@qE#>Z|$_ek2I1R0pO zRXR@L-|PR%OyjF=eJdclJGoy8uMwn2Qx6vIg>WBP5N#G0kkDpR{R$_YPjO;S>F2D> zOy>8^|IChlh!Mlemma|2GWRANyyW?@edi(HQvwR&$i@`VO%0q>1Ty4uK3=<`<2gKV z!SXh9{)t?*%2cB(^DfdRCY*k!jOav`5JnJWE0CQRL!&l7tyrhG0uALsK{vzc`_j0Vt6~`^=q7yLn@&;Kxp%yL&VZ@IPP`~kW3Dh(6?%7C#HYw!p(c+j zr$lKrc7%^~J2m_4#kB>L!qa~tXlpEM>vEpP>yp_4EcfV7;7>iUrJlI8o*Of)b;}Yb zH#Ebi1q7CBq2lc^=5nT(J*g^yJI+qoe@Q!UsJ}f9+EzMQS>$YW`R3{~|3U7DNHCmF zLffwoBP&`x=Pju$LRgx#v2s4snij=u{)5lSt>CYsL?KDd0A#o6oZ8NPB7S_QM2BN5=25;ahFCW2LLo9dSDEe+owS&$7Oil-Y}i?*(e(%lD= z8MnM4;yLZ-NetWH=JN5~tuNFc37k);^!=JBBM1$Y17V_rt0DH2ypl*jn+{b(=?e!@ z41Qy;)P7Gs2lea}&P63&eb>az`1e~3yNl)>Yr;8EQiJ5)dez<|a$!8BvJSu|+qFR} z!n<6<<#@nhR3Y5(p9O<1$zV&vvwPys?)N2JS+!gTYPcOVeF$aCL@wM*woD+z&MG-f zTaDkiHG?qfYC zzT2AQ!8S|9PSIfocFe!CtCi??S+|=@16HYW&AmW5aKZVuH>NFK^PZhV?l01mkIDTf z{pxT^`TKJrr(2(lH}^WcDXWHCm6_4_XBuGV`3nO%je_co99ciB7SJ~pM#0Ouk+M&XWR9U z)wgyXdu|B*H(rO?6FR}cL0zJSDRZlN1)>ByA|1Sm0RPbTD8@@O`Kr_i(Ch%*A`_rW$fKM7Oq5}Ck ze(An&;r<*PUiyh&eH+nD9AW-(CR%+9CM%yq&*elwww!~z(ezZuIFiC>SoG&yZ1|q$ z@4Kdbe>*%#lPuLpVV1n2uceHCIOe8Yupx7~_3GKbgtjGhZGts!ZYrfmBUF?Nk^5Uv Yox~~9&Z8s^cn4*ud+u!Z8Hb?%0ul}D9smFU diff --git a/scripts/universe/visual-qa/artifacts-states/mining__loading__default__1440.png b/scripts/universe/visual-qa/artifacts-states/mining__loading__default__1440.png deleted file mode 100644 index ed92494f1c87f2ef954f18e6b3cb63a014faee8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23151 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%0DprBHZ62r>KP;GtO67GYw~X1 z`d4u@50DA4M3f*-3z=AY9Paa5B>ylWE)XRYDSxB&LsvT=t-oOXgpFc!(G#8-T}(5R zaq8h<7_00Np`Z)2;4M@il}JSaM3HC07``O-54u}-=H==zcU~;KOO%qwtPO>mqy5Nk ziM|-?V0gIYYwDz4Tx9cD+a0SEu2l>^Rrx#WhB4l9-a&mH8dqoi_+k0-VM7p5o>)C^F!K%~U@TwJIO<>^YhY zA417u^c~Zh>Xx2Iu^R%VSzhfyp&a7%{{U(sEO-C_ diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__address-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__address-empty__default__1440.png deleted file mode 100644 index 4bc90b905fb5fa941cd16b406bdac40bf6e8ebad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30164 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 VlifaH7CgeDt*L)L|Cj3z{|}b-(R%;@ diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__authority-down__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__authority-down__default__1440.png deleted file mode 100644 index aa15119222810c91ef287155befb3edc86c94400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13730 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 SwJKNxXx`FQEBejq>Hh#T!?KG2 diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__authority-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__authority-empty__default__1440.png deleted file mode 100644 index 3c9a66eb5333142e877c32830df10aa43944af42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15016 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%0Dv6ePmTU05D4){zm{@^nb3o|3|v`tJy#D z?}fi4`ImAv9&(`nfB2QZoWfsD0n~xNmsI>^0e?Z8|M}7kP#OR2SoE(A_~&du9SyA7 mqS3;o%z8liG9H4+Bf!IVr&C)#%W)ls0Obc73WdL!KmT8x!8GOo diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__catching-up__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__catching-up__default__1440.png deleted file mode 100644 index 6c49186dcdd712ffad71f36caaebd841b87018f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33453 zcmeFZXH-*NyEYn8L_|SE1gZMaK|n(9Dhkp;svw~BA_Sy|5>OGPN;e=)s#Fm|2~7k7 zp?9PuK>M{PJ7$To?#+4W$0)fuY}*jZ^9d3%i%1!OF{DuKc8a zci|T^#k)t3?DTH;X3#65f+A3Kyr$(^Y zKF$=-K;7J2+%s{iW%kJzSzhNuJZ`|Qwp*!g zn>;;fzX4NRWIP`8<)~i_$0fTx+8)@xFz<8$^!fP(Hp8hLU4?*^2cC~uL0Z@T@8SpZ z%_k>y%N@cqPudth6wrfSyry^8a|K@cMzaVF=-$gVE3NHu1I%PN=gbY>5bD<~pn=B} zw1RhoHSLY{LA+TFR=V;&S9CvNp9hCh+&jGVU-dggv1%h8&bjTvtgn_DJeirij8 zTjRrkYFTC%*j~1$`-WX-mk>D)C*L|Bb3mAVOM7L8!Qj14d{~dG%i&|!dee1hv|zK$!FeH#Yx`Ws7z=zS}{DgHlmu}u)j};dY}sCHHYpkRNEJqCf_4#P%vKCG!m zPlk=sp9?O!l$>O0;i502ay^T2M z^;Ig*(H^DG1_RwM7o(z5A;~}7c~?|)#u2wdNonRB6#sN9ix+)Rpa6IL)sy_nTXIRgJvZ&O&wpysdILQlG zPM9^Y2=Y?OvG>?Mdx4uvL^cJksTwRFL!9XRvFLDgS>7N+j>#SWfX!S6HKzXD9;e-3 zqZABXc~)j=(@%Kn9=w7Y;V%k7-9h&s{-mc>TKRb(dXa703VK-n-g=Sk#^C^PJ8SE(H6EKa@c0u zf~6qhfe^w=1+cl)Du$Ns7+Hd;*RS<85_>?83q_-A)zs^B0&MqUofdet8VZlM5%s*7 zd{54drSY%95Rd%{(Xwwdv{ERxVluwx06W=hU_C^ic@cE~r+(#18*ZJ%KAsnX8;9Y7 z5HJMKDgqw1elvO6vqgv4wal0iI21jFa*_e3EGOx9r}2Hod!}6qaQyRlG)Yvv;j5Mr zQx7EGq-3^d9UPM{`aSERMw#Gmhhl<>{h?G*V~?Ar+t+5gsJzb}XG>5E>i#YT>e|Lb zgY~l*%2q+01GQXBs@TSpcSex~VtR$A(v|K@MO9v*+}Tf3bbTjL}PE_H6UwLd(qKKp@2uh^;O6r$ub$@7G<2%8q6m z39zlMeKIPWk`kN~(GZeToh#DZDU@87yV}?NMV;qLY}DQ6)213Wa@YO5K*t6MN^FyF zAl^A$_){&u%*df>@iS@>Fy)*3k{()TsS4ZhcGTBDUh-C&7~Z2xjF5&#|l+pVC#n z?PUbd$`*;grVDtA0o(<)$D|zy#}OYBXI;nUd4Ecd=Q}4~g7U-d*Dk&vA$}lQ@Uhf; z=Q>;z#)@)57}C#NQK3Xa)YF%|w^*^p?Kv7!1++<{Rip8pPw2?V{cZFhu zdgHcRU`M^46gf*(zNBT-(e0LF%ue6Jxy1dP%vZI$nl1@c+s);$nT<1l#2L7tLPHVt zW>9ZwmOP{x-^98ahPHv_ z#=QTXrO`~OE+n)n&p=*J(*+0ZMY_btu&RHGQz$HrAeY*4dK````&wtg7aZ=9#;Ghq z4_0r0K+NV8F+W&_qqnRRNNhL%j$LmO2dsd8n(qZ`>&1GyoN5qvmsh5y@?&geQW)m!5 z+wJ)Q&xP0qpo{6fLDlDoBW&Ll(fm99t)~3wWex!KKB0?wI<%^KVnQS79KB}i4~_p& zP9hLi^zLa`x1(U*2Cwz_;8fBLzn3-^H7gd_zKUJ&ClIjyt0`ltQ8|hT0lxWmfVS^ z08@ZaqQ4XFfM^azd7d-OGh1tW&P6JAAkM@4ib#1gofb)YLZYaP~x48ah>Q zfXV98AYh@<#f;gaZmNsddl(JtuzAA}*xhv4<-|`_mz}L{6cn%vi(?->#d{;t>%I>m zN8M9xO;!V7w92KT13QQ5zMd1%)V3#4I^mg>*FQ(U7jY5(0?3*nEZsy6ul8o00PewT)3Z z-@uTzN5PfxG?I1J!zT7PX_Vcj*0X@T?dzqxMn`Av%zNO&15`x4bUq~QX|TJ7aP|kM z_S`FX&7S77KD=u{{Go33A|VT>s;woBWOTpK44ALimt;~kNk=8UO@lIUyQ47<^!@b( zQIawFRWvMjjAU4PYL_`Ncw6EmH0@cf)8Q7e+QlBdP~zO(QGt&0=Stfm9*J_g->AtM zf;=j{_)w?*YpoWv#%7FGy-6R24Zz%b+FQ^UuAOIPZ$W9_RE3fgs5Pz^s-t{m!5NLL z&$EqDb#nTk5hdl!E*GE6<)8Y9W3`E6m1h+UZ+CVsCi?s?bW0G^BYqX!seI;pNAh&n z<>*_Ih}0g_%gGh({WMZL{pI84k;W~LZ&aWVeV$oDeITGP=KyM&*>9Ce-ET+iEsd^gO!sK3-Go)?h*|hmDW& z3<_CP{0Ti?qOreJs3{k3q)rhZ!vT(z+$^oNU82^KVDF<$IOH-W8Wj5;$u9&ogmV;A zfwCO_P^GGyy{-7jO#Vx&rXt~@kHycp9@Z2E_B4Cj7S3-7BX2uma>@iubIM240~uF1 z(^PXJoyVgRF6I2qrFE?;IAca|7Q#EdyWk-jhWktk;;CLaPNg@ z9_RTf#Y_&*58SCVwKvp%9iH%1(?my9dPZE?v+Wk>e(b>8oFMP38>wd4=mz?6JKJjR zb=63(aX)V{M?p_p4e-HNoj|pClL`_%+H)_R@$#sk=WFsR7X8?C*wSRLr`tPFwDJsN z^#^-sgY|eW-twk?0+z8Gba9ZJ>Hkf4Uf`QsR8KB|%q5C4zcPO10Qisk&%x)fG?!;& z^YZ;jgYiUr=_e_-@-|Nkv`0Rkf|o__GTYLdjLr;XtBuU`$TTFL8-*gc>A-KZ^Cz2r zvxts+K(y`lHl8GA2HE`8L4^>zYvU7d=f#qm@GmVOc;#~b?^otinPxe=0&lr}=4?AQNO6{tl@`I0HmLgKX~qO!oEroGO-yp+j{DB=0?*f*d;ABVDJsEHkE{*o*w z0p8s~;sdz#m47&*&U!Vc{LSjt00W!hyfuWJB{pkJWJatW*40Ko9KBB>rO&l5e0^c7 z@sxMzwiS8$W2n9JoK10xfrkMsUR|k$r9h?3fJO$o)xiMDTHl@JFV3n|wNYPHUAAV= zcd7r1kW1!*61gQO(r^aW_VhW?n$1u%c`OSe#$-Db5J$39pzc-qwVZ0hn9f9#V{36kS@EuQbtP0hwamlvA{y`-_njx2 zzTrHU`mQ}otO;=#YS?h*3!c@sbAY2frzRgC#T7i4yjdVT$$Yi>V4n{Mqmw-d0i_=T zOt_6)RvTaw@5TM`z2nVjP02J%^9({SZ34qU9cR-r(Z0*3AB> zfrIE3^`8}gDmZDC$&t4_Z)&AgK&;63&x(Eit@_^Al@n_3c$!L5q?>TvOgoZN@*&3* z1cQ&aq(4XjWkQ@kigmmXCwxYd*N=P^b}E5eJOR8LAX%jyLxs@ z#v3-#%x+rLT=ibqvva|YV2^fuIf+HmP3s2OD;7Wce+`3ElZa-b*b%H1kJGKkZ#B9g;Wl=9-VJ#=Q^5$jtRda z(`DwHnLXdR6-ve;l3h?g1P$eZI!ObgAvj`x!}gn46qWCD65NfF4G*8aN)*Y!JPOXU zrUxENOmE=vUy3KWWjSgdhxzhRl<^&_mfX>44$11}y$Z#9&_FNY*(XQ{o6m;8Tzf8; zQV_13{F0dg@$#H5d_JT&cxadaK2qv4@_|vdbHNQKF z=n78L=sjVI`wIoR@55CD1 z*yXvokipjLh|zRQD8!#$b*2cVA|1rkb;ISDQF0RyHM4wgEKr;|s8o^iubUUx)c2#! zQleEX|DX;C<}lLcy(8pMmaw>*J@T353|vxPw(*Ut=BB%$%iW!H0O7CDTh!gs7#ie) zm>@8J;ax3DR{PS{`mQBSZm>#1YG-rAW>@B4<*>7)92ZrYHD$e3XI@NTIwJ#yCd;e$ zU6t)FOR)bO@9B+CDjs)9AGpHMnKBkK{*DiFU_b!mOpOQ*?2B!?$*}KMjBEb)| zF*D>9G0^b+_Rbhz_OsdnFETtWMWMJ4kc;@w=1l`I#ZQ1WkbGBmFN%DFY#t!DUnt#1 zft&i6lVBb`mb&YmHl8})eoGCmQsou?^(dWDggb{QX+=mwm!-R&VRo9O7-8MaNC?Z z`I;3^Fgt4aOV}yQaqw(?#v~h8N7(;J9*+r*wD`(gLH^xK$uI$Tb zoSMP1GC1c{MLJG7lkWf_om`M|C|}dc{=QCl6#a5 zP78tEWum0;I!W6VH713ruyiS!mB^F@ssNdr_QTEgav5fI}yt( ztNocDPvmQUACM@Vk9WSCQ{fjDYie9;1RMPL80H8OZH`~ikB&XkWDr*k%_u2i^cI`_ zRs>dW8U{XhK}bn?M|1-KaE3^mHeqqd>jyz$NUBS&|Och^+GoQXw9{C@Gm z@#d*uzuGm>0ORN-nYEGAbA|zC$2SW%b@Nb*+1WOh(1cHaI*g$v@MHC{rBgfOhL^aB zrN*xfP)9Scr|XieZPS-G(84KoV%14;r;r|zk&&&YNB^>q>C&zS>5k?0jZr6g?((5BkQx1ZKp(Ky>b8p&{}v>7w6o1r%^8tsKasu=Fp(_umn4%9uLU8mS3h9plKfEA8gfHs-={+^5go0bId=2FC+g1 zFX9UpNNR+fZ+ZKLCxrY>((Ai6hCxE&_lSl#^`-LB?z)bs_@Md+H}d9|wL)_KGwD{&lVPV`PX%oRLX ze7dFo_v;sH&jcwZx`26jy7yo7PdT(az{StUf!ik!Dg;Tajjbvv*rHY%QNqltBN1Pc z+fA2%29+sg$#k~j9%=~-Ox>HzH^e{BPKGDfh;6?EB@kXKQo##Tq(xJMV@9iB6N_)} zh-tB?Sly}R2^3*n?0Eg_3$o1?+Mp&po>MZKQcl@xX*hpz{btPGlp)5^aHh@Q`zNd+w#WJ(H9w9d`Y$XPx@K z+Ivy^)~HZr?tJ&%^1akCXY{ehjpj6e^Q1sswPQZVE5Q%ziRVmJ(Soi=!;^cI!;I0K z+IXYxN5`G6>Y7RS>^UC@vlni@>mYjmi1Z$vDR%tp|8s>Pv`q_|fjsI0edwB-V&9u z)#cn}Eo!5IgZAJYZVsJ-@$97Z8Yb=nI;e{C*k-cSmBY99fN=&NJ0W)(c(S+h7E6m< zfA0c;k8E?v1pmYaPsh6hUj8#>&g}fox(QU?RwLo>uaHOnfYre99Yv54wp+Io}0ZBaf zyL7*JU0Lnp;IX6gD%JPV_1uMZL2|dpbHVHrH9d4n!amM`bl)FXwt)|emLEGFyl*(E zpYXRxA~#xncU_vyhdJFyB%DmT9YyjkI1)Zknj?aE)0tcd2}P@+EYh-#(}de06#wCZ zS8f%=+J~>{&&W2~NAdZ7X5-!HpXF~%Q}R^(n5k6ApBcfBuusX%dghA-LPfSG&QLfm zFPtJ~aAnW<$FM+E3sYwT`cVcxNj3Ngg#1;=@FMEZ^xstCMZEtSiJ)CnUkKCzHLCwV zqR#(gos@z$L?@jj4~q-_qM$8$w@w(4#;XNh{+g;-tXs~sY_xFaq|5xXf;N+5>s71c;e`iULe8-+bZ2P#-r)I|&u*_w_ggt< ze0ExWt!g}{^g;yv#_d=sa%}xN`m(*{$4=e%PNW$f*x=~LGruN>53*XL0H(%l#SoMr z@>c0zTEK^{9o_PnRn(fiNQxUsbR`q%QqJYur=%1tb0bkO!OhlziU}w4%Cb z{|N+lEeYxBq8X)o4iw@B-%^x$Kc*bG?|tsJ-FVcYJV#@3t=5oe&Yq0tOQOWHr|WHT zx8z1p8M##1xt!rl9l0aI=&5QqJ^*B{m{Kmyf*e(ZzZdebz-fl#)P6{%8{FWdUv!xG zWDTGr$F!Am9V53qX<>MHF`-rg)L{F<(c;9NU&KJV!jV|z@e<#hJz>k1uEpZ~OCNYO zR|dt|-=583<*@E=+o9^Jp-fi@A68L`SAFraWbJm!Vg1KY<3VH?+(UKfBUe=Ly=(^n zetC7jBeYZ;_e|_ycav{g`T>sOId2<)h~ zQsh}Wt08#jJ+oNXhkp`R=_-Ho=SZ8@HTM3KSIhZ-UOob1W&nHk`w#XkHsd$kUfhTJ)WV z&%c%fWCX;JP+#~-*#4H?Q^1OVK3}@Pc4N>EC>o-1?H>=|KubGmB5j>FHpA7}kVW?d z6Oz)P4FqY^RhQLXIVs!u43#oCI+2lcK=sD^KOdwd!3%O~dmN`v5aw!kf9q~@m*gD9 zr)@qzn?qVq3R>hhC!~IG>X4gccfEI8HJ>RvKIPSt3DD#VTG|N2h~K6)a?tW{P=1~{ zmldA`tj62fR8+$J6V10h!7<=r6^UeZU+2zgS4WS&nB*AKtkq!E;|oM7Ur#GwHAqv- zbdLEH%gp=~aVwNA(@u`EeB02-l}t@P9}g~2oD`L<{H1+n(RV4%QHeU1dtfZ##+p7Z z;21Y{F^JLdY3!-yMZgfTFU@8p(hf%xeP3U-So0Vt<*KgA9Fz%7W{w8>boZ{JjH3?Z z4Rx`HqZa;~FW_BP1Sn`tKZN`RSOTsKYz_CtYlkl9%SfgJ?=isD({e81 zftHvV(n16xUcfUP`pwF9SY~_bxRkY;oW0i(F3=L%j>}iN(QFOZy7VFnQA$yl(pgJe5 z+rzLO6Lj-EIV56v(jNswH2V(ALkO|6g8_3n&_wE?Y4)qDG(Vyf;99QP)CXp$rDeN$ zm*diJ#*{jrga(YLKvil#2ZvAS(eLKp0KGja#q(1$buYd!sKZj|Q;D{+Hq<;<^Cm&c zqG`5mjaGk31xG!S?mUAY$KN6BuF<9|Y0S`z$C@wk^9b=ZauWu$_pP3@dI$8~P4>5@ z*skTs?KbI`NvWcAs;gEih`#%j$wK!;p0 zHRPreGq3zqdFE4;gi^1aTWrw7dqqOPwPSdGDeI#QZzCXR`B^ro@an zzkVa9OR~9L)29YSt*RYS|ExEeiTUL`RjrL)E*~W4ngRr$j&G!O9|R?D9=1(utI1Vf6CEZkyRD@UXmBRSco} zM|9K3F#j-d&KoyGOoxUrN~c2?*f_iUA6)l`DUK@w1pT&nr=xnY8srbZzoA(#U6;&b{D*d&n{d2m^7c1DmR5ME)GWz;DzcEERq6Kx;c?OREAUX5Ttql z#L;m-p?XyJJGgsF20DDS!R^IQw)fsXx&RW?po`%!+EO(2Uu^z`A1E-eDB;WB%)nfL zRqzBM-P;~npzm!bDw8Xup(amQ1KiB?Eo7%+7rn00F!VTn8R8EbN>&){i^X`g#x@4B zY2zjbx;|yKaXQuz;gA_f%8VJD^7J)Y zdCFO7aOyR8sa{t)O*I!!k{mtjp-KA>8vRZP9zE%KxxoWh^J18W{bse(oN*+=EAeBF z5J7)D(%Z6;y@>`FOtP46Fc0U*BidxGPL1s1*XJM97vdFThxlCKTuV;SUE-e!bCr4_Vg2cMomr6 zaNoM`%&ySDz((oaLR3R79kG(-&a+q=a(nBM)W5%t=u zV3WNHd}Byke2D0=ugRP!Z{pQd)_&= z>(KP$aS&i~ig#yUeDSUzoJAxQHGj4o@Qa_EIX(^Wqcd+>sNk!A25$ae$)*3>jS$ep z|2m!Z-)T{rXCPsT<0xXG#U@tahFQuh%NkeLOv(Teeg+eSFBq=2I#$N}#v@Rcp_I4# zi!RzT!>J00MvC|4V zeF0ZiXrUV!dn}#?Oq=p$KTaoPH|A7HG@s#rB#_?5G3pi7YP0BeJGE|VU{g^|Tz9tO zWGb@SH@-dG1zG$i-h26ZL;s$oj;7=nf0okf!kxaNv0HZ%lWWwsZ~43?;_-78CC?se zx(y8(1B;01&sA5<&8(VR-~suDaS-UL$q&(Vsh;*wxS@MGN4*pO12=)I_^B-1W!fMfn-X z<^y?Ov)-!U%DQg2K?fAtMJs#I5+W(SK)+}KsffE}$h|=OK)rme^fEQjqRJ<5ny<{y zwgVumDC8p$<@fCBG1u42e?bvh@#=)B=O|9(b}T3afYuLwK9Ej=H&+_rWCU~fUPoyG zR_pWZ1-7V&K88?kV}5Zvlw+=-$k2ZiSvACL=+5^6TwBfOQ8Z(k|lpZb`+HQfgjKiQef{1Bw*2UQ4n}ymE&+?CQZA zFi&gbB!}F{UPua9wDMcE6`(VKY=A^x4x@p^>=)|H<4Zw!C0Se0M)(=O#i8^8TnQ#qr?=g%4< z<@w&>Zc!LbtSNLbEWO;q2T!ycf1YVszpx>m`~^|FgV@g69zYlc1qCfP?BEMBh+`J@ zsz4Gs2gfaHkj=w0E`&F4Cc#3f;@K zpRq9FaL|6bxI?6;i?O3e4SuvSNO=wIAViYT>gPO5IgdDJJ`{Ez6Y4hl?n_`Yl*6LceF zC*4C*cFznBFnnXBrXI_TCYJ1JyQ@vtx1Fr4tX7O#TU$?0$zs9t zYjrTRS&#Qw6MzKaJvuI=ejNY3qoTsq$`wFR+&QixxldND;ztz{V$ZgmOwvzb#w}_T zl>A!1GGLk(dY)D8(Kbvc3!95J&#%cFpU5aF?ew&ZQSdk8fhR`HO*(9wZ)5ji?#DGEu*B(k_hp1j5BfXm>vY518MmH^WVU-_Q8`* zE$N|}5N#}r&omF8R7^qD!LC69mHg4sjCl4}#he*2&& zBAXBK#Sv)}z9)|DXh;yS35Gg=G3iD>?77bITTVX$`DDn1lC4qeYy}82Gk3BtS}^@J zlIpMB8s?$PiF#V{b1uCeY*K3WXEv&(g~vg-@40z5lN?$A_45~{TAK;Il_sXq23J(S ziIf+eeNu3KHTP})UYhuF5Ftpn;pen`wFCU^TMxf<=_*^?wU5a22xuEHC+SXyO`1px3A*G}J~DUZ&zxA& z{ME=9y3)d{7V1Y{BZ{R$2KIDwc^rSCiO90QfG8#9bsDCg=Hsb4gXlha+s%!M%7;SW za(F(I`jJ!1AA=f&N?XSjv-l=vBJy@#`KKQ1_VVIQ_x28rS5wt^h_dGd=iNq`frNMF zUTOh%9=aAE+&*Mtng4ho;b|mHdO~V1K*u8&&jAqb{rmUxFo(YBVhoG&M#SQV^9bMB3o-2(rJepO2!Rm3K@SP4|at!x0?p@B~xq7@{Wxu18eknIH zY$R={RuJIhri;4e2O2JS$97GlnanX2&iOj&W_mkX&@*RlrLfn=L^@2PE3-7wTj~tk zf$g6Xlx#OcDecyf`rHpxJbnxe;SIr&N!Yi5)V@*{$HdpU(Z71pD&>al61}T#$-v=s zG!sI8Ld`PaN1g>wl2p8M>&hN}ibkq@JtvMoc(S^0`GDU~xVy|EL%RP-_+^n&qKQTE zxI@ch%$j@Jq+Rl634K>s$Vb0uMytnKZWJ*X#^Gq3m2Xc+GRf@$+}y2^>*n!}vIPs0 zPdv>LvJ~^CbUOYfh?xiQ2o)cd6cna2l}DOqS(h4KvbV3X1i$=}tJ@U)nb+9NuYzLd zGGNk$6F&h7x6(IwX6m@2Qo-_~e!|kze%;R;8cLgS-~M93zG-mD$@{3;u}!fa;YUiV z?v#Nh-VtnEZy8( zEeS zw5}M?(wq^~ptV{3WR3)Zau)WLPFh^eYx+_VzPKXfm=lsZ)yuz7n{z-$$iX8N)pX>| z`hIArLr~{!q>X!5?GyF{{G`%cYHXU53UQXtF9yF;BksY;yS1bQ5y#qlHTMWE#KYyEnG^ zG8*vV%5vle&-04kAdWlL_jT90*w`p>+C%gz%dy=GrLIXP7eQH`1_f8N(&Vl=jvMGI zi`(>X2uPWfLbs}?+^nG6VK1#UW5dul(iS=W$j6q4U0mYhv{!ZsQm)oP!wO9*naC9a ziR8(b8Tiz)SA2D~Ww74*)!^I$i~sh6LnRi3d~TIka_)=bhN%t;keAzd*&M)6ep&|f zvh~3oB&s#b8#j-DAxU0s6MHFK?{gSR#i2KVib)w5CoQHqh$wkC%X zPy1oYt@*Sz$EuM`I;KR<9kIHliaRu$H2h)*71+)}>EY1pYCxhjp>&8BOpsm|TbxUqVRjb;qxL*z*bQfd^G z+DNhVdbtd|NqyjitYB3MzYfm|3P5>*GSdK(Zxn> zOiKQ+Tdx){$iEOGcJ^8TOX!~k1poi$_U2GaaP4swP;G!!%5{QcC+mmLS(s6X4D5p+2qdd0QcMz5-kI5&dWqWfS_;ro> z>#yz+Rah1KUklNktM2{&jSnw(jW9Ats~Z6~`F#5V+eo(-KQjK3Ev=ywr2qQan-3km zmx9m$|A36_X#ukT@69Vf_7I&oXsD+ECUB$mSjO;q#T+5M^HYlqTWf;zQ?Ps5G76 zZdSmE{q^j}?1#hXb7}9H6oZ zx=NA~5)$BV3<=yEa-8!2`K}Wa)8ofs+@K*0{Wh0pm-N0$3>I@5OGsj zPOOTbIu_t}1vE@-6$=~f9_oSDcWDf05=Md})-x_FUR`Q&@NdHZDjHY!aQx}N5P z4cfn7k2yh&!;T}0YhF#fK9~!q{M+k>s24YvLwYAAi%rU-SKs%Mwb^}E8n|($h&4cN zSG0Hku3kgtRsa~R=#?i<&Y2UHz?_+9B@=t&w+D)-I2-WQoWUn_%3!;$`&sAf@lvOM zB6XOjZT1`OHzgHbl}%^x0_)<%P^y$`R~$|3XZiivaZx!Xy@x$AQm=j={BBm}n2HGJ z^f7&a2Il2qfhg=TGA`McjeIf+k%$hr-j#xEhHn4(q7($pvJvB+3?RVi$^&GUSnKim zDaHiwS=w-d!7G)`rm2zpkr}Yy6*OOF#MM8-=Ds(k<@aEx1PF)MEUEF#C)YCUl35dYz*TW`IK*B-tz3n+1_y|=mAYRbaA zGF2fSFdDRvZ3fgYqLfxRMf&m$h6lx>wsUW|tQi+)qL#uYy9tN!I#fgIRCXuhv6i+s zV=TuwvjP@aKtJ2I(+MKxKD~eBeKs7;eyCAI8Y>ca)OL(Z&G+3`&bbzd1A@+Ty~oF! z;>YiBR%vxbWrVjvl}4UR8})>y%JYrDE(}%uq3oP8m>RKauU4uvPlQdKE?B+1i1h~7 z({mu=m8)0V$$ekyOe{l@C|mp#5lPEFm*-<|5$XkrL3PY6mJav)^2YW{SKFs0zhdjw z^UX4j{mjh4LF!Z^*Or$P$fw24op-kYwk|BYzB>>xIgrFHSr}kulE1n%muJZs&80^4 zi5HnTklArMx)!YhiJ&TN6TB>o`Mz>sT9eHPPq7|$5k0M%{ZV3`@eC~CC9G~`bD#K)j!mhxCDUdIOt4)TwRUV$Q(t7Pk+@w~VgR9$ToWulkOtrep?ub~>Q|@T%Evh<{cj($v$a#Kg0%0B zN#HuyT?Y;A=ZFFyH(5dVr-rc1%aX~H8RxQXyTAL7G)S{ghBee{4oG#eU;Q^Aq z-H7Rn=N=zvqde^*+p0d_%+v2R#>XE4&-|^t9QZPTt)HJvC4<^uqO_L|Tje4~5d*(u z)H4HF#k5PRwyY_a7(WAE4G=bIG(DwZ>jjr=OuGfZYf&hOFnj!;q|^j>TP zXpJo7347B`{#H*1{0gJtAR*}Bt^cYj?n6{Vx~-4%lUNCA{92ceTwRE~>}I}pTDaP@ zYM$>I@6>?~e+0U}mvZ@wg~B7An`gmrFJ>UFpJ|}$zkXi_8{H#t!B@IuF`R0ko;1wC z0^Jj)ZGx}>TLephQ%oQG7t_kjhMeGkEWhckFJp;ZysFo=u^CtM{Y2+-Vnc{a>@dw# z6O_|`m&t`Qn4561Q49Kaj2UXQoDd}ya}(WQr14~tKDxN;UyQtOMBw~zKJA4`L{LW= zyS%SmnHeCgH=pi0Kz$y*+x-OBs(41SQr;Vs_1x=yemw2jZ$X^sKizLWsl4|xitwRG zV?W$pC{JhV$Om9fL=-4@Vq41RF=|p11|0$^1ODo5BTax8-pbis{irT z8kI66Ko(IENp8D;M_4{rNxAv$5rxVz4r3+zq&>(5vkCzCRO97oE|&nbtbn{pP<}la zo~9!y2j_nK?6L#a^mwA1v~2@Bpla{kFb%*SZu%+{k2z@pcAjWF>NApCY+=9md*2z=7C5H8G8Ah@t~j}XJRLWf?UBqe#2R6Al9<5iIQ?v~19=LcQ(TQN!G%A1HknkO<*1 zoscitE%XYGpj_GC&}%xyg@2$B4L0DI>pe$jGmIJ+nj?_fEOV>mQ3YZTq@MH`?TL~5 zoEXX#aDTPIrt;o~x-O+S7a{ymLj1Q4A{^o@oQB@OcQ@^tqi>3G+<-zcgxNH0YcIvL zA2ltd+EeS6=dOR|j#_y=bhXP1T+a3 z{Oj|#Hp?*0(L4#*FmbAGCAy}!wTV38zdbZi&vxN^$!sVl>dl&>L@8QL%;puDg^YIs zQ)Ye?w%cEa-@j*pLB24Qhpg6-N$^F^fc1`iz~UN z6Qa3ZKdnTzbJmfQ$i&7S>sAPlP|WHbzkEX<*1HT(`_X*4i&_o?IuE4aIJ;%Ot9jN} zl8WX0_hQ9*q^Dp>&@J?QpXZ`#ml%T5zH09LpRyTwvj<919zdrC&XbZ%0?AxWyJM9O z_dEMxKD1Oil&_G2&696{fBwDJWB*ZX4mz2E+n`jRW|@IznZokbn}L24S)u)38LO9K zn+oI_r{DCH0%p6x{}+jn5hugjm_a|^U-?L@Ej1v z=uPC7e-aXmWZHJ>UoxpF&*xRnk0Bzz8HDdo6p*wCuzdF=W!GYbfxH!J1<02j2CXzw zRUZ~L1gUWN21;A~n)NTrfw-l&Y*o$}POmS3-Psou}`%skF>u%Lo_ zif80sq408Gjp#*Roa`GcqtChEf5W2kuLvj0kq4l{2UzCREdxMw0m{kZqRV&?bt(|@ z+S%RQZPAH>DP$ZCbl4w>)|8uhT`ISdd`%3fhCTGOQ72=T8t|x9%x;TaUmj9#1E76? zp)d1F)RfjadHbz}DDu_&cOc$cFLQh>cbyU@!-wFW#XGKkepp0=C3iisO3&E)TZj!r zK+3n=IJ+QcwPg_+I0@$8NN-5fXfnSTB!_0pN)xKZ9uwrL85`u-drigl-i3JTj_y6sY8bHEy$@0OrbJ6AXtl zIta)Q*22{S!|upZ?mBA&s|qo!q$qog;gx!St?YrXBXYhkPn~713E!B(;kH?HSTG#( zpxvV?HWySV-+Kp+cbl{TVQ;SSyRfHS`=v@vXrK5}k&mh8#3|t^uPfBG3#Fu8vHVoO zSc0Svf|LE;H{fGFMSfD{{zi~W#1vq6i?<^3&zvgw^4KO?^Wd(0(J4-ixgPX}!({-Z zmeWOaj^eTzgPiupsmDetu!zwk?C#2^S#Hq+w~Uy`vpwV@MFk%f$}#J>sVg(`sIS}j z+gPW-s}7wa&eSWC`gK<{hKu*hC9bv>%wiSNQA77X z#k^HHlV{V+Dx;YU)Kns>qzSI3Ga~_P5Yn4Wb;Twe=iC0JXbu^nnxzd-G+fIxNSSND zwfX1<&Gu*Wy}+qH1$w!2{pQ6T^_3fR2pQk)Vw8?b?H%9CQ?}nIyW<`vfcJBex?{^+ z;S9(8Zx`xisZ~5bykab3yrtkYdSj{z(aK66?;YFPO7##2D2y{?88@t{_fZQ65wY=G z!s>>Rl|1m}j{Dv)1^AN`r*zW^al$IOBi|C zxt}a6{PtJjD1Mb%wKI^oKQtqX=CN>|l$H8SeQQKLtys@n*9?_q9&v=--u80VZE2ZT z1!_kor*iaN1EXrovR(BM0AvihhgwM#$Sk+DBZido9=$LIRTs)YbN#Bs*5aG``kUu+ zguc`}zN`{irAUb5FHjT-asFoZj=nhVgtHH=7-)Clqo)pu4n$w!GTN;>YUNb36|KM2 zLw2{jj;IwneU#;9t>5cwSg?0OmhV1Ka;mtFr=?0R+uhx@==AgQsy+wc%7-sm>wCrg zh*Yg9y-6#N!8RJZT9x94H46;@5+q=T7qjfV?kI)&+M<|Wtd#Mm#NWFe_fx$KJd+oG zv6^bQF(l>FNmf>dccKO=%d<$KVcST%aL+e(5s}%-6wne}G{Bh8_64{kTAGL%MSmnD zEIt3y`t%485y6h`1*ozN-xWQuVwxDgSp<1%YaQFO6TK?sv2`Z|(`|m-%phRhiw24X z&*q-KdswHr+Mb(>B}L=q&$$91cQT+h=G3PupL_mt-=qJd_PTvWG8oSiaQlL1(JCDm zvKtnG!s-kj(xhnlH38k*=j2+IcAYLU+|N`Nth#thsMi5K&qT%h<}lr0;6yVwW!M-O z$6*azSMi$LEWAo}SNg|d-}ZRTmI`+8i#U&+2lwMpm2&)wo~@wyC9cZIF5ZbJ4=qh7 zGiwzz*a7+5wo@$LG9C3Lz1$jq)YZO;Ya=)eO9n~El0L*?b}*O|o0oxWYJf5Zp*yqA zOrD=_VaI>%y4sz2s<2JajLK|suYo?$cKB{wE2rPp4xiHyg}2?JC3*E>kGhp(+w$kW@B1vY$lZeiv7lpQa* zUu;rYu3&?7q&~{|^2VWr{B94Eg!IVp$6p$(Dj(^#lG1)`?Ud|oV&!r4vc7%*-_aMO zr!%yFsA!$*wIBAH(ZR?NrsEDZ6jH=Rs^w4YL(ipPHt#QFAALfTE+MCSolx7}Dgyx6 zQ&M9i+B1b!X-Kh)mn-c^l_UB}szT2k2Kr#WE^vQz^3G+;O#VK<$Our+HtnVRlFjB@ zk6M*fuNR6jXVhX+rOYknoJw_utz$BrsVn0z?hlk-wF{@!OV)+`)w*?Iqpiw zkJ-G>+AzK4sdbF%EN!_)quYSXS^qd0^i#P0GpC#RX+EFcI3!XJSAv?yl7lJ9z~#d! z=Ln#8|HLDA0l9a`>9c*45d<|0WBNtX0ar<1Oq}QFL zKA>*Yk|In`KIE<+Y%*(k%a&;BXMR?Jaru4ucQw!p7>Yo?e`FcS<+)je#{@QsXuhDc zElgZ=uD0t=-8aRZxY6zV;^ASchnEeu#)F}xb-k%zPZO6F+xzTscVnGCP=j531?+{1 zL(@gjy*9Az3fZ}eMss?0k%YC@dh2D4p@1PK5+c01Cl3y>VQ#?qvf`fGe-S;1d*e) z=2LC188McVMt@TR1A3gVW@I&4&z4NA0?8K86CbUOf_~x*;yW6d>ni}g5>0N2SH-a78s%?C{`H8ZCu?V#H z4j+~kOsWWR+3yPA1Jo7e(0-l-Vuu1j-;X$28c;bK$+Ewnr|P(};=9s7NHm&Vg3O|u z0!V|X?v@XH_Q(RHiVWL(iXF6)5vBWWcqTp!TD<3cNSyyuaO1ZdgxH4(UF5 zaJMr~9vwV-hRhlLLLaB4izoXs$iy#3fnLgb_URorfp6&A6WCb2 zH$ZkkTHnHh_|x-ZlQJ{X+DD)?;4m(ImlS{DrT)>~<(Ma^^8c-voW}9Z*!SrC0~ceN zUFY_-p5I(HnH0vrWz<#wnP3Bc`JdKW{*SnD|Lo!%H0CyH2Wcmdx%Cym)fSkrjG9S3 zBZYS5wL0FRV5OTHM#Un8`QjxrYAw*OFM`h}odfb<{L!cFtw4JfI5N%oZh%7CYQ0fD zV8E|w`?#!$mTQ=fc4n%#hohY65U=-ZqZu_~Ov_ZJ%2hp*E=rC(+L%{W1mDJIK_8df zrQbZfOl6v!yj|Hpw+%+E(BW<89U0Jt2k*o;KCa-NdvxsXYM85@OI1hnWHcY;@&9&+ z&NMGm2dbA@cUb5$#Lu$+GEn9osvn|zBMz$#b*dPPlRGo|BFAe)jM&&eZTK!y>4TazZ?z(l+1{{ zBOgzttQ<9ATTr!j8oaCi3{`w(+g$nmP@*iNil1_?PG5q9`>#rT5o25Ci4bQ^il*m* z{t>zt?*!gBGQBaYYXn?~>RQ5qW#iv!FbPy$H3|79O7d$n#K2dRelrqW&aj?xxyt`n z`c?kuRP~n%ItX1-UF(?x%|y@6ah;uupcmTbf_lwmiNlWy)lECw#|Rtl;_54bP}BgB zdA^>YvDXK{l`i=$1Cxbt9d>tf_=kxitu%@{DzxPF!s4RLY?`yeRy=YA*aI8}*49A( z^H-vjwL#8&f7iyT8kZM`S#L|`y`aX#ex(Vt^Wos;<__f)^~`Jv%v5+>a9DxVp#?UC z?o_G05D$tg5$Is@yK}*4u*}*6qbkP+VtCQ2K5lAf z2PMYbUgbl80V7KxZI6@wgYC(&4sliS&?_ai%SbnyZ2gC}?VG{I3-& z^IMBen=_?7X}&H+fONeuPT}<^CM4jqxh(JX(@I1D)}xUoIDrNZ2b^T$QakQjslVl3 z6--UIQDn^mh5MKt)3E9pPN)aw>xNeFn+ye-k|H5M$ zkZbsi8Gy_@VSD@-<<9L-Gr0NMyxru1#gvz7gqDK%+mC3wpIm@Q)4mLeBd;snJi?TGwEk2H`m7pwL^I zjofZJCKzfx>moXY?^=97)aY0)H8n@aQt_#bwiz50oyrP-(wA+xzHNYnq02u-Mij_| zpF2k7({AF4-XL!DG~u>tJP#K*sP{JtmM(riWomEJ&v*-uwe@2+9h2@7FvjouSvpkN zb+nbAgj3sZJq?@9;M&bE_1g!!E~!t8q+)%*3$QV9Z~-@EZEVglxYpvQt7zH!uSG9i zr*DmE_VTcC*~n{fy>y+^c%PZ@ga(V*Umh(`n&lAn++H&HZ>oU+f^8!+YL@5|P1)yE zng!c##d=<)v%C~1nS*>yBQBbh4=Lt9MztB8m6f%FL5Sh)jT4+C#U*BY=|w|J;#pem zlIrla*;iLCm)=L0i$Z$Xr=B5Ix&S{07Eq1LB7JYcRINUTq*it$@R1jqpH4#snQtk) z=I^WSXD-}hL! z$@$Z*S}C6dFbT)y4dvouPZZh?Rd#OV3D4ht&uB!laN2q!yfb76uhv*z(D3a4b>>a$ z&3g9;VNG5LFrI|Zx8X`6~s@>U3M@pW~HXWdTmY2PCoW>0+@yN!k zYIT9zqpgYD3O7>r=fr^*d*EuM$nAmYK(Vu65spRr7Cfk7w zNU7;ti8F;XbiLWPnk75bj21X6%HyQV9{?2|SloYjc5m}nQ~iTy_uaqr>^?dK-w5O7 zHH-;+q#_MWUQ7RI+O@u4`#KqzcB3|&Qxo1+U$e~Lt);zTH*d+v{LzoG62Uw?r}k#K zRg*-`UKVH?1ZsakADg_t$}T={C%S-L1uRNU*?eJ@T3)B8oLd-WjQyi;S7@+)u@Lxn zsdE43+oh>K@a-1i|I)YH&(0p@s)R+~U09E9Gs=A&B9nh+wQzcBvJV*0$_uoQb}990RNigg+(`k1RR2U=lW z6L}P@1@VBxJ}{%7HFCFl5QR!fi65=P36%+QAW^U4wlz;uB_E;agomQ(fH;PlNcC2- zJiI=Mz+(A9;HA+K;vHyKr}oaM9= zHJJJlu91_u&C>@8E`>UCON7)pr@H;^spx<$(%vfbT*%*``o_vuMUa-?x;7}nd9z8N zJFARGiE+(BP(sl$YHF}anx2EILmJ@(9X1KaQU93t!F2Mk>J~R6YzGk2{J9$sV z_`&>as00i^==wVK3GWT;GQhE0ivvB$SI*9_4r-O5_tadnA|hoT z%eBd_AM*CjhoaCF2a_-o2nv+6(4cB$Ob>X>Mq_uYke%i2oEve#5<8P<1aTZ4?7Y$r zr2QsRlymo(jYo$&H${iVCz{j&@*~Et_0idPM~5q|(LI679M1HcvXneqG7+R}Hp2N! zIayc?zI(}11tPToSpTEPccCDkOcaJDKRW-H)tU>S%9wy^gYF<}0JcL%tQ?Jv%zcm_YFe2M900sCTrUF-{$UmF{a zZA($k$u|_xXJf1Q9#b1EgZ`OP+wli*Ui$g`eVDARth>*_->~KJ@yI@m$MAo*#_e7m zy(03t>A_4P2)%)BQNYA@8dE*Y_M$$<#Luwq*EomLaIHYnhBBxoIZO(?c^M8W?i_Gn zP}PM4-(Za2W{k3_e2jJJQFa<86c;DU(07GUJ5T*Ml@2c`2Pqoi|84*7fkt?1{$E29 zmHH~+9syB`KpdGkUt+>t=Rpe$$wwZBsZv5t7-64ZfzCC>mzY=K_F6Bep%v z_Kb{-lqC~44)5HS+YFyx`bMHXFLSvWB<0hXrKn%T%{J4X*wx8-$^u(JW#vKtYxYjf$o0ktmgPXWsod(sE$tWRKQ z*MX46&N+$J7@3tpFw6{nuPB2kToeTJVDUAwJ&{Nu3vV~~EoKUwi7-e7()-tRF9FuQf~dl4TotdNw;qp6DF=yZ!CaWa=FA16)$%n(p$30 zt1H2j6|`h=A081xod&C2w~Gyes*H)$fnQDM+NQPfkFxNk zHF<2W)U7goeDHzTLQPGPU+n<}D25+i91o@k$KRZcvDgv3rbQI&S49?FtsyV8jx+b$zWOO?M5G&G`cz8cbFsM z{FgD`9zQR1%N5KZ3?f(NlO#p?3?}7iHG59lhXs8|ge(wdxh#Q2I->8mtPYa5nwq>n z2kmL~gEdS5BvhufWVcdQy*;lZ68QDf*J>>fo4{u&iPk;NizVK?5M)>`4W+rlW?ws} zHz0rRy?;l8ROr&FLtA^zN2f5{JitD_D^lDwm8##fft?gzj2xc0d4ubtWQV~XM`A!N zZayQ_>1o|^e~Gk|@k#edwtFtx3HoA~-R*>$@4WC52IJ$U$l}m|u_$ZPR|ul1 z;Jo{}H22$Wf%|ic))RA9`@cvhMvG9o*gx@`t?Nt#i4Y((zDQhp{_dqt43YSyUT3ji zj=in_!*Pwo)Q0Nunbo?UC5Grg7`Cvsk-nr>7bGiy;@nL~5kAfeR+g~OgF_cc9Pl*x z$v*eMXR$mjo!pGUR#XoY|K96(%x0Nw>%i++W&5YsQE-srb)0}yc~QKMtN#nH|^>`^m{uLVcxZVu(;voVb0#V%VSzTafU&g@@$@W&ovV3b)5Cx{fd#F!%>~Z z^YDZKLzj+kf;|E(thI?br5W|6YV#47-|FKQ3uTOP<)>vlSBUF+{a7@xC) z5>qcPF?A?9!PXv#%3Oa!e++UH+KcZjXU;NZd#M0t1pv^I(hBS-!kF7d;87! z)rI~;R99KOT_2%Hq{x7-%Dj8E*S`%m7K*pU_UrW>)3FvDrY7(ypC!kKyLd&5+~DOyj3Wjne> zO?>yGY%&Zk@2XIQ#s{x}(0JAORo3~GSAr-RT|ys!qa<5|xSZ}TtB|~ISNtVyP?M1` zyIt3uPlLcBXc0L4W=oj76vL{V${P|QVG^(Iw&q z%BAB;x>BXrzikT~=P`QuQs+{> zS6pnnpyi)_Nb$s`+eQsJGyy^fen`dxKO~RpKk-9)OnzLn|6+U6M<;pc4AsTbzxG2; z{!>3>MZOUOtfC^LmXk}P6J!FwWEift2gRj!p8GJ9gWtfqP=16VqPk+?e6x+h1_t5` zlP{u+i&asYe}OXRwyT^okM9lLOm~c9$D}{N=X3THWU=MW#x(&mXg@(sGuYPlgPeYBr|YEf#mPtAT~rA>rVkuQ>a@r zx(?`J6Q_`O=1nLe(zr4A$r(MU+j}V+X8Jo}t$*ZR?J@uX7m9V|u#`VUG+*l10wMa! zg5OweW(0&>?sQ*>hPmh6;wq}XhAq0KCD3b+eFNJA2Kty5 zt!$rv0)rxAWOpMf=@nu*T7%PqU8HQAa8GQN-L32 zC@ZlAP=~AIc6(c3^4C~*?#4mUc_lCNdtcX<$sV&%;x`O0K06Cs9TqX)24D#{`Wii5 z;Z1=0%;HBu-0yGw4>s7ClVh^Kv_&-$2doCr<&*6=SI0J_dv^E_D_4)a1MYrWj3oe< zr8OSj>Yr5e*u+)3h=F7UGVGuby5MT`lW~2>d{v?u#4)7(cPmH%4e8Kl>O-Fg1_qSG zP;-e`Ws)hV z@l|$os+@x}!B87Cr6A!-ncDHOtRpmTi#~s{x7F z5);tnAl>BFj_pdJP@DQd%Z5X+EPV0K_iy*(T)9x(MitC2Z9>yb?XD&7Mv0UZ6+#z4_+{^ukY z_~Abh2LJbT#x=6d>Wa4&WI>XuN2m9~Q>|--w>B%{KYxCC=2n4rzG3c1zFVi#!e2p;ml_dS^QpLrSH96Z9ocIQBFd|)GaqN|CV!nr&Z zBfmp@tJO%H>^mZRi2@_bB81R8`&=Z~$L`sE;@J-Bc#!c=PcQ;_{Go{-exII990=?+ zcaNHX5&w|S>e#_cf>G!>8MC;DuahZJXsUnx$)Y!E{kGutz4ep4MbzTRZ@&1p7T>*x z&iIm5MV<5Qqs%K3yfJ-xgk}hrNCZEpTPX`!joyCY@ScsVj~eS+@8A)Smm2ndnNOMN z<6w>Cnq%Ylj;?)>>&7)7ZE9ke%@u0J2uJ?!wi9Nh1Pw6)0iAOdO3(1QBWw#$Gd-O2a zv!qYDt!X>|cMMat6~RqRbXRT6I>I>cEOUwy#_lAmn8AFt`Bd+*P87^CkB2ba_q9zI z)_PxYpCHa7m#XCa*&>QyeR8a_@DC=42&SraRShzq(c$B4RI5+&5}1KpW^~`loSAwr z1wmm8lSkTOA+HE&CXOv3-1Fc(Z_P#$D!O(Z(Hk|SrNJ-gf7E@z_a&@Kp(cKHO-;icOVj>&c=(hz5QS$ zJytiS*H2j^x}z$+17i7RyID?-ap{cC4gS)cu_|uVvje^^H}#7R@`a z)P#;PNK@H+AEOq;YC29uBoNo{7+W8D@t*#Ps&4V}M92b@nr#3>if^9ZR>Hn^-7*YT zwD1mRsFMN>s4;k>Kf+sFGo5B!p2hFMnj1mmEdP?#=S_Whh@68)!xMgqn4m(#73(gU z6on~A{W~4aihc*hO%^x8ALcgX9@G^t~^>CMFps|&}Sfpy|hr3h4Aiev%eQS0k zVjtSx@wE6zcgM--zM4%e%b2OuN5axNY4l@I5`NaGJK@=j_%o#Y_Ivg#Y+oyy3u+r` zN>4OBM3=SE(g+w^73Gz1<#xS2d-qz`jiRzOlO!z->StRvh=ews)q8eEinKQ-f6b4L zGje;NqOm=qy^G8+o(fwmMGll|%kCmyozz7TStJ>MX=iCr2OzsT>5=l`Y0w|Qi=z8lX;p6>vEjXKo z1V#AyR#=`Ad8@`(OLP}mLN$B;SbL4JwG(?oW5E7|#Inn}dwP>LzRIVtrf0iqO>Lj7 z{zZ7gDqs?4hQLW+Q{=`fYNERE<{gJv2%PD@!Msfs#r|)3lY}wv)V71%99XLcKVCQC zZz{X&y~-->hbx_m6@#g%)wR5=y3#iqf|@HF*4B;gRaX=qawerv!$!Vj+FvN;GK5LU zHs9aPH@AU$C#qPjA9lRm`KiT>FlKnyZ28$mspaUTQnZS;|Lp9*Wm$vx)VU2cr%Af@ zjAll@Q1{{Po#WY+Z^d?bl81iD-&)v8K^~`@dhkN#rsm8gjILz@jOC8E(N;`AfJF}; zE8otvzmyc%O@yx?SodvQP=X2ppWC()VyRt-TUt%G-ibYkI6*yGyI~+_Rr}mbM(N&| z?*5d(;dY2u{oIaF0?MEN$^5ak52G)e&wtgV3JIMH{3L2@(DM`wh`>~<@nlhYrZm(g zCT1$lZb3i{y%SnTzH%(`+YK?gH*SESY#2u*@F==*N6OZB&Fm%Z_@^66;HMA&VlOO< zh*8)*$AS7K<%pvqh5lQb+~|=f;9}@DF|0rKB%X1wf_va*m@`P&0R^d#IbkI%CYH6l zJmV@2KKoc0rIL7xItfZ8s{iN)%Qp_L`0sD$c=O5oLQsD+d243G`EEnWvns|_yA7r7 zI;Y#~%Ub&b4oOh$aWnK(6Xgu55udHyu8|LjO@)0^1rcYG`OYN;Gn?Jz?fmzm5uL*Q z;(BIz&(g-U!P5(Ni}+MPIBQ&j(Q~_g1K%=@iYN?7=P&aB=U+Y4KIO8eiO22iI|~hX4l?$Vf<5Dsl{F(5 zcagU?p{OJmc$&Kir2V{GPpcQY#`;WRzw@=gt&r19$XX9VtBp&fiA=t^B6veFk>IIF zCpV@xLbKNdY58r&fuB$gl@)U zEY~_X`Ikzw=Oo>j+-VEq$xc#498wXb(f*P9L}eEh)uBTwH?Q9t6%-9PF+X`o_-M}n zidcDn>onrHaNI~;wciV8RQ0>pRbY6HUpg3Qk3@~oZWCjmpCVNiD3o%mY8n3kawpY0 z>=AZ>xmi~J;4m4YFdz7JY8<7$0wbO%3}y(`wf_UAiOd zz4sP6`DXS$`yKZ!->@szTmYLl@t%ZWlYut9;M}|f z&f?kfNbu2hjZ*z4lc)z3>kFZr5ND*Px6W2_I#di>Ul?scVCN~GqbNWmY6no^AAaSa_8A}UET)g`2s6OVaX63nb z*SXW&7pcWH5%V+#I*43Et(R9oSHS61wZK|wSG!u5L`vcu{A~Jc@(}x3zH9wb=zDC= zgo1lrZ1rKCJ^^HpLX14Kgi)-L?VSGzl_2~fq0%>%79#iK(EPzU&)4dZ8Sb>hRkr-$ z$m-)m`pM`byZc{#16i*t-iJuSZ&<&w3=-R3oAzzLVF`Kkyj~Z!O{sjkAEq|Ni`(;F zj86cE-%z|0{{rHPxi^(KDj-%WUf7WsifI#GK zJZ^Y-Y^8NRVh_s?U|Rk{5;~u7+CB<_EY&_Hw-Y3m-U%c{auQUdw z^!bLsp6L|0Z=?nDiAe0WNGMc2eJ+xefMpgulwO)yo%0M4UEE9_oteR_kFY@b;=ifC><)% z?*z|XthLW{scgwG$#7A2~iysowC80DIS2~mOtQT5thrykB5Hi?XY{SNVDuxcU(JC+dRN}PQ z=go6YlW3u)n|wQ8`ExZBuffOyKYAvsUW8n?o^#${6;WD#k+%rlw9sJT6>0v)v@=LS z$yKP*BDVLlT>x>f5}hZvu!G`3R^)QZEu1u)@6WIEf_dvtp78#736cJKf&cUGD_7@N z(#zO+4wQeX_m$qStV`qEN+VZt)MHljIX%dD3}d6dRis9S%rBTTHDD+>9EAwKj#1*{ zoqZ4}0ZE*U^7a-F;j8-^lW0F5!v&9~2{Sc_h>WxPGE?A`!j*Z zcU2Gd+O?i1`)RpsswH!FRs~N&i;-TbL{m?_BU2q;5(i+^J1Id z>B^I}N(mXiBT$*;;7u+j2)T22>XI+R2kXi^L;xDekLd5X}=jX++N$yw_VMDpgcgd8#71F zA-IeBmb^^zFynhj_7&{N%1QX!ssJ+ajr=lrdMy9;fyIdwZbE~zBAok-f8KKiHF%tV?v?3hO_O-)8V;I zY1htC?&pSK<2d6TICi9$+9=*&o8d|;R1Ddj7jnYJ6;Yan)uEK@)cEzZHQ!9sxv!8@ zH`MZt3&#AREe(SE?rj}fNwv9a&;1@t%RxiF-4`c?bT?gWY-}WWd%o(In;wq~NNW&3 zU(I*NbusF^y2G2*Od@C|yRzet)coJZ>+g8!K~d3hdEWs4yJLZ@14Cl2Ub~iazCe8e;{1hy?pD&E z#1D#l-yGAvm+m(5US@Xohd`9yw)2bcB>7x`9LIRxAHv2ZyL7~2Pn$ct3nGr?nW&%n z`bljcMuzyjkCk)w_+)1PrQ410!E9*4TM!_tFAIL4M+|RuJrp`Lhe|va{I0pMq_%z* zSju=Cl_l5xiW2sP6~u`pTY|uQ)u$xBxQzzs_41}yI$pkm;u6Ny)JaH`*WF^#AFe}w zjaKx_$R}+FZOvoPSn+Uxy@M(FO%&|Kg{Wv2r;r|jD1+Oc7+xyy4TN3cKY;ZUMM(QR)_87zjGfF_*_c#shxByA}cIeM`?%b;BGKZdi zL?jp72l3>(2}0~HDQ2^W(UOXe>JsD;(f<-;rK+9kb1EH3LfPXbMFSv^%I7stis?Vp zthpI?oNjmr)d#iJ15EJWVtEBd=%63kffO_E)#SaW&G*x^ zm+tam+mX2HNo?pfNa8I*eSLke-stmM8eY=JO@c=qK{y0zL4}{0x#vZQIp0@UQv;*c zbsSmP?vY2;`3afmZOvIP*KJ>w)8K(#7WcFZ5WAOTffV%;tFvm(uwKXem5&f>LH*m; zY2PfD-Z3>~b~B#Ai61fbfmKUjxh(h(>K5 z2&AU|rghjrl+~xm=<(@P34=Z{5(Bzf*35xX+8f!Gs=LmP(65YlnwHWNxEn@)hEZAa zkv`Algtbai@}E~hAn(vfgQ74y)QuSb;?H)yHCA*5H%THH9pz>9&Ww$ybFmjU5iQ{( zi@7-|Lyam4!kO=W1eBR|R3}jD$VlycE_fA^-~w>UJuyKUSUT-?HicO~%|Oe}9@7oo z!^r%VSC16*8XEIaY(g2K?cTIHX13VfRP_&}Jyajj2SXcGr-iF>jXm+BVYjyRvgNyO zczmD{k7!=iTUexmNK!7>_GlgRZW-{&%ucN|zJ?&hL{J-hj^`g}vstE=W;q8fEgto& zxKO%qgdt2r4|g2d%xMA5;x~&}={KiGw(wHl! z$cjJKd5zs|Gk+rP8C5{xhkE9gSo(%I!Ij=m22QdFn_X2X^4M&`=cYX`Me%6ReYX~S z_sWJ!c_0502k7>TT=(qbh6|AI(ltF=>x5f}lxDTMKi1t8;?KwIzMkF{4OiJ^(S^cO|et9e{j4@V8 z_JN*8PpH>(*;YHLFNQKY0?Q;h#KKnn^>)dc7o@lR2_biUJ(J7l^1DXYXahpuroq>P zuNEns&%pP)1`nmp))favb+JhLYftMK%aA@X5oGxm6-E(qomnNWH)H6K&|jDHb8tHs zq-{jl&tCMK-I*)m_}Z4@DDr;&``oSlgUZFYy92H(uETGR4F^@;Ey$YZgnl$Ht_abr z8Qky5sL+&IFbRwJoKbI*JeYJJCLEFun+x7p4b}BVV4OkICLYTR;cqU`) zDV6#X+~qyYQvKympGOI}_noDA*nIkZ&TY@_sQYL1NQ@gUmT)~Zu2 zD^dj~UiMo}YMzJoh9pVR7WbFA-pkI8FzL^$G59c!^08bJO+)^4K5X`-5Wq;JT3v4i zOGtOwds)ZVZ1F(=>k8U6Ka8MO2^)W}XtvzCyqM;)&_!o+5z@`NH)W!$O<0jO=y)Gq zZ%>WnY(e$ho8W(|eKoq34jFQ_D&y8<@SKW;lTlynnX&KF;?}iwi8GP%OXj1it?`I* zg$+Z8fpmrAIpaYVLKVI5uOmH~yp<`c9US`3U57zp? z1wBpS%}zG{hTWiuFlfaSRJ)-4ri5FT!dj$|$NSnl{$*JkpGn<*Y#238&tJ_L%w|S> zr@qQRfNdCbDpzneXD>9C{&BiSt1Kj*5%3=QGxXuEyxJqEfJ4pST0n!**ywpCzkH2n0a!Zz*aX+PoE3q6i~YPw%>D<7{0~A8p!0P902(c$1V7>NV}xkj#O* zRI_L7EIB9|k@EhPyXDRzj0wGCA@TG96T-r;WvN$Q{0e(GNTn1uKK;k)jQxP1t`V-N zQlGxWhB%{LL8(Ck3-C#lXL4Ah0^PQ$B~RN&O&7j!p;GMi3J_V>{`? zaNijbK6dS~v#F(C>WhT}V|Jekh%bq`J1WFT1lYT=`b;{B-~Ib;!U* z`+(ABR=Y0U-Nh!Cg&jYf!XJ<*$e(fO=FZ0J=*)`st@Hk2yG-X?g+bPgVp+%E8wou2 z^>(v(&gaBd{(uS@66Pn=4AyV9ZaGd@i~SGmRx1ZlbFAvKcFp!?7o-{8T?im{aSU{Z z;I;Hte|Z&oNQcsGe#j4{o!IUk7ptKGqH1KA1HbrA6+TF6T!hz#=%fDcH9 z;Qs~)fpS9L)PFWE)!q+p%Bz@`mT+G2ku+Xl6nDk+N^!YPo`MsJy?H z{Li^T$;dS^+fgwN3+?=l9I(IAoLq>1BjI38ipoJsBktU9@AoVP41Xik$ zn0mJQ83;&wgcpdlRgK~UXLx39c89F!3*JdIg#HX%m9;|I0_Y9t-u;8lPPxx6`IIkp z!YsmZ^^2wAPhkxANP9lGWGx-tZS&0S@dmr(%AHxq`pYk&qa0*lh&?4E)p+&G>n zone}<$-~f%{_o{u-7~TDob&~feP`beF3(wRECARi>2cHgd+xfb4a!S<{1sd)<{@?U zMTCp=!&~?2nGF?O(7GRtd}8p*<`OXhsZPJnEV_~>H)3tjfNnxq50jO4l5iM#72K#q zd+if8`ZU`4%{dxW|7@bBw1ug}tPKI@V;UmRSku|MI~MbYvg&Mi)Tr_%4QQeE2i;un z)4WgUWr+|U%rh`;6fX%n1shqXlFQkc34`ZIRE+W_bbccDSOcZa1@1Md2Yi&~oHdD! zl9B*KEU|RCwwCF^hH^JHK(=+WaQ%MC1g+jj-Cu(E`-KvavOLvyaX~l9+pT_?Kj`C2 zp$dw$IJ}JSpqkngQ;XOpX3L`CzL=u^*FQL<+ckOeSYM&L?i_-yJq{8QjJkt#JT@66 z}g1oO9D7x;0H1Bt@HsS2c4sx6XfCjz&>zZ$Sb*;+E45wp4?^2 z%Leo|Xx>1ssyVCz_$IOU>g)GE<|kTeOdck}29rV`~Hdvk9s&9DK!v={Y% z#Tt>!sJ+uOne8?Z@o8hZ71PU##Jpb=+1&7t8&8&dl3TTfhC2U}i-TI7cBZ6?9ju3I zNfJd2VcHxAEcGU{vc^+Lc zd)Mtri49L>KSlJ%d_%n|-L$Hb$!If`soUiQ+V&7hmp|y-Iv9iH*tlMTzO(EjKBPjB}k}*ip#e=w43lr+>U#W*DgS z>qD>X4(Ws)uA%sK>0-Mcl2!E;Pob-9+W8TsmbSdEQ_IlJXg4(q^n|>wtgH(ur%r)9 z*~Ag_xk)9%sC%2Rhxw>rX^4br8}1Jd+bp8CUH41IRhW;As)iAKRoI<@o5Ck8gpfDU zp2?eGM}37GUG<~0sOtVzZ0xyyY3jshx(1IFozd^#_{2LzkJ8d3)zYkdmwz{iw1~(c zTVV`Z8dQX-rJTbaMwSL8%+VX1VHp_N=y_EnHxrypdHqzDA!AA;b=mxKuGZZKR;|;O z-k`CvkeI3-dG5oswq2bMN5W)rm4@_H{7B7kq0%%7Q_bVcgL`kd-3&#wUH5h-&51~8 zt37DB`x|#Hob__g=K!Mle3$*~!5OjD#BcO(B-xcKln+f!;gMCM7n+!lgkIj;%wI$i zBZ#gTT%_hS-CxROVBR!b5aS%7>oD&uM%ATpArPN?WOar3+iy$YLIyCsC5VRBhujHP zpR9CS;?}a}DzwhK4c#S+D|gdkiVi-1cJSyeIlh(Cz9SHbDH0dCOy64lRvRsT!SgF% zU5ezcq^decLDnL6rdj^`{rwYtF*DpHDY7Kea{b{~l@*V66P#upeToVe)5r(H3oDt@ zz15@i8fU{Amsu@aKp!p1L(y~LvnDh{pH&qs*gX~rAhYr{7vjw5?)4jR>{87%;mA6 z25*PgV=fHo2}Op1QR&M)Z9~Sam0L7Wi(-we{ar@L(kBMGvy8*pUqz@R?kg|aN{Z12qf$hxiUF~*CT`(9PMUnhT`@SGaslw7|XF>Gk<5$RssoKxk>LQl8DWSm6aLa1goY-Dlu_rj=vitShAKh!3rvk zoMy!@Y$12q!A5ev+#he?{ht(Z{%xEC)SoK8gDo{?G6s*m>28$4F3QsUooR|kA4T8V&~65H`hwn81k^4?nm#@bZ?vpO^}kc z_+5`8*_|?{mkQcQl=q-&xKJn$bIb9V2M5hgnQQT}V!&+R25Y194FKJMye z^7yyE;W?S*aEeDpi(Bu=k<_R6)4oW1f1~TQmeq>PjUR4ErXulUB1d*kV`Jau_%Lrd#I@ zfDJ{h*U2;DRcYImtGy<&Z%A@}mr>lhy8~`_`_9yoh+*36j8)Cozr+StSmq@%y4F^E zFt7+AWLjZ@gZhV49fdxH$MmG^rm;MQ1#&Hw`&KtQZ*?acprj2kXm6m8Eg2T6YTNQ0f?lkof?YwsG4Q z@4O$iT}Y?i0~zp`=*FLYczlh>FsE8BEu^zKcku(J!*3pmkD+*fsrD9cPcTa zwS96V3r0t-av|0PjQWX_3(;2<+WtM1cThvs}T`{eOelT?)$^i^?Zdro#4=zz^M57Be zsh>GZa6V@c)&k${UA`ba*+Ogi`nvJ$NH%d9-yLk|Ra%(GyyY-f_R%87u*ro0~7}7b^=-ntaq1p*!e~M1sBI_qndV@LIrAF(=R9EO+x1OXYIII*jG2GH9wO@^> zKG`!q7e;SR65k+aBVR!TI8Tx)jU3)X$s7sh+Hki z!N8CfB_n$EqphOQQHPhSF0N5qx9Ye7g_=6GmBr2;{+4jJIVrJhWyQ^E+&Qa{}75B1m6 z4GPpl5(ne9@@=52?R~pqG|TPoYk<)c)mFdDtt?0pYGv2vMa=MskMD4+j*R#?hJo%| zez|Wo`#J6~nQTbxA|xY^x-VUxmgXBHO_PyIVk~*-xO@HdZeXm(T*>dCk9{Iw=Um@D_EUSEn0>z2g82esN6kb6K-a0X0|8vKvOL6-1Y;ZSa%qW`+dHC%v4<&^YZ$_t0-1!>iA9QDOc#(sXil&u* zUYqh>e>6hA&IhK*$fA@}(-T+0qlO>oU__-FbGB${wowYVu(8zq@FAJW{*uqUi7Bud z5Ib<4V3=JeM1g-6?Wl%%e82?`D0uc;#oguL5m<^SZ9H z^&_E`&qXQv!J~H~HLOCQ=ghX*-PeCn@e@Mqdc+RKPfmBcs<-#c9SJkdlLy5=<*#<% z(6Oo-B!79ZVB$)rGqTk2Q0t(;L;rrcX-nhXoA$(J`(OMP6Bv(9x^(yFLKSi6O&-v~ z8vUTNEil9{@|EJB4Ts%F`(dZ*S7cN5LeY3E3x$0R#Q7Y{^d{T z1}l5+SOmJf;^maV#nDmJC~e-@F@51 zLUyU`R1rIj%R}_3Hfjjw)xhv_#6q_pTHfrl?}1jKk+zZ-G9Ii*KYYr?1oaZXyACkl zXi?*|dMT015nA5WDBs(*`a2jEHy04*mw&G+;`?k^X_e_9#>KZcJ1M6xu~wJ%@Pjl6BJaKlnD zr~7C;fU;O*L|P~GSE@F1xIlzN-4a+$Nd)p&lY<|)kCt>U9zJm5Y=dhBL%Ux3Ug65! zQPa*IGOm4&S+R~8HH_HExzXz5>E{$cuKRpX;DR*n>vH4ed=YGjVYSk$g+P&NdjGSY zO>UBjP^5ej)K#{B8XP}<_wdzN(Ue?JMa<@1* z(QmvEL}`i%3^FerXEK2OurYq4Q63pbiH^{;s+`T?#Rv>8(!@7upYTwq0i_HY#JGjdN8&WaA}K|WBU0XFqsN+nePT6~*8})T z4aTL5rUPlrS0W2XFE8+$4}~w+KQ`p7wrQv(W_;7#7#P_tao!i%sr6y>g6+bm7Tec# zZvNR;y9=DGv0EC;FC_ZB@sylb|G3Ch%KKmfm(awp+vlaaHqMW-Jn8&Ma4_MB10i2= zM1ih2riUWT4^hi~HscZ~hK>5jvu%jk-iM!J;J6o2qR6_;EG`}GZ5on2jz3Y1(PC#@ z0`9kj`03WDqqg-18*8;tcl%Ja%~0jRMD^MalG3W5`gS=jbl-=xTqYWgp$cbS?8u18 zvYC+p0H-f(cT{W$pGPH#Z`BYIOjz%7mUbX*YqE6=Nvo;^_6mY|!zI3!ksi8g^F`HPUO>ay3iE zjpz!N-G|@X9t`Ur)Noji?#*WBmx~LC&*I_6PDE+g`uc})n#8YS*_?0&K?0>`|Uu;1&6n=IEiF|i)V8fb%;u~oH~Rt+;yPcSUe5(J*ljM0MY#~b{E zY5$)~J^HuV%s*`i$hZWaj8BBPz(qJKv#>>0p{V)dv#^J{r78=T`K&apOAJZXJ^_gW~T5?LBpX$)IUljY^}a0{^Jd<+>Ix`cm|8PKeePA zCw&ol@~}J`6-dPy=LwSIfJAnGDp4dvf$se{p90UQneUCiFSVDS2R+oJ$x!0xd-0G5 z^BymQgzJaAM&&ly*7AMF-j^7ex;X(9`C0fG!nnh0FAwA7_pW(YVCNd60%)j z#7R_Fn-2}=X(uP^>t9H0#g{+q`COxoFP|SAQ$V!QQgUj1fB3fSox6Tbj|4~>jrTY| zN~*0*s=e+&J6djT*B9jRYcbyCvqJ+-70!!zFyCXYg*5>nRO;2`dL}<#QsJeVqun6U z1^#>_uQ9G0nSu=zSx6^~ad|21EW4Ab!86d<*OpiIp(EOUyY`nq*EdQJ$^|U-5PrfBfd@cIdwZN9r7{oF&syXRh=i0{7@{tKqf=rtw!vTV3a8BPWS7me zbHH38;wzcB{K%f>YZf|80Ms(;J$zf@{BRa?UeY(_FLaUkqE+QtpvWegqh#(+=6N$7 zv(=uZLS{KxFk7UoxbY||ITByKuw;X0+w#!dFJzdXhxLvR#cZ)_ZUom<$3L9x>uNGE z#v&F%`V>WqPd~$)?67ZT^-e_hvP))@SmT}arcdjjR-;9mYa?DITBobk6FQHiH>r<@ zn{ao);{|=~*vvm$^^pT*HOiwqy3jZcjDyfZ4S{)v+9+{Nwa|>4o+pTQXG@$SAb%! zzBDzfc0156GO4A+Ez2^`CJm5@0pR7nnp}MpY})skfF9@y)cLxuGh6X4Yhvb`J+E!& zvHX8s<#^9jnp5ME<3x9MvgK{u@oNhX21NZ0B4((C)55020b==uMu^R6 z9c9%pAH&z4F?2a`Q`?8eZ`59a4c|=?+>FG2od-w3*QzRXG|t-S@FO~H`182_!2|)P z^Z8LQYl17gKtF&z$y1mD+$p!N@Z1#P2?7%!3fRPUGHd*?&jGq35xm=M1=k51uRPR= z$mH4i85zZpXk~|`-g5JJo$f%{*0wYw5I{mLmm09R;xaAsOj%JxDV;D%hWuf?7tbnwD|?sCJ6C_ zId(Z#mx8bwI=PdE)u9q_qSj8*Tme&5^Y>&M5(_fy{(n{~qI^lo{?c+N74lt{RX zE$ySKZZjD8dgSvH-xeB1+cu9v6o`9a#D=GXa4iFhKz9MEM3*@lAkc0PSU$_i~BQGM!hpOGoL|^OMceO+Qw&fUS!5B(a)N_CouJ2kz|P z+8&3PAeA)CHxPAB-_kca3z#~}nn~=CxiZV@)wh>KkY-*Uo}0J?e)CN!2i$k7W3s^id1NBXRaC%`Q_1UN?oBa${Ga~U2#78X9nqYOaVa0iMw!NQtQ zMe*XjoKj!a{?B<#nNKGAP(1QbGVX&c6FQ-g(onmW#wMgv$CiOv+C>S?avLY z^{8vP&FI@PIxYZcMjB4+w1*@mnZu50+Ez!xsxg31-6TwU2f9}?%R}@ zTT8M8fmK*!m&Xz9B2Zc;?L!($4Q>b$CL`=^%Id zhGlOVkdhkhz0Knf?F~q6EK$x)3NOlu7RY<5sjt2gsPr=%6=I)T+up%zEY&=g!jf53 za7z6`-|3C@ZW#K}y|XeKmDx{}rbHF&<)IpHf-&zGFe^O%8ofPbV`#hkstO_bhN$fY z%`WjmAE%6hOx;M8d1iv7X+6?wBhM_~V+vXmbhe4c)pM2$dWR6(1!igTF%FY%WT!LS ze;kK;CVMp4>F*9wp3jkaRM@;R(=#yG9T=Lt?$6&LxZ|wJ7yh=)Rp!SD$U-dHV{JqP zq?Q;k0Z;1(x_NS~f_d%* zRqm6In{leXV=19c?K-Tt5Y)=g0bbb;fKOY@n|49kxgS<~do6ds z{T@hPp`oIpqNSy!r|(#+4{r7+e0q*2=A1?Ug_s+4#+Cz+|51U?&#uWAhz&$>{9h0H z-ZQ-JhNgtZ_4|e2%6YesK>ssrjCjDE~!`x zQ?i}BqkdpnDJp;TcZwuW7Bd7gC%725sSdC1S zyKXN~R4|oDaYfEG$S)dQl)CYRRwT0!$gLmQj|a#+9&t~Y&;gXuZFbbbfE5 zIrjIR6qIOxnvh9scwt%1bD>*&B|XS{ZaFgq$ozX^1uwIaZ6)htAc(%ONL?h4lE5|3 zLvz#}wm%xV9B)!XXS`8IBC9e+To$OT^^oPA+2Hbe_Et^%?kB|a@JKOA3yl4M`a`&< zl96K&+GpNTDRGWS%OzH47&~yXq%Wa$(435bE~PI1MaR|R6nRDkHJEl)+3to*^X0Mc z7L};zP(wV0E97aTtHxd>YL7XtjTYFdEo1?NapW(H%Yw5$dr5|Dxg9fKZQlZKM;3Z4 zi~=~Z@k`Ntr3;Khpq`iC&q6IZier7Nou~8X21Laa$pWh=>ii?DLX=*7$PZ=m%Mc^Y zN8h(NisQ>Ob9t%^s-{4Z8ja2sK@`vA6GrC(0^9nFbK6afr9fx|1n#C&syb)EhbyDQ zg+?73MJCe|K*EQyR&mM2`_owYYS{y>_?4VvV#(MU0LSh^0ZUixih2Gd9J_XK-rGg2 zQD8f?RI)BYa>ZhJt3B1@Xo#_VsZKtfW}Ug^UBvGZ=%Cxq*XoKns7GZPlHPnXTlZvC z+I_w5{fX28oA83gi8 zrEKO~EAp!rP==Jc!)nyhUQt$f%1jySu`$!okzNoZU}@cGB}`%8RAM(;Rko&2Ebs#WF3 zfJY&Cw8B`m)o@sraANbY+UEIHXD&h9_>Kyt4l1s-dul5E9P3d%z0bOVhbSeYJI%=_ zYrGYy(dlaV^h(Lie;~f|wZe#gmWFZEz7I8T8i~lw7Q3s2goHpYQb10V+v6i}geJV= z0JF(0cJggYulI2^EX(E@yj`|xoaR%A0V<^9K!3jw&`Aglo`@$Utx3_h`wY4RJPY4~>evkhV;~$S0E? z^ZS<@tS^g1#3Kf&;T6ZI{Enysm%pibV$fCK5?#9n)RWUQ2`ziD>Zj07yHQy`)Do0% z->U>9V34w8nIG~7{|fOeN1qf=dj4q%^nW2Vc=EKx&3 zztc+oHwvr&K5HMyqJ1;?PuxC-hHwB%W%IScdhAcZ`JnK>`FwLW-f88Z2q<2WatY#Y)o0i^=;qG^VW4tVA7^wU)myqmPuc<8*RDPfuC6+T zhx)+2sFDn^9GY@Qfn<@)-95O(*+IdAqUg4LdhF>S)ilw6*nI4U_{m?6JqC`W9rWuV zpTHU+8*K8sI_Ljn?hTh{6;yGZdZv&#Saq!)z}}_54xN?hO%#)bUQ9| zS*toR1qyU=6C1me5^)T$ z;y6t_sXE!vE#I+Pelf;XaoP%~CVM>jJ)OpFJyN@Yg!3caIOo=ug;{)rd8L9+Vm`fM zxon^bdG`y<(t4x!u6HI(6y>15W#w0A6zBk-lwM~jDtf;>BCAJF5qX65$hm4aMl7*~ zN#j?9;}sp4!5w}Gq_L~})y8BVp5lL~`2LYu`R%#|iGql&iVJsPB8ytSyUD_q^?D

e8%>wQd2uj|UXcfhe3~an2qE+Zi7&t}`>8MB0K<3OpU#*@ecLMUE zmHlLt()(u!ZK3r)PY;}l#kdn*g!!z!eS=}b%PIm+VT+BVzKi@HP9hKDxnA!0Gg)=} z5kja~Jx&}G0xYZLW8Ae~rTs{7QdBp0XbPl{)V7%izFv&lR6&z_naT9&M=`tMb9}A; zQ^qg$ROUSJb#&drM#bh@y9x~T+J$}AWB>%m^EK{s_U?Q+i@L+CdHUt+OlTfrm}7kg zc{ce=39E6b*%D*}4Oti>q@e-)q61i*|0W~_{87}_DU>XnjiVtbtidmINdoG(JXA4X zCbHcnwwxWVMntlz>T~+pM#%*xZ{&;}3Gk;_z)pSHe#Y}E^>KOz5o1f%oT+}xXvo|X zr5x;?l$+n}LPDth`4|eEeC44nqU$ra+HS2r8Z^L+Dr1h*x_>C-WpA~@1KQizDn&PG zWOdhzn_9fvNd(b5wCsiI+pAe3TH6ITE7nUipLFzr%<;2T-yn(YWsk#NDf2J49iBG$vi=dY@9kg#7b9J z=OoH$Q~G_pdQZDb^^R>Qsw2iBvso58ng}R~+*=Us3k=1Dg*Cq0%-PQ@y*hFm443On z-@d=iBVsY@!#BY+sN$A)M8=XeCP+sbz*!AB=U~K;qo%<87+UicY>tK&u?o% zEOqPT4KH2`xcm;8lY%|dq_pH~GT7!N zy=Mf#L%@zkcUNCSNY*yYeONa*Jxn#^L^{KFP2<*kl z&};t%;2D(qx78CAs6X-AyG^@Xkt!GL#ZWx_<4*a@eEW1wNK`9cihJ%)u?AW;Gzgo< zlOMQm8YH|oE27n3=LDe0@qDcpO|ZK_UjmqlQ3dj*tD4RpXG`2b|;Fd`p2$DPgxSjdGti`j|lgTqMDwS-A0}Mz5yX9uD z(j=LU6I_I(Rq38>`KE0Oyh$_AUc|OPxmP^jP%Z_Ar2sIPK&tF~%W*W1;ez_ptCvCxI_n;cKUPKFRiT#+; z1JuLwnv==MQitlZ1CHU6g0W6=A>~g-R#AAVg@|2U-JO*v+TDNt+EbX~onEt1r*(Ur zb1NGw@$tZ)SvI5LLci|Yj&^>8y&$V&W_qj=o%N^4V@eBG zhuL5L+*d=>e~1bG!wdwX>3AA*HDXA+iE+1&n88Uhibr=^FqFJ_}xV} zkdX~apK{!nlDgbBNVaPMw{aBZ35*X*q1~<}T1=<_E}5ag5y;Zn-a^<$mIzWyCseHM zaHMxdZCBy8WtrPH#ob1EyF_{YsHMBUEH|R|gCg<~&I8>|;^)KwlCtXoO^K0)Mx)f~ z45V7Yfk^lhtoH>?8-F1afFXi9st*s_c_Y#DoQC)DDkZjJvf?06WMjO{v@fNr>G6K< z+lq}WZg9hpeMywR7ilHO1Q33aZW68!n=8CPwda29}kjs zsuo69n{;T*wuu=}GP-JZwf;h(v{Y1rAdyK1JMpq&v+4w1aTbWIs{^Q1y~w&MC0XH5 z2awU+$zXTkKLD95`_X@K0MleFHo$msJfU~&6nfWL;jwY*hm7;h#Q*Y;B(o);o1CSX z62xxvFaL9wtS{|jI)ex8Ijbt# zK}%62@Aw#sJNwr`Y*G?13st$Rr_AoYp$w zZWSE-irhBPkv%~^fe4ryGMd(e)ebbuBoRTY6LRg^0T6zU)QW8H+68Hk?R8L`C8@~s|A0sHpMOW{Z@TlJElYWl zy@XlCYO!;VP0REF&P>fHH9>80cy?ODit0T5k5iTab6#1as@PXEt}9>dOMl=y<2wUg zQI4QYMmU>t&cK9273}EDu4>mR4)62Hg9<8+dI5wDw>J+x2Tz5NK?!zMSd~xAxt1lM ziG4)-$CL$0XF3Ntu(%{kmujC>s*X(~)=yFM4K|Xr`cRa}cyel?yj}L6SBmxY#tnv3 zILTJBvS`|L9$z5dZ%w&cAU9!`rJZF42eSOV?Bgdqg^l&T^hCy*I|ie9_AwHqKJaXer|aLVQRTpcm=R^ersbw(1s0uaS~o`}}jP+p+58 z?CcbAXs0k$Best!XIdkTm^Uk-v^{sck>-`5^VFjLq zXYYOA*Y&&ZK%~!Tj&Y>gT8#rBP5tR>opXTIsw4)`+X0OP)egDV{#Ryn-&Hsy``b5> zvhsl%V{OeqH&u(I1yZ574Vin5OM_|VWP47wRrEO`TCq#v<7a_fHFSDh2we_0TR zD%Wo%oVY@&+`mlv{8@d*G%YPHD2S-aCosB!)N*w;5lz~`LE*xhsoZp0zwhJ zpFq2!$-(=G@g8W@KzwSrG&&l@sk~ie1g5DaU)`2)ct_M7QPgOFky_D8qY|T5pI^wX?xuidBm;L0T}*a*n_)}ANx~qhss^Xi(z&c zCl;LArupR-n68-*Ed|%gH`2$h9vQoNNUB}kbeojI>;=Wq?XwX9Q;8u97i}Luy2Hv6 z&kkJS%!+$K&!3}Q(p^~-E9K_X;rh4t8#p!%8^DF;4<0;T>OBu=pchI zv}Vt`ws}bNgId7yVxzUOQzw#{>95wHHlMjYC-xP|n?{>eEVfS2}SVR{{L}?vz^Q9>G_3fEdTWCv+EyG8tr#V2 zvRW|iQoJkTDn^P5kCaKtV$p-*ncm@hp8ui&so0gR#jZun*gVJ-q!np+;_ z+0ZK>*+I3`z9g9MtfB;Y$CG^?w6L`a};GR3d=F@)>#Lbz^sX-7SUq}M#3?xHP` zerv=XKh-qeil6daehQge6N;00t_j8Kgw&#Rn-ssB@{8Ti)G=lkEBeE8ag!Vo#*CE^ zsnL2{y~y5sd!_|*?a_EI@wYy{$sn)zuXThOGrNw^p(qcw@XTSaIRSuLDXihXM+GTu z_s&H%Kk64m zHhr)@aooKji5OAGm|2f|d?H(sCtLg&p5=ak%<0qn5@(<-c+-x;ahAQEzwh$9{Kq`U zv}qH=PaSPD9><+LUGRB@)UC0Lq%Yu^c5!w=-!K3sIQ3I_BKk$tOQqn4Coz+KD(%YS zh#)}&?yimYDa*SOde@Yn^&?Dcsl=~s|L)5qYXCI|&RP&JT|35ed|?b!7rXCf^B*vh z-Ukx5HLWNxZVqbu>x~iKZO7BZ$u(m~M8+kui_&+AI;~B?#bVeH z^Xd9um!$J}j-ZOyjr<&r9(Kw5kT=*R{5x+D+-@^7X0NRwCN;ubmI)AM%U5pSI)2RN zc`l>8hVxY-f&lTN1CQ~}Fo#rYa)rTo4#xflCNJK@=WRIE6|xD{?XqZ?JsOTAJ8s@a zKki}_@6ZhV135#V!6xW&-Rgl4buT0ySIG*pdD)+_08z-#K`^$LrS zL%m!6Re`S*d>iEmR#!5%04{G79fFnvQ9 zKzK8nfIe06p1)S?vywz-5Y^sCbum7R(t^RtnFIE7acj4yFbR zDa*Znc?oo8UIQT_payf+EN6NMLi)26Vz8N1@4rU|51~acdBy;}`MB20?Fd z3E3%jkYQ)JS|>&RM649;4zF#uOk-lU>H+fV*OSXr&m!5GUpyDM^btmlP$xpT-hBf4 z?j#-v``f@~{Wbh`!^Te;Y!@_wk%8K_Rv=~U!0tl%zY$@WKX&f{OcB8|{bnD%wiD#$ zF35w5x5y}T8s8Y*Lud$GkJ{KMOWC>s;5Ifkw(r{f77270?0CBpTdU7{N0KXH&wl8I z)2g5B=@_{?hY+THMmod!T!mgFI~86>-0rjj@&U=X&;}y0zZJ^M)UA~vkDt4nh9Kl^ zp)X%hp!FuXPt6Mt6@%3P0y4nWf%yToc^K`=S>ZxkAwhwFa-ZPso-Qr#fa!?e zwe85SZF_ibMQRg$0JQC)r_0uI{<&@M)B**KE&MK2+ix_wZnY1HPj}6u@7sN;-UNIg zDA5uAHpAd=wL?ATS0hiR6l#b53KQvS{yJs%;u&bF%1UsX1)7caf7fYb zo`mY!Eo**xRri)WbP^?2LDIbF@YN4@s%Y3%ykHDkX|2^J9z@cpUr> zz+(*1!d%*hR+rD+4iOIAa)WL&a-9HpN700Uh9qwSw*}>!9cSQr&%QS&xMXp_Z75sJ z`yi$Z4)LP=wkkpaJkL$Ge}3AAEbZJ_pWquZ4O(adRCFzDhd*YPMdq8mu7%X zUn}o7qlwUh0n4+tdNbH{q{xvt`0+bL*+zfhr;5&Sg3Pb6g8OHA5{cIIe%@j7B4%_1 z=+lG9`9kF3mWP{KdpS8_rB16D&p8Kj#X8tl%wn|ZE7VB_6E_NDS$Gh>|diQuQa&=UIT+a^UD0+#cTCln*) z?cVd<_X)~?me8&*1d9&rL-R{_qElJ5?;Yq4&*A(7@0gbIpLs{>=r`WcAMtN^M}vRh z9XA6mD(u&;U*@#lua)3U8Bq%ZhhUzLJr=T5Ax zihCs9o1rmw@yu2EOy(a$nCri2(dE8Pvk{=oXYQq>uXhP4@g!rR~5j7T&(f7dqp zo(_^MCsS6e^DQ0N0)a6V>j6v+;YP(KFpK*|0ER>oe&q7>6S*&6S?Sttk1_r$cZ_1p zWULv@#XDIWUREsWgiOOuWclNs70{dItiyYUH!YFb$646~vo-mPFC7*15{aA?1a6h* zpTUmu7XJ!%RD7X*et1YVU6$EAAL?Rri7FEb87tje(w zr)v+fs6X~wb#93x-l0YaswBkDM}K}}9LX3hEH|F(hwVSs*Rx9xkizMslZ#klrC9RP zP^+=0zwkBByaYfugO*mIvtVWPdU+4#ZaUp9o$lS^NqcJ0y?st6c6UM8mEEzdEargw z_|04N+|xcJHv1KJM0EWfc6<-Pjy0~gmm%1Z@SkAE{ZT)OYpY&Hz7ndB(wB5<>7H~> z?BVHKdrmN34!|Y$u&1vNmPYSbo}A9}tr_F8t#}L?9DBWjT+raa^Z(Z1Y)`D3>sVj; zU4v8RK0RHzWPsh^SlqQD%Bp2eZ=J?&0a9t1 z(l}52$+WHjbNda?!=9Tz?-b?GPjiuAQBV7t@DpgA>A&Wzlfi!_oSbWJcgoRU4sri+ zN&WjC!Hnyso}zQ+VW>oh_W0*$Z9PLryG@y}`lYv{Qztw(HT}#(_dD(Sg?!HP?q&38 z88?pJhgQF70mljH_iQMKlj3hA>ps}1j-Ef&9j-w1T|;HONjYz4gp~|#hJXJ{&0{{k z56_0G%k5%d6=R_v3(dOiG77$o+4brs%9AVULK}6~Kdy*y#VkQMIm_TZ6!5 z+u9dIKPx|<{WG`*T0MF}@}k0<(%FaZ?Ti6ohEKP?fRCjFpPqUFy9}7*Jqfbw;CKp; zh_Lq>yEswDdL+hYEi3w~2jUAhky=?~k6FPal3JuZuL#hIv`-T3LTsQFnkv`{Pfe2z`< zpiXYa4|?N46j3pI7z$*dtd}T(t2M%{a0NcC8xv%ak4754>DsqUO}%hUb%RZAfYX;& zo{~QaM1u&1CnZrIL!3=gmPEz)oQnb7MgRw<7h{)l)_APdSB{UC}qso{ZGnh6WTQZWk^K`C72+K0_9)~()xO%~k#;N_#av`gudgMksdUE5Irr6- z=Jh6Ii9rSSsAhQhQl5o1U;tHZvF|+SRWZdcOow>wU#6$9eh<)!NLZBk(P1X_34`F?X7o#8r7C|atRAPBF_$fG zksL4T9X9t)d6^H(vy^Gdz<~y3u`>Q?U2EamiXgm0buJ8T>5uQXZyl)k&0zd2{_k)` z)yiLS#;Yv4H-Gij!o;Ak*@DV<`nbTbpevH7|cMIF@Y4;`1i$4!`L{FHaegc7zgP?r-is%iULoWPEe^%63?)BwT`#TVl_1}63XswrkW=!U z&AB&iiM^iSq9})T=EGKtB+ZKS8I1Q@Ox?f)RFnO=JSU$>EGnen9no#TTd|zU(#guo#*`rS zb#2Jvxywvm$4*YKHeQT-x5}d}B)cFl>z8@iTN=fNPz5ujdt;iA;X54+{Z^i@+FJN> zqu6xT3r-l-q<-1s`(W`ZJ3_Vg#|Xxmyw>NUTZ5_=1RLP(euL&Sl<&(|Eg>)+GGjB>WU$^>!DT@a_ zFoaGjUhC$oEV^p<$t@aV$-R{k?=w_9sb?T9n;YJWMJJft4qolX)%DH7oztqR?ORdR zKbTc1i6sQM%jFUD^HC4o8~rprkuHlWq8@%RJf>HsVgMk1@9*wkgznb zYZgFPq@30(cp!~EV2;^nnSUQvF4KWT-E2>%F7}P_;#Q&>b1Pycdnm;8)T^RJSB|7E z`L?J~;W|uXcWt)7{j%G!j*HU<-D(Q>(-YV%grCvN1JR+Fy@D)x(rj$xMtWV}MuU#q zW=^Sy*z0WMB}3F6i@Y!Ld;2{&5!h#leqFFs-ldpWBazd6hCAh5dT}jM%xQa+ExF>6 zK4YS7ddnul5cR9t@R=WL6hMo$YUu zitCJBrt52S!nDVpO*kTaaCJx3&S$tpw>GF-gXy4Y@Q*YFeGD9~yXVqYu&Euf#l+yS zZbqp?c`;2o6uHNP;%zt+>69|cI}qcYrJpO6x}_9G46c#r)fkTHgH_$~Nn$=afi-Rt zKAgmiC0(m>n8K^g)C#-}cSX6;jBy>uG6Idf3o^`2LopZM=>Bq~j%D`Xn`-eMM#;>Q zU2FE1f(}w_&`i-4rngSimMAVnbW?A8!pMS!R4$=K#HV8B+DTRS-1^7_DM$HeP17R( zHjnk7TK)VrifGGiLq;OTm}^PqV>molT&x?fyC=pF^Mk_>%4dX#?I?@l z<)di7LQ3F%50@PQ43GR8%ev=p`izcNsJhN;KUnGHehmY9y|rZ1A;pAK20}d;L3@U> zlu)+CuxgQXdx^;gu5VHI1)(NmQ!sL_S+=r%tlP!U(MPJJbZ^Un?7#3>!E(5C`k^~VTcu!v(_(@nU4T75Kep0H zxm<^1uZQCoF($&gh`cR(i=?x#g>y3C4Xi%UW57?G7i7flnmk~A-BXLS)Np-su@8Wf zt5L_P&geqFT(Ck`o23Xj6H=kl*qKncSKaqpTPMnFrbGoXS#D3dOpp%g>#rTyR`R|M zv(-Hmx6=0Gi%MLyYp!$5!d*@7Ig{NtA0uD@q@sCwAw-=m`gTv3D3F6;HA{ z5qrS-XvD4_xgVmJ#>d7u+XL6ZETR|sTwjk)=v#c>!pJ}=K|zP*f9=!c{+t5(3u%de z#E1U$i9mS;qcOUOa9G6(S0JA`uQ!hHge!Ya43&?;sP&s<#G%bAqXqjADyu|6K+7zA zeI=a+xIAKd)yQi79RvCI9J6^PIr+NX6urn8bj`!0ux=y(Yfjf4dV}ki4Qhe+8(Vem z6TY!lek(hf>NPM6(Jua)pQ{2x+r}rvU2PD?7+t(caTG~UdR>68zU2UzuCIZAKxt2R zF(wG{#YINzOFwOmiv_M8kj-P26lvy!(;+MSo~=}msfmDqs*k?_d;K+8mqc$q(e>D~ z4_2lSDwXA68sknmZSa|b^QojlT3t>o@7q~;xhi02U>~?wglDR{BBkllk4lDGi?x4lcG%N& zjw2%G>T6P2vD-1kO!?x4dpC!0hDqp(BjE4b!3Aa>)nB-a>{1_Zd=bUgHmBCLrkW&? zq|J|sasgLxS_l}2&Yp*~2&edWI*aKBYq^q)U%oqUTS1sd$?QVhQ7Ycuu!Y5BszooSkU4o48?qqzN4XP$QwAAJt(6tt4IcI~DdVcy{L z9>_BV&+Lr;iYHytN7r9F_z66q?oFyXcNNdaegt|qU(bQz=P%mjly@IHHYzCw9$697 z0O$n>`MC4`_n-dv|6+yQXTnsx)FI&N@Cw9Glmg@%4N@hVmgi=ofT+o93oIDD? zvaEd%RkrWNKu5%KUk$W-EG+Z8z*h3VPx;?>?0?D)BL!|}CbLPu1NzSo&<6S)3rbrh VlifaH7CgeDt*L)L|Cj3z{|}b-(R%;@ diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__loading__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__loading__default__1440.png deleted file mode 100644 index 2f7d5a37881ac8746d61313cc7af18b557fbc38c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34703 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 VlifaH7CgeDt*L)L|Cj3z{|}b-(R%;@ diff --git a/scripts/universe/visual-qa/artifacts-states/report-chromium.json b/scripts/universe/visual-qa/artifacts-states/report-chromium.json deleted file mode 100644 index f4a4f406f07..00000000000 --- a/scripts/universe/visual-qa/artifacts-states/report-chromium.json +++ /dev/null @@ -1,800 +0,0 @@ -{ - "browser": "chromium", - "base": "http://127.0.0.1:8123", - "screenshots": 21, - "findings": [ - { - "route": "protocols", - "routeName": "Protocol directory", - "state": "populated", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 68 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [], - "statusPanels": [], - "textLength": 639, - "skeletonOnly": false - } - }, - { - "route": "graphs", - "routeName": "Graphs", - "state": "populated", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 86 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 42, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - }, - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 46, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [], - "textLength": 328, - "skeletonOnly": false - } - }, - { - "route": "mining", - "routeName": "Mining dashboard", - "state": "populated", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 165 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.chart-widget.ng-star-inserted", - "width": 492, - "height": 375, - "svgMarks": 6, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [ - "hashrate and difficulty The answer could not be read. Retry System status", - "hashrate and difficulty The answer could not be read. Retry System status" - ], - "textLength": 1091, - "skeletonOnly": false - } - }, - { - "route": "protocols", - "routeName": "Protocol directory", - "state": "authority-down", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [ - "Failed to load resource: the server responded with a status of 502 (Bad Gateway)" - ], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 43 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [], - "statusPanels": [], - "textLength": 216, - "skeletonOnly": false - } - }, - { - "route": "graphs", - "routeName": "Graphs", - "state": "authority-down", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [ - "Failed to load resource: the server responded with a status of 502 (Bad Gateway)" - ], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 86 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 42, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - }, - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 46, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [], - "textLength": 328, - "skeletonOnly": false - } - }, - { - "route": "mining", - "routeName": "Mining dashboard", - "state": "authority-down", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [ - "Failed to load resource: the server responded with a status of 502 (Bad Gateway)" - ], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 165 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.chart-widget.ng-star-inserted", - "width": 492, - "height": 375, - "svgMarks": 6, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [ - "hashrate and difficulty The answer could not be read. Retry System status", - "hashrate and difficulty The answer could not be read. Retry System status" - ], - "textLength": 1091, - "skeletonOnly": false - } - }, - { - "route": "protocols", - "routeName": "Protocol directory", - "state": "authority-empty", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 46 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [], - "statusPanels": [], - "textLength": 385, - "skeletonOnly": false - } - }, - { - "route": "graphs", - "routeName": "Graphs", - "state": "authority-empty", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 86 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 42, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - }, - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 46, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [], - "textLength": 328, - "skeletonOnly": false - } - }, - { - "route": "mining", - "routeName": "Mining dashboard", - "state": "authority-empty", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 165 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.chart-widget.ng-star-inserted", - "width": 492, - "height": 375, - "svgMarks": 6, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [ - "hashrate and difficulty The answer could not be read. Retry System status", - "hashrate and difficulty The answer could not be read. Retry System status" - ], - "textLength": 1091, - "skeletonOnly": false - } - }, - { - "route": "protocols", - "routeName": "Protocol directory", - "state": "chain-down", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 68 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [], - "statusPanels": [], - "textLength": 639, - "skeletonOnly": false - } - }, - { - "route": "graphs", - "routeName": "Graphs", - "state": "chain-down", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 86 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 42, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - }, - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 46, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [], - "textLength": 328, - "skeletonOnly": false - } - }, - { - "route": "mining", - "routeName": "Mining dashboard", - "state": "chain-down", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [ - "Failed to load resource: the server responded with a status of 502 (Bad Gateway)" - ], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 81 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 30, - "charts": [ - { - "selector": "div.chart-widget.ng-star-inserted", - "width": 492, - "height": 375, - "svgMarks": 6, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [ - "hashrate and difficulty The answer could not be read. Retry System status", - "hashrate and difficulty The answer could not be read. Retry System status" - ], - "textLength": 492, - "skeletonOnly": false - } - }, - { - "route": "protocols", - "routeName": "Protocol directory", - "state": "catching-up", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 76 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [], - "statusPanels": [], - "textLength": 639, - "skeletonOnly": false - } - }, - { - "route": "graphs", - "routeName": "Graphs", - "state": "catching-up", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 94 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 42, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - }, - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 46, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [], - "textLength": 328, - "skeletonOnly": false - } - }, - { - "route": "mining", - "routeName": "Mining dashboard", - "state": "catching-up", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 173 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.chart-widget.ng-star-inserted", - "width": 492, - "height": 375, - "svgMarks": 6, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [ - "hashrate and difficulty The answer could not be read. Retry System status", - "hashrate and difficulty The answer could not be read. Retry System status" - ], - "textLength": 1091, - "skeletonOnly": false - } - }, - { - "route": "protocols", - "routeName": "Protocol directory", - "state": "loading", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 41 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [ - "Loading protocol registry" - ], - "skeletons": 18, - "charts": [], - "statusPanels": [], - "textLength": 131, - "skeletonOnly": true - } - }, - { - "route": "graphs", - "routeName": "Graphs", - "state": "loading", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 56 - }, - "progress": { - "spinners": [ - "div.load-status-spinner", - "div.load-status-spinner" - ], - "loadingAnnouncements": [ - "Loading mempool history", - "Loading transaction throughput" - ], - "skeletons": 0, - "charts": [], - "statusPanels": [ - "Loading mempool history", - "Loading transaction throughput" - ], - "textLength": 191, - "skeletonOnly": false - } - }, - { - "route": "mining", - "routeName": "Mining dashboard", - "state": "loading", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 61 - }, - "progress": { - "spinners": [ - "div.load-status-spinner.ng-star-inserted", - "div.load-status-spinner.ng-star-inserted", - "div.load-status-spinner.ng-star-inserted", - "div.load-status-spinner.ng-star-inserted", - "div.load-status-spinner.ng-star-inserted" - ], - "loadingAnnouncements": [ - "Loading reward stats", - "Loading pool ranking", - "Loading pool ranking", - "Loading hashrate and difficulty", - "Loading hashrate and difficulty" - ], - "skeletons": 54, - "charts": [], - "statusPanels": [ - "Loading reward stats", - "Loading pool ranking", - "Loading pool ranking", - "Loading hashrate and difficulty", - "Loading hashrate and difficulty" - ], - "textLength": 314, - "skeletonOnly": true - } - }, - { - "route": "protocols", - "routeName": "Protocol directory", - "state": "address-empty", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 68 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [], - "statusPanels": [], - "textLength": 639, - "skeletonOnly": false - } - }, - { - "route": "graphs", - "routeName": "Graphs", - "state": "address-empty", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 86 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 42, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - }, - { - "selector": "div.echarts", - "width": 1370, - "height": 600, - "svgMarks": 46, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [], - "textLength": 328, - "skeletonOnly": false - } - }, - { - "route": "mining", - "routeName": "Mining dashboard", - "state": "address-empty", - "theme": "default", - "viewport": "1440", - "overflowBy": 0, - "consoleErrors": [], - "brokenImages": [], - "violations": [], - "contrast": { - "text": [], - "painted": [], - "canvas": [], - "sampled": 165 - }, - "progress": { - "spinners": [], - "loadingAnnouncements": [], - "skeletons": 0, - "charts": [ - { - "selector": "div.chart-widget.ng-star-inserted", - "width": 492, - "height": 375, - "svgMarks": 6, - "canvasCount": 0, - "canvasPixels": 0, - "hasTitleOnly": false, - "drewNothing": false - } - ], - "statusPanels": [ - "hashrate and difficulty The answer could not be read. Retry System status", - "hashrate and difficulty The answer could not be read. Retry System status" - ], - "textLength": 1091, - "skeletonOnly": false - } - } - ] -} \ No newline at end of file From 0a3139fd4f3f38de46bfde2ce261823360572a21 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 11:57:49 +0000 Subject: [PATCH 25/68] charts: say how far back the data goes when it is less than the range Statistics are collected from the moment the writer starts, and nothing backfills them: there is no first-party source to backfill from, and inventing rows would be worse than having none. So a 1W range currently draws a couple of hours of samples under a heading that says 1W. That is not a lie the chart tells on purpose, but it is one a reader would take away. When the samples cover noticeably less than the range asked for, the page says when collection began and that this is all the history there is. The note disappears on its own as the history fills in. Co-Authored-By: Claude Opus 5 --- .../statistics/statistics.component.html | 1 + .../statistics/statistics.component.scss | 9 ++++ .../statistics/statistics.component.ts | 48 +++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/frontend/src/app/components/statistics/statistics.component.html b/frontend/src/app/components/statistics/statistics.component.html index 2eba02875d1..7b162facfe3 100644 --- a/frontend/src/app/components/statistics/statistics.component.html +++ b/frontend/src/app/components/statistics/statistics.component.html @@ -96,6 +96,7 @@

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 VlifaH7CgeDt*L)L|Cj3z{|}b-(R%;@ literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__authority-down__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__authority-down__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..aa15119222810c91ef287155befb3edc86c94400 GIT binary patch literal 13730 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 SwJKNxXx`FQEBejq>Hh#T!?KG2 literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__authority-empty__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__authority-empty__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9a66eb5333142e877c32830df10aa43944af42 GIT binary patch literal 15016 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%0Dv6ePmTU05D4){zm{@^nb3o|3|v`tJy#D z?}fi4`ImAv9&(`nfB2QZoWfsD0n~xNmsI>^0e?Z8|M}7kP#OR2SoE(A_~&du9SyA7 mqS3;o%z8liG9H4+Bf!IVr&C)#%W)ls0Obc73WdL!KmT8x!8GOo literal 0 HcmV?d00001 diff --git a/scripts/universe/visual-qa/artifacts-states/protocols__catching-up__default__1440.png b/scripts/universe/visual-qa/artifacts-states/protocols__catching-up__default__1440.png new file mode 100644 index 0000000000000000000000000000000000000000..6c49186dcdd712ffad71f36caaebd841b87018f8 GIT binary patch literal 33453 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

+

{{ note }}

diff --git a/frontend/src/app/components/statistics/statistics.component.scss b/frontend/src/app/components/statistics/statistics.component.scss index 0e1d7d1f379..e4dc1fc4e9a 100644 --- a/frontend/src/app/components/statistics/statistics.component.scss +++ b/frontend/src/app/components/statistics/statistics.component.scss @@ -232,3 +232,12 @@ display: block; } } + +// Says how far back the data actually goes when that is less than the range +// asked for. Informational, not a failure, so it sits above the chart rather +// than replacing it. +.bounded-history { + margin: 0 0 var(--u-space-3); + font-size: var(--u-text-sm); + color: var(--u-text-muted); +} diff --git a/frontend/src/app/components/statistics/statistics.component.ts b/frontend/src/app/components/statistics/statistics.component.ts index 6791e0e55b2..d4eee67876c 100644 --- a/frontend/src/app/components/statistics/statistics.component.ts +++ b/frontend/src/app/components/statistics/statistics.component.ts @@ -20,6 +20,20 @@ type DateSpan = '2h' | '24h' | '1w' | '1m' | '3m' | '6m' | '1y' | '2y' | '3y' | const DATE_SPANS: DateSpan[] = ['2h', '24h', '1w', '1m', '3m', '6m', '1y', '2y', '3y', '4y', 'all']; +/** Seconds each range asks for. `all` asks for whatever exists, so it is absent. */ +const RANGE_SECONDS: Partial> = { + '2h': 2 * 3600, + '24h': 24 * 3600, + '1w': 7 * 24 * 3600, + '1m': 30 * 24 * 3600, + '3m': 90 * 24 * 3600, + '6m': 180 * 24 * 3600, + '1y': 365 * 24 * 3600, + '2y': 2 * 365 * 24 * 3600, + '3y': 3 * 365 * 24 * 3600, + '4y': 4 * 365 * 24 * 3600, +}; + @Component({ selector: 'app-statistics', templateUrl: './statistics.component.html', @@ -185,6 +199,40 @@ export class StatisticsComponent implements OnInit, OnDestroy { return (this.state.status === 'data' || this.state.status === 'stale') && this.mempoolStats.length > 0; } + /** + * How far back this deployment can actually answer for, when that is + * noticeably less than the range asked for. + * + * Statistics are collected from the moment the writer starts; nothing + * backfills them, because there is no first-party source to backfill from and + * inventing rows would be worse than having none. Drawing two hours of + * samples under a heading that says 1W is not a lie the chart tells on + * purpose, but it is one a reader would take away, so the shortfall is + * stated. + */ + get boundedHistoryNote(): string | null { + if (!this.hasData) return null; + const requested = RANGE_SECONDS[this.timespan]; + if (!requested) return null; + const oldest = this.mempoolStats.reduce( + (min, stats) => Math.min(min, stats.added), + Number.POSITIVE_INFINITY, + ); + if (!Number.isFinite(oldest)) return null; + const covered = Math.max(0, Math.floor(Date.now() / 1000) - oldest); + // A tenth short of the range is ordinary sampling slack, not a shortfall. + if (covered >= requested * 0.9) return null; + return $localize`:@@statistics.bounded-history:Collection began ${this.describeSpan(covered)}:covered: ago, so this is all the history there is for this range.`; + } + + /** A short, human span for the note above. */ + private describeSpan(seconds: number): string { + const hours = Math.floor(seconds / 3600); + if (hours < 1) return $localize`:@@statistics.span-minutes:${Math.max(1, Math.floor(seconds / 60))}:minutes: minutes`; + if (hours < 48) return $localize`:@@statistics.span-hours:${hours}:hours: hours`; + return $localize`:@@statistics.span-days:${Math.floor(hours / 24)}:days: days`; + } + handleNewMempoolData(mempoolStats: OptimizedMempoolStats[]): void { mempoolStats.reverse(); const labels = mempoolStats.map(stats => stats.added); From 60806913c9b0e5b9ea8a35157788e7da3776e8d9 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:03:10 +0000 Subject: [PATCH 26/68] charts: say "1 hour", and stop walking the series on every render The history note read "1 hours ago", and it was a getter, so it reduced over the whole series on every change detection pass, on a page that takes a live sample every minute. It is computed when the series changes now, and it counts in singulars. Co-Authored-By: Claude Opus 5 --- .../statistics/statistics.component.html | 2 +- .../statistics/statistics.component.ts | 52 +++++++++++++------ 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/frontend/src/app/components/statistics/statistics.component.html b/frontend/src/app/components/statistics/statistics.component.html index 7b162facfe3..f0e9c3d62c9 100644 --- a/frontend/src/app/components/statistics/statistics.component.html +++ b/frontend/src/app/components/statistics/statistics.component.html @@ -96,7 +96,7 @@
-

{{ note }}

+

{{ boundedHistoryNote }}

diff --git a/frontend/src/app/components/statistics/statistics.component.ts b/frontend/src/app/components/statistics/statistics.component.ts index d4eee67876c..5d6a0c72961 100644 --- a/frontend/src/app/components/statistics/statistics.component.ts +++ b/frontend/src/app/components/statistics/statistics.component.ts @@ -74,6 +74,8 @@ export class StatisticsComponent implements OnInit, OnDestroy { feeLevelDropdownData = []; timespan = ''; titleCount = $localize`Count`; + /** Set when the collected history is shorter than the range asked for. */ + boundedHistoryNote: string | null = null; private retry$ = new BehaviorSubject(0); private subscriptions: Subscription[] = []; @@ -147,6 +149,7 @@ export class StatisticsComponent implements OnInit, OnDestroy { this.mempoolStats = []; this.mempoolTransactionsWeightPerSecondData = null; } + this.updateBoundedHistoryNote(); }), ); @@ -160,6 +163,7 @@ export class StatisticsComponent implements OnInit, OnDestroy { this.mempoolStats.unshift(mempoolStats); this.mempoolStats = this.mempoolStats.slice(0, this.mempoolStats.length - 1); this.handleNewMempoolData(this.mempoolStats.concat([])); + this.updateBoundedHistoryNote(); }), ); } @@ -200,8 +204,8 @@ export class StatisticsComponent implements OnInit, OnDestroy { } /** - * How far back this deployment can actually answer for, when that is - * noticeably less than the range asked for. + * Recomputes how far back this deployment can actually answer for, when that + * is noticeably less than the range asked for. * * Statistics are collected from the moment the writer starts; nothing * backfills them, because there is no first-party source to backfill from and @@ -209,28 +213,46 @@ export class StatisticsComponent implements OnInit, OnDestroy { * samples under a heading that says 1W is not a lie the chart tells on * purpose, but it is one a reader would take away, so the shortfall is * stated. + * + * Computed when the series changes rather than read from a getter: as a + * getter it walked the whole series on every change detection pass, on a page + * that takes a live sample every minute. */ - get boundedHistoryNote(): string | null { - if (!this.hasData) return null; + private updateBoundedHistoryNote(): void { + this.boundedHistoryNote = null; + if (!this.hasData) return; const requested = RANGE_SECONDS[this.timespan]; - if (!requested) return null; - const oldest = this.mempoolStats.reduce( - (min, stats) => Math.min(min, stats.added), - Number.POSITIVE_INFINITY, - ); - if (!Number.isFinite(oldest)) return null; + if (!requested) return; + let oldest = Number.POSITIVE_INFINITY; + for (const stats of this.mempoolStats) { + if (stats.added < oldest) oldest = stats.added; + } + if (!Number.isFinite(oldest)) return; const covered = Math.max(0, Math.floor(Date.now() / 1000) - oldest); // A tenth short of the range is ordinary sampling slack, not a shortfall. - if (covered >= requested * 0.9) return null; - return $localize`:@@statistics.bounded-history:Collection began ${this.describeSpan(covered)}:covered: ago, so this is all the history there is for this range.`; + if (covered >= requested * 0.9) return; + this.boundedHistoryNote = + $localize`:@@statistics.bounded-history:Collection began ${this.describeSpan(covered)}:covered: ago, so this is all the history there is for this range.`; } /** A short, human span for the note above. */ private describeSpan(seconds: number): string { const hours = Math.floor(seconds / 3600); - if (hours < 1) return $localize`:@@statistics.span-minutes:${Math.max(1, Math.floor(seconds / 60))}:minutes: minutes`; - if (hours < 48) return $localize`:@@statistics.span-hours:${hours}:hours: hours`; - return $localize`:@@statistics.span-days:${Math.floor(hours / 24)}:days: days`; + if (hours < 1) { + const minutes = Math.max(1, Math.floor(seconds / 60)); + return minutes === 1 + ? $localize`:@@statistics.span-minute:1 minute` + : $localize`:@@statistics.span-minutes:${minutes}:minutes: minutes`; + } + if (hours < 48) { + return hours === 1 + ? $localize`:@@statistics.span-hour:1 hour` + : $localize`:@@statistics.span-hours:${hours}:hours: hours`; + } + const days = Math.floor(hours / 24); + return days === 1 + ? $localize`:@@statistics.span-day:1 day` + : $localize`:@@statistics.span-days:${days}:days: days`; } handleNewMempoolData(mempoolStats: OptimizedMempoolStats[]): void { From 58773f9df3aad73973ed68a7481a7091f5479093 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:06:58 +0000 Subject: [PATCH 27/68] qa: check the two modes the route matrix never opened The matrix covers three themes, seven widths, and six data states. It does not cover forced colours or 200 percent zoom, and both are things this product claims to support. Forced colours is the interesting one, because the brand does not survive it and is not supposed to. The operating system replaces the palette wholesale, so the question is whether the interface still works once every colour decision in this repository has been overruled: are controls still bounded, is text still present, is anything painted on itself. That is a different failure mode from low contrast and nothing here was looking for it. Both hold on every route checked, with no horizontal scrolling at 200 percent, which at a 1280 viewport is a 640 pixel layout. The socket is not mocked in this check, so the chain strip shows placeholders and the header reports itself offline. That is stated in the file rather than left for someone to rediscover: the questions it asks are answered by page structure, and the data surfaces are the matrix's job. --- .github/workflows/universe-ci.yml | 4 + .gitignore | 1 + scripts/universe/visual-qa/modes-check.mjs | 137 +++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 scripts/universe/visual-qa/modes-check.mjs diff --git a/.github/workflows/universe-ci.yml b/.github/workflows/universe-ci.yml index eb2fe97eab1..da958b21959 100644 --- a/.github/workflows/universe-ci.yml +++ b/.github/workflows/universe-ci.yml @@ -139,6 +139,10 @@ jobs: working-directory: scripts/universe/visual-qa run: node capture.mjs --base=http://127.0.0.1:8123 --out=./artifacts + - name: Forced colours and 200 percent zoom + working-directory: scripts/universe/visual-qa + run: node modes-check.mjs --base=http://127.0.0.1:8123 + - name: Keep the contrast report and the route screenshots if: always() uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 diff --git a/.gitignore b/.gitignore index 6cfe660c6fb..becdeacdbb3 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,5 @@ node_modules/ # Visual QA working output. Curated review sets are committed under docs/design. scripts/universe/visual-qa/artifacts/ scripts/universe/visual-qa/verify/ +scripts/universe/visual-qa/artifacts-modes/ scripts/universe/visual-qa/node_modules/ diff --git a/scripts/universe/visual-qa/modes-check.mjs b/scripts/universe/visual-qa/modes-check.mjs new file mode 100644 index 00000000000..60a9d720563 --- /dev/null +++ b/scripts/universe/visual-qa/modes-check.mjs @@ -0,0 +1,137 @@ +#!/usr/bin/env node +/** + * Two modes the route matrix does not cover: forced colours, and 200% zoom. + * + * Forced colours is what a reader using a high contrast operating system theme + * actually sees. The browser replaces the palette wholesale, so the question is + * not whether the brand survives, because it does not and should not. It is + * whether the interface is still usable once the palette is gone: are controls + * still bounded, is text still present, does anything end up painted on itself. + * + * 200% zoom is WCAG 1.4.4 and 1.4.10. At a 1280 viewport that leaves 640 CSS + * pixels, and nothing may scroll horizontally at that width. + * + * Both run against the same REST fixtures as the matrix, so a page under review + * has real content rather than an empty shell. The socket is not mocked here, + * so the chain strip renders its placeholder blocks and the header reports + * itself offline. That is deliberate: the questions this file asks are about + * reflow and about surviving a replaced palette, and both are answered by the + * page structure rather than by live chain data. The route matrix in + * capture.mjs is what reviews the data surfaces. + * + * Usage: + * node scripts/universe/visual-qa/modes-check.mjs [--base=URL] [--out=DIR] + */ +import { mkdirSync } from 'node:fs'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import playwright from 'playwright'; + +import { addressFixtures, detailFixtures, fixtures, sampleIds } from './fixtures.mjs'; + +const HERE = dirname(fileURLToPath(import.meta.url)); +const args = Object.fromEntries( + process.argv.slice(2).map((a) => { + const [k, v] = a.replace(/^--/, '').split('='); + return [k, v ?? true]; + }), +); + +const BASE = args.base || 'http://127.0.0.1:8171'; +const OUT = resolve(args.out || join(HERE, 'artifacts-modes')); + +const ROUTES = [ + ['home', '/'], + ['tx', `/tx/${sampleIds.TXID_A}`], + ['blocks', '/blocks'], + ['protocols', '/protocols'], + ['graphs', '/graphs/mempool'], +]; + +/** Answer every API call from the same table the matrix uses. */ +async function installFixtures(context) { + const table = { ...fixtures, ...detailFixtures, ...addressFixtures }; + await context.route('**/api/**', async (route) => { + const path = new URL(route.request().url()).pathname; + const body = table[path] ?? Object.entries(table).find(([k]) => path.startsWith(k))?.[1]; + if (body === undefined) { + return route.fulfill({ status: 200, contentType: 'application/json', body: '[]' }); + } + return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(body) }); + }); +} + +mkdirSync(OUT, { recursive: true }); + +const browser = await playwright.chromium.launch({ + args: ['--use-gl=angle', '--use-angle=swiftshader', '--enable-unsafe-swiftshader'], +}); + +const findings = []; + +async function sweep(label, contextOptions, zoom) { + const context = await browser.newContext(contextOptions); + await installFixtures(context); + for (const [id, path] of ROUTES) { + const page = await context.newPage(); + await page.goto(BASE + path, { waitUntil: 'networkidle', timeout: 45000 }).catch(() => {}); + if (zoom) { + await page.evaluate((z) => { document.documentElement.style.zoom = String(z); }, zoom); + } + await page.waitForTimeout(1200); + + const report = await page.evaluate(() => { + const doc = document.documentElement; + // A page whose own content scrolls sideways has failed reflow. A rounding + // pixel is not a failure, so the tolerance is one. + const overflow = doc.scrollWidth - doc.clientWidth; + let painted = 0; + for (const el of document.querySelectorAll('a, button, h1, h2, h3, td, th, p, label')) { + const rect = el.getBoundingClientRect(); + if (rect.width < 2 || rect.height < 2) continue; + const style = getComputedStyle(el); + if (style.visibility === 'hidden' || style.opacity === '0') continue; + if ((el.textContent || '').trim() && style.color === style.backgroundColor) painted++; + } + return { overflow, painted, chars: (document.body.innerText || '').trim().length }; + }); + + findings.push({ label, id, ...report }); + await page.screenshot({ path: join(OUT, `${id}__${label}.png`) }); + await page.close(); + } + await context.close(); +} + +await sweep('forced-colors', { + viewport: { width: 1280, height: 900 }, + forcedColors: 'active', + colorScheme: 'light', +}, null); + +await sweep('zoom-200', { viewport: { width: 1280, height: 900 } }, 2); + +await browser.close(); + +console.log(`\n=== ${findings.length} checks -> ${OUT}\n`); +console.log('mode route overflow text-on-itself body chars'); +const failures = []; +for (const f of findings) { + const problems = []; + if (f.overflow > 1) problems.push('OVERFLOW'); + if (f.painted > 0) problems.push('TEXT ON ITSELF'); + if (f.chars < 200) problems.push('NO CONTENT'); + if (problems.length) failures.push({ ...f, problems }); + console.log( + `${f.label.padEnd(14)} ${f.id.padEnd(11)} ${String(f.overflow).padStart(8)} ` + + `${String(f.painted).padStart(15)} ${String(f.chars).padStart(11)}` + + (problems.length ? ' ' + problems.join(', ') : ''), + ); +} + +if (failures.length) { + console.error(`\n${failures.length} route(s) fail in a mode the product claims to support.`); + process.exit(1); +} +console.log('\nForced colours and 200% zoom both hold on every route checked.'); From 58e1d28459fdf32210aebad02b8d45ea68061196 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 12:11:27 +0000 Subject: [PATCH 28/68] fix: a green at 2.37:1 that nothing could see, and the gate that let it hide The mining dashboard's hashrate and difficulty panels had no fixture, so half of one of the thirteen reviewed routes rendered as skeletons and a spinner in every screenshot the matrix has ever taken. Giving them data made the panel render, and the panel immediately failed: the difficulty change figure is #42B747 on the light page, which measures 2.37:1 against the 4.5:1 it owes. The colour is set through an Angular property binding, [style]="up ? 'color: #42B747' : 'color: #B74242'". The colour gate's markup pattern required a literal style attribute, so a binding that paints exactly the same way was invisible to it, and had been for as long as the gate has existed. The pattern now matches [style], [ngStyle] and [attr.*] too. Green still means up and red still means down. They are the evidence state tokens now, which are the versions that clear the floor on every surface. Mining now reports 0 contrast failures and 0 accessibility violations across light, dark and high contrast, where before it reported nothing at all. --- .../components/change/change.component.html | 2 +- ...ifficulty-adjustments-table.component.html | 2 +- frontend/src/styles.scss | 19 ++++++ scripts/universe/check-colors.mjs | 9 ++- scripts/universe/visual-qa/fixtures.mjs | 58 +++++++++++++++++++ 5 files changed, 87 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/change/change.component.html b/frontend/src/app/components/change/change.component.html index ffc00bf5f0e..b99c1d7442b 100644 --- a/frontend/src/app/components/change/change.component.html +++ b/frontend/src/app/components/change/change.component.html @@ -1,3 +1,3 @@ - + ‎{{ change >= 0 ? '+' : '' }}{{ change | amountShortener }}% diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html index bf480289bec..c3e0baa26f3 100644 --- a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html +++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -17,7 +17,7 @@
{{ diffChange.difficultyShorten }} + {{ diffChange.change >= 0 ? '+' : '' }}{{ diffChange.change | amountShortener: 2 }}%
@@ -123,6 +123,9 @@

Blocks

+ + diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.ts b/frontend/src/app/components/blocks-list/blocks-list.component.ts index 46fb80ae64d..9414fc1aaf6 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.ts +++ b/frontend/src/app/components/blocks-list/blocks-list.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, Inject, LOCALE_ID } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; -import { BehaviorSubject, combineLatest, Observable, timer, of, Subscription } from 'rxjs'; -import { debounceTime, delayWhen, filter, map, retryWhen, scan, skip, switchMap, tap, throttleTime } from 'rxjs/operators'; +import { BehaviorSubject, combineLatest, EMPTY, Observable, throwError, timer, of, Subscription } from 'rxjs'; +import { catchError, debounceTime, filter, map, retry, scan, skip, switchMap, tap, throttleTime } from 'rxjs/operators'; import { BlockExtended } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; @@ -10,6 +10,7 @@ import { SeoService } from '@app/services/seo.service'; import { OpenGraphService } from '@app/services/opengraph.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { LoadState, classifyLoadFailure, isRetryableFailure } from '@app/shared/load-state'; @Component({ selector: 'app-blocks-list', @@ -27,6 +28,8 @@ export class BlocksList implements OnInit { indexingAvailable = false; auditAvailable = false; isLoading = true; + /** Set when the list request has failed for good, so the page says so instead of holding a skeleton. */ + failureState: LoadState | null = null; fromBlockHeight = undefined; lastBlockHeightFetched = -1; paginationMaxSize: number; @@ -115,6 +118,7 @@ export class BlocksList implements OnInit { filter(fromBlockHeight => fromBlockHeight !== this.lastBlockHeightFetched), switchMap((fromBlockHeight) => { this.isLoading = true; + this.failureState = null; this.lastBlockHeightFetched = fromBlockHeight; return this.apiService.getBlocks$(this.page === 1 ? undefined : fromBlockHeight) .pipe( @@ -139,7 +143,23 @@ export class BlocksList implements OnInit { } return blocks; }), - retryWhen(errors => errors.pipe(delayWhen(() => timer(10000)))) + // Bounded, so a chain backend that is down produces an answer + // instead of a skeleton that retries forever with nothing said. + retry({ + count: 2, + delay: (error, attempt) => { + if (!isRetryableFailure(classifyLoadFailure(error))) { + return throwError(() => error); + } + return timer(2000 * attempt); + }, + }), + catchError((error) => { + this.failureState = { status: 'error', reason: classifyLoadFailure(error), at: Date.now() }; + this.isLoading = false; + this.cd.markForCheck(); + return EMPTY; + }) ); }) ), @@ -187,6 +207,14 @@ export class BlocksList implements OnInit { this.router.navigate([this.relativeUrlPipe.transform('/blocks/'), page]); } + retryLoad(): void { + this.failureState = null; + this.isLoading = true; + this.lastBlockHeightFetched = -1; + this.fromHeightSubject.next(this.fromBlockHeight); + this.cd.markForCheck(); + } + trackByBlock(index: number, block: BlockExtended): number { return block.height; } diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 7b682b736aa..b048488db25 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -224,6 +224,7 @@

Details

+

Loading transaction


diff --git a/frontend/src/app/dashboard/dashboard.component.html b/frontend/src/app/dashboard/dashboard.component.html index 345f4f0238a..ba64a24430f 100644 --- a/frontend/src/app/dashboard/dashboard.component.html +++ b/frontend/src/app/dashboard/dashboard.component.html @@ -1,5 +1,16 @@
+ + @if (chainStatus$ | async; as chainStatus) { + @if (chainStatus.status === 'loading') { +

Loading live chain data

+ } + @if (chainStatus.status === 'error') { + + } + }
+ @if ((liveFeed$ | async)?.status === 'error') { +

No live epoch data: the chain feed is not answering.

+ } @else { +
+
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+ } ; isLoadingWebSocket$: Observable; + /** + * Whether the socket that carries the epoch has given up. Both sources here + * are socket fed and neither can error, so without this the placeholders + * would go on claiming an answer was coming for as long as the tab was open. + */ + liveFeed$: Observable>; difficultyEpoch$: Observable; mode: 'difficulty' | 'halving' = 'difficulty'; @@ -76,6 +83,7 @@ export class DifficultyComponent implements OnInit { ngOnInit(): void { this.isLoadingWebSocket$ = this.stateService.isLoadingWebSocket$; + this.liveFeed$ = this.stateService.liveFeed$; this.difficultyEpoch$ = combineLatest([ this.stateService.blocks$, this.stateService.difficultyAdjustment$, diff --git a/frontend/src/app/components/fees-box/fees-box.component.html b/frontend/src/app/components/fees-box/fees-box.component.html index f969c66449d..3604e6a85a2 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.html +++ b/frontend/src/app/components/fees-box/fees-box.component.html @@ -54,31 +54,39 @@ High Priority
-
-
-
-
-
+ + @if ((liveFeed$ | async)?.status === 'error') { +

No live fee estimates: the chain feed is not answering.

+ } @else { +
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+ } diff --git a/frontend/src/app/components/fees-box/fees-box.component.scss b/frontend/src/app/components/fees-box/fees-box.component.scss index 1c7d31f4464..d02a54a0729 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.scss +++ b/frontend/src/app/components/fees-box/fees-box.component.scss @@ -164,4 +164,18 @@ &.prority { width: 25%; } -} \ No newline at end of file +} + +// What stands in for the numbers when the live feed has given up. It holds the +// height the estimates occupy, so the panels below it do not jump when the +// placeholders are replaced by a sentence. +.feed-unavailable { + align-items: center; + color: var(--u-text-secondary); + display: flex; + font-size: var(--u-text-sm); + justify-content: center; + margin: 0; + min-height: 50px; + text-align: center; +} diff --git a/frontend/src/app/components/fees-box/fees-box.component.ts b/frontend/src/app/components/fees-box/fees-box.component.ts index 728b2be9e98..815aa18fa4a 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.ts +++ b/frontend/src/app/components/fees-box/fees-box.component.ts @@ -5,6 +5,7 @@ import { Recommendedfees } from '@interfaces/websocket.interface'; import { feeLevels } from '@app/app.constants'; import { map, startWith, tap } from 'rxjs/operators'; import { ThemeService } from '@app/services/theme.service'; +import { LoadState } from '@app/shared/load-state'; @Component({ selector: 'app-fees-box', @@ -15,6 +16,12 @@ import { ThemeService } from '@app/services/theme.service'; }) export class FeesBoxComponent implements OnInit, OnDestroy { isLoading$: Observable; + /** + * Whether the socket that carries these numbers has given up. It is the only + * source for them and it never errors, so without this the placeholders here + * would go on claiming an answer was coming for as long as the tab was open. + */ + liveFeed$: Observable>; recommendedFees$: Observable; themeStateSubscription: Subscription; gradient = 'linear-gradient(to right, var(--skeleton-bg), var(--skeleton-bg))'; @@ -28,6 +35,7 @@ export class FeesBoxComponent implements OnInit, OnDestroy { ) { } ngOnInit(): void { + this.liveFeed$ = this.stateService.liveFeed$; this.isLoading$ = combineLatest( this.stateService.isLoadingWebSocket$.pipe(startWith(false)), this.stateService.loadingIndicators$.pipe(startWith({ mempool: 0 })), diff --git a/frontend/src/app/dashboard/dashboard.component.html b/frontend/src/app/dashboard/dashboard.component.html index ba64a24430f..3c47d584f9a 100644 --- a/frontend/src/app/dashboard/dashboard.component.html +++ b/frontend/src/app/dashboard/dashboard.component.html @@ -2,13 +2,13 @@
- @if (chainStatus$ | async; as chainStatus) { - @if (chainStatus.status === 'loading') { + @if (liveFeed$ | async; as liveFeed) { + @if (liveFeed.status === 'loading') {

Loading live chain data

} - @if (chainStatus.status === 'error') { - + @if (liveFeed.status === 'error') { + } }
diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index 11a2ef308bb..e08c0d8d691 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -1,6 +1,6 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; -import { combineLatest, EMPTY, fromEvent, interval, merge, Observable, of, Subject, Subscription, timer } from 'rxjs'; -import { catchError, delayWhen, distinctUntilChanged, filter, map, scan, share, shareReplay, startWith, switchMap, take, takeUntil, tap, throttleTime } from 'rxjs/operators'; +import { combineLatest, EMPTY, fromEvent, interval, merge, Observable, of, Subject, Subscription } from 'rxjs'; +import { catchError, delayWhen, distinctUntilChanged, filter, map, scan, share, shareReplay, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; import { AuditStatus, BlockExtended, CurrentPegs, FederationAddress, FederationUtxo, OptimizedMempoolStats, PegsVolume, RecentPeg, TransactionStripped } from '@interfaces/node-api.interface'; import { MempoolInfo, ReplacementInfo } from '@interfaces/websocket.interface'; import { ApiService } from '@app/services/api.service'; @@ -52,12 +52,10 @@ export class DashboardComponent implements OnInit, OnDestroy, AfterViewInit { transactionsWeightPerSecondOptions: any; isLoadingWebSocket$: Observable; /** - * Whether live chain data ever arrived. The dashboard is fed by the socket, - * so when the chain backend is down every panel would otherwise hold its - * skeleton forever with nothing said about why. + * Whether live chain data ever arrived. Owned by the state service, because + * the panels on this page have to reach the same verdict as the banner. */ - chainStatus$: Observable>; - private chainRetry$ = new Subject(); + liveFeed$: Observable>; liquidPegsMonth$: Observable; currentPeg$: Observable; auditStatus$: Observable; @@ -112,9 +110,9 @@ export class DashboardComponent implements OnInit, OnDestroy, AfterViewInit { this.stateService.focusSearchInputDesktop(); } - retryChain(): void { + retryLiveFeed(): void { this.websocketService.reconnectWebsocket(); - this.chainRetry$.next(); + this.stateService.retryLiveFeed(); } ngOnDestroy(): void { @@ -135,22 +133,7 @@ export class DashboardComponent implements OnInit, OnDestroy, AfterViewInit { this.websocketService.startTrackRbfSummary(); this.network$ = merge(of(''), this.stateService.networkChanged$); - // The first socket payload normally lands within a second or two. When - // nothing has arrived well past that, the page says so instead of leaving - // the reader to stare at skeletons. A late arrival still clears the panel. - this.chainStatus$ = this.chainRetry$.pipe( - startWith(undefined), - switchMap(() => { - const firstChainData$ = merge(this.stateService.blocks$, this.stateService.mempoolInfo$).pipe(take(1)); - return merge( - firstChainData$.pipe(map((): LoadState => ({ status: 'data', value: true, at: Date.now() }))), - timer(5_000).pipe( - takeUntil(firstChainData$), - map((): LoadState => ({ status: 'error', reason: 'timeout', at: Date.now() })), - ), - ).pipe(startWith>({ status: 'loading' })); - }), - ); + this.liveFeed$ = this.stateService.liveFeed$; this.mempoolLoadingStatus$ = this.stateService.loadingIndicators$ .pipe( map((indicators) => indicators.mempool !== undefined ? indicators.mempool : 100) diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index bb8f97c4dda..88971cc392b 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -1,11 +1,12 @@ import { Inject, Injectable, PLATFORM_ID, LOCALE_ID } from '@angular/core'; -import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs'; +import { ReplaySubject, BehaviorSubject, Subject, fromEvent, merge, Observable, timer } from 'rxjs'; import { Transaction } from '@interfaces/electrs.interface'; import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, StratumJob, isMempoolState } from '@interfaces/websocket.interface'; import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, DifficultyAdjustment, MempoolPosition, OptimizedMempoolStats, RbfTree, TransactionStripped } from '@interfaces/node-api.interface'; import { Router, NavigationStart } from '@angular/router'; import { isPlatformBrowser } from '@angular/common'; -import { filter, map, scan, share, shareReplay } from 'rxjs/operators'; +import { filter, map, scan, share, shareReplay, startWith, switchMap, take, takeUntil } from 'rxjs/operators'; +import { LoadState } from '@app/shared/load-state'; import { StorageService } from '@app/services/storage.service'; import { hasTouchScreen } from '@app/shared/pipes/bytes-pipe/utils'; import { ActiveFilter } from '@app/shared/filters.utils'; @@ -45,6 +46,12 @@ export interface Customization { export type SignaturesMode = 'all' | 'interesting' | 'none' | null; +/** + * How long the socket has to say anything before the live feed is treated as + * having given up. The first payload normally lands within a second or two. + */ +const LIVE_FEED_DEADLINE_MS = 10_000; + export interface Env { MAINNET_ENABLED: boolean; TESTNET_ENABLED: boolean; @@ -193,6 +200,19 @@ export class StateService { blockTransactions$ = new Subject(); walletTransactions$ = new Subject(); isLoadingWebSocket$ = new ReplaySubject(1); + /** + * Whether live chain data ever arrived. + * + * The panels on the dashboards are fed by the socket and none of them can + * fail: when the chain backend is down the socket connects and then says + * nothing at all, so a component waiting on `blocks$` waits forever and holds + * its placeholder forever with it. This is the one place that decides the + * feed has given up, so the banner that says so and the panels that stop + * pulsing are reading the same answer instead of racing a copy of the same + * timer each. + */ + liveFeed$: Observable>; + private liveFeedRetry$ = new Subject(); isLoadingMempool$ = new BehaviorSubject(true); vbytesPerSecond$ = new ReplaySubject(1); previousRetarget$ = new ReplaySubject(1); @@ -356,6 +376,25 @@ export class StateService { this.blocks$ = this.blocksSubject$.pipe(filter(blocks => blocks != null && blocks.length > 0)); + // A late arrival still clears this, so the deadline costs nothing when the + // feed is merely slow. Shared and reference counted: one timer runs however + // many panels are watching, and it starts again when a dashboard is next + // opened rather than holding a verdict from an earlier visit. + this.liveFeed$ = this.liveFeedRetry$.pipe( + startWith(undefined), + switchMap(() => { + const firstChainData$ = merge(this.blocks$, this.mempoolInfo$).pipe(take(1)); + return merge( + firstChainData$.pipe(map((): LoadState => ({ status: 'data', value: true, at: Date.now() }))), + timer(LIVE_FEED_DEADLINE_MS).pipe( + takeUntil(firstChainData$), + map((): LoadState => ({ status: 'error', reason: 'timeout', at: Date.now() })), + ), + ).pipe(startWith>({ status: 'loading' })); + }), + shareReplay({ bufferSize: 1, refCount: true }), + ); + const savedTimePreference = this.storageService.getValue('time-preference-ltr'); const rtlLanguage = (this.locale.startsWith('ar') || this.locale.startsWith('fa') || this.locale.startsWith('he')); // default time direction is right-to-left, unless locale is a RTL language @@ -493,6 +532,14 @@ export class StateService { this.blockScrolling$.next(value); } + /** + * Gives the live feed a fresh deadline. Reconnecting the socket is the + * caller's job: this service does not own the connection. + */ + retryLiveFeed(): void { + this.liveFeedRetry$.next(); + } + isLiquid() { return this.network === 'liquid' || this.network === 'liquidtestnet'; } From 9adef6e78425ebcf3ed0c86f1197bda7a7fbf4a6 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 16:37:58 +0000 Subject: [PATCH 56/68] qa: cover address transaction waits --- scripts/universe/visual-qa/capture.mjs | 30 ++++++++++++++++--- scripts/universe/visual-qa/fixtures.mjs | 17 +++++++++++ .../universe/visual-qa/progress-gate.test.mjs | 17 +++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/scripts/universe/visual-qa/capture.mjs b/scripts/universe/visual-qa/capture.mjs index 62038e6dd97..fe3598bb895 100644 --- a/scripts/universe/visual-qa/capture.mjs +++ b/scripts/universe/visual-qa/capture.mjs @@ -218,7 +218,17 @@ function socketState(state) { transactions: fixtures['/api/mempool/recent'], rbfLatestSummary: fixtures['rbf-latest-summary'], conversions: { USD: 96_400, EUR: 89_100, time: 1_772_100_000 }, - loadingIndicators: { mempool: 100, blocks: 100 }, + loadingIndicators: { + mempool: 100, + blocks: 100, + // How far along the address's transaction history is. The address page + // only draws its progress bar when the socket reports progress for that + // address, so without this the one state that reaches the + // transaction-list wait would render its skeletons and no bar at all, + // and the bar would go on being unreviewed for the same reason the + // branch itself was. + ...(state === 'address-txs-loading' ? { [`address-${sampleIds.ADDRESS}`]: 62 } : {}), + }, backendInfo: { hostname: 'universe-explorer', version: '3.3.1', gitCommit: 'fixture0', lightning: false, chainSync }, }; } @@ -466,6 +476,18 @@ async function run() { */ export const GATED_ROUTES = new Set(['graphs', 'mining', 'protocols', 'home', 'blocks', 'tx', 'address']); +/** + * Fixtures that hold a request open on purpose, to photograph a wait. + * + * These are judged on whether the wait is announced, not on having finished, + * and they are not failure states: nothing has gone wrong, so demanding a + * status panel would be demanding the page report a fault it does not have. + * `loading` holds every request; `address-txs-loading` holds only the address + * transaction list, which is the wait pagination leaves behind and the one the + * blanket fixture can never reach. + */ +const WAITING_STATES = new Set(['loading', 'address-txs-loading']); + export function progressFailures(report) { const failures = []; for (const f of report.findings) { @@ -488,9 +510,9 @@ export function progressFailures(report) { failures.push(`${where}: chart ${chart.selector} (${chart.width}x${chart.height}) drew nothing`); } } - } else if (f.state === 'loading') { - // This fixture holds every request open on purpose, to photograph the - // waiting state. Asking it to have finished would be asking the wrong + } else if (WAITING_STATES.has(f.state)) { + // These fixtures hold requests open on purpose, to photograph the + // waiting state. Asking them to have finished would be asking the wrong // question; what matters is that the wait is announced rather than being // a blank rectangle. The deadline itself is covered by the unit tests // around the request lifecycle, which run far longer than this harness diff --git a/scripts/universe/visual-qa/fixtures.mjs b/scripts/universe/visual-qa/fixtures.mjs index 64b441bdab0..4b38b9b1e56 100644 --- a/scripts/universe/visual-qa/fixtures.mjs +++ b/scripts/universe/visual-qa/fixtures.mjs @@ -301,6 +301,23 @@ export const stateOverrides = { // Requests never resolve, so every surface stays in its loading state. loading: { '**': { hang: true } }, + // The address resolves, its transactions do not. + // + // The address page has two independent waits, and the blanket `loading` + // fixture above can only ever photograph the first: with every request held + // open the page never gets past `isLoadingAddress`, so the branch that waits + // for the transaction list, the one a reader actually meets on a slow page + // or when they ask for more, was never on screen for any check to see. This + // fixture answers the summary and holds only the transaction request, which + // is the state pagination and "load more" leave behind. + // + // The harness falls back to a prefix match, so this reaches the whole + // `/txs` subtree. That is the intent: every route that feeds the transaction + // list waits, and nothing else does. + 'address-txs-loading': { + [`/api/address/${ADDRESS}/txs`]: { hang: true }, + }, + // An address that has never been used. 'address-empty': { [`/api/address/${ADDRESS}`]: { diff --git a/scripts/universe/visual-qa/progress-gate.test.mjs b/scripts/universe/visual-qa/progress-gate.test.mjs index 77149da0cce..6e9f2281314 100644 --- a/scripts/universe/visual-qa/progress-gate.test.mjs +++ b/scripts/universe/visual-qa/progress-gate.test.mjs @@ -136,6 +136,23 @@ test('the routes already covered stay held', () => { } }); +test('the address transaction wait is judged as a wait, not as a failure', () => { + // Only the transaction list is held open, so the page is not in a failure + // state and owes no status panel. What it owes is a word about what it is + // waiting for, which is the announcement on the transaction-list branch. + assert.deepEqual( + progressFailures(withProgress('address-txs-loading', { + skeletons: 2, loadingAnnouncements: ['Loading transactions'], + })), + [], + ); + const failures = progressFailures(withProgress('address-txs-loading', { + skeletons: 2, + })); + assert.equal(failures.length, 1); + assert.match(failures[0], /nothing on screen that says so/); +}); + test('a page with nothing to fetch owes the reader no loader', () => { // The docs and source pages render from what is already in the bundle. Under // the loading fixture they simply appear, and demanding a spinner from them From 800f6c2d97be9cb799b7922c05b33f6ef3564ab0 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 17:02:09 +0000 Subject: [PATCH 57/68] fix: retain dashboard stream imports after consolidation --- frontend/src/app/dashboard/dashboard.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index e08c0d8d691..05491b43376 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -1,6 +1,6 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; -import { combineLatest, EMPTY, fromEvent, interval, merge, Observable, of, Subject, Subscription } from 'rxjs'; -import { catchError, delayWhen, distinctUntilChanged, filter, map, scan, share, shareReplay, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; +import { combineLatest, EMPTY, fromEvent, interval, merge, Observable, of, Subject, Subscription, timer } from 'rxjs'; +import { catchError, delayWhen, distinctUntilChanged, filter, map, scan, share, shareReplay, startWith, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; import { AuditStatus, BlockExtended, CurrentPegs, FederationAddress, FederationUtxo, OptimizedMempoolStats, PegsVolume, RecentPeg, TransactionStripped } from '@interfaces/node-api.interface'; import { MempoolInfo, ReplacementInfo } from '@interfaces/websocket.interface'; import { ApiService } from '@app/services/api.service'; From 31b0468e64390975bbba664eb9bb88b2ae49eae5 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 17:22:57 +0000 Subject: [PATCH 58/68] fix: render address history without socket price data --- .../app/components/address-graph/address-graph.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/address-graph/address-graph.component.ts b/frontend/src/app/components/address-graph/address-graph.component.ts index 3ea44443d7c..faac92c98d7 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; import { echarts, EChartsOption } from '@app/graphs/echarts'; import { BehaviorSubject, Observable, Subscription, combineLatest, of } from 'rxjs'; -import { catchError, map, switchMap, tap } from 'rxjs/operators'; +import { catchError, map, startWith, switchMap, tap } from 'rxjs/operators'; import { AddressTxSummary, ChainStats } from '@interfaces/electrs.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; @@ -109,7 +109,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { return of(null); }), )), - this.stateService.conversions$ + this.stateService.conversions$.pipe(startWith(null)) ]).pipe( switchMap(([redraw, addressSummary, conversions]) => { this.conversions = conversions; From b3140617755c0b5874724a64919486fb4142bbfc Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 18:18:01 +0000 Subject: [PATCH 59/68] fix: the live-feed deadline is five seconds again, as reviewed The consolidation that moved this out of the dashboard restored the ten second value that adbe39af7 had deliberately tightened. At ten seconds, whether the visual gate saw the timeout panel depended on how slowly the probes ran on that machine; five keeps the page's terminal state inside the gate's failure budget by design rather than by latency. The first socket payload normally lands within two seconds, and a late arrival still clears the panel, so the tighter deadline costs a healthy deployment nothing. Co-Authored-By: Claude Fable 5 --- frontend/src/app/services/state.service.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 88971cc392b..85e87c82645 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -48,9 +48,13 @@ export type SignaturesMode = 'all' | 'interesting' | 'none' | null; /** * How long the socket has to say anything before the live feed is treated as - * having given up. The first payload normally lands within a second or two. + * having given up. The first payload normally lands within a second or two, + * so five seconds is already generous, and a late arrival still clears the + * verdict. It is also deliberately inside the visual gate's failure budget: + * at ten seconds, whether the gate saw the panel depended on how slowly the + * probes ran, which made the check a machine-speed race. */ -const LIVE_FEED_DEADLINE_MS = 10_000; +const LIVE_FEED_DEADLINE_MS = 5_000; export interface Env { MAINNET_ENABLED: boolean; From 078f5c9b2cf34f61f6f6df553f6f654a7b7e979c Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 18:18:56 +0000 Subject: [PATCH 60/68] ci: build the release artifact on a runner, not on a workstation The artifact a release installs was built by hand on a Windows workstation. That machine has two ways of handing you a stale build without saying so. A leftover gateway process keeps serving an old output directory, and pkill in Git Bash does not kill a Windows node process, so those accumulate. And a build step that fails leaves the previous output sitting where a reader expects the new one. Both have already produced a measurement that described a build nobody was running, once as a false regression and once as a real one that went unnoticed for a while. A runner starts from a clean checkout, so the artifact matches the commit it names. Dispatch it with the ref to build; it prints the resolved sha. It repeats the four bundle gates rather than trusting the CI run on the same commit, because that was a different build. node_modules and the compiled gbt module are not packed, since install hard-links them from the running release, which is only correct while the dependency tree is unchanged. Co-Authored-By: Claude Opus 5 --- .../workflows/universe-release-artifact.yml | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 .github/workflows/universe-release-artifact.yml diff --git a/.github/workflows/universe-release-artifact.yml b/.github/workflows/universe-release-artifact.yml new file mode 100644 index 00000000000..84d58683b9b --- /dev/null +++ b/.github/workflows/universe-release-artifact.yml @@ -0,0 +1,111 @@ +name: Universe release artifact + +# Builds the one artifact a release installs, on the runner fleet. +# +# It exists because the artifact used to be built on a workstation, and that +# machine has two ways of handing you a stale build without saying so: a +# leftover server process keeps serving an old output directory, and a failed +# build step can leave the previous output in place. Both have already produced +# a measurement that described a build nobody was running. A runner starts from +# a clean checkout every time, so the artifact matches the commit it names. + +on: + workflow_dispatch: + inputs: + ref: + description: Commit, tag, or branch to build + required: true + default: main + +permissions: + contents: read + +jobs: + artifact: + name: Build and pack + runs-on: [self-hosted, linux-ultra] + timeout-minutes: 90 + steps: + - name: Checkout the requested ref + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + ref: ${{ inputs.ref }} + + - name: Record what is being built + id: sha + run: | + sha=$(git rev-parse HEAD) + printf 'sha=%s\n' "$sha" >> "$GITHUB_OUTPUT" + printf 'short=%s\n' "${sha:0:9}" >> "$GITHUB_OUTPUT" + printf 'Building %s (%s)\n' "$sha" "$(git log -1 --format=%s)" + + - name: Setup Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: '24.19.0' + + - name: Install backend + working-directory: backend + run: npm ci + + - name: Build backend + working-directory: backend + run: npm run build + + - name: Install frontend + working-directory: frontend + run: npm ci + + - name: Build frontend + working-directory: frontend + run: npm run build:universe + + # The same gates the CI run applies to a build, applied to the build that + # is about to be shipped. A green CI run on the same commit does not prove + # this output is sound, because this is a different build. + - name: Built bundle carries no upstream marks + run: node scripts/universe/check-branding.mjs frontend/dist + + - name: Built bundle calls no third-party origin + run: node scripts/universe/check-origins.mjs frontend/dist + + - name: Every asset the build references is in the output + run: node scripts/universe/check-build-assets.mjs + + - name: No em dash in what the build actually ships + run: node scripts/universe/check-text.mjs frontend/dist + + # release.sh reads the frontend from frontend/build, the backend from + # backend/dist, and the gateway from scripts/universe. node_modules and + # the compiled gbt module are not packed: install hard-links them from the + # running release, which is correct only while the dependency tree is + # unchanged, so the check below refuses to pack when it has changed. + - name: Pack + id: pack + run: | + set -euo pipefail + sha='${{ steps.sha.outputs.short }}' + stage=$(mktemp -d) + mkdir -p "$stage/backend" "$stage/frontend" "$stage/scripts" + cp -a backend/dist "$stage/backend/dist" + cp -a backend/package.json "$stage/backend/package.json" + cp -a backend/package-lock.json "$stage/backend/package-lock.json" + cp -a frontend/dist/mempool/browser "$stage/frontend/build" + cp -a scripts/universe "$stage/scripts/universe" + test -f "$stage/backend/dist/index.js" + test -f "$stage/frontend/build/index.html" + test -f "$stage/scripts/universe/gateway.mjs" + out="$PWD/mempool-$sha.tar.gz" + tar -czf "$out" -C "$stage" backend frontend scripts + sha256sum "$out" | tee "$out.sha256" + printf 'name=mempool-%s\n' "$sha" >> "$GITHUB_OUTPUT" + + - name: Upload + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: ${{ steps.pack.outputs.name }} + path: | + mempool-*.tar.gz + mempool-*.tar.gz.sha256 + retention-days: 14 + if-no-files-found: error From dcc9266685e4579990ccb5bcd3d321927d1c6d17 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 18:23:35 +0000 Subject: [PATCH 61/68] ci: build the dispatched ref, and check the lock file before hard linking Two fixes to the release artifact workflow I added in 078f5c9b2. CodeQL was right to fail it. The ref input meant that dispatching from the default branch would check out an arbitrary ref and run its install and build scripts while holding the default branch's Actions cache scope, which is the scope universe-ci.yml restores from. That is a real path from "run a build of my branch" to "poison the cache every other job here trusts", and it is worth more than the convenience. The workflow now builds whatever ref it was dispatched against, which is what this was always going to be used for: the file has to exist on the ref being built anyway, because a dispatch executes the workflow as it exists there. The Pack comment also promised a dependency check that was not written. The check belongs in release.sh install rather than in the workflow, because that is where both trees are visible: the artifact already carries the backend lock file, so install now compares it against the running release and refuses the hard link when it differs. Hard linking a stale node_modules into a release that asked for different packages gives you a backend that starts, imports the wrong versions, and fails somewhere unrelated later. Reported by mempool-3d in review. Co-Authored-By: Claude Opus 5 --- .../workflows/universe-release-artifact.yml | 20 ++++++++++--------- scripts/universe/release.sh | 10 ++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.github/workflows/universe-release-artifact.yml b/.github/workflows/universe-release-artifact.yml index 84d58683b9b..573e4f89157 100644 --- a/.github/workflows/universe-release-artifact.yml +++ b/.github/workflows/universe-release-artifact.yml @@ -9,13 +9,14 @@ name: Universe release artifact # a measurement that described a build nobody was running. A runner starts from # a clean checkout every time, so the artifact matches the commit it names. +# It builds the ref it is dispatched on, and takes no ref input. An input +# would be more convenient and is not safe: dispatched from the default +# branch, the job holds that branch's Actions cache scope, so building an +# arbitrary ref would run that ref's install and build scripts with write +# access to the cache every other workflow here restores from. Dispatch it +# against the branch or tag you want built instead. on: workflow_dispatch: - inputs: - ref: - description: Commit, tag, or branch to build - required: true - default: main permissions: contents: read @@ -26,10 +27,8 @@ jobs: runs-on: [self-hosted, linux-ultra] timeout-minutes: 90 steps: - - name: Checkout the requested ref + - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - with: - ref: ${{ inputs.ref }} - name: Record what is being built id: sha @@ -79,7 +78,10 @@ jobs: # backend/dist, and the gateway from scripts/universe. node_modules and # the compiled gbt module are not packed: install hard-links them from the # running release, which is correct only while the dependency tree is - # unchanged, so the check below refuses to pack when it has changed. + # unchanged. The lock file is packed so that release.sh install can + # compare it against the running release and refuse the hard link when it + # differs. That check belongs there, where both trees are visible; here + # only one of them is. - name: Pack id: pack run: | diff --git a/scripts/universe/release.sh b/scripts/universe/release.sh index ee9fc5d5a02..4ad7e81aa4b 100644 --- a/scripts/universe/release.sh +++ b/scripts/universe/release.sh @@ -46,6 +46,16 @@ cmd_install() { # Dependencies and the compiled gbt module do not change between most # releases, so they are hard-linked from the running one. That keeps the # install quick and the disk flat, and the files stay immutable either way. + # + # It is only correct while the dependency tree is actually unchanged. Hard + # linking a stale node_modules into a release that asked for different + # packages produces a backend that runs, imports the wrong versions, and + # fails somewhere unrelated later. The artifact carries its lock file so + # that this can be checked here, where both trees are visible, rather than + # trusted at build time where only one of them is. + if [ -n "$previous" ] && [ -f "$previous/backend/package-lock.json" ] && [ -f "$dir/backend/package-lock.json" ] && ! cmp -s "$previous/backend/package-lock.json" "$dir/backend/package-lock.json"; then + fail "backend dependencies changed since $(basename "$previous"); this release needs its own node_modules installed rather than the hard link, so install it explicitly and re-run" + fi if [ -n "$previous" ] && [ -d "$previous/backend/node_modules" ]; then [ -d "$dir/backend/node_modules" ] || cp -al "$previous/backend/node_modules" "$dir/backend/node_modules" [ -d "$dir/backend/rust-gbt" ] || cp -al "$previous/backend/rust-gbt" "$dir/backend/rust-gbt" From 885d372448dc102bd5a69af65eb4c94cbc53714e Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 18:28:01 +0000 Subject: [PATCH 62/68] deploy: let systemd hold the gateway port so a restart refuses nothing The backend and the overlay restart behind the gateway, and the gateway bridges that gap. A restart of the gateway itself could not be bridged: the port went away with the process and the edge answered 502 until it came back. release.sh already limited that to releases which change gateway.mjs, which is honest but does not help, because this release changes gateway.mjs. The gateway now accepts a listening socket from systemd on fd 3 and falls back to opening its own port when there is no handover, so it runs the same way under a unit, in CI and from a shell. universe-explorer-gateway.socket owns the port and the service drop-in requires it, which is what makes a restart leave the port bound: connections arriving mid-restart queue in the kernel backlog instead of being refused. The pid check on the handover is the part worth reading twice. LISTEN_FDS and LISTEN_PID are inherited by child processes, so a child that trusted them would listen on a descriptor belonging to its parent. Covered, along with the no-handover and malformed-handover cases, in gateway.test.mjs. Adopting this on a gateway that is already up costs one brief interruption, because the running process holds the port without SO_REUSEPORT and the socket unit cannot bind underneath it. That is worth spending once here, where a gateway restart was going to interrupt things anyway. The cutover log now states which of the two cases applies rather than leaving it to be assumed. Three other universe services on this host are already socket activated, so this follows the existing pattern rather than introducing one. Co-Authored-By: Claude Opus 5 --- docs/operations/DEPLOYMENT.md | 20 ++++++++- .../10-socket.conf | 9 ++++ .../linux/universe-explorer-gateway.socket | 30 ++++++++++++++ scripts/universe/gateway.mjs | 41 +++++++++++++++++-- scripts/universe/gateway.test.mjs | 29 ++++++++++++- scripts/universe/release.sh | 24 +++++++---- 6 files changed, 140 insertions(+), 13 deletions(-) create mode 100644 production/linux/universe-explorer-gateway.service.d/10-socket.conf create mode 100644 production/linux/universe-explorer-gateway.socket diff --git a/docs/operations/DEPLOYMENT.md b/docs/operations/DEPLOYMENT.md index 3571a692b07..7412a619f42 100644 --- a/docs/operations/DEPLOYMENT.md +++ b/docs/operations/DEPLOYMENT.md @@ -160,8 +160,24 @@ suite can see that. its static root per request, so a new frontend reaches it through the symlink with no restart, and it is restarted only when its own file changed. A cutover was probed once a second through the restart window and - every request returned 200. A release that changes the gateway itself is - the one case that still shows a brief gap, and the cutover log says so. + every request returned 200. + + A release that changes the gateway itself used to be the one case that + still showed a gap, because the port went away with the process and nothing + could bridge it. `universe-explorer-gateway.socket` closes that: systemd + owns the listening port, so a restart of the service leaves it bound and + arriving connections wait in the kernel backlog. The unit and the service + drop-in that requires it are in `production/linux/`. Enable it with + + ```bash + systemctl enable --now universe-explorer-gateway.socket + ``` + + Adopting it on a gateway that is already running costs one brief + interruption, since the running process holds the port without + `SO_REUSEPORT` and the socket unit cannot bind underneath it. Every deploy + after that is seamless. The cutover log states which of the two cases + applies rather than leaving a reader to assume. An upstream that is genuinely gone is still reported as a gateway failure within a few seconds, so a real outage is never hidden behind a long wait. After the swap it reads `/api/v1/capabilities` and diff --git a/production/linux/universe-explorer-gateway.service.d/10-socket.conf b/production/linux/universe-explorer-gateway.service.d/10-socket.conf new file mode 100644 index 00000000000..9cd28549633 --- /dev/null +++ b/production/linux/universe-explorer-gateway.service.d/10-socket.conf @@ -0,0 +1,9 @@ +# Binds the gateway service to the socket unit that owns its port. +# +# Requires plus After means starting the service brings the socket up first, +# and, more to the point, restarting the service leaves the socket up. That is +# the whole reason this exists: the port survives the process. + +[Unit] +Requires=universe-explorer-gateway.socket +After=universe-explorer-gateway.socket diff --git a/production/linux/universe-explorer-gateway.socket b/production/linux/universe-explorer-gateway.socket new file mode 100644 index 00000000000..6664d7d337a --- /dev/null +++ b/production/linux/universe-explorer-gateway.socket @@ -0,0 +1,30 @@ +# Holds the gateway's listening port so that restarting the gateway does not +# refuse connections. +# +# The backend and the overlay restart behind the gateway, which bridges the gap +# for them. Nothing could bridge a restart of the gateway itself: the port went +# away with the process, and the edge answered 502 until it came back. That was +# the last remaining gap in a deploy, and it opened whenever gateway.mjs +# changed. +# +# With the socket owned by systemd, the port stays bound across the restart and +# arriving connections wait in the kernel backlog instead. Install with: +# +# systemctl enable --now universe-explorer-gateway.socket +# +# Adopting it on a gateway that is already running costs one brief interruption, +# because the old process holds the port without SO_REUSEPORT and the socket +# unit cannot bind underneath it. Every deploy after that is seamless. + +[Unit] +Description=Universe Explorer gateway socket +PartOf=universe-explorer-gateway.service + +[Socket] +ListenStream=127.0.0.1:8099 +# Matches the backlog the gateway asked for when it opened the port itself, so +# a burst arriving mid-restart is queued rather than dropped. +Backlog=511 + +[Install] +WantedBy=sockets.target diff --git a/scripts/universe/gateway.mjs b/scripts/universe/gateway.mjs index 54fc825c248..905f27d4a25 100644 --- a/scripts/universe/gateway.mjs +++ b/scripts/universe/gateway.mjs @@ -431,6 +431,33 @@ server.headersTimeout = 60_000; server.requestTimeout = 0; server.keepAliveTimeout = 65_000; +/** + * The first descriptor systemd passes to a socket-activated service. + */ +const SD_LISTEN_FDS_START = 3; + +/** + * Returns the descriptor of a listening socket handed over by systemd, or null + * when this process has to open its own. + * + * This is what makes a deploy invisible. The backend and the overlay can be + * restarted behind the gateway, which bridges the gap, but nothing could + * bridge a restart of the gateway itself: the port went away with the process + * and the edge answered 502 until it came back. With the socket held by + * systemd instead, the port stays bound across the restart and arriving + * connections wait in the kernel backlog rather than being refused. + * + * The pid check is not decoration. LISTEN_FDS and LISTEN_PID are inherited by + * child processes, so a child that trusted them would try to listen on a + * descriptor belonging to its parent. + */ +export function inheritedListenerFd(env = process.env, pid = process.pid) { + if (env.LISTEN_PID !== String(pid)) return null; + const count = Number(env.LISTEN_FDS); + if (!Number.isInteger(count) || count < 1) return null; + return SD_LISTEN_FDS_START; +} + /** * Listening is the default. A test that imports this file for its routing * table sets UNIVERSE_GATEWAY_NO_LISTEN so no socket is opened. @@ -441,9 +468,12 @@ server.keepAliveTimeout = 65_000; * code and no error to read. */ if (process.env.UNIVERSE_GATEWAY_NO_LISTEN !== '1') { - server.listen(PORT, HOST, () => { + const inherited = inheritedListenerFd(); + const announce = () => { process.stdout.write( - `Universe Explorer gateway listening on ${HOST}:${PORT} + `Universe Explorer gateway listening on ${ + inherited === null ? `${HOST}:${PORT}` : `the socket systemd passed on fd ${inherited}` + } ` + ` overlay ${OVERLAY.origin} ` + @@ -452,7 +482,12 @@ if (process.env.UNIVERSE_GATEWAY_NO_LISTEN !== '1') { ` static ${ROOT} `, ); - }); + }; + if (inherited === null) { + server.listen(PORT, HOST, announce); + } else { + server.listen({ fd: inherited }, announce); + } for (const signal of ['SIGTERM', 'SIGINT']) { process.on(signal, () => { diff --git a/scripts/universe/gateway.test.mjs b/scripts/universe/gateway.test.mjs index 79cea9baa40..58ef7c1c28c 100644 --- a/scripts/universe/gateway.test.mjs +++ b/scripts/universe/gateway.test.mjs @@ -3,7 +3,7 @@ import assert from 'node:assert/strict'; // Importing the gateway must not open a socket. process.env.UNIVERSE_GATEWAY_NO_LISTEN = '1'; -const { routeFor } = await import('./gateway.mjs'); +const { routeFor, inheritedListenerFd } = await import('./gateway.mjs'); /** * The path rewrite is load bearing. The explorer backend registers every route @@ -82,3 +82,30 @@ test('everything outside the api tree is left for the static handler', () => { assert.equal(routeFor(pathname, url), null, url); } }); + +/** + * A gateway restart used to be the one part of a deploy nothing could bridge. + * Reading the handover wrong does not fail loudly: the process either binds its + * own port and quietly reintroduces the gap, or listens on a descriptor it does + * not own. + */ + +test('the socket systemd passes is used when it is addressed to this process', () => { + assert.equal(inheritedListenerFd({ LISTEN_PID: '42', LISTEN_FDS: '1' }, 42), 3); +}); + +test('a plain start opens its own port', () => { + assert.equal(inheritedListenerFd({}, 42), null); +}); + +test('a descriptor addressed to another process is ignored', () => { + // LISTEN_PID and LISTEN_FDS are inherited by children. A child that trusted + // them would listen on its parent's socket. + assert.equal(inheritedListenerFd({ LISTEN_PID: '41', LISTEN_FDS: '1' }, 42), null); +}); + +test('a handover of no sockets is not a handover', () => { + assert.equal(inheritedListenerFd({ LISTEN_PID: '42', LISTEN_FDS: '0' }, 42), null); + assert.equal(inheritedListenerFd({ LISTEN_PID: '42' }, 42), null); + assert.equal(inheritedListenerFd({ LISTEN_PID: '42', LISTEN_FDS: 'two' }, 42), null); +}); diff --git a/scripts/universe/release.sh b/scripts/universe/release.sh index 4ad7e81aa4b..973278487b9 100644 --- a/scripts/universe/release.sh +++ b/scripts/universe/release.sh @@ -265,12 +265,17 @@ cmd_cutover() { local previous; previous=$(readlink -f "$CURRENT" 2>/dev/null || true) log "previous release: ${previous:-none}" - # Whether the gateway itself has to come down decides whether this deploy is - # visible at all. The backend and the overlay run from a path baked into - # their unit at exec time, so they must restart; the gateway resolves its - # static root per request, so a frontend change reaches it through the - # symlink with no restart. Restarting it anyway is the only part of a deploy - # that nothing can bridge, so it happens only when its own code changed. + # The backend and the overlay run from a path baked into their unit at exec + # time, so they must restart; the gateway bridges that. The gateway resolves + # its static root per request, so a frontend change reaches it through the + # symlink with no restart at all, and it is restarted only when its own code + # changed. + # + # That restart used to be the one part of a deploy nothing could bridge. It + # is seamless when universe-explorer-gateway.socket owns the port, because + # systemd keeps it bound and arriving connections queue rather than being + # refused. Without the socket unit the port goes away with the process, so + # say so plainly rather than let a reader assume otherwise. local gateway_changed=no if [ -n "$previous" ] && [ -f "$previous/scripts/universe/gateway.mjs" ]; then if ! cmp -s "$previous/scripts/universe/gateway.mjs" "$dir/scripts/universe/gateway.mjs"; then @@ -286,7 +291,12 @@ cmd_cutover() { systemctl restart universe-explorer-backend universe-explorer-overlay if [ "$gateway_changed" = yes ]; then - log "the gateway changed, restarting it too; the origin sees a brief gap" + if systemctl is-active --quiet universe-explorer-gateway.socket; then + log "the gateway changed, restarting it; systemd holds the port, so the origin sees no refused connection" + else + log "the gateway changed, restarting it; nothing holds the port, so the origin sees a brief gap" + log "enable universe-explorer-gateway.socket to close it" + fi systemctl restart universe-explorer-gateway else log "the gateway is unchanged, leaving it up so the origin sees no gap" From a571419cdbaf2afc5a127f99bf19e291483267a0 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 18:30:26 +0000 Subject: [PATCH 63/68] deploy: drop PartOf, which would have restarted the socket with the service PartOf propagates stop and restart from the named unit to the one declaring it. With PartOf=universe-explorer-gateway.service on the socket, restarting the gateway would have restarted the socket too: service stops, socket stops and drops whatever was queued in the backlog, socket rebinds, service starts. That is a shorter unbound window than before and it is still an unbound window, so the comment in the unit and the success line in release.sh would both have been claiming something the units did not deliver. docker.socket carries the same declaration, which is why restarting docker.service is known to bounce its socket. Removing it is the whole fix. The service keeps Requires and After, so starting the service still brings the socket up first, and restarting the service now genuinely leaves the port bound. What this gives up is that stopping the service alone no longer takes the port down, because the socket outlives it and the next connection starts the service again. A deliberate full stop means stopping both units, which is now written in the unit and in DEPLOYMENT.md rather than left to be discovered. Reported by mempool-3d in review. Co-Authored-By: Claude Opus 5 --- docs/operations/DEPLOYMENT.md | 8 ++++++++ production/linux/universe-explorer-gateway.socket | 11 ++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/operations/DEPLOYMENT.md b/docs/operations/DEPLOYMENT.md index 7412a619f42..b2618e7c060 100644 --- a/docs/operations/DEPLOYMENT.md +++ b/docs/operations/DEPLOYMENT.md @@ -179,6 +179,14 @@ suite can see that. after that is seamless. The cutover log states which of the two cases applies rather than leaving a reader to assume. + Once the socket owns the port it outlives the service, so stopping the + service alone does not take the gateway down: the next connection starts it + again. To stop it for real, stop both units. + + ```bash + systemctl stop universe-explorer-gateway.socket universe-explorer-gateway.service + ``` + An upstream that is genuinely gone is still reported as a gateway failure within a few seconds, so a real outage is never hidden behind a long wait. After the swap it reads `/api/v1/capabilities` and fails the release if any feature is enabled with no routes registered, which diff --git a/production/linux/universe-explorer-gateway.socket b/production/linux/universe-explorer-gateway.socket index 6664d7d337a..fa86487afbd 100644 --- a/production/linux/universe-explorer-gateway.socket +++ b/production/linux/universe-explorer-gateway.socket @@ -16,9 +16,18 @@ # because the old process holds the port without SO_REUSEPORT and the socket # unit cannot bind underneath it. Every deploy after that is seamless. +# It deliberately does not declare PartOf=universe-explorer-gateway.service. +# PartOf propagates stop and restart from the named unit to this one, so a +# restart of the service would take the socket down with it, drop whatever was +# queued in the backlog, and rebind. That is a shorter gap than before but it +# is still a gap, and it would make the claim above false. +# +# Because the socket outlives the service, stopping the service alone does not +# take the port down: the next connection activates the service again. To stop +# the gateway for real, stop both units. + [Unit] Description=Universe Explorer gateway socket -PartOf=universe-explorer-gateway.service [Socket] ListenStream=127.0.0.1:8099 From a8810de0945fd658e972b7e2ed182993284736d7 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 18:34:16 +0000 Subject: [PATCH 64/68] deploy: give the port back before rolling back to a pre-socket release The socket unit introduces a way for a rollback to be the thing that takes the site down. A release from before the handover opens port 8099 itself, so if systemd is holding that port, that gateway dies on bind with the address already in use. The rollback path is reached precisely when something has already gone wrong, which is the worst moment to find a second failure. cmd_rollback now checks whether the release it is rolling back to understands the handover, and disables the socket first when it does not. That check is the reason inheritedListenerFd is an exported name rather than a local one: it is greppable in a release directory. Also reformats the dependency guard added earlier. Both guards were written with backslash continuations that arrived collapsed onto one line, which parses and behaves identically but reads badly at 187 characters. Nested tests instead. While reformatting I clobbered the cutover logging block with the wrong replacement and restored it from origin; the block is unchanged. Tested by extracting the guard from this file rather than retyping it: an older target disables the socket, a newer one does not, and neither happens when the socket is not in use. Co-Authored-By: Claude Opus 5 --- scripts/universe/release.sh | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/scripts/universe/release.sh b/scripts/universe/release.sh index 973278487b9..12327a1794f 100644 --- a/scripts/universe/release.sh +++ b/scripts/universe/release.sh @@ -53,8 +53,14 @@ cmd_install() { # fails somewhere unrelated later. The artifact carries its lock file so # that this can be checked here, where both trees are visible, rather than # trusted at build time where only one of them is. - if [ -n "$previous" ] && [ -f "$previous/backend/package-lock.json" ] && [ -f "$dir/backend/package-lock.json" ] && ! cmp -s "$previous/backend/package-lock.json" "$dir/backend/package-lock.json"; then - fail "backend dependencies changed since $(basename "$previous"); this release needs its own node_modules installed rather than the hard link, so install it explicitly and re-run" + if [ -n "$previous" ]; then + previous_lock="$previous/backend/package-lock.json" + release_lock="$dir/backend/package-lock.json" + if [ -f "$previous_lock" ] && [ -f "$release_lock" ]; then + if ! cmp -s "$previous_lock" "$release_lock"; then + fail "backend dependencies changed since $(basename "$previous"); install this release its own node_modules rather than hard linking, then re-run" + fi + fi fi if [ -n "$previous" ] && [ -d "$previous/backend/node_modules" ]; then [ -d "$dir/backend/node_modules" ] || cp -al "$previous/backend/node_modules" "$dir/backend/node_modules" @@ -313,6 +319,18 @@ cmd_rollback() { local sha=$1 local dir; dir=$(release_dir "$sha") [ -d "$dir" ] || fail "no release at $dir to roll back to" + + # A release from before the socket handover opens port 8099 itself. If + # systemd is holding that port, such a gateway dies on bind with the address + # already in use, and the rollback that was supposed to save the site is what + # takes it down. Give the port back before rolling back to one. + if systemctl is-active --quiet universe-explorer-gateway.socket; then + if ! grep -q inheritedListenerFd "$dir/scripts/universe/gateway.mjs" 2>/dev/null; then + log "$sha predates the socket handover and would fail to bind; releasing the port" + systemctl disable --now universe-explorer-gateway.socket || true + fi + fi + ln -sfn "$dir" "$CURRENT.new" mv -Tf "$CURRENT.new" "$CURRENT" # shellcheck disable=SC2086 From 784ef7da2fe2417a0afc74f6d2a64239a3f7bd63 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 18:38:28 +0000 Subject: [PATCH 65/68] ops: accept --base, and write down what the socket handover was measured at Two things found by using this stuff rather than reading it. synthetic-check took a positional origin while everything else in this directory takes --base. Passing --base was not rejected: it was read as the origin, and failed several requests later with a URL parse error naming a string nobody typed. It now accepts either spelling and rejects anything else outright. This runs on the verification path after a cutover, which is not where an operator should be debugging argument parsing. DEPLOYMENT.md now carries the measurement behind the socket activation claim rather than asserting it: on a spare port on this host, with a throwaway unit pair since removed, a full restart under a 20ms probe returned 200 on all 400 requests while the pid changed underneath. It also states the rollback hazard next to the rollback instructions, because release.sh handling it automatically is not a reason for the operator not to know about it. Co-Authored-By: Claude Opus 5 --- docs/operations/DEPLOYMENT.md | 13 ++++++++++ scripts/universe/synthetic-check.mjs | 38 +++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/docs/operations/DEPLOYMENT.md b/docs/operations/DEPLOYMENT.md index b2618e7c060..b5c9fedd29d 100644 --- a/docs/operations/DEPLOYMENT.md +++ b/docs/operations/DEPLOYMENT.md @@ -173,6 +173,12 @@ suite can see that. systemctl enable --now universe-explorer-gateway.socket ``` + Measured on this host before adopting it, on a spare port with a throwaway + unit pair that was removed afterwards: the service logged that it was + listening on the socket systemd passed, and a full `systemctl restart` + under a probe every 20 milliseconds returned 200 on all 400 requests while + the process id changed underneath. The handover is not an assumption. + Adopting it on a gateway that is already running costs one brief interruption, since the running process holds the port without `SO_REUSEPORT` and the socket unit cannot bind underneath it. Every deploy @@ -198,6 +204,13 @@ suite can see that. different builds. 7. Keep the previous release directory until the stability window closes. +Rolling back to a release from before the socket handover needs the port back, +because such a gateway opens 8099 itself and dies on bind while systemd holds +it. `release.sh rollback` detects that case by looking for `inheritedListenerFd` +in the target release and disables the socket first. That is worth knowing by +hand too, since the rollback path is reached exactly when something has already +gone wrong. + ## Database growth and retention Measured on the running deployment, with one year of blocks indexed and the diff --git a/scripts/universe/synthetic-check.mjs b/scripts/universe/synthetic-check.mjs index 9661ff396ff..0ebf6789fa5 100644 --- a/scripts/universe/synthetic-check.mjs +++ b/scripts/universe/synthetic-check.mjs @@ -10,11 +10,47 @@ * * Usage: * node scripts/universe/synthetic-check.mjs [origin] + * node scripts/universe/synthetic-check.mjs --base= * * Exit code 0 when every check passes, 1 otherwise. */ -const ORIGIN = (process.argv[2] || process.env.UNIVERSE_ORIGIN || 'https://explorer.bitcoinuniverse.io').replace(/\/+$/, ''); +/** + * Both spellings are accepted because the rest of this directory takes + * --base and this one took a positional, and the mismatch is only ever + * discovered while running it. Passing --base used to be read as the origin + * itself, which failed several requests later with a URL parse error naming a + * string nobody typed. Anything else is rejected now rather than quietly + * treated as a hostname. + */ +function originFromArguments(argv) { + const args = argv.slice(2); + const positional = []; + for (const arg of args) { + if (arg.startsWith('--base=')) { + positional.push(arg.slice('--base='.length)); + } else if (arg.startsWith('-')) { + throw new Error(`unknown option ${arg}; usage: synthetic-check.mjs [origin] or --base=`); + } else { + positional.push(arg); + } + } + if (positional.length > 1) { + throw new Error(`expected one origin, got ${positional.length}`); + } + return positional[0]; +} + +let requestedOrigin; +try { + requestedOrigin = originFromArguments(process.argv); +} catch (error) { + process.stderr.write(`${error.message} +`); + process.exit(2); +} + +const ORIGIN = (requestedOrigin || process.env.UNIVERSE_ORIGIN || 'https://explorer.bitcoinuniverse.io').replace(/\/+$/, ''); const REQUEST_TIMEOUT_MS = 20_000; const failures = []; From 36fe5d41d214125e85433252a0c482a8d054525f Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 19:40:28 +0000 Subject: [PATCH 66/68] ci: give the deep visual pass the time it actually takes The frontend job had an hour. The deep pass alone measured 48 minutes once the gated route list went from three routes to seven, and the job was killed three minutes from finishing, having already produced a green broad pass and every bundle gate. Nothing was wrong with the code; the budget was set when the pass was a third of its current size. A gate that cannot finish protects nothing, which is the reason this matrix was split into a broad pass and a deep pass in the first place. Setting the budget to the measured cost of the pass that actually runs, with room to grow before it needs revisiting again. Seven routes across every failure state, three themes and three widths is 441 page loads. If it grows again the answer is a matrix over routes rather than a larger number here, since wall clock is what makes a slow gate get skipped. Co-Authored-By: Claude Opus 5 --- .github/workflows/universe-ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/universe-ci.yml b/.github/workflows/universe-ci.yml index f253595f375..184910c7360 100644 --- a/.github/workflows/universe-ci.yml +++ b/.github/workflows/universe-ci.yml @@ -99,7 +99,12 @@ jobs: frontend: name: Frontend build runs-on: [self-hosted, linux-ultra] - timeout-minutes: 60 + # The deep visual pass measured 48 minutes once the gated route list grew + # from three routes to seven, which put the job over the hour it had and + # killed it three minutes from the end. A gate that cannot finish protects + # nothing, which is the same reason the matrix was split in two to begin + # with. Budget is for the pass that actually runs, with room to grow. + timeout-minutes: 100 steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 From 6adae92b648cd2922a80d76eb4c2092df024be70 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 20:13:58 +0000 Subject: [PATCH 67/68] ci: isolate integration databases across runners --- .github/workflows/backend-integration.yml | 10 ++- .github/workflows/ci.yml | 1 + .github/workflows/docker.yml | 1 + .github/workflows/universe-ci.yml | 10 ++- backend/docker-compose.test.yml | 4 +- backend/jest.integration.setup.ts | 71 ++++++++++++++----- .../database-connection.test.ts | 2 +- 7 files changed, 77 insertions(+), 22 deletions(-) diff --git a/.github/workflows/backend-integration.yml b/.github/workflows/backend-integration.yml index f1a7290c43c..89624cb77b9 100644 --- a/.github/workflows/backend-integration.yml +++ b/.github/workflows/backend-integration.yml @@ -2,6 +2,7 @@ name: Backend Integration Tests with MariaDB on: pull_request: + branches: [master] types: [opened, review_requested, synchronize] push: branches: @@ -15,6 +16,10 @@ jobs: node: ["24.13.0"] fail-fast: false runs-on: mempool-ci + env: + COMPOSE_PROJECT_NAME: mempool-integration-${{ github.run_id }}-${{ github.run_attempt }}-${{ github.job }} + MEMPOOL_TEST_BASE_CONFIG_FILE: ${{ github.workspace }}/${{ matrix.node }}/integration/backend/mempool-config.test.json + MEMPOOL_TEST_RUNTIME_CONFIG_FILE: ${{ github.workspace }}/${{ matrix.node }}/integration/backend/.mempool-config.integration.json name: Backend Integration Tests - node ${{ matrix.node }} @@ -87,7 +92,8 @@ jobs: npm run test:integration working-directory: ${{ matrix.node }}/integration/backend env: - MEMPOOL_CONFIG_FILE: ${{ github.workspace }}/${{ matrix.node }}/integration/backend/mempool-config.test.json + MEMPOOL_CONFIG_FILE: ${{ env.MEMPOOL_TEST_RUNTIME_CONFIG_FILE }} + SKIP_DB_TEARDOWN: '1' - name: Start MariaDB for server test run: docker compose -f docker-compose.test.yml up -d @@ -129,7 +135,7 @@ jobs: fi working-directory: ${{ matrix.node }}/integration/backend env: - MEMPOOL_CONFIG_FILE: ${{ github.workspace }}/${{ matrix.node }}/integration/backend/mempool-config.test.json + MEMPOOL_CONFIG_FILE: ${{ env.MEMPOOL_TEST_RUNTIME_CONFIG_FILE }} - name: Cleanup containers if: always() diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ef76a6fb574..6656d416794 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,6 +2,7 @@ name: CI Pipeline for the Backend and Frontend on: pull_request: + branches: [master] types: [opened, review_requested, synchronize] push: branches: diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 83a115fe681..f4abaf31920 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -11,6 +11,7 @@ on: - v[0-9]+.[0-9]+.[0-9]+ - v[0-9]+.[0-9]+.[0-9]+-* pull_request: + branches: [master] types: [opened, synchronize, reopened, labeled] permissions: diff --git a/.github/workflows/universe-ci.yml b/.github/workflows/universe-ci.yml index 184910c7360..bed9fb53873 100644 --- a/.github/workflows/universe-ci.yml +++ b/.github/workflows/universe-ci.yml @@ -2,7 +2,7 @@ name: Universe CI on: push: - branches: [develop, main] + branches: [main] pull_request: branches: [develop, main] workflow_dispatch: @@ -12,7 +12,7 @@ permissions: concurrency: group: universe-ci-${{ github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} + cancel-in-progress: false jobs: docs: @@ -62,6 +62,10 @@ jobs: name: Backend build and test runs-on: [self-hosted, linux-ultra] timeout-minutes: 45 + env: + COMPOSE_PROJECT_NAME: mempool-integration-${{ github.run_id }}-${{ github.run_attempt }}-${{ github.job }} + MEMPOOL_TEST_BASE_CONFIG_FILE: ${{ github.workspace }}/backend/mempool-config.test.json + MEMPOOL_TEST_RUNTIME_CONFIG_FILE: ${{ github.workspace }}/backend/.mempool-config.integration.json steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 @@ -95,6 +99,8 @@ jobs: - name: Migrations and repositories against a real database working-directory: backend run: npm run test:integration + env: + MEMPOOL_CONFIG_FILE: ${{ env.MEMPOOL_TEST_RUNTIME_CONFIG_FILE }} frontend: name: Frontend build diff --git a/backend/docker-compose.test.yml b/backend/docker-compose.test.yml index 4119387b3ad..4294dca45c8 100644 --- a/backend/docker-compose.test.yml +++ b/backend/docker-compose.test.yml @@ -13,7 +13,9 @@ services: MYSQL_ROOT_PASSWORD: "admin" MARIADB_AUTO_UPGRADE: "1" ports: - - "33306:3306" + # Jest requests port zero so Docker reserves an unused port atomically. + # The shell-managed local test path keeps its established 33306 default. + - "127.0.0.1:${MEMPOOL_TEST_DB_PORT:-33306}:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "mempool_test", "-pmempool_test"] interval: 5s diff --git a/backend/jest.integration.setup.ts b/backend/jest.integration.setup.ts index 9ccf5c87855..95f2c23681b 100644 --- a/backend/jest.integration.setup.ts +++ b/backend/jest.integration.setup.ts @@ -1,12 +1,11 @@ // Setup that runs BEFORE setupFiles // This ensures MEMPOOL_CONFIG_FILE is set before any modules are loaded import * as path from 'path'; +import * as fs from 'fs'; +import * as os from 'os'; import { execSync } from 'child_process'; -// Set the config file path if not already set -if (!process.env.MEMPOOL_CONFIG_FILE) { - process.env.MEMPOOL_CONFIG_FILE = path.join(__dirname, 'mempool-config.test.json'); -} +const defaultConfigFile = path.join(__dirname, 'mempool-config.test.json'); // Helper to get docker compose command (v1 or v2) function getDockerComposeCmd(): string { @@ -23,6 +22,45 @@ function getDockerComposeCmd(): string { } } +function setUniqueComposeProject(): string { + if (!process.env.COMPOSE_PROJECT_NAME) { + process.env.COMPOSE_PROJECT_NAME = `mempool-integration-${process.pid}-${Date.now()}`; + } + if (!process.env.MEMPOOL_TEST_DB_PORT) { + process.env.MEMPOOL_TEST_DB_PORT = '0'; + } + return process.env.COMPOSE_PROJECT_NAME; +} + +function getPublishedDatabasePort(dockerComposeCmd: string, composeFile: string): number { + const publishedAddress = execSync( + `${dockerComposeCmd} -f "${composeFile}" port db-test 3306`, + { cwd: __dirname, encoding: 'utf8' }, + ).trim(); + const match = publishedAddress.match(/:(\d+)$/); + const port = match ? Number(match[1]) : NaN; + + if (!Number.isInteger(port) || port < 1 || port > 65535) { + throw new Error(`Could not determine the test database port from "${publishedAddress}"`); + } + + return port; +} + +function writeRuntimeConfig(port: number, composeProject: string): void { + const sourceConfigFile = process.env.MEMPOOL_TEST_BASE_CONFIG_FILE + || (!process.env.MEMPOOL_TEST_RUNTIME_CONFIG_FILE && process.env.MEMPOOL_CONFIG_FILE) + || defaultConfigFile; + const runtimeConfigFile = process.env.MEMPOOL_TEST_RUNTIME_CONFIG_FILE + || path.join(os.tmpdir(), `${composeProject}-config.json`); + const runtimeConfig = JSON.parse(fs.readFileSync(sourceConfigFile, 'utf8')); + + runtimeConfig.DATABASE.PORT = port; + fs.writeFileSync(runtimeConfigFile, `${JSON.stringify(runtimeConfig, null, 2)}\n`, { mode: 0o600 }); + process.env.MEMPOOL_TEST_DB_PORT = String(port); + process.env.MEMPOOL_CONFIG_FILE = runtimeConfigFile; +} + // Start the Docker test database container module.exports = async () => { // Skip if SKIP_DB_SETUP is set (e.g., when test-with-db.sh manages the database) @@ -31,11 +69,12 @@ module.exports = async () => { return; } + const composeFile = path.join(__dirname, 'docker-compose.test.yml'); + const dockerComposeCmd = getDockerComposeCmd(); + const composeProject = setUniqueComposeProject(); + console.log('Starting test database container...'); try { - const composeFile = path.join(__dirname, 'docker-compose.test.yml'); - const dockerComposeCmd = getDockerComposeCmd(); - // A container left running by an earlier run is not the container this run // asked for: compose reports it as already up and never recreates it, so a // change of image or of engine is silently ignored and the tests measure @@ -49,19 +88,11 @@ module.exports = async () => { // Nothing to remove on a clean machine, which is the normal case. } - // `down` only removes what compose owns. A container left behind under the - // same name by anything else still holds the name, and `up` fails on the - // conflict rather than starting the database. - try { - execSync('docker rm -f backend-db-test-1', { stdio: 'pipe' }); - } catch { - // No such container, which is the normal case. - } - execSync(`${dockerComposeCmd} -f "${composeFile}" up -d --force-recreate`, { stdio: 'inherit', cwd: __dirname }); + writeRuntimeConfig(getPublishedDatabasePort(dockerComposeCmd, composeFile), composeProject); // Wait for database to be ready console.log('Waiting for database to be ready...'); @@ -91,6 +122,14 @@ module.exports = async () => { } } } catch (error) { + try { + execSync(`${dockerComposeCmd} -f "${composeFile}" down -v --remove-orphans`, { + stdio: 'inherit', + cwd: __dirname + }); + } catch { + // Preserve the startup error when cleanup also fails. + } console.error('Failed to start test database:', error instanceof Error ? error.message : error); throw error; } diff --git a/backend/src/__integration_tests__/database-connection.test.ts b/backend/src/__integration_tests__/database-connection.test.ts index 9363b404fe3..181c8e18410 100644 --- a/backend/src/__integration_tests__/database-connection.test.ts +++ b/backend/src/__integration_tests__/database-connection.test.ts @@ -12,7 +12,7 @@ describe('Database Connection Integration Tests', () => { const dbConfig = getTestDatabaseConfig(); expect(dbConfig.enabled).toBe(true); expect(dbConfig.database).toBe('mempool_test'); - expect(dbConfig.port).toBe(33306); + expect(dbConfig.port).toBe(Number(process.env.MEMPOOL_TEST_DB_PORT)); }); test('should execute a simple query', async () => { From 00b16b0ab01bb2ee4d6c2a97c38e320229e9b1dd Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Date: Fri, 28 Aug 2026 20:53:53 +0000 Subject: [PATCH 68/68] qa: emulate 200 percent zoom the way a browser does, not with css zoom The zoom sweep failed five routes with 29 to 49 pixels of horizontal overflow, deterministically, on both runs of the same commit. The pages are not at fault. The measurement is. It set zoom: 2 on the root element. That scales the layout box without changing what media queries see, so the desktop breakpoints stay active and the desktop layout is rendered into half the width. No reader can reach that state: at real 200 percent zoom the CSS viewport halves and the responsive rules answer to the smaller width. Measured on a page with one min-width: 992px rule holding a 900px element. Under zoom: 2 the media query still matched, the element was still displayed, and the document overflowed by 260 pixels. At a real 640 viewport the query did not match, the element was hidden as designed, and overflow was zero. So the sweep now uses a 640 by 450 viewport at device scale factor 2, which is what the browser does at 200 percent. Verified against the live origin with the same fixtures: all ten checks pass, zero overflow, zero text painted on itself. That is the deployed build, which does not carry this release's layout work, so the result is about the method rather than about the fix. Consistent with the route matrix, which measures document overflow the same way at 320, 768 and 1440 and reports none. A gate that fails a state the product cannot be in teaches people to ignore it. Co-Authored-By: Claude Opus 5 --- scripts/universe/visual-qa/modes-check.mjs | 36 +++++++++++++--------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/scripts/universe/visual-qa/modes-check.mjs b/scripts/universe/visual-qa/modes-check.mjs index 3074e9463f6..f13e630f68a 100644 --- a/scripts/universe/visual-qa/modes-check.mjs +++ b/scripts/universe/visual-qa/modes-check.mjs @@ -11,6 +11,20 @@ * 200% zoom is WCAG 1.4.4 and 1.4.10. At a 1280 viewport that leaves 640 CSS * pixels, and nothing may scroll horizontally at that width. * + * That second one is emulated with a 640 viewport at device scale factor 2, + * which is what a browser actually does when a reader zooms to 200%: the CSS + * viewport halves and the responsive rules answer to the smaller width. + * + * It is not emulated by setting `zoom: 2` on the root element, which is the + * obvious approach and is wrong. `zoom` scales the layout box without changing + * what media queries see, so the desktop breakpoints stay active and the + * desktop layout gets rendered into half the width. Measured on a page with a + * single `min-width: 992px` rule holding a 900px element: under `zoom: 2` the + * media query still matched, the element was still displayed, and the document + * overflowed by 260 pixels; at a real 640 viewport the query did not match, the + * element was hidden as designed, and overflow was zero. Every failure that + * method reports is a layout no reader can reach. + * * Both run against the same REST fixtures as the matrix, so a page under review * has real content rather than an empty shell. The socket is not mocked here, * so the chain strip renders its placeholder blocks and the header reports @@ -90,21 +104,9 @@ async function readStable(page, fn) { } } -async function sweep(label, contextOptions, zoom) { +async function sweep(label, contextOptions) { const context = await browser.newContext(contextOptions); await installFixtures(context); - // Applied to every document as it is created, so a redirect cannot land on a - // page that was never zoomed, and nothing has to be evaluated after a - // navigation that may still be in progress. - if (zoom) { - await context.addInitScript((z) => { - const apply = () => { - if (document.documentElement) document.documentElement.style.zoom = String(z); - }; - apply(); - document.addEventListener('DOMContentLoaded', apply); - }, zoom); - } for (const [id, path] of ROUTES) { const page = await context.newPage(); await page.goto(BASE + path, { waitUntil: 'networkidle', timeout: 45000 }).catch(() => {}); @@ -140,9 +142,13 @@ await sweep('forced-colors', { viewport: { width: 1280, height: 900 }, forcedColors: 'active', colorScheme: 'light', -}, null); +}); -await sweep('zoom-200', { viewport: { width: 1280, height: 900 } }, 2); +// Half of 1280 by 900, at twice the pixel density. This is 200% zoom. +await sweep('zoom-200', { + viewport: { width: 640, height: 450 }, + deviceScaleFactor: 2, +}); await browser.close();