diff --git a/.gitignore b/.gitignore
index 9063c58..2d52df8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,7 @@ ENV/
# Simulation output
src/provider_simenv/data/output/
+
+# Web frontend (Issue #23)
+web/node_modules/
+web/dist/
diff --git a/src/provider_simenv/export_bundle.py b/src/provider_simenv/export_bundle.py
new file mode 100644
index 0000000..4e6d1a6
--- /dev/null
+++ b/src/provider_simenv/export_bundle.py
@@ -0,0 +1,206 @@
+"""
+Export a simulation run's CSV output into the JSON bundle the web view consumes.
+
+Reads the ``Result_Simulator_*.csv`` files a run writes to ``data/output`` and emits
+a single ``bundle.json`` matching the frontend ``Bundle`` contract
+(``web/src/data/types.ts``): nodes, edges, per-node time-series (``ticks``) and the
+environment time-series (``env``).
+
+Each recorded agent list holds many instances; a map node is the aggregate of its
+list per step — extensive quantities are summed, prices/utilisation are averaged,
+and ``active`` is true if any instance is active. Ports and sea-lanes are
+geographically real but produce no recorded rows, so they carry no ticks
+(``hasRecordedData: false``), exactly as the frontend expects.
+
+Geography is deliberately NOT emitted: placement is the frontend gazetteer's job
+(keyed by the PDL entity ids carried in ``entityIds``). This is the geolocatable
+projection of the model graph — sea crossings are drawn port-to-port rather than
+routed through the sea-lane agents, which have no single map location.
+
+Usage:
+ python -m provider_simenv.export_bundle [--scenario 1] [--input DIR] [--output FILE]
+"""
+from __future__ import annotations
+
+import argparse
+import json
+import logging
+import os
+from datetime import datetime, timezone
+
+import pandas as pd
+
+from .tick_writer import AGENT_TABLES
+
+logger = logging.getLogger(__name__)
+
+# Column aggregation rules for collapsing a list's instances into one node/step.
+SUM_COLS = {
+ "quantity_available", "bra_volume", "arg_volume", "usa_volume",
+ "feed_received", "livestock_output",
+}
+MEAN_COLS = {"unit_price", "storage_utilization"}
+BOOL_ANY_COLS = {"active"}
+
+# The geolocatable node overlay: display name, agent role, and the PDL entity ids
+# the gazetteer places by. Recorded nodes come from AGENT_TABLES; ports are added
+# here (they are real places but the DataCollector records no series for them).
+NODE_META: dict[str, dict] = {
+ "bra_farmers": {"label": "Brazil soy farms", "role": "producer", "entityIds": ["brazil_farms"]},
+ "arg_farmers": {"label": "Argentina soy farms","role": "producer", "entityIds": ["argentina_farms"]},
+ "usa_farmers": {"label": "US soy farms", "role": "producer", "entityIds": ["us_farms"]},
+ "wholesalers": {"label": "Wholesalers", "role": "wholesaler", "entityIds": []},
+ "feed_traders": {"label": "Feed traders", "role": "feed_trader", "entityIds": []},
+ "processors": {"label": "EU oil mills", "role": "processor", "entityIds": ["eu_oil_mills"]},
+ "feed_manufacturers": {"label": "Feed mills", "role": "feed_manufacturer", "entityIds": ["feed_mills"]},
+ "eu_farmers": {"label": "EU livestock farms", "role": "consumer", "entityIds": ["poultry_farms", "pig_farms", "dairy_farms"]},
+}
+
+PORT_META: dict[str, dict] = {
+ "transport_sa_santos": {"label": "Port of Santos", "role": "sa_santos", "entityIds": ["santos_port"]},
+ "transport_sa_paranagua": {"label": "Port of Paranaguá", "role": "sa_paranagua", "entityIds": ["paranagua_port"]},
+ "transport_eu_rtm": {"label": "Port of Rotterdam", "role": "eu_rtm", "entityIds": ["rotterdam_port"]},
+ "transport_eu_ham": {"label": "Port of Hamburg", "role": "eu_ham", "entityIds": ["hamburg_port"]},
+}
+
+# Geolocatable flow overlay (sea crossings collapsed port-to-port). Mirrors the
+# frontend fixture so the gazetteer/resolveScene contract is unchanged.
+EDGES: list[tuple[str, str, bool]] = [
+ ("bra_farmers", "wholesalers", False),
+ ("arg_farmers", "wholesalers", False),
+ ("usa_farmers", "wholesalers", False),
+ ("wholesalers", "transport_sa_santos", False),
+ ("wholesalers", "transport_sa_paranagua", False),
+ ("transport_sa_santos", "transport_eu_rtm", True),
+ ("transport_sa_paranagua", "transport_eu_ham", True),
+ ("arg_farmers", "transport_eu_rtm", True),
+ ("usa_farmers", "transport_eu_rtm", True),
+ ("transport_eu_rtm", "processors", False),
+ ("transport_eu_ham", "processors", False),
+ ("processors", "feed_manufacturers", False),
+ ("feed_manufacturers", "feed_traders", False),
+ ("feed_traders", "eu_farmers", False),
+]
+
+ENV_COLS = [
+ ("soja_price", "sojaPrice"),
+ ("feed_price", "feedPrice"),
+ ("shock_scale", "shockScale"),
+ ("drought_severity", "droughtSeverity"),
+ ("total_soja_supply", "totalSojaSupply"),
+ ("transport_utilisation", "transportUtilisation"),
+ ("current_step", "currentStep"),
+]
+
+HONESTY_NOTE = "Approximate geographic positions — not GIS accurate"
+
+
+def _aggregate(df: pd.DataFrame, props: list[str]) -> dict[int, dict]:
+ """Collapse a list's per-instance rows into one value dict per period."""
+ out: dict[int, dict] = {}
+ grouped = df.groupby("period")
+ for period, group in grouped:
+ values: dict = {}
+ for prop in props:
+ if prop not in group.columns:
+ continue
+ if prop in SUM_COLS:
+ values[prop] = round(float(group[prop].sum()), 4)
+ elif prop in MEAN_COLS:
+ values[prop] = round(float(group[prop].mean()), 4)
+ elif prop in BOOL_ANY_COLS:
+ values[prop] = bool(group[prop].astype(bool).any())
+ else:
+ values[prop] = round(float(group[prop].mean()), 4)
+ out[int(period)] = values
+ return out
+
+
+def build_bundle(input_dir: str, scenario: int, pdl: str) -> dict:
+ nodes: list[dict] = []
+ ticks: list[dict] = []
+
+ # Recorded nodes + their aggregated series.
+ for table, (node_id, props) in AGENT_TABLES.items():
+ meta = NODE_META.get(node_id)
+ if meta is None:
+ logger.warning("no geolocatable metadata for recorded node %r — skipping", node_id)
+ continue
+ nodes.append({
+ "id": node_id, "label": meta["label"], "role": meta["role"],
+ "entityIds": meta["entityIds"], "hasRecordedData": True,
+ })
+ path = os.path.join(input_dir, f"{table}.csv")
+ if not os.path.exists(path):
+ logger.warning("missing CSV for %s: %s", node_id, path)
+ continue
+ df = pd.read_csv(path)
+ df = df[df["id_scenario"] == scenario]
+ for period, values in _aggregate(df, props).items():
+ ticks.append({"period": period, "nodeId": node_id, "values": values})
+
+ # Ports — real places, no recorded series.
+ for node_id, meta in PORT_META.items():
+ nodes.append({
+ "id": node_id, "label": meta["label"], "role": meta["role"],
+ "entityIds": meta["entityIds"], "hasRecordedData": False,
+ })
+
+ edges = [
+ {"id": f"{s}->{t}", "source": s, "target": t, "isSeaCrossing": sea}
+ for (s, t, sea) in EDGES
+ ]
+
+ # Environment series.
+ env: list[dict] = []
+ env_path = os.path.join(input_dir, "Result_Simulator_Environment.csv")
+ edf = pd.read_csv(env_path)
+ edf = edf[edf["id_scenario"] == scenario].sort_values("period")
+ for _, row in edf.iterrows():
+ snapshot = {"period": int(row["period"])}
+ for csv_col, out_key in ENV_COLS:
+ snapshot[out_key] = round(float(row[csv_col]), 4)
+ env.append(snapshot)
+
+ return {
+ "meta": {
+ "pdl": os.path.basename(pdl) if pdl else "s1-soja.pdl.yaml",
+ "scenario": f"scenario_{scenario}",
+ "ticks": len(env),
+ "generatedAt": datetime.now(timezone.utc).replace(microsecond=0).isoformat(),
+ "honestyNote": HONESTY_NOTE,
+ },
+ "nodes": nodes,
+ "edges": edges,
+ "ticks": ticks,
+ "env": env,
+ }
+
+
+def main() -> None:
+ logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
+ here = os.path.dirname(os.path.abspath(__file__))
+ repo_root = os.path.abspath(os.path.join(here, "..", ".."))
+
+ parser = argparse.ArgumentParser(description="Export a run's CSVs to the web bundle.json")
+ parser.add_argument("--scenario", type=int, default=1,
+ help="id_scenario to export (0 = baseline, 1 = PDL shock). Default 1.")
+ parser.add_argument("--input", type=str, default=os.path.join(here, "data", "output"),
+ help="Directory holding Result_Simulator_*.csv.")
+ parser.add_argument("--output", type=str, default=os.path.join(repo_root, "web", "public", "bundle.json"),
+ help="Path to write bundle.json.")
+ parser.add_argument("--pdl", type=str, default="s1-soja.pdl.yaml", help="PDL name for metadata.")
+ args = parser.parse_args()
+
+ bundle = build_bundle(args.input, args.scenario, args.pdl)
+ os.makedirs(os.path.dirname(args.output), exist_ok=True)
+ with open(args.output, "w", encoding="utf-8") as fh:
+ json.dump(bundle, fh, ensure_ascii=False, separators=(",", ":"))
+
+ logger.info("wrote %s — %d nodes, %d edges, %d ticks, %d env steps (scenario %d)",
+ args.output, len(bundle["nodes"]), len(bundle["edges"]),
+ len(bundle["ticks"]), len(bundle["env"]), args.scenario)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/web/README.md b/web/README.md
new file mode 100644
index 0000000..efd2d22
--- /dev/null
+++ b/web/README.md
@@ -0,0 +1,170 @@
+# provider-simenv — web frontend (Issue #23)
+
+World map / globe view for the PROVIDER simulation environment. Renders the geolocatable
+projection of the soy supply chain — producers, ports, EU processing, livestock — and plays
+back an exported simulation run on a 3D globe.
+
+This directory is a standalone Vite application. It does **not** need the Python simulation
+to run: a pre-exported `public/bundle.json` is committed, so `npm install && npm run dev` is
+enough to see the view.
+
+---
+
+## Components
+
+| Component | Required? | Purpose |
+|---|---|---|
+| **Node.js + npm** | yes | Builds and serves the frontend. |
+| **`public/bundle.json`** | yes | The run data the view renders. A committed export is already in the repo. |
+| **Python simulation** (`src/provider_simenv`) | only to regenerate data | Produces the CSVs that `export_bundle.py` turns into a new `bundle.json`. |
+| **PostgreSQL** | no | Not used by the frontend. It is an output target of the simulation only. |
+
+---
+
+## Prerequisites
+
+- **Node.js 20 LTS or newer** (Vite 5 requires `^18.0.0 || >=20.0.0`; Node 18 is end-of-life)
+- **npm 10+** (ships with Node 20)
+
+Check with:
+
+```bash
+node -v
+npm -v
+```
+
+A WebGL-capable browser is required — the globe is rendered with three.js.
+
+---
+
+## Install
+
+From this directory (`web/`):
+
+```bash
+npm install
+```
+
+`package-lock.json` is committed; use `npm ci` instead if you want an exact, reproducible
+install.
+
+---
+
+## Start
+
+```bash
+# Development server with hot reload — http://localhost:5173
+npm run dev
+
+# Production build into web/dist/
+npm run build
+
+# Serve the production build locally
+npm run preview
+```
+
+Quality gates, both used in review:
+
+```bash
+npm run typecheck # tsc --noEmit against tsconfig.app.json
+npm run lint # eslint src
+```
+
+`npm run build` runs `tsc -b` first, so a type error fails the build.
+
+---
+
+## Where the data comes from
+
+The view never talks to the simulation directly. It reads a single JSON bundle through the
+`DataSource` seam:
+
+```
+simulation run (Melodie)
+ └─ src/provider_simenv/data/output/Result_Simulator_*.csv
+ └─ python -m provider_simenv.export_bundle
+ └─ web/public/bundle.json
+ └─ staticJsonSource → DataSource → views
+```
+
+- `src/data/source.ts` — the `DataSource` interface. Every view depends on this and never on
+ a concrete source.
+- `src/data/staticJsonSource.ts` — fetches `/bundle.json` and validates it structurally
+ (`parseBundle`) before any view sees it.
+- `src/data/fixtureSource.ts` — hand-written bundle, kept for reference and offline work.
+- `src/main.tsx` — the composition root and the **only** place a concrete source is chosen.
+ Swapping sources touches no view file.
+
+Geography is deliberately *not* in the bundle. Coordinates live in the frontend gazetteer
+(`src/data/gazetteer.ts`), keyed by PDL entity id. Entities the gazetteer does not know are
+not rendered and a console warning is logged — a visible gap is preferred over a confident
+wrong placement. Positions are approximate, not GIS accurate.
+
+### Regenerating `bundle.json`
+
+Only needed after a new simulation run. From the **repository root**, with the Python
+environment installed (`pip install -e '.[dev]'`):
+
+```bash
+# 1. Run the simulation (writes Result_Simulator_*.csv to data/output/).
+# Run from the package directory — Melodie resolves data/ paths from the cwd.
+cd src/provider_simenv
+python main.py --pdl scenarios/s1-soja.pdl.yaml
+cd ../..
+
+# 2. Export the CSVs to the web bundle
+python -m provider_simenv.export_bundle --scenario 1
+```
+
+This writes `web/public/bundle.json`. Options:
+
+| Flag | Default | Meaning |
+|---|---|---|
+| `--scenario` | `1` | `id_scenario` to export. `0` = baseline, `1` = PDL shock. |
+| `--input` | `src/provider_simenv/data/output` | Directory holding the `Result_Simulator_*.csv` files. |
+| `--output` | `web/public/bundle.json` | Target path. |
+| `--pdl` | `s1-soja.pdl.yaml` | PDL name recorded in the bundle metadata. |
+
+On Windows, set `PYTHONIOENCODING=utf-8` before running either step — the scenario summary
+prints box-drawing characters that raise `UnicodeEncodeError` on a cp1252 console.
+
+---
+
+## Layout
+
+```
+web/
+├── index.html
+├── package.json
+├── vite.config.ts three/globe.gl split into vendor chunks
+├── public/
+│ ├── bundle.json exported run data (committed)
+│ └── textures/ blue-marble, topology, night-sky
+└── src/
+ ├── main.tsx composition root — picks the DataSource
+ ├── App.tsx loads the bundle, owns playback state
+ ├── data/ types, DataSource seam, sources, gazetteer
+ ├── design/tokens.ts colours, globe/atmosphere and arc settings
+ ├── globe/ GlobeView + arc geometry helpers
+ └── playback/ timeline scrubber + per-period intensity
+```
+
+`node_modules/` and `dist/` are gitignored.
+
+---
+
+## Troubleshooting
+
+**"Failed to load the simulation bundle"** — `public/bundle.json` is missing or malformed.
+Restore it from git or regenerate it (see above).
+
+**Blank globe, no errors** — the browser has no WebGL. Check `chrome://gpu`, or run the dev
+server in a normal browser window rather than an embedded IDE preview pane.
+
+**Markers missing from the map** — the gazetteer has no entry for that PDL entity id. Open
+the console; each drop is logged as `[gazetteer] not rendered — …`. Add the entity to
+`src/data/gazetteer.ts` to place it.
+
+**Large chunk warning on build** — expected and configured for. three.js and globe.gl exceed
+Vite's 500 kB default and are split into their own long-cached vendor chunks
+(`vite.config.ts`).
diff --git a/web/eslint.config.js b/web/eslint.config.js
new file mode 100644
index 0000000..092408a
--- /dev/null
+++ b/web/eslint.config.js
@@ -0,0 +1,28 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import tseslint from 'typescript-eslint'
+
+export default tseslint.config(
+ { ignores: ['dist'] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ['**/*.{ts,tsx}'],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ 'react-hooks': reactHooks,
+ 'react-refresh': reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+ },
+)
diff --git a/web/index.html b/web/index.html
new file mode 100644
index 0000000..cd83a56
--- /dev/null
+++ b/web/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+ PROVIDER simenv — World Supply Network
+
+
+
+
+
+
diff --git a/web/package-lock.json b/web/package-lock.json
new file mode 100644
index 0000000..e53c6e2
--- /dev/null
+++ b/web/package-lock.json
@@ -0,0 +1,3866 @@
+{
+ "name": "provider-simenv-web",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "provider-simenv-web",
+ "version": "0.0.0",
+ "dependencies": {
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-globe.gl": "^2.38.0",
+ "three": "^0.185.1"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.13.0",
+ "@types/react": "^18.3.12",
+ "@types/react-dom": "^18.3.1",
+ "@types/three": "^0.185.1",
+ "@vitejs/plugin-react": "^4.3.3",
+ "eslint": "^9.13.0",
+ "eslint-plugin-react-hooks": "^5.0.0",
+ "eslint-plugin-react-refresh": "^0.4.14",
+ "globals": "^15.11.0",
+ "typescript": "~5.6.3",
+ "typescript-eslint": "^8.11.0",
+ "vite": "^5.4.10"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helpers": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz",
+ "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz",
+ "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
+ "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.7"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz",
+ "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz",
+ "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
+ "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz",
+ "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
+ "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@dimforge/rapier3d-compat": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz",
+ "integrity": "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
+ "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.21.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
+ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.7",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.5"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz",
+ "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.14.0",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.3.0",
+ "minimatch": "^3.1.5",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
+ "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
+ "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/types": "^0.15.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
+ "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.2",
+ "@humanfs/types": "^0.15.0",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/types": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
+ "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
+ "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.3.tgz",
+ "integrity": "sha512-c0wdcekXtQvvn5Tsrk/+op/gUArrbWaFduBnTLP2l1cKLSQs4diMWjJw3m6A0DdzT8dAAX95KpkJ3qynCePbmw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.3.tgz",
+ "integrity": "sha512-3YjElDdWN+qXAFbJ/CzPV+0wspLqh54k/I6GfdYtEJRqg7buSgc1yPM3B+93j1M4neobtkATHZTmxK2AMVGfnA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.3.tgz",
+ "integrity": "sha512-Pch2pFNOxxz1hTjypIdPyRTR6riiwRl84+VcN9djS680fw+Co1nAJINrdpqp7KV0NvyuU8ilZXZCjd7ykJl1GQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.3.tgz",
+ "integrity": "sha512-LEuncFUHFiF8t4yZVZvvZA1wk0pjAscRnsrn1EfTEmN4HXotBi2YtcnLRyaK6UbuczW7xZS5ES+81Rdz8Z0T6g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.3.tgz",
+ "integrity": "sha512-zvBUvsQUpOWALdDsk6qbS8bXf2VxmPisuudNDrY7x0p0jBdsoZl8HsHczIOgkQiZldmcacMKtBzpoGVNeIe2bQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.3.tgz",
+ "integrity": "sha512-C2KmNrcSem/AMg984H/dev+si0lieQGdXdR/lYGJnuumXnFb9Y7QdiI62obFdLlxRYLBv4P0eUVIDbD4c1vVvw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.3.tgz",
+ "integrity": "sha512-ggXnsTAEzNQx74XpunRsiZ9aBZDsI7XIa0hm2nzR9f4WzH5/f/d73ZSDaC5ejJ8YLY4NW+V3wr0tjOaeCq8hqA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.3.tgz",
+ "integrity": "sha512-2vng+FlzNUhKZxtej3IUqJgbZoQk2M/dwQM20+ULV0R/E/8tr9/P6uEf2iiGIk4HL0zMKh5Jry7mUHdUOvyGgA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.3.tgz",
+ "integrity": "sha512-LLLFZKt4/Nraf9rxDkhiU8QVgLF4WmCkfr0L4fj0fPfIZFBib0DeiFk1hhaYKd03LFAFJcxHslhDFlNJLylf5Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.3.tgz",
+ "integrity": "sha512-WJkdQCvS9sWNOUBJZfQRKpZGFBztRzcowI+nndmflKgU4XY+3a420FgTOSKTsVqJbnzSxeT4vaJalpOaPo2YCQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.3.tgz",
+ "integrity": "sha512-PwHXCCS2n64/1Ot6rP1YEYA02MGYBcQlr8CSZZyrUG2O7NH6NklYmvr9v3Jy+5e/eDeNchc/ukmKJi9LuflMIQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.3.tgz",
+ "integrity": "sha512-vUjxINQu3RC8NZS3ykk1gN65gIz8pAopOq2HXuZhiIxHdx7TFvDG+jgrdSgInu1Eza4/Rfi2VzZgyIgEH4WOaw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.3.tgz",
+ "integrity": "sha512-wzko4aJ13+0G3kGnviCg5gnXFKd40izKsrf2uOw12US4XqprkDrmwOpeW14aSNa37V8bfPcz5Fkob6LZ3BAPmA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.3.tgz",
+ "integrity": "sha512-8120ue0JUMSwy11stlwnfdX3pPd+WZYGCDBwEHWtIHi6pOpZmsEF5QKB7a/UN+XFdqvobxz98kv8RTqikyCEBw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.3.tgz",
+ "integrity": "sha512-XLFHnR3tXMjbOCh2vtVJHmxt+995uJsTERQyseFDRA0xxMxyTZPLa3OIUlyFaO4mF/Lu0FjmWHCuPXJT1n/IOg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.3.tgz",
+ "integrity": "sha512-se6yXvNGMIl0f+RQzyh7XAmia8/9kplQx424wnG2w0C1oi6XgO6Y8otKhdXFHbHs88Ihavzmvh1NWjuovE76BQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.3.tgz",
+ "integrity": "sha512-gNoxRefktVIiGflpONuxWWXZAzIQG++z9qHO3xKwk4WdDMuQja3JHGfE1u0i3PfPDyvhypdk+WrgIJqLhGG7sg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.3.tgz",
+ "integrity": "sha512-V4KtWtQfAFMU7+9/A/VDps/VI8CHd3cYz0L8sgJzz8qK7eY7wI4ruFD82UYIYvW9Z4DtlTfhQcsl4XyPHW5uSg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.3.tgz",
+ "integrity": "sha512-LBx9LYXvj2CBkMkjLdNAWLwH0MLMin7do2VcVo9kVPibGLkY0BQQut2fv7NVqkXqZ/CrAu9LqDHVV1xHCMpCPw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.3.tgz",
+ "integrity": "sha512-ABVf3Q0RCu7NcyCCOZQI0pJ3GuSdfSl8EXcy88QtdceIMIoCUdfhsJChZ64L9zVM2aJHjde1Bhn5uqSRcX9ySA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.3.tgz",
+ "integrity": "sha512-+2Cy/ldweGBLlPIKsQLF8U5N44a0KDdbrk1rAjHOM9M2K+kGdIVjHLmmrZIcx+9Ny3ke/1JomCsDI1ocb11+sg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.3.tgz",
+ "integrity": "sha512-dtZvzc8BedpSaFNy75x6uiWwAGTH+aZHDtdrqP6qk+WcLJrfti6sGje1ZJ9UxyzDLF23d/mV+PaMwuC0hL7UVA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.3.tgz",
+ "integrity": "sha512-Rj8Ra4noo+aYy7sKBggCx0407mws34kAb1ySyWuq5DAtFBQdkSwnsjCgPrhPe9cvgBKZIukpE+CVHvORCS93kQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.3.tgz",
+ "integrity": "sha512-vp7N084ew/odXn2gi/mzm9mUkQu9l6AiN6dt4IeUM2Uvm9o+cVmP+YkqbMOteLbiGgqBBlJZjIMYVCfOOIVbVQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.3.tgz",
+ "integrity": "sha512-MOG/3gTOn4Fwf574RVOaY61I5o6P90legkFADiTyn1hyjNydT+cerU2rLUwPdZkKKyJ+iT+K9p7WXK4LM1Ka6g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@turf/boolean-point-in-polygon": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.3.5.tgz",
+ "integrity": "sha512-ba7+B0wzaS9GtERZOoXUZ6oW8IcIJHNQZf3c+tiD9ESjcsPO1Q/4qIJGTKl92nBLhhracHJxMWBM/U6hAVkaRg==",
+ "license": "MIT",
+ "dependencies": {
+ "@turf/helpers": "7.3.5",
+ "@turf/invariant": "7.3.5",
+ "@types/geojson": "^7946.0.10",
+ "point-in-polygon-hao": "^1.1.0",
+ "tslib": "^2.8.1"
+ },
+ "funding": {
+ "url": "https://opencollective.com/turf"
+ }
+ },
+ "node_modules/@turf/helpers": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.5.tgz",
+ "integrity": "sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/geojson": "^7946.0.10",
+ "tslib": "^2.8.1"
+ },
+ "funding": {
+ "url": "https://opencollective.com/turf"
+ }
+ },
+ "node_modules/@turf/invariant": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.5.tgz",
+ "integrity": "sha512-ZVIvsBvjr8lO7WxC5zYNjRsjSDvyGvWkJMjuWaJjTU8x+1tmfNnw3gDX/TI2Sit83gcRYLYkNo23lB/udqx/Hg==",
+ "license": "MIT",
+ "dependencies": {
+ "@turf/helpers": "7.3.5",
+ "@types/geojson": "^7946.0.10",
+ "tslib": "^2.8.1"
+ },
+ "funding": {
+ "url": "https://opencollective.com/turf"
+ }
+ },
+ "node_modules/@tweenjs/tween.js": {
+ "version": "25.0.0",
+ "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-25.0.0.tgz",
+ "integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==",
+ "license": "MIT"
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.2"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/geojson": {
+ "version": "7946.0.16",
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
+ "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.15",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.31",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz",
+ "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.2.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.7",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
+ "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^18.0.0"
+ }
+ },
+ "node_modules/@types/stats.js": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz",
+ "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/three": {
+ "version": "0.185.1",
+ "resolved": "https://registry.npmjs.org/@types/three/-/three-0.185.1.tgz",
+ "integrity": "sha512-db1xTb+EgYF2didW+eudSvVPtn75zo+fGsY8ShQrJY/B5ZBmC2Fiaykv3aImHAlCNEGuMPkPGXBJGLwzu5mC7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@dimforge/rapier3d-compat": "~0.12.0",
+ "@tweenjs/tween.js": "~23.1.3",
+ "@types/stats.js": "*",
+ "@types/webxr": ">=0.5.17",
+ "fflate": "~0.8.2",
+ "meshoptimizer": "~1.1.1"
+ }
+ },
+ "node_modules/@types/three/node_modules/@tweenjs/tween.js": {
+ "version": "23.1.3",
+ "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz",
+ "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/webxr": {
+ "version": "0.5.24",
+ "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz",
+ "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz",
+ "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.65.0",
+ "@typescript-eslint/type-utils": "8.65.0",
+ "@typescript-eslint/utils": "8.65.0",
+ "@typescript-eslint/visitor-keys": "8.65.0",
+ "ignore": "^7.0.5",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.65.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz",
+ "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz",
+ "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.65.0",
+ "@typescript-eslint/types": "8.65.0",
+ "@typescript-eslint/typescript-estree": "8.65.0",
+ "@typescript-eslint/visitor-keys": "8.65.0",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz",
+ "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.65.0",
+ "@typescript-eslint/types": "^8.65.0",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz",
+ "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.65.0",
+ "@typescript-eslint/visitor-keys": "8.65.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz",
+ "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz",
+ "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.65.0",
+ "@typescript-eslint/typescript-estree": "8.65.0",
+ "@typescript-eslint/utils": "8.65.0",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz",
+ "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz",
+ "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.65.0",
+ "@typescript-eslint/tsconfig-utils": "8.65.0",
+ "@typescript-eslint/types": "8.65.0",
+ "@typescript-eslint/visitor-keys": "8.65.0",
+ "debug": "^4.4.3",
+ "minimatch": "^10.2.2",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz",
+ "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "10.2.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
+ "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.8"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz",
+ "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.65.0",
+ "@typescript-eslint/types": "8.65.0",
+ "@typescript-eslint/typescript-estree": "8.65.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz",
+ "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.65.0",
+ "eslint-visitor-keys": "^5.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
+ "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.28.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
+ "@rolldown/pluginutils": "1.0.0-beta.27",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.17.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
+ }
+ },
+ "node_modules/accessor-fn": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/accessor-fn/-/accessor-fn-1.5.3.tgz",
+ "integrity": "sha512-rkAofCwe/FvYFUlMB0v0gWmhqtfAtV1IUkdPbfhTUyYniu5LrC0A0UJkTH0Jv3S8SvwkmfuAlY+mQIJATdocMA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
+ "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.11.5",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.5.tgz",
+ "integrity": "sha512-xJo6a6YZnwZfnyGmQKWMbVOcii7XRibjOskRh+WJ9UHQoX16xrQrcIgAMQOzfvs8XiLMx6ih/fsLPF73iY2D1A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz",
+ "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz",
+ "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "baseline-browser-mapping": "^2.10.44",
+ "caniuse-lite": "^1.0.30001806",
+ "electron-to-chromium": "^1.5.393",
+ "node-releases": "^2.0.51",
+ "update-browserslist-db": "^1.2.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001806",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz",
+ "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-delaunay": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+ "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+ "license": "ISC",
+ "dependencies": {
+ "delaunator": "5"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
+ "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-geo": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
+ "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.5.0 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-geo-voronoi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/d3-geo-voronoi/-/d3-geo-voronoi-2.1.0.tgz",
+ "integrity": "sha512-kqE4yYuOjPbKdBXG0xztCacPwkVSK2REF1opSNrnqqtXJmNcM++UbwQ8SxvwP6IQTj9RvIjjK4qeiVsEfj0Z2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "3",
+ "d3-delaunay": "6",
+ "d3-geo": "3",
+ "d3-tricontour": "1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-octree": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/d3-octree/-/d3-octree-1.1.0.tgz",
+ "integrity": "sha512-F8gPlqpP+HwRPMO/8uOu5wjH110+6q4cgJvgJT6vlpy3BEaDIKlTZrgHKZSp/i1InRpVfh4puY/kvL6MxK930A==",
+ "license": "MIT"
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale-chromatic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+ "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-interpolate": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-selection": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-tricontour": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/d3-tricontour/-/d3-tricontour-1.1.0.tgz",
+ "integrity": "sha512-G7gHKj89n2owmkGb6WX6ixcnQ0Kf/0wpa9VIh9DGdbHu8wdrlaHU4ir3/bFNERl8N8nn4G7e7qbtBG8N9caihQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-delaunay": "6",
+ "d3-scale": "4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/data-bind-mapper": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/data-bind-mapper/-/data-bind-mapper-1.0.3.tgz",
+ "integrity": "sha512-QmU3lyEnbENQPo0M1F9BMu4s6cqNNp8iJA+b/HP2sSb7pf3dxwF3+EP1eO69rwBfH9kFJ1apmzrtogAmVt2/Xw==",
+ "license": "MIT",
+ "dependencies": {
+ "accessor-fn": "1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/delaunator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz",
+ "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==",
+ "license": "ISC",
+ "dependencies": {
+ "robust-predicates": "^3.0.2"
+ }
+ },
+ "node_modules/earcut": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.2.3.tgz",
+ "integrity": "sha512-vnS4AVwp1KHAF13i1vp1/2D5evWy3k5u/iW/B81QVsUZtV8cv2tU0b2VNFlqvh4kYwrFMDdjPCfAmfyJW9y14Q==",
+ "license": "ISC"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.397",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.397.tgz",
+ "integrity": "sha512-khGTy9U9x02KEtsKM8vx5A62BsRmcOsIgDpWr1ImE32Ax8GxHGPHZf+Eu9H8zOOyHJnB0jTbseyTHbq2XCT8yw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
+ "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.21.2",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
+ "@eslint/eslintrc": "^3.3.6",
+ "@eslint/js": "9.39.5",
+ "@eslint/plugin-kit": "^0.4.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "ajv": "^6.14.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.5",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+ "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.26",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz",
+ "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=8.40"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fflate": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
+ "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.3.tgz",
+ "integrity": "sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/float-tooltip": {
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/float-tooltip/-/float-tooltip-1.7.5.tgz",
+ "integrity": "sha512-/kXzuDnnBqyyWyhDMH7+PfP8J/oXiAavGzcRxASOMRHFuReDtofizLLJsf7nnDLAfEaMW4pVWaXrAjtnglpEkg==",
+ "license": "MIT",
+ "dependencies": {
+ "d3-selection": "2 - 3",
+ "kapsule": "^1.16",
+ "preact": "10"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/frame-ticker": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/frame-ticker/-/frame-ticker-1.0.3.tgz",
+ "integrity": "sha512-E0X2u2JIvbEMrqEg5+4BpTqaD22OwojJI63K7MdKHdncjtAhGRbCR8nJCr2vwEt9NWBPCPcu70X9smPviEBy8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "simplesignal": "^2.1.6"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "15.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
+ "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globe.gl": {
+ "version": "2.46.1",
+ "resolved": "https://registry.npmjs.org/globe.gl/-/globe.gl-2.46.1.tgz",
+ "integrity": "sha512-h+OvX52EBIPLtM0/2JkM+JZ9gPAhPJ4y3+hxUwD5Ey/O0Zk2ockuTiJ71bZbnNBGmNiIZzA5Vr3TMT0b3d35IQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@tweenjs/tween.js": "18 - 25",
+ "accessor-fn": "1",
+ "kapsule": "^1.16",
+ "three": ">=0.179 <1",
+ "three-globe": "^2.45",
+ "three-render-objects": "^1.41"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/h3-js": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/h3-js/-/h3-js-4.5.0.tgz",
+ "integrity": "sha512-uKmdPc+DuarnR+XqZxEuWOMw7KzzKROrx3MLeJpFnMOs78S9M5eZ+X5RieS9UcSFQqbeXzbfWuX/W9Pyajinqw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=4",
+ "npm": ">=3",
+ "yarn": ">=1.3.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/index-array-by": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/index-array-by/-/index-array-by-1.4.2.tgz",
+ "integrity": "sha512-SP23P27OUKzXWEC/TOyWlwLviofQkCSCKONnc62eItjp69yCZZPqDQtr3Pw5gJDnPeUMqExmKydNZaJO0FU9pw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/jerrypick": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/jerrypick/-/jerrypick-1.1.2.tgz",
+ "integrity": "sha512-YKnxXEekXKzhpf7CLYA0A+oDP8V0OhICNCr5lv96FvSsDEmrb0GKM776JgQvHTMjr7DTTPEVv/1Ciaw0uEWzBA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
+ "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/kapsule": {
+ "version": "1.16.3",
+ "resolved": "https://registry.npmjs.org/kapsule/-/kapsule-1.16.3.tgz",
+ "integrity": "sha512-4+5mNNf4vZDSwPhKprKwz3330iisPrb08JyMgbsdFrimBCKNHecua/WBwvVg3n7vwx0C1ARjfhwIpbrbd9n5wg==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash-es": "4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash-es": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+ "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/meshoptimizer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-1.1.1.tgz",
+ "integrity": "sha512-oRFNWJRDA/WTrVj7NWvqa5HqE1t9MYDj2VaWirQCzCCrAd2GHrqR/sQezCxiWATPNlKTcRaPRHPJwIRoPBAp5g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.16",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz",
+ "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.51",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz",
+ "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/point-in-polygon-hao": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/point-in-polygon-hao/-/point-in-polygon-hao-1.2.4.tgz",
+ "integrity": "sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ==",
+ "license": "MIT",
+ "dependencies": {
+ "robust-predicates": "^3.0.2"
+ }
+ },
+ "node_modules/polished": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz",
+ "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.17.8"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.24",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.24.tgz",
+ "integrity": "sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.16",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/preact": {
+ "version": "10.29.7",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.7.tgz",
+ "integrity": "sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ },
+ "peerDependencies": {
+ "preact-render-to-string": ">=5"
+ },
+ "peerDependenciesMeta": {
+ "preact-render-to-string": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-globe.gl": {
+ "version": "2.38.0",
+ "resolved": "https://registry.npmjs.org/react-globe.gl/-/react-globe.gl-2.38.0.tgz",
+ "integrity": "sha512-NQkMy5BGD269lkdjm9BJ2PEK81++y9H82+j4/QuWVlfXPJPTVfzaxnkC3MvaiGmpus8P6czq58OfMeYvn/4Xqg==",
+ "license": "MIT",
+ "dependencies": {
+ "globe.gl": "^2.46",
+ "prop-types": "15",
+ "react-kapsule": "^2.5"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
+ "node_modules/react-kapsule": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/react-kapsule/-/react-kapsule-2.6.0.tgz",
+ "integrity": "sha512-HzLJoYb1n1kfwjXbqFFcRR0EA6oPsJ64tNdDmCSaL/bz2o9wUZRSb0cMe//grLFeF9EVoL4CD/e6ozLyzEv+PQ==",
+ "license": "MIT",
+ "dependencies": {
+ "jerrypick": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "react": ">=16.13.1"
+ }
+ },
+ "node_modules/react-refresh": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/robust-predicates": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",
+ "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==",
+ "license": "Unlicense"
+ },
+ "node_modules/rollup": {
+ "version": "4.62.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.3.tgz",
+ "integrity": "sha512-Gu0c0iH9FzgX1L1t7ByIbbS3Vmdz+6KHm/EsqmmC71gUQ82yvZRkTK6XzrFObSka91WUVdynqp6nsfilzr5k6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.9"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.62.3",
+ "@rollup/rollup-android-arm64": "4.62.3",
+ "@rollup/rollup-darwin-arm64": "4.62.3",
+ "@rollup/rollup-darwin-x64": "4.62.3",
+ "@rollup/rollup-freebsd-arm64": "4.62.3",
+ "@rollup/rollup-freebsd-x64": "4.62.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.62.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.62.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.62.3",
+ "@rollup/rollup-linux-arm64-musl": "4.62.3",
+ "@rollup/rollup-linux-loong64-gnu": "4.62.3",
+ "@rollup/rollup-linux-loong64-musl": "4.62.3",
+ "@rollup/rollup-linux-ppc64-gnu": "4.62.3",
+ "@rollup/rollup-linux-ppc64-musl": "4.62.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.62.3",
+ "@rollup/rollup-linux-riscv64-musl": "4.62.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.62.3",
+ "@rollup/rollup-linux-x64-gnu": "4.62.3",
+ "@rollup/rollup-linux-x64-musl": "4.62.3",
+ "@rollup/rollup-openbsd-x64": "4.62.3",
+ "@rollup/rollup-openharmony-arm64": "4.62.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.62.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.62.3",
+ "@rollup/rollup-win32-x64-gnu": "4.62.3",
+ "@rollup/rollup-win32-x64-msvc": "4.62.3",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/simplesignal": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/simplesignal/-/simplesignal-2.1.7.tgz",
+ "integrity": "sha512-PEo2qWpUke7IMhlqiBxrulIFvhJRLkl1ih52Rwa+bPjzhJepcd4GIjn2RiQmFSx3dQvsEAgF0/lXMwMN7vODaA==",
+ "license": "MIT"
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/three": {
+ "version": "0.185.1",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.185.1.tgz",
+ "integrity": "sha512-5aojFCXKwnjBRZvUnt3WFfEcvUJgkN5LlijRFN95hMy8WVkG4I0QNcJE+OuWvuJ0bOdStrbfXn0pkd6/QyiAlg==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/three-conic-polygon-geometry": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/three-conic-polygon-geometry/-/three-conic-polygon-geometry-2.1.3.tgz",
+ "integrity": "sha512-7KYcgd7rYg91L8AnCEddeyhw4qlv9+8NAI0luHq7QGt26icWUGNCsvLyD+u6FPKjP+un3zGBi4JGzqgGpmBSWA==",
+ "license": "MIT",
+ "dependencies": {
+ "@turf/boolean-point-in-polygon": "^7.2",
+ "d3-array": "1 - 3",
+ "d3-geo": "1 - 3",
+ "d3-geo-voronoi": "2",
+ "d3-scale": "1 - 4",
+ "delaunator": "5",
+ "earcut": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "three": ">=0.72.0"
+ }
+ },
+ "node_modules/three-geojson-geometry": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/three-geojson-geometry/-/three-geojson-geometry-2.1.1.tgz",
+ "integrity": "sha512-dC7bF3ri1goDcihYhzACHOBQqu7YNNazYLa2bSydVIiJUb3jDFojKSy+gNj2pMkqZNSVjssSmdY9zlmnhEpr1w==",
+ "license": "MIT",
+ "dependencies": {
+ "d3-geo": "1 - 3",
+ "d3-interpolate": "1 - 3",
+ "earcut": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "three": ">=0.72.0"
+ }
+ },
+ "node_modules/three-globe": {
+ "version": "2.45.2",
+ "resolved": "https://registry.npmjs.org/three-globe/-/three-globe-2.45.2.tgz",
+ "integrity": "sha512-3qJE2LAdyHsUPt02mgMRc+PG3j9kGEA0fUYrwKPGIVtvMR1XjDn9hCXu31AWocdgHOFcXkrRVz7jJZzTIvR0eQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@tweenjs/tween.js": "18 - 25",
+ "accessor-fn": "1",
+ "d3-array": "3",
+ "d3-color": "3",
+ "d3-geo": "3",
+ "d3-interpolate": "3",
+ "d3-scale": "4",
+ "d3-scale-chromatic": "3",
+ "data-bind-mapper": "1",
+ "frame-ticker": "1",
+ "h3-js": "4",
+ "index-array-by": "1",
+ "kapsule": "^1.16",
+ "three-conic-polygon-geometry": "2",
+ "three-geojson-geometry": "2",
+ "three-slippy-map-globe": "1",
+ "tinycolor2": "1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "three": ">=0.154"
+ }
+ },
+ "node_modules/three-render-objects": {
+ "version": "1.42.0",
+ "resolved": "https://registry.npmjs.org/three-render-objects/-/three-render-objects-1.42.0.tgz",
+ "integrity": "sha512-KYfkPrYGEbIK8ChFocWqOF1aAN80FBUBWVYB8mB2oBpVuVN+52FvvngVYB5ieFANQu7Rt21rPYZ/xKaAgVWWRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@tweenjs/tween.js": "18 - 25",
+ "accessor-fn": "1",
+ "float-tooltip": "^1.7",
+ "kapsule": "^1.16",
+ "polished": "4"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "three": ">=0.179"
+ }
+ },
+ "node_modules/three-slippy-map-globe": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/three-slippy-map-globe/-/three-slippy-map-globe-1.0.6.tgz",
+ "integrity": "sha512-PCUR+X+1kYFYtQBf8+b/ct8xBHtnkeu7FItRYBeFxyIe3ksnGuLi0H9RAxAfVSSUsZVbKIKNz9q1atEjynrrkg==",
+ "license": "MIT",
+ "dependencies": {
+ "d3-geo": "1 - 3",
+ "d3-octree": "^1.1",
+ "d3-scale": "1 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "three": ">=0.154"
+ }
+ },
+ "node_modules/tinycolor2": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz",
+ "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==",
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.65.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz",
+ "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.65.0",
+ "@typescript-eslint/parser": "8.65.0",
+ "@typescript-eslint/typescript-estree": "8.65.0",
+ "@typescript-eslint/utils": "8.65.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/web/package.json b/web/package.json
new file mode 100644
index 0000000..cf1ee73
--- /dev/null
+++ b/web/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "provider-simenv-web",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "description": "PROVIDER simenv — world map / globe view (Issue #23). Map substrate + placement APIs.",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "typecheck": "tsc -p tsconfig.app.json --noEmit",
+ "lint": "eslint src",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-globe.gl": "^2.38.0",
+ "three": "^0.185.1"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.13.0",
+ "@types/react": "^18.3.12",
+ "@types/react-dom": "^18.3.1",
+ "@types/three": "^0.185.1",
+ "@vitejs/plugin-react": "^4.3.3",
+ "eslint": "^9.13.0",
+ "eslint-plugin-react-hooks": "^5.0.0",
+ "eslint-plugin-react-refresh": "^0.4.14",
+ "globals": "^15.11.0",
+ "typescript": "~5.6.3",
+ "typescript-eslint": "^8.11.0",
+ "vite": "^5.4.10"
+ }
+}
diff --git a/web/public/bundle.json b/web/public/bundle.json
new file mode 100644
index 0000000..a76acc4
--- /dev/null
+++ b/web/public/bundle.json
@@ -0,0 +1 @@
+{"meta":{"pdl":"s1-soja.pdl.yaml","scenario":"scenario_1","ticks":365,"generatedAt":"2026-08-04T11:40:16+00:00","honestyNote":"Approximate geographic positions — not GIS accurate"},"nodes":[{"id":"bra_farmers","label":"Brazil soy farms","role":"producer","entityIds":["brazil_farms"],"hasRecordedData":true},{"id":"arg_farmers","label":"Argentina soy farms","role":"producer","entityIds":["argentina_farms"],"hasRecordedData":true},{"id":"usa_farmers","label":"US soy farms","role":"producer","entityIds":["us_farms"],"hasRecordedData":true},{"id":"wholesalers","label":"Wholesalers","role":"wholesaler","entityIds":[],"hasRecordedData":true},{"id":"processors","label":"EU oil mills","role":"processor","entityIds":["eu_oil_mills"],"hasRecordedData":true},{"id":"feed_manufacturers","label":"Feed mills","role":"feed_manufacturer","entityIds":["feed_mills"],"hasRecordedData":true},{"id":"feed_traders","label":"Feed traders","role":"feed_trader","entityIds":[],"hasRecordedData":true},{"id":"eu_farmers","label":"EU livestock farms","role":"consumer","entityIds":["poultry_farms","pig_farms","dairy_farms"],"hasRecordedData":true},{"id":"transport_sa_santos","label":"Port of Santos","role":"sa_santos","entityIds":["santos_port"],"hasRecordedData":false},{"id":"transport_sa_paranagua","label":"Port of Paranaguá","role":"sa_paranagua","entityIds":["paranagua_port"],"hasRecordedData":false},{"id":"transport_eu_rtm","label":"Port of Rotterdam","role":"eu_rtm","entityIds":["rotterdam_port"],"hasRecordedData":false},{"id":"transport_eu_ham","label":"Port of Hamburg","role":"eu_ham","entityIds":["hamburg_port"],"hasRecordedData":false}],"edges":[{"id":"bra_farmers->wholesalers","source":"bra_farmers","target":"wholesalers","isSeaCrossing":false},{"id":"arg_farmers->wholesalers","source":"arg_farmers","target":"wholesalers","isSeaCrossing":false},{"id":"usa_farmers->wholesalers","source":"usa_farmers","target":"wholesalers","isSeaCrossing":false},{"id":"wholesalers->transport_sa_santos","source":"wholesalers","target":"transport_sa_santos","isSeaCrossing":false},{"id":"wholesalers->transport_sa_paranagua","source":"wholesalers","target":"transport_sa_paranagua","isSeaCrossing":false},{"id":"transport_sa_santos->transport_eu_rtm","source":"transport_sa_santos","target":"transport_eu_rtm","isSeaCrossing":true},{"id":"transport_sa_paranagua->transport_eu_ham","source":"transport_sa_paranagua","target":"transport_eu_ham","isSeaCrossing":true},{"id":"arg_farmers->transport_eu_rtm","source":"arg_farmers","target":"transport_eu_rtm","isSeaCrossing":true},{"id":"usa_farmers->transport_eu_rtm","source":"usa_farmers","target":"transport_eu_rtm","isSeaCrossing":true},{"id":"transport_eu_rtm->processors","source":"transport_eu_rtm","target":"processors","isSeaCrossing":false},{"id":"transport_eu_ham->processors","source":"transport_eu_ham","target":"processors","isSeaCrossing":false},{"id":"processors->feed_manufacturers","source":"processors","target":"feed_manufacturers","isSeaCrossing":false},{"id":"feed_manufacturers->feed_traders","source":"feed_manufacturers","target":"feed_traders","isSeaCrossing":false},{"id":"feed_traders->eu_farmers","source":"feed_traders","target":"eu_farmers","isSeaCrossing":false}],"ticks":[{"period":0,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":1,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":2,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":3,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":4,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":5,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":6,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":7,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":8,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":9,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":10,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":11,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":12,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":13,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":14,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":15,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":16,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":17,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":18,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":19,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":20,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":21,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":22,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":23,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":24,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":25,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":26,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":27,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":28,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":29,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":30,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":31,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":32,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":33,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":34,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":35,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":36,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":37,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":38,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":39,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":40,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":41,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":42,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":43,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":44,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":45,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":46,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":47,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":48,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":49,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":50,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":51,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":52,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":53,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":54,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":55,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":56,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":57,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":58,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":59,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":60,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":61,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":62,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":63,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":64,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":65,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":66,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":67,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":68,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":69,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":70,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":71,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":72,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":73,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":74,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":75,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":76,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":77,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":78,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":79,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":80,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":81,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":82,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":83,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":84,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":85,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":86,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":87,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":88,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":89,"nodeId":"bra_farmers","values":{"quantity_available":600.0,"unit_price":660.0,"active":true}},{"period":90,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":91,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":92,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":93,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":94,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":95,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":96,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":97,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":98,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":99,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":100,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":101,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":102,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":103,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":104,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":105,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":106,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":107,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":108,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":109,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":110,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":111,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":112,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":113,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":114,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":115,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":116,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":117,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":118,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":119,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":120,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":121,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":122,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":123,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":124,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":125,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":126,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":127,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":128,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":129,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":130,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":131,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":132,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":133,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":134,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":135,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":136,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":137,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":138,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":139,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":140,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":141,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":142,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":143,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":144,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":145,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":146,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":147,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":148,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":149,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":150,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":151,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":152,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":153,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":154,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":155,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":156,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":157,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":158,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":159,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":160,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":161,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":162,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":163,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":164,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":165,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":166,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":167,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":168,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":169,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":170,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":171,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":172,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":173,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":174,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":175,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":176,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":177,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":178,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":179,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":180,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":181,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":182,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":183,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":184,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":185,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":186,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":187,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":188,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":189,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":190,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":191,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":192,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":193,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":194,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":195,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":196,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":197,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":198,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":199,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":200,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":201,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":202,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":203,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":204,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":205,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":206,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":207,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":208,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":209,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":210,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":211,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":212,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":213,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":214,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":215,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":216,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":217,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":218,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":219,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":220,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":221,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":222,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":223,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":224,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":225,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":226,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":227,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":228,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":229,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":230,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":231,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":232,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":233,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":234,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":235,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":236,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":237,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":238,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":239,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":240,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":241,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":242,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":243,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":244,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":245,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":246,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":247,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":248,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":249,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":250,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":251,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":252,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":253,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":254,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":255,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":256,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":257,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":258,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":259,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":260,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":261,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":262,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":263,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":264,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":265,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":266,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":267,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":268,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":269,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":270,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":271,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":272,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":273,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":274,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":275,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":276,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":277,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":278,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":279,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":280,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":281,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":282,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":283,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":284,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":285,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":286,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":287,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":288,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":289,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":290,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":291,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":292,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":293,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":294,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":295,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":296,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":297,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":298,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":299,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":300,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":301,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":302,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":303,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":304,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":305,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":306,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":307,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":308,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":309,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":310,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":311,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":312,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":313,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":314,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":315,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":316,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":317,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":318,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":319,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":320,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":321,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":322,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":323,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":324,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":325,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":326,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":327,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":328,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":329,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":330,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":331,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":332,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":333,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":334,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":335,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":336,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":337,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":338,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":339,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":340,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":341,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":342,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":343,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":344,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":345,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":346,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":347,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":348,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":349,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":350,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":351,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":352,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":353,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":354,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":355,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":356,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":357,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":358,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":359,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":360,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":361,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":362,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":363,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":364,"nodeId":"bra_farmers","values":{"quantity_available":1000.0,"unit_price":396.0,"active":true}},{"period":0,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":1,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":2,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":3,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":4,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":5,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":6,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":7,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":8,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":9,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":10,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":11,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":12,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":13,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":14,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":15,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":16,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":17,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":18,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":19,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":20,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":21,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":22,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":23,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":24,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":25,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":26,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":27,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":28,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":29,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":30,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":31,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":32,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":33,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":34,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":35,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":36,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":37,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":38,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":39,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":40,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":41,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":42,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":43,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":44,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":45,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":46,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":47,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":48,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":49,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":50,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":51,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":52,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":53,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":54,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":55,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":56,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":57,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":58,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":59,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":60,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":61,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":62,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":63,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":64,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":65,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":66,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":67,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":68,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":69,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":70,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":71,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":72,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":73,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":74,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":75,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":76,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":77,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":78,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":79,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":80,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":81,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":82,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":83,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":84,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":85,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":86,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":87,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":88,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":89,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":90,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":91,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":92,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":93,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":94,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":95,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":96,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":97,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":98,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":99,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":100,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":101,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":102,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":103,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":104,"nodeId":"arg_farmers","values":{"quantity_available":550.0,"unit_price":420.0,"active":true}},{"period":105,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":106,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":107,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":108,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":109,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":110,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":111,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":112,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":113,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":114,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":115,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":116,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":117,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":118,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":119,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":120,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":121,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":122,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":123,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":124,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":125,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":126,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":127,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":128,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":129,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":130,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":131,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":132,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":133,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":134,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":135,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":136,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":137,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":138,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":139,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":140,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":141,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":142,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":143,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":144,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":145,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":146,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":147,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":148,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":149,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":150,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":151,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":152,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":153,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":154,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":155,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":156,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":157,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":158,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":159,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":160,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":161,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":162,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":163,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":164,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":165,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":166,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":167,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":168,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":169,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":170,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":171,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":172,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":173,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":174,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":175,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":176,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":177,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":178,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":179,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":180,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":181,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":182,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":183,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":184,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":185,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":186,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":187,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":188,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":189,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":190,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":191,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":192,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":193,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":194,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":195,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":196,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":197,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":198,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":199,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":200,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":201,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":202,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":203,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":204,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":205,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":206,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":207,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":208,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":209,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":210,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":211,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":212,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":213,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":214,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":215,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":216,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":217,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":218,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":219,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":220,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":221,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":222,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":223,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":224,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":225,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":226,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":227,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":228,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":229,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":230,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":231,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":232,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":233,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":234,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":235,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":236,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":237,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":238,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":239,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":240,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":241,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":242,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":243,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":244,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":245,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":246,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":247,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":248,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":249,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":250,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":251,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":252,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":253,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":254,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":255,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":256,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":257,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":258,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":259,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":260,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":261,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":262,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":263,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":264,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":265,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":266,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":267,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":268,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":269,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":270,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":271,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":272,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":273,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":274,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":275,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":276,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":277,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":278,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":279,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":280,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":281,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":282,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":283,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":284,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":285,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":286,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":287,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":288,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":289,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":290,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":291,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":292,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":293,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":294,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":295,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":296,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":297,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":298,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":299,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":300,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":301,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":302,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":303,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":304,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":305,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":306,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":307,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":308,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":309,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":310,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":311,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":312,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":313,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":314,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":315,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":316,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":317,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":318,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":319,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":320,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":321,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":322,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":323,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":324,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":325,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":326,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":327,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":328,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":329,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":330,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":331,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":332,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":333,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":334,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":335,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":336,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":337,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":338,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":339,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":340,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":341,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":342,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":343,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":344,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":345,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":346,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":347,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":348,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":349,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":350,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":351,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":352,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":353,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":354,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":355,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":356,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":357,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":358,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":359,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":360,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":361,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":362,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":363,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":364,"nodeId":"arg_farmers","values":{"quantity_available":500.0,"unit_price":462.0,"active":true}},{"period":0,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":1,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":2,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":3,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":4,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":5,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":6,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":7,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":8,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":9,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":10,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":11,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":12,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":13,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":14,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":15,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":16,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":17,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":18,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":19,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":20,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":21,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":22,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":23,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":24,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":25,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":26,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":27,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":28,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":29,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":30,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":31,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":32,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":33,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":34,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":35,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":36,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":37,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":38,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":39,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":40,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":41,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":42,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":43,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":44,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":45,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":46,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":47,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":48,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":49,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":50,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":51,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":52,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":53,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":54,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":55,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":56,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":57,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":58,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":59,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":60,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":61,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":62,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":63,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":64,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":65,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":66,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":67,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":68,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":69,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":70,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":71,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":72,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":73,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":74,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":75,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":76,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":77,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":78,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":79,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":80,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":81,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":82,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":83,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":84,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":85,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":86,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":87,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":88,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":89,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":90,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":91,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":92,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":93,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":94,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":95,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":96,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":97,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":98,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":99,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":100,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":101,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":102,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":103,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":104,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":105,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":106,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":107,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":108,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":109,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":110,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":111,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":112,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":113,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":114,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":115,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":116,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":117,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":118,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":119,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":120,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":121,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":122,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":123,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":124,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":125,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":126,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":127,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":128,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":129,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":130,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":131,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":132,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":133,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":134,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":135,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":136,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":137,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":138,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":139,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":140,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":141,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":142,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":143,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":144,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":145,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":146,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":147,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":148,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":149,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":150,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":151,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":152,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":153,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":154,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":155,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":156,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":157,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":158,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":159,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":160,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":161,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":162,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":163,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":164,"nodeId":"usa_farmers","values":{"quantity_available":920.0,"unit_price":459.1304,"active":true}},{"period":165,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":166,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":167,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":168,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":169,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":170,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":171,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":172,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":173,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":174,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":175,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":176,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":177,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":178,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":179,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":180,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":181,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":182,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":183,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":184,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":185,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":186,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":187,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":188,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":189,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":190,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":191,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":192,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":193,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":194,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":195,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":196,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":197,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":198,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":199,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":200,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":201,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":202,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":203,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":204,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":205,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":206,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":207,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":208,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":209,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":210,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":211,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":212,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":213,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":214,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":215,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":216,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":217,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":218,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":219,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":220,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":221,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":222,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":223,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":224,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":225,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":226,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":227,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":228,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":229,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":230,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":231,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":232,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":233,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":234,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":235,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":236,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":237,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":238,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":239,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":240,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":241,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":242,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":243,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":244,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":245,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":246,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":247,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":248,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":249,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":250,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":251,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":252,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":253,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":254,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":255,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":256,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":257,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":258,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":259,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":260,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":261,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":262,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":263,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":264,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":265,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":266,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":267,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":268,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":269,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":270,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":271,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":272,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":273,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":274,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":275,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":276,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":277,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":278,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":279,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":280,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":281,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":282,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":283,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":284,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":285,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":286,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":287,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":288,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":289,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":290,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":291,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":292,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":293,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":294,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":295,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":296,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":297,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":298,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":299,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":300,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":301,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":302,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":303,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":304,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":305,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":306,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":307,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":308,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":309,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":310,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":311,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":312,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":313,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":314,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":315,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":316,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":317,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":318,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":319,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":320,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":321,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":322,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":323,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":324,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":325,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":326,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":327,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":328,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":329,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":330,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":331,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":332,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":333,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":334,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":335,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":336,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":337,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":338,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":339,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":340,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":341,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":342,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":343,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":344,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":345,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":346,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":347,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":348,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":349,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":350,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":351,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":352,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":353,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":354,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":355,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":356,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":357,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":358,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":359,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":360,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":361,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":362,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":363,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":364,"nodeId":"usa_farmers","values":{"quantity_available":800.0,"unit_price":528.0,"active":true}},{"period":0,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":1,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":2,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":3,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":4,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":5,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":6,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":7,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":8,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":9,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":10,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":11,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":12,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":13,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":14,"nodeId":"wholesalers","values":{"quantity_available":1900.0,"unit_price":633.6,"bra_volume":600.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2217}},{"period":15,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":16,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":17,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":18,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":19,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":20,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":21,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":22,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":23,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":24,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":25,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":26,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":27,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":28,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":29,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":30,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":31,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":32,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":33,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":34,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":35,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":36,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":37,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":38,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":39,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":40,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":41,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":42,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":43,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":44,"nodeId":"wholesalers","values":{"quantity_available":1950.0,"unit_price":617.3538,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":800.0,"storage_utilization":0.2275}},{"period":45,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":46,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":47,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":48,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":49,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":50,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":51,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":52,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":53,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":54,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":55,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":56,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":57,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":58,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":59,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":60,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":61,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":62,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":63,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":64,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":65,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":66,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":67,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":68,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":69,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":70,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":71,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":72,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":73,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":74,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":75,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":76,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":77,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":78,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":79,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":80,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":81,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":82,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":83,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":84,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":85,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":86,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":87,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":88,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":89,"nodeId":"wholesalers","values":{"quantity_available":2070.0,"unit_price":581.5652,"bra_volume":600.0,"arg_volume":550.0,"usa_volume":920.0,"storage_utilization":0.2415}},{"period":90,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":91,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":92,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":93,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":94,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":95,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":96,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":97,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":98,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":99,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":100,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":101,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":102,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":103,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":104,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":486.0794,"bra_volume":1000.0,"arg_volume":550.0,"usa_volume":750.0,"storage_utilization":0.2683}},{"period":105,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":106,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":107,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":108,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":109,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":110,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":111,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":112,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":113,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":114,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":115,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":116,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":117,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":118,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":119,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":120,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":121,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":122,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":123,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":124,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":125,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":126,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":127,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":128,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":129,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":130,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":131,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":132,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":133,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":134,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":135,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":136,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":137,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":138,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":139,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":140,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":141,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":142,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":143,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":144,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":145,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":146,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":147,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":148,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":149,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":150,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":151,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":152,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":153,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":154,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":155,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":156,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":157,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":158,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":159,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":160,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":161,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":162,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":163,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":164,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":496.8939,"bra_volume":1000.0,"arg_volume":380.0,"usa_volume":920.0,"storage_utilization":0.2683}},{"period":165,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":166,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":167,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":168,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":169,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":170,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":171,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":172,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":173,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":174,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":175,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":176,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":177,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":178,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":179,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":180,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":181,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":182,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":183,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":184,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":185,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":186,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":187,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":188,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":189,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":190,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":191,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":192,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":193,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":194,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":195,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":196,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":197,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":198,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":199,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":200,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":201,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":202,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":203,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":204,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":205,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":206,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":207,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":208,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":209,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":210,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":211,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":212,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":213,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":214,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":215,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":216,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":217,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":218,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":219,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":220,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":221,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":222,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":223,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":224,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":225,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":226,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":227,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":228,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":229,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":230,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":231,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":232,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":233,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":234,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":235,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":236,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":237,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":238,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":239,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":240,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":241,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":242,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":243,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":244,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":245,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":246,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":247,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":248,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":249,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":250,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":251,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":252,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":253,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":254,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":255,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":256,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":257,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":258,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":259,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":260,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":261,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":262,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":263,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":264,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":265,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":266,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":267,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":268,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":269,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":270,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":271,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":272,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":273,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":274,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":275,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":276,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":277,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":278,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":279,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":280,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":281,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":282,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":283,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":284,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":285,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":286,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":287,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":288,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":289,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":290,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":291,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":292,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":293,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":294,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":295,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":296,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":297,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":298,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":299,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":300,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":301,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":302,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":303,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":304,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":305,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":306,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":307,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":308,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":309,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":310,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":311,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":312,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":313,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":314,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":315,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":316,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":317,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":318,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":319,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":320,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":321,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":322,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":323,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":324,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":325,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":326,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":327,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":328,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":329,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":330,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":331,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":332,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":333,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":334,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":335,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":336,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":337,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":338,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":339,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":340,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":341,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":342,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":343,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":344,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":345,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":346,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":347,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":348,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":349,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":350,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":351,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":352,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":353,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":354,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":355,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":356,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":357,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":358,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":359,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":360,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":361,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":362,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":363,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":364,"nodeId":"wholesalers","values":{"quantity_available":2300.0,"unit_price":523.4087,"bra_volume":1000.0,"arg_volume":500.0,"usa_volume":800.0,"storage_utilization":0.2683}},{"period":0,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":1,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":2,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":3,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":4,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":5,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":6,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":7,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":8,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":9,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":10,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":11,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":12,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":13,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":14,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1259.3711}},{"period":15,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1233.9484}},{"period":16,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1233.9484}},{"period":17,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1233.9484}},{"period":18,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1233.9484}},{"period":19,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1233.9484}},{"period":20,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1233.9484}},{"period":21,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":22,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":23,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":24,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":25,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":26,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":27,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":28,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":29,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":30,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":31,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":32,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":33,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":34,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":35,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":36,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":37,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":38,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":39,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":40,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":41,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":42,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":43,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":44,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1235.0013}},{"period":45,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1178.9179}},{"period":46,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1178.9179}},{"period":47,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1178.9179}},{"period":48,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1178.9179}},{"period":49,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1178.9179}},{"period":50,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1178.9179}},{"period":51,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":52,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":53,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":54,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":55,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":56,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":57,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":58,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":59,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":60,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":61,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":62,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":63,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":64,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":65,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":66,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":67,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":68,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":69,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":70,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":71,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":72,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":73,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":74,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":75,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":76,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":77,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":78,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":79,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":80,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":81,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":82,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":83,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":84,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":85,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":86,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":87,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":88,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":89,"nodeId":"processors","values":{"quantity_available":544.0,"unit_price":1177.9952}},{"period":90,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":91,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":92,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":93,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":94,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":95,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":96,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":97,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":98,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":99,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":100,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":101,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":102,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":103,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":104,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":996.0663}},{"period":105,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":106,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":107,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":108,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":109,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":110,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":111,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":112,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":113,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":114,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":115,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":116,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":117,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":118,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":119,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":120,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":121,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":122,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":123,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":124,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":125,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":126,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":127,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":128,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":129,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":130,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":131,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":132,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":133,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1011.2067}},{"period":134,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":135,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":136,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":137,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":138,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":139,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":140,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":141,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":142,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":143,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":144,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":145,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":146,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":147,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":148,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":149,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":150,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":151,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":152,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":153,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":154,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":155,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":156,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":157,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":158,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":159,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":160,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":161,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":162,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":163,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":164,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1008.5515}},{"period":165,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":166,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":167,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":168,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":169,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":170,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":171,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":172,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":173,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":174,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":175,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":176,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":177,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":178,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":179,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":180,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":181,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":182,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":183,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":184,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":185,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":186,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":187,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":188,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":189,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":190,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":191,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":192,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":193,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":194,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":195,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":196,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":197,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":198,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":199,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":200,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":201,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":202,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":203,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":204,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":205,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":206,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":207,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":208,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":209,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":210,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":211,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":212,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":213,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":214,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":215,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":216,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":217,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":218,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":219,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":220,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":221,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":222,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":223,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":224,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":225,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":226,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":227,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":228,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":229,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":230,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":231,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":232,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":233,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":234,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":235,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":236,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":237,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":238,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":239,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":240,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":241,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":242,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":243,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":244,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":245,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":246,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":247,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":248,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":249,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":250,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":251,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":252,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":253,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":254,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":255,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":256,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":257,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":258,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":259,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":260,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":261,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":262,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":263,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":264,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":265,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":266,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":267,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":268,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":269,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":270,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":271,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":272,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":273,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":274,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":275,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":276,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":277,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":278,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":279,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":280,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":281,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":282,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":283,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":284,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":285,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":286,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":287,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":288,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":289,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":290,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":291,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":292,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":293,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":294,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":295,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":296,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":297,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":298,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":299,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":300,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":301,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":302,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":303,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":304,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":305,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":306,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":307,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":308,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":309,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":310,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":311,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":312,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":313,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":314,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":315,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":316,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":317,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":318,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":319,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":320,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":321,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":322,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":323,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":324,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":325,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":326,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":327,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":328,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":329,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":330,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":331,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":332,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":333,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":334,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":335,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":336,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":337,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":338,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":339,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":340,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":341,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":342,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":343,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":344,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":345,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":346,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":347,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":348,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":349,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":350,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":351,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":352,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":353,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":354,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":355,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":356,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":357,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":358,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":359,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":360,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":361,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":362,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":363,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":364,"nodeId":"processors","values":{"quantity_available":640.0,"unit_price":1045.6722}},{"period":0,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":1,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":2,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":3,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":4,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":5,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":6,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":7,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":8,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":9,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":10,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":11,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":12,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":13,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":14,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1458.1023}},{"period":15,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1430.1374}},{"period":16,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1430.1374}},{"period":17,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1430.1374}},{"period":18,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1430.1374}},{"period":19,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1430.1374}},{"period":20,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1430.1374}},{"period":21,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":22,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":23,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":24,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":25,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":26,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":27,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":28,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":29,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":30,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":31,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":32,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":33,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":34,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":35,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":36,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":37,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":38,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":39,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":40,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":41,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":42,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":43,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":44,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1431.2955}},{"period":45,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1369.6039}},{"period":46,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1369.6039}},{"period":47,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1369.6039}},{"period":48,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1369.6039}},{"period":49,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1369.6039}},{"period":50,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1369.6039}},{"period":51,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":52,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":53,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":54,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":55,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":56,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":57,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":58,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":59,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":60,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":61,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":62,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":63,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":64,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":65,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":66,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":67,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":68,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":69,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":70,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":71,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":72,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":73,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":74,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":75,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":76,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":77,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":78,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":79,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":80,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":81,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":82,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":83,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":84,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":85,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":86,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":87,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":88,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":89,"nodeId":"feed_manufacturers","values":{"quantity_available":544.0,"unit_price":1368.5889}},{"period":90,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":91,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":92,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":93,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":94,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":95,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":96,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":97,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":98,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":99,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":100,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":101,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":102,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":103,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":104,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1157.548}},{"period":105,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":106,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":107,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":108,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":109,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":110,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":111,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":112,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":113,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":114,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":115,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":116,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":117,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":118,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":119,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":120,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":121,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":122,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":123,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":124,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":125,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":126,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":127,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":128,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":129,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":130,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":131,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":132,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":133,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1174.2023}},{"period":134,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":135,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":136,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":137,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":138,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":139,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":140,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":141,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":142,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":143,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":144,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":145,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":146,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":147,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":148,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":149,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":150,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":151,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":152,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":153,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":154,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":155,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":156,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":157,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":158,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":159,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":160,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":161,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":162,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":163,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":164,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1171.2816}},{"period":165,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":166,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":167,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":168,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":169,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":170,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":171,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":172,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":173,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":174,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":175,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":176,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":177,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":178,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":179,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":180,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":181,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":182,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":183,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":184,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":185,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":186,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":187,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":188,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":189,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":190,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":191,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":192,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":193,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":194,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":195,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":196,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":197,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":198,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":199,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":200,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":201,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":202,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":203,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":204,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":205,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":206,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":207,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":208,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":209,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":210,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":211,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":212,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":213,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":214,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":215,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":216,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":217,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":218,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":219,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":220,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":221,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":222,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":223,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":224,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":225,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":226,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":227,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":228,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":229,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":230,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":231,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":232,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":233,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":234,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":235,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":236,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":237,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":238,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":239,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":240,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":241,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":242,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":243,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":244,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":245,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":246,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":247,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":248,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":249,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":250,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":251,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":252,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":253,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":254,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":255,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":256,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":257,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":258,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":259,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":260,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":261,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":262,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":263,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":264,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":265,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":266,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":267,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":268,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":269,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":270,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":271,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":272,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":273,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":274,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":275,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":276,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":277,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":278,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":279,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":280,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":281,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":282,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":283,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":284,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":285,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":286,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":287,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":288,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":289,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":290,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":291,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":292,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":293,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":294,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":295,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":296,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":297,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":298,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":299,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":300,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":301,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":302,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":303,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":304,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":305,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":306,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":307,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":308,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":309,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":310,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":311,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":312,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":313,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":314,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":315,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":316,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":317,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":318,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":319,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":320,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":321,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":322,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":323,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":324,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":325,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":326,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":327,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":328,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":329,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":330,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":331,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":332,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":333,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":334,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":335,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":336,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":337,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":338,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":339,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":340,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":341,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":342,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":343,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":344,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":345,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":346,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":347,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":348,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":349,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":350,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":351,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":352,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":353,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":354,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":355,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":356,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":357,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":358,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":359,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":360,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":361,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":362,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":363,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":364,"nodeId":"feed_manufacturers","values":{"quantity_available":640.0,"unit_price":1212.1144}},{"period":0,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":1,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":2,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":3,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":4,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":5,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":6,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":7,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":8,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":9,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":10,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":11,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":12,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":13,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":14,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1622.3975}},{"period":15,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1592.1954}},{"period":16,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1592.1954}},{"period":17,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1592.1954}},{"period":18,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1592.1954}},{"period":19,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1592.1954}},{"period":20,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1592.1954}},{"period":21,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":22,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":23,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":24,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":25,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":26,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":27,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":28,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":29,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":30,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":31,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":32,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":33,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":34,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":35,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":36,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":37,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":38,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":39,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":40,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":41,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":42,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":43,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":44,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1593.4462}},{"period":45,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1526.8192}},{"period":46,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1526.8192}},{"period":47,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1526.8192}},{"period":48,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1526.8192}},{"period":49,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1526.8192}},{"period":50,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1526.8192}},{"period":51,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":52,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":53,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":54,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":55,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":56,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":57,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":58,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":59,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":60,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":61,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":62,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":63,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":64,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":65,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":66,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":67,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":68,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":69,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":70,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":71,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":72,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":73,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":74,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":75,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":76,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":77,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":78,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":79,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":80,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":81,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":82,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":83,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":84,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":85,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":86,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":87,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":88,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":89,"nodeId":"feed_traders","values":{"quantity_available":544.0,"unit_price":1525.723}},{"period":90,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":91,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":92,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":93,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":94,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":95,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":96,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":97,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":98,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":99,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":100,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":101,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":102,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":103,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":104,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1290.6518}},{"period":105,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":106,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":107,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":108,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":109,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":110,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":111,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":112,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":113,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":114,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":115,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":116,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":117,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":118,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":119,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":120,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":121,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":122,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":123,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":124,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":125,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":126,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":127,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":128,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":129,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":130,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":131,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":132,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":133,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1308.6385}},{"period":134,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":135,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":136,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":137,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":138,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":139,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":140,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":141,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":142,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":143,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":144,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":145,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":146,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":147,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":148,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":149,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":150,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":151,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":152,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":153,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":154,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":155,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":156,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":157,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":158,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":159,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":160,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":161,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":162,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":163,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":164,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1305.4842}},{"period":165,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":166,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":167,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":168,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":169,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":170,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":171,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":172,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":173,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":174,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":175,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":176,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":177,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":178,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":179,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":180,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":181,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":182,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":183,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":184,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":185,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":186,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":187,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":188,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":189,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":190,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":191,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":192,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":193,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":194,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":195,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":196,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":197,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":198,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":199,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":200,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":201,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":202,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":203,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":204,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":205,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":206,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":207,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":208,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":209,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":210,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":211,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":212,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":213,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":214,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":215,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":216,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":217,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":218,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":219,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":220,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":221,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":222,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":223,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":224,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":225,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":226,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":227,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":228,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":229,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":230,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":231,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":232,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":233,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":234,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":235,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":236,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":237,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":238,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":239,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":240,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":241,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":242,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":243,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":244,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":245,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":246,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":247,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":248,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":249,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":250,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":251,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":252,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":253,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":254,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":255,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":256,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":257,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":258,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":259,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":260,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":261,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":262,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":263,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":264,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":265,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":266,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":267,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":268,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":269,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":270,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":271,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":272,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":273,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":274,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":275,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":276,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":277,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":278,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":279,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":280,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":281,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":282,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":283,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":284,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":285,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":286,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":287,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":288,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":289,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":290,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":291,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":292,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":293,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":294,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":295,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":296,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":297,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":298,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":299,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":300,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":301,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":302,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":303,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":304,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":305,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":306,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":307,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":308,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":309,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":310,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":311,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":312,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":313,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":314,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":315,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":316,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":317,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":318,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":319,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":320,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":321,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":322,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":323,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":324,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":325,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":326,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":327,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":328,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":329,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":330,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":331,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":332,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":333,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":334,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":335,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":336,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":337,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":338,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":339,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":340,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":341,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":342,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":343,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":344,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":345,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":346,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":347,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":348,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":349,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":350,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":351,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":352,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":353,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":354,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":355,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":356,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":357,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":358,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":359,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":360,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":361,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":362,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":363,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":364,"nodeId":"feed_traders","values":{"quantity_available":640.0,"unit_price":1349.5835}},{"period":0,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":1,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":2,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":3,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":4,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":5,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":6,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":7,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":8,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":9,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":10,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":11,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":12,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":13,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":14,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":15,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":16,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":17,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":18,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":19,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":20,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":21,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":22,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":23,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":24,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":25,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":26,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":27,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":28,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":29,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":30,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":31,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":32,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":33,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":34,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":35,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":36,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":37,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":38,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":39,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":40,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":41,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":42,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":43,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":44,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":45,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":46,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":47,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":48,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":49,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":50,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":51,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":52,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":53,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":54,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":55,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":56,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":57,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":58,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":59,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":60,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":61,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":62,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":63,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":64,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":65,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":66,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":67,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":68,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":69,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":70,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":71,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":72,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":73,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":74,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":75,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":76,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":77,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":78,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":79,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":80,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":81,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":82,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":83,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":84,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":85,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":86,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":87,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":88,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":89,"nodeId":"eu_farmers","values":{"feed_received":544.0,"livestock_output":544.0,"active":true}},{"period":90,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":91,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":92,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":93,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":94,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":95,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":96,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":97,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":98,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":99,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":100,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":101,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":102,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":103,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":104,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":105,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":106,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":107,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":108,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":109,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":110,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":111,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":112,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":113,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":114,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":115,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":116,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":117,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":118,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":119,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":120,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":121,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":122,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":123,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":124,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":125,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":126,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":127,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":128,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":129,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":130,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":131,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":132,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":133,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":134,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":135,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":136,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":137,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":138,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":139,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":140,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":141,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":142,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":143,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":144,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":145,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":146,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":147,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":148,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":149,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":150,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":151,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":152,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":153,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":154,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":155,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":156,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":157,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":158,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":159,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":160,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":161,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":162,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":163,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":164,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":165,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":166,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":167,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":168,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":169,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":170,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":171,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":172,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":173,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":174,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":175,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":176,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":177,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":178,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":179,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":180,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":181,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":182,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":183,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":184,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":185,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":186,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":187,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":188,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":189,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":190,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":191,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":192,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":193,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":194,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":195,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":196,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":197,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":198,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":199,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":200,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":201,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":202,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":203,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":204,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":205,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":206,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":207,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":208,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":209,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":210,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":211,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":212,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":213,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":214,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":215,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":216,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":217,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":218,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":219,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":220,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":221,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":222,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":223,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":224,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":225,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":226,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":227,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":228,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":229,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":230,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":231,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":232,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":233,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":234,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":235,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":236,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":237,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":238,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":239,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":240,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":241,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":242,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":243,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":244,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":245,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":246,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":247,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":248,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":249,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":250,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":251,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":252,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":253,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":254,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":255,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":256,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":257,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":258,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":259,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":260,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":261,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":262,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":263,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":264,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":265,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":266,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":267,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":268,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":269,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":270,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":271,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":272,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":273,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":274,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":275,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":276,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":277,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":278,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":279,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":280,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":281,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":282,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":283,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":284,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":285,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":286,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":287,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":288,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":289,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":290,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":291,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":292,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":293,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":294,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":295,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":296,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":297,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":298,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":299,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":300,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":301,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":302,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":303,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":304,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":305,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":306,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":307,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":308,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":309,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":310,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":311,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":312,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":313,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":314,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":315,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":316,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":317,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":318,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":319,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":320,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":321,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":322,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":323,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":324,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":325,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":326,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":327,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":328,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":329,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":330,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":331,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":332,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":333,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":334,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":335,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":336,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":337,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":338,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":339,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":340,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":341,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":342,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":343,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":344,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":345,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":346,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":347,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":348,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":349,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":350,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":351,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":352,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":353,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":354,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":355,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":356,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":357,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":358,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":359,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":360,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":361,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":362,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":363,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}},{"period":364,"nodeId":"eu_farmers","values":{"feed_received":640.0,"livestock_output":640.0,"active":true}}],"env":[{"period":0,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":1.0},{"period":1,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":2.0},{"period":2,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":3.0},{"period":3,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":4.0},{"period":4,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":5.0},{"period":5,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":6.0},{"period":6,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":7.0},{"period":7,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":8.0},{"period":8,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":9.0},{"period":9,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":10.0},{"period":10,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":11.0},{"period":11,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":12.0},{"period":12,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":13.0},{"period":13,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5575,"currentStep":14.0},{"period":14,"sojaPrice":633.6,"feedPrice":1622.3975,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1900.0,"transportUtilisation":0.5718,"currentStep":15.0},{"period":15,"sojaPrice":617.3538,"feedPrice":1592.1954,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5781,"currentStep":16.0},{"period":16,"sojaPrice":617.3538,"feedPrice":1592.1954,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5781,"currentStep":17.0},{"period":17,"sojaPrice":617.3538,"feedPrice":1592.1954,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5781,"currentStep":18.0},{"period":18,"sojaPrice":617.3538,"feedPrice":1592.1954,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5781,"currentStep":19.0},{"period":19,"sojaPrice":617.3538,"feedPrice":1592.1954,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5781,"currentStep":20.0},{"period":20,"sojaPrice":617.3538,"feedPrice":1592.1954,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5781,"currentStep":21.0},{"period":21,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5813,"currentStep":22.0},{"period":22,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":23.0},{"period":23,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":24.0},{"period":24,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":25.0},{"period":25,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":26.0},{"period":26,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":27.0},{"period":27,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":28.0},{"period":28,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":29.0},{"period":29,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":30.0},{"period":30,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":31.0},{"period":31,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":32.0},{"period":32,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":33.0},{"period":33,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":34.0},{"period":34,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":35.0},{"period":35,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":36.0},{"period":36,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":37.0},{"period":37,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":38.0},{"period":38,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":39.0},{"period":39,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":40.0},{"period":40,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":41.0},{"period":41,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":42.0},{"period":42,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":43.0},{"period":43,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":44.0},{"period":44,"sojaPrice":617.3538,"feedPrice":1593.4462,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":1950.0,"transportUtilisation":0.5836,"currentStep":45.0},{"period":45,"sojaPrice":581.5652,"feedPrice":1526.8192,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5986,"currentStep":46.0},{"period":46,"sojaPrice":581.5652,"feedPrice":1526.8192,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5986,"currentStep":47.0},{"period":47,"sojaPrice":581.5652,"feedPrice":1526.8192,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5986,"currentStep":48.0},{"period":48,"sojaPrice":581.5652,"feedPrice":1526.8192,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5986,"currentStep":49.0},{"period":49,"sojaPrice":581.5652,"feedPrice":1526.8192,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5986,"currentStep":50.0},{"period":50,"sojaPrice":581.5652,"feedPrice":1526.8192,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5986,"currentStep":51.0},{"period":51,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5954,"currentStep":52.0},{"period":52,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":53.0},{"period":53,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":54.0},{"period":54,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":55.0},{"period":55,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":56.0},{"period":56,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":57.0},{"period":57,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":58.0},{"period":58,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":59.0},{"period":59,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":60.0},{"period":60,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":61.0},{"period":61,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":62.0},{"period":62,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":63.0},{"period":63,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":64.0},{"period":64,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":65.0},{"period":65,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":66.0},{"period":66,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":67.0},{"period":67,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":68.0},{"period":68,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":69.0},{"period":69,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":70.0},{"period":70,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":71.0},{"period":71,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":72.0},{"period":72,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":73.0},{"period":73,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":74.0},{"period":74,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":75.0},{"period":75,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":76.0},{"period":76,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":77.0},{"period":77,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":78.0},{"period":78,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":79.0},{"period":79,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":80.0},{"period":80,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":81.0},{"period":81,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":82.0},{"period":82,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":83.0},{"period":83,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":84.0},{"period":84,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":85.0},{"period":85,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":86.0},{"period":86,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":87.0},{"period":87,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":88.0},{"period":88,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":89.0},{"period":89,"sojaPrice":581.5652,"feedPrice":1525.723,"shockScale":1.0,"droughtSeverity":0.4,"totalSojaSupply":2070.0,"transportUtilisation":0.5931,"currentStep":90.0},{"period":90,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":91.0},{"period":91,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":92.0},{"period":92,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":93.0},{"period":93,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":94.0},{"period":94,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":95.0},{"period":95,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":96.0},{"period":96,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":97.0},{"period":97,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":98.0},{"period":98,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":99.0},{"period":99,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":100.0},{"period":100,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":101.0},{"period":101,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":102.0},{"period":102,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":103.0},{"period":103,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":104.0},{"period":104,"sojaPrice":486.0794,"feedPrice":1290.6518,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2470.0,"transportUtilisation":0.655,"currentStep":105.0},{"period":105,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":106.0},{"period":106,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":107.0},{"period":107,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":108.0},{"period":108,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":109.0},{"period":109,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":110.0},{"period":110,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":111.0},{"period":111,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":112.0},{"period":112,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":113.0},{"period":113,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":114.0},{"period":114,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":115.0},{"period":115,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":116.0},{"period":116,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":117.0},{"period":117,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":118.0},{"period":118,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":119.0},{"period":119,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":120.0},{"period":120,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":121.0},{"period":121,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":122.0},{"period":122,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":123.0},{"period":123,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":124.0},{"period":124,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":125.0},{"period":125,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":126.0},{"period":126,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":127.0},{"period":127,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":128.0},{"period":128,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":129.0},{"period":129,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":130.0},{"period":130,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":131.0},{"period":131,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":132.0},{"period":132,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":133.0},{"period":133,"sojaPrice":496.8939,"feedPrice":1308.6385,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.655,"currentStep":134.0},{"period":134,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":135.0},{"period":135,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":136.0},{"period":136,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":137.0},{"period":137,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":138.0},{"period":138,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":139.0},{"period":139,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":140.0},{"period":140,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":141.0},{"period":141,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":142.0},{"period":142,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":143.0},{"period":143,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":144.0},{"period":144,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":145.0},{"period":145,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":146.0},{"period":146,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":147.0},{"period":147,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":148.0},{"period":148,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":149.0},{"period":149,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":150.0},{"period":150,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":151.0},{"period":151,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":152.0},{"period":152,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":153.0},{"period":153,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":154.0},{"period":154,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":155.0},{"period":155,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":156.0},{"period":156,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":157.0},{"period":157,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":158.0},{"period":158,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":159.0},{"period":159,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":160.0},{"period":160,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":161.0},{"period":161,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":162.0},{"period":162,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":163.0},{"period":163,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":164.0},{"period":164,"sojaPrice":496.8939,"feedPrice":1305.4842,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2420.0,"transportUtilisation":0.6625,"currentStep":165.0},{"period":165,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":166.0},{"period":166,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":167.0},{"period":167,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":168.0},{"period":168,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":169.0},{"period":169,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":170.0},{"period":170,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":171.0},{"period":171,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":172.0},{"period":172,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":173.0},{"period":173,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":174.0},{"period":174,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":175.0},{"period":175,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":176.0},{"period":176,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":177.0},{"period":177,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":178.0},{"period":178,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":179.0},{"period":179,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":180.0},{"period":180,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":181.0},{"period":181,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":182.0},{"period":182,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":183.0},{"period":183,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":184.0},{"period":184,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":185.0},{"period":185,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":186.0},{"period":186,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":187.0},{"period":187,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":188.0},{"period":188,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":189.0},{"period":189,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":190.0},{"period":190,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":191.0},{"period":191,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":192.0},{"period":192,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":193.0},{"period":193,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":194.0},{"period":194,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":195.0},{"period":195,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":196.0},{"period":196,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":197.0},{"period":197,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":198.0},{"period":198,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":199.0},{"period":199,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":200.0},{"period":200,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":201.0},{"period":201,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":202.0},{"period":202,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":203.0},{"period":203,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":204.0},{"period":204,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":205.0},{"period":205,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":206.0},{"period":206,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":207.0},{"period":207,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":208.0},{"period":208,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":209.0},{"period":209,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":210.0},{"period":210,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":211.0},{"period":211,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":212.0},{"period":212,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":213.0},{"period":213,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":214.0},{"period":214,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":215.0},{"period":215,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":216.0},{"period":216,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":217.0},{"period":217,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":218.0},{"period":218,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":219.0},{"period":219,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":220.0},{"period":220,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":221.0},{"period":221,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":222.0},{"period":222,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":223.0},{"period":223,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":224.0},{"period":224,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":225.0},{"period":225,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":226.0},{"period":226,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":227.0},{"period":227,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":228.0},{"period":228,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":229.0},{"period":229,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":230.0},{"period":230,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":231.0},{"period":231,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":232.0},{"period":232,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":233.0},{"period":233,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":234.0},{"period":234,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":235.0},{"period":235,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":236.0},{"period":236,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":237.0},{"period":237,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":238.0},{"period":238,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":239.0},{"period":239,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":240.0},{"period":240,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":241.0},{"period":241,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":242.0},{"period":242,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":243.0},{"period":243,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":244.0},{"period":244,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":245.0},{"period":245,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":246.0},{"period":246,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":247.0},{"period":247,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":248.0},{"period":248,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":249.0},{"period":249,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":250.0},{"period":250,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":251.0},{"period":251,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":252.0},{"period":252,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":253.0},{"period":253,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":254.0},{"period":254,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":255.0},{"period":255,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":256.0},{"period":256,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":257.0},{"period":257,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":258.0},{"period":258,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":259.0},{"period":259,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":260.0},{"period":260,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":261.0},{"period":261,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":262.0},{"period":262,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":263.0},{"period":263,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":264.0},{"period":264,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":265.0},{"period":265,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":266.0},{"period":266,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":267.0},{"period":267,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":268.0},{"period":268,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":269.0},{"period":269,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":270.0},{"period":270,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":271.0},{"period":271,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":272.0},{"period":272,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":273.0},{"period":273,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":274.0},{"period":274,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":275.0},{"period":275,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":276.0},{"period":276,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":277.0},{"period":277,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":278.0},{"period":278,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":279.0},{"period":279,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":280.0},{"period":280,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":281.0},{"period":281,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":282.0},{"period":282,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":283.0},{"period":283,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":284.0},{"period":284,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":285.0},{"period":285,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":286.0},{"period":286,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":287.0},{"period":287,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":288.0},{"period":288,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":289.0},{"period":289,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":290.0},{"period":290,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":291.0},{"period":291,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":292.0},{"period":292,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":293.0},{"period":293,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":294.0},{"period":294,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":295.0},{"period":295,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":296.0},{"period":296,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":297.0},{"period":297,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":298.0},{"period":298,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":299.0},{"period":299,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":1.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":300.0},{"period":300,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":301.0},{"period":301,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":302.0},{"period":302,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":303.0},{"period":303,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":304.0},{"period":304,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":305.0},{"period":305,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":306.0},{"period":306,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":307.0},{"period":307,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":308.0},{"period":308,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":309.0},{"period":309,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":310.0},{"period":310,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":311.0},{"period":311,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":312.0},{"period":312,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":313.0},{"period":313,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":314.0},{"period":314,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":315.0},{"period":315,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":316.0},{"period":316,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":317.0},{"period":317,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":318.0},{"period":318,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":319.0},{"period":319,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":320.0},{"period":320,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":321.0},{"period":321,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":322.0},{"period":322,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":323.0},{"period":323,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":324.0},{"period":324,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":325.0},{"period":325,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":326.0},{"period":326,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":327.0},{"period":327,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":328.0},{"period":328,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":329.0},{"period":329,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":330.0},{"period":330,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":331.0},{"period":331,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":332.0},{"period":332,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":333.0},{"period":333,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":334.0},{"period":334,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":335.0},{"period":335,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":336.0},{"period":336,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":337.0},{"period":337,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":338.0},{"period":338,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":339.0},{"period":339,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":340.0},{"period":340,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":341.0},{"period":341,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":342.0},{"period":342,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":343.0},{"period":343,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":344.0},{"period":344,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":345.0},{"period":345,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":346.0},{"period":346,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":347.0},{"period":347,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":348.0},{"period":348,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":349.0},{"period":349,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":350.0},{"period":350,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":351.0},{"period":351,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":352.0},{"period":352,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":353.0},{"period":353,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":354.0},{"period":354,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":355.0},{"period":355,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":356.0},{"period":356,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":357.0},{"period":357,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":358.0},{"period":358,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":359.0},{"period":359,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":360.0},{"period":360,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":361.0},{"period":361,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":362.0},{"period":362,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":363.0},{"period":363,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":364.0},{"period":364,"sojaPrice":523.4087,"feedPrice":1349.5835,"shockScale":0.0,"droughtSeverity":0.0,"totalSojaSupply":2300.0,"transportUtilisation":0.6625,"currentStep":365.0}]}
\ No newline at end of file
diff --git a/web/public/textures/earth-blue-marble.jpg b/web/public/textures/earth-blue-marble.jpg
new file mode 100644
index 0000000..e673a7c
Binary files /dev/null and b/web/public/textures/earth-blue-marble.jpg differ
diff --git a/web/public/textures/earth-topology.png b/web/public/textures/earth-topology.png
new file mode 100644
index 0000000..666be00
Binary files /dev/null and b/web/public/textures/earth-topology.png differ
diff --git a/web/public/textures/night-sky.png b/web/public/textures/night-sky.png
new file mode 100644
index 0000000..f5d4f2b
Binary files /dev/null and b/web/public/textures/night-sky.png differ
diff --git a/web/src/App.tsx b/web/src/App.tsx
new file mode 100644
index 0000000..81631fd
--- /dev/null
+++ b/web/src/App.tsx
@@ -0,0 +1,156 @@
+import { useEffect, useMemo, useState, type CSSProperties } from 'react'
+import type { DataSource } from './data/source'
+import type { Bundle } from './data/types'
+import { resolveScene } from './data/gazetteer'
+import { designVars } from './design/tokens'
+import GlobeView from './globe/GlobeView'
+import { buildDynamics } from './playback/dynamics'
+import Timeline from './playback/Timeline'
+import './app.css'
+
+/** How long each playback step is held, in milliseconds. */
+const STEP_INTERVAL_MS = 60
+
+interface AppProps {
+ /** Injected at the composition root. The view never names a concrete source. */
+ source: DataSource
+}
+
+function App({ source }: AppProps) {
+ const [bundle, setBundle] = useState(null)
+ const [error, setError] = useState(null)
+
+ useEffect(() => {
+ let cancelled = false
+ source
+ .getBundle()
+ .then((nextBundle) => {
+ if (!cancelled) setBundle(nextBundle)
+ })
+ .catch((reason: unknown) => {
+ if (!cancelled) setError(reason instanceof Error ? reason.message : String(reason))
+ })
+ return () => {
+ cancelled = true
+ }
+ }, [source])
+
+ return
+}
+
+interface MapViewProps {
+ bundle: Bundle | null
+ sourceName: string
+ error: string | null
+}
+
+const themeStyle = designVars as CSSProperties
+
+function MapView({ bundle, sourceName, error }: MapViewProps) {
+ // Unknown placements are deliberately absent, never silently replaced by a
+ // country centroid. The console warning is the visible integration signal.
+ const scene = useMemo(
+ () => (bundle ? resolveScene(bundle.nodes, bundle.edges) : null),
+ [bundle],
+ )
+
+ const dynamics = useMemo(() => (bundle ? buildDynamics(bundle) : null), [bundle])
+ const stepCount = dynamics?.periods.length ?? 0
+
+ const [index, setIndex] = useState(0)
+ const [playing, setPlaying] = useState(false)
+
+ // Reset and auto-play whenever a new bundle (with more than one step) loads.
+ useEffect(() => {
+ setIndex(0)
+ setPlaying(stepCount > 1)
+ }, [stepCount])
+
+ useEffect(() => {
+ if (!playing || stepCount <= 1) return
+ const id = window.setInterval(() => setIndex((i) => (i + 1) % stepCount), STEP_INTERVAL_MS)
+ return () => window.clearInterval(id)
+ }, [playing, stepCount])
+
+ useEffect(() => {
+ if (!scene) return
+ for (const unplaced of scene.unplaced) {
+ console.warn(
+ `[gazetteer] not rendered — ${unplaced.kind} "${unplaced.id}": ${unplaced.reason}`,
+ )
+ }
+ }, [scene])
+
+ if (error) {
+ return (
+
+ Failed to load the simulation bundle: {error}
+
+ )
+ }
+
+ if (!bundle || !scene || !dynamics) {
+ return (
+
+ Resolving simulation geography…
+
+ )
+ }
+
+ const firstPeriod = dynamics.periods[0] ?? 0
+ const lastPeriod = dynamics.periods[stepCount - 1] ?? 0
+ const period = dynamics.periods[index] ?? firstPeriod
+ const frame = dynamics.frameAt(period)
+ const env = dynamics.envAt(period)
+
+ return (
+
+
+
+
+
+ {stepCount > 1 && (
+ {
+ setPlaying(false)
+ setIndex(Math.max(0, Math.min(stepCount - 1, next - firstPeriod)))
+ }}
+ onTogglePlay={() => setPlaying((value) => !value)}
+ />
+ )}
+
+
+
+ )
+}
+
+export default App
diff --git a/web/src/app.css b/web/src/app.css
new file mode 100644
index 0000000..01a0453
--- /dev/null
+++ b/web/src/app.css
@@ -0,0 +1,206 @@
+:root {
+ color-scheme: dark;
+ background: #02050c;
+ font-synthesis: none;
+ text-rendering: geometricPrecision;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+html,
+body,
+#root {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+}
+
+body {
+ overflow: hidden;
+}
+
+.sim-app {
+ position: fixed;
+ inset: 0;
+ overflow: hidden;
+ background: var(--sim-color-base);
+ color: var(--sim-color-text);
+ font-family: var(--sim-font-body);
+ isolation: isolate;
+}
+
+.sim-app::before {
+ position: absolute;
+ inset: 0;
+ z-index: 1;
+ background:
+ linear-gradient(90deg, rgba(2, 5, 12, 0.54), transparent 24%, transparent 76%, rgba(2, 5, 12, 0.2)),
+ linear-gradient(0deg, rgba(2, 5, 12, 0.7), transparent 22%);
+ content: '';
+ pointer-events: none;
+}
+
+.sim-app--message {
+ display: grid;
+ place-items: center;
+ padding: 24px;
+ color: var(--sim-color-text-muted);
+ letter-spacing: 0.04em;
+}
+
+.sim-frame-heading {
+ position: fixed;
+ top: 30px;
+ left: 32px;
+ z-index: 4;
+ max-width: min(410px, calc(100vw - 64px));
+ padding-left: 17px;
+ pointer-events: none;
+}
+
+.sim-frame-heading::before {
+ position: absolute;
+ top: 1px;
+ bottom: 2px;
+ left: 0;
+ width: 1px;
+ background: linear-gradient(var(--sim-color-accent-bright), rgba(67, 183, 255, 0.08));
+ box-shadow: var(--sim-shadow-cyan);
+ content: '';
+}
+
+.sim-frame-heading h1,
+.sim-frame-heading p,
+.sim-frame-meta p {
+ margin: 0;
+}
+
+.sim-frame-eyebrow {
+ margin-bottom: 7px !important;
+ color: var(--sim-color-accent-bright);
+ font: 600 9px/1.1 var(--sim-font-mono);
+ letter-spacing: 0.18em;
+}
+
+.sim-frame-heading h1 {
+ font: 520 clamp(24px, 2.25vw, 34px)/1 var(--sim-font-display);
+ letter-spacing: -0.025em;
+ text-shadow: 0 5px 24px rgba(0, 0, 0, 0.58);
+}
+
+.sim-frame-subtitle {
+ margin-top: 7px !important;
+ color: var(--sim-color-text-muted);
+ font-size: 12px;
+ letter-spacing: 0.03em;
+}
+
+.sim-frame-meta {
+ position: fixed;
+ right: 28px;
+ bottom: 24px;
+ left: 28px;
+ z-index: 4;
+ display: flex;
+ align-items: flex-end;
+ justify-content: space-between;
+ gap: 24px;
+ color: var(--sim-color-text-muted);
+ font: 500 10px/1.4 var(--sim-font-mono);
+ letter-spacing: 0.035em;
+ pointer-events: none;
+}
+
+.sim-frame-stats {
+ display: flex;
+ align-items: center;
+ gap: 9px;
+ min-width: 0;
+ padding: 9px 12px;
+ border: 1px solid var(--sim-color-border);
+ border-radius: var(--sim-radius-md);
+ background: rgba(5, 13, 24, 0.68);
+ box-shadow: var(--sim-shadow-ambient);
+ backdrop-filter: blur(14px);
+ white-space: nowrap;
+}
+
+.sim-frame-stats code {
+ color: var(--sim-color-text);
+ font-family: inherit;
+}
+
+.sim-frame-signal {
+ width: 5px;
+ height: 5px;
+ border-radius: 50%;
+ background: var(--sim-color-positive);
+ box-shadow: 0 0 10px rgba(81, 227, 165, 0.8);
+}
+
+.sim-frame-divider {
+ width: 1px;
+ height: 10px;
+ background: var(--sim-color-border);
+}
+
+.sim-frame-unplaced {
+ color: var(--sim-color-warning);
+}
+
+.sim-frame-honesty {
+ max-width: 360px;
+ color: var(--sim-color-text-faint);
+ text-align: right;
+}
+
+@media (max-width: 600px) {
+ .sim-frame-heading {
+ top: 18px;
+ left: 18px;
+ max-width: calc(100vw - 36px);
+ padding-left: 13px;
+ }
+
+ .sim-frame-eyebrow {
+ font-size: 8px;
+ }
+
+ .sim-frame-heading h1 {
+ font-size: 24px;
+ }
+
+ .sim-frame-subtitle {
+ font-size: 10px;
+ }
+
+ .sim-frame-meta {
+ right: 14px;
+ bottom: 13px;
+ left: 14px;
+ display: grid;
+ gap: 6px;
+ font-size: 8px;
+ }
+
+ .sim-frame-stats {
+ max-width: 100%;
+ gap: 6px;
+ padding: 7px 9px;
+ overflow: hidden;
+ }
+
+ .sim-frame-honesty {
+ max-width: none;
+ padding-left: 3px;
+ text-align: left;
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ * {
+ scroll-behavior: auto !important;
+ }
+}
diff --git a/web/src/data/fixtureSource.ts b/web/src/data/fixtureSource.ts
new file mode 100644
index 0000000..5d2c0a1
--- /dev/null
+++ b/web/src/data/fixtureSource.ts
@@ -0,0 +1,157 @@
+/**
+ * fixtureSource — a hand-written `DataSource` for developing views before the
+ * real Python exporter exists (Batch 5 replaces this with `staticJsonSource`).
+ *
+ * The fixture is deliberately shaped to exercise every awkward case the F1 audit
+ * surfaced, so views are correct from day one rather than only against the happy
+ * path:
+ *
+ * - `transport_sa_santos` and `transport_eu_rtm` are ports: real coordinates,
+ * but `hasRecordedData: false` and NO entries in `ticks`. Views must render
+ * them without expecting a series.
+ * - `wholesalers` is a synthetic hub: `entityIds: []`, illustrative position.
+ * - `eu_farmers` is a pooled consumer: three `entityIds`, illustrative position,
+ * ONE recorded series.
+ * - one edge is an ocean crossing (`isSeaCrossing: true`).
+ *
+ * The flow spine is collapsed for the fixture (e.g. the Santos→Rotterdam crossing
+ * is drawn as a single sea edge rather than routed through a `sea_lane_*` node,
+ * and the EU processing tail skips `feed_manufacturers`/`feed_traders`). The real
+ * exporter will emit the full model graph; this is illustrative scaffolding.
+ */
+
+import type { DataSource } from './source'
+import type { Bundle, EnvState, Node, Tick } from './types'
+
+const HONESTY_NOTE = 'Approximate geographic positions — not GIS accurate'
+
+const PERIODS = [0, 1, 2] as const
+
+// The full geolocatable roster (from the F1 audit). Node `label`s are node-level
+// English names (used for edge annotations); per-marker display names +
+// coordinates come from the gazetteer, keyed by the entity ids below. Ports and
+// sea-lanes carry no recorded series (`hasRecordedData: false`). `food_retail` is
+// deliberately an entity the gazetteer does NOT know, to keep exercising outcome
+// 3 (drop + warn) end-to-end. The real exporter (Batch 5) emits this same shape.
+const nodes: Node[] = [
+ // Producers (real coords, recorded data)
+ { id: 'bra_farmers', label: 'Brazil soy farms', role: 'producer', entityIds: ['brazil_farms'], hasRecordedData: true },
+ { id: 'arg_farmers', label: 'Argentina soy farms', role: 'producer', entityIds: ['argentina_farms'], hasRecordedData: true },
+ { id: 'usa_farmers', label: 'US soy farms', role: 'producer', entityIds: ['us_farms'], hasRecordedData: true },
+ // Synthetic hubs (illustrative, recorded data)
+ { id: 'wholesalers', label: 'Wholesalers', role: 'wholesaler', entityIds: [], hasRecordedData: true },
+ { id: 'feed_traders', label: 'Feed traders', role: 'feed_trader', entityIds: [], hasRecordedData: true },
+ // Ports (real coords, NO recorded data)
+ { id: 'transport_sa_santos', label: 'Port of Santos', role: 'sa_santos', entityIds: ['santos_port'], hasRecordedData: false },
+ { id: 'transport_sa_paranagua', label: 'Port of Paranaguá', role: 'sa_paranagua', entityIds: ['paranagua_port'], hasRecordedData: false },
+ { id: 'transport_eu_rtm', label: 'Port of Rotterdam', role: 'eu_rtm', entityIds: ['rotterdam_port'], hasRecordedData: false },
+ { id: 'transport_eu_ham', label: 'Port of Hamburg', role: 'eu_ham', entityIds: ['hamburg_port'], hasRecordedData: false },
+ // EU processing (illustrative, recorded data)
+ { id: 'processors', label: 'EU oil mills', role: 'processor', entityIds: ['eu_oil_mills'], hasRecordedData: true },
+ { id: 'feed_manufacturers', label: 'Feed mills', role: 'feed_manufacturer', entityIds: ['feed_mills'], hasRecordedData: true },
+ // EU livestock — pooled, splits into three illustrative markers
+ { id: 'eu_farmers', label: 'EU livestock farms', role: 'consumer', entityIds: ['poultry_farms', 'pig_farms', 'dairy_farms'], hasRecordedData: true },
+ // Unknown entity — must NOT render; resolveScene should log a warning.
+ { id: 'food_retail', label: 'Food retail', role: 'service', entityIds: ['food_retail'], hasRecordedData: false },
+]
+
+const edges = [
+ // Producers -> market hub
+ { id: 'bra_farmers->wholesalers', source: 'bra_farmers', target: 'wholesalers', isSeaCrossing: false },
+ { id: 'arg_farmers->wholesalers', source: 'arg_farmers', target: 'wholesalers', isSeaCrossing: false },
+ { id: 'usa_farmers->wholesalers', source: 'usa_farmers', target: 'wholesalers', isSeaCrossing: false },
+ // Hub -> export ports
+ { id: 'wholesalers->transport_sa_santos', source: 'wholesalers', target: 'transport_sa_santos', isSeaCrossing: false },
+ { id: 'wholesalers->transport_sa_paranagua', source: 'wholesalers', target: 'transport_sa_paranagua', isSeaCrossing: false },
+ // Atlantic sea crossings (materialised sea-lanes, collapsed to port->port here)
+ { id: 'transport_sa_santos->transport_eu_rtm', source: 'transport_sa_santos', target: 'transport_eu_rtm', isSeaCrossing: true },
+ { id: 'transport_sa_paranagua->transport_eu_ham', source: 'transport_sa_paranagua', target: 'transport_eu_ham', isSeaCrossing: true },
+ // Argentina alt route + US emergency route (direct sea bypass to Rotterdam)
+ { id: 'arg_farmers->transport_eu_rtm', source: 'arg_farmers', target: 'transport_eu_rtm', isSeaCrossing: true },
+ { id: 'usa_farmers->transport_eu_rtm', source: 'usa_farmers', target: 'transport_eu_rtm', isSeaCrossing: true },
+ // EU processing chain
+ { id: 'transport_eu_rtm->processors', source: 'transport_eu_rtm', target: 'processors', isSeaCrossing: false },
+ { id: 'transport_eu_ham->processors', source: 'transport_eu_ham', target: 'processors', isSeaCrossing: false },
+ { id: 'processors->feed_manufacturers', source: 'processors', target: 'feed_manufacturers', isSeaCrossing: false },
+ { id: 'feed_manufacturers->feed_traders', source: 'feed_manufacturers', target: 'feed_traders', isSeaCrossing: false },
+ { id: 'feed_traders->eu_farmers', source: 'feed_traders', target: 'eu_farmers', isSeaCrossing: false },
+ // Edge into the unknown node — must be dropped (endpoint has no placement).
+ { id: 'eu_farmers->food_retail', source: 'eu_farmers', target: 'food_retail', isSeaCrossing: false },
+]
+
+/**
+ * Per-node per-tick values, one small ramp per period so views have something
+ * that changes over time. Keys match the recorded CSV schema for each node type
+ * (see F1). Ports carry no series and are intentionally absent.
+ */
+function valuesFor(nodeId: string, period: number): Record | null {
+ const k = period // 0,1,2 — a tiny deterministic ramp
+ switch (nodeId) {
+ case 'bra_farmers':
+ return { quantity_available: 100.0 - 5 * k, unit_price: 396.0 + 12 * k, active: true }
+ case 'arg_farmers':
+ return { quantity_available: 100.0 - 3 * k, unit_price: 462.0 + 10 * k, active: true }
+ case 'usa_farmers':
+ return { quantity_available: 100.0 + 4 * k, unit_price: 528.0 - 8 * k, active: true }
+ case 'feed_manufacturers':
+ return { quantity_available: 213.3 - 6 * k, unit_price: 1212.1 + 34 * k }
+ case 'feed_traders':
+ return { quantity_available: 213.3 - 6 * k, unit_price: 1349.6 + 40 * k }
+ case 'wholesalers':
+ return {
+ quantity_available: 766.7 - 20 * k,
+ unit_price: 523.4 + 15 * k,
+ bra_volume: 333.3 - 10 * k,
+ arg_volume: 166.7,
+ usa_volume: 266.7 + 10 * k,
+ storage_utilization: 0.268 - 0.007 * k,
+ }
+ case 'processors':
+ return { quantity_available: 213.3 - 6 * k, unit_price: 1045.7 + 30 * k }
+ case 'eu_farmers':
+ return { feed_received: 64.0 - 2 * k, livestock_output: 64.0 - 2 * k, active: true }
+ default:
+ return null // ports / anything without a recorded series
+ }
+}
+
+const ticks: Tick[] = []
+for (const n of nodes) {
+ if (!n.hasRecordedData) continue
+ for (const period of PERIODS) {
+ const values = valuesFor(n.id, period)
+ if (values !== null) ticks.push({ period, nodeId: n.id, values })
+ }
+}
+
+const env: EnvState[] = PERIODS.map((period) => ({
+ period,
+ sojaPrice: 523.4 + 15 * period,
+ feedPrice: 1349.6 + 40 * period,
+ shockScale: 0.0,
+ droughtSeverity: 0.0,
+ totalSojaSupply: 2300.0 - 60 * period,
+ transportUtilisation: 0.6625,
+ currentStep: period + 1,
+}))
+
+const bundle: Bundle = {
+ meta: {
+ pdl: 's1-soja.pdl.yaml',
+ scenario: 'soy_feed_disruption',
+ ticks: PERIODS.length,
+ generatedAt: '2026-07-28T00:00:00Z',
+ honestyNote: HONESTY_NOTE,
+ },
+ nodes,
+ edges,
+ ticks,
+ env,
+}
+
+export const fixtureSource: DataSource = {
+ name: 'fixture',
+ getBundle(): Promise {
+ return Promise.resolve(bundle)
+ },
+}
diff --git a/web/src/data/gazetteer.ts b/web/src/data/gazetteer.ts
new file mode 100644
index 0000000..458c4ba
--- /dev/null
+++ b/web/src/data/gazetteer.ts
@@ -0,0 +1,188 @@
+/**
+ * Gazetteer — the frontend coordinate authority (locked decision).
+ *
+ * Coordinates live HERE, keyed by PDL entity id, NOT in any DataSource. lat/lon
+ * are ported from branch 21's `visualization/config/layout.py` (`GROUP_ANCHORS`,
+ * `PORTS`) — projection-independent, so they carry to the globe unchanged. The
+ * equirectangular `project()` from that file is dead on a globe and not ported.
+ *
+ * This is explicitly "approximate geographic positions — not GIS accurate": some
+ * positions are real (ports, growing regions), others are illustrative (EU
+ * processing nodes and synthetic hubs have no location in the sim data).
+ *
+ * Resolution follows the THREE-outcome rule (never two):
+ * 1. Known entity -> real coordinates, rendered normally.
+ * 2. Known-illustrative -> chosen position, `illustrative: true`, visible marking.
+ * 3. Unknown entity -> NOT rendered, a warning is logged. Never fall back to a
+ * country centroid: a confident wrong placement is worse than a visible gap.
+ */
+
+import type { Edge, GeoCoord, Node } from './types'
+
+export interface GazEntry {
+ lat: number
+ lng: number
+ /** English display name for this entity's marker. */
+ label: string
+ /** True when the position is a chosen approximation, not a real location. */
+ illustrative: boolean
+}
+
+/**
+ * PDL entity id -> position. Ports and growing regions are real; EU processing
+ * entities are illustrative (no location in the sim). The three livestock
+ * entities are given distinct illustrative spots around the branch-21 EuFarmers
+ * anchor (46.5, 2.5) so the pooled `eu_farmers` node splits into three markers.
+ */
+export const GAZETTEER: Record = {
+ // Producers — real growing regions
+ brazil_farms: { lat: -13.0, lng: -56.0, label: 'Brazil soy farms', illustrative: false },
+ argentina_farms: { lat: -34.0, lng: -62.0, label: 'Argentina soy farms', illustrative: false },
+ us_farms: { lat: 42.0, lng: -93.0, label: 'US soy farms', illustrative: false },
+
+ // Ports — real locations
+ santos_port: { lat: -24.0, lng: -46.3, label: 'Port of Santos', illustrative: false },
+ paranagua_port: { lat: -25.5, lng: -48.5, label: 'Port of Paranaguá', illustrative: false },
+ rotterdam_port: { lat: 51.95, lng: 4.14, label: 'Port of Rotterdam', illustrative: false },
+ hamburg_port: { lat: 53.55, lng: 9.99, label: 'Port of Hamburg', illustrative: false },
+
+ // EU processing — illustrative (no location in the sim data)
+ eu_oil_mills: { lat: 52.0, lng: 4.5, label: 'EU oil mills', illustrative: true },
+ feed_mills: { lat: 52.5, lng: 13.0, label: 'Feed mills', illustrative: true },
+
+ // EU livestock — illustrative, three distinct spots so the pool splits visibly
+ poultry_farms: { lat: 47.6, lng: 1.2, label: 'EU poultry farms', illustrative: true },
+ pig_farms: { lat: 46.4, lng: 3.6, label: 'EU pig farms', illustrative: true },
+ dairy_farms: { lat: 45.4, lng: 2.0, label: 'EU dairy farms', illustrative: true },
+}
+
+/**
+ * Synthetic hubs have no PDL entity, so they are keyed by roster list name and
+ * are always illustrative (they are model constructs, not places).
+ */
+export const SYNTHETIC_PLACEMENTS: Record = {
+ wholesalers: { lat: -23.0, lng: -47.0, label: 'Wholesalers (hub)', illustrative: true },
+ feed_traders: { lat: 47.5, lng: 16.0, label: 'Feed traders (hub)', illustrative: true },
+}
+
+/** A single rendered marker (one node may yield several — see the pool split). */
+export interface Marker {
+ /** Unique marker id: node id, or `${nodeId}::${entityId}` for a split node. */
+ id: string
+ /** Owning bundle node id (the join key for time-series). */
+ nodeId: string
+ label: string
+ role: string
+ lat: number
+ lng: number
+ illustrative: boolean
+ hasRecordedData: boolean
+}
+
+/** An edge with both endpoints resolved to coordinates, ready for `arcsData`. */
+export interface ResolvedEdge {
+ id: string
+ startLat: number
+ startLng: number
+ endLat: number
+ endLng: number
+ isSeaCrossing: boolean
+ /** "Source → Target" in English, for the edge annotation. */
+ label: string
+}
+
+/** A node/edge that could not be placed, with the reason (for logging/UI). */
+export interface Unplaced {
+ kind: 'node' | 'edge'
+ id: string
+ reason: string
+}
+
+export interface Scene {
+ markers: Marker[]
+ edges: ResolvedEdge[]
+ unplaced: Unplaced[]
+}
+
+/** Average of a node's marker coordinates — the endpoint an edge attaches to. */
+function centroid(coords: GeoCoord[]): GeoCoord {
+ const n = coords.length
+ const sum = coords.reduce((a, c) => ({ lat: a.lat + c.lat, lng: a.lng + c.lng }), { lat: 0, lng: 0 })
+ return { lat: sum.lat / n, lng: sum.lng / n }
+}
+
+/**
+ * Resolve bundle nodes + edges into renderable markers + resolved edges, applying
+ * the three-outcome rule. Unknown entities are dropped and reported (outcome 3);
+ * an edge whose source or target has no placement is likewise dropped.
+ */
+export function resolveScene(nodes: Node[], edges: Edge[]): Scene {
+ const markers: Marker[] = []
+ const unplaced: Unplaced[] = []
+ const repById = new Map()
+
+ for (const node of nodes) {
+ const placed: GeoCoord[] = []
+
+ if (node.entityIds.length === 0) {
+ // Synthetic hub — keyed by list name.
+ const g = SYNTHETIC_PLACEMENTS[node.id]
+ if (g) {
+ markers.push(toMarker(node.id, node, g))
+ placed.push({ lat: g.lat, lng: g.lng })
+ } else {
+ unplaced.push({ kind: 'node', id: node.id, reason: 'synthetic hub with no placement' })
+ }
+ } else {
+ // One marker per entity id. A single-entity node yields one; a pooled node
+ // (e.g. eu_farmers) yields several — the required 3-way livestock split.
+ for (const eid of node.entityIds) {
+ const g = GAZETTEER[eid]
+ if (g) {
+ const markerId = node.entityIds.length > 1 ? `${node.id}::${eid}` : node.id
+ markers.push(toMarker(markerId, node, g))
+ placed.push({ lat: g.lat, lng: g.lng })
+ } else {
+ unplaced.push({ kind: 'node', id: `${node.id} (${eid})`, reason: 'entity not in gazetteer' })
+ }
+ }
+ }
+
+ if (placed.length > 0) repById.set(node.id, centroid(placed))
+ }
+
+ const nameById = new Map(nodes.map((n) => [n.id, n.label]))
+ const resolvedEdges: ResolvedEdge[] = []
+ for (const e of edges) {
+ const s = repById.get(e.source)
+ const t = repById.get(e.target)
+ if (!s || !t) {
+ unplaced.push({ kind: 'edge', id: e.id, reason: 'endpoint has no placement' })
+ continue
+ }
+ resolvedEdges.push({
+ id: e.id,
+ startLat: s.lat,
+ startLng: s.lng,
+ endLat: t.lat,
+ endLng: t.lng,
+ isSeaCrossing: e.isSeaCrossing,
+ label: `${nameById.get(e.source) ?? e.source} → ${nameById.get(e.target) ?? e.target}`,
+ })
+ }
+
+ return { markers, edges: resolvedEdges, unplaced }
+}
+
+function toMarker(id: string, node: Node, g: GazEntry): Marker {
+ return {
+ id,
+ nodeId: node.id,
+ label: g.label,
+ role: node.role,
+ lat: g.lat,
+ lng: g.lng,
+ illustrative: g.illustrative,
+ hasRecordedData: node.hasRecordedData,
+ }
+}
diff --git a/web/src/data/source.ts b/web/src/data/source.ts
new file mode 100644
index 0000000..7ebef34
--- /dev/null
+++ b/web/src/data/source.ts
@@ -0,0 +1,22 @@
+/**
+ * The DataSource seam (Issue #23, locked decision).
+ *
+ * Every view depends on THIS interface and never on a concrete source. Today the
+ * only implementation is `fixtureSource` (hand-written JSON); Batch 5 adds a
+ * `staticJsonSource` reading an exported bundle, and a `PostgresSource` follows
+ * later when palaestrAI connects. Because views only ever see `DataSource`, those
+ * swaps touch zero view files — that swappability is the whole point of the seam.
+ *
+ * The interface is intentionally async (returns a Promise) so a network- or
+ * DB-backed implementation fits without changing any caller.
+ */
+
+import type { Bundle } from './types'
+
+export interface DataSource {
+ /** A short identifier for the active source, useful for diagnostics/UI. */
+ readonly name: string
+
+ /** Load the full bundle for the current run. */
+ getBundle(): Promise
+}
diff --git a/web/src/data/staticJsonSource.ts b/web/src/data/staticJsonSource.ts
new file mode 100644
index 0000000..c83bdf6
--- /dev/null
+++ b/web/src/data/staticJsonSource.ts
@@ -0,0 +1,100 @@
+/**
+ * staticJsonSource — a `DataSource` backed by an exported `bundle.json`.
+ *
+ * This is the Batch-5 swap target: it reads the JSON the Python exporter
+ * (`provider_simenv.export_bundle`) writes from a simulation run's CSVs, and is
+ * selected at the composition root (`main.tsx`) in place of `fixtureSource`
+ * without touching any view file.
+ *
+ * The fetched payload is untrusted input, so it crosses a structural check
+ * (`parseBundle`) before any view sees it, rather than being cast blindly.
+ */
+
+import type { DataSource } from './source'
+import type { Bundle, Edge, EnvState, Node, Tick } from './types'
+
+const BUNDLE_URL = '/bundle.json'
+
+function isObject(value: unknown): value is Record {
+ return typeof value === 'object' && value !== null
+}
+
+function requireArray(value: unknown, field: string): unknown[] {
+ if (!Array.isArray(value)) throw new Error(`bundle.${field} must be an array`)
+ return value
+}
+
+/** Validate the fetched payload at the trust boundary and return a typed Bundle. */
+export function parseBundle(input: unknown): Bundle {
+ if (!isObject(input)) throw new Error('bundle must be an object')
+ if (!isObject(input.meta)) throw new Error('bundle.meta must be an object')
+
+ const nodes = requireArray(input.nodes, 'nodes').map((n): Node => {
+ if (!isObject(n)) throw new Error('bundle.nodes[] must be objects')
+ return {
+ id: String(n.id),
+ label: String(n.label),
+ role: String(n.role),
+ entityIds: requireArray(n.entityIds, 'nodes[].entityIds').map(String),
+ hasRecordedData: Boolean(n.hasRecordedData),
+ }
+ })
+
+ const edges = requireArray(input.edges, 'edges').map((e): Edge => {
+ if (!isObject(e)) throw new Error('bundle.edges[] must be objects')
+ return {
+ id: String(e.id),
+ source: String(e.source),
+ target: String(e.target),
+ isSeaCrossing: Boolean(e.isSeaCrossing),
+ }
+ })
+
+ const ticks = requireArray(input.ticks, 'ticks').map((t): Tick => {
+ if (!isObject(t) || !isObject(t.values)) throw new Error('bundle.ticks[] malformed')
+ return {
+ period: Number(t.period),
+ nodeId: String(t.nodeId),
+ values: t.values as Record,
+ }
+ })
+
+ const env = requireArray(input.env, 'env').map((s): EnvState => {
+ if (!isObject(s)) throw new Error('bundle.env[] must be objects')
+ return {
+ period: Number(s.period),
+ sojaPrice: Number(s.sojaPrice),
+ feedPrice: Number(s.feedPrice),
+ shockScale: Number(s.shockScale),
+ droughtSeverity: Number(s.droughtSeverity),
+ totalSojaSupply: Number(s.totalSojaSupply),
+ transportUtilisation: Number(s.transportUtilisation),
+ currentStep: Number(s.currentStep),
+ }
+ })
+
+ const meta = input.meta as Record
+ return {
+ meta: {
+ pdl: String(meta.pdl ?? ''),
+ scenario: String(meta.scenario ?? ''),
+ ticks: Number(meta.ticks ?? env.length),
+ generatedAt: String(meta.generatedAt ?? ''),
+ honestyNote: String(meta.honestyNote ?? ''),
+ },
+ nodes,
+ edges,
+ ticks,
+ env,
+ }
+}
+
+export const staticJsonSource: DataSource = {
+ name: 'bundle.json',
+ async getBundle(): Promise {
+ const response = await fetch(BUNDLE_URL)
+ if (!response.ok) throw new Error(`bundle request failed with HTTP ${response.status}`)
+ const input: unknown = await response.json()
+ return parseBundle(input)
+ },
+}
diff --git a/web/src/data/types.ts b/web/src/data/types.ts
new file mode 100644
index 0000000..e8ce881
--- /dev/null
+++ b/web/src/data/types.ts
@@ -0,0 +1,133 @@
+/**
+ * Frozen value objects for the world-map view (Issue #23).
+ *
+ * These types are the contract between the data layer (a `DataSource`) and every
+ * view. They are shaped by the F1 schema audit of the Python model — see
+ * `web/.planning/forge/PLAN.md` and the audit notes. Key facts baked in here:
+ *
+ * - A node's stable identity is its **roster list name** (e.g. "bra_farmers",
+ * "sea_lane_santos"), NOT a PDL entity id. That is what the simulation CSV
+ * tables and `FLOW_ADJACENCY` use, and it is the only key that cleanly covers
+ * synthetic hubs (no entity) and pooled nodes (many entities). The PDL entity
+ * ids a node represents are carried alongside in `entityIds`.
+ *
+ * - Ports and sea-lanes are geographically real but carry **no recorded
+ * time-series** (they are absent from the model's DataCollector / TickWriter).
+ * `hasRecordedData` marks that so views never expect a series that isn't there.
+ *
+ * - `eu_farmers` pools three PDL entities (poultry/pig/dairy) into ONE recorded
+ * series. On the map they may appear as several illustrative markers sharing
+ * that series; `positionIsIllustrative` marks any node whose coordinate is a
+ * chosen approximation rather than a real location.
+ *
+ * - Per-tick fields differ by node type, so `Tick.values` is a keyed record
+ * rather than a fixed struct. That is the honest shape of the CSV data.
+ */
+
+/** A geographic coordinate. globe.gl consumes `lat` / `lng` directly. */
+export interface GeoCoord {
+ lat: number
+ lng: number
+}
+
+/**
+ * A supply-chain actor rendered on the map.
+ *
+ * `id` is the roster list name and is the join key for `Edge.source`/`Edge.target`
+ * and for `Tick.nodeId`.
+ */
+export interface Node {
+ /** Stable key = roster model-attr list name, e.g. "bra_farmers". */
+ id: string
+ /** Node-level English display name (used for edge labels), e.g. "Brazil soy farms". */
+ label: string
+ /** Agent role, e.g. "producer" | "wholesaler" | "sea_santos". */
+ role: string
+ /** PDL entity ids this node represents. Empty for synthetic hubs. */
+ entityIds: string[]
+ /**
+ * False for ports and sea-lanes, which exist structurally but produce no
+ * per-tick rows. Views must not expect a time-series for these nodes.
+ */
+ hasRecordedData: boolean
+}
+
+/*
+ * NOTE — coordinates are deliberately NOT on `Node`. Per the locked decision,
+ * placement is a FRONTEND concern resolved from `gazetteer.ts` keyed by PDL
+ * entity id, so a DataSource (fixture now, exported JSON / Postgres later) never
+ * carries geography. This is the documented seam boundary: swapping the data
+ * source can never move a marker.
+ */
+
+/**
+ * A directed flow between two nodes, from the model's `FLOW_ADJACENCY`.
+ *
+ * `source`/`target` are node ids. Some edges pass through synthetic hubs
+ * (`wholesalers`, `feed_traders`) that have no real location.
+ */
+export interface Edge {
+ /** Stable key, e.g. "bra_farmers->wholesalers". */
+ id: string
+ /** Upstream node id (the source of the flow). */
+ source: string
+ /** Downstream node id (the destination of the flow). */
+ target: string
+ /** True when this edge is an ocean crossing (a materialised sea-lane). */
+ isSeaCrossing: boolean
+}
+
+/**
+ * One recorded state snapshot for a single node at a single simulation step.
+ *
+ * `values` keys vary by node type — e.g. producers carry
+ * `quantity_available` / `unit_price` / `active`; wholesalers additionally carry
+ * per-origin volumes and storage utilisation; `eu_farmers` carries
+ * `feed_received` / `livestock_output` / `active`.
+ */
+export interface Tick {
+ /** Simulation step (the CSV `period`). */
+ period: number
+ /** Node id this snapshot belongs to. */
+ nodeId: string
+ /** Recorded properties for this node at this step. */
+ values: Record
+}
+
+/** One environment-level state snapshot for a single simulation step. */
+export interface EnvState {
+ period: number
+ sojaPrice: number
+ feedPrice: number
+ shockScale: number
+ droughtSeverity: number
+ totalSojaSupply: number
+ transportUtilisation: number
+ currentStep: number
+}
+
+/** Metadata describing the run a bundle came from. */
+export interface BundleMeta {
+ /** PDL file the run was driven by, e.g. "s1-soja.pdl.yaml". */
+ pdl: string
+ /** Scenario id, e.g. "soy_feed_disruption". */
+ scenario: string
+ /** Number of simulation steps present in `ticks` / `env`. */
+ ticks: number
+ /** ISO timestamp the bundle was produced. */
+ generatedAt: string
+ /** On-screen honesty note about approximate positions. */
+ honestyNote: string
+}
+
+/**
+ * The complete payload a `DataSource` yields: the map's nodes and edges, plus the
+ * per-node and environment time-series for the whole run.
+ */
+export interface Bundle {
+ meta: BundleMeta
+ nodes: Node[]
+ edges: Edge[]
+ ticks: Tick[]
+ env: EnvState[]
+}
diff --git a/web/src/design/tokens.ts b/web/src/design/tokens.ts
new file mode 100644
index 0000000..3f94277
--- /dev/null
+++ b/web/src/design/tokens.ts
@@ -0,0 +1,123 @@
+/**
+ * Visual system for the Issue #23 globe.
+ *
+ * The globe is a realistic blue-marble Earth (NASA texture + topology bump on a
+ * night-sky field), matching the reference explorer's renderer treatment: a
+ * light-blue atmosphere rim, a slow spin, and teal supply corridors drawn as a
+ * layered glow. Keeping the values here lets later chrome reuse the same
+ * language without shipping that out-of-scope chrome in this batch.
+ */
+
+export const color = {
+ base: '#02050C',
+ surface: '#08111E',
+ surfaceRaised: '#0B1727',
+ border: 'rgba(151, 201, 239, 0.16)',
+
+ accent: '#43B7FF',
+ accentBright: '#B9E9FF',
+ positive: '#51E3A5',
+ warning: '#F6C55B',
+ muted: '#60758E',
+
+ text: '#F2F8FF',
+ textMuted: '#8298B1',
+ textFaint: '#536980',
+} as const
+
+export const typography = {
+ display: 'Bahnschrift, "Avenir Next Condensed", "Segoe UI Variable Display", sans-serif',
+ body: 'Aptos, "Segoe UI Variable Text", "Segoe UI", sans-serif',
+ mono: '"Cascadia Code", "SFMono-Regular", Consolas, monospace',
+ eyebrowTracking: '0.18em',
+} as const
+
+export const spacing = {
+ xs: 4,
+ sm: 8,
+ md: 16,
+ lg: 24,
+ xl: 32,
+} as const
+
+export const radius = {
+ sm: 6,
+ md: 12,
+ lg: 18,
+ pill: 999,
+} as const
+
+export const shadow = {
+ ambient: '0 18px 60px rgba(0, 0, 0, 0.36)',
+ cyanGlow: '0 0 26px rgba(67, 183, 255, 0.22)',
+} as const
+
+/** Static texture assets (bundled offline in web/public/textures). */
+export const texture = {
+ earth: '/textures/earth-blue-marble.jpg',
+ bump: '/textures/earth-topology.png',
+ nightSky: '/textures/night-sky.png',
+} as const
+
+export const globe = {
+ background: color.base,
+ atmosphere: '#7ec8ff',
+ atmosphereAltitude: 0.18,
+ cameraDesktop: 1.78,
+ cameraMobile: 4.4,
+ autoRotateSpeed: 0.35,
+} as const
+
+/**
+ * Supply corridors, drawn as three stacked arcs per edge (a soft wide halo, a
+ * mid glow, and a bright core) so each reads as one glowing line. The core is
+ * dash-animated so flow reads as moving from source to target. Altitude scales
+ * with arc length (`altitudeAutoScale`, like the reference) so long crossings
+ * lift clear of the globe instead of sinking through it. Teal to sit with the
+ * cyan atmosphere rather than the reference's shock-red.
+ */
+export const arc = {
+ /** Matches the globe's `arcAltitudeAutoScale`; edge apex is derived from it. */
+ altitudeAutoScale: 0.45,
+ /** Disruption colour: corridors lerp teal → this as tick intensity rises. */
+ hot: [255, 96, 80] as [number, number, number],
+ halo: { stroke: 2.8, alpha: 0.16, teal: [[57, 208, 200], [126, 224, 230]] },
+ glow: { stroke: 1.5, alpha: 0.34, teal: [[57, 208, 200], [126, 224, 230]] },
+ core: { stroke: 0.7, alpha: 0.92, teal: [[214, 255, 250], [57, 208, 200]] },
+ coreDashLength: 0.4,
+ coreDashGap: 0.22,
+ coreDashAnimateMs: 1400,
+} as const
+
+export const marker = {
+ altitude: 0.014,
+ radius: 0.34,
+ selectedRadius: 0.52,
+ haloRadius: 4.2,
+ haloSpeed: 0.55,
+ haloRepeatMs: 1800,
+} as const
+
+/** CSS custom properties consumed by the frame and annotation stylesheets. */
+export const designVars = {
+ '--sim-color-base': color.base,
+ '--sim-color-surface': color.surface,
+ '--sim-color-surface-raised': color.surfaceRaised,
+ '--sim-color-border': color.border,
+ '--sim-color-accent': color.accent,
+ '--sim-color-accent-bright': color.accentBright,
+ '--sim-color-positive': color.positive,
+ '--sim-color-warning': color.warning,
+ '--sim-color-muted': color.muted,
+ '--sim-color-text': color.text,
+ '--sim-color-text-muted': color.textMuted,
+ '--sim-color-text-faint': color.textFaint,
+ '--sim-font-display': typography.display,
+ '--sim-font-body': typography.body,
+ '--sim-font-mono': typography.mono,
+ '--sim-radius-sm': `${radius.sm}px`,
+ '--sim-radius-md': `${radius.md}px`,
+ '--sim-radius-lg': `${radius.lg}px`,
+ '--sim-shadow-ambient': shadow.ambient,
+ '--sim-shadow-cyan': shadow.cyanGlow,
+} as const
diff --git a/web/src/globe/GlobeView.tsx b/web/src/globe/GlobeView.tsx
new file mode 100644
index 0000000..97f4ae3
--- /dev/null
+++ b/web/src/globe/GlobeView.tsx
@@ -0,0 +1,307 @@
+import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import Globe, { type GlobeMethods } from 'react-globe.gl'
+import type { Marker, ResolvedEdge } from '../data/gazetteer'
+import { arc as arcTok, color, globe as globeTok, marker as markerTok, texture } from '../design/tokens'
+import { arcApex } from './geo'
+import './labels.css'
+
+const SELECTED_MARKER_ID = 'bra_farmers'
+
+type LabelKind = 'node' | 'edge'
+type ArcLayer = 'halo' | 'glow' | 'core'
+
+/** One native `htmlElementsData` entry — a node or edge annotation. */
+interface Anchor {
+ id: string
+ lat: number
+ lng: number
+ alt: number
+ text: string
+ kind: LabelKind
+ illustrative: boolean
+}
+
+/** One rendered arc. Each edge expands into a halo/glow/core stack for the glow. */
+interface ArcDatum {
+ layer: ArcLayer
+ edgeId: string
+ startLat: number
+ startLng: number
+ endLat: number
+ endLng: number
+ intensity: number
+}
+
+/** A marker with its current (quantised) playback intensity baked in. */
+interface PointDatum extends Marker {
+ intensity: number
+}
+
+/**
+ * Disruption is a near-step function, so intensity is quantised and the arc/point
+ * data is memoised on a signature of those quantised values. The data reference
+ * then only changes when disruption actually changes (a handful of times across a
+ * whole run) — three-globe reuses arc materials in between, so the dash animation
+ * runs uninterrupted instead of restarting every step.
+ */
+const INTENSITY_STEP = 0.1
+
+function quantise(value: number): number {
+ return Math.round(Math.min(1, Math.max(0, value)) / INTENSITY_STEP) * INTENSITY_STEP
+}
+
+interface GlobeViewProps {
+ markers: Marker[]
+ edges: ResolvedEdge[]
+ /** Per-node 0..1 disruption intensity for the current playback period. */
+ markerIntensity?: Record
+ /** Per-edge 0..1 disruption intensity for the current playback period. */
+ edgeIntensity?: Record
+}
+
+type Rgb = readonly [number, number, number]
+
+const NO_INTENSITY: Record = {}
+
+function mix(a: Rgb | readonly number[], b: Rgb, t: number): [number, number, number] {
+ return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t]
+}
+
+function rgba([r, g, b]: [number, number, number], alpha: number): string {
+ return `rgba(${Math.round(r)},${Math.round(g)},${Math.round(b)},${alpha})`
+}
+
+function hexToRgb(hex: string): [number, number, number] {
+ const h = hex.replace('#', '')
+ return [
+ parseInt(h.slice(0, 2), 16),
+ parseInt(h.slice(2, 4), 16),
+ parseInt(h.slice(4, 6), 16),
+ ]
+}
+
+function baseMarkerColor(marker: Marker): string {
+ if (marker.id === SELECTED_MARKER_ID) return color.text
+ if (marker.role === 'producer') return color.positive
+ if (!marker.hasRecordedData) return color.muted
+ if (marker.illustrative) return color.warning
+ return color.text
+}
+
+/** Marker colour tinted toward the disruption red by the current intensity. */
+function colorForPoint(marker: PointDatum): string {
+ const base = baseMarkerColor(marker)
+ if (marker.intensity <= 0.001) return base
+ return rgba(mix(hexToRgb(base), arcTok.hot, Math.min(1, marker.intensity) * 0.9), 1)
+}
+
+const ARC_LAYERS: ArcLayer[] = ['halo', 'glow', 'core']
+
+function arcSpec(layer: ArcLayer) {
+ return layer === 'halo' ? arcTok.halo : layer === 'glow' ? arcTok.glow : arcTok.core
+}
+
+/** Arc layer colour, lerped teal → red by the edge intensity. */
+function colorForArc(datum: ArcDatum): string[] {
+ const spec = arcSpec(datum.layer)
+ const t = Math.min(1, datum.intensity) * 0.85
+ return spec.teal.map((teal) => rgba(mix(teal, arcTok.hot, t), spec.alpha))
+}
+
+/**
+ * 3D substrate and renderer for an already-resolved scene.
+ *
+ * Node and edge annotations use globe.gl's NATIVE `htmlElementsData` layer,
+ * which projects and occludes them each frame (anchors behind the globe hide
+ * automatically) — no manual projection, occlusion, or collision code. The
+ * blue-marble texture is pre-lit and carries the look on its own, so there is
+ * no custom material, lighting, or post-processing.
+ */
+export default function GlobeView({
+ markers,
+ edges,
+ markerIntensity = NO_INTENSITY,
+ edgeIntensity = NO_INTENSITY,
+}: GlobeViewProps) {
+ const globeRef = useRef(undefined)
+ const [size, setSize] = useState({
+ width: window.innerWidth || 1280,
+ height: window.innerHeight || 720,
+ })
+
+ useEffect(() => {
+ const onResize = () =>
+ setSize({ width: window.innerWidth || 1280, height: window.innerHeight || 720 })
+ window.addEventListener('resize', onResize)
+ return () => window.removeEventListener('resize', onResize)
+ }, [])
+
+ const anchors = useMemo(() => {
+ const output: Anchor[] = []
+ for (const marker of markers) {
+ output.push({
+ id: `node:${marker.id}`,
+ lat: marker.lat,
+ lng: marker.lng,
+ alt: markerTok.altitude,
+ text: marker.label,
+ kind: 'node',
+ illustrative: marker.illustrative,
+ })
+ }
+ for (const edge of edges) {
+ // Anchor the edge label to the arc's actual rendered apex (not the
+ // great-circle midpoint) so it sits on the curve for arcs of any length.
+ const apex = arcApex(
+ { lat: edge.startLat, lng: edge.startLng },
+ { lat: edge.endLat, lng: edge.endLng },
+ arcTok.altitudeAutoScale,
+ )
+ output.push({
+ id: `edge:${edge.id}`,
+ lat: apex.lat,
+ lng: apex.lng,
+ alt: apex.alt,
+ text: edge.label,
+ kind: 'edge',
+ illustrative: false,
+ })
+ }
+ return output
+ }, [markers, edges])
+
+ // Signatures of the quantised intensities. useMemo compares deps by value, so a
+ // new-but-identical signature string keeps the previous data reference — the
+ // globe only rebuilds when disruption actually changes.
+ const markerSig = markers.map((m) => quantise(markerIntensity[m.nodeId] ?? 0)).join(',')
+ const edgeSig = edges.map((e) => quantise(edgeIntensity[e.id] ?? 0)).join(',')
+
+ const pointData = useMemo(
+ () => markers.map((marker) => ({ ...marker, intensity: quantise(markerIntensity[marker.nodeId] ?? 0) })),
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ [markers, markerSig],
+ )
+
+ // Each edge becomes three stacked arcs (soft halo, mid glow, bright core).
+ const arcData = useMemo(
+ () =>
+ edges.flatMap((edge) =>
+ ARC_LAYERS.map((layer) => ({
+ layer,
+ edgeId: edge.id,
+ startLat: edge.startLat,
+ startLng: edge.startLng,
+ endLat: edge.endLat,
+ endLng: edge.endLng,
+ intensity: quantise(edgeIntensity[edge.id] ?? 0),
+ })),
+ ),
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ [edges, edgeSig],
+ )
+
+ const selectedMarker = useMemo(
+ () => markers.find((marker) => marker.id === SELECTED_MARKER_ID) ?? markers[0],
+ [markers],
+ )
+
+ // The native html layer positions and centres the OUTER node on the projected
+ // point each frame; the inner label offsets itself (nodes float above their
+ // marker, edge labels sit on the arc apex).
+ const makeAnchorElement = useCallback((datum: object) => {
+ const anchor = datum as Anchor
+ const outer = document.createElement('div')
+ outer.className = `sim-anchor sim-anchor--${anchor.kind}`
+ const label = document.createElement('div')
+ label.className = `sim-label sim-label--${anchor.kind}${
+ anchor.illustrative ? ' sim-label--illustrative' : ''
+ }`
+ label.textContent = anchor.text
+ outer.appendChild(label)
+ return outer
+ }, [])
+
+ const handleGlobeReady = useCallback(() => {
+ const globe = globeRef.current
+ if (!globe) return
+ const mobile = window.innerWidth <= 600
+ globe.pointOfView(
+ { lat: 7, lng: -54, altitude: mobile ? globeTok.cameraMobile : globeTok.cameraDesktop },
+ 0,
+ )
+
+ const controls = globe.controls()
+ controls.autoRotate = true
+ controls.autoRotateSpeed = globeTok.autoRotateSpeed
+ controls.enableDamping = true
+ controls.dampingFactor = 0.08
+ controls.minDistance = globe.getGlobeRadius() * 1.38
+ controls.maxDistance = globe.getGlobeRadius() * 6.2
+ }, [])
+
+ const mobile = size.width <= 600
+ const globeOffset: [number, number] = [0, mobile ? -10 : -8]
+
+ return (
+
+ (datum as PointDatum).lat}
+ pointLng={(datum) => (datum as PointDatum).lng}
+ pointColor={(datum: object) => colorForPoint(datum as PointDatum)}
+ pointAltitude={markerTok.altitude}
+ pointRadius={(datum: object) => {
+ const point = datum as PointDatum
+ const base = point.id === SELECTED_MARKER_ID ? markerTok.selectedRadius : markerTok.radius
+ return base * (1 + Math.min(1, point.intensity) * 0.7)
+ }}
+ pointResolution={18}
+ pointsMerge={false}
+ pointsTransitionDuration={0}
+ ringsData={selectedMarker ? [selectedMarker] : []}
+ ringLat={(datum) => (datum as Marker).lat}
+ ringLng={(datum) => (datum as Marker).lng}
+ ringAltitude={markerTok.altitude * 0.5}
+ ringColor={[color.text, 'rgba(185, 233, 255, 0.42)', 'rgba(67, 183, 255, 0)']}
+ ringMaxRadius={markerTok.haloRadius}
+ ringPropagationSpeed={markerTok.haloSpeed}
+ ringRepeatPeriod={markerTok.haloRepeatMs}
+ ringResolution={96}
+ arcsData={arcData}
+ arcStartLat={(datum) => (datum as ArcDatum).startLat}
+ arcStartLng={(datum) => (datum as ArcDatum).startLng}
+ arcEndLat={(datum) => (datum as ArcDatum).endLat}
+ arcEndLng={(datum) => (datum as ArcDatum).endLng}
+ arcAltitudeAutoScale={arcTok.altitudeAutoScale}
+ arcColor={(datum: object) => colorForArc(datum as ArcDatum)}
+ arcStroke={(datum: object) => arcSpec((datum as ArcDatum).layer).stroke}
+ arcDashLength={(datum: object) =>
+ (datum as ArcDatum).layer === 'core' ? arcTok.coreDashLength : 1
+ }
+ arcDashGap={(datum: object) => ((datum as ArcDatum).layer === 'core' ? arcTok.coreDashGap : 0)}
+ arcDashAnimateTime={(datum: object) =>
+ (datum as ArcDatum).layer === 'core' ? arcTok.coreDashAnimateMs : 0
+ }
+ arcsTransitionDuration={0}
+ htmlElementsData={anchors}
+ htmlLat={(datum: object) => (datum as Anchor).lat}
+ htmlLng={(datum: object) => (datum as Anchor).lng}
+ htmlAltitude={(datum: object) => (datum as Anchor).alt}
+ htmlElement={makeAnchorElement}
+ />
+
+ )
+}
diff --git a/web/src/globe/geo.ts b/web/src/globe/geo.ts
new file mode 100644
index 0000000..50f181e
--- /dev/null
+++ b/web/src/globe/geo.ts
@@ -0,0 +1,103 @@
+/**
+ * Geographic helpers for placing annotations on the rendered globe.
+ *
+ * Edge-label placement is the non-obvious piece. globe.gl (three-globe) does NOT
+ * draw an arc along the geographic great circle: it builds a cubic Bézier through
+ * the great-circle points at t=0.25 and t=0.75, each lifted to 1.5× the arc's
+ * apex altitude, from surface start to surface end. For a long arc at a small
+ * fixed altitude the Bézier apex sinks below the surface and the middle of the
+ * arc is occluded — so labels must anchor to the ACTUAL Bézier apex, not the
+ * great-circle midpoint, and the arc altitude must scale with length.
+ *
+ * `arcApex` replicates three-globe's `calcCurve` exactly (same control-point
+ * placement, altitude auto-scaling, and axis convention) and returns the apex as
+ * lat/lng/alt, so a label anchored there sits on the rendered curve.
+ */
+
+export interface LatLng {
+ lat: number
+ lng: number
+}
+
+export interface Apex {
+ lat: number
+ lng: number
+ alt: number
+}
+
+const DEG = Math.PI / 180
+
+/** Wrap a longitude in degrees into the (-180, 180] range. */
+function wrapLng(lng: number): number {
+ return ((((lng + 180) % 360) + 360) % 360) - 180
+}
+
+type Vec3 = [number, number, number]
+
+/** three-globe's polar→cartesian on a unit sphere (radius 1 + altitude). */
+function polarToCartesian(lat: number, lng: number, alt: number): Vec3 {
+ const phi = (90 - lat) * DEG
+ const theta = (90 - lng) * DEG
+ const r = 1 + alt
+ const sinPhi = Math.sin(phi)
+ return [r * sinPhi * Math.cos(theta), r * Math.cos(phi), r * sinPhi * Math.sin(theta)]
+}
+
+/** Inverse of `polarToCartesian`. */
+function cartesianToPolar([x, y, z]: Vec3): Apex {
+ const r = Math.hypot(x, y, z)
+ const lat = 90 - (Math.acos(y / r) / DEG)
+ const lng = wrapLng(90 - (Math.atan2(z, x) / DEG))
+ return { lat, lng, alt: r - 1 }
+}
+
+function dot3(a: Vec3, b: Vec3): number {
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]
+}
+
+/** Great-circle (spherical) interpolation between two lat/lng points. */
+function slerp(a: LatLng, b: LatLng, t: number): LatLng {
+ const va = polarToCartesian(a.lat, a.lng, 0)
+ const vb = polarToCartesian(b.lat, b.lng, 0)
+ const omega = Math.acos(Math.max(-1, Math.min(1, dot3(va, vb))))
+ if (omega === 0) return { lat: a.lat, lng: a.lng }
+ const s1 = Math.sin((1 - t) * omega) / Math.sin(omega)
+ const s2 = Math.sin(t * omega) / Math.sin(omega)
+ const p = cartesianToPolar([
+ s1 * va[0] + s2 * vb[0],
+ s1 * va[1] + s2 * vb[1],
+ s1 * va[2] + s2 * vb[2],
+ ])
+ return { lat: p.lat, lng: p.lng }
+}
+
+/**
+ * The rendered apex of a globe.gl arc, replicating three-globe's `calcCurve`.
+ *
+ * `altitudeAutoScale` matches the `arcAltitudeAutoScale` set on the globe: with a
+ * null arc altitude, three-globe uses `geoDistance/2 * autoScale`. Control points
+ * sit at the great-circle 0.25/0.75 points lifted to 1.5× that altitude; the apex
+ * is the cubic Bézier evaluated at t=0.5.
+ */
+export function arcApex(a: LatLng, b: LatLng, altitudeAutoScale: number): Apex {
+ const va = polarToCartesian(a.lat, a.lng, 0)
+ const vb = polarToCartesian(b.lat, b.lng, 0)
+ const angular = Math.acos(Math.max(-1, Math.min(1, dot3(va, vb))))
+ const altitude = (angular / 2) * altitudeAutoScale
+ const cpAlt = altitude + altitude * 0.5 // three-globe calcAltCp(0, altitude)
+
+ const g025 = slerp(a, b, 0.25)
+ const g075 = slerp(a, b, 0.75)
+ const p0 = polarToCartesian(a.lat, a.lng, 0)
+ const c1 = polarToCartesian(g025.lat, g025.lng, cpAlt)
+ const c2 = polarToCartesian(g075.lat, g075.lng, cpAlt)
+ const p3 = polarToCartesian(b.lat, b.lng, 0)
+
+ // Cubic Bézier at t=0.5: 0.125·P0 + 0.375·C1 + 0.375·C2 + 0.125·P3.
+ const mid: Vec3 = [
+ 0.125 * p0[0] + 0.375 * c1[0] + 0.375 * c2[0] + 0.125 * p3[0],
+ 0.125 * p0[1] + 0.375 * c1[1] + 0.375 * c2[1] + 0.125 * p3[1],
+ 0.125 * p0[2] + 0.375 * c1[2] + 0.375 * c2[2] + 0.125 * p3[2],
+ ]
+ return cartesianToPolar(mid)
+}
diff --git a/web/src/globe/labels.css b/web/src/globe/labels.css
new file mode 100644
index 0000000..b7356a1
--- /dev/null
+++ b/web/src/globe/labels.css
@@ -0,0 +1,92 @@
+.sim-globe-stage {
+ position: absolute;
+ inset: 0;
+ overflow: hidden;
+}
+
+.sim-globe-stage > div:first-child {
+ position: relative;
+ z-index: 0;
+}
+
+/*
+ * Native htmlElementsData anchor. globe.gl positions and centres this outer node
+ * on the projected point every frame and hides it when it falls behind the
+ * globe; the inner label offsets itself relative to this zero-size origin.
+ */
+.sim-anchor {
+ position: absolute;
+ width: 0;
+ height: 0;
+ pointer-events: none;
+}
+
+.sim-label {
+ position: absolute;
+ max-width: 210px;
+ padding: 4px 8px 4px 9px;
+ overflow: hidden;
+ border: 1px solid var(--sim-color-border);
+ border-radius: var(--sim-radius-sm);
+ background: linear-gradient(115deg, rgba(4, 13, 25, 0.9), rgba(7, 20, 35, 0.72));
+ box-shadow: 0 7px 24px rgba(0, 0, 0, 0.32), inset 2px 0 0 rgba(126, 213, 255, 0.36);
+ color: var(--sim-color-text);
+ font: 550 10px/1.2 var(--sim-font-body);
+ letter-spacing: 0.025em;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ user-select: none;
+ pointer-events: none;
+}
+
+/* Node label floats above the marker with a short connecting stem. */
+.sim-label--node {
+ left: 50%;
+ bottom: 10px;
+ transform: translateX(-50%);
+}
+
+.sim-label--node::after {
+ position: absolute;
+ left: 50%;
+ bottom: -7px;
+ width: 1px;
+ height: 7px;
+ background: linear-gradient(var(--sim-color-accent), transparent);
+ content: '';
+}
+
+/* Edge label floats just above the arc apex so the corridor stays a single
+ unbroken line underneath it (the anchor sits on the apex itself). */
+.sim-label--edge {
+ left: 50%;
+ bottom: 6px;
+ transform: translateX(-50%);
+ padding: 3px 7px;
+ border-color: rgba(93, 172, 226, 0.16);
+ background: rgba(3, 12, 24, 0.74);
+ box-shadow: none;
+ color: #a9cce4;
+ font-family: var(--sim-font-mono);
+ font-size: 8px;
+ font-weight: 450;
+ letter-spacing: 0.04em;
+}
+
+.sim-label--illustrative {
+ border-style: dashed;
+ border-color: rgba(246, 197, 91, 0.56);
+ box-shadow: 0 7px 24px rgba(0, 0, 0, 0.32), inset 2px 0 0 rgba(246, 197, 91, 0.65);
+}
+
+@media (max-width: 600px) {
+ .sim-label {
+ max-width: 42vw;
+ padding: 3px 6px;
+ font-size: 9px;
+ }
+
+ .sim-label--edge {
+ font-size: 7px;
+ }
+}
diff --git a/web/src/main.tsx b/web/src/main.tsx
new file mode 100644
index 0000000..df0d576
--- /dev/null
+++ b/web/src/main.tsx
@@ -0,0 +1,13 @@
+import { StrictMode } from 'react'
+import { createRoot } from 'react-dom/client'
+import App from './App.tsx'
+import { staticJsonSource } from './data/staticJsonSource.ts'
+
+// Composition root: the ONLY place a concrete DataSource is chosen. This swap
+// from `fixtureSource` to `staticJsonSource` (the exported run) touches no view
+// file — the seam's proof. A Postgres source later swaps in here the same way.
+createRoot(document.getElementById('root')!).render(
+
+
+ ,
+)
diff --git a/web/src/playback/Timeline.tsx b/web/src/playback/Timeline.tsx
new file mode 100644
index 0000000..4680ddd
--- /dev/null
+++ b/web/src/playback/Timeline.tsx
@@ -0,0 +1,68 @@
+import type { EnvState } from '../data/types'
+import './timeline.css'
+
+interface TimelineProps {
+ period: number
+ minPeriod: number
+ maxPeriod: number
+ playing: boolean
+ env: EnvState | null
+ onSeek: (period: number) => void
+ onTogglePlay: () => void
+}
+
+const numberFmt = new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 })
+
+/** Bottom-centre transport bar: play/pause, a scrubber, and a live env readout. */
+export default function Timeline({
+ period,
+ minPeriod,
+ maxPeriod,
+ playing,
+ env,
+ onSeek,
+ onTogglePlay,
+}: TimelineProps) {
+ const shock = env ? Math.round(env.shockScale * 100) : 0
+ return (
+
+
+
+
+
onSeek(Number(event.target.value))}
+ aria-label="Simulation step"
+ />
+
+
+ step {period} / {maxPeriod}
+
+ {env && (
+ <>
+
+
+ soy {numberFmt.format(env.sojaPrice)}
+
+
+ 0 ? 'sim-timeline-shock sim-timeline-shock--on' : 'sim-timeline-shock'}>
+ shock {shock}%
+
+ >
+ )}
+
+
+
+ )
+}
diff --git a/web/src/playback/dynamics.ts b/web/src/playback/dynamics.ts
new file mode 100644
index 0000000..18d292c
--- /dev/null
+++ b/web/src/playback/dynamics.ts
@@ -0,0 +1,96 @@
+/**
+ * Playback dynamics — turns a bundle's recorded ticks into a per-period "frame"
+ * the globe can render.
+ *
+ * Each recorded node gets a stress scalar per period (a rising price, or a
+ * falling output/quantity, reads as more disruption), normalised over the run to
+ * a 0..1 intensity. A corridor carries its source node's intensity downstream.
+ * Ports and any flat series contribute no intensity. This mirrors the reference
+ * explorer's cascade ramp, driven here by the actual simulation output.
+ */
+
+import type { Bundle, EnvState } from '../data/types'
+
+export interface Frame {
+ /** nodeId -> 0..1 intensity for this period. */
+ markerIntensity: Record
+ /** edgeId -> 0..1 intensity for this period. */
+ edgeIntensity: Record
+}
+
+export interface Dynamics {
+ /** Sorted list of periods available for playback. */
+ periods: number[]
+ frameAt(period: number): Frame
+ envAt(period: number): EnvState | null
+}
+
+/** A single "badness" scalar per tick: higher means more disruption. */
+function stressOf(values: Record): number | null {
+ if (typeof values.unit_price === 'number') return values.unit_price
+ if (typeof values.livestock_output === 'number') return -values.livestock_output
+ if (typeof values.quantity_available === 'number') return -values.quantity_available
+ return null
+}
+
+const EMPTY_FRAME: Frame = { markerIntensity: {}, edgeIntensity: {} }
+
+export function buildDynamics(bundle: Bundle): Dynamics {
+ const byNode = new Map>()
+ for (const tick of bundle.ticks) {
+ const stress = stressOf(tick.values)
+ if (stress === null) continue
+ let series = byNode.get(tick.nodeId)
+ if (!series) {
+ series = new Map()
+ byNode.set(tick.nodeId, series)
+ }
+ series.set(tick.period, stress)
+ }
+
+ const range = new Map()
+ for (const [nodeId, series] of byNode) {
+ let min = Infinity
+ let max = -Infinity
+ for (const value of series.values()) {
+ if (value < min) min = value
+ if (value > max) max = value
+ }
+ range.set(nodeId, { min, max })
+ }
+
+ const nodeIntensity = (nodeId: string, period: number): number => {
+ const series = byNode.get(nodeId)
+ const bounds = range.get(nodeId)
+ if (!series || !bounds) return 0
+ const value = series.get(period)
+ if (value === undefined || bounds.max === bounds.min) return 0
+ return (value - bounds.min) / (bounds.max - bounds.min)
+ }
+
+ const periods = bundle.env.map((snapshot) => snapshot.period).sort((a, b) => a - b)
+ const envByPeriod = new Map(bundle.env.map((snapshot) => [snapshot.period, snapshot]))
+ const frameCache = new Map()
+
+ return {
+ periods,
+ frameAt(period: number): Frame {
+ const cached = frameCache.get(period)
+ if (cached) return cached
+ const markerIntensity: Record = {}
+ for (const nodeId of byNode.keys()) markerIntensity[nodeId] = nodeIntensity(nodeId, period)
+ const edgeIntensity: Record = {}
+ for (const edge of bundle.edges) {
+ edgeIntensity[edge.id] = markerIntensity[edge.source] ?? markerIntensity[edge.target] ?? 0
+ }
+ const frame: Frame = { markerIntensity, edgeIntensity }
+ frameCache.set(period, frame)
+ return frame
+ },
+ envAt(period: number): EnvState | null {
+ return envByPeriod.get(period) ?? null
+ },
+ }
+}
+
+export { EMPTY_FRAME }
diff --git a/web/src/playback/timeline.css b/web/src/playback/timeline.css
new file mode 100644
index 0000000..30f675a
--- /dev/null
+++ b/web/src/playback/timeline.css
@@ -0,0 +1,88 @@
+.sim-timeline {
+ position: absolute;
+ left: 50%;
+ bottom: 26px;
+ z-index: 6;
+ display: flex;
+ align-items: center;
+ gap: 14px;
+ width: min(620px, calc(100vw - 48px));
+ padding: 10px 16px;
+ transform: translateX(-50%);
+ border: 1px solid var(--sim-color-border);
+ border-radius: var(--sim-radius-md);
+ background: linear-gradient(180deg, rgba(11, 23, 39, 0.86), rgba(6, 14, 26, 0.82));
+ box-shadow: var(--sim-shadow-ambient);
+ backdrop-filter: blur(14px);
+}
+
+.sim-timeline-play {
+ flex: none;
+ width: 34px;
+ height: 34px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid rgba(126, 213, 255, 0.4);
+ border-radius: 50%;
+ background: rgba(67, 183, 255, 0.14);
+ color: var(--sim-color-accent-bright);
+ font-size: 12px;
+ cursor: pointer;
+ transition: background 120ms ease;
+}
+
+.sim-timeline-play:hover {
+ background: rgba(67, 183, 255, 0.26);
+}
+
+.sim-timeline-track {
+ flex: 1;
+ min-width: 0;
+}
+
+.sim-timeline-track input[type='range'] {
+ width: 100%;
+ height: 4px;
+ accent-color: var(--sim-color-accent);
+ cursor: pointer;
+}
+
+.sim-timeline-readout {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-top: 5px;
+ overflow: hidden;
+ color: var(--sim-color-text-muted);
+ font: 500 11px/1.3 var(--sim-font-mono);
+ white-space: nowrap;
+}
+
+.sim-timeline-readout b {
+ color: var(--sim-color-text);
+ font-variant-numeric: tabular-nums;
+}
+
+.sim-timeline-sep {
+ width: 1px;
+ height: 11px;
+ background: var(--sim-color-border);
+}
+
+.sim-timeline-shock--on b {
+ color: var(--sim-color-warning);
+}
+
+@media (max-width: 600px) {
+ .sim-timeline {
+ bottom: 66px;
+ gap: 10px;
+ padding: 8px 12px;
+ }
+
+ .sim-timeline-readout {
+ font-size: 10px;
+ gap: 7px;
+ }
+}
diff --git a/web/src/vite-env.d.ts b/web/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/web/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json
new file mode 100644
index 0000000..f867de0
--- /dev/null
+++ b/web/tsconfig.app.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "Bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["src"]
+}
diff --git a/web/tsconfig.json b/web/tsconfig.json
new file mode 100644
index 0000000..1ffef60
--- /dev/null
+++ b/web/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
+}
diff --git a/web/tsconfig.node.json b/web/tsconfig.node.json
new file mode 100644
index 0000000..abcd7f0
--- /dev/null
+++ b/web/tsconfig.node.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "target": "ES2022",
+ "lib": ["ES2023"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "Bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/web/vite.config.ts b/web/vite.config.ts
new file mode 100644
index 0000000..42bc61d
--- /dev/null
+++ b/web/vite.config.ts
@@ -0,0 +1,23 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+
+// https://vite.dev/config/
+export default defineConfig({
+ plugins: [react()],
+ build: {
+ // three.js + three-globe legitimately exceed the 500 kB default; split them
+ // into their own long-cached vendor chunk rather than bloating the app chunk,
+ // and raise the warning threshold to cover that (unavoidable) 3D vendor size.
+ chunkSizeWarningLimit: 2000,
+ rollupOptions: {
+ output: {
+ manualChunks(id) {
+ if (!id.includes('node_modules')) return undefined
+ if (/[\\/](three|three-globe)[\\/]/.test(id)) return 'three-vendor'
+ if (/[\\/](globe\.gl|react-globe\.gl)[\\/]/.test(id)) return 'globe-vendor'
+ return undefined
+ },
+ },
+ },
+ },
+})