{ "cells": [ { "cell_type": "markdown", "id": "778adfc2", "metadata": {}, "source": [ "# Tiled Stitching: Processing Large Volumes in Blocks\n", "\n", "Real datasets are too large to process in a single pass. This tutorial shows\n", "how to:\n", "\n", "1. Split a volume into overlapping sub-crops\n", "2. Generate flows independently per sub-crop\n", "3. Stitch flows back with **boundary-aware cosine blending**\n", "4. Postprocess the stitched flow field\n", "5. Compare: full-volume reference vs. tiled/stitched result" ] }, { "cell_type": "markdown", "id": "d4cc4233", "metadata": {}, "source": [ "## 1. Create Synthetic Data\n", "\n", "Same synthetic volume as the full-volume tutorial — 4 ellipsoidal instances\n", "in a 64x64x64 volume." ] }, { "cell_type": "code", "execution_count": 1, "id": "9eda5380", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:53.616433Z", "iopub.status.busy": "2026-03-17T22:54:53.616207Z", "iopub.status.idle": "2026-03-17T22:54:54.032239Z", "shell.execute_reply": "2026-03-17T22:54:54.031296Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Volume: 64x64x64, 4 instances\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "def make_synthetic_instances(shape=(64, 64, 64), n_instances=4, seed=42):\n", " \"\"\"Create a volume with non-overlapping ellipsoidal instances.\"\"\"\n", " rng = np.random.RandomState(seed)\n", " vol = np.zeros(shape, dtype=np.int32)\n", " coords = np.mgrid[0:shape[0], 0:shape[1], 0:shape[2]].astype(np.float32)\n", "\n", " for inst_id in range(1, n_instances + 1):\n", " margin = 10\n", " center = [rng.randint(margin, s - margin) for s in shape]\n", " radii = [rng.randint(5, 15) for _ in range(3)]\n", " dist = sum(\n", " ((coords[ax] - center[ax]) / radii[ax]) ** 2\n", " for ax in range(3)\n", " )\n", " mask = (dist <= 1.0) & (vol == 0)\n", " vol[mask] = inst_id\n", "\n", " return vol\n", "\n", "gt_instances = make_synthetic_instances()\n", "D, H, W = gt_instances.shape\n", "fg = gt_instances > 0\n", "n_gt = len(np.unique(gt_instances[gt_instances > 0]))\n", "print(f\"Volume: {D}x{H}x{W}, {n_gt} instances\")" ] }, { "cell_type": "markdown", "id": "250a9952", "metadata": {}, "source": [ "## 2. Full-Volume Reference\n", "\n", "First, generate the reference result by processing the entire volume at once.\n", "We use `spatial_mask=None` because the volume boundary is real (not a crop\n", "edge)." ] }, { "cell_type": "code", "execution_count": 2, "id": "238329c0", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:54.034781Z", "iopub.status.busy": "2026-03-17T22:54:54.034472Z", "iopub.status.idle": "2026-03-17T22:54:55.997258Z", "shell.execute_reply": "2026-03-17T22:54:55.996293Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Full-volume: 4 instances recovered (GT=4)\n" ] } ], "source": [ "from topo import generate_diffusion_flows, postprocess_single\n", "\n", "full_flows = generate_diffusion_flows(gt_instances, n_iter=200, spatial_mask=None)\n", "full_result = postprocess_single(\n", " sem_mask=fg, flow=full_flows,\n", " n_steps=100, step_size=1.0, convergence_radius=4.0, min_size=50, group=1,\n", ")\n", "print(f\"Full-volume: {full_result.max()} instances recovered (GT={n_gt})\")" ] }, { "cell_type": "markdown", "id": "31907338", "metadata": {}, "source": [ "## 3. Split into Overlapping Sub-Crops\n", "\n", "We use `compute_subcrop_slices` to tile the volume with ~50% overlap.\n", "The overlap ensures smooth blending at tile boundaries." ] }, { "cell_type": "code", "execution_count": 3, "id": "4115b5b0", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:55.999523Z", "iopub.status.busy": "2026-03-17T22:54:55.999220Z", "iopub.status.idle": "2026-03-17T22:54:56.004378Z", "shell.execute_reply": "2026-03-17T22:54:56.003399Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Crop size: (36, 36, 36)\n", "Overlap: (12, 12, 12)\n", "Number of sub-crops: 27\n" ] } ], "source": [ "from topo import compute_subcrop_slices, build_spatial_mask\n", "\n", "# Sub-crops: half the volume + a bit, with 1/3 overlap\n", "crop_size = tuple(min(s // 2 + 4, s) for s in (D, H, W))\n", "overlap = tuple(cs // 3 for cs in crop_size)\n", "\n", "subcrop_slices = compute_subcrop_slices((D, H, W), crop_size, overlap)\n", "print(f\"Crop size: {crop_size}\")\n", "print(f\"Overlap: {overlap}\")\n", "print(f\"Number of sub-crops: {len(subcrop_slices)}\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "d82cb07f", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:56.006297Z", "iopub.status.busy": "2026-03-17T22:54:56.006085Z", "iopub.status.idle": "2026-03-17T22:54:56.126493Z", "shell.execute_reply": "2026-03-17T22:54:56.125383Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0YAAAGGCAYAAABfU5GFAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJS9JREFUeJzt3XmUVOWd+OFvN9DdIrQstiOIAoIIImpOK+MCAgICogwqEpTjAhIXBMwZRybGZECjJi7jOoJkSNAxEmVxJMEFXBgBcd9iVBQQSA4u4AIqOCD0/f3hr2tsutlUaOB9nnP6HOvW7bpvXZKu+tS99628LMuyAAAASFh+dQ8AAACgugkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwBglzd69OjIy8uLjz/+uLqHsltr1qxZnHfeedU9jM066aST4ic/+Ul1D6OCu+++O/Ly8mLJkiW5ZZ07d47OnTtvl+299dZbUbNmzfjrX/+6XR5/dyWMqGTx4sUxbNiwaNWqVdSuXTtq164dhxxySFxyySXxl7/8JSK++T9zXl7eFn9Gjx69ye2cd955UadOne32PB555JHNbh+A6vPGG29Ev379omnTplFUVBT77bdfdO/ePe64447qHtpOrTwAy39q1aoVzZo1ixEjRsTKlSure3jV7plnnomZM2fGv/7rv+aWzZ8/P0aOHBlHHHFE1K1bNxo1ahS9e/eOl156qdLvN2vWbJPvaQ466KAtbv+6666Lhx566Id8St/JIYccEr17945/+7d/q+6h7FJqVvcA2LlMnz49fvzjH0fNmjVj4MCBcfjhh0d+fn7Mnz8/HnzwwRg7dmwsXrw4rrzyyhgyZEju91588cW4/fbb4+c//3m0adMmt/ywww6rjqcREd+E0Z133imOAHYy8+bNiy5dusQBBxwQP/nJT2LfffeNv//97/Hcc8/FbbfdFsOHD6/uIe70xo4dG3Xq1InVq1fHk08+GXfccUe88sorMXfu3O263XfeeSfy83fez9VvvPHG6Nq1a7Rs2TK3bPz48fG73/0uTj/99Bg6dGisWrUqxo0bF0cffXQ89thj0a1bt9y6t956a3z55ZcVHnPp0qXxi1/8Ik488cQtbv+6666Lfv36Rd++fSssP/vss2PAgAFRWFj4/Z7gNrjooovipJNOikWLFkWLFi122HZ3ZcKInEWLFsWAAQOiadOm8eSTT0ajRo0q3H/99dfHmDFjIj8/P7p3717hvqKiorj99tuje/fu2+2wMAC7h2uvvTb22muvePHFF6NevXoV7lu+fHn1DOo7Kisri3Xr1kVRUdEO3W6/fv1i7733joiICy+8MAYMGBAPPPBAvPDCC9G+ffvttt0d+cZ+Wy1fvjwefvjhuOuuuyosP/PMM2P06NEVzlIZPHhwtGnTJkaPHl0hjDYOmoiIa665JiIiBg4c+J3HVqNGjahRo8Z3/v3volu3blG/fv2455574uqrr96h295V7bzJzw53ww03xOrVq2PChAmVoigiombNmjFixIjYf//9t9sYmjVrFieffHLMnTs32rdvH0VFRXHggQfGf/3Xf1VY7+uvv46rrroqDjrooCgqKoqGDRtGhw4d4vHHH4+Ib07Tu/POOyMiKhwGL3fTTTfFscceGw0bNow99tgjSktLY8qUKZXGk5eXF8OGDYuHHnooDj300CgsLIy2bdvGY489VmndZcuWxfnnnx+NGzeOwsLCaN68eVx88cWxbt263DorV66Mn/70p7H//vtHYWFhtGzZMq6//vooKyur8Fj3339/lJaWRt26daO4uDjatWsXt91223ffsQA7kUWLFkXbtm0rRVFExD777JP77yVLlkReXl7cfffdldbb1OnaH3/8cfTv3z+Ki4ujYcOGcemll8b//u//btW4ysrK4rbbbot27dpFUVFRlJSURM+ePSucclX+unDfffdF27Zto7CwMPea8Oqrr0avXr2iuLg46tSpE127do3nnnuuwjbKrzWZPXt2XHjhhdGwYcMoLi6Oc845Jz777LOtGmdVOnbsGBHf7Ntve/7556Nnz56x1157Re3ataNTp07xzDPPVPr9//mf/4kjjzwyioqKokWLFjFu3LjcaXvfVtU1Ru+9916cccYZ0aBBg6hdu3YcffTR8fDDD1d6/Ly8vJg0aVJce+210aRJkygqKoquXbvGwoULK6y7YMGCOP3002PfffeNoqKiaNKkSQwYMCBWrVq12X3w8MMPx/r16yuETkREaWlppVP3GzZsGB07doy33357s48ZETFx4sRo3rx5HHvssZtdLy8vL1avXh333HNP7n1H+b6q6hqjqqxduzZGjRoVLVu2jMLCwth///1j5MiRsXbt2grrPf7449GhQ4eoV69e1KlTJw4++OD4+c9/XmGdWrVqRefOnWPatGlbfI58wxEjcqZPnx4tW7aMf/zHf6zWcSxcuDD69esX559/fpx77rnx+9//Ps4777woLS2Ntm3bRsQ351j/+te/jiFDhkT79u3j888/j5deeileeeWV6N69e1x44YXx/vvvx+OPPx733ntvpW3cdttt0adPnxg4cGCsW7cu7r///jjjjDNi+vTp0bt37wrrzp07Nx588MEYOnRo1K1bN26//fY4/fTT429/+1s0bNgwIiLef//9aN++faxcuTIuuOCCaN26dSxbtiymTJkSa9asiYKCglizZk106tQpli1bFhdeeGEccMABMW/evLjiiivigw8+iFtvvTUivvljd+aZZ0bXrl3j+uuvj4iIt99+O5555pm49NJLt+OeB9gxmjZtGs8++2z89a9/jUMPPfQHfez+/ftHs2bN4te//nU899xzcfvtt8dnn31W6QO2qpx//vlx9913R69evWLIkCGxfv36mDNnTjz33HNx5JFH5tZ76qmnYtKkSTFs2LDYe++9o1mzZvHmm29Gx44do7i4OEaOHBm1atWKcePGRefOnePpp5+u9No6bNiwqFevXowePTreeeedGDt2bCxdujQXENuq/A13/fr1K4yzV69eUVpaGqNGjYr8/PyYMGFCnHDCCTFnzpzckaVXX301evbsGY0aNYqrrroqNmzYEFdffXWUlJRscbsfffRRHHvssbFmzZoYMWJENGzYMO65557o06dPTJkyJU499dQK6//mN7+J/Pz8+Jd/+ZdYtWpV3HDDDTFw4MB4/vnnIyJi3bp10aNHj1i7dm0MHz489t1331i2bFlMnz49Vq5cGXvttdcmxzJv3rxo2LBhNG3adKv22Ycffpg76rYpr776arz99ttx5ZVXbvHx7r333tz7kgsuuCAiYptOYSsrK4s+ffrE3Llz44ILLog2bdrEG2+8Ebfccku8++67uWuX3nzzzTj55JPjsMMOi6uvvjoKCwtj4cKFVQZvaWlpTJs2LT7//PMoLi7e6rEkK4Msy1atWpVFRNa3b99K93322WfZihUrcj9r1qyptM7kyZOziMhmzZq11ds899xzsz333LPCsqZNm2YRkc2ePTu3bPny5VlhYWF22WWX5ZYdfvjhWe/evTf7+Jdcckm2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Njx2YgsXLswuvvjirGXLlllRUVG2xx57ZK1bt84uuuii7LXXXqvyd37I6bqrmoZ74yktr7nmmqx9+/ZZvXr1cuO79tprK0x9un79+mz48OFZSUlJlpeXV2HK0d/97nfZQQcdlBUWFmatW7fOJkyYkJsC9dsiIrvkkksqjWfj6UqzLMuWLl2anXPOOVlJSUlWWFiYHXjggdkll1xSYVrSL774Irviiiuyli1bZgUFBdnee++dHXvssdlNN92UG/uUKVOyE088Mdtnn32ygoKC7IADDsguvPDC7IMPPtjyTgXYBTz66KPZ4MGDs9atW2d16tTJCgoKspYtW2bDhw/PPvroowrrrlmzJjv//POzvfbaK6tbt27Wv3//bPny5Zucrvutt97K+vXrl9WtWzerX79+NmzYsOyrr77aqnGtX78+u/HGG7PWrVtnBQUFWUlJSdarV6/s5Zdfzq2zqdeFLMuyV155JevRo0dWp06drHbt2lmXLl2yefPmVVinfNrmp59+Orvggguy+vXrZ3Xq1MkGDhyYffLJJ1scY/nzrGqq5lWrVmV77bVXhdfLV199NTvttNOyhg0bZoWFhVnTpk2z/v37Z08++WSF333yySezH/3oR1lBQUHWokWLbPz48dlll12WFRUVVVivqte/RYsWZf369cvq1auXFRUVZe3bt8+mT59eYZ3y6bo3noZ74ynZ33vvvWzw4MFZixYtsqKioqxBgwZZly5dsieeeGKL+ybLsqxPnz5Z165dKyw799xzs4jY5M+3p9Au349FRUXZaaedtlXb/Lb58+dnxx9/fLbHHntkEZHbV1szXXeWffP1Iddff33Wtm3brLCwMKtfv35WWlqaXXXVVdmqVauyLPvm3+qf/umfssaNG2cFBQVZ48aNszPPPLPS14E8+uijWURkCxYs2Obnkaq8LNuJzo8CANiN3X333TFo0KB48cUXq/yKh51J3759v9dXY1SHOXPmROfOnWP+/PmVZv5LTd++fSMvLy/++7//u7qHsstwjREAQOK++uqrCrcXLFgQjzzySHTu3Ll6BvQddezYMU488cQqT19Mydtvvx3Tp0+PX/3qV9U9lF2Ka4wAABJ34IEHxnnnnRcHHnhgLF26NMaOHRsFBQWb/QLUndXWTBqxu2vTpk2lSSzYMmEEAJC4nj17xh//+Mf48MMPo7CwMI455pi47rrrkj8djbS4xggAAEiea4wAAIDkCSMAACB5wggAAEjeVk++kJeXtz3HAcD/59LPNDT72cPVPQR2AkuKztoujzvuvF9sl8eFXdGFzS7fqvUcMQIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSJ4wAAIDkCSMAACB5wggAAEieMAIAAJInjAAAgOQJIwAAIHnCCAAASJ4wAgAAkieMAACA5AkjAAAgecIIAABInjACAACSV7O6B8A2emIHbqvbDtwWQGKWNP9bdQ+BncC/P9Vxuzzuj+86ers8LuySfrN1qzliBAAAJE8YAQAAyRNGAABA8oQRAACQPGEEAAAk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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize which sub-crop covers which region\n", "subcrop_map = np.zeros((D, H, W), dtype=np.int32)\n", "for i, slc in enumerate(subcrop_slices):\n", " subcrop_map[slc[0], slc[1], slc[2]] = i + 1\n", "\n", "mid_z = D // 2\n", "fig, axes = plt.subplots(1, 2, figsize=(10, 4))\n", "axes[0].imshow(gt_instances[mid_z], interpolation=\"nearest\", cmap=\"nipy_spectral\")\n", "axes[0].set_title(\"GT Instances\")\n", "axes[0].axis(\"off\")\n", "axes[1].imshow(subcrop_map[mid_z], interpolation=\"nearest\", cmap=\"tab20\")\n", "axes[1].set_title(f\"Sub-crop Regions ({len(subcrop_slices)} tiles)\")\n", "axes[1].axis(\"off\")\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "ed2680c7", "metadata": {}, "source": [ "## 4. Generate Flows Per Sub-Crop\n", "\n", "Each sub-crop is processed independently. We use `build_spatial_mask` to\n", "mark the subcrop boundary faces — this tells the diffusion to use Neumann\n", "boundary conditions there (flow continues past the crop edge), which is\n", "correct since the instance may extend beyond this tile." ] }, { "cell_type": "code", "execution_count": 5, "id": "f7467827", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:56.128627Z", "iopub.status.busy": "2026-03-17T22:54:56.128407Z", "iopub.status.idle": "2026-03-17T22:54:59.229809Z", "shell.execute_reply": "2026-03-17T22:54:59.228561Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 1/27: shape=(36, 36, 36), instances=1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 2/27: shape=(36, 36, 36), instances=1\n", " Sub-crop 3/27: shape=(36, 36, 36), instances=1\n", " Sub-crop 4/27: shape=(36, 36, 36), instances=2\n", " Sub-crop 5/27: shape=(36, 36, 36), instances=2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 6/27: shape=(36, 36, 36), instances=2\n", " Sub-crop 7/27: shape=(36, 36, 36), instances=2\n", " Sub-crop 8/27: shape=(36, 36, 36), instances=2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 9/27: shape=(36, 36, 36), instances=2\n", " Sub-crop 10/27: shape=(36, 36, 36), instances=3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 11/27: shape=(36, 36, 36), instances=2\n", " Sub-crop 12/27: shape=(36, 36, 36), instances=2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 13/27: shape=(36, 36, 36), instances=4\n", " Sub-crop 14/27: shape=(36, 36, 36), instances=3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 15/27: shape=(36, 36, 36), instances=3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 16/27: shape=(36, 36, 36), instances=4\n", " Sub-crop 17/27: shape=(36, 36, 36), instances=3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 18/27: shape=(36, 36, 36), instances=3\n", " Sub-crop 19/27: shape=(36, 36, 36), instances=3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 20/27: shape=(36, 36, 36), instances=2\n", " Sub-crop 21/27: shape=(36, 36, 36), instances=2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 22/27: shape=(36, 36, 36), instances=4\n", " Sub-crop 23/27: shape=(36, 36, 36), instances=3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 24/27: shape=(36, 36, 36), instances=3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 25/27: shape=(36, 36, 36), instances=4\n", " Sub-crop 26/27: shape=(36, 36, 36), instances=3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Sub-crop 27/27: shape=(36, 36, 36), instances=3\n" ] } ], "source": [ "subcrop_flows = []\n", "for i, slc in enumerate(subcrop_slices):\n", " sub_mask = gt_instances[slc[0], slc[1], slc[2]]\n", " sub_spatial = build_spatial_mask(sub_mask.shape)\n", "\n", " sub_flow = generate_diffusion_flows(\n", " sub_mask, n_iter=200, spatial_mask=sub_spatial,\n", " )\n", " subcrop_flows.append(sub_flow)\n", "\n", " n_inst = len(np.unique(sub_mask[sub_mask > 0]))\n", " print(f\" Sub-crop {i+1}/{len(subcrop_slices)}: \"\n", " f\"shape={sub_mask.shape}, instances={n_inst}\")" ] }, { "cell_type": "markdown", "id": "6ad3ec3b", "metadata": {}, "source": [ "## 5. Stitch Flows with Boundary-Aware Cosine Blending\n", "\n", "The key to correct stitching is **boundary-aware cosine blending**:\n", "\n", "- At **internal seams** (where two tiles overlap): cosine taper from 1→0,\n", " so both tiles contribute smoothly\n", "- At **volume boundaries** (no neighboring tile): weight stays at 1,\n", " preserving the flow fully\n", "\n", "Without boundary awareness, the cosine weight goes to 0 at the volume edge,\n", "zeroing out the flow there and causing overmerging." ] }, { "cell_type": "code", "execution_count": 6, "id": "e0e7d7fa", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:59.231947Z", "iopub.status.busy": "2026-03-17T22:54:59.231730Z", "iopub.status.idle": "2026-03-17T22:54:59.262783Z", "shell.execute_reply": "2026-03-17T22:54:59.261602Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Angular error (full vs stitched) on foreground:\n", " Mean: 18.4 deg\n", " Median: 16.5 deg\n", " P95: 40.3 deg\n" ] } ], "source": [ "from topo import stitch_flows, cosine_blend_weight\n", "from topo.stitch import _boundary_flags\n", "\n", "stitched_flows = stitch_flows((D, H, W), subcrop_slices, subcrop_flows)\n", "\n", "# Compare: angular error between full and stitched\n", "dot = np.clip((full_flows * stitched_flows).sum(axis=0), -1, 1)\n", "angle_err = np.degrees(np.arccos(dot))\n", "angle_err_fg = angle_err[fg]\n", "print(f\"Angular error (full vs stitched) on foreground:\")\n", "print(f\" Mean: {angle_err_fg.mean():.1f} deg\")\n", "print(f\" Median: {np.median(angle_err_fg):.1f} deg\")\n", "print(f\" P95: {np.percentile(angle_err_fg, 95):.1f} deg\")" ] }, { "cell_type": "code", "execution_count": 7, "id": "26bc8e7c", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:59.264854Z", "iopub.status.busy": "2026-03-17T22:54:59.264606Z", "iopub.status.idle": "2026-03-17T22:54:59.592340Z", "shell.execute_reply": "2026-03-17T22:54:59.591160Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABTsAAAGMCAYAAAAVynaIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA6BZJREFUeJzs3Xd4k1X/BvA76WaVWcqyTNlQKCItyMay5VWWogUERIEXEEVBUFBUQFFAVAR+QpE9BMQXZFOZIqIMWQKyRAqCUnahyfn90TfP25Bv2pMmbTruz3XlUk7Os07S5yQnz3Nuk1JKgYiIiIiIiIiIiCibM3t7B4iIiIiIiIiIiIg8gYOdRERERERERERElCNwsJOIiIiIiIiIiIhyBA52EhERERERERERUY7AwU4iIiIiIiIiIiLKETjYSURERERERERERDkCBzuJiIiIiIiIiIgoR+BgJxEREREREREREeUIHOwkIiIiIiIiIiKiHIGDnURERA8wmUwwmUwoW7ast3fFZWXLljX239uy0r5IYmNjjf0bO3ZsuteT1Y8zuzhz5ozRjk2bNvX27lA68XUkIiIib+NgJxERZTm3bt3C5MmT0bhxYxQpUgSBgYEoV64c2rdvj/nz5+PevXve3sVMkXIwzvbw8fFB4cKF0bBhQ3z66aewWCze3k23bdq0yTi+1q1b2z23atUq47kSJUrYPXfy5EnjuRo1amTmLrslNjYWY8eOxdixY3Ht2jVv7462lO/DRx991O65lANcoaGhXtrD7CflQLntERQUhPLlyyMmJgZHjx719i7mGosXL7Z7HR48FxEREVH24evtHSAiIkrpyJEj6NChA37//Xe78jNnzuDMmTNYs2YNatSogfDw8Azbh+3btwMAAgMDM2wb6WW1WvHPP/9g165d2LVrF44dO4ZPP/3U27vllvr168NsNsNqtWLPnj1QShlXSe7evduoFx8fjzNnzhhX3KZ8rkGDBi5vt23btsZr/dBDD7lxBK6JjY3F999/DwDo1asXChYsmGnb9pQff/wRGzZswOOPP+6xdZYoUcJ4PYKDgz223uzm7t27OH36NE6fPo1Vq1Zh//79KF++vLd3K8dbtGiR3b83b96MK1euoGjRol7aIyIiIkovXtlJRERZxt9//402bdoYA50lS5bE5MmTsWnTJqxcuRJDhw7NlEGQRo0aoVGjRqhXr16Gb0tXeHg4tm/fjq1bt6J///5G+f/93//h7t27Xtwz9xUoUADVqlUDAFy7ds3uarYffvjBrm7Kf7s72BkSEmK81pk52JlTvPvuux5dX0BAgPF61KxZ06Przg4++eQTbN++HUuXLkXJkiUBADdu3MBXX33l5T3LWm7fvu3xdV67dg3r1q2zK0tKSsLy5cs9vi1PuHXrlrd3gYiIKEvjYCcREWUZkyZNwrlz5wAkX9n1448/YujQoWjRogU6deqEyZMn47fffrMbmLp37x4mTpyI8PBw5M2bF3ny5EHt2rUxYcIEh9vdDxw4gCeeeAIhISHw8/NDkSJFEB4ejhdffNHYLiDP2fng/I7z589HjRo1EBAQgIcffhhLly51OJ6//voLw4YNQ6VKlRAQEIBChQqhXbt2DgN4OoKDg9GoUSM0bdoUH330kVGemJiodSu0Ugpz5sxBw4YNUaBAAQQFBaF27dqYOnUqrFarXd2Ut9bGx8fjueeeQ6FChZA/f35069YNf//9t13927dvY/DgwShWrBjy5cuHjh074syZMy4dX2RkpPH/tkHMpKQk/PTTTwCA6tWrA9Ab7Dx9+jT69euHsLAwBAQEICQkBN26dXO4JTi1OTuXL1+OGjVqIDAwEDVq1MDSpUsxduxYo35sbKx4HFeuXEGvXr3E9oqLi4PJZDKu6gSAcuXKGeu0tdnXX3+NRo0aITg4GP7+/ggNDUWjRo3w+uuvQyml05yZYvv27di2bVuqdW7duoWXXnoJ9erVQ/HixeHv74/g4GBERkbiyy+/tKsrzfX48ccfG2WTJ0+2q79w4ULjuddee80od+fvztXtXb16FS+++CLCwsLg7++P/Pnz4+GHH8bTTz9t9zrrqFmzJho1aoQuXbrgmWeeMcrj4+Pt6rlyznM2/3DTpk0d3ncPtv/evXvRrFkz5MmTB6GhoRg9erTDueL06dPo2LEj8ubNi5CQEAwZMsTpYOSvv/6KHj16oFq1aihcuDD8/PwQEhKCdu3aObyPHvzb/OKLL1C5cmX4+fnZvQ5NmjSxW+7vv/+Gr68vTCaTSwPmK1asMNque/fuRvnixYvt6h06dMjY9rPPPmuUjx492qE9b968aexLymkfXnnlFURFRaFEiRIICAhAvnz5ULduXUyaNAlJSUl220v5+h06dAitWrVCvnz50K5dO6OO7vmOiIgoV1FERERZRPny5RUABUCNHTs2zfp3795VjRs3NpZ58NG4cWOVmJiolFLqypUrqlixYk7rbty40VivrSwsLMwomzNnjlGecj9tD7PZrI4dO2bUP3v2rCpdurS4LT8/P/XNN9+keXwpt9mkSROllFL3799Xc+fONcpDQkJUUlKSsUxYWJjxXEoxMTFOj71bt252dVOuQzrWHj162NVv166dQ53SpUurwoULi/simT17tlG3T58+Siml9u3bpwCoPHnyqKlTpyoAqn79+koppW7evKl8fHwUAFWgQAFlsViMZQoWLCgeZ758+dSePXvE9h0zZoxR/vXXXyuTyeSwfO3atY3/nzNnjtheVatWddpeW7dudfoaAFCnT59WcXFxymw2O61z//79NNsyo6Tcj3r16ikAqlWrVkoppU6fPm08V7x4cWOZixcvpnrMb7/9tlE35Tps7/c///zTaI+oqCi7/fnXv/5l1D9w4IBSyv2/O1e317x5c6fHNmrUqDTbNOV7Z+vWrUoppeLj49UjjzxilE+bNs2o78o5L+VrlvJcppRSTZo0sXvfPdj+JUqUUEFBQQ7rnzVrlrGOq1evqjJlyjjUqVWrlsPrqJRSixYtcrrfZrNZbdmyxaib2vl2zpw5xv6bTCZ19uxZY7mvvvrKqPf++++n2f42LVu2tHttw8PDjf26cOGCUc9qtapChQopAKpChQpGecr3wcKFC5VSSm3evNkoe/XVV426AQEBTtuhd+/edvtlKw8ODlZFihRxaFdXzndERES5Ca/sJCKiLOHmzZt283Q+9thjaS4zZcoU44qgMmXKYOHChVi0aJFx5ee2bduMq7N2796Nv/76CwDw9NNPY+PGjVi1ahUmTZqEJk2awMfHR3tff//9d/Tp0wf/+c9/0KJFCwDJc2n+3//9n1FnwIAB+OOPPwAAMTExWLduHaZPn458+fLh/v37eP755126FfH777+HyWSCn58fevbsCQDIly8fvvjiizT3ffny5catsJUrV8aiRYvw7bffGldDLlmyBEuWLBGXvXPnDubPn4/PP/8c/v7+AJKvdkpISAAArF+/HmvWrAEABAUFYcqUKVi1ahVCQ0MdrgBNTcorM21XbNquxIuIiEDjxo0BAPv370diYiL27t1rhDM98sgjMJvNUEqhZ8+expWur7zyCjZs2ICJ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vPEGLBYLJkyYkGbdOXPmoHnz5ggJCUFAQACqVauG6dOnO9Rr2rSpMW/npUuX4Ovri7ffftuh3vHjx2EymezmmLp27RqGDh2KMmXKGF/UJk6cmOYtcXfu3MH48eNRpUoVTJo0SRx4fO6551C/fn3j37///ju6dOmCwoULI0+ePGjQoAHWrFnjsNy0adNQvXp15MmTB4UKFUK9evWwcOFC43nbLQ9nzpwxysqWLYv27dtjx44dqF+/PgIDA1G+fHl89dVXDutP7zHXr18f/v7+xlUkNjt37kTjxo1Rv359u+esVit++OEHREVFGe2ju22TyeQwj1hcXBzq1auHwMBAVKhQATNmzMDYsWOdDvquWrUKNWrUQEBAAKpXr45169YZz40dOxbDhw8HAJQrV864fcTWphs3bkSjRo1QsGBB5MuXD5UrV8Ybb7yRavsQEekoWLAggoKCHAaabt26hVdeecU4P1auXBmTJk2yu6X5zJkzMJlMiI2NdVjvg+dN2/nx5MmTxpV1wcHB6N27N27fvm23bGJiIl5++WUUK1YM+fPnR8eOHfHHH384bOPs2bMYMGAAKleujMqVK2Pt2rWoU6cODh8+jLt37+LEiRP4/PPP8f3338NkMuH777/HgAEDEBISgtKlS2Pr1q0wmUxYuXKlw7oXLlwIk8mE3bt3p9mGK1euxJ07d9ClSxd0794dK1assPsStnr1aphMJhw8eNAo+/rrr2EymfDkk0/aratq1aro1q2b8W/dzx62fnf9+vWoV68egoKCMGPGDADsZwH2s1nFmTNnoJTCn3/+iXfffTdDr7YmIs9p3rw53nzzTZw9exbz588HALvzse3zwNatW3H48GHjHBsXFweTyYTTp09jzZo1DufexMREjBkzBhUrVkRAQADKlCmD1157DYmJiXbbN5lMGDRoEBYsWIDq1asjICDAOMdfuHABzz//PIoXL26c/2fPnm23vG0/li5divfeew+lS5dGYGAgWrRogZMnTzoc7549e4ypXPLmzYtatWph6tSpdnWOHTuGzp07o3DhwggMDES9evWwevVqj7Q3UW7Fn709qFy5coiJicGsWbMwYsQIlCxZ0mnd6dOno3r16ujYsSN8fX3x7bffYsCAAbBarRg4cKC4TPHixdGkSRMsXbrU4bL9JUuWwMfHB126dAGQPI9RkyZNcOHCBfTv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63nqqafsrmC5ePEi9u/fj169eqFw4cJGea1atdCqVSu7S/wLFiyIPXv24M8//3Tp+FL+EnX//n1cvXoVFStWRMGCBdO8Bd6Zv//+G1u2bEHXrl1x48YN47ivXr2K6OhonDhxAhcuXAAArF27Fg0aNED9+vWN5YsVK4YePXrYrXPz5s1ISkrCgAED7Mr//e9/O2xft90LFizokVvQbdshIiI9On1rZvv6669RtGhRsV+x3X63du1a+Pj4YPDgwXbPv/LKK1BK4bvvvgMAPPzwwwgPD8eSJUuMOhaLBcuXL0eHDh2MvnfZsmUIDg5Gq1at7PqriIgI5MuXD1u3brXbTrly5RAdHe2wfyn78oSEBFy5cgVNmjTB77//joSEBAAZ04/aFCpUCADYFxIRCdLq8x78DpgR36WciY6OxsaNG7UenhQaGorPPvsMGzduxGOPPYb9+/dj9uzZKFCgQKa2QXb53mrD/payM97Gns0kJSWha9eusFgsWLFiBQICAoznTpw4gYMHDzq9Bc82ibNNuXLl7P599uxZADBuU0upatWqWL9+PW7duoW8efPigw8+QM+ePVGmTBlERESgbdu2iImJQfny5VPd/zt37mD8+PGYM2cOLly4YDf/h+0LkqtOnjwJpRTefPNNvPnmm2Kdy5cvo1SpUjh79iweffRRh+cfPGZbW1SsWNGuvHDhwsZJ30a33QcMGIClS5eiTZs2KFWqFB5//HF07doVrVu31jvQ/1JK2c1DQ0RE2c+pU6dQuXJl+Po6/yh29uxZlCxZEvnz57crt03rYuurgORb2d944w1cuHABpUqVQlxcHC5fvoxu3boZdU6cOIGEhARj+psHpfU5wWbnzp0YM2YMdu/ejdu3b9s9l5CQgODg4AzpR21snx3YFxIRue7Bc3tGfJdypkSJEihRooTrO+0B3bt3x/z587FmzRq88MILaNGihfFcZrVBdvneasP+lrIzDnZmMUWKFEFSUhJu3Ljh8OUGAIYPH47du3dj06ZNKF26tN1zVqsVrVq1wmuvvSau++GHH7b7t+68IpKuXbvisccew8qVK7FhwwZ8+OGHmDhxIlasWIE2bdo4Xe7f//435syZg6FDhyIyMhLBwcEwmUzo3r17uie2ti336quvilegAI4nf0/SbfeQkBDs378f69evx3fffYfvvvsOc+bMQUxMDObO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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize blending weights — boundary-aware vs naive\n", "fig, axes = plt.subplots(1, 3, figsize=(14, 4))\n", "\n", "# Boundary-aware weights (correct)\n", "weight_aware = np.zeros((D, H, W), dtype=np.float32)\n", "for slc in subcrop_slices:\n", " cs = tuple(s.stop - s.start for s in slc)\n", " w = cosine_blend_weight(cs, at_volume_boundary=_boundary_flags(slc, (D, H, W)))\n", " weight_aware[slc[0], slc[1], slc[2]] += w\n", "\n", "# Naive weights (all faces tapered — the bug)\n", "weight_naive = np.zeros((D, H, W), dtype=np.float32)\n", "for slc in subcrop_slices:\n", " cs = tuple(s.stop - s.start for s in slc)\n", " w = cosine_blend_weight(cs, at_volume_boundary=None) # all faces tapered\n", " weight_naive[slc[0], slc[1], slc[2]] += w\n", "\n", "ax = axes[0]\n", "im = ax.imshow(weight_naive[mid_z], cmap=\"viridis\", interpolation=\"nearest\")\n", "ax.set_title(\"Naive Cosine Weights\\n(zeros at edges!)\")\n", "ax.axis(\"off\")\n", "plt.colorbar(im, ax=ax, shrink=0.8)\n", "\n", "ax = axes[1]\n", "im = ax.imshow(weight_aware[mid_z], cmap=\"viridis\", interpolation=\"nearest\")\n", "ax.set_title(\"Boundary-Aware Weights\\n(full coverage)\")\n", "ax.axis(\"off\")\n", "plt.colorbar(im, ax=ax, shrink=0.8)\n", "\n", "ax = axes[2]\n", "diff = weight_aware[mid_z] - weight_naive[mid_z]\n", "im = ax.imshow(diff, cmap=\"RdBu_r\", interpolation=\"nearest\")\n", "ax.set_title(\"Difference\\n(red = fixed edge)\")\n", "ax.axis(\"off\")\n", "plt.colorbar(im, ax=ax, shrink=0.8)\n", "\n", "fig.suptitle(\"Cosine Blend Weights — Naive vs Boundary-Aware\", fontweight=\"bold\")\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "97a2e3d6", "metadata": {}, "source": [ "## 6. Postprocess the Stitched Flow\n", "\n", "Same postprocessing as the full-volume case — Euler integration + convergence\n", "clustering." ] }, { "cell_type": "code", "execution_count": 8, "id": "44817b1c", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:59.594775Z", "iopub.status.busy": "2026-03-17T22:54:59.594566Z", "iopub.status.idle": "2026-03-17T22:54:59.660998Z", "shell.execute_reply": "2026-03-17T22:54:59.660130Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Stitched: 4 instances recovered (GT=4)\n" ] } ], "source": [ "stitched_result = postprocess_single(\n", " sem_mask=fg, flow=stitched_flows,\n", " n_steps=100, step_size=1.0, convergence_radius=4.0, min_size=50, group=1,\n", ")\n", "print(f\"Stitched: {stitched_result.max()} instances recovered (GT={n_gt})\")" ] }, { "cell_type": "markdown", "id": "078e1f41", "metadata": {}, "source": [ "## 7. Compare Results\n", "\n", "Side-by-side comparison of ground truth, full-volume, and stitched results." ] }, { "cell_type": "code", "execution_count": 9, "id": "47da904c", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:59.663348Z", "iopub.status.busy": "2026-03-17T22:54:59.663151Z", "iopub.status.idle": "2026-03-17T22:54:59.959049Z", "shell.execute_reply": "2026-03-17T22:54:59.957858Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABOcAAAMUCAYAAAD3w0OIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAY51JREFUeJzt3XeYVdXZP+5n6FU6FlBQUECIGAcssYAFFbCLYkER9DXY8lNje2MS0GgU7CbBRr5oVIxijxixBBUsiL0ERBB7BCuCIgjs3x+8c8JhBjjAwJqB+76uuS5m77XPXud43M85n1l7raIsy7IAAAAAANa5Kqk7AAAAAAAbKuEcAAAAACQinAMAAACARIRzAAAAAJCIcA4AAAAAEhHOAQAAAEAiwjkAAAAASEQ4BwAAAACJCOcAAAAAIBHhHACwWm699dYoKirK/Syte/fuue0nnHBCmg6uxNJ9v/XWW1N3hzIs7330wQcf5P33e/rpp9dqP1q3bp0715AhQ9bquQq1Lv8fW9ev94qccMIJuX507949WT8AoDwJ5wBY73z11VcxbNiw2HfffWOzzTaLWrVqRc2aNWPTTTeNPfbYI84999wYP358ZFlW6ktnoT8V2bKh2fJ+KkrIEBHRoUOHXL+23Xbb5bb7/vvvo379+rm2hx566DrsJatj6TCl0J+K9N4s1Ny5c6N27dpRpUqV+M9//pPb/uKLL8YxxxwTrVu3jlq1akXdunVj8803j65du8aJJ54YN910U6nHWtPgrTKE4wDAf1VL3QEAKE8333xznH322fH999+X2vf555/H559/HuPHj48rr7wy7ws0afXv3z/+93//NyIiJk+eHK+88koUFxeXavfAAw/E3Llzc78LHtZvp5xyShxwwAEREdGpU6fEvVmxf/7zn/Hjjz/GzjvvHJtuumlERIwYMSJOPvnkyLIsr+0PP/wQn3zySbz88stx3333xS9/+ctVPl9lem0AgBUTzgGw3rjiiivivPPOy/1eVFQUe+65Z+y8885Rr169+Prrr+P111+PCRMmxI8//hgREY0bN44rrrgi73FefvnluPvuu3O/Dxo0KNq0abNunsRasLz+/+IXv0jQm7Idd9xxceGFF8bixYsjIuJvf/tbmeHc3/72t9y/mzVrFr169VpnfWT1HHXUUaXCoz/+8Y/xzTffRETEVlttFaecckre/pL3Zt++fddNJ8vBgw8+GBERhxxySEREfP311/GrX/0qF8y1bNky+vTpE82bN485c+bE22+/Hc8+++xqn68yvTYAwEpkALAe+Pe//51VrVo1i4gsIrImTZpkzz33XJlt58yZkw0fPjz79ttvy9w/cuTI3ONERDZu3LhV6ku/fv1yx3br1q3U/kcffTS3v0qVKtlHH32UZVmWffHFF9mvf/3rbNttt83q1KmTVa9ePdt4442zrl27Zqeddlr2wgsvFHT+Ve3/su2XtfS+kSNHFnRct27dctv79+9fUL/333//3DHNmzfPfvrpp7z9n376aValSpVcm7POOitv/7333pv16tUr23jjjbPq1atnDRs2zHbZZZfsyiuvzL7//vuCn9fgwYNz21u1apV3zIwZM5b72i573GeffZYdf/zxWZMmTbL69etnBxxwQPbuu+9mWZZlr7zySrbffvtl9erVyxo2bJj16dMn9z5Y1uuvv54NGDAg22qrrbJatWpldevWzbbffvvs0ksvzebOnVvQa/vkk0/m9fv999/P279o0aJs0003ze2/5JJLcvtGjhyZdevWLWvSpElWrVq1rGHDhtk222yTHXnkkdlf/vKXgs6/rFatWq3w/5ESy3sfrei/Q4mHH344O+igg7JNNtkk937Yc889szvuuCNbvHhxmee7+eabs06dOmU1a9bMWrRokZ199tnZd999l9ffwYMHlzpuwYIFWcOGDbOIyKZMmZJlWZY99NBDeX384IMPSh33008/ZWPHjs39vvR7aHk/M2bMWO5rsyrHl5z/r3/9a9ajR4+sefPmWfXq1bOmTZtmO+20UzZkyJAVvt73339/tvPOO2e1a9deK+/hZ555JuvWrVtWp06drFGjRlmfPn2yadOmZf379y/ovQMAlYlwDoD1wqBBg/K+PI4ePXq1H2tNw7mnnnoqL3z75JNP8vYfd9xxuf377rtvlmVZNm/evKxdu3Yr/FJ9/vnnr5X+V5Rw7u9//3ve4z3yyCN5+6+44oq8/W+88UaWZVm2cOHC7Mgjj1zha9ehQ4fss88+K+h5lUc417hx46x169al+tGsWbPsgQceyGrWrFlq39Zbb53Nmzcv73zDhw/PqlWrttznte2222b/+c9/VvraLl68OC9g+uMf/5i3f9n37Mcff1zqOZX1s/HGG6/03GVZm+HcokWL8v4fK+vniCOOyBYuXJh3rgsuuKDMtl26dMk23njjFYZzjz/+eO59VuK+++7Le5yHHnpopa/Lugznvvrqq6xr167LbdegQYPlvt777bdfmceU13v4H//4R5nHNG7cONtll10Keu8AQGXitlYA1gtPPfVU7t+NGjWKww47LFlf9txzz2jdunV88MEHsXjx4vj73/8ev/71ryMiYt68ebnb3yIiBgwYEBER48aNi3fffTciImrVqhUnnnhitGjRIj7//POYNm1aPPPMM6vdn7vvvjtefvnlUttPPvnk2GijjVb7ccvbIYccEg0bNoxvv/02Ipbcwtq7d+/c/ttvvz3375///Oex3XbbRcSSWyTvueee3L6dd9459t1335g8eXKMHj06IpbMY3fsscfGv/71r3XwTJbc0jhv3rz4//6//y++//77GDFiREREfPHFF3HooYdGvXr14vTTT48PP/ww7r333oiIeO+99+LBBx+Mo446KiIinn/++Tj99NNzt/ruvPPOsf/++8ecOXPitttuiy+//DL+/e9/x/HHHx+PP/74CvtTVFQU/fv3j4svvjgiIkaNGpWb46/k9xI9evSIli1bRkTEDTfckNu+zz77RPfu3eP777+Pjz/+OCZMmBDz5s1b05eq3A0bNiz3XikqKorDDz88OnfuHDNmzIjbb789fvrppxg9enRsv/328Zvf/CYiIiZNmhRDhw7NPcYmm2wSxx9/fMydOzf++te/xvz581d4zgceeCAi/ntLa0TE9ttvH0VFRbnbWg8++ODYaqutYuedd44ddtghdt999+jatWveAjP77rtv1KtXL2644YZ4//33IyKiS5cuebewNm7ceLn9WJXjjzvuuJg0aVJue4cOHaJXr15Rs2bNeO2112LixInLPc/YsWOja9eusd9++8W4cePiueeei4jyeQ//8MMPceKJJ8bChQsjIqJ69eoxcODAaNSoUdxxxx3xwgsvLLdfAFBppU4HAaA81KlTJzeaYscdd8zbN3ny5DJHbCxvRNeajpzLsiwbMmRI7vji4uLc9nvuuSe3vVGjRtmPP/6YZVmW3X///XmjUpb1448/lhqBtzzL9n95PyUjaCrKyLksy7JTTjkld1ytWrVytx6//vrreee67rrrsixbMkqqcePGue277LJL3oio8847L++41157baXPqzxGzkVEdscdd+T2LT3aJ+K/IzsXL16cbbbZZrntZ599du6YQw89NLe9e/fu2aJFi3L7XnrppbzHKxlFuCLvv/9+VlRUlDvmrbfeyrIsy+bPn581atQot/3uu+/OHbPRRhvltpc1Qm/69OkrPW9Z1tbIuUWLFmVNmzbNbf/973+f93jDhg3L7WvSpEnuNf3lL3+Z2161atXc7cdZlmV33nln3rmWHTm3ePHirEWLFllEZBMnTszbd+aZZ67w/8Ett9yyzFG+hfz/s6I2Kzv+zTffzOtHr169sgULFuS1Wfq/7bKv94477phrv2DBgqx58+bl9h6+66678raPGDEirx/Vq1c3cg6A9U6VAID1zNIjUVI54YQTcv145ZVX4r333ouIiLvuuivX5uijj46aNWtGRETXrl1z/x47dmx07Ngxjj766Bg8eHA8+OCDsWDBgmjRosU6fhbl7+67744rr7yy1M/HH38cEfmrr/7444+5UWVLj5qrUaNGHHvssRER8e6778bXX3+d29evX7+oWrVq7vf+/fvnnX9djbqpVq1a3mil1q1b5/5dvXr1OPTQQyNiyXt1yy23zO0rWSQhInKjkSIinn766ahatWoUFRVFUVFR7Ljjjnnne/7551fapy233DK6d++e+73kvfjYY4/lztu4ceM4+OCDc21233333L87deoUvXv3jjPPPDNuueWWmDZtWmy11VYrPe+69O6778aXX36Z+/3iiy/OvWZFRUV5C8Z89dVXMXXq1IiIvJGlXbp0iW222Sb3e9++faN69erLPeekSZPi008/jRYtWkTXrl3z9l199dVx8803R8eOHcs8dsaMGXHkkUfGuHHjVu2JrqEJEybk/T548OBSz3FF/21POumkXPvq1auX63t42VG+xxxzTO7frVu3jt12222Fzw0AKiPhHADrhaWDq/feey93K1lERPPmzeOKK66IK664IurUqbNO+tOqVavYa6+9cr+PGjUqZs+eHY8++mhu28CBA3P/btmyZdx6663RtGnTiIj497//HX//+9/j4osvjkMPPTQ222yz+Pvf/75afRk3blxkS+aZzftZOjBa2tKv3cpu51tVN9xwQ5x77rmlfqZPnx4RETvuuGNsu+22ufZ/+9vfYtGiRXm3XR5wwAHRpEmTiIi8YC4iYuONN17h70sHB4VY+rWIKPz1aN68eVSr9t/ZQ2rUqJG3b+kAcel2Jbf/RZR+bivyxRdfFNRu6fdcSTi39Gt7zDHH5ELiiCX/vXbeeeeIWBJmPfroo3HdddfFySefHFtvvXX07ds3r8+prcprFvHf163kVuqIJf99lla1atXc+60sJbepH3zwwaX+MFBUVBT/8z//E2+//XZ8/PHHcc8998SZZ54ZrVq1yrXJsiyuueaaVer3mlr2dVo6XCvEsteOpd8za/oeXvq/Rf369aN27dp57Zb9fxoA1gfmnANgvbD33nvnRqd9/fXX8fDDD+dGADVu3DjOOeeciIi4/PLL44cfflgnfRowYEBuLry77rortthii1y4s91220VxcXFe+6OOOioOP/zweOmll+Ktt96K9957L8aNGxevvfZazJ07N0488cQ44IADol69euXazypV8v9WN2/evFyIWfKarkv9+/eP888/PyIixo8fHyNGjIj//Oc/uf1Lj65bdv6tmTNnrvD3Ro0arfT8S78ey86pVujrsaKRVkuHcSvSuHHjmDVrVkRE7Lbbbnkj2pb1i1/8oqDHPPzww+O0006L7777LmbMmBFPPvlk/OMf/8jtL5kDscTmm28eL7zwQkybNi1eeumleO+99+Ktt96Khx56KBYuXBj33HNP7L///qWOS2XZ90P//v2jU6dOy21fEjI1bNgwt63kNS+xaNGi+Oqrr5b7GGXNN1eWli1bxhFHHBFHHHFEDB06NLbffvuYPHlyRKz7/8+WfZ1mzJgRzZo1K/j4Zd/fyxutvDrv4aX/W8yZMyfmzZuXF9At+/80AKwPhHMArBdOP/30uOWWW2LRokURETFo0KBo1apVbL/99sn6dNhhh0WDBg1i9uzZ8e6778Yf/vCH3L5lw4yvv/465syZE61atYpdd901dt1114hYMtKr5Iv0Dz/8EO+++26pUG9NLf1lOCLixRdfjL322isWL14cl112Wbme6+mnn15pm+OOOy5+85vfxKJFiyLLsjj77LNz+zbeeOPo2bNn7vd27dpF48aNcyN07rjjjvjlL3+ZG5l222235T12ISHW0q/HF198EdOnT482bdrE/Pnz48orr1zp8eXlF7/4RW5U1ueff17mAh7z5s2L0aNHFxzO1a5dO4466qi4+eabI2LJoiAlYXXnzp1jhx12yGv/xhtvxM9+9rNo27ZttG3bNrf94IMPjocffjgiIl599dUKE861a9cumjRpkgvT5s2blwvmlzZr1qx47rnnYvPNN4+IJbeyvvLKKxGx5LbKqVOn5m5tvfvuu+Onn34q83xTp06NKVOmRMOGDfNuGY5Ycjv7Aw88EL/85S9z5ylRrVq1qFWrVu73Zf8fXDr8Wp0/Jqzs+GVvDf3DH/4QDzzwQF5w/OGHH+aN8Fsdq/Me7tKlS97+UaNGxYknnhgRER988EGpW3IBYH0gnANgvdCxY8f4wx/+kFt98fPPP48uXbpEz549o7i4OKpXrx4zZsyI7777bp31qSQIuemmmyJiyeiUiCVfnEvmTCsxderU2GWXXaJr167RuXPn2GyzzaJatWrx2GOP5bVb9kt8eSguLs5bVfKwww6LfffdN95999148803y/18K7PpppvGfvvtl7sFeOlwoV+/fnkBQpUqVeKss86K3/3udxGxZE653XbbLfbdd9+YMmVK3ique+65Z3Tu3Hml51923rBdd901unXrFq+++mpMmzZtjZ7bqvj1r38dDz30UGRZFtOmTYtOnTrFYYcdFhtvvHHMnj073nrrrXjmmWfi+++/j+OPP77gxx0wYEAunCt5T5ZsX1bfvn1j9uzZseeee0aLFi2icePGMX369Lzbs9fGe3J1ValSJc4+++y48MILIyLinnvuiffffz969OgR9evXj88//zxefvnlmDhxYuy22265uf8GDhwYN998c2RZFosWLYpu3bpF//79Y86cOfHXv/51uecrGTXXq1evUqPJ5syZE5deemn88Y9/jOLi4thpp51is802ix9//DGeeOKJeO2113Jt999//7xjl75Nf8yYMXHBBRdE06ZNo2nTpnkjR5dnZcf/7Gc/i169euX+Oz7yyCPRuXPn6NWrV9SqVSveeeedePbZZ/Pm71sdq/MePuigg6JZs2a521xPOeWUmDRpUm611uUFpQBQqaVYhQIA1pbrrrsuq1mzZkGrlS69quDSymO11hITJ04sdd7DDjusVLsXXnhhpf0t67jy6n+/fv3KPGevXr3yfl/bq7WWWHpV26V/SlYYXdrChQuzI444YoWvXYcOHbJPP/0077jlPa8sy7Ldd9+9oNdjeau1LrvKa//+/Ze7b0Wv1V/+8pesWrVqK31vrKoOHTrkHV+jRo3syy+/LNWuXbt2Kzxv48aNsw8++GCVz7+2VmvNsiUrth533HErfc2WPe+5555bZruOHTvmrQC79GqtO++8cxYRZa64Om7cuIKuQzvssEP23Xff5R370EMPLbcvK3ttCj3+yy+/zLp27brcfjVo0KCg13tlfVmd9/BDDz2UVa1atVSb+vXrZzvssENB7x0AqEwsCAHAeuVXv/pVzJgxI4YMGRK77bZbNGvWLKpVqxa1a9eOLbbYInr06BFDhgyJV199Na666qq13p8dd9yx1EqNZY1QateuXVx11VVx2GGHxTbbbBMNGjSIqlWrRqNGjWLXXXeN6667brUXhCjEiBEj4pxzzokWLVpEjRo1Yptttolhw4bFQw89tNbOuSIHHXRQqXmxiouLy5w/rGrVqnHPPffE6NGjo1evXrnFGBo0aBA77bRTXHHFFTFp0qTYbLPNCj7/ww8/HCeddFI0a9YsatasGdttt12MGDEi/vznP6/xc1sVp556arz22mtx8sknxzbbbBN16tSJatWqxcYbbxzdunWL3/3ud/HGG2+s8uMu+x488MADy1z04LLLLotBgwZFcXFxbLLJJlG9evWoU6dOtG/fPk499dR45ZVX1vjWx/JWpUqV+Nvf/hZjxoyJww8/PFq2bBk1atSImjVrRqtWreLAAw+Ma6+9Nm/l5IiIYcOGxY033hjbbrtt1KhRIzbddNM47bTTYvz48VG3bt1S5/nPf/4TEydOjFq1apUa+Rax5JbOp556Ki688MLo3r17tG3bNjbaaKOoVq1aNGnSJPbYY4+49tpr4/nnn4/69evnHXvQQQfFn//85+jQoUPeYiKFKuT4Jk2axHPPPRcjRoyIffbZJ3etbNSoURQXF8eZZ565yucty+q8hw866KB48sknY4899ojatWtHw4YN4+CDD46JEyfGz372s3LpFwBUJEVZtswyZAAAwArdeOONccopp0Tv3r3jkUceSd0dAKASM3IOAABWUclCBytbpRUAYGWMnAMAAACARIycAwAAAIBEhHMAAAAAkIhwDgAAAAASEc4BAAAAQCLCOQAAAABIRDgHAAAAAIkI5wAAAAAgEeEcAAAAACQinAMAAACARIRzAAAAAJCIcA4AAAAAEhHOAQAAAEAiwjkAAAAASEQ4BwAAAACJCOcAAAAAIBHh3AasV69e8T//8z/l9nhDhgyJoqKicnu8NfHTTz/F5ptvHsOHD0/dFQDWkaeffjqKiori6aefzm074YQTonXr1uu8LxWpJq4unxMA1k+33nprFBUVxQcffFAuj1dSf++9995yebwVWdVaopZRWQjnKpAZM2bE6aefHttss03UqVMn6tSpE9tuu22cdtpp8eabb0ZERPfu3aOoqGilP0OGDFnhuZ577rl4/PHH4/zzz19umzvvvDOKioqiXr165fk0V9uoUaPi2muvLaht9erV4+yzz45LL700fvzxx7XbsRVo3br1Sv9bnXDCCWt8nrPOOit22GGHaNy4cdSpUyc6dOgQQ4YMiblz5+a1mzRpUpx++unRsWPHqFu3bmyxxRZx5JFHxtSpU9e4DwCro+QLQlk/F1xwwVo//6xZs6JatWrRr1+/5baZM2dO1K5dOw477LC13p+KwucEgIrrrbfeij59+kSrVq2iVq1a0aJFi+jRo0f86U9/ymv3xz/+MR588MGCHnP48OFx6623ln9nE1LLqEyKsizLUneCiEceeST69u0b1apVi2OPPTY6d+4cVapUiSlTpsT9998fH374YcyYMSOmTp0aM2fOzB03adKkuP766+M3v/lNdOjQIbd9u+22i+2222655zvkkENi3rx5MXbs2DL3z507N9q1axezZ8/O/b4yCxcujIULF0atWrUKfdqr5IADDoi333674L/wfPvtt7HxxhvHDTfcEAMHDlwrfVqZBx98cLmv3Z///OeYOHFi3HDDDTFo0KA1Os9uu+0WxcXF0bZt26hVq1a89tpr8f/+3/+LLl26xLPPPhtVqizJ4fv06RPPPfdcHHHEEbHddtvF559/Hn/+859j7ty58eKLL0anTp3WqB8Aq+rWW2+NAQMGxMUXXxxbbrll3r5OnTrF9ttvX/BjPf3007HnnnvGuHHjonv37hGxZOTc008/vcLa0bNnz5gwYULMnDkz6tSpU2r/bbfdFieccELcd999BQd0Q4YMiYsuuigq68csnxMAKqbnn38+9txzz9hiiy2if//+sckmm8THH38cL774YkyfPj2mTZuWa1uvXr3o06dPqdBt0aJF8dNPP0XNmjVzo8A6deoUTZs2zRt9XqiS+jt69Ojo06fPmjy9lVqV+qqWUZlUS90BIqZPnx5HHXVUtGrVKp566qnYdNNN8/YPHTo0hg8fHlWqVIkePXrk7atVq1Zcf/310aNHj9wXkZWZNWtWjBkzJm688cbltrnkkkuifv36seeeexb815Zq1apFtWoV5y3VsGHD2HfffePWW29NdqE65JBDytz++OOPx0svvRQHHXTQGgdzERETJkwota1NmzZxzjnnxEsvvRQ777xzREScffbZMWrUqKhRo0auXd++feNnP/tZXH755XHHHXescV8AVkfPnj2jS5cuSc597LHHxmOPPRYPP/xwHHXUUaX2jxo1Kho0aBC9e/dO0Lt1z+cEgIrr0ksvjQYNGsSkSZOiYcOGeftmzZpV0GNUrVo1qlatuhZ6V3GoZVQ2bmutAIYNGxbff/99jBw5slQwF7HkAvCrX/0qNt9883I535gxY2LhwoWxzz77lLn/vffei2uuuSauvvrqVbrwlHX/fVFRUZx++unx4IMPRqdOnaJmzZrRsWPHeOyxx/LazZkzJ84888xo3bp11KxZM5o3bx49evSIV199NSKW3M47ZsyY+PDDD3O3OxUyh1CPHj1iwoQJ8fXXXxf8PNa2zz//PI477rho0aJFjBw5cq2dp+T1+fbbb3PbfvGLX+QFcxERW2+9dXTs2DEmT5681voCsCaWN11D69aty2VqgEMPPTTq1q0bo0aNKrVv1qxZ8dRTT0WfPn2iZs2aERExevToKC4ujtq1a0fTpk2jX79+8emnn67wHB988EEUFRWVecvQss+vpJ5OnTo1+vXrFw0aNIhmzZrF7373u8iyLD7++OM4+OCDY6ONNopNNtkkrrrqqlKPOX/+/Bg8eHC0bds2atasGZtvvnmcd955MX/+/JW+Hj4nAFRc06dPj44dO5YK5iIimjdvnvt3UVFRfP/993HbbbeVmk5n2TnnWrduHe+8804888wzubZLD/z49ttv46yzzspdg1u2bBnHH398fPnll3nnX7x4cVx66aXRsmXLqFWrVuy99955I/lKTJw4Mfbff/9o0KBB1KlTJ7p16xbPPfdcqXYTJkyIrl27Rq1ataJNmzZx0003Ffw6qWVUNhUn8t2APfLII9G2bdvYaaed1sn5nn/++WjSpEm0atWqzP1nnnlm7LnnntGrV6+455571vh8EyZMiPvvvz9OPfXUqF+/flx//fVx+OGHx0cffRRNmjSJiIhBgwbFvffeG6effnpsu+228dVXX8WECRNi8uTJscMOO8SFF14Ys2fPjk8++SSuueaaiIiC5gUoLi6OLMvi+eefjwMOOGCNn8uaWrx4cfTr1y+++uqrGDduXDRu3Dhv/+zZs+Onn35a6ePUqlWr1PNfuHBhfPvtt7FgwYJ4++2347e//W3Ur18/dtxxxxU+VpZlMXPmzOjYseOqPyGAcjJ79uxSH/KbNm26Ts5dt27dOPjgg+Pee++Nr7/+Ou/afPfdd8eiRYvi2GOPjYj/3obbtWvXuOyyy2LmzJlx3XXXxXPPPRevvfZamV+WVlffvn2jQ4cOcfnll8eYMWPikksuicaNG8dNN90Ue+21VwwdOjTuvPPOOOecc6Jr166xxx57RMSSWnPQQQfFhAkT4uSTT44OHTrEW2+9Fddcc01MnTp1paMDfE4AqLhatWoVL7zwQrz99tsrnJLm9ttvj5NOOil23HHHOPnkkyNiyZ01Zbn22mvjjDPOiHr16sWFF14YEREbb7xxRCy51XP33XePyZMnx8CBA2OHHXaIL7/8Mh5++OH45JNP8mr15ZdfHlWqVIlzzjknZs+eHcOGDYtjjz02Jk6cmGvzr3/9K3r27BnFxcUxePDgqFKlSowcOTL22muvGD9+fO67y1tvvRX77rtvNGvWLIYMGRILFy6MwYMH5/q1MmoZlU5GUrNnz84iIjvkkENK7fvmm2+yL774Ivfzww8/lGozevToLCKycePGFXzO3XbbLSsuLi5z3yOPPJJVq1Yte+edd7Isy7L+/ftndevWLehxBw8enC37loqIrEaNGtm0adNy2954440sIrI//elPuW0NGjTITjvttBU+fu/evbNWrVoV1JcSn332WRYR2dChQ1fpuLXl4osvziIiu+iii8rc361btywiVvrTv3//Use+8MILeW3atWtX0Pvi9ttvzyIi++tf/7qGzw5g1Y0cOXK517oSEZENHjy41LGtWrXKux6OGzeuVE3s379/QbVjzJgxWURkN910U972nXfeOWvRokW2aNGibMGCBVnz5s2zTp06ZfPmzcu1eeSRR7KIyH7/+9/nti1bE2fMmJFFRDZy5MhS5172+ZUce/LJJ+e2LVy4MGvZsmVWVFSUXX755bnt33zzTVa7du281+H222/PqlSpko0fPz7vPDfeeGMWEdlzzz23wtfC5wSAiuvxxx/PqlatmlWtWjXbZZddsvPOOy8bO3ZstmDBglJt69atW+b3hpLaO2PGjNy2jh07Zt26dSvV9ve//30WEdn9999fat/ixYuzLPtv/e3QoUM2f/783P7rrrsui4jsrbfeyrXfeuuts/322y93bJZl2Q8//JBtueWWWY8ePXLbDjnkkKxWrVrZhx9+mNv273//O6tatWqpWlIWtYzKxsi5xL777ruIKDsR7969e7zxxhu536+44oo455xz1vicX331VbRo0aLU9gULFsRZZ50VgwYNim233XaNz1Nin332yfsrzXbbbRcbbbRRvP/++7ltDRs2jIkTJ8Znn30Wm222Wbmdu1GjRhERpUZjpDB+/Pi46KKLonv37vHb3/62zDZXXXVVfPPNNyt9rLJeo2233TaeeOKJ+P777+P555+PJ598cqWTmk6ZMiVOO+202GWXXaJ///6FPRGAteAvf/lLbLPNNsnOX/LX+VGjRuVGGMyYMSNefPHFOOecc6JKlSoxceLEmDVrVgwZMiRvIujevXtH+/btY8yYMXHRRReVW59OOumk3L+rVq0aXbp0iU8++SROPPHE3PaGDRtGu3bt8mrq6NGjo0OHDtG+ffu8+rfXXntFRMS4cePiF7/4xXLP63MCQMXVo0ePeOGFF+Kyyy6LsWPHxgsvvBDDhg2LZs2axYgRI+Kggw4q1/Pdd9990blz5zj00ENL7Vv29s4BAwbkTaGz++67R0TE+++/H506dYrXX3893nvvvfjtb38bX331Vd6xe++9d9x+++2xePHiyLIsxo4dG4ccckhsscUWuTYdOnSI/fbbLx599NGV9lsto7IRziVWv379iCh7ZZibbrop5syZEzNnzox+/fqV63mzMla3ueaaa+LLL78s1y8WEZF3QS3RqFGjvBBq2LBh0b9//9h8882juLg4evXqFccff3xstdVWa3Tukue5bOFY1ueff77a59hkk01W2uarr76Ko48+Oho1ahR33nlnbvXUZRUXF692PzbaaKPcnAoHH3xwjBo1Kg4++OB49dVXo3PnzqXaf/7559G7d+9o0KBB3Hvvvev9pLBAxbbjjjsmWxAiYsn8rn379o3hw4fHp59+Gi1atMjNQVdyS+uHH34YERHt2rUrdXz79u3LXJxnTSxbPxs0aBC1atUqdbtvgwYN8r7kvPfeezF58uRo1qxZmY9byIThPicAVFxdu3aN+++/PxYsWBBvvPFGPPDAA3HNNddEnz594vXXXy/X0Gn69Olx+OGHF9R22et5SWhUcj1/7733IiJWOChg9uzZMX/+/Jg3b15svfXWpfa3a9euoHAuQi2jchHOJdagQYPYdNNN4+233y61r2QOukKXUS5UkyZNSo3Omj17dlxyySVx6qmnxnfffZcb0Td37tzIsiw++OCDqFOnTt4ko4VaXuiz9MXyyCOPjN133z0eeOCBePzxx+OKK66IoUOHxv333x89e/Zc5XOWKHmeK5u3qKyFOApV1kV/2f39+/ePzz77LP7xj3+s8K8kX3/9dSxYsGCl56xdu3Y0aNBghW0OO+ywOO644+Lvf/97qXBu9uzZ0bNnz/j2229j/Pjx5fqXG4B1ZdGiReX6eP369Ys///nPcdddd8U555wTd911V2y77bax/fbbr/FjL+8D84qeQ1n1s5Caunjx4vjZz34WV199dZltV7bAlM8JAJVDjRo1omvXrtG1a9fYZpttYsCAATF69OgYPHhwkv6s7Hq+ePHiiFhyR9jyamu9evUKWrxoZdQyKhvhXAXQu3fvGDFiRLz00ksrnby/PLRv3z7uu+++vG3ffPNNzJ07N4YNGxbDhg0rdcyWW24ZBx98cMFLTK+OTTfdNE499dQ49dRTY9asWbHDDjvEpZdemrtQrc5fAmbMmBERS4ZAr8gTTzyx6h0u0NVXXx1jxoyJs846K3r37r3Ctocddlg888wzK33M/v37l7ni39Lmz58fixcvjtmzZ+dt//HHH+PAAw+MqVOnxpNPPlmuf1kDWBsaNWqUt/J0xJLbUv7zn/+U63l22mmnaNOmTYwaNSp69OgR77zzTlx66aW5/SWTSr/77ru5W0RLvPvuu8uddDriv6MHln0eJaPxylObNm3ijTfeiL333nu1aqfPCQCVT8no86Vr46pcF5fXtk2bNmUOJFkdJbd9Ln3HT1maNWsWtWvXzo20W9q7775b0LnUMiob4VwFcN5558WoUaNi4MCB8dRTT5VagWZlI7NW1S677BIjRoyI999/PzeEtnnz5vHAAw+Uanv99dfHCy+8EHfdddcajS5bkUWLFsXcuXPzRoI1b948Nttss7y/mtStW7dU0FRiypQpUadOnVLDiV955ZUoKiqKXXbZZYV9WFFxWBOTJk2K//3f/43i4uK4/PLLV9p+deac+/bbb6Nu3bpRvXr1vDYjRoyIiMi7TWzRokXRt2/feOGFF+Khhx5a6esCUBG0adMmnn322bxtN998c7mPnItYcgvrxRdfHIMHD46ioqI45phjcvu6dOkSzZs3jxtvvDEGDhwYNWvWjIiIf/7znzF58uT4/e9/v9zH3WijjaJp06bx7LPPxplnnpnbPnz48HJ/DkceeWQ8+uijccstt+Tmzysxb968WLx4cdStW3e5x/ucAFBxjRs3Lrp3714qxCm51XPpqRfq1q1b6o9Cy7O8tocffnhcfPHF8cADD5Sady7LslUKk4qLi6NNmzZx5ZVXxjHHHFNq3vUvvvgimjVrFlWrVo399tsvHnzwwfjoo49y1+7JkyfH2LFjCzqXWkZlI5yrALbeeusYNWpUHH300dGuXbs49thjo3PnzpFlWcyYMSNGjRoVVapUiZYtW5bL+Xr37h3VqlWLJ598MvehvU6dOnHIIYeUavvggw/GSy+9VOa+8jJnzpxo2bJl9OnTJzp37hz16tWLJ598MiZNmhRXXXVVrl1xcXHcfffdcfbZZ0fXrl2jXr16ceCBB0bEkr8SdOvWLZ5++um8x37iiSdi1113zS1fvS798MMP0bdv3/jpp5/igAMOWO4S3RtvvHH06NEjIlZvzrmnn346fvWrX0WfPn1i6623jgULFsT48ePj/vvvjy5duuTNV/jrX/86Hn744TjwwAPj66+/jjvuuCPvscp7bkOA8nDSSSfFoEGD4vDDD48ePXrEG2+8EWPHjl0rt2/069cvLr744njooYdi1113jdatW+f2Va9ePYYOHRoDBgyIbt26xdFHHx0zZ86M6667Llq3bh1nnXXWSp/H5ZdfHieddFJ06dIlnn322Zg6dWq5P4fjjjsu7rnnnhg0aFCMGzcudt1111i0aFFMmTIl7rnnnhg7duwK5/fzOQGg4jrjjDPihx9+iEMPPTTat28fCxYsiOeffz7uvvvuaN26dQwYMCDXtri4OJ588sm4+uqrY7PNNostt9wyN3XSsoqLi+OGG26ISy65JNq2bRvNmzePvfbaK84999y4995744gjjoiBAwdGcXFxfP311/Hwww/HjTfeWObc1stTpUqVGDFiRPTs2TM6duwYAwYMiBYtWsSnn34a48aNi4022ij+8Y9/RETERRddFI899ljsvvvuceqpp8bChQvjT3/6U3Ts2DHefPPNlZ5LLaPSWbeLw7Ii06ZNy0455ZSsbdu2Wa1atbLatWtn7du3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+GHMmDEjpk6dGjNnzswdN2nSpLj++uvjN7/5TXTo0CG3fbvttovttttuuec75JBDYt68eTF27Ngy98+dOzfatWsXs2fPzv2+MgsXLoyFCxdGrVq1Cn3aq+SAAw6It99+u+C/8nz77bex8cYbxw033BADBw5cK31a2fk7dOgQbdq0ifHjx+f9leWKK66I8847L8aMGRO9evVa7XO8+eab8atf/Sp23XXX2GKLLeKnn36KJ554Ih5++OH43//93/jjH/+Ya9u0adPYbLPN4pBDDoktttgi3nrrrbjxxhtjq622ildffTVq1669Rs8XYFXdeuutMWDAgLj44otjyy23zNvXqVOn2H777Qt+rKeffjr23HPPGDduXHTv3j0iloyce/rpp1dYN3r27BkTJkyImTNnRp06dUrtv+222+KEE06I++67r+CAbsiQIXHRRReV+iNJZeEzAkDF9Pzzz8eee+4ZW2yxRfTv3z822WST+Pjjj+PFF1+M6dOnx7Rp03Jt69WrF3369CkVui1atCh++umnqFmzZu77SadOnaJp06Z5o88LVVJ/R48eHX369FmTp7dSq1Jf1TIqk2qpO8AS06dPj6OOOipatWoVTz31VGy66aZ5+4cOHRrDhw+PKlWqRI8ePfL21apVK66//vro0aNH7svIysyaNSvGjBkTN95443LbXHLJJVG/fv3Yc889C/6LS7Vq1aJatYrztmrYsGHsu+++ceuttya5WDVs2DCuu+666Nu3b9xyyy1x8sknR0TERx99FBdddFEceeSRaxTMRSwJYZctoqeffnoceOCBcf3118cf/vCHqFq1akRE3HvvvaXeI8XFxdG/f/+4884746STTlqjvgCsrp49e0aXLl2SnPvYY4+Nxx57LB5++OE46qijSu0fNWpUNGjQIHr37p2gd+uezwgAFdell14aDRo0iEmTJkXDhg3z9s2aNaugx6hatWru+8H6Si2jsnFbawUxbNiw+P7772PkyJGlgrmIJReBX/3qV7H55puXy/nGjBkTCxcujH322afM/e+9915cc801cfXVV6/Sxaese/CLiori9NNPjwcffDA6deoUNWvWjI4dO8Zjjz2W127OnDlx5plnRuvWraNmzZrRvHnz6NGjR7z66qsRseR23jFjxsSHH36Yu+WpkHmEevToERMmTIivv/664OdRnkoCuAsuuCBXMM8444yoXr16XHfddWvtvK1bt44ffvghFixYkNtWVnh76KGHRkTE5MmT11pfANbE8qZqaN26dZxwwglr/PiHHnpo1K1bN0aNGlVq36xZs+Kpp56KPn36RM2aNSMiYvTo0VFcXBy1a9eOpk2bRr9+/eLTTz9d4Tk++OCDKCoqKvOWoWWfX0ktnTp1avTr1y8aNGgQzZo1i9/97neRZVl8/PHHcfDBB8dGG20Um2yySVx11VWlHnP+/PkxePDgaNu2bdSsWTM233zzOO+882L+/PkrfT18RgCouKZPnx4dO3YsFcxFRDRv3jz376Kiovj+++/jtttuy10XS2rmsnPOtW7dOt5555145plncm2X/t7w7bffxllnnZW7Brds2TKOP/74+PLLL/POv3jx4rj00kujZcuWUatWrdh7773zRvKVmDhxYuy///7RoEGDqFOnTnTr1i2ee+65Uu0mTJgQXbt2jVq1akWbNm3ipptuKvh1UsuobCpO5LuBe+SRR6Jt27ax0047rZPzPf/889GkSZNo1apVmfvPPPPM2HPPPaNXr15xzz33rPH5JkyYEPfff3+ceuqpUb9+/bj++uvj8MMPj48++iiaNGkSEUvmZ7v33nvj9NNPj2233Ta++uqrmDBhQkyePDl22GGHuPDCC2P27NnxySefxDXXXBMRUdDcAMXFxZFlWTz//PNxwAEHrPFzWR3Dhw+Pjh07xllnnRVHHnlkPPzww3HjjTfGJptsktdu2QK3PPXr1899SSwxb968+P7772Pu3LnxzDPPxMiRI2OXXXZZ6a2qn3/+eUQsueUVIJXZs2eXugauq+tS3bp14+CDD4577703vv7662jcuHFu39133x2LFi2KY489NiL+extu165d47LLLouZM2fGddddF88991y89tprZX5ZWl19+/aNDh06xOWXXx5jxoyJSy65JBo3bhw33XRT7LXXXjF06NC4884745xzzomuXbvGHnvsERFLvhwddNBBMWHChDj55JOjQ4cO8dZbb8U111wTU6dOXenoAJ8RACquVq1axQsvvBBvv/12dOrUabntbr/99jjppJNixx13zN2906ZNmzLbXnvttXHGGWdEvXr14sILL4yIiI033jgiltzqufvuu8fkyZNj4MCBscMOO8SXX34ZDz/8cHzyySd5tfryyy+PKlWqxDnnnBOzZ8+OYcOGxbHHHhsTJ07MtfnXv/4VPXv2jOLi4hg8eHBUqVIlRo4cGXvttVeMHz8+dtxxx4hYMq/evvvuG82aNYshQ4bEwoULY/Dgwbl+rYxaRqWTkdzs2bOziMgOOeSQUvu++eab7Isvvsj9/PDDD6XajB49OouIbNy4cQWfc7fddsuKi4vL3PfII49k1apVy955550sy7Ksf//+Wd26dQt63MGDB2fLvq0iIqtRo0Y2bdq03LY33ngji4jsT3/6U25bgwYNstNOO22Fj9+7d++sVatWBfWlxGeffZZFRDZ06NBVOq68XXnllVlEZI0bN8523XXXbPHixaXaRERBPyNHjix17GWXXZbXZu+9984++uijlfbrxBNPzKpWrZpNnTq1PJ4mwCoZOXLkcq91JSIiGzx4cKljW7VqlfXv3z/3+7hx40rVw/79+xdUN8aMGZNFRHbTTTflbd95552zFi1aZIsWLcoWLFiQNW/ePOvUqVM2b968XJtHHnkki4js97//fW7bsvVwxowZy71+L/v8So49+eSTc9sWLlyYtWzZMisqKsouv/zy3PZvvvkmq127dt7rcPvtt2dVqlTJxo8fn3eeG2+8MYuI7Lnnnlvha+EzAkDF9fjjj2dVq1bNqlatmu2yyy7Zeeedl40dOzZbsGBBqbZ169bNqw8lSmrvjBkzcts6duyYdevWrVTb3//+91lEZPfff3+pfSXfZ0rqb4cOHbL58+fn9l933XVZRGRvvfVWrv3WW2+d7bfffnnfhX744Ydsyy23zHr06JHbdsghh2S1atXKPvzww9y2f//731nVqlVL1ZKyqGVUNkbOVQDfffddRJSdinfv3j3eeOON3O9XXHFFnHPOOWt8zq+++ipatGhRavuCBQvirLPOikGDBsW22267xucpsc8+++T9pWa77baLjTbaKN5///3ctoYNG8bEiRPjs88+i80226zczt2oUaOIKHxU2tpy5plnxt/+9rd4++2346abbipzCe4nnniioMfq2LFjqW1HH310dOnSJb744ot45JFHYubMmTFv3rwVPs6oUaPir3/9a5x33nmx9dZbF/ZEANaCv/zlL7HNNtskO3/JX+dHjRqVG2EwY8aMePHFF+Occ86JKlWqxMSJE2PWrFkxZMiQvImge/fuHe3bt48xY8bERRddVG59Wnoe0KpVq0aXLl3ik08+iRNPPDG3vWHDhtGuXbu8ejp69Ojo0KFDtG/fPq/27bXXXhERMW7cuPjFL36x3PP6jABQcfXo0SNeeOGFuOyyy2Ls2LHxwgsvxLBhw6JZs2YxYsSIOOigg8r1fPfdd1907tw5NxXO0pb9PjNgwICoUaNG7vfdd989IiLef//96NSpU7z++uvx3nvvxW9/+9v46quv8o7de++94/bbb4/FixdHlmUxduzY3CJ2JTp06BD77bdfPProoyvtt1pGZSOcqwDq168fEWWvDnPTTTfFnDlzYubMmdGvX79yPW9Wxgo311xzTXz55Zfl+uUiIvIuqiUaNWoU33zzTe73YcOGRf/+/WPzzTeP4uLi6NWrVxx//PGx1VZbrdG5S55nWWHY0kpu71wdy96eWpaqVavGz3/+89w8EWVZ3pwIhWjVqlVu2PbRRx8dJ598cuyzzz7x7rvvlnlr6/jx4+PEE0+M/fbbLy699NLVPi9Aedhxxx2TLQgRsWRu1759+8bw4cPj008/jRYtWuTmoCu5pfXDDz+MiIh27dqVOr59+/YxYcKEcu3TsrWzQYMGUatWrVK3+zZo0CDvS857770XkydPjmbNmpX5uIVMGO4zAkDF1bVr17j//vtjwYIF8cYbb8QDDzwQ11xzTfTp0ydef/31cg2dpk+fHocffnhBbZe9npeERiXX8/feey8iIvr377/cx5g9e3bMnz8/5s2bV+bggXbt2hUUzkWoZVQuwrkKoEGDBrHpppvG22+/XWpfyRx0hS6lXKgmTZrkXSgillwIL7nkkjj11FPju+++y43omzt3bmRZFh988EHUqVMnb6LRQi1vNaClL5hHHnlk7L777vHAAw/E448/HldccUUMHTo07r///ujZs+cqn7NEyfNc2dxFZS3EUaiyLvyro9CAsEGDBiudS65Pnz5xyy23xLPPPhv77bdf3r433ngjDjrooOjUqVPce++9FWrFIYBCLVq0qFwfr1+/fvHnP/857rrrrjjnnHPirrvuim233Ta23377NX7s5X1gXtFzKKt2FlJPFy9eHD/72c/i6quvLrPtyhaX8hkBoHKoUaNGdO3aNbp27RrbbLNNDBgwIEaPHh2DBw9O0p+VXc8XL14cEUvuBlteba1Xr15BixetjFpGZeMbeQXRu3fvGDFiRLz00ku5STDXpvbt28d9992Xt+2bb76JuXPnxrBhw2LYsGGljtlyyy3j4IMPLniZ6dWx6aabxqmnnhqnnnpqzJo1K3bYYYe49NJLcxer1flrwIwZMyJiyTDoFSn0ltK1qdCAcOTIkStdobDkltbZs2fnbZ8+fXrsv//+0bx583j00UcLmmQUIKVGjRrFt99+m7dtwYIF8Z///Kdcz7PTTjtFmzZtYtSoUdGjR49455138kYWl4xOfvfdd3O3iJZ49913lzvpdMR/Rw8s+zxKRuOVpzZt2sQbb7wRe++992rVTZ8RACqfktHnS9fGVbkuLq9tmzZtyhxEsjpKbvvcaKONVnjHULNmzaJ27dq5kXZLe/fddws6l1pGZSOcqyDOO++8GDVqVAwcODCeeuqpUqvQlNfIrBK77LJLjBgxIt5///3cMNrmzZvHAw88UKrt9ddfHy+88ELcddddazS6bEUWLVoUc+fOjQYNGuS2NW/ePDbbbLO8v5zUrVu3VNhUYsqUKVGnTp1SQ4pfeeWVKCoqil122WWFfViTW0rLy+rMOffFF1+UeevSX//61ygqKooddtght+3zzz+PfffdN6pUqRJjx45d7i1PABVJmzZt4tlnn83bdvPNN5f7yLmIJbewXnzxxTF48OAoKiqKY445JrevS5cu0bx587jxxhtj4MCBuVWz//nPf8bkyZPj97///XIfd6ONNoqmTZvGs88+G2eeeWZu+/Dhw8v9ORx55JHx6KOPxi233JKbP6/EvHnzYvHixVG3bt3lHu8zAkDFNW7cuOjevXupEKfkVs+lp16oW7duqT8KLc/y2h5++OFx8cUXxwMPPFBq3rksy1YpTCouLo42bdrElVdeGcccc0ypQQIl32uqVq0a++23Xzz44IPx0Ucf5a7dkydPjrFjxxZ0LrWMykY4V0FsvfXWMWrUqDj66KOjXbt2ceyxx0bnzp0jy7KYMWNGjBo1KqpUqRItW7Ysl/P17t07qlWrFk8++WTug3udOnXikEMOKdX2wQcfjJdeeqnMfeVlzpw50bJly+jTp0907tw56tWrF08++WRMmjQprrrqqly74uLiuPvuu+Pss8+Orl27Rr169eLAAw+MiCV/KejWrVs8/fTTeY/9xBNPxK677ppbwroiW52A8NJLL43nnnsu9t9//9hiiy3i66+/jvvuuy8mTZoUZ5xxRrRt2zbXdv/994/3338/zjvv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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(2, 3, figsize=(14, 8))\n", "\n", "for row, (axis, axis_name) in enumerate([(0, \"Z\"), (1, \"Y\")]):\n", " mid = gt_instances.shape[axis] // 2\n", " slc = [slice(None)] * 3\n", " slc[axis] = mid\n", "\n", " gt_slice = gt_instances[tuple(slc)]\n", " full_slice = full_result[tuple(slc)]\n", " stitch_slice = stitched_result[tuple(slc)]\n", "\n", " axes[row, 0].imshow(gt_slice, interpolation=\"nearest\", cmap=\"nipy_spectral\")\n", " axes[row, 0].set_title(f\"GT ({n_gt} inst.) — {axis_name}={mid}\")\n", " axes[row, 0].axis(\"off\")\n", "\n", " axes[row, 1].imshow(full_slice, interpolation=\"nearest\", cmap=\"nipy_spectral\")\n", " axes[row, 1].set_title(f\"Full Volume ({full_result.max()} inst.)\")\n", " axes[row, 1].axis(\"off\")\n", "\n", " axes[row, 2].imshow(stitch_slice, interpolation=\"nearest\", cmap=\"nipy_spectral\")\n", " axes[row, 2].set_title(f\"Stitched ({stitched_result.max()} inst.)\")\n", " axes[row, 2].axis(\"off\")\n", "\n", "fig.suptitle(\"GT vs Full-Volume vs Tiled/Stitched\", fontweight=\"bold\", fontsize=14)\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "id": "79d92ef0", "metadata": { "execution": { "iopub.execute_input": "2026-03-17T22:54:59.960956Z", "iopub.status.busy": "2026-03-17T22:54:59.960758Z", "iopub.status.idle": "2026-03-17T22:55:00.165985Z", "shell.execute_reply": "2026-03-17T22:55:00.164746Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ4AAAGNCAYAAABQTOxRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXQhJREFUeJzt3Xd8FNX+//H3EtJIoyWEmoSA9KIRECEUBUIRQZqAhaAgV4Er2NGfAoqiiIAixfK94FWaVLFRpSlcBKQIiFIVkQCCBAgt5fz+4GZvNjMJu5glAV7Px2Mfsp89O3Nmdp2z88kpDmOMEQAAAAAAAABkUSi/KwAAAAAAAACg4CFxCAAAAAAAAMCCxCEAAAAAAAAACxKHAAAAAAAAACxIHAIAAAAAAACwIHEIAAAAAAAAwILEIQAAAAAAAAALEocAAAAAAAAALEgcAgAAAAAAALAgcQgAwHVg5cqVcjgccjgcSkxMzO/qwAOJiYnOz27lypX5XZ0byoEDB5znvlmzZs74sGHDnPGpU6fmW/0AAADyG4lDAAAKqKzJC7tH0aJF87uKHvn555/Vv39/Va1aVcHBwQoNDVWtWrX02GOPacOGDfldPeSzrMnvyz1uBPPnz9fdd9+t6OhoBQUFyc/PT+XKlVPXrl21fv16l7LJycl6++23dffdd6ty5coKCgpSUFCQbr75Zo0ZM0ZpaWn5dBQAAOBaVzi/KwAAAK5/7777rgYPHmxJYGzfvl3bt2/X2rVrtWXLlvypXD574YUX1KdPH0lSrVq18rk2BV/hwt7/+frQQw+pRYsWkqSbbrrJ6/uz8+WXX+rzzz93iR06dEhz5szRggULtHz5cjVp0kSS9NNPP2nQoEGWbWzZskVbtmzR6tWrtWDBgqtQawAAcL0hcQgAwDWgTZs2ev75511iVyOBkhfmzJmjgQMHOp+3atVKDz30kMLDw/Xrr79qzpw5+uOPP/KxhvkjJSVFQUFBqly5sipXrpzf1cl3N998s9asWWOJ79u3T71791ZGRoYk6eWXX/Z6XSpUqKAKFSp4fT+5qVy5soYMGaK6deuqZMmS2rdvn4YNG6ZDhw4pLS1NkyZNciYOpUvXg86dO6tjx44qWrSoZsyYoX//+9+SpM8++0wrVqxQ8+bN8+twAADAtcoAAIACaejQoUaSkWR69eqVa9kVK1bkWPbw4cNm4MCBpmLFisbPz8+EhYWZpk2bmk8//dSl3C233GIkGV9fX3P27FljjDG7d+92bnfo0KHOst26dXPGd+7cmWO9UlNTTYUKFZxlu3TpYjIyMizlsm9j9+7dJjEx0ZQrV874+vqa4sWLmzZt2phly5bletyffvqpqVq1qgkMDDSNGzc227ZtM+np6Wb48OGmTJkyJjAw0LRu3docOHDAZTtRUVHO7SQlJZmePXuasLAwExoaanr27GmOHDniUn7kyJGmadOmpmzZsiYgIMAEBgaaatWqmRdeeMGkpKTkuO1ff/3VdOrUyYSGhpro6GhjjDG9evVyvr5ixQqXY7vzzjtNsWLFTOHChU3JkiVNvXr1zD//+U9z8uRJl33Mnj3bNGvWzISFhRk/Pz8TExNj+vfvb/744w+Xcln3tXjxYvPiiy+asmXLGn9/f3P77bebLVu25PhZ5ofU1FRTv359Z53vuOMOk56e7tZ73Tl/+/fvd267adOmzvdm/X9vypQpLtvduXOn6dWrl6lQoYLx8/MzJUuWNM2bN7d8N1evXm3at29vSpYsaXx9fU10dLQZPHiwOXHixBWfj7Fjxzrr1a5dO2f84MGDZseOHZbyN998s7P8G2+8ccX7BQAANy4ShwAAFFB5kTjct2+fiYyMdL6W/fHss886yz7++OPO+Jo1a4wxxvz73/92xlq1auUsW758eSPJhIeH51qv1atXO99fqFAhs2/fvsse9/r1601ISIhtfR0Oh5k4caLtccfExBiHw+FSPjIy0vTt29eynUaNGrnsM2tyr0qVKpbytWvXNufPn3eWtyuT+WjevHmO265YsaLz31FRUcYY+8Thrl27TGBgYI772L17t3P7zzzzTI7lIiMjXc551n1lrUvmIzo62qSmpl72M7pannvuOWfdwsPDLYnQnLh7/jxNHC5atCjH7WZNrH/wwQemUKFCtuWqVKnicfLw4sWLZufOneb22293bmf06NGXfV/Xrl2d5d99912P9gkAAGCMMSyOAgDANeCjjz6yLBDhzurJjz32mJKSkiRJzZo108KFCzVmzBgFBARIkt544w3nQgtZhz2uW7fO5b+StH79emVkZOjQoUM6ePCgJKlx48a57n/r1q3Of5ctW1YxMTG5ljfGqHfv3jp9+rQkqUuXLvryyy/14osvqlChQjLGaNCgQc79Z7V//34l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ol27djlfv9wwZelST7bRo0erW7dukqRZs2YpOTlZvXv3Vnh4uH799VfNmTNHhw4d0ubNm1W3bl1Vq1ZNP/30kw4fPqz77rtPiYmJWr9+vebPny9J8vPzU+fOnf/eyclFv379NHLkSJ0/f95lPrwOHTpIkqKiopyxd955R35+flq/fr3+7//+L8/qMGPGDE2ePFkdO3ZUTEyMwsLCnAtdSHLOodejRw+98847ki4l2cqUKaPKlStr3LhxzjIJCQmW+Q0LovPnz6tHjx46f/68pEtDzGNjY/Xtt99ayl5urkR3z58nWrVqpYiICB09elT79+9Xq1atNGDAAAUEBOjbb79ViRIl9PTTT6tLly567rnndOHCBb3++utyOBxq2LChzp49q/3792vFihU6d+6cli5dmuO+fv/9d91+++168MEHVbduXYWHh+uXX35xGXJ8yy23OP999OhRxcfHa/fu3ZKkO++8Uz179tR3333nLFOhQgVnEh8AAMBdJA4BALiOTZgwQY0aNVJSUpK++eYbl+SJJD377LMuc+NlJhd+++03SZdW6s0cjtywYUOPE4fSpTnWxo8fr8GDBystLU2LFi3SokWLXMpkDml2OByaOnWqWrRoodOnT+vTTz/Vp59+6izncDg0btw45yrA3hAUFORMdGaqWbOmHnnkEUnS/fffr1dffVVnz57V0qVLnQmgRo0auSRq/o6MjAytWbNGa9assX09M9l722236ZlnntGoUaN0/vx5PfHEEy7lIiMjXZLEBdncuXP1448/Op9v3Lgxx+/Y5eZKdPf8eaJIkSKaOnWq7rnnHl24cEGrVq1yDgmWLvUulKRy5crp3XffVb9+/XThwgUNGzbMsq2s80vm5PDhwznOTRgSEqIxY8Y4n+/cudOZNJSk5cuXa/ny5S7vGTp0qG1dAAAAcsNQZQAArmMVK1bUDz/8oAEDBigmJka+vr4KDQ1VkyZNNGvWLL3++uuW92TtdRgXF+dcoCRznkPpUq+/rAnHyxkwYIB+/PFHPfroo6pSpYqKFCmi4OBgVa1aVY888ojef/99Z9n69etr06ZN6tWrl8qWLavChQurWLFiat26tZYsWaJHH330Sk6F25YvX64HHnhAYWFhCgkJUffu3bVs2TIFBARIupRcXbJkierXr6/AwEDFxsZq4sSJ6tOnT57VoWHDhnr88cd1yy23qGTJkvLx8VFYWJji4+M1a9Ysde/e3Vn2jTfe0KeffqqmTZsqNDRUvr6+io6OVv/+/fXDDz8oJiYmz+rlTdlXpv47PDl/nmjTpo02bdqkBx54QOXKlZOvr69KlCihZs2auSQ5+/Tpo9WrV6tTp04qVaqUChcurFKlSql+/fp68cUXL5vMLVmypJ555hnddtttioiIUOHChVWkSBHVqFFDAwcO1LZt2yyL3QAAAHiDw+T3DNgAAAD5LDo6Wr/++quk/F8cBAAAACgo6HEIAAAAAAAAwILEIQAAAAAAAAALEocAAAAAAAAALJjjEAAAAAAAAIAFPQ4BAAAAAAAAWJA4BAAAAAAAAGBB4hAAAAAAAACABYlDAAAAAAAAABYkDgEAAAAAAABYkDgEAAAAAAAAYEHiEAAAAAAAAIAFiUMAAAAAAAAAFiQOAQAAAAAAAFiQOAQAAAAAAABgQeIQAAAAAAAAgAWJQwAAAAAAAAAWJA4BAAAAAAAAWJA4BAAAAAAAAGBB4hAAAAAAAACABYlDAAAAAAAAABYkDgEAAAAAAABYkDgEAAAAAAAAYEHiEAAAAAAAAIAFiUMAAAAAAAAAFiQOAQAAAAAAAFiQOLyMlStXyuFwaOXKlc5YYmKioqOjr3pdoqOjlZiYeNX3e7UMGzZMDocjv6txTZo6daocDocOHDhwVfZ3vX8XAXhXXl+zMtvqOXPm5Mn2cpOXbdWBAwfkcDg0derUPNnejcbhcGjYsGFXZV/8RgFQEHFtcs+ZM2cUERGhadOmXbZsft3r56fnnntODRo0yO9qoAC7LhOHmTckdo/nnnvO6/sfM2aMHA6Hli1blmOZDz74QA6HQwsXLvR6fQqCnD6PyMjI/K6aRXR0tBwOh1q0aGH7euZn53A4tHHjxqtcO/dNnDiRm1EAXvHjjz+qS5cuioqKUkBAgMqWLauWLVtq/PjxLuVee+01LViwwK1tXm/XrMTExBzbvkWLFuV39Vxk3ngWKlRIBw8etLx+6tQpBQYGyuFwaMCAAflQQ/esXbtWw4YN08mTJ/O7KgCuExMnTpTD4SCpotzbtYCAgPyuXq7efvtthYSEqHv37vldlQJp0KBB2rp16w2Tm4DnCud3Bbzp5ZdfVkxMjEusZs2aXt9v9+7d9fTTT2v69Ok5Jp+mT5+uEiVKqE2bNl6vT0HRsmVLPfjggy6xwMDAfKpN7gICArRixQolJSVZkpvTpk1TQECAzp8/n0+1s3rggQfUvXt3+fv7O2MTJ05UyZIl6RkIIE+tXbtWzZs3V4UKFdS3b19FRkbq4MGD+s9//qO3335bAwcOdJZ97bXX1KVLF3Xs2NFlGzfKNcvf318ffvihJV6nTp18qM3l+fv7a8aMGXrmmWdc4vPmzcunGuXu3LlzKlz4fz9l165dq+HDhysxMVFFixbNv4oBuG5MmzZN0dHR+v7777Vnzx5VqlQpv6uUr3Jq13x8fPKhNu5JTU3V22+/rcGDBxfoeuanyMhIdejQQaNHj9bdd9+d39VBAXRdJw7btGmjW2+99arvt0yZMmrevLnmzZunSZMmudwYSdKhQ4e0evVqPfLII/L19b3q9csvN910k+6///78roZbGjVqpA0bNmjWrFl6/PHHnfHff/9da9as0T333KO5c+fmYw1d+fj40BACuCpeffVVhYWFacOGDZbkzNGjR93axo1yzSpcuPA10+5JUtu2bW0Th9OnT1e7du0KVLsnqcD3cAFwbdu/f7/Wrl2refPmqV+/fpo2bZqGDh2a39XyGmOMzp8/n2vHjitt11JSUhQUFGT72tmzZ1WkSBGPt5kpLS1NGRkZ8vPzs339iy++0LFjx9StW7cr3sfVkNs5uhq6deumrl27at++fapYsWK+1QMF03U5VNkdOc2Lk1dzt91///1KTk7Wl19+aXlt5syZysjI0H333Sfp0kXiySefVPny5eXv768qVapo9OjRMsbkuo+c5rSwmzsqOjpad911l1auXKlbb71VgYGBqlWrlnPuxnnz5qlWrVoKCAhQXFycNm/ebNnurl271KVLFxUvXlwBAQG69dZbvd6dOS0tTa+88opiY2Pl7++v6OhoPf/887pw4YKzzBNPPKESJUq4nK+BAwfK4XDonXfeccaOHDkih8OhSZMmXXa/AQEB6tSpk6ZPn+4SnzFjhooVK6aEhATLe7Zt26bExERVrFhRAQEBioyM1EMPPaTjx49bymZ+DgEBAYqNjdV7771n+3lmDgtbsGCBatasKX9/f9WoUcMyzC37Zx4dHa0dO3Zo1apVziEEzZo1k+TZ98YYoxEjRqhcuXIqUqSImjdvrh07dties5MnT2rQoEHO73GlSpX0xhtvKCMjw7Y8gGvT3r17VaNGDdseXREREc5/OxwOpaSk6KOPPnJehzLbV0+uWdKl68vgwYMVHR0tf39/lStXTg8++KD+/PNPl/1nZGTo1VdfVbly5RQQEKA777xTe/bssdRz/fr1at26tcLCwlSkSBE1bdpU3333naXct99+q3r16rlcq6+Gb775RvHx8QoKClLRokXVoUMH/fTTT87Xt23bZpnuZNOmTXI4HLrllltcttWmTRu3h9j17NlTW7Zs0a5du5yxpKQkffPNN+rZs6el/MWLF/XSSy8pLi5OYWFhCgoKUnx8vFasWGEpe/z4cT3wwAMKDQ1V0aJF1atXL23dutUyx2NiYqKCg4N16NAhdezYUcHBwQoPD9dTTz2l9PR0l21m/S03bNgwPf3005KkmJgY5/fowIEDuc4lafd70JPP/ZNPPlFcXJwCAwNVvHhxde/e3Xa4N4Brz7Rp01SsWDG1a9dOXbp0sZ0fL/P6Mnr0aL3//vvOe5Z69eppw4YNlvKzZ89W9erVFRAQoJo1a2r+/PmWOfXs5tjPuq/LTesxZcoU3XHHHYqIiJC/v7+qV69ue/+TeX+4ePFi5/1hXrRzmW38qlWr9NhjjykiIkLlypWTJDVr1kw1a9bUpk2b1KRJExUpUkTPP/+8pEt/fHz44YdVqlQpBQQEqE6dOvroo49sz8Ho0aM1btw45/neuXNnjvVZsGCBoqOjFRsba/tazZo1XT4POxkZGRo3bpxq1KihgIAAlSpVSv369dNff/1lKTds2DCVKVPGee+0c+dOS44ht3MkSV9//bXzd0BISIjatWtnew/mzv15amqqhg8frsqVKysgIEAlSpRQ48aNtXTpUpdymSMlP/vssxzPJW5c13WPw+TkZMtNRcmSJa/Kvjt16qRHH31U06dPV6dOnVxemz59uqKiotSoUSMZY3T33XdrxYoVevjhh1W3bl0tXrxYTz/9tA4dOqSxY8fmWZ327Nmjnj17ql+/frr//vs1evRotW/fXpMnT9bzzz+vxx57TJI0cuRIdevWTT///LMKFbqUW96xY4caNWqksmXL6rnnnlNQUJA+/fRTdezYUXPnztU999xz2f2fP3/e8nmEhIRYemRm1adPH3300Ufq0qWLnnzySa1fv14jR47UTz/95Lywx8fHa+zYsdqxY4dzKPqaNWtUqFAhrVmzRv/85z+dMUlq0qSJW+erZ8+eatWqlfbu3etsaKZPn64uXbrY9hRdunSp9u3bp969eysyMlI7duzQ+++/rx07dug///mPM1m3efNmtW7dWqVLl9bw4cOVnp6ul19+WeHh4bb1+PbbbzVv3jw99thjCgkJ0TvvvKPOnTvrt99+U4kSJWzfM27cOA0cOFDBwcF64YUXJEmlSpVy67izeumllzRixAi1bdtWbdu21Q8//KBWrVrp4sWLLuXOnj2rpk2b6tChQ+rXr58qVKigtWvXasiQITp8+LDGjRvn8b4BFExRUVFat26dtm/fnuv0Hx9//LH69Omj+vXr65FHHpEk2x/tUu7XrDNnzig+Pl4//fSTHnroId1yyy36888/tXDhQv3+++8u7frrr7+uQoUK6amnnlJycrJGjRql++67T+vXr3eW+eabb9SmTRvFxcVp6NChKlSokPMma82aNapfv76kS/M4tmrVSuHh4Ro2bJjS0tI0dOhQj6+l2ds9X19fhYWF5Vh+2bJlatOmjSpWrKhhw4bp3LlzGj9+vBo1aqQffvhB0dHRqlmzpooWLarVq1c7hxRltntbt27VqVOnFBoaqoyMDK1du9Z5/i+nSZMmKleunKZPn66XX35ZkjRr1iwFBwerXbt2lvKnTp3Shx9+qB49eqhv3746ffq0/u///k8JCQn6/vvvVbduXUmXbqTat2+v77//Xo8++qiqVq2qzz77TL169bKtR3p6uhISEtSgQQONHj1ay5Yt01tvvaXY2Fg9+uijtu/p1KmTfvnlF82YMUNjx451fi/Cw8N17Ngxt45f8uxzf/XVV/Xiiy+qW7du6tOnj44dO6bx48erSZMm2rx5M8OlgWvctGnT1KlTJ/n5+alHjx6aNGmSNmzYoHr16lnKTp8+XadPn1a/fv3kcDg0atQoderUSfv27XPeN3z55Ze69957VatWLY0cOVJ//fWXHn74YZUtWzZP6z1p0iTVqFFDd999twoXLqzPP/9cjz32mDIyMtS/f3+Xsj///LN69Oihfv36qW/fvqpSpcplt5+9XZMkPz8/hYaGusQee+wxhYeH66WXXlJKSoozfvz4cbVp00bdu3fX/fffr1KlSuncuXNq1qyZ9uzZowEDBigmJkazZ89WYmKiTp486TICTLqUHD1//rweeeQR+fv7q3jx4jnWd+3atZY/qknSkiVL1LlzZ1WvXl0jR47U8ePH1bt3b5cEXqZ+/fpp6tSp6t27t/75z39q//79evfdd7V582Z99913zs94yJAhGjVqlNq3b6+EhARt3bpVCQkJOU5xZXeOPv74Y/Xq1UsJCQl64403dPbsWU2aNEmNGzfW5s2bnUlmd+/Phw0bppEjRzp/k506dUobN27UDz/8oJYtWzrrEhYWptjYWH333XcaPHhwjucTNyhzHZoyZYqRZPvIJMkMHTrU8t6oqCjTq1cv5/MVK1YYSWbFihXOWK9evUxUVNRl69G1a1cTEBBgkpOTnbFdu3YZSWbIkCHGGGMWLFhgJJkRI0a4vLdLly7G4XCYPXv25Fi3oUOHGruPMPP49+/f7/JeSWbt2rXO2OLFi40kExgYaH799Vdn/L333rMc85133mlq1aplzp8/74xlZGSY22+/3VSuXPmy5yKnz2PKlCk5Hs+WLVuMJNOnTx+XbT311FNGkvnmm2+MMcYcPXrUSDITJ040xhhz8uRJU6hQIdO1a1dTqlQp5/v++c9/muLFi5uMjIxc6xoVFWXatWtn0tLSTGRkpHnllVeMMcbs3LnTSDKrVq1ynuMNGzY433f27FnLtmbMmGEkmdWrVztj7du3N0WKFDGHDh1yxnbv3m0KFy5s+TwlGT8/P5fvwdatW40kM378eGfM7jOvUaOGadq0qaVO7n5vjh49avz8/Ey7du1cztnzzz9vJLl8F1955RUTFBRkfvnlF5dtPvfcc8bHx8f89ttvlv0BuDYtWbLE+Pj4GB8fH9OwYUPzzDPPmMWLF5uLFy9aygYFBblcKzJ5cs166aWXjCQzb948y2uZ16bMtrpatWrmwoULztfffvttI8n8+OOPzvKVK1c2CQkJLte1s2fPmpiYGNOyZUtnrGPHjiYgIMClfdy5c6fx8fGxvYZm16tXL9t2L+sx7t+/39IW1q1b10RERJjjx487Y1u3bjWFChUyDz74oDPWrl07U79+fefzTp06mU6dOhkfHx/z9ddfG2OM+eGHH4wk89lnn+Va18x24dixY+app54ylSpVcr5Wr14907t3b2PMpTapf//+ztfS0tJczrcxxvz111+mVKlS5qGHHnLG5s6daySZcePGOWPp6enmjjvusBx/5nl7+eWXXbZ78803m7i4OJdY9t9yb775puV7ZYz9ec5pG+5+7gcOHDA+Pj7m1Vdfddnejz/+aAoXLmyJA7i2bNy40UgyS5cuNcZcaj/KlStnHn/8cZdymdeXEiVKmBMnTjjjn332mZFkPv/8c2esVq1aply5cub06dPO2MqVK40kl3tLu/vPrPvK7f7JGPt7koSEBFOxYkWXWOb94aJFi3I9F5lyatckmYSEBGe5zDa+cePGJi0tzWUbTZs2NZLM5MmTXeLjxo0zkswnn3zijF28eNE0bNjQBAcHm1OnTrmcg9DQUHP06NHL1jk1NdU4HA7z5JNPWl6rW7euKV26tDl58qQztmTJEsvnsWbNGiPJTJs2zeX9ixYtcoknJSWZwoULm44dO7qUGzZsmOXeKadzdPr0aVO0aFHTt29fl20kJSWZsLAwl7i79+d16tQx7dq1y+00ObVq1cpUq1bNrbK4sVzXQ5UnTJigpUuXujyupvvvv1/nz593mVQ8c+hr5jDlr776Sj4+Ps5ecZmefPJJGWP09ddf51l9qlevroYNGzqfZw5duuOOO1ShQgVLfN++fZKkEydO6JtvvlG3bt10+vRp/fnnn/rzzz91/PhxJSQkaPfu3Tp06NBl99+hQwfL52E35DfTV199JenSUOSsnnzySUlyDgMPDw9X1apVtXr1aknSd999Jx8fHz399NM6cuSIdu/eLelSb4zGjRvbDtO14+Pjo27dumnGjBmSLv3VsXz58oqPj7ctn3U+kMzelbfddpsk6YcffpB0qRfFsmXL1LFjR5UpU8ZZvlKlSjkulNOiRQuXXjq1a9dWaGio8/PxlmXLlunixYvOYd+ZBg0aZCk7e/ZsxcfHq1ixYs7vx59//qkWLVooPT3d+dkAuPa1bNlS69at0913362tW7dq1KhRSkhIUNmyZb0yfcXcuXNVp04d257t2a/nvXv3dpnjKPN6nXm93LJli3bv3q2ePXvq+PHjzmtVSkqK7rzzTq1evVoZGRlKT0/X4sWL1bFjR5f2sVq1arm2W9kFBARY2r233norx/KHDx/Wli1blJiY6NJ7onbt2mrZsqWzXcw8th9++MHZQ+Hbb79V27ZtVbduXWcP+zVr1sjhcKhx48Zu17lnz57as2ePNmzY4Pyv3TBl6VI7mXm+MzIydOLECaWlpenWW291tnuStGjRIvn6+qpv377OWKFChSw9X7L6xz/+4fI8Pj7e6+2eJ5/7vHnzlJGRoW7durm0e5GRkapcubLtcG0A145p06apVKlSat68uaRL7c29996rmTNnWqZNkKR7771XxYoVcz7P3v788ccf+vHHH/Xggw8qODjYWa5p06aqVatWntY96z1J5gi8pk2bat++fUpOTnYpGxMT87fbtaVLl+r111+3lO3bt6/tfMb+/v7q3bu3S+yrr75SZGSkevTo4Yz5+vrqn//8p86cOaNVq1a5lO/cuXOOo7WyOnHihIwxLp+N9L/2tlevXi6jAFq2bKnq1au7lJ09e7bCwsLUsmVLl+t9XFycgoODndf75cuXKy0tzTmKL1PWReOyy36Oli5dqpMnT6pHjx4u+/Lx8VGDBg2c+/Lk/rxo0aLasWOH8544N5n3ckB21/VQ5fr161+VxVGOHTvm0oAEBwcrODhYbdq0UfHixTV9+nTnnAYzZsxQnTp1VKNGDUnSr7/+qjJlyigkJMRlm9WqVXO+nley/giW5LxIli9f3jaeOWfDnj17ZIzRiy++qBdffNF220ePHr1sN/ty5crluMq0nV9//VWFChWyrF4WGRmpokWLupyb+Ph45w3VmjVrdOutt+rWW29V8eLFtWbNGpUqVUpbt27N8eYnJz179tQ777yjrVu3avr06erevXuOiccTJ05o+PDhmjlzpmWBgMxG+ujRozp37pztimw5rdKW/XOTLl3Us8+pkdcyz2/lypVd4uHh4ZbGd/fu3dq2bVuODbi7CyYAuDbUq1dP8+bN08WLF7V161bNnz9fY8eOVZcuXbRlyxbLj+6/Y+/evercubNbZbNfLzOvVZnXy8wfzTkNkZUuXa8vXLigc+fOWa5/klSlShWXBF5ufHx8PG73MveRXbVq1bR48WLn5Onx8fFKS0vTunXrVL58eR09elTx8fHasWOHS+KwevXquQ7hyu7mm29W1apVNX36dBUtWlSRkZG64447ciz/0Ucf6a233tKuXbuUmprqjMfExLgcV+nSpS2T3+fU7gUEBFjak6vR7h07dsztz3337t0yxtiWlXRDLX4HXG/S09M1c+ZMNW/eXPv373fGGzRooLfeekvLly9Xq1atXN5zufYn8/qe0z1A1j+2/F3fffedhg4dqnXr1uns2bMuryUnJ7skyrJeq93hSbuW07bLli1rWcjk119/VeXKlZ3TZGXK6Z7Y03qbbGsH5HSfI1263mf9PHbv3q3k5GSXeZyzyrzPyekzLl68uOXeKVP248j8nZJTu5s5HNyT+/OXX35ZHTp00E033aSaNWuqdevWeuCBB1S7dm3Le4wxbneywY3luk4cXgm7vyBdTr169VwuZkOHDtWwYcPk6+urbt266YMPPtCRI0f022+/affu3Ro1alSe1DWn/6lzOoacVrDMKZ55gc1c3OKpp57K8S9SOf34zwvuXLwaN26sDz74QPv27dOaNWsUHx/v7GWxZs0alSlTRhkZGTn2FsxJgwYNFBsbq0GDBmn//v25Jh67deumtWvX6umnn1bdunUVHBysjIwMtW7d+m8tEHK5z8dTnn5v3JGRkaGWLVtaVuLMdNNNN13xtgEUXH5+fqpXr57q1aunm266Sb1799bs2bPzbdVJd9uzN9980zn/XnbBwcEuC3AVVJkLbK1evVoVKlRQRESEbrrpJsXHx2vixIm6cOGC1qxZ49YcxNn17NlTkyZNUkhIiO69917LjVymTz75RImJierYsaOefvppRUREyMfHRyNHjtTevXuv+NjyesVtb7V7DodDX3/9tW19s/YoAnBt+eabb3T48GHNnDlTM2fOtLw+bdo0S+IwL3+v/51r1t69e3XnnXeqatWqGjNmjMqXLy8/Pz999dVXGjt2rOWeJLcVlP+unLadF/t0dxvFixeXw+H4W394ysjIUEREhO3iOJLc6vmYk+zHkfn5fPzxx4qMjLSUL1y4sEs5d+7PmzRpor179+qzzz7TkiVL9OGHH2rs2LGaPHmy+vTp4/Kev/7666qtCYFryw2bOCxWrJhOnjzpErt48aIOHz7s8bamTZumc+fOOZ9nXb78vvvu0+TJkzVr1izt379fDofDpQt2VFSUli1bptOnT7v0Osxc0TAqKirXY5AurTaZdQLuvOylKP3veHx9fT3qOfF3RUVFKSMjQ7t373b+tUm6tDryyZMnXc5NZkJw6dKl2rBhg5577jlJly6UkyZNUpkyZRQUFKS4uDiP69GjRw+NGDFC1apVy/FG86+//tLy5cs1fPhwvfTSS8549i7hERERCggIsF3l0y72d+T0o8Pd703m+d29e7fLd/rYsWOWxjc2NlZnzpy5qt8PAAVLZg//rO2oJ3+1zqlsbGystm/f/vcql2Vb0qW/2Od2vQoPD1dgYKDtsJ6ff/45T+piJ/O6a7ePXbt2qWTJkgoKCpJ0KWlbv359rVmzRhUqVHC2g/Hx8bpw4YKmTZumI0eOuL0gWFY9e/bUSy+9pMOHD+vjjz/OsdycOXNUsWJFzZs3z+Xzy544joqK0ooVK3T27FmXXof50e5llb3d8+Rzj42NlTFGMTEx/HEMuM5MmzZNERERmjBhguW1efPmaf78+Zo8ebJHCbDM67s79wDuXrPsfP7557pw4YIWLlzo0guyoE+fEBUVpW3btikjI8Plj1Xu3BPnpnDhwoqNjXXpOZp1e+5e75ctW6ZGjRrl+pln/Yyz9iQ8fvy424nLzN8pERERuf5O8fT+vHjx4urdu7d69+6tM2fOqEmTJho2bJglcbh//37VqVPHrbrixnJdz3GYm9jYWMu8a++///4V/fW5UaNGatGihfORNcnSqFEjRUdH65NPPtGsWbPUtGlTl5Wa2rZtq/T0dL377rsu2xw7dqwcDkeO895lHoMkl+NISUmxLFv/d0VERKhZs2Z67733bBOrnqxW6Im2bdtKkmVF3jFjxkiSywqPMTExKlu2rMaOHavU1FQ1atRI0qUbqL1792rOnDm67bbbnH+l8USfPn00dOjQXOelyvwrY/a/Kmave2b3/gULFuiPP/5wxvfs2ZOn81lKUlBQkOUHh+T+96ZFixby9fXV+PHjXY7LboXkbt26ad26dVq8eLHltZMnTyotLe0KjwJAQbNixQrbHhSZwzizDrPN6TpkJ6eynTt3dg6Hzs7TnhxxcXGKjY3V6NGjdebMGcvrme2Zj4+PEhIStGDBAv3222/O13/66Sfb61xeKV26tOrWrauPPvrI5Vxs375dS5YscbaLmeLj47V+/XqtWLHCmTgsWbKkqlWrpjfeeMNZxlOxsbEaN26cRo4c6Vxl2o5d27d+/XqtW7fOpVxCQoJSU1P1wQcfOGMZGRm2N+V/R2ZSNfv3KDQ0VCVLlrT87ps4caLLc08+906dOsnHx0fDhw+3fA+NMTp+/PjfPRwA+eDcuXOaN2+e7rrrLnXp0sXyGDBggE6fPu3xnL5lypRRzZo19e9//9ul/Vm1apV+/PFHl7JRUVHy8fG57DXLjt11OTk5WVOmTPGovldb27ZtlZSUpFmzZjljaWlpGj9+vIKDg9W0adMr3nbDhg21ceNGl1jW9jbrvI9Lly7Vzp07Xcp269ZN6enpeuWVVyzbTktLc7Y5d955pwoXLqxJkya5lMl+n5+bhIQEhYaG6rXXXnOZ/iNT5u8UT+7Ps7dHwcHBqlSpkmV0RXJysvbu3avbb7/d7frixnHD9jjs06eP/vGPf6hz585q2bKltm7dqsWLF+d511yHw6GePXvqtddekyS9/PLLLq+3b99ezZs31wsvvKADBw6oTp06WrJkiT777DMNGjTIZVGM7Fq1aqUKFSro4Ycf1tNPPy0fHx/961//Unh4uMsP3rwwYcIENW7cWLVq1VLfvn1VsWJFHTlyROvWrdPvv/+urVu35un+JKlOnTrq1auX3n//fZ08eVJNmzbV999/r48++kgdO3Z0TlacKT4+XjNnzlStWrWcf6m75ZZbFBQUpF9++cXj+Q0zRUVFadiwYbmWCQ0NVZMmTTRq1CilpqaqbNmyWrJkieWvW5I0bNgwLVmyRI0aNdKjjz7qTBzXrFlTW7ZsuaI62omLi9OkSZM0YsQIVapUSREREbrjjjvc/t6Eh4frqaee0siRI3XXXXepbdu22rx5s77++mvL/ydPP/20Fi5cqLvuukuJiYmKi4tTSkqKfvzxR82ZM0cHDhyg2ztwnRg4cKDOnj2re+65R1WrVtXFixe1du1azZo1S9HR0S4TnsfFxWnZsmUaM2aMypQpo5iYGOcCXNnldM16+umnNWfOHHXt2lUPPfSQ4uLidOLECS1cuFCTJ0/26C/jhQoV0ocffqg2bdqoRo0a6t27t8qWLatDhw5pxYoVCg0N1eeffy5JGj58uBYtWqT4+Hg99thjzhuYGjVqaNu2bX/vJObizTffVJs2bdSwYUM9/PDDOnfunMaPH6+wsDBLWxQfH69XX31VBw8edEkQNmnSRO+9956io6Nd/ljpiccff/yyZe666y7NmzdP99xzj9q1a6f9+/dr8uTJql69usuNcceOHVW/fn09+eST2rNnj6pWraqFCxfqxIkTkjzrmZqbzFEFL7zwgrp37y5fX1+1b99eQUFB6tOnj15//XX16dNHt956q1avXq1ffvnFsg13P/fY2FiNGDFCQ4YM0YEDB9SxY0eFhIRo//79mj9/vh555BE99dRTeXJcAK6ehQsX6vTp07r77rttX7/tttsUHh6uadOm6d577/Vo26+99po6dOigRo0aqXfv3vrrr7+c9wBZr5lhYWHq2rWrxo8fL4fDodjYWH3xxRduzRneqlUr+fn5qX379urXr5/OnDmjDz74QBEREVc0si67tLQ0ffLJJ7av3XPPPc4/4HjqkUce0XvvvafExERt2rRJ0dHRmjNnjr777juNGzfOsh6AJzp06KCPP/5Yv/zyi0sP8ZEjR6pdu3Zq3LixHnroIZ04ccJ5vc/6eTRt2lT9+vXTyJEjtWXLFrVq1Uq+vr7avXu3Zs+erbfffltdunRRqVKl9Pjjj+utt97S3XffrdatW2vr1q3Oeyd32rrQ0FBNmjRJDzzwgG655RZ1797deY/25ZdfqlGjRs5EpLv359WrV1ezZs0UFxen4sWLa+PGjZozZ44GDBjgsu9ly5bJGKMOHTpc8bnGdeyqruF8lWQub75hw4Ycy6Snp5tnn33WlCxZ0hQpUsQkJCSYPXv2mKioKJel0lesWGEkmRUrVjhjvXr1clmi/XJ27NhhJBl/f3/z119/WV4/ffq0GTx4sClTpozx9fU1lStXNm+++abJyMhwKZe9bsYYs2nTJtOgQQPj5+dnKlSoYMaMGeM8/v3797u8124Zdkmmf//+LrHMZe7ffPNNl/jevXvNgw8+aCIjI42vr68pW7asueuuu8ycOXMuew7s9pPd0KFDTfavZGpqqhk+fLiJiYkxvr6+pnz58mbIkCEuy85nmjBhgpFkHn30UZd4ixYtjCSzfPnyy9bTmJzPVVZ237Hff//d3HPPPaZo0aImLCzMdO3a1fzxxx9Gkhk6dKjL+5cvX25uvvlm4+fnZ2JjY82HH35onnzySRMQEOBSLqfzlv27YPeZJyUlmXbt2pmQkBAjyTRt2tT5mrvfm/T0dDN8+HBTunRpExgYaJo1a2a2b99u+108ffq0GTJkiKlUqZLx8/MzJUuWNLfffrsZPXq0uXjxYq7nE8C14+uvvzYPPfSQqVq1qgkODjZ+fn6mUqVKZuDAgebIkSMuZXft2mWaNGliAgMDjSTndcPTa9bx48fNgAEDTNmyZY2fn58pV66c6dWrl/nzzz+NMf9rq2fPnu2y/8z2bMqUKS7xzZs3m06dOpkSJUoYf39/ExUVZbp162ZpJ1atWmXi4uKMn5+fqVixopk8ebJtW2WnV69eJigoKNcyOdVv2bJlplGjRiYwMNCEhoaa9u3bm507d1ref+rUKePj42NCQkJMWlqaM/7JJ58YSeaBBx64bD2N+V/7e+zYsVzLZW+TMjIyzGuvvWaioqKMv7+/ufnmm80XX3xh+zvp2LFjpmfPniYkJMSEhYWZxMRE89133xlJZubMmc5yOZ03u/Nu176+8sorpmzZsqZQoUIu37GzZ8+ahx9+2ISFhZmQkBDTrVs3c/ToUdttePK5z5071zRu3NgEBQWZoKAgU7VqVdO/f3/z888/53ouARRM7du3NwEBASYlJSXHMomJicbX19f8+eefOd43GWN/jZo5c6apWrWq8ff3NzVr1jQLFy40nTt3NlWrVnUpd+zYMdO5c2dTpEgRU6xYMdOvXz+zfft2S5thd21auHChqV27tgkICDDR0dHmjTfeMP/617/cvj/MSa9evYykHB+Z287tXrxp06amRo0atts/cuSI6d27tylZsqTx8/MztWrVsrSPuZ3vnFy4cMGULFnSvPLKK5bX5s6da6pVq2b8/f1N9erVzbx583K813///fdNXFycCQwMNCEhIaZWrVrmmWeeMX/88YezTFpamnnxxRdNZGSkCQwMNHfccYf56aefTIkSJcw//vEPZ7nL5StWrFhhEhISTFhYmAkICDCxsbEmMTHRbNy40aWcO/fnI0aMMPXr1zdFixY1gYGBpmrVqubVV1+13J/de++9pnHjxm6dU9x4HMZc4QoLAPJUx44dtWPHDtu5NgAAuN4sWLBA99xzj7799lvnFCMAcKOpW7euwsPDtXTp0vyuynXrlVde0ZQpU7R79+48X4Drck6ePKlixYppxIgReuGFF67qvt2VlJSkmJgYzZw5kx6HsHXDznEI5Kesi+lIlybm/eqrr9SsWbP8qRAAAF6Uvd1LT0/X+PHjFRoaqltuuSWfagUAV09qaqpl3u+VK1dq69at3AN42eDBg3XmzBnbVbLzUva2Tvrf/PAF+TMeN26catWqRdIQOaLHIZAPSpcurcTERFWsWFG//vqrJk2apAsXLmjz5s2qXLlyflcPAIA81adPH507d04NGzbUhQsXNG/ePK1du1avvfaahgwZkt/VAwCvO3DggFq0aKH7779fZcqU0a5duzR58mSFhYVp+/btKlGiRH5XEX/T1KlTNXXqVLVt21bBwcH69ttvNWPGDLVq1cqri6sB3nbDLo4C5KfWrVtrxowZSkpKkr+/vxo2bKjXXnuNpCEA4Lp0xx136K233tIXX3yh8+fPq1KlSho/frxlcnYAuF4VK1ZMcXFx+vDDD3Xs2DEFBQWpXbt2ev3110kaXidq166twoULa9SoUTp16pRzwZQRI0bkd9WAv4UehwAAAAAAAAAsmOMQAAAAAAAAgAWJQwAAAAAAAAAWJA4BAAAAAAAAWLi9OEqQw+HNegBAgZDCtK/4m2gvAdwIaC8BALgx0OMQAAAAAAAAgAWJQwAAAAAAAAAWJA4BAAAAAAAAWJA4BAAAAAAAAGBB4hAAAAAAAACABYlDAAAAAAAAABYkDgEAAAAAAABYkDgEAAAAAAAAYEHiEAAAAAAAAIAFiUMAAAAAAAAAFiQOAQAAAAAAAFiQOAQAAAAAAABgQeIQAAAAAAAAgAWJQwAAAAAAAAAWJA4BAAAAAAAAWJA4BAAAAAAAAGBB4hAAAAAAAACABYlDAAAAAAAAABYkDgEAAAAAAABYkDgEAAAAAAAAYEHiEAAAAAAAAIAFiUMAAAAAAAAAFiQOAQAAAAAAAFiQOAQAAAAAAABgQeIQAAAAAAAAgAWJQwAAAAAAAAAWJA4BAAAAAACAa8ikSZNUu3ZthYaGKjQ0VA0bNtTXX3/tfP38+fPq37+/SpQooeDgYHXu3FlHjhzxeD8kDgEAAAAAAIBrSLly5fT6669r06ZN2rhxo+644w516NBBO3bskCQNHjxYn3/+uWbPnq1Vq1bpjz/+UKdOnTzej8MYY9wpGORweLxxALjWpLh3SQRyRHsJ4EZAewkAQMFTvHhxvfnmm+rSpYvCw8M1ffp0denSRZK0a9cuVatWTevWrdNtt93m9jbpcQgAAAAAAABco9LT0zVz5kylpKSoYcOG2rRpk1JTU9WiRQtnmapVq6pChQpat26dR9sunNeVBQAAAAAAAG5058+f18WLF90ub4yRI9sIJn9/f/n7+9uW//HHH9WwYUOdP39ewcHBmj9/vqpXr64tW7bIz89PRYsWdSlfqlQpJSUleXQMJA4BAAAAAACAPHT+/HnFxMR4lKgLDg7WmTNnXGJDhw7VsGHDbMtXqVJFW7ZsUXJysubMmaNevXpp1apVf6faFiQOAQAAAAAAgDx08eJFJSUl6eDB/QoNDb1s+VOnTql8+RgdPHjQpXxOvQ0lyc/PT5UqVZIkxcXFacOGDXr77bd177336uLFizp58qRLr8MjR44oMjLSo+MgcQgAAAAAAAB4QWhoEYWGFnGjZNp/y4e6lWi0k5GRoQsXLiguLk6+vr5avny5OnfuLEn6+eef9dtvv6lhw4YebZPEIQAAAAAAAOAVacpMCl6+nPuGDBmiNm3aqEKFCjp9+rSmT5+ulStXavHixQoLC9PDDz+sJ554QsWLF1doaKgGDhyohg0berSiskTiEAAAAAAAAPAS7yQOjx49qgcffFCHDx9WWFiYateurcWLF6tly5aSpLFjx6pQoULq3LmzLly4oISEBE2cONHj2juMMcadgkHZVnUBgOtRinuXRCBHtJcAbgS0lwAA5O7UqVMKCwtTcvI+hYaGuFH+tMLCKio5OfmKhyp7Az0OAQAAAAAAAK/wTo/Dq4XEIQAAAAAAAOAVJA4BAAAAAAAAWJA4BAAAAAAAAGCR/t+HO+UKHhKHAAAAAAAAgFeky73ehCQOAQAAAAAAgBsIQ5UBAAAAAAAAWJA4BAAAAAAAAGBB4hAAAAAAAACABXMcAgAAAAAAALCgxyEAAAAAAAAACxKHAAAAAAAAACxIHAIAAAAAAACwuCDJx81yBQ+JQwAAAAAAAMAr6HEIAAAAAAAAwILEIQAAAAAAAAALEocAAAAAAAAALEgcAgAAAAAAALBIl3tJwXRvV+SKkDgEAAAAAAAAvCJd7iUFSRwCAAAAAAAANxCGKgMAAAAAAACwIHEIAAAAAAAAwII5DgEAAAAAAABY0OMQAAAAAAAAgAWJQwAAAAAAAAAWJA4BAAAAAAAAWJA4BAAAAAAAAGDB4igAAAAAAAAALNIk+bhZruAhcQgAAAAAAAB4BYlDAAAAAAAAABYkDgEAAAAAAABYXNtzHBbK7woAAAAAAAAA16c0Dx7uGzlypOrVq6eQkBBFRESoY8eO+vnnn13KNGvWTA6Hw+Xxj3/8w6P9kDgEAAAAAAAAvMI7icNVq1apf//++s9//qOlS5cqNTVVrVq1UkpKiku5vn376vDhw87HqFGjPNoPQ5UBAAAAAAAAr0iTe/32PEscLlq0yOX51KlTFRERoU2bNqlJkybOeJEiRRQZGenRtrOixyEAAAAAAADgFekePK5ccnKyJKl48eIu8WnTpqlkyZKqWbOmhgwZorNnz3q0XXocAgAAAAAAAF7h2eIop06dcon6+/vL398/13dmZGRo0KBBatSokWrWrOmM9+zZU1FRUSpTpoy2bdumZ599Vj///LPmzZvndu1JHAIAAAAAAABekSbJ4WY5qXz58i7RoUOHatiwYbm+s3///tq+fbu+/fZbl/gjjzzi/HetWrVUunRp3Xnnndq7d69iY2PdqTyJQwAAAAAAAMA7PEscHjx4UKGhoc7o5XobDhgwQF988YVWr16tcuXK5Vq2QYMGkqQ9e/aQOAQAAAAAAADyl2eJw9DQUJfEYU6MMRo4cKDmz5+vlStXKiYm5rLv2bJliySpdOnSbtTnEhKHAAAAAAAAgFd4ljh0V//+/TV9+nR99tlnCgkJUVJSkiQpLCxMgYGB2rt3r6ZPn662bduqRIkS2rZtmwYPHqwmTZqodu3abu/HYYwx7hQMcrhzkABwbUtx75II5Ij2EsCNgPYSAIDcnTp1SmFhYUpOvkOhoZfvt3fqVJrCwr5RcnKyWz0OHTncd0yZMkWJiYk6ePCg7r//fm3fvl0pKSkqX7687rnnHv2///f/3Np+JnocAgAAAAAAAF7hbk9Cz3ocXq4fYPny5bVq1SqPtmmHxCEAAAAAAADgFd5JHF4tJA4BAAAAAAAAryBxCAAAAAAAAMAiPY/LXV0kDgEAAAAAAACvSJPkzqJiJA4BAAAAAACAGwiJQwAAAAAAAAAWJA4BAAAAAAAAWJA4BAAAAAAAAGCRLvcShxnersgVIXEIAAAAAAAAeAWJQwAAAAAAAAAWaZIKuVGOxCEAAAAAAABwAyFxCAAAAAAAAMCCxCEAAAAAAAAAi3S5lxR0Zx7Eq4/EIQAAAAAAAOAVaZIcbpQjcQgAAAAAAADcQEgcAgAAAAAAALAgcQgAAAAAAAAgO5PhXk6wYOYNSRwCAAAAAAAAXpEh99ZGKZiLKpM4BAAAAAAAALwi/b8Pd8oVQCQOAQAAAAAAAG8gcQgAAAAAAADAgqHKAAAAAAAAACzocQgAAAAAAADAgh6HAAAAAAAAACwy5F5vQhKHAAAAAAAAwA2EocoAAAAAAAAALBiqDAAAAAAAAMCCHocAAAAAAAAALEgcAgAAAAAAALBgqDIAAAAAAAAAizRJqW6WK4BIHAIAAAAAAADecI0PVS6U3xUAAAAAAAAArkvpHjw8MHLkSNWrV08hISGKiIhQx44d9fPPP7uUOX/+vPr3768SJUooODhYnTt31pEjRzzaD4lDAAAAAAAAwBsyPHh4YNWqVerfv7/+85//aOnSpUpNTVWrVq2UkpLiLDN48GB9/vnnmj17tlatWqU//vhDnTp18mg/DmOMcadgkMPh2REAwDUoxb1LIpAj2ksANwLaSwAAcnfq1CmFhYUpeY0UGuxG+TNSWLyUnJys0NBQj/d37NgxRUREaNWqVWrSpImSk5MVHh6u6dOnq0uXLpKkXbt2qVq1alq3bp1uu+02t7ZLj0MAAAAAAADAG7w0VDm75ORkSVLx4sUlSZs2bVJqaqpatGjhLFO1alVVqFBB69atc3u7LI4CAAAAAAAAeIO7w5D/W+bUqVMuYX9/f/n7++f+1owMDRo0SI0aNVLNmjUlSUlJSfLz81PRokVdypYqVUpJSUluVp4ehwAAAAAAAIB3ZMi93ob/TRyWL19eYWFhzsfIkSMvu4v+/ftr+/btmjlzZp5Xnx6HAAAAAAAAgDd42OPw4MGDLnMcXq634YABA/TFF19o9erVKleunDMeGRmpixcv6uTJky69Do8cOaLIyEi3q0/isADx9iTTTNgPALge0F4CAK4bc23anP6uT80RaxFHKZttTbCJdWYhIyDfuTt/4X/LhIaGurU4ijFGAwcO1Pz587Vy5UrFxMS4vB4XFydfX18tX75cnTt3liT9/PPP+u2339SwYUO3q0/iEAAAAAAAAPAGDxOH7urfv7+mT5+uzz77TCEhIc55C8PCwhQYGKiwsDA9/PDDeuKJJ1S8eHGFhoZq4MCBatiwodsrKkskDgEAAAAAAADv8HCosrsmTZokSWrWrJlLfMqUKUpMTJQkjR07VoUKFVLnzp114cIFJSQkaOLEiR7th8QhAAAAAAAA4A1e6nFo3Ji+JyAgQBMmTNCECXZzGbiHxCEAAAAAAADgDV5KHF4tJA6vAm9P4u4ud+vBpPAAgPxAewkAuG5MtWkj3rIpd4tN7A7Xp44UmzJBNrGFNrFhNvV40qZcYsFog4HrkpF7w5AL6P+GJA4BAAAAAAAAb6DHIQAAAAAAAAALLy2OcrWQOAQAAAAAAAC8gR6HAAAAAAAAACxIHCKrgjKx+99hdwxMAA8AyEu0lwCA68ZMm2v/dptyd9nEwm1iPtmeH7cpU8ImZpd0KGMT22kTszuG7td+Ww0UCAxVBgAAAAAAAGBBj0MAAAAAAAAAFhlyLylIj0MAAAAAAADgBsJQZQAAAAAAAAAWDFW+cV0PE7u7iwngAQBXivaS9hIArhsrba7pf9iUq2MTi7KJRdrEUrM932pTprpNzN8mdswm9rtNzO4YFtkca+sbp00H8gw9DgEAAAAAAABY0OMQAAAAAAAAgAWJQwAAAAAAAAAWDFUGAAAAAAAAYJEh93oTkjgEAAAAAOAa9o1NrIVN7BabWHB9m2CcTexP16eps61F6ja3eV+0NVTtZ2vs4lpr7D82m/vUJtbaJgYgd/Q4BAAAAAAAAGDBHIcAAAAAAAAALEgcAgAAAAAAALBgqDIAAAAAAAAAC3oc3hhSjMnvKhQ4duckyOHIh5oAAAoK2ksr2ksAuFYFWUO9bYrFVLQJPmYT628TC7h8NcrZtRl2q7TYOW8N+b1njTUZY/Pe36yhL23q0o62H8gViUMAAAAAAAAAFkbuDUMuoDl4EocAAAAAAACAN9DjEAAAAAAAAIAFi6MAAAAAAAAAsKDHIQAAAAAA15m5Z62xzn42BR+yiT2Zd/W48HfebLf4yuM2sePWUNlXrLG+Nm9t52GVgBsNiUMAAAAAAAAAFgxVBgAAAAAAAGBBj0MAAAAAAAAAFhlyLylIj0MAAAAAAADgBnKND1UulN8VAAAAAACgwNls8zAXrQ9F2zzy0Ic2jzwXZX2kyPrYYPMAkLt0Dx4eWL16tdq3b68yZcrI4XBowYIFLq8nJibK4XC4PFq3bu1x9UkcAgAAAAAAAN6Q4cHDAykpKapTp44mTJiQY5nWrVvr8OHDzseMGTM8rj5DlQEAAAAAAABv8NLiKG3atFGbNm1yLePv76/IyEjPNpwNPQ4BAAAAAAAAb/DSUGV3rFy5UhEREapSpYoeffRRHT9+3ONt0OMQAAAAAIDsUmxidjf2hQO8Wo1fhlljNw3N673YHEOqNXTxjDXml9dVAa43Hi6OcurUKZewv7+//P39Pd5t69at1alTJ8XExGjv3r16/vnn1aZNG61bt04+Pj5ub4fEIQAAAAAAAOANGXKvN+F/E4fly5d3CQ8dOlTDhg3zeLfdu3d3/rtWrVqqXbu2YmNjtXLlSt15551ub4fEIQAAAAAAAOAN6XJvosD/JhcPHjyo0NBQZ/hKehvaqVixokqWLKk9e/aQOAQAAAAAAADynYdDlUNDQ10Sh3nl999/1/Hjx1W6dGmP3kfiEAAAAAAAAPAGD3scuuvMmTPas2eP8/n+/fu1ZcsWFS9eXMWLF9fw4cPVuXNnRUZGau/evXrmmWdUqVIlJSQkeLQfEocAAAAAAGRX0SZW+BabYJxXq3HTP7y6+f9qYA3ZHL9fce/XBLjueNjj0F0bN25U8+bNnc+feOIJSVKvXr00adIkbdu2TR999JFOnjypMmXKqFWrVnrllVc8HvpM4hAAAAAAAADwBi/1OGzWrJmMMTm+vnjxYs82mAMShwAAAAAAAIA3eClxeLWQOAQAAAAAAAC8wci9Ycg5dx7MVyQOAQAAAAAAAG9Il+Rws1wBROIQAAAAAIDsBtqtjvKyTSzau/UI8e7mL6lkDRXra409+YH3qwJcb0gcAgAAAAAAALBIlXvDkNO8XZErQ+IQAAAAAAAA8IYMuTfHoTtl8gGJQwAAAAAAAMAbGKoMAAAAAAAAwCJD7iUF6XEIAAAAAMC1Ym9+V+CSdfm141HW0PMPXv1qANe6DLnX45DEIQAAAAAAAHADcXcIMkOVAQAAAAAAgBsIiUMAAAAAAAAAFgxVBgAAAAAAAGBBj8MbQ5DDmh5OMSYfalJw2J0TAMCNjfbSivYSAPB3XPzWGvO7KnsOsIk1vip7Bq4r9DgEAAAAAAAAYOFuQpDEIQAAAAAAAHADSZfkzgAcEocAAAAAAADADYQehwAAAAAAAAAs6HEIAAAAAADyxi6XZ2ttSjTTRzbRXnlcD7vFUQB4jMQhAAAAAAAAAAuGKgMAAAAAAACwyJB7PQ7dKZMPSBwCAAAAAAAA3pAhyeFGORKHAAAAAAAAwA0kXSQOb1RBDusnn2IK6Cf9N9kdKwAA7qC9BADAE6+5PLNfHGWiTTSvF0cBkCdIHAIAAAAAAACwYKgyAAAAAAAAAAt6HAIAAAAAAACwIHEIAAAAAAAAwMKowCYF3UHiMI9dDxPAM7E7AMDbaC8BAMjJXJdn39oVOfe9NRbolcoA+JvS//twp1xBROIQAAAAAAAA8AIShwAAAAAAAAAsMv77cKdcQVQovysAAAAAAAAAXI/SPXh4YvXq1Wrfvr3KlCkjh8OhBQsWuLxujNFLL72k0qVLKzAwUC1atNDu3bs9rj+JQwAAAAAAAMALMjx4eCIlJUV16tTRhAkTbF8fNWqU3nnnHU2ePFnr169XUFCQEhISdP78eY/24zDGvZnImQDc+7w9KTyfIXB519riDCh4uNZ6H+0lkP9oLwEvSnNth4r6WoucPGvzvkD+vwQKklOnTiksLEy/Sgp1p7ykKEnJyckKDXXnHf/jcDg0f/58dezYUdKl3oZlypTRk08+qaeeekr673ZLlSqlqVOnqnv37m5vmx6HAAAAAAAAgBdkyL1hynk5x+H+/fuVlJSkFi1aOGNhYWFq0KCB1q1b59G2WBwFAAAAAAAA8AJPF0c5deqUS9zf31/+/v4e7TMpKUmSVKpUKZd4qVKlnK+5ix6HAAAAAAAAgBd4ujhK+fLlFRYW5nyMHDkyH2r9P/Q4BAAAAAAAALzA3RWTM8scPHjQZY5DT3sbSlJkZKQk6ciRIypdurQzfuTIEdWtW9ejbZE4LECYjB0AgMujvQQAXNcKuy5ycpI1T4BrmqdDlUNDQz1eHCW7mJgYRUZGavny5c5E4alTp7R+/Xo9+uijHm2LxCEAAAAAAADgBZ72OHTXmTNntGfPHufz/fv3a8uWLSpevLgqVKigQYMGacSIEapcubJiYmL04osvqkyZMs6Vl91F4hAAAAAAAADwAk97HLpr48aNat68ufP5E088IUnq1auXpk6dqmeeeUYpKSl65JFHdPLkSTVu3FiLFi1SQECAR/txGGPc6vjMsCAAN4IU9y6JQI5oLwHcCGgvAQDI3alTpxQWFqYfJAW7Uf6MpFskJScn/+2hynmJHocAAAAAAACAF3hrqPLVQuIQAAAAAAAA8AJvDVW+WkgcAgAAAAAAAF5Aj0MAAAAAAAAAFiQOAQAAAAAAAFgwVBkAAAAAAACABT0OAQAAAAAAAFgYudeb0Hi7IleIxCEAAAAAAADgBfQ4BAAAAAAAAGBB4hAAAAAAAACABYujAAAAAAAAALCgxyEAAAAAAAAACxKHAAAAAAAAACwYqgwAAAAAAADAIkPu9SYkcQgAAAAAAADcQOhxCAAAAAAAAMCCOQ4BAAAAAAAAWJA4BAAAAAAAAGDBUGUAAAAAAAAAFvQ4BAAAAAAAAGBB4hAAAAAAAACAhZF7w5CNtytyhUgcAgAAAAAAAF6QKveSb6nersgVInEIAAAAAAAAeAFDlQEAAAAAAABYkDgEAAAAAAAAYJEh9+Y4dKdMfiBxCAAAAAAAAHgBPQ4BAAAAAAAAWGTIvaQgPQ4BAAAAAACAGwhDlQEAAAAAAABYMFQZAAAAAAAAgAU9DoECKMWY/K6Cx4IcjvyuAgDgBkN7CQC4XiywaR8+tSm3yyZ2zCaWahMLsIlF2sQq2cR62sTaXoPtMDx3rfc4LJTfFQAAAAAAAACuR+kePDwxbNgwORwOl0fVqlXzsOaX0OMQAAAAAAAA8AJvDlWuUaOGli1b5nxeuHDep/lIHAIAAAAAAABekCH3ehNeSeKwcOHCioy0GzCfdxiqDAAAAAAAAHiBt4YqS9Lu3btVpkwZVaxYUffdd59+++23PKr1/9DjENeUa3ESd3e5c2xMCA8AcAftJe0lAFwvVtpc0/fZlLNbuKSiTey8Tcyup9dxm1i4m/uwm2XObr+zsh3brTZlYq/jNv1G4elQ5VOnTrnE/f395e/vbynfoEEDTZ06VVWqVNHhw4c1fPhwxcfHa/v27QoJCfnb9c5Ej0MAAAAAAADACzztcVi+fHmFhYU5HyNHjrTdbps2bdS1a1fVrl1bCQkJ+uqrr3Ty5El9+qndeuJXjh6HAAAAAAAAgBd42uPw4MGDCg0NdcbtehvaKVq0qG666Sbt2bPH4zrmhh6HAAAAAAAAgBd42uMwNDTU5eFu4vDMmTPau3evSpcunaf1J3EIAAAAAAAAeIG3Fkd56qmntGrVKh04cEBr167VPffcIx8fH/Xo0SMPa89QZRRg1/PE7lfK7pwwATwA3NhoL61oLwHg2rTU5lpd2aZcGZtYsk3MxyZml5xJcbNceZtYdZvYLTYxu0VUimZ7brf4irE5Jw7a/muKkXtDlT39VH///Xf16NFDx48fV3h4uBo3bqz//Oc/Cg+3+yZdORKHAAAAAAAAgBe425vQ0x6HM2fOvILaeI7EIQAAAAAAAOAF3kocXi0kDgEAAAAAAAAv8HRV5YKGxCEAAAAAAADgBfQ4BPIIk7tfGSaAB4AbC+3llaG9BICC57Vs1+EONmWifW2CYTaxVGuois2KKXbLRtj19AqyiTWwiSXYxOra1dluRZeAbM/tMkdnbWIlbNqv4/w+KKjocQgAAAAAAADAgh6HAAAAAAAAACwy5F5SkB6HAAAAAAAAwA2EocoAAAAAAAAALNIlFXKzXEFE4hAAAAAAAFx1f2R7fszdN1a3iVW1hkJtVkK5I8kmNt8a+/GENVarjs1+u9jEitvEsh+sJO3M9nyLtUiKzfvW22zqDpsYCgYShwAAAAAAAAAsGKoMAAAAAAAAwIIehwAAAAAAAAAs6HEIAAAAAAAAwCJD7vUmJHEIAAAAAADwX19ne267fkiqNXb/amsstK7Nm0fYDRC1SeF8aA3Vsnmn+8paQ0OsR3cx26Isn9hs6Rub2Fab2I/uVAv5Il2Sw81yBRGJQwAAAAAAAMALGKoMAAAAAAAAwIIehwAAAAAAAAAsSBwCAAAAAAAAsGCoMgAAAAAAgIeisj2363H1jk1svk1sqk3Bsj1sUjG3Xb5ef9ty60Iou163Fnso23Mfm03dbhOrfiV1Qr6hxyEAAAAAAAAACyP3ehMab1fkCpE4BAAAAAAAALzA3Z6E9DgEAAAAAAAAbiAkDgEAAAAAAABYZMi9OQ5ZHAUAAAAAAOC/6mR7Hm1TpqpN7DOb2Ayb2FMv2wS/qmIT/NkmdtImVtQm5m8NPW8NfWTzzuzutYk1tonZHQEKLnocAgAAAAAAALAgcQgAAAAAAADAgqHKAAAAAAAAACzcTQiSOAQAAAAAAABuICQOgTwS5HDtvJtiTD7V5NqS/bwBAK5vtJdXhvYSAAqesdnasIk21+oQm/cVt4nZzg930ia29BdrrIx1v2tqWovFL7TZXopN7LRdZayKZntud6xFbGKBtP3XlHRJ7nxiJA4BAAAAAACAGwiJQwAAAAAAAAAW1/pQ5UL5XQEAAAAAAADgepTuweNKTJgwQdHR0QoICFCDBg30/fff50Gt/4fEIQAAAAAAAOAFGXIvaXglPQ5nzZqlJ554QkOHDtUPP/ygOnXqKCEhQUePHs2j2jNUGQWY3STmN/oE8EzsDgDIjvbSivYSAK5Nj9m0X2/YXNN9bN6bYLfBe21it9rEfrWGwu22Z9f16nabWE9rqO2L1tgP2Z772mzqphu8Tb8eZEhy55fJlXzSY8aMUd++fdW7d29J0uTJk/Xll1/qX//6l5577rkr2KIVPQ4BAAAAAAAAL/DWUOWLFy9q06ZNatGihTNWqFAhtWjRQuvWrcuLqkuixyEAAAAAAADgFenyrMfhqVOnXOL+/v7y9/e3lP/zzz+Vnp6uUqVKucRLlSqlXbt2XVllbdDjEAAAAAAAAMhDfn5+ioyM1DlJZ914nJMUHBys8uXLKywszPkYOXJkPh3BJfQ4xDXF3TmLrsW5nZiPCQCQV2gvAQDXi2dt2qpn7Qrut2kfYr6wKRhnDRUbYwlVjXrTWq5dD5vtvWwN/b9NllB85+6W2OJq1147DPcFBARo//79unjxotvvMcbIke23jl1vQ0kqWbKkfHx8dOTIEZf4kSNHFBkZ6XmFc0DiEAAAAAAAAMhjAQEBCggI8Mq2/fz8FBcXp+XLl6tjx46SpIyMDC1fvlwDBgzIs/2QOAQAAAAAAACuMU888YR69eqlW2+9VfXr19e4ceOUkpLiXGU5L5A4BAAAAAAAAK4x9957r44dO6aXXnpJSUlJqlu3rhYtWmRZMOXvIHEIAAAAAAAAXIMGDBiQp0OTs3MY496s2ExEDeBGcC0uFICChfYSwI2A9hIAgBtDofyuAAAAAAAAAICCh8QhAAAAAAAAAAsShwAAAAAAAAAsSBwCAAAAAAAAsCBxCAAAAAAAAMCCxCEAAAAAAAAACxKHAAAAAAAAACxIHAIAAAAAAACwIHEIAAAAAAAAwILEIQAAAAAAAAALEocAAAAAAAAALEgcAgAAAAAAALAgcQgAAAAAAADAgsQhAAAAAAAAAAsShwAAAAAAAAAsSBwCAAAAAAAAsCBxCAAAAAAAAMCCxCEAAAAAAAAACxKHAAAAAAAAACxIHAIAAAAAAACwIHEIAAAAAAAAwILEIQAAAAAAAAALEocAAAAAAAAALEgcAgAAAAAAALBwGGNMflcCAAAAAAAAQMFCj0MAAAAAAAAAFiQOAQAAAAAAAFiQOAQAAAAAAABgQeIQAAAAAAAAgAWJQwAAAAAAAAAWJA4BAAAAAAAAWJA4BAAAAAAAAGBB4hAAAAAAAACABYlDAAAAAAAAABb/H9xC1MZZbmMeAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Flow comparison: full vs stitched\n", "fig, axes = plt.subplots(1, 3, figsize=(14, 4))\n", "\n", "full_mag = np.sqrt((full_flows ** 2).sum(axis=0))[mid_z]\n", "stitch_mag = np.sqrt((stitched_flows ** 2).sum(axis=0))[mid_z]\n", "\n", "axes[0].imshow(full_mag, cmap=\"hot\", interpolation=\"nearest\")\n", "axes[0].set_title(\"Full-Volume Flow Magnitude\")\n", "axes[0].axis(\"off\")\n", "\n", "axes[1].imshow(stitch_mag, cmap=\"hot\", interpolation=\"nearest\")\n", "axes[1].set_title(\"Stitched Flow Magnitude\")\n", "axes[1].axis(\"off\")\n", "\n", "im = axes[2].imshow(angle_err[mid_z], cmap=\"hot\", interpolation=\"nearest\", vmin=0, vmax=30)\n", "axes[2].set_title(\"Angular Error (degrees)\")\n", "axes[2].axis(\"off\")\n", "plt.colorbar(im, ax=axes[2], shrink=0.8)\n", "\n", "fig.suptitle(f\"Flow Comparison — Z-slice {mid_z}\", fontweight=\"bold\")\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "40cd3c26", "metadata": {}, "source": [ "## Summary\n", "\n", "| Pipeline | Instances Recovered |\n", "|----------|-------------------|\n", "| Full volume (reference) | Same as GT |\n", "| Tiled + stitched | Same as GT |\n", "\n", "The boundary-aware cosine blending ensures that:\n", "- Flow is fully preserved at volume edges (no zero-weight regions)\n", "- Overlap regions blend smoothly between adjacent tiles\n", "- No overmerging artifacts at tile boundaries or volume edges\n", "\n", "### Key functions used\n", "\n", "| Function | Purpose |\n", "|----------|---------|\n", "| `compute_subcrop_slices` | Tile a volume into overlapping sub-crops |\n", "| `build_spatial_mask` | Mark subcrop boundary faces for Neumann BC |\n", "| `generate_diffusion_flows` | Heat-equation diffusion → flow field |\n", "| `stitch_flows` | Boundary-aware cosine blending of tiled flows |\n", "| `postprocess_single` | Euler tracking + convergence clustering |" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.20" } }, "nbformat": 4, "nbformat_minor": 5 }