{
  "rules": {
    "version": "lab56-v1-frozen-before-data-scan",
    "frozen_at_local_date": "2026-10-22",
    "purpose": "Retrospective teaching selection by predeclared recognition conditions, never by a profitable future outcome. Not a prospective registration or a performance study.",
    "ordered_universe": [
      "GBPUSD-H1.csv",
      "USDJPY-H1.csv",
      "EURUSD-H1.csv"
    ],
    "assessment_window": [
      "2026-09-01 00:00",
      "2026-10-20 00:00"
    ],
    "ordering": "Chronological assessment-bar start, then ordered_universe. Cases selected in listed case order. First recognition match only; later OHLC is not read by selection.",
    "episode_separation": "Assessment bars of any two selected cases on the same pair are at least 48 observed H1 bars apart. Different-symbol cases are not claimed independent.",
    "numbers": "Integer source points; EURUSD/GBPUSD point=0.00001, USDJPY point=0.001. Strict inequalities applied to integers.",
    "pin": "R=H-L>0; B=abs(C-O); B/R<=0.30; dominant shadow/R>=0.60; opposite shadow/R<=0.10; bullish C>=L+0.70R, bearish C<=L+0.30R. No requirement for body sign.",
    "pivots": "Strict 2+2: centre H greater than both previous and both next highs; L lower than both previous and both next lows. Pivot i available only after close of i+2. Structure at assessment uses pivots confirmed by preceding bar, within preceding 96 bars; last two highs and last two lows both rise=up, both fall=down, otherwise mixed. No time-zone conversion.",
    "cases": [
      {
        "id": "lab56-zone-pin",
        "condition": "First bullish pin in up structure or bearish pin in down structure. Zone centred at latest already confirmed structural low/high, half-width ceil(0.125 * mean(TR of 14 bars through pivot confirmation)), frozen at confirmation. Pivot confirmation at least two observed bars before assessment. Prior C must lie beyond zone on trend side; current range intersects zone and C closes beyond trend-side edge. No prior C breaches opposite edge since zone establishment. This is a retest of a pre-existing swing zone; does not assert HTF confluence or a role swap.",
        "invalidation": "Any of next 12 closed candles closes strictly beyond opposite zone edge. If none, report only no such close in this fixed window."
      },
      {
        "id": "lab56-inside",
        "condition": "First strict inside bar: H_i<H_m, L_i>L_m, both ranges>0. Select without requiring any later breakout.",
        "reveal": "Next 12 observed closed bars. First C strictly outside mother range is analytical close breakout, if any; wick crossing alone is not the close rule. Report both directions if present; no fills."
      },
      {
        "id": "lab56-counter-pin",
        "condition": "First strict bullish pin in already confirmed down structure or strict bearish pin in up structure. This shape fails the article's with-trend variant. No claim of an entry signal.",
        "reveal": "Next 12 closed bars, annotate first close beyond pin H and first close below pin L, if any, without interpreting profit."
      },
      {
        "id": "lab56-outside",
        "condition": "First strict outside bar H_o>H_m and L_o<L_m, both ranges>0; directional label by C in upper/lower30% of outside range, else neutral. No outcome condition.",
        "reveal": "Next 12 closed bars. Directional interpretation invalidated by immediate next C on opposite side of range midpoint; exact equality is neither opposite side. No intrabar order inferred."
      }
    ],
    "visible_context": "Before includes 64 observed bars ending at assessment, expanded left if needed to include all referenced structure points, maximum128. Mobile additionally repeats latest16 visible bars at larger scale. After adds exactly12 subsequent observed bars; x axis is ordered observations with dates, not a claim of contiguous trading hours.",
    "before_isolation": "Before selection, y scale, candles, labels and captions use only bars at or before assessment. Full/mobile before assets link only to before. Future rendered independently inside initially closed details.",
    "availability": "Original MT5 bar-start labels retained. Recognition requires interval end and receipt of complete OHLC; nominal end=start+1h is an earliest bound, not proven historical delivery time. Weekend/missing-bar gaps shown. Source closed historical export does not establish received_at, Ask path, execution or return."
  },
  "rules_sha256": "94570cdb4313fbdab5b8f24aeccf03f4f9bcbc08045b978173b6684ce981ff39",
  "source_provenance_sha256": "a714060ac85cb9ded6c80b70ff6e9d76095c17ccbf9c97a79e5b748619793287",
  "source_provenance": {
    "source": "ICMarketsSC-Demo / local MetaTrader 5 Python API",
    "account_mode": "DEMO",
    "package_version": "5.0.6231",
    "fetched_at_utc": "2026-10-20T22:37:48.989806+00:00",
    "forming_bar_excluded": true,
    "start_position": 1,
    "time_basis": "Original MT5 epoch retained; ISO encoding uses UTC conversion, but the broker's wall-clock offset is not independently verified. Chart labels must say original MT5 time, not UTC/local time.",
    "selection_basis": "Historical examples for geometry/teaching only, not an estimate of strategy performance.",
    "allowed_mt5_calls": [
      "account_info",
      "copy_rates_from_pos",
      "initialize",
      "last_error",
      "shutdown",
      "symbols_get",
      "terminal_info"
    ],
    "trading_calls_made": 0,
    "settings_changed": false,
    "credentials_read_or_saved": false,
    "datasets": [
      {
        "symbol": "EURUSD",
        "timeframe": "M15",
        "file": "EURUSD-M15.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2026-08-24 09:30",
        "last_mt5_time": "2026-10-21 01:15",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Euro vs US Dollar",
        "sha256": "e3262e9418a0b4374744df297b087a93e27f2aed636487fc35a221d89b0e0b88"
      },
      {
        "symbol": "EURUSD",
        "timeframe": "H1",
        "file": "EURUSD-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-11-03 00:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Euro vs US Dollar",
        "sha256": "0f58687cc1be679669de57ce3c128d708a51e415f8a2a7c614909fae97a49fef"
      },
      {
        "symbol": "EURUSD",
        "timeframe": "H4",
        "file": "EURUSD-H4.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2024-03-26 08:00",
        "last_mt5_time": "2026-10-20 20:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Euro vs US Dollar",
        "sha256": "34ae38bf65f6268b4a0b9ea3c44eccc6d031dafd687448fdfd10bd31a8e848b1"
      },
      {
        "symbol": "EURUSD",
        "timeframe": "D1",
        "file": "EURUSD-D1.csv",
        "bars": 1500,
        "requested": 1500,
        "first_mt5_time": "2021-01-11 00:00",
        "last_mt5_time": "2026-10-20 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Euro vs US Dollar",
        "sha256": "0fdc92afdc0ae246a15b0c54b8bbc07f045b1a3bedf88307f908e85dca93bd80"
      },
      {
        "symbol": "GBPUSD",
        "timeframe": "M15",
        "file": "GBPUSD-M15.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2026-08-24 09:30",
        "last_mt5_time": "2026-10-21 01:15",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Great Britain Pound vs US Dollar",
        "sha256": "d2ee610bd79c9fb895a476327fbf758a1e28b49f921a6636f156bc551539e4a7"
      },
      {
        "symbol": "GBPUSD",
        "timeframe": "H1",
        "file": "GBPUSD-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-31 23:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Great Britain Pound vs US Dollar",
        "sha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9"
      },
      {
        "symbol": "GBPUSD",
        "timeframe": "H4",
        "file": "GBPUSD-H4.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2024-03-26 08:00",
        "last_mt5_time": "2026-10-20 20:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Great Britain Pound vs US Dollar",
        "sha256": "681a25d3bf5cb5a310b87d45c7f4e8123b72f5dc46d6647b556b9d0718e00ac8"
      },
      {
        "symbol": "GBPUSD",
        "timeframe": "D1",
        "file": "GBPUSD-D1.csv",
        "bars": 1500,
        "requested": 1500,
        "first_mt5_time": "2021-01-11 00:00",
        "last_mt5_time": "2026-10-20 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Great Britain Pound vs US Dollar",
        "sha256": "431694f76c174a732d51796dc5a617b48e8e22a934db9f0757c98a812d72b807"
      },
      {
        "symbol": "USDJPY",
        "timeframe": "M15",
        "file": "USDJPY-M15.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2026-08-24 09:15",
        "last_mt5_time": "2026-10-21 01:15",
        "digits": 3,
        "point": 0.001,
        "chart_mode": 0,
        "description": "US Dollar vs Japanese Yen",
        "sha256": "a7245aed852672b196c8d36a4ddf950eef949cb30485d976cc1228a7d6b0a8f2"
      },
      {
        "symbol": "USDJPY",
        "timeframe": "H1",
        "file": "USDJPY-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-31 23:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 3,
        "point": 0.001,
        "chart_mode": 0,
        "description": "US Dollar vs Japanese Yen",
        "sha256": "143ed1ae9c90c1da7890bbf858911822e8590999180ff4a765689a4718d3530d"
      },
      {
        "symbol": "USDJPY",
        "timeframe": "H4",
        "file": "USDJPY-H4.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2024-03-26 08:00",
        "last_mt5_time": "2026-10-20 20:00",
        "digits": 3,
        "point": 0.001,
        "chart_mode": 0,
        "description": "US Dollar vs Japanese Yen",
        "sha256": "3399fa480a6389247ad55074345a82e37f2cc425944d7dadbbefc4a8d4bf8d3c"
      },
      {
        "symbol": "USDJPY",
        "timeframe": "D1",
        "file": "USDJPY-D1.csv",
        "bars": 1500,
        "requested": 1500,
        "first_mt5_time": "2021-01-11 00:00",
        "last_mt5_time": "2026-10-20 00:00",
        "digits": 3,
        "point": 0.001,
        "chart_mode": 0,
        "description": "US Dollar vs Japanese Yen",
        "sha256": "bbdc6f547d57d68d86e8960e4e61e2bf9d32a30eafd26942e19a7d2a5fa8412d"
      },
      {
        "symbol": "AUDUSD",
        "timeframe": "M15",
        "file": "AUDUSD-M15.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2026-08-24 09:30",
        "last_mt5_time": "2026-10-21 01:15",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Australian Dollar vs US Dollar",
        "sha256": "abe5a017a440f3f93b77b1d3c92e0dcc97215e53e3c457d9f4d80e8732707e19"
      },
      {
        "symbol": "AUDUSD",
        "timeframe": "H1",
        "file": "AUDUSD-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-11-03 00:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Australian Dollar vs US Dollar",
        "sha256": "81c4205e259524bd25d1abb5d3724949dcaaf65b6af5cc94f41fe9c9e8af1d5c"
      },
      {
        "symbol": "AUDUSD",
        "timeframe": "H4",
        "file": "AUDUSD-H4.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2024-03-26 08:00",
        "last_mt5_time": "2026-10-20 20:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Australian Dollar vs US Dollar",
        "sha256": "fd59bff4c77a8ccd87a5cfb0b61768b49b4742f50a23c93c9b54357185f68457"
      },
      {
        "symbol": "AUDUSD",
        "timeframe": "D1",
        "file": "AUDUSD-D1.csv",
        "bars": 1500,
        "requested": 1500,
        "first_mt5_time": "2021-01-11 00:00",
        "last_mt5_time": "2026-10-20 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Australian Dollar vs US Dollar",
        "sha256": "0819ad769016739c645203364cbac9b2227cabeaa7d2a9361eebcab9b55e30a1"
      },
      {
        "symbol": "USDCHF",
        "timeframe": "M15",
        "file": "USDCHF-M15.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2026-08-24 09:30",
        "last_mt5_time": "2026-10-21 01:15",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "US Dollar vs Swiss Franc",
        "sha256": "051322e5be788391fdee8db76b4748851b037fd1db233ca1bdfc3a6b730c3400"
      },
      {
        "symbol": "USDCHF",
        "timeframe": "H1",
        "file": "USDCHF-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-31 23:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "US Dollar vs Swiss Franc",
        "sha256": "2d0f78eed6bb7cc26fa4dad105351e7f58226bad2928be422f2070a2a5e33ca0"
      },
      {
        "symbol": "USDCHF",
        "timeframe": "H4",
        "file": "USDCHF-H4.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2024-03-26 08:00",
        "last_mt5_time": "2026-10-20 20:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "US Dollar vs Swiss Franc",
        "sha256": "a6499e9e4d5ae3027aa907fe968ae4fe4a26d46db63a403b03f17417fd411f63"
      },
      {
        "symbol": "USDCHF",
        "timeframe": "D1",
        "file": "USDCHF-D1.csv",
        "bars": 1500,
        "requested": 1500,
        "first_mt5_time": "2021-01-11 00:00",
        "last_mt5_time": "2026-10-20 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "US Dollar vs Swiss Franc",
        "sha256": "a198a8044d88526ec0484dc69c714e1d3d20fd41e008ccb72bff06df6570e293"
      },
      {
        "symbol": "USDCAD",
        "timeframe": "M15",
        "file": "USDCAD-M15.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2026-08-24 09:30",
        "last_mt5_time": "2026-10-21 01:15",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "US Dollar vs Canadian Dollar",
        "sha256": "c5a3890c211f8cad921e5763d6c9b2cce58d0e43f4618265bff65a8a5055063b"
      },
      {
        "symbol": "USDCAD",
        "timeframe": "H1",
        "file": "USDCAD-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-31 23:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "US Dollar vs Canadian Dollar",
        "sha256": "d4ff86f380fe8cdfdcc75ac456be46f082dd4af86a1b2e770c91e160c03c387a"
      },
      {
        "symbol": "USDCAD",
        "timeframe": "H4",
        "file": "USDCAD-H4.csv",
        "bars": 2802,
        "requested": 4000,
        "first_mt5_time": "2025-01-02 00:00",
        "last_mt5_time": "2026-10-20 20:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "US Dollar vs Canadian Dollar",
        "sha256": "01afb3090417036435a5123b887804e84a6a16813828eaa465b2da09fa339a7b"
      },
      {
        "symbol": "USDCAD",
        "timeframe": "D1",
        "file": "USDCAD-D1.csv",
        "bars": 467,
        "requested": 1500,
        "first_mt5_time": "2025-01-02 00:00",
        "last_mt5_time": "2026-10-20 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "US Dollar vs Canadian Dollar",
        "sha256": "0f25e1489b3d469a44ad3436db83135b0d3d4831e1cc1cd3ef0ed6aee13d9abf"
      },
      {
        "symbol": "XAUUSD",
        "timeframe": "M15",
        "file": "XAUUSD-M15.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2026-08-20 11:00",
        "last_mt5_time": "2026-10-21 01:15",
        "digits": 2,
        "point": 0.01,
        "chart_mode": 0,
        "description": "Gold vs US Dollar",
        "sha256": "a33a8526d0d09197f4697d6d5375989f5d8d979f0c8b4f95a6503d6388abb64f"
      },
      {
        "symbol": "XAUUSD",
        "timeframe": "H1",
        "file": "XAUUSD-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-15 03:00",
        "last_mt5_time": "2026-10-20 23:00",
        "digits": 2,
        "point": 0.01,
        "chart_mode": 0,
        "description": "Gold vs US Dollar",
        "sha256": "ef128afcbf3ca77ab679944f59b181bd5ce04b538f57aab62adccd96bef2cafc"
      },
      {
        "symbol": "XAUUSD",
        "timeframe": "H4",
        "file": "XAUUSD-H4.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2024-03-20 20:00",
        "last_mt5_time": "2026-10-20 20:00",
        "digits": 2,
        "point": 0.01,
        "chart_mode": 0,
        "description": "Gold vs US Dollar",
        "sha256": "c9ecd9f083996d0100836cc6f7daa06a403480fb8281703f4138c6034993996e"
      },
      {
        "symbol": "XAUUSD",
        "timeframe": "D1",
        "file": "XAUUSD-D1.csv",
        "bars": 1500,
        "requested": 1500,
        "first_mt5_time": "2020-12-29 00:00",
        "last_mt5_time": "2026-10-20 00:00",
        "digits": 2,
        "point": 0.01,
        "chart_mode": 0,
        "description": "Gold vs US Dollar",
        "sha256": "be3568292aed89f38c27348a1665ac8b7da10268bfd0eaeae4d437d896badf15"
      },
      {
        "symbol": "USTEC",
        "timeframe": "M15",
        "file": "USTEC-M15.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2026-08-20 09:30",
        "last_mt5_time": "2026-10-21 01:15",
        "digits": 2,
        "point": 0.01,
        "chart_mode": 0,
        "description": "US Tech 100 Index",
        "sha256": "42e99a2f75fa59e56e9963d6a773eb59c92bea2c0521d3c6d4ca3b7a2d1f2a30"
      },
      {
        "symbol": "USTEC",
        "timeframe": "H1",
        "file": "USTEC-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-15 01:00",
        "last_mt5_time": "2026-10-20 23:00",
        "digits": 2,
        "point": 0.01,
        "chart_mode": 0,
        "description": "US Tech 100 Index",
        "sha256": "9b04d86d2bef96b4498ef7d636db4d8a436b7114d5bf2da04c8800fe08855dbf"
      },
      {
        "symbol": "USTEC",
        "timeframe": "H4",
        "file": "USTEC-H4.csv",
        "bars": 4000,
        "requested": 4000,
        "first_mt5_time": "2024-03-19 04:00",
        "last_mt5_time": "2026-10-20 20:00",
        "digits": 2,
        "point": 0.01,
        "chart_mode": 0,
        "description": "US Tech 100 Index",
        "sha256": "07d092fad25c6c0ce654d6e66e512fce47505e54b57dc577eeb5b42dd6ebead8"
      },
      {
        "symbol": "USTEC",
        "timeframe": "D1",
        "file": "USTEC-D1.csv",
        "bars": 1500,
        "requested": 1500,
        "first_mt5_time": "2020-12-31 00:00",
        "last_mt5_time": "2026-10-20 00:00",
        "digits": 2,
        "point": 0.01,
        "chart_mode": 0,
        "description": "US Tech 100 Index",
        "sha256": "b8bd707bb9b33a29c94af8108265f8a06c6f0bca524919d32b1d7f70b07aef87"
      }
    ],
    "skipped": [],
    "terminal_build": 6230,
    "terminal_trade_allowed": false,
    "python_trading_disabled": false,
    "completed_at_utc": "2026-10-20T22:38:27.731767+00:00",
    "total_bars": 121769
  },
  "source_verification": [
    {
      "file": "EURUSD-M15.csv",
      "sha256": "e3262e9418a0b4374744df297b087a93e27f2aed636487fc35a221d89b0e0b88",
      "verified": true
    },
    {
      "file": "EURUSD-H1.csv",
      "sha256": "0f58687cc1be679669de57ce3c128d708a51e415f8a2a7c614909fae97a49fef",
      "verified": true
    },
    {
      "file": "EURUSD-H4.csv",
      "sha256": "34ae38bf65f6268b4a0b9ea3c44eccc6d031dafd687448fdfd10bd31a8e848b1",
      "verified": true
    },
    {
      "file": "EURUSD-D1.csv",
      "sha256": "0fdc92afdc0ae246a15b0c54b8bbc07f045b1a3bedf88307f908e85dca93bd80",
      "verified": true
    },
    {
      "file": "GBPUSD-M15.csv",
      "sha256": "d2ee610bd79c9fb895a476327fbf758a1e28b49f921a6636f156bc551539e4a7",
      "verified": true
    },
    {
      "file": "GBPUSD-H1.csv",
      "sha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9",
      "verified": true
    },
    {
      "file": "GBPUSD-H4.csv",
      "sha256": "681a25d3bf5cb5a310b87d45c7f4e8123b72f5dc46d6647b556b9d0718e00ac8",
      "verified": true
    },
    {
      "file": "GBPUSD-D1.csv",
      "sha256": "431694f76c174a732d51796dc5a617b48e8e22a934db9f0757c98a812d72b807",
      "verified": true
    },
    {
      "file": "USDJPY-M15.csv",
      "sha256": "a7245aed852672b196c8d36a4ddf950eef949cb30485d976cc1228a7d6b0a8f2",
      "verified": true
    },
    {
      "file": "USDJPY-H1.csv",
      "sha256": "143ed1ae9c90c1da7890bbf858911822e8590999180ff4a765689a4718d3530d",
      "verified": true
    },
    {
      "file": "USDJPY-H4.csv",
      "sha256": "3399fa480a6389247ad55074345a82e37f2cc425944d7dadbbefc4a8d4bf8d3c",
      "verified": true
    },
    {
      "file": "USDJPY-D1.csv",
      "sha256": "bbdc6f547d57d68d86e8960e4e61e2bf9d32a30eafd26942e19a7d2a5fa8412d",
      "verified": true
    },
    {
      "file": "AUDUSD-M15.csv",
      "sha256": "abe5a017a440f3f93b77b1d3c92e0dcc97215e53e3c457d9f4d80e8732707e19",
      "verified": true
    },
    {
      "file": "AUDUSD-H1.csv",
      "sha256": "81c4205e259524bd25d1abb5d3724949dcaaf65b6af5cc94f41fe9c9e8af1d5c",
      "verified": true
    },
    {
      "file": "AUDUSD-H4.csv",
      "sha256": "fd59bff4c77a8ccd87a5cfb0b61768b49b4742f50a23c93c9b54357185f68457",
      "verified": true
    },
    {
      "file": "AUDUSD-D1.csv",
      "sha256": "0819ad769016739c645203364cbac9b2227cabeaa7d2a9361eebcab9b55e30a1",
      "verified": true
    },
    {
      "file": "USDCHF-M15.csv",
      "sha256": "051322e5be788391fdee8db76b4748851b037fd1db233ca1bdfc3a6b730c3400",
      "verified": true
    },
    {
      "file": "USDCHF-H1.csv",
      "sha256": "2d0f78eed6bb7cc26fa4dad105351e7f58226bad2928be422f2070a2a5e33ca0",
      "verified": true
    },
    {
      "file": "USDCHF-H4.csv",
      "sha256": "a6499e9e4d5ae3027aa907fe968ae4fe4a26d46db63a403b03f17417fd411f63",
      "verified": true
    },
    {
      "file": "USDCHF-D1.csv",
      "sha256": "a198a8044d88526ec0484dc69c714e1d3d20fd41e008ccb72bff06df6570e293",
      "verified": true
    },
    {
      "file": "USDCAD-M15.csv",
      "sha256": "c5a3890c211f8cad921e5763d6c9b2cce58d0e43f4618265bff65a8a5055063b",
      "verified": true
    },
    {
      "file": "USDCAD-H1.csv",
      "sha256": "d4ff86f380fe8cdfdcc75ac456be46f082dd4af86a1b2e770c91e160c03c387a",
      "verified": true
    },
    {
      "file": "USDCAD-H4.csv",
      "sha256": "01afb3090417036435a5123b887804e84a6a16813828eaa465b2da09fa339a7b",
      "verified": true
    },
    {
      "file": "USDCAD-D1.csv",
      "sha256": "0f25e1489b3d469a44ad3436db83135b0d3d4831e1cc1cd3ef0ed6aee13d9abf",
      "verified": true
    },
    {
      "file": "XAUUSD-M15.csv",
      "sha256": "a33a8526d0d09197f4697d6d5375989f5d8d979f0c8b4f95a6503d6388abb64f",
      "verified": true
    },
    {
      "file": "XAUUSD-H1.csv",
      "sha256": "ef128afcbf3ca77ab679944f59b181bd5ce04b538f57aab62adccd96bef2cafc",
      "verified": true
    },
    {
      "file": "XAUUSD-H4.csv",
      "sha256": "c9ecd9f083996d0100836cc6f7daa06a403480fb8281703f4138c6034993996e",
      "verified": true
    },
    {
      "file": "XAUUSD-D1.csv",
      "sha256": "be3568292aed89f38c27348a1665ac8b7da10268bfd0eaeae4d437d896badf15",
      "verified": true
    },
    {
      "file": "USTEC-M15.csv",
      "sha256": "42e99a2f75fa59e56e9963d6a773eb59c92bea2c0521d3c6d4ca3b7a2d1f2a30",
      "verified": true
    },
    {
      "file": "USTEC-H1.csv",
      "sha256": "9b04d86d2bef96b4498ef7d636db4d8a436b7114d5bf2da04c8800fe08855dbf",
      "verified": true
    },
    {
      "file": "USTEC-H4.csv",
      "sha256": "07d092fad25c6c0ce654d6e66e512fce47505e54b57dc577eeb5b42dd6ebead8",
      "verified": true
    },
    {
      "file": "USTEC-D1.csv",
      "sha256": "b8bd707bb9b33a29c94af8108265f8a06c6f0bca524919d32b1d7f70b07aef87",
      "verified": true
    }
  ],
  "cases": [
    {
      "id": "lab56-zone-pin",
      "source": {
        "symbol": "GBPUSD",
        "timeframe": "H1",
        "file": "GBPUSD-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-31 23:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Great Britain Pound vs US Dollar",
        "sha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9",
        "actualSha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9"
      },
      "assessment_index": 5140,
      "assessment_bar": "2026-09-01 05:00",
      "assessment_earliest": "2026-09-01 06:00",
      "tested_before_first_match": 15,
      "context_start": 5077,
      "before_range": [
        5077,
        5140
      ],
      "after_range": [
        5077,
        5152
      ],
      "detail_before": [
        5125,
        5140
      ],
      "detail_after": [
        5125,
        5152
      ],
      "ohlc_points": {
        "O": 135457,
        "H": 135462,
        "L": 135414,
        "C": 135460
      },
      "pin": {
        "R": 48,
        "B": 3,
        "upper": 2,
        "lower": 43,
        "dir": "up"
      },
      "structure": {
        "dir": "up",
        "highs": [
          5122,
          5128
        ],
        "lows": [
          5121,
          5135
        ]
      },
      "zone": {
        "pivot": 5135,
        "confirmed": 5137,
        "centre": 135421,
        "lower": 135409,
        "upper": 135433,
        "half": 12,
        "meanTR14": 95.35714285714286,
        "established_at_earliest": "2026-09-01 03:00"
      },
      "result": {
        "invalidated": true,
        "first_invalidation": {
          "index": 5145,
          "time": "2026-09-01 10:00",
          "close": 135363,
          "known_no_earlier_than": "2026-09-01 11:00"
        }
      },
      "gaps": [
        {
          "after_index": 5110,
          "before_index": 5111,
          "elapsed_seconds": 176400
        }
      ]
    },
    {
      "id": "lab56-inside",
      "source": {
        "symbol": "USDJPY",
        "timeframe": "H1",
        "file": "USDJPY-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-31 23:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 3,
        "point": 0.001,
        "chart_mode": 0,
        "description": "US Dollar vs Japanese Yen",
        "sha256": "143ed1ae9c90c1da7890bbf858911822e8590999180ff4a765689a4718d3530d",
        "actualSha256": "143ed1ae9c90c1da7890bbf858911822e8590999180ff4a765689a4718d3530d"
      },
      "assessment_index": 5140,
      "assessment_bar": "2026-09-01 05:00",
      "assessment_earliest": "2026-09-01 06:00",
      "tested_before_first_match": 10,
      "context_start": 5077,
      "before_range": [
        5077,
        5140
      ],
      "after_range": [
        5077,
        5152
      ],
      "detail_before": [
        5125,
        5140
      ],
      "detail_after": [
        5125,
        5152
      ],
      "ohlc_points": {
        "O": 159753,
        "H": 159844,
        "L": 159753,
        "C": 159787
      },
      "mother": 5139,
      "result": {
        "first_close_break": {
          "index": 5142,
          "time": "2026-09-01 07:00",
          "close": 159871,
          "dir": "up",
          "known_no_earlier_than": "2026-09-01 08:00"
        }
      },
      "gaps": [
        {
          "after_index": 5110,
          "before_index": 5111,
          "elapsed_seconds": 176400
        }
      ]
    },
    {
      "id": "lab56-counter-pin",
      "source": {
        "symbol": "EURUSD",
        "timeframe": "H1",
        "file": "EURUSD-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-11-03 00:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Euro vs US Dollar",
        "sha256": "0f58687cc1be679669de57ce3c128d708a51e415f8a2a7c614909fae97a49fef",
        "actualSha256": "0f58687cc1be679669de57ce3c128d708a51e415f8a2a7c614909fae97a49fef"
      },
      "assessment_index": 5172,
      "assessment_bar": "2026-09-02 13:00",
      "assessment_earliest": "2026-09-02 14:00",
      "tested_before_first_match": 37,
      "context_start": 5109,
      "before_range": [
        5109,
        5172
      ],
      "after_range": [
        5109,
        5184
      ],
      "detail_before": [
        5157,
        5172
      ],
      "detail_after": [
        5157,
        5184
      ],
      "ohlc_points": {
        "O": 115716,
        "H": 115727,
        "L": 115670,
        "C": 115724
      },
      "pin": {
        "R": 57,
        "B": 8,
        "upper": 3,
        "lower": 46,
        "dir": "up"
      },
      "structure": {
        "dir": "down",
        "highs": [
          5160,
          5168
        ],
        "lows": [
          5159,
          5169
        ]
      },
      "result": {
        "first_close_above_pin": 5173,
        "first_close_below_pin": null
      },
      "gaps": [
        {
          "after_index": 5110,
          "before_index": 5111,
          "elapsed_seconds": 176400
        }
      ]
    },
    {
      "id": "lab56-outside",
      "source": {
        "symbol": "GBPUSD",
        "timeframe": "H1",
        "file": "GBPUSD-H1.csv",
        "bars": 6000,
        "requested": 6000,
        "first_mt5_time": "2025-10-31 23:00",
        "last_mt5_time": "2026-10-21 00:00",
        "digits": 5,
        "point": 0.00001,
        "chart_mode": 0,
        "description": "Great Britain Pound vs US Dollar",
        "sha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9",
        "actualSha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9"
      },
      "assessment_index": 5192,
      "assessment_bar": "2026-09-03 09:00",
      "assessment_earliest": "2026-09-03 10:00",
      "tested_before_first_match": 8,
      "context_start": 5129,
      "before_range": [
        5129,
        5192
      ],
      "after_range": [
        5129,
        5204
      ],
      "detail_before": [
        5177,
        5192
      ],
      "detail_after": [
        5177,
        5204
      ],
      "ohlc_points": {
        "O": 134916,
        "H": 134988,
        "L": 134835,
        "C": 134919
      },
      "mother": 5191,
      "dir": "neutral",
      "midpoint": 134911.5,
      "result": {
        "next_close": 135029,
        "next_time": "2026-09-03 10:00",
        "next_earliest": "2026-09-03 11:00",
        "directional_invalidated": null
      },
      "gaps": []
    }
  ],
  "asset_mapping": [
    {
      "locale": "pl",
      "case_id": "lab56-zone-pin",
      "frame": "before",
      "mobile": false,
      "file": "media/lab56/lab56-zone-pin-before.svg",
      "range": [
        5077,
        5140
      ],
      "sha256": "e894e93dc70c150cc8b6131371adc9e72c9e462d4d133dac442befff88fd1a75"
    },
    {
      "locale": "pl",
      "case_id": "lab56-zone-pin",
      "frame": "before",
      "mobile": true,
      "file": "media/lab56/lab56-zone-pin-before-mobile.svg",
      "range": [
        5077,
        5140
      ],
      "sha256": "4d33f8a76cd667d7b726a6f733b09db3423b04a2f6a63f0ebd841971c2f7db4b"
    },
    {
      "locale": "pl",
      "case_id": "lab56-zone-pin",
      "frame": "after",
      "mobile": false,
      "file": "media/lab56/lab56-zone-pin-after.svg",
      "range": [
        5077,
        5152
      ],
      "sha256": "82e5090a80cd1eca82fb9a5ceb6c6e412a9dc7d87dc24dd2eb5384c36df44c18"
    },
    {
      "locale": "pl",
      "case_id": "lab56-zone-pin",
      "frame": "after",
      "mobile": true,
      "file": "media/lab56/lab56-zone-pin-after-mobile.svg",
      "range": [
        5077,
        5152
      ],
      "sha256": "cd3ccb757da59708946656d5ef4f99757ea082c5abdff3b7d5ea8f9c3688eb75"
    },
    {
      "locale": "pl",
      "case_id": "lab56-inside",
      "frame": "before",
      "mobile": false,
      "file": "media/lab56/lab56-inside-before.svg",
      "range": [
        5077,
        5140
      ],
      "sha256": "6c613a6318c1307117a066aa42f3edca7c289bab7014e49a8f6aca20b4b31bcc"
    },
    {
      "locale": "pl",
      "case_id": "lab56-inside",
      "frame": "before",
      "mobile": true,
      "file": "media/lab56/lab56-inside-before-mobile.svg",
      "range": [
        5077,
        5140
      ],
      "sha256": "09a30c436d5e93d7a5959ba834e1dd464a89595170faeda3a937e967d452528c"
    },
    {
      "locale": "pl",
      "case_id": "lab56-inside",
      "frame": "after",
      "mobile": false,
      "file": "media/lab56/lab56-inside-after.svg",
      "range": [
        5077,
        5152
      ],
      "sha256": "97b8c5252740998e56a961c9ac15f5f57407b5c6cb87ad15537ea54702c128db"
    },
    {
      "locale": "pl",
      "case_id": "lab56-inside",
      "frame": "after",
      "mobile": true,
      "file": "media/lab56/lab56-inside-after-mobile.svg",
      "range": [
        5077,
        5152
      ],
      "sha256": "727ef8537b69527bd0b5f8da234dfd87f47afd75f9b59ba2fc7a37cff9109334"
    },
    {
      "locale": "pl",
      "case_id": "lab56-counter-pin",
      "frame": "before",
      "mobile": false,
      "file": "media/lab56/lab56-counter-pin-before.svg",
      "range": [
        5109,
        5172
      ],
      "sha256": "937347752dc0048d82fd36b176b2cacd86ad473b3b07aeee0743c5fd478eb709"
    },
    {
      "locale": "pl",
      "case_id": "lab56-counter-pin",
      "frame": "before",
      "mobile": true,
      "file": "media/lab56/lab56-counter-pin-before-mobile.svg",
      "range": [
        5109,
        5172
      ],
      "sha256": "b5317c978e407441a345f0a467d5ab7219d2e883242b55fd5f069e20ee36d188"
    },
    {
      "locale": "pl",
      "case_id": "lab56-counter-pin",
      "frame": "after",
      "mobile": false,
      "file": "media/lab56/lab56-counter-pin-after.svg",
      "range": [
        5109,
        5184
      ],
      "sha256": "f930f1c4af2c6e86488370f512f25e4b04fc9508ced46745c60a9e8bce2b7851"
    },
    {
      "locale": "pl",
      "case_id": "lab56-counter-pin",
      "frame": "after",
      "mobile": true,
      "file": "media/lab56/lab56-counter-pin-after-mobile.svg",
      "range": [
        5109,
        5184
      ],
      "sha256": "6ce8e3cbb27902aad245c6acf1df92892f0f76eeb64866594e8c50e829bf06e0"
    },
    {
      "locale": "pl",
      "case_id": "lab56-outside",
      "frame": "before",
      "mobile": false,
      "file": "media/lab56/lab56-outside-before.svg",
      "range": [
        5129,
        5192
      ],
      "sha256": "a5d7502bf119c7d1fcfc4bc20564b824f14e12b3ed06fb875c75b9404704f405"
    },
    {
      "locale": "pl",
      "case_id": "lab56-outside",
      "frame": "before",
      "mobile": true,
      "file": "media/lab56/lab56-outside-before-mobile.svg",
      "range": [
        5129,
        5192
      ],
      "sha256": "35d1b934e70c431c1e7463a8d72e1b35dc80c8313e111326e6321a9d0686ea70"
    },
    {
      "locale": "pl",
      "case_id": "lab56-outside",
      "frame": "after",
      "mobile": false,
      "file": "media/lab56/lab56-outside-after.svg",
      "range": [
        5129,
        5204
      ],
      "sha256": "d987e965ad08c0c861b128fe0541e28e4979b4ad0b41790b7ee404bb4986ec14"
    },
    {
      "locale": "pl",
      "case_id": "lab56-outside",
      "frame": "after",
      "mobile": true,
      "file": "media/lab56/lab56-outside-after-mobile.svg",
      "range": [
        5129,
        5204
      ],
      "sha256": "036ef151b3339ec7343c648ee685eb3c8d38530e84710b6040c0ea4a8433a21d"
    },
    {
      "locale": "en",
      "case_id": "lab56-zone-pin",
      "frame": "before",
      "mobile": false,
      "file": "media/lab56/lab56-zone-pin-before.svg",
      "range": [
        5077,
        5140
      ],
      "sha256": "625915aa533ea34ddb2afb6f806362dad1e9d31b3a667501f94e2ef8004d6507"
    },
    {
      "locale": "en",
      "case_id": "lab56-zone-pin",
      "frame": "before",
      "mobile": true,
      "file": "media/lab56/lab56-zone-pin-before-mobile.svg",
      "range": [
        5077,
        5140
      ],
      "sha256": "c2a5ef23e591e0dcc1837a90c8a016dfb2c48f92679005717ecc5debe97afab0"
    },
    {
      "locale": "en",
      "case_id": "lab56-zone-pin",
      "frame": "after",
      "mobile": false,
      "file": "media/lab56/lab56-zone-pin-after.svg",
      "range": [
        5077,
        5152
      ],
      "sha256": "e5631f4d3d16a9099196b7195a8cc1354c9ac25d949c3b26fa868b0d7c3fa7a7"
    },
    {
      "locale": "en",
      "case_id": "lab56-zone-pin",
      "frame": "after",
      "mobile": true,
      "file": "media/lab56/lab56-zone-pin-after-mobile.svg",
      "range": [
        5077,
        5152
      ],
      "sha256": "28d038a098150d5bb40a2ce889ae7a5655a8f5c7efadd31e9afa3615092483d1"
    },
    {
      "locale": "en",
      "case_id": "lab56-inside",
      "frame": "before",
      "mobile": false,
      "file": "media/lab56/lab56-inside-before.svg",
      "range": [
        5077,
        5140
      ],
      "sha256": "047d1d9bb056e4bf5ce7b48d46fbc833a5c7654546af09d4c8a49cf2e28b53b3"
    },
    {
      "locale": "en",
      "case_id": "lab56-inside",
      "frame": "before",
      "mobile": true,
      "file": "media/lab56/lab56-inside-before-mobile.svg",
      "range": [
        5077,
        5140
      ],
      "sha256": "15450f75437beeb7febccb017fa0a93b667ea0a81f3b893aa24062643061556f"
    },
    {
      "locale": "en",
      "case_id": "lab56-inside",
      "frame": "after",
      "mobile": false,
      "file": "media/lab56/lab56-inside-after.svg",
      "range": [
        5077,
        5152
      ],
      "sha256": "0d15b05c5ceae8781ab808fe05c414fe21dd4608d3635e9a41f960b2049f69a3"
    },
    {
      "locale": "en",
      "case_id": "lab56-inside",
      "frame": "after",
      "mobile": true,
      "file": "media/lab56/lab56-inside-after-mobile.svg",
      "range": [
        5077,
        5152
      ],
      "sha256": "8853deb3fd3bfdf1511d8ed0c0a0b471aa975fe2285c874ddb0727cf9ad8cf34"
    },
    {
      "locale": "en",
      "case_id": "lab56-counter-pin",
      "frame": "before",
      "mobile": false,
      "file": "media/lab56/lab56-counter-pin-before.svg",
      "range": [
        5109,
        5172
      ],
      "sha256": "59f5b10423e0911ffff55f0f8c00b2050d6ea84e78991596fc1f98a0969981ff"
    },
    {
      "locale": "en",
      "case_id": "lab56-counter-pin",
      "frame": "before",
      "mobile": true,
      "file": "media/lab56/lab56-counter-pin-before-mobile.svg",
      "range": [
        5109,
        5172
      ],
      "sha256": "c1816d929b2be2dc9da0a8dc59b078be3366e5410032113b20f749754997608c"
    },
    {
      "locale": "en",
      "case_id": "lab56-counter-pin",
      "frame": "after",
      "mobile": false,
      "file": "media/lab56/lab56-counter-pin-after.svg",
      "range": [
        5109,
        5184
      ],
      "sha256": "18bbeb1bb06914576854acfd956a9ba1a5f7b7d9081930add825d0e0a4bb1e2c"
    },
    {
      "locale": "en",
      "case_id": "lab56-counter-pin",
      "frame": "after",
      "mobile": true,
      "file": "media/lab56/lab56-counter-pin-after-mobile.svg",
      "range": [
        5109,
        5184
      ],
      "sha256": "cf3ff192467fcaeeef274fff2c1c6cbbae7b20587f2ff7a78d4eb957f2997a1d"
    },
    {
      "locale": "en",
      "case_id": "lab56-outside",
      "frame": "before",
      "mobile": false,
      "file": "media/lab56/lab56-outside-before.svg",
      "range": [
        5129,
        5192
      ],
      "sha256": "030588c0a87c6ceb7712fe984de077bf5448b2b93b2b6b482ab85ea108d75f6c"
    },
    {
      "locale": "en",
      "case_id": "lab56-outside",
      "frame": "before",
      "mobile": true,
      "file": "media/lab56/lab56-outside-before-mobile.svg",
      "range": [
        5129,
        5192
      ],
      "sha256": "7904872ea4e07c37ebaa9b4e6328a373bf9bad813795f064408e0c117bf576d5"
    },
    {
      "locale": "en",
      "case_id": "lab56-outside",
      "frame": "after",
      "mobile": false,
      "file": "media/lab56/lab56-outside-after.svg",
      "range": [
        5129,
        5204
      ],
      "sha256": "60df9dc381fe0e03d8f98da320039cc4f05a9aaa3dc29eb9d45dfd32aa217ea7"
    },
    {
      "locale": "en",
      "case_id": "lab56-outside",
      "frame": "after",
      "mobile": true,
      "file": "media/lab56/lab56-outside-after-mobile.svg",
      "range": [
        5129,
        5204
      ],
      "sha256": "3dbbb62ae8208785817ab03fe5bcd3e326ec05b7eabbe03e3fff1f64fdb4d4ba"
    }
  ]
}
