Files
the-biergarten-app/docs/pipeline/diagrams/planned/output/biergarten_activity.svg
2026-06-21 22:14:42 -04:00

1 line
139 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="ACTIVITY" height="6433px" preserveAspectRatio="none" style="width:4055px;height:6433px;background:#FCFCF7;" version="1.1" viewBox="0 0 4055 6433" width="4055px" zoomAndPan="magnify"><?plantuml 1.2026.3?><defs/><g><rect fill="#FCFCF7" height="6433" style="stroke:none;stroke-width:1;" width="4055" x="0" y="0"/><g class="title" data-source-line="5"><text fill="#14180C" font-family="'Volkhov'" font-size="20" font-weight="700" lengthAdjust="spacing" textLength="486.14" x="1783.6028" y="39.42">The Biergarten Data Pipeline &#8212; Activity Diagram</text></g><rect fill="none" height="16.926" style="stroke:none;stroke-width:1;" width="4008.3456" x="20" y="64.33"/><ellipse cx="179.6112" cy="96.256" fill="#EBECE3" rx="10" ry="10" style="stroke:#222222;stroke-width:1;"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="187.59" x="85.8162" y="126.256"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="167.59" x="95.8162" y="149.152">ParseArguments(argc, argv)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="95.4522" x="131.8851" y="233.645"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="75.4522" x="141.8851" y="256.541">spdlog::error</text><ellipse cx="179.6112" cy="308.608" fill="none" rx="11" ry="11" style="stroke:#4A5837;stroke-width:1;"/><ellipse cx="179.6112" cy="308.608" fill="#222222" rx="6" ry="6" style="stroke:#4A5837;stroke-width:1;"/><polygon fill="#CBD2B5" points="142.3595,183.182,216.8628,183.182,228.8628,195.182,216.8628,207.182,142.3595,207.182,130.3595,195.182,142.3595,183.182" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="183.6112" y="220.078">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="74.5032" x="142.3595" y="199.615">Invalid args?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="228.8628" y="191.152">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="307.2223" x="26" y="361.608"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="287.2223" x="36" y="384.504">Init OpenSSL global state &amp; LlamaBackendState</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="114.5036" x="122.3594" y="418.534"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="94.5036" x="132.3594" y="441.43">Build DI injector</text><path d="M294.5891,465.46 L294.5891,491.849 L274.5891,495.849 L294.5891,499.849 L294.5891,526.238 A0,0 0 0 0 294.5891,526.238 L508.7045,526.238 A0,0 0 0 0 508.7045,526.238 L508.7045,475.46 L498.7045,465.46 L294.5891,465.46 A0,0 0 0 0 294.5891,465.46" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M498.7045,465.46 L498.7045,475.46 L508.7045,475.46 L498.7045,465.46" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="157.3748" x="300.5891" y="483.356">Opens SQLite connection.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.1154" x="300.5891" y="500.282">(Transactions are now managed</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.3823" x="300.5891" y="517.208">per-phase via batching).</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="189.9558" x="84.6332" y="477.386"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="169.9558" x="94.6332" y="500.282">Initialize SqliteExportService</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="280.5918" x="39.3153" y="546.238"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="260.5918" x="49.3153" y="569.134">Create BoundedChannel&lt;LogEntry&gt; log_ch</text><path d="M287.6812,593.164 L287.6812,628.016 L267.6812,632.016 L287.6812,636.016 L287.6812,670.868 A0,0 0 0 0 287.6812,670.868 L568.6329,670.868 A0,0 0 0 0 568.6329,670.868 L568.6329,603.164 L558.6329,593.164 L287.6812,593.164 A0,0 0 0 0 287.6812,593.164" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M558.6329,593.164 L558.6329,603.164 L568.6329,603.164 L558.6329,593.164" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="195.644" x="293.6812" y="611.06">Log worker drains log_ch for the</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="137.3777" x="293.6812" y="627.986">entire pipeline lifetime.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="199.83" x="293.6812" y="644.912">All workers emit LogEntry structs</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="259.9517" x="293.6812" y="661.838">via PipelineLogger -- never spdlog directly.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="176.1401" x="91.5411" y="613.553"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="156.1401" x="101.5411" y="636.449">Spawn Log Worker thread</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="245.1019" x="57.0602" y="690.868"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.1019" x="67.0602" y="713.764">BiergartenPipelineOrchestrator::Run()</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="254.6731" x="52.2746" y="6272.7851"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="234.6731" x="62.2746" y="6295.6811">spdlog::info "Pipeline complete in X ms"</text><path d="M258.2946,6326.2481 L258.2946,6344.1741 L238.2946,6348.1741 L258.2946,6352.1741 L258.2946,6370.1001 A0,0 0 0 0 258.2946,6370.1001 L470.5868,6370.1001 A0,0 0 0 0 470.5868,6370.1001 L470.5868,6336.2481 L460.5868,6326.2481 L258.2946,6326.2481 A0,0 0 0 0 258.2946,6326.2481" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M460.5868,6326.2481 L460.5868,6336.2481 L470.5868,6336.2481 L460.5868,6326.2481" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="191.2921" x="264.2946" y="6344.1441">Drain guarantees no LogEntry is</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="133.9327" x="264.2946" y="6361.0701">dropped at shutdown.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="117.3669" x="120.9277" y="6329.7111"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="97.3669" x="130.9277" y="6352.6071">Join Log Worker</text><ellipse cx="179.6112" cy="6401.1001" fill="none" rx="11" ry="11" style="stroke:#4A5837;stroke-width:1;"/><ellipse cx="179.6112" cy="6401.1001" fill="#222222" rx="6" ry="6" style="stroke:#4A5837;stroke-width:1;"/><line style="stroke:#4A5837;stroke-width:1;" x1="20" x2="20" y1="64.33" y2="6412.1001"/><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="820.7535" x="579.6329" y="747.794"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="304.4079" x="625.7335" y="773.794"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="284.4079" x="635.7335" y="796.69">JsonLoader::LoadBeerStyles("beer-styles.json")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="372.6092" x="591.6329" y="830.72"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="352.6092" x="601.6329" y="853.616">EnrichmentService::PreWarmBeerStyleCache(beer_styles)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="283.8713" x="1041.0134" y="773.794"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="263.8713" x="1051.0134" y="796.69">JsonLoader::LoadLocations("locations.json")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="410.8747" x="977.5117" y="830.72"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="390.8747" x="987.5117" y="853.616">EnrichmentService::PreWarmLocationCache(sampled_locations)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="820.7535" x="579.6329" y="887.646"/><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="557.5839" x="711.2177" y="913.646"/><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="235.7547" x="725.2177" y="939.646"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="215.7547" x="735.2177" y="962.542">JsonLoader::LoadNamesByCountry(</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="178.3279" x="742.1337" y="979.468">"forenames-by-country.json",</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="175.2663" x="742.1337" y="996.394">"surnames-by-country.json")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="280.5595" x="974.2421" y="956.572"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="260.5595" x="984.2421" y="979.468">JsonLoader::LoadPersonas("personas.json")</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="557.5839" x="711.2177" y="1030.424"/><line style="stroke:#4A5837;stroke-width:1;" x1="573.6329" x2="573.6329" y1="64.33" y2="6412.1001"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="230.9414" x="2028.7884" y="1056.424"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="210.9414" x="2038.7884" y="1079.32">RunUserPhase(sampled_locations)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="174.2744" x="2057.1219" y="1113.35"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="2067.1219" y="1136.246">Create BoundedChannels</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="102.505" x="2067.1219" y="1153.172">(loc_ch, exp_ch)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1386.3356" x="1410.3864" y="1187.202"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="212.0816" x="1422.3864" y="1528.832"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="192.0816" x="1432.3864" y="1551.728">Loop: Send Locations -&gt; loc_ch</text><path d="M1597.8465,1600.758 L1597.8465,1627.147 L1577.8465,1631.147 L1597.8465,1635.147 L1597.8465,1661.536 A0,0 0 0 0 1597.8465,1661.536 L1802.6472,1661.536 A0,0 0 0 0 1802.6472,1661.536 L1802.6472,1610.758 L1792.6472,1600.758 L1597.8465,1600.758 A0,0 0 0 0 1597.8465,1600.758" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M1792.6472,1600.758 L1792.6472,1610.758 L1802.6472,1610.758 L1792.6472,1600.758" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="144.8039" x="1603.8465" y="1618.654">Producer closes loc_ch.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="136.1004" x="1603.8465" y="1635.58">LLM Worker while loop</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="183.8007" x="1603.8465" y="1652.506">terminates on empty + closed.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="98.8385" x="1479.008" y="1612.684"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.8385" x="1489.008" y="1635.58">Close loc_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="213.3655" x="2037.5764" y="2025.296"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="2047.5764" y="2048.192">Join LLM Worker, SQLite Worker</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="253.0675" x="2017.7254" y="2082.222"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="233.0675" x="2027.7254" y="2105.118">RunBreweryPhase(sampled_locations)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="174.2744" x="2057.1219" y="2139.148"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="2067.1219" y="2162.044">Create BoundedChannels</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="102.505" x="2067.1219" y="2178.97">(loc_ch, exp_ch)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1289.0075" x="1495.7145" y="2213"/><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="237.0742" x="1535.4952" y="2461.785"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="217.0742" x="1545.4952" y="2484.681">Loop: Sample User from user_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="134.222" x="1545.4952" y="2501.607">and pair with Location</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="288.6356" x="1509.7145" y="2550.637"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="268.6356" x="1519.7145" y="2573.533">Send BreweryTask(Location, User) -&gt; loc_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="98.8385" x="1604.6131" y="2622.563"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.8385" x="1614.6131" y="2645.459">Close loc_ch</text><path d="M2270.9419,2927.804 L2270.9419,2945.73 L2250.9419,2949.73 L2270.9419,2953.73 L2270.9419,2971.656 A0,0 0 0 0 2270.9419,2971.656 L2523.3454,2971.656 A0,0 0 0 0 2523.3454,2971.656 L2523.3454,2937.804 L2513.3454,2927.804 L2270.9419,2927.804 A0,0 0 0 0 2270.9419,2927.804" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2513.3454,2927.804 L2513.3454,2937.804 L2523.3454,2937.804 L2513.3454,2927.804" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="231.4035" x="2276.9419" y="2945.7">brewery_pool_ is now fully populated.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="120.3964" x="2276.9419" y="2962.626">Phase 1b may begin.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="213.3655" x="2037.5764" y="2931.267"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="2047.5764" y="2954.163">Join LLM Worker, SQLite Worker</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="115.7419" x="2086.3882" y="2991.656"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="95.7419" x="2096.3882" y="3014.552">RunBeerPhase()</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="174.2744" x="2057.1219" y="3048.582"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="2067.1219" y="3071.478">Create BoundedChannels</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="114.712" x="2067.1219" y="3088.404">(brew_ch, exp_ch)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1171.9389" x="1558.2897" y="3122.434"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="224.4902" x="1572.2897" y="3518.293"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="204.4902" x="1582.2897" y="3541.189">Loop: Send Breweries -&gt; brew_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="111.0456" x="1629.012" y="3590.219"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="91.0456" x="1639.012" y="3613.115">Close brew_ch</text><path d="M2270.9419,4028.997 L2270.9419,4063.849 L2250.9419,4067.849 L2270.9419,4071.849 L2270.9419,4106.701 A0,0 0 0 0 2270.9419,4106.701 L2517.7811,4106.701 A0,0 0 0 0 2517.7811,4106.701 L2517.7811,4038.997 L2507.7811,4028.997 L2270.9419,4028.997 A0,0 0 0 0 2270.9419,4028.997" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2507.7811,4028.997 L2507.7811,4038.997 L2517.7811,4038.997 L2507.7811,4028.997" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.8393" x="2276.9419" y="4046.893">Both brewery_pool_ and beer_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="187.1287" x="2276.9419" y="4063.819">are now completely populated.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="192.3677" x="2276.9419" y="4080.745">Checkin and Follow phases may</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="111.5013" x="2276.9419" y="4097.671">now run in parallel.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="213.3655" x="2037.5764" y="4049.386"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="2047.5764" y="4072.282">Join LLM Worker, SQLite Worker</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1258.9257" x="1513.7963" y="4126.701"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="137.0586" x="1651.2533" y="4152.701"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="117.0586" x="1661.2533" y="4175.597">RunCheckinPhase()</text><path d="M1857.2781,4206.164 L1857.2781,4232.553 L1837.2781,4236.553 L1857.2781,4240.553 L1857.2781,4266.942 A0,0 0 0 0 1857.2781,4266.942 L2121.0698,4266.942 A0,0 0 0 0 2121.0698,4266.942 L2121.0698,4216.164 L2111.0698,4206.164 L1857.2781,4206.164 A0,0 0 0 0 1857.2781,4206.164" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2111.0698,4206.164 L2111.0698,4216.164 L2121.0698,4216.164 L2111.0698,4206.164" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="200.899" x="1863.2781" y="4224.06">Weights seeded from each user's</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="242.7917" x="1863.2781" y="4240.986">persona.checkin_weight. J-curve profile</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="212.6934" x="1863.2781" y="4257.912">emerges from persona distribution.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="234.991" x="1602.2871" y="4209.627"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="179.0656" x="1612.2871" y="4232.523">ICheckinDistributionStrategy::</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="214.991" x="1612.2871" y="4249.449">AssignActivityWeights(user_pool_)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="1645.7738" y="4301.942"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="1655.7738" y="4324.838">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="292.2334" x="1573.6659" y="4437.609"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="272.2334" x="1583.6659" y="4460.505">CheckinsForUser(user, brewery_pool_.size())</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="181.5219" x="1629.0216" y="4574.461"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="161.5219" x="1639.0216" y="4597.357">TimestampFor(user, index)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="239.6223" x="1599.9714" y="4646.387"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.6223" x="1609.9714" y="4669.283">Select brewery from brewery_pool_</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="287.9727" x="1575.7963" y="4718.313"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="267.9727" x="1585.7963" y="4741.209">GenerateCheckin(user, brewery, timestamp)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1585.7963" y="4758.135">via DataGenerator</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="173.2084" x="1633.1784" y="4807.165"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="153.2084" x="1643.1784" y="4830.061">ProcessCheckin(checkin)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="287.0855" x="1576.2398" y="4879.091"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="267.0855" x="1586.2398" y="4901.987">PipelineLogger::Log(Info, CheckinGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.565" x="1593.1559" y="4918.913">nullopt, checkin_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="179.4969" x="1630.0341" y="4967.943"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="159.4969" x="1640.0341" y="4990.8391">Append -&gt; checkin_pool_</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="1657.2285" y="5083.8691"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="1667.2285" y="5106.7651">COMMIT &amp; BEGIN</text><polygon fill="#CBD2B5" points="1659.1196,5033.4061,1780.4456,5033.4061,1792.4456,5045.4061,1780.4456,5057.4061,1659.1196,5057.4061,1647.1196,5045.4061,1659.1196,5033.4061" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="1723.7826" y="5070.3021">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="1659.1196" y="5049.8391">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="1792.4456" y="5041.376">no</text><polygon fill="#CBD2B5" points="1719.7826,5147.2581,1731.7826,5159.2581,1719.7826,5171.2581,1707.7826,5159.2581,1719.7826,5147.2581" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="1647.0702,4509.535,1792.4949,4509.535,1804.4949,4521.535,1792.4949,4533.535,1647.0702,4533.535,1635.0702,4521.535,1647.0702,4509.535" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="1723.7826" y="4546.431">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.4247" x="1647.0702" y="4525.968">For each checkin index?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1604.3642" y="4517.505">done</text><polygon fill="#CBD2B5" points="1598.9312,4372.683,1840.634,4372.683,1852.634,4384.683,1840.634,4396.683,1598.9312,4396.683,1586.9312,4384.683,1598.9312,4372.683" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="1723.7826" y="4409.579">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="241.7028" x="1598.9312" y="4389.116">For each GeneratedUser in user_pool_?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1556.2252" y="4380.653">done</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="1663.6602" y="5235.2581"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="1673.6602" y="5258.1541">COMMIT (Final)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="126.4149" x="2248.0832" y="4278.127"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="106.4149" x="2258.0832" y="4301.023">RunFollowPhase()</text><path d="M2444.553,4348.868 L2444.553,4383.72 L2424.553,4387.72 L2444.553,4391.72 L2444.553,4426.572 A0,0 0 0 0 2444.553,4426.572 L2760.722,4426.572 A0,0 0 0 0 2760.722,4426.572 L2760.722,4358.868 L2750.722,4348.868 L2444.553,4348.868 A0,0 0 0 0 2444.553,4348.868" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2750.722,4348.868 L2750.722,4358.868 L2760.722,4358.868 L2750.722,4348.868" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="214.7865" x="2450.553" y="4366.764">For RandomFollowStrategy, weights</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="295.1689" x="2450.553" y="4383.69">are uniform. For ActivityWeightedFollowStrategy,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="254.0563" x="2450.553" y="4400.616">weights derived from user.activity_weight</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="271.5837" x="2450.553" y="4417.542">so high-activity users attract more followers.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="226.5247" x="2198.0283" y="4360.794"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.1947" x="2208.0283" y="4383.69">IFollowGenerationStrategy::</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="206.5247" x="2208.0283" y="4400.616">AssignFollowWeights(user_pool_)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="2237.2819" y="4461.572"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="2247.2819" y="4484.468">BEGIN TRANSACTION</text><path d="M2431.5741,4538.498 L2431.5741,4556.424 L2411.5741,4560.424 L2431.5741,4564.424 L2431.5741,4582.35 A0,0 0 0 0 2431.5741,4582.35 L2751.6267,4582.35 A0,0 0 0 0 2751.6267,4582.35 L2751.6267,4548.498 L2741.6267,4538.498 L2431.5741,4538.498 A0,0 0 0 0 2431.5741,4538.498" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2741.6267,4538.498 L2741.6267,4548.498 L2751.6267,4548.498 L2741.6267,4538.498" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="299.0526" x="2437.5741" y="4556.394">Self-follow constraint (follower_id != followed_id)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="255.0636" x="2437.5741" y="4573.32">enforced here and at the DB schema level.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="200.5669" x="2211.0072" y="4533.498"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.1947" x="2221.0072" y="4556.394">IFollowGenerationStrategy::</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="180.5669" x="2221.0072" y="4573.32">GenerateFollows(user_pool_)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="151.2743" x="2235.6535" y="4687.276"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="131.2743" x="2245.6535" y="4710.172">ProcessFollow(follow)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="276.4418" x="2173.0698" y="4759.202"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="256.4418" x="2183.0698" y="4782.098">PipelineLogger::Log(Info, FollowGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="166.4686" x="2189.9858" y="4799.024">nullopt, follower_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="168.2065" x="2227.1874" y="4848.054"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.2065" x="2237.1874" y="4870.95">Append -&gt; follow_pool_</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="2248.7366" y="4970.443"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="2258.7366" y="4993.3391">COMMIT &amp; BEGIN</text><polygon fill="#CBD2B5" points="2250.6277,4919.98,2371.9537,4919.98,2383.9537,4931.98,2371.9537,4943.98,2250.6277,4943.98,2238.6277,4931.98,2250.6277,4919.98" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2315.2907" y="4956.876">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="2250.6277" y="4936.413">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2383.9537" y="4927.95">no</text><polygon fill="#CBD2B5" points="2311.2907,5027.3691,2323.2907,5039.3691,2311.2907,5051.3691,2299.2907,5039.3691,2311.2907,5027.3691" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="2228.6625,4622.35,2393.9188,4622.35,2405.9188,4634.35,2393.9188,4646.35,2228.6625,4646.35,2216.6625,4634.35,2228.6625,4622.35" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2315.2907" y="4659.246">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.2563" x="2228.6625" y="4638.783">For each GeneratedFollow?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="2185.9565" y="4630.32">done</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="2255.1683" y="5110.3691"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="2265.1683" y="5133.2651">COMMIT (Final)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1258.9257" x="1513.7963" y="5292.1841"/><path d="M2270.716,5308.1841 L2270.716,5334.5731 L2250.716,5338.5731 L2270.716,5342.5731 L2270.716,5368.9621 A0,0 0 0 0 2270.716,5368.9621 L2490.9833,5368.9621 A0,0 0 0 0 2490.9833,5368.9621 L2490.9833,5318.1841 L2480.9833,5308.1841 L2270.716,5308.1841 A0,0 0 0 0 2270.716,5308.1841" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2480.9833,5308.1841 L2480.9833,5318.1841 L2490.9833,5318.1841 L2480.9833,5308.1841" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="199.2672" x="2276.716" y="5326.0801">checkin_pool_ and follow_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="144.2613" x="2276.716" y="5343.0061">are now fully populated.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="146.5102" x="2276.716" y="5359.9321">Rating phase may begin.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="212.9138" x="2037.8022" y="5320.1101"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="192.9138" x="2047.8022" y="5343.0061">Join CheckinPhase, FollowPhase</text><path d="M2227.2765,5378.9621 L2227.2765,5405.3511 L2207.2765,5409.3511 L2227.2765,5413.3511 L2227.2765,5439.7401 A0,0 0 0 0 2227.2765,5439.7401 L2514.9622,5439.7401 A0,0 0 0 0 2514.9622,5439.7401 L2514.9622,5388.9621 L2504.9622,5378.9621 L2227.2765,5378.9621 A0,0 0 0 0 2227.2765,5378.9621" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2504.9622,5378.9621 L2504.9622,5388.9621 L2514.9622,5388.9621 L2504.9622,5378.9621" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.5804" x="2233.2765" y="5396.8581">Beer selection biased by</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="266.6857" x="2233.2765" y="5413.7841">user.persona.style_affinities and abv_range.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.4598" x="2233.2765" y="5430.7101">Rating skew modulated per persona.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="126.0347" x="2081.2418" y="5390.8881"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="106.0347" x="2091.2418" y="5413.7841">RunRatingPhase()</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="2070.2503" y="5459.7401"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="2080.2503" y="5482.6361">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="311.5252" x="1988.4965" y="5575.0621"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="291.5252" x="1998.4965" y="5597.9581">Match brewery_id, select beer from beer_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="288.0478" x="1998.4965" y="5614.8841">(same brewery_id, biased by persona affinities)</text><polygon fill="#CBD2B5" points="2071.0998,5648.9141,2217.4184,5648.9141,2229.4184,5660.9141,2217.4184,5672.9141,2071.0998,5672.9141,2059.0998,5660.9141,2071.0998,5648.9141" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="146.3186" x="2071.0998" y="5665.3471">Beer exists for brewery?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2037.952" y="5656.8841">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2229.4184" y="5656.8841">no</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="256.0901" x="1865.8595" y="5682.9141"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="236.0901" x="1875.8595" y="5705.8101">GenerateRating(user, beer, checkin_id)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1875.8595" y="5722.7361">via DataGenerator</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="150.1336" x="1918.8378" y="5756.7661"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="130.1336" x="1928.8378" y="5779.6621">ProcessRating(rating)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="276.0616" x="1855.8738" y="5824.7661"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="256.0616" x="1865.8738" y="5847.6621">PipelineLogger::Log(Info, RatingGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="153.5141" x="1872.7898" y="5864.5881">nullopt, rating_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="1931.3505" y="5949.0811"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="1941.3505" y="5971.9771">COMMIT &amp; BEGIN</text><polygon fill="#CBD2B5" points="1933.2416,5898.6181,2054.5676,5898.6181,2066.5676,5910.6181,2054.5676,5922.6181,1933.2416,5922.6181,1921.2416,5910.6181,1933.2416,5898.6181" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="1997.9046" y="5935.5141">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="1933.2416" y="5915.0511">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2066.5676" y="5906.5881">no</text><polygon fill="#CBD2B5" points="1993.9046,6006.0071,2005.9046,6018.0071,1993.9046,6030.0071,1981.9046,6018.0071,1993.9046,6006.0071" style="stroke:#4A5837;stroke-width:0.5;"/><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="285.3566" x="2151.9354" y="5682.9141"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="265.3566" x="2161.9354" y="5705.8101">PipelineLogger::Log(Warn, RatingGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="168.3958" x="2168.8514" y="5722.7361">nullopt, brewery_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="196.8815" x="2196.1729" y="5756.7661"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="176.8815" x="2206.1729" y="5779.6621">Skip -- brewery has no beers</text><polygon fill="#CBD2B5" points="2144.2591,6036.0071,2156.2591,6048.0071,2144.2591,6060.0071,2132.2591,6048.0071,2144.2591,6036.0071" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="2002.3266,5516.6661,2286.1916,5516.6661,2298.1916,5528.6661,2286.1916,5540.6661,2002.3266,5540.6661,1990.3266,5528.6661,2002.3266,5516.6661" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2148.2591" y="5553.5621">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="283.865" x="2002.3266" y="5533.0991">For each GeneratedCheckin in checkin_pool_?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1959.6206" y="5524.6361">done</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="2088.1368" y="6102.0071"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="2098.1368" y="6124.9031">COMMIT (Final)</text><path d="M2257.0953,6163.9331 L2257.0953,6173.3961 L2237.0953,6177.3961 L2257.0953,6181.3961 L2257.0953,6190.8591 A0,0 0 0 0 2257.0953,6190.8591 L2474.5288,6190.8591 A0,0 0 0 0 2474.5288,6190.8591 L2474.5288,6173.9331 L2464.5288,6163.9331 L2257.0953,6163.9331 A0,0 0 0 0 2257.0953,6163.9331" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2464.5288,6163.9331 L2464.5288,6173.9331 L2474.5288,6173.9331 L2464.5288,6163.9331" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="196.4335" x="2263.0953" y="6181.8291">Safely closes the DB connection.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="185.6723" x="2051.423" y="6158.9331"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.6723" x="2061.423" y="6181.8291">Finalize SqliteExportService</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="98.6565" x="2094.9309" y="6215.8591"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.6565" x="2104.9309" y="6238.7551">Close log_ch</text><line style="stroke:#4A5837;stroke-width:1;" x1="1404.3864" x2="1404.3864" y1="64.33" y2="6412.1001"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="123.1779" x="2952.3241" y="1278.128"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="103.1779" x="2962.3241" y="1301.024">Receive Location</text><path d="M3169.5224,1354.85 L3169.5224,1364.313 L3149.5224,1368.313 L3169.5224,1372.313 L3169.5224,1381.776 A0,0 0 0 0 3169.5224,1381.776 L3403.8594,1381.776 A0,0 0 0 0 3403.8594,1381.776 L3403.8594,1364.85 L3393.8594,1354.85 L3169.5224,1354.85 A0,0 0 0 0 3169.5224,1354.85" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3393.8594,1354.85 L3393.8594,1364.85 L3403.8594,1364.85 L3393.8594,1354.85" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="3175.5224" y="1372.746">Guaranteed cache hit from startup.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="271.2188" x="2878.3036" y="1349.85"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="251.2188" x="2888.3036" y="1372.746">GetLocationContextFromCache(location)</text><path d="M3171.6025,1421.776 L3171.6025,1456.628 L3151.6025,1460.628 L3171.6025,1464.628 L3171.6025,1499.48 A0,0 0 0 0 3171.6025,1499.48 L3405.9395,1499.48 A0,0 0 0 0 3405.9395,1499.48 L3405.9395,1431.776 L3395.9395,1421.776 L3171.6025,1421.776 A0,0 0 0 0 3171.6025,1421.776" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3395.9395,1421.776 L3395.9395,1431.776 L3405.9395,1431.776 L3395.9395,1421.776" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="3177.6025" y="1439.672">Guaranteed cache hit from startup.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="201.4453" x="3177.6025" y="1456.598">Returns a Persona struct carrying</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="162.2598" x="3177.6025" y="1473.524">style_affinities, abv_range,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="197.9643" x="3177.6025" y="1490.45">ibu_preference, checkin_weight.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="275.379" x="2876.2235" y="1433.702"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="255.379" x="2886.2235" y="1456.598">IPersonaSelectionStrategy::SelectPersona(</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="120.7278" x="2893.1395" y="1473.524">personas_palette_)</text><path d="M3141.6308,1528.906 L3141.6308,1555.295 L3121.6308,1559.295 L3141.6308,1563.295 L3141.6308,1589.684 A0,0 0 0 0 3141.6308,1589.684 L3408.3018,1589.684 A0,0 0 0 0 3408.3018,1589.684 L3408.3018,1538.906 L3398.3018,1528.906 L3141.6308,1528.906 A0,0 0 0 0 3141.6308,1528.906" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3398.3018,1528.906 L3398.3018,1538.906 L3408.3018,1538.906 L3398.3018,1528.906" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="245.671" x="3147.6308" y="1546.802">Deterministic lookup -- no LLM involved.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="224.3249" x="3147.6308" y="1563.728">Name selected from pre-keyed table</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="239.9088" x="3147.6308" y="1580.654">and passed into the generation prompt.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="215.4356" x="2906.1952" y="1532.369"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="195.4356" x="2916.1952" y="1555.265">NamesByCountry::SampleName(</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9809" x="2923.1112" y="1572.191">location.iso3166_1)</text><path d="M3210.2368,1624.684 L3210.2368,1659.536 L3190.2368,1663.536 L3210.2368,1667.536 L3210.2368,1702.388 A0,0 0 0 0 3210.2368,1702.388 L3507.4806,1702.388 A0,0 0 0 0 3507.4806,1702.388 L3507.4806,1634.684 L3497.4806,1624.684 L3210.2368,1624.684 A0,0 0 0 0 3210.2368,1624.684" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3497.4806,1624.684 L3497.4806,1634.684 L3507.4806,1634.684 L3497.4806,1624.684" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="276.2438" x="3216.2368" y="1642.58">LLM receives: EnrichedCity context + persona</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="240.7473" x="3216.2368" y="1659.506">description + sampled name. Generates</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="221.3189" x="3216.2368" y="1676.432">bio and preference signals grounded</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="130.7184" x="3216.2368" y="1693.358">in locale and persona.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="352.6475" x="2837.5892" y="1636.61"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="332.6475" x="2847.5892" y="1659.506">GenerateUser(enriched_city, persona, sampled_name)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="2847.5892" y="1676.432">via DataGenerator</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="265.5933" x="2881.1164" y="1737.388"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="245.5933" x="2891.1164" y="1760.284">PipelineLogger::Log(Info, UserGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.3182" x="2898.0324" y="1777.21">city, user_id, "llm")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="212.4033" x="2907.7114" y="1824.592"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="192.4033" x="2917.7114" y="1847.488">Send GeneratedUser -&gt; exp_ch</text><polygon fill="#CBD2B5" points="2958.8986,1213.202,3068.9274,1213.202,3080.9274,1225.202,3068.9274,1237.202,2958.8986,1237.202,2946.8986,1225.202,2958.8986,1213.202" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3017.913" y="1250.098">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.0289" x="2958.8986" y="1229.635">loc_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2931.7308" y="1221.172">no</text><path d="M3085.3017,1918.518 L3085.3017,1944.907 L3065.3017,1948.907 L3085.3017,1952.907 L3085.3017,1979.296 A0,0 0 0 0 3085.3017,1979.296 L3290.1024,1979.296 A0,0 0 0 0 3290.1024,1979.296 L3290.1024,1928.518 L3280.1024,1918.518 L3085.3017,1918.518 A0,0 0 0 0 3085.3017,1918.518" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3280.1024,1918.518 L3280.1024,1928.518 L3290.1024,1928.518 L3280.1024,1918.518" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.7429" x="3091.3017" y="1936.414">Producer closes exp_ch.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="151.5184" x="3091.3017" y="1953.34">SQLite Worker while loop</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="183.8007" x="3091.3017" y="1970.266">terminates on empty + closed.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="102.7775" x="2962.5243" y="1930.444"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="82.7775" x="2972.5243" y="1953.34">Close exp_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="242.7554" x="2878.1341" y="2366.396"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="222.7554" x="2888.1341" y="2389.292">Receive BreweryTask(Location, User)</text><path d="M3169.0361,2434.359 L3169.0361,2443.822 L3149.0361,2447.822 L3169.0361,2451.822 L3169.0361,2461.285 A0,0 0 0 0 3169.0361,2461.285 L3403.3731,2461.285 A0,0 0 0 0 3403.3731,2461.285 L3403.3731,2444.359 L3393.3731,2434.359 L3169.0361,2434.359 A0,0 0 0 0 3169.0361,2434.359" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3393.3731,2434.359 L3393.3731,2444.359 L3403.3731,2444.359 L3393.3731,2434.359" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="3175.0361" y="2452.255">Guaranteed cache hit from startup.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="299.0486" x="2849.9875" y="2429.359"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="279.0486" x="2859.9875" y="2452.255">GetLocationContextFromCache(task.location)</text><path d="M3185.7315,2506.285 L3185.7315,2524.211 L3165.7315,2528.211 L3185.7315,2532.211 L3185.7315,2550.137 A0,0 0 0 0 3185.7315,2550.137 L3501.0355,2550.137 A0,0 0 0 0 3501.0355,2550.137 L3501.0355,2516.285 L3491.0355,2506.285 L3185.7315,2506.285 A0,0 0 0 0 3185.7315,2506.285" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3491.0355,2506.285 L3491.0355,2516.285 L3501.0355,2516.285 L3491.0355,2506.285" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="131.8658" x="3191.7315" y="2524.181">KV cache stays warm.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="294.3041" x="3191.7315" y="2541.107">Brewery is linked to the sampled owner_user_id.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="332.4393" x="2833.2922" y="2501.285"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="312.4393" x="2843.2922" y="2524.181">GenerateBrewery(enriched_city, context, task.user)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="2843.2922" y="2541.107">via DataGenerator</text><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="165.1811" x="2916.9213" y="2590.137"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="2926.9213" y="2613.033">PipelineLogger::Log(Info,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="119.0803" x="2933.8373" y="2629.959">BreweryGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="133.819" x="2933.8373" y="2646.885">city, brewery_id, "llm")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="234.5294" x="2882.2471" y="2695.915"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="214.5294" x="2892.2471" y="2718.811">Send GeneratedBrewery -&gt; exp_ch</text><polygon fill="#CBD2B5" points="2944.4974,2301.963,3054.5263,2301.963,3066.5263,2313.963,3054.5263,2325.963,2944.4974,2325.963,2932.4974,2313.963,2944.4974,2301.963" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3003.5118" y="2338.859">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.0289" x="2944.4974" y="2318.396">loc_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2917.3296" y="2309.933">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="102.7775" x="2948.1231" y="2785.378"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="82.7775" x="2958.1231" y="2808.274">Close exp_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="184.7103" x="2890.068" y="3226.126"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="164.7103" x="2900.068" y="3249.022">Receive GeneratedBrewery</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="242.4597" x="2861.1933" y="3296.2"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="222.4597" x="2871.1933" y="3319.096">IBeerSelectionStrategy::SelectStyles(</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="186.0366" x="2878.1093" y="3336.022">brewery, beer_style_palette_)</text><path d="M3117.2114,3449.978 L3117.2114,3484.83 L3097.2114,3488.83 L3117.2114,3492.83 L3117.2114,3527.682 A0,0 0 0 0 3117.2114,3527.682 L3354.9379,3527.682 A0,0 0 0 0 3354.9379,3527.682 L3354.9379,3459.978 L3344.9379,3449.978 L3117.2114,3449.978 A0,0 0 0 0 3117.2114,3449.978" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3344.9379,3449.978 L3344.9379,3459.978 L3354.9379,3459.978 L3344.9379,3449.978" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="3123.2114" y="3467.874">Guaranteed cache hit from startup.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="189.1634" x="3123.2114" y="3484.8">KV cache stays warm across all</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="216.7265" x="3123.2114" y="3501.726">beer generations -- system prompt</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="208.9429" x="3123.2114" y="3518.652">does not change within this phase.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="229.5765" x="2867.6349" y="3470.367"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="209.5765" x="2877.6349" y="3493.263">GetStyleContextFromCache(style)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="253.4023" x="2855.722" y="3562.682"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="233.4023" x="2865.722" y="3585.578">GenerateBeer(brewery, style_context)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="2865.722" y="3602.504">via DataGenerator</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="217.4865" x="2873.6799" y="3647.145"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="197.4865" x="2883.6799" y="3670.041">Attach GeneratedBeer to bundle</text><polygon fill="#CBD2B5" points="2894.4943,3385.052,3070.352,3385.052,3082.352,3397.052,3070.352,3409.052,2894.4943,3409.052,2882.4943,3397.052,2894.4943,3385.052" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2986.4231" y="3421.948">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="175.8578" x="2894.4943" y="3401.485">For each selected BeerStyle?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="2851.7883" y="3393.022">done</text><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="165.1811" x="2899.8326" y="3743.071"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="2909.8326" y="3765.967">PipelineLogger::Log(Info,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="97.1297" x="2916.7486" y="3782.893">BeerGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="133.819" x="2916.7486" y="3799.819">city, brewery_id, "llm")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="195.6918" x="2884.5773" y="3848.849"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="175.6918" x="2894.5773" y="3871.745">Send BeersBundle -&gt; exp_ch</text><polygon fill="#CBD2B5" points="2921.3052,3161.582,3043.5411,3161.582,3055.5411,3173.582,3043.5411,3185.582,2921.3052,3185.582,2909.3052,3173.582,2921.3052,3161.582" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2986.4231" y="3198.478">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="122.2359" x="2921.3052" y="3178.015">brew_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2894.1374" y="3169.552">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="102.7775" x="2931.0344" y="3942.923"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="82.7775" x="2941.0344" y="3965.819">Close exp_ch</text><line style="stroke:#4A5837;stroke-width:1;" x1="2800.722" x2="2800.722" y1="64.33" y2="6412.1001"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="3789.8112" y="1263.332"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="3799.8112" y="1286.228">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="162.5842" x="3782.5279" y="1399.98"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="142.5842" x="3792.5279" y="1422.876">Receive GeneratedUser</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="131.0462" x="3798.2969" y="1471.906"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="111.0462" x="3808.2969" y="1494.802">ProcessUser(user)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="265.5933" x="3731.0233" y="1538.258"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="245.5933" x="3741.0233" y="1561.154">PipelineLogger::Log(Info, UserGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="126.11" x="3747.9393" y="1578.08">city, user_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="158.8269" x="3784.4065" y="1627.11"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="138.8269" x="3794.4065" y="1650.006">Append -&gt; user_pool_</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="3801.2659" y="1749.499"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="3811.2659" y="1772.395">COMMIT &amp; BEGIN</text><polygon fill="#CBD2B5" points="3803.157,1699.036,3924.483,1699.036,3936.483,1711.036,3924.483,1723.036,3803.157,1723.036,3791.157,1711.036,3803.157,1699.036" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3867.82" y="1735.932">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="3803.157" y="1715.469">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3936.483" y="1707.006">no</text><polygon fill="#CBD2B5" points="3863.82,1811.24,3875.82,1823.24,3863.82,1835.24,3851.82,1823.24,3863.82,1811.24" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="3806.836,1335.054,3920.8039,1335.054,3932.8039,1347.054,3920.8039,1359.054,3806.836,1359.054,3794.836,1347.054,3806.836,1335.054" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3867.82" y="1371.95">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9678" x="3806.836" y="1351.487">exp_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3779.6683" y="1343.024">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="3807.6976" y="1892.24"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="3817.6976" y="1915.136">COMMIT (Final)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="478.136" x="3544.4806" y="1999.296"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="3742.9246" y="2239"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="3752.9246" y="2261.896">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="184.7103" x="3724.5782" y="2360.359"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="164.7103" x="3734.5782" y="2383.255">Receive GeneratedBrewery</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="176.6731" x="3728.5968" y="2423.322"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="156.6731" x="3738.5968" y="2446.218">ProcessBrewery(brewery)</text><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="176.5268" x="3728.67" y="2495.248"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="3738.67" y="2518.144">PipelineLogger::Log(Info,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="119.0803" x="3745.586" y="2535.07">BreweryGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.6108" x="3745.586" y="2551.996">city, brewery_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="182.3278" x="3725.7695" y="2601.026"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="162.3278" x="3735.7695" y="2623.922">Append -&gt; brewery_pool_</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="3754.3793" y="2723.415"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="3764.3793" y="2746.311">COMMIT &amp; BEGIN</text><polygon fill="#CBD2B5" points="3756.2704,2672.952,3877.5964,2672.952,3889.5964,2684.952,3877.5964,2696.952,3756.2704,2696.952,3744.2704,2684.952,3756.2704,2672.952" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3820.9334" y="2709.848">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="3756.2704" y="2689.385">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3889.5964" y="2680.922">no</text><polygon fill="#CBD2B5" points="3816.9334,2780.341,3828.9334,2792.341,3816.9334,2804.341,3804.9334,2792.341,3816.9334,2780.341" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="3759.9495,2295.926,3873.9173,2295.926,3885.9173,2307.926,3873.9173,2319.926,3759.9495,2319.926,3747.9495,2307.926,3759.9495,2295.926" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3820.9334" y="2332.822">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9678" x="3759.9495" y="2312.359">exp_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3732.7817" y="2303.896">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="3760.811" y="2848.341"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="3770.811" y="2871.237">COMMIT (Final)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="378.8079" x="3556.4806" y="2905.267"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="3650.5882" y="3148.434"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="3660.5882" y="3171.33">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="145.8726" x="3651.6607" y="3283.052"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="125.8726" x="3661.6607" y="3305.948">Receive BeersBundle</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="220.2327" x="3614.4806" y="3419.904"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="200.2327" x="3624.4806" y="3442.8">Set beer.brewery_id from bundle</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="132.7719" x="3658.211" y="3491.83"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="112.7719" x="3668.211" y="3514.726">ProcessBeer(beer)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="160.3772" x="3644.4084" y="3563.756"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="140.3772" x="3654.4084" y="3586.652">Append -&gt; beer_pool_</text><polygon fill="#CBD2B5" points="3649.9655,3354.978,3799.2285,3354.978,3811.2285,3366.978,3799.2285,3378.978,3649.9655,3378.978,3637.9655,3366.978,3649.9655,3354.978" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="3728.597" y="3391.874">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.263" x="3649.9655" y="3371.411">For each beer in bundle?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="3607.2595" y="3362.948">done</text><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="176.5268" x="3636.3336" y="3655.293"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="3646.3336" y="3678.189">PipelineLogger::Log(Info,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="97.1297" x="3653.2496" y="3695.115">BeerGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.6108" x="3653.2496" y="3712.041">city, brewery_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="3662.0429" y="3811.534"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="3672.0429" y="3834.43">COMMIT &amp; BEGIN</text><polygon fill="#CBD2B5" points="3663.934,3761.071,3785.26,3761.071,3797.26,3773.071,3785.26,3785.071,3663.934,3785.071,3651.934,3773.071,3663.934,3761.071" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3728.597" y="3797.967">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="3663.934" y="3777.504">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3797.26" y="3769.041">no</text><polygon fill="#CBD2B5" points="3724.597,3874.923,3736.597,3886.923,3724.597,3898.923,3712.597,3886.923,3724.597,3874.923" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="3667.6131,3219.978,3781.5809,3219.978,3793.5809,3231.978,3781.5809,3243.978,3667.6131,3243.978,3655.6131,3231.978,3667.6131,3219.978" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3728.597" y="3256.874">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9678" x="3667.6131" y="3236.411">exp_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3640.4453" y="3227.948">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="3668.4746" y="3956.071"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="3678.4746" y="3978.967">COMMIT (Final)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="304.2327" x="3568.4806" y="4012.997"/><line style="stroke:#4A5837;stroke-width:1;" x1="3538.4806" x2="3538.4806" y1="64.33" y2="6412.1001"/><line style="stroke:#4A5837;stroke-width:1;" x1="4027.6166" x2="4027.6166" y1="64.33" y2="6412.1001"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="106.256" y2="126.256"/><polygon fill="#656F33" points="175.6112,116.256,179.6112,126.256,183.6112,116.256,179.6112,120.256" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="270.571" y2="297.608"/><polygon fill="#656F33" points="175.6112,287.608,179.6112,297.608,183.6112,287.608,179.6112,291.608" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="207.182" y2="233.645"/><polygon fill="#656F33" points="175.6112,223.645,179.6112,233.645,183.6112,223.645,179.6112,227.645" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="228.8628" x2="240.8628" y1="195.182" y2="195.182"/><polygon fill="#656F33" points="236.8628,267.608,240.8628,277.608,244.8628,267.608,240.8628,271.608" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="240.8628" x2="240.8628" y1="195.182" y2="341.608"/><line style="stroke:#656F33;stroke-width:1;" x1="240.8628" x2="179.6112" y1="341.608" y2="341.608"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="341.608" y2="361.608"/><polygon fill="#656F33" points="175.6112,351.608,179.6112,361.608,183.6112,351.608,179.6112,355.608" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="163.182" y2="183.182"/><polygon fill="#656F33" points="175.6112,173.182,179.6112,183.182,183.6112,173.182,179.6112,177.182" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="398.534" y2="418.534"/><polygon fill="#656F33" points="175.6112,408.534,179.6112,418.534,183.6112,408.534,179.6112,412.534" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="455.46" y2="477.386"/><polygon fill="#656F33" points="175.6112,467.386,179.6112,477.386,183.6112,467.386,179.6112,471.386" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="514.312" y2="546.238"/><polygon fill="#656F33" points="175.6112,536.238,179.6112,546.238,183.6112,536.238,179.6112,540.238" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="583.164" y2="613.553"/><polygon fill="#656F33" points="175.6112,603.553,179.6112,613.553,183.6112,603.553,179.6112,607.553" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="650.479" y2="690.868"/><polygon fill="#656F33" points="175.6112,680.868,179.6112,690.868,183.6112,680.868,179.6112,684.868" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="6309.7111" y2="6329.7111"/><polygon fill="#656F33" points="175.6112,6319.7111,179.6112,6329.7111,183.6112,6319.7111,179.6112,6323.7111" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="6366.6371" y2="6390.1001"/><polygon fill="#656F33" points="175.6112,6380.1001,179.6112,6390.1001,183.6112,6380.1001,179.6112,6384.1001" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="777.9375" x2="777.9375" y1="810.72" y2="830.72"/><polygon fill="#656F33" points="773.9375,820.72,777.9375,830.72,781.9375,820.72,777.9375,824.72" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1182.9491" x2="1182.9491" y1="810.72" y2="830.72"/><polygon fill="#656F33" points="1178.9491,820.72,1182.9491,830.72,1186.9491,820.72,1182.9491,824.72" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="777.9375" x2="777.9375" y1="753.794" y2="773.794"/><polygon fill="#656F33" points="773.9375,763.794,777.9375,773.794,781.9375,763.794,777.9375,767.794" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1182.9491" x2="1182.9491" y1="753.794" y2="773.794"/><polygon fill="#656F33" points="1178.9491,763.794,1182.9491,773.794,1186.9491,763.794,1182.9491,767.794" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="777.9375" x2="777.9375" y1="867.646" y2="887.646"/><polygon fill="#656F33" points="773.9375,877.646,777.9375,887.646,781.9375,877.646,777.9375,881.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1182.9491" x2="1182.9491" y1="867.646" y2="887.646"/><polygon fill="#656F33" points="1178.9491,877.646,1182.9491,887.646,1186.9491,877.646,1182.9491,881.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="843.0951" x2="843.0951" y1="919.646" y2="939.646"/><polygon fill="#656F33" points="839.0951,929.646,843.0951,939.646,847.0951,929.646,843.0951,933.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1114.5218" x2="1114.5218" y1="919.646" y2="956.572"/><polygon fill="#656F33" points="1110.5218,946.572,1114.5218,956.572,1118.5218,946.572,1114.5218,950.572" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="843.0951" x2="843.0951" y1="1010.424" y2="1030.424"/><polygon fill="#656F33" points="839.0951,1020.424,843.0951,1030.424,847.0951,1020.424,843.0951,1024.424" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1114.5218" x2="1114.5218" y1="993.498" y2="1030.424"/><polygon fill="#656F33" points="1110.5218,1020.424,1114.5218,1030.424,1118.5218,1020.424,1114.5218,1024.424" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="982.6445" x2="982.6445" y1="893.646" y2="913.646"/><polygon fill="#656F33" points="978.6445,903.646,982.6445,913.646,986.6445,903.646,982.6445,907.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="1093.35" y2="1113.35"/><polygon fill="#656F33" points="2140.2591,1103.35,2144.2591,1113.35,2148.2591,1103.35,2144.2591,1107.35" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1528.4272" x2="1528.4272" y1="1565.758" y2="1612.684"/><polygon fill="#656F33" points="1524.4272,1602.684,1528.4272,1612.684,1532.4272,1602.684,1528.4272,1606.684" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1528.4272" x2="1528.4272" y1="1193.202" y2="1528.832"/><polygon fill="#656F33" points="1524.4272,1518.832,1528.4272,1528.832,1532.4272,1518.832,1528.4272,1522.832" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="1167.202" y2="1187.202"/><polygon fill="#656F33" points="2140.2591,1177.202,2144.2591,1187.202,2148.2591,1177.202,2144.2591,1181.202" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="2062.222" y2="2082.222"/><polygon fill="#656F33" points="2140.2591,2072.222,2144.2591,2082.222,2148.2591,2072.222,2144.2591,2076.222" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="2119.148" y2="2139.148"/><polygon fill="#656F33" points="2140.2591,2129.148,2144.2591,2139.148,2148.2591,2129.148,2144.2591,2133.148" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1654.0323" x2="1654.0323" y1="2515.637" y2="2550.637"/><polygon fill="#656F33" points="1650.0323,2540.637,1654.0323,2550.637,1658.0323,2540.637,1654.0323,2544.637" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1654.0323" x2="1654.0323" y1="2587.563" y2="2622.563"/><polygon fill="#656F33" points="1650.0323,2612.563,1654.0323,2622.563,1658.0323,2612.563,1654.0323,2616.563" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1654.0323" x2="1654.0323" y1="2219" y2="2461.785"/><polygon fill="#656F33" points="1650.0323,2451.785,1654.0323,2461.785,1658.0323,2451.785,1654.0323,2455.785" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="2193" y2="2213"/><polygon fill="#656F33" points="2140.2591,2203,2144.2591,2213,2148.2591,2203,2144.2591,2207" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="2968.193" y2="2991.656"/><polygon fill="#656F33" points="2140.2591,2981.656,2144.2591,2991.656,2148.2591,2981.656,2144.2591,2985.656" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="3028.582" y2="3048.582"/><polygon fill="#656F33" points="2140.2591,3038.582,2144.2591,3048.582,2148.2591,3038.582,2144.2591,3042.582" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1684.5348" x2="1684.5348" y1="3555.219" y2="3590.219"/><polygon fill="#656F33" points="1680.5348,3580.219,1684.5348,3590.219,1688.5348,3580.219,1684.5348,3584.219" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1684.5348" x2="1684.5348" y1="3128.434" y2="3518.293"/><polygon fill="#656F33" points="1680.5348,3508.293,1684.5348,3518.293,1688.5348,3508.293,1684.5348,3512.293" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="3102.434" y2="3122.434"/><polygon fill="#656F33" points="2140.2591,3112.434,2144.2591,3122.434,2148.2591,3112.434,2144.2591,3116.434" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4189.627" y2="4209.627"/><polygon fill="#656F33" points="1715.7826,4199.627,1719.7826,4209.627,1723.7826,4199.627,1719.7826,4203.627" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4263.479" y2="4301.942"/><polygon fill="#656F33" points="1715.7826,4291.942,1719.7826,4301.942,1723.7826,4291.942,1719.7826,4295.942" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4611.387" y2="4646.387"/><polygon fill="#656F33" points="1715.7826,4636.387,1719.7826,4646.387,1723.7826,4636.387,1719.7826,4640.387" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4683.313" y2="4718.313"/><polygon fill="#656F33" points="1715.7826,4708.313,1719.7826,4718.313,1723.7826,4708.313,1719.7826,4712.313" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4772.165" y2="4807.165"/><polygon fill="#656F33" points="1715.7826,4797.165,1719.7826,4807.165,1723.7826,4797.165,1719.7826,4801.165" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4844.091" y2="4879.091"/><polygon fill="#656F33" points="1715.7826,4869.091,1719.7826,4879.091,1723.7826,4869.091,1719.7826,4873.091" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4932.943" y2="4967.943"/><polygon fill="#656F33" points="1715.7826,4957.943,1719.7826,4967.943,1723.7826,4957.943,1719.7826,4961.943" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="5057.4061" y2="5083.8691"/><polygon fill="#656F33" points="1715.7826,5073.8691,1719.7826,5083.8691,1723.7826,5073.8691,1719.7826,5077.8691" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1792.4456" x2="1804.4456" y1="5045.4061" y2="5045.4061"/><polygon fill="#656F33" points="1800.4456,5092.3321,1804.4456,5102.3321,1808.4456,5092.3321,1804.4456,5096.3321" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1804.4456" x2="1804.4456" y1="5045.4061" y2="5159.2581"/><line style="stroke:#656F33;stroke-width:1;" x1="1804.4456" x2="1731.7826" y1="5159.2581" y2="5159.2581"/><polygon fill="#656F33" points="1741.7826,5155.2581,1731.7826,5159.2581,1741.7826,5163.2581,1737.7826,5159.2581" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="5120.7951" y2="5147.2581"/><polygon fill="#656F33" points="1715.7826,5137.2581,1719.7826,5147.2581,1723.7826,5137.2581,1719.7826,5141.2581" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="5004.8691" y2="5033.4061"/><polygon fill="#656F33" points="1715.7826,5023.4061,1719.7826,5033.4061,1723.7826,5023.4061,1719.7826,5027.4061" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4533.535" y2="4574.461"/><polygon fill="#656F33" points="1715.7826,4564.461,1719.7826,4574.461,1723.7826,4564.461,1719.7826,4568.461" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="5171.2581" y2="5181.2581"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1875.7689" y1="5181.2581" y2="5181.2581"/><polygon fill="#656F33" points="1871.7689,4865.628,1875.7689,4855.628,1879.7689,4865.628,1875.7689,4861.628" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1875.7689" x2="1875.7689" y1="4521.535" y2="5181.2581"/><line style="stroke:#656F33;stroke-width:1;" x1="1875.7689" x2="1804.4949" y1="4521.535" y2="4521.535"/><polygon fill="#656F33" points="1814.4949,4517.535,1804.4949,4521.535,1814.4949,4525.535,1810.4949,4521.535" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1635.0702" x2="1563.7963" y1="4521.535" y2="4521.535"/><polygon fill="#656F33" points="1559.7963,4851.628,1563.7963,4861.628,1567.7963,4851.628,1563.7963,4855.628" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1563.7963" x2="1563.7963" y1="4521.535" y2="5193.2581"/><line style="stroke:#656F33;stroke-width:1;" x1="1563.7963" x2="1887.7689" y1="5193.2581" y2="5193.2581"/><line style="stroke:#656F33;stroke-width:1;" x1="1887.7689" x2="1887.7689" y1="4384.683" y2="5193.2581"/><line style="stroke:#656F33;stroke-width:1;" x1="1887.7689" x2="1852.634" y1="4384.683" y2="4384.683"/><polygon fill="#656F33" points="1862.634,4380.683,1852.634,4384.683,1862.634,4388.683,1858.634,4384.683" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4474.535" y2="4509.535"/><polygon fill="#656F33" points="1715.7826,4499.535,1719.7826,4509.535,1723.7826,4499.535,1719.7826,4503.535" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4396.683" y2="4437.609"/><polygon fill="#656F33" points="1715.7826,4427.609,1719.7826,4437.609,1723.7826,4427.609,1719.7826,4431.609" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1586.9312" x2="1539.7963" y1="4384.683" y2="4384.683"/><polygon fill="#656F33" points="1535.7963,4795.202,1539.7963,4805.202,1543.7963,4795.202,1539.7963,4799.202" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1539.7963" x2="1539.7963" y1="4384.683" y2="5215.2581"/><line style="stroke:#656F33;stroke-width:1;" x1="1539.7963" x2="1719.7826" y1="5215.2581" y2="5215.2581"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="5215.2581" y2="5235.2581"/><polygon fill="#656F33" points="1715.7826,5225.2581,1719.7826,5235.2581,1723.7826,5225.2581,1719.7826,5229.2581" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4338.868" y2="4372.683"/><polygon fill="#656F33" points="1715.7826,4362.683,1719.7826,4372.683,1723.7826,4362.683,1719.7826,4366.683" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4315.053" y2="4360.794"/><polygon fill="#656F33" points="2307.2907,4350.794,2311.2907,4360.794,2315.2907,4350.794,2311.2907,4354.794" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4414.646" y2="4461.572"/><polygon fill="#656F33" points="2307.2907,4451.572,2311.2907,4461.572,2315.2907,4451.572,2311.2907,4455.572" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4498.498" y2="4533.498"/><polygon fill="#656F33" points="2307.2907,4523.498,2311.2907,4533.498,2315.2907,4523.498,2311.2907,4527.498" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4724.202" y2="4759.202"/><polygon fill="#656F33" points="2307.2907,4749.202,2311.2907,4759.202,2315.2907,4749.202,2311.2907,4753.202" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4813.054" y2="4848.054"/><polygon fill="#656F33" points="2307.2907,4838.054,2311.2907,4848.054,2315.2907,4838.054,2311.2907,4842.054" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4943.98" y2="4970.443"/><polygon fill="#656F33" points="2307.2907,4960.443,2311.2907,4970.443,2315.2907,4960.443,2311.2907,4964.443" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2383.9537" x2="2395.9537" y1="4931.98" y2="4931.98"/><polygon fill="#656F33" points="2391.9537,4978.9061,2395.9537,4988.9061,2399.9537,4978.9061,2395.9537,4982.9061" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2395.9537" x2="2395.9537" y1="4931.98" y2="5039.3691"/><line style="stroke:#656F33;stroke-width:1;" x1="2395.9537" x2="2323.2907" y1="5039.3691" y2="5039.3691"/><polygon fill="#656F33" points="2333.2907,5035.3691,2323.2907,5039.3691,2333.2907,5043.3691,2329.2907,5039.3691" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="5007.3691" y2="5027.3691"/><polygon fill="#656F33" points="2307.2907,5017.3691,2311.2907,5027.3691,2315.2907,5017.3691,2311.2907,5021.3691" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4884.98" y2="4919.98"/><polygon fill="#656F33" points="2307.2907,4909.98,2311.2907,4919.98,2315.2907,4909.98,2311.2907,4913.98" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4646.35" y2="4687.276"/><polygon fill="#656F33" points="2307.2907,4677.276,2311.2907,4687.276,2315.2907,4677.276,2311.2907,4681.276" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="5051.3691" y2="5063.3691"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2461.5116" y1="5063.3691" y2="5063.3691"/><polygon fill="#656F33" points="2457.5116,4862.091,2461.5116,4852.091,2465.5116,4862.091,2461.5116,4858.091" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2461.5116" x2="2461.5116" y1="4634.35" y2="5063.3691"/><line style="stroke:#656F33;stroke-width:1;" x1="2461.5116" x2="2405.9188" y1="4634.35" y2="4634.35"/><polygon fill="#656F33" points="2415.9188,4630.35,2405.9188,4634.35,2415.9188,4638.35,2411.9188,4634.35" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2216.6625" x2="2161.0698" y1="4634.35" y2="4634.35"/><polygon fill="#656F33" points="2157.0698,4848.091,2161.0698,4858.091,2165.0698,4848.091,2161.0698,4852.091" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2161.0698" x2="2161.0698" y1="4634.35" y2="5075.3691"/><line style="stroke:#656F33;stroke-width:1;" x1="2161.0698" x2="2311.2907" y1="5075.3691" y2="5075.3691"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="5075.3691" y2="5110.3691"/><polygon fill="#656F33" points="2307.2907,5100.3691,2311.2907,5110.3691,2315.2907,5100.3691,2311.2907,5104.3691" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4587.35" y2="4622.35"/><polygon fill="#656F33" points="2307.2907,4612.35,2311.2907,4622.35,2315.2907,4612.35,2311.2907,4616.35" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="4132.701" y2="4152.701"/><polygon fill="#656F33" points="1715.7826,4142.701,1719.7826,4152.701,1723.7826,4142.701,1719.7826,4146.701" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="4132.701" y2="4278.127"/><polygon fill="#656F33" points="2307.2907,4268.127,2311.2907,4278.127,2315.2907,4268.127,2311.2907,4272.127" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1719.7826" x2="1719.7826" y1="5272.1841" y2="5292.1841"/><polygon fill="#656F33" points="1715.7826,5282.1841,1719.7826,5292.1841,1723.7826,5282.1841,1719.7826,5286.1841" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2311.2907" x2="2311.2907" y1="5147.2951" y2="5292.1841"/><polygon fill="#656F33" points="2307.2907,5282.1841,2311.2907,5292.1841,2315.2907,5282.1841,2311.2907,5286.1841" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="4086.312" y2="4126.701"/><polygon fill="#656F33" points="2140.2591,4116.701,2144.2591,4126.701,2148.2591,4116.701,2144.2591,4120.701" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="5298.1841" y2="5320.1101"/><polygon fill="#656F33" points="2140.2591,5310.1101,2144.2591,5320.1101,2148.2591,5310.1101,2144.2591,5314.1101" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="5357.0361" y2="5390.8881"/><polygon fill="#656F33" points="2140.2591,5380.8881,2144.2591,5390.8881,2148.2591,5380.8881,2144.2591,5384.8881" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="5427.8141" y2="5459.7401"/><polygon fill="#656F33" points="2140.2591,5449.7401,2144.2591,5459.7401,2148.2591,5449.7401,2144.2591,5453.7401" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1993.9046" x2="1993.9046" y1="5736.7661" y2="5756.7661"/><polygon fill="#656F33" points="1989.9046,5746.7661,1993.9046,5756.7661,1997.9046,5746.7661,1993.9046,5750.7661" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1993.9046" x2="1993.9046" y1="5793.6921" y2="5824.7661"/><polygon fill="#656F33" points="1989.9046,5814.7661,1993.9046,5824.7661,1997.9046,5814.7661,1993.9046,5818.7661" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1993.9046" x2="1993.9046" y1="5922.6181" y2="5949.0811"/><polygon fill="#656F33" points="1989.9046,5939.0811,1993.9046,5949.0811,1997.9046,5939.0811,1993.9046,5943.0811" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2066.5676" x2="2078.5676" y1="5910.6181" y2="5910.6181"/><polygon fill="#656F33" points="2074.5676,5957.5441,2078.5676,5967.5441,2082.5676,5957.5441,2078.5676,5961.5441" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2078.5676" x2="2078.5676" y1="5910.6181" y2="6018.0071"/><line style="stroke:#656F33;stroke-width:1;" x1="2078.5676" x2="2005.9046" y1="6018.0071" y2="6018.0071"/><polygon fill="#656F33" points="2015.9046,6014.0071,2005.9046,6018.0071,2015.9046,6022.0071,2011.9046,6018.0071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1993.9046" x2="1993.9046" y1="5986.0071" y2="6006.0071"/><polygon fill="#656F33" points="1989.9046,5996.0071,1993.9046,6006.0071,1997.9046,5996.0071,1993.9046,6000.0071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1993.9046" x2="1993.9046" y1="5878.6181" y2="5898.6181"/><polygon fill="#656F33" points="1989.9046,5888.6181,1993.9046,5898.6181,1997.9046,5888.6181,1993.9046,5892.6181" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2294.6137" x2="2294.6137" y1="5736.7661" y2="5756.7661"/><polygon fill="#656F33" points="2290.6137,5746.7661,2294.6137,5756.7661,2298.6137,5746.7661,2294.6137,5750.7661" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2059.0998" x2="1993.9046" y1="5660.9141" y2="5660.9141"/><line style="stroke:#656F33;stroke-width:1;" x1="1993.9046" x2="1993.9046" y1="5660.9141" y2="5682.9141"/><polygon fill="#656F33" points="1989.9046,5672.9141,1993.9046,5682.9141,1997.9046,5672.9141,1993.9046,5676.9141" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2229.4184" x2="2294.6137" y1="5660.9141" y2="5660.9141"/><line style="stroke:#656F33;stroke-width:1;" x1="2294.6137" x2="2294.6137" y1="5660.9141" y2="5682.9141"/><polygon fill="#656F33" points="2290.6137,5672.9141,2294.6137,5682.9141,2298.6137,5672.9141,2294.6137,5676.9141" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1993.9046" x2="1993.9046" y1="6030.0071" y2="6048.0071"/><line style="stroke:#656F33;stroke-width:1;" x1="1993.9046" x2="2132.2591" y1="6048.0071" y2="6048.0071"/><polygon fill="#656F33" points="2122.2591,6044.0071,2132.2591,6048.0071,2122.2591,6052.0071,2126.2591,6048.0071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2294.6137" x2="2294.6137" y1="5793.6921" y2="6048.0071"/><line style="stroke:#656F33;stroke-width:1;" x1="2294.6137" x2="2156.2591" y1="6048.0071" y2="6048.0071"/><polygon fill="#656F33" points="2166.2591,6044.0071,2156.2591,6048.0071,2166.2591,6052.0071,2162.2591,6048.0071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="5628.9141" y2="5648.9141"/><polygon fill="#656F33" points="2140.2591,5638.9141,2144.2591,5648.9141,2148.2591,5638.9141,2144.2591,5642.9141" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="5540.6661" y2="5575.0621"/><polygon fill="#656F33" points="2140.2591,5565.0621,2144.2591,5575.0621,2148.2591,5565.0621,2144.2591,5569.0621" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="6060.0071" y2="6070.0071"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2459.292" y1="6070.0071" y2="6070.0071"/><polygon fill="#656F33" points="2455.292,5804.7661,2459.292,5794.7661,2463.292,5804.7661,2459.292,5800.7661" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2459.292" x2="2459.292" y1="5528.6661" y2="6070.0071"/><line style="stroke:#656F33;stroke-width:1;" x1="2459.292" x2="2298.1916" y1="5528.6661" y2="5528.6661"/><polygon fill="#656F33" points="2308.1916,5524.6661,2298.1916,5528.6661,2308.1916,5532.6661,2304.1916,5528.6661" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1990.3266" x2="1833.8738" y1="5528.6661" y2="5528.6661"/><polygon fill="#656F33" points="1829.8738,5790.7661,1833.8738,5800.7661,1837.8738,5790.7661,1833.8738,5794.7661" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1833.8738" x2="1833.8738" y1="5528.6661" y2="6082.0071"/><line style="stroke:#656F33;stroke-width:1;" x1="1833.8738" x2="2144.2591" y1="6082.0071" y2="6082.0071"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="6082.0071" y2="6102.0071"/><polygon fill="#656F33" points="2140.2591,6092.0071,2144.2591,6102.0071,2148.2591,6092.0071,2144.2591,6096.0071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="5496.6661" y2="5516.6661"/><polygon fill="#656F33" points="2140.2591,5506.6661,2144.2591,5516.6661,2148.2591,5506.6661,2144.2591,5510.6661" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="6138.9331" y2="6158.9331"/><polygon fill="#656F33" points="2140.2591,6148.9331,2144.2591,6158.9331,2148.2591,6148.9331,2144.2591,6152.9331" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="6195.8591" y2="6215.8591"/><polygon fill="#656F33" points="2140.2591,6205.8591,2144.2591,6215.8591,2148.2591,6205.8591,2144.2591,6209.8591" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1315.054" y2="1349.85"/><polygon fill="#656F33" points="3009.913,1339.85,3013.913,1349.85,3017.913,1339.85,3013.913,1343.85" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1386.776" y2="1433.702"/><polygon fill="#656F33" points="3009.913,1423.702,3013.913,1433.702,3017.913,1423.702,3013.913,1427.702" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1487.554" y2="1532.369"/><polygon fill="#656F33" points="3009.913,1522.369,3013.913,1532.369,3017.913,1522.369,3013.913,1526.369" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1586.221" y2="1636.61"/><polygon fill="#656F33" points="3009.913,1626.61,3013.913,1636.61,3017.913,1626.61,3013.913,1630.61" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1690.462" y2="1737.388"/><polygon fill="#656F33" points="3009.913,1727.388,3013.913,1737.388,3017.913,1727.388,3013.913,1731.388" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1791.24" y2="1824.592"/><polygon fill="#656F33" points="3009.913,1814.592,3013.913,1824.592,3017.913,1814.592,3013.913,1818.592" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1237.202" y2="1278.128"/><polygon fill="#656F33" points="3009.913,1268.128,3013.913,1278.128,3017.913,1268.128,3013.913,1272.128" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1861.518" y2="1871.518"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3519.4806" y1="1871.518" y2="1871.518"/><polygon fill="#656F33" points="3515.4806,1557.295,3519.4806,1547.295,3523.4806,1557.295,3519.4806,1553.295" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3519.4806" x2="3519.4806" y1="1225.202" y2="1871.518"/><line style="stroke:#656F33;stroke-width:1;" x1="3519.4806" x2="3080.9274" y1="1225.202" y2="1225.202"/><polygon fill="#656F33" points="3090.9274,1221.202,3080.9274,1225.202,3090.9274,1229.202,3086.9274,1225.202" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2946.8986" x2="2825.5892" y1="1225.202" y2="1225.202"/><polygon fill="#656F33" points="2821.5892,1543.295,2825.5892,1553.295,2829.5892,1543.295,2825.5892,1547.295" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2825.5892" x2="2825.5892" y1="1225.202" y2="1883.518"/><line style="stroke:#656F33;stroke-width:1;" x1="2825.5892" x2="3013.913" y1="1883.518" y2="1883.518"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1883.518" y2="1930.444"/><polygon fill="#656F33" points="3009.913,1920.444,3013.913,1930.444,3017.913,1920.444,3013.913,1924.444" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2403.322" y2="2429.359"/><polygon fill="#656F33" points="2995.5118,2419.359,2999.5118,2429.359,3003.5118,2419.359,2999.5118,2423.359" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2466.285" y2="2501.285"/><polygon fill="#656F33" points="2995.5118,2491.285,2999.5118,2501.285,3003.5118,2491.285,2999.5118,2495.285" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2555.137" y2="2590.137"/><polygon fill="#656F33" points="2995.5118,2580.137,2999.5118,2590.137,3003.5118,2580.137,2999.5118,2584.137" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2660.915" y2="2695.915"/><polygon fill="#656F33" points="2995.5118,2685.915,2999.5118,2695.915,3003.5118,2685.915,2999.5118,2689.915" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2325.963" y2="2366.396"/><polygon fill="#656F33" points="2995.5118,2356.396,2999.5118,2366.396,3003.5118,2356.396,2999.5118,2360.396" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2732.841" y2="2744.841"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="3513.0355" y1="2744.841" y2="2744.841"/><polygon fill="#656F33" points="3509.0355,2534.674,3513.0355,2524.674,3517.0355,2534.674,3513.0355,2530.674" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3513.0355" x2="3513.0355" y1="2313.963" y2="2744.841"/><line style="stroke:#656F33;stroke-width:1;" x1="3513.0355" x2="3066.5263" y1="2313.963" y2="2313.963"/><polygon fill="#656F33" points="3076.5263,2309.963,3066.5263,2313.963,3076.5263,2317.963,3072.5263,2313.963" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2932.4974" x2="2821.2922" y1="2313.963" y2="2313.963"/><polygon fill="#656F33" points="2817.2922,2520.674,2821.2922,2530.674,2825.2922,2520.674,2821.2922,2524.674" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2821.2922" x2="2821.2922" y1="2313.963" y2="2756.841"/><line style="stroke:#656F33;stroke-width:1;" x1="2821.2922" x2="2999.5118" y1="2756.841" y2="2756.841"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2756.841" y2="2785.378"/><polygon fill="#656F33" points="2995.5118,2775.378,2999.5118,2785.378,3003.5118,2775.378,2999.5118,2779.378" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3263.052" y2="3296.2"/><polygon fill="#656F33" points="2978.4231,3286.2,2982.4231,3296.2,2986.4231,3286.2,2982.4231,3290.2" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3507.293" y2="3562.682"/><polygon fill="#656F33" points="2978.4231,3552.682,2982.4231,3562.682,2986.4231,3552.682,2982.4231,3556.682" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3616.534" y2="3647.145"/><polygon fill="#656F33" points="2978.4231,3637.145,2982.4231,3647.145,2986.4231,3637.145,2982.4231,3641.145" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3409.052" y2="3470.367"/><polygon fill="#656F33" points="2978.4231,3460.367,2982.4231,3470.367,2986.4231,3460.367,2982.4231,3464.367" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3684.071" y2="3696.071"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="3366.9379" y1="3696.071" y2="3696.071"/><polygon fill="#656F33" points="3362.9379,3558.756,3366.9379,3548.756,3370.9379,3558.756,3366.9379,3554.756" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3366.9379" x2="3366.9379" y1="3397.052" y2="3696.071"/><line style="stroke:#656F33;stroke-width:1;" x1="3366.9379" x2="3082.352" y1="3397.052" y2="3397.052"/><polygon fill="#656F33" points="3092.352,3393.052,3082.352,3397.052,3092.352,3401.052,3088.352,3397.052" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2882.4943" x2="2843.722" y1="3397.052" y2="3397.052"/><polygon fill="#656F33" points="2839.722,3544.756,2843.722,3554.756,2847.722,3544.756,2843.722,3548.756" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2843.722" x2="2843.722" y1="3397.052" y2="3708.071"/><line style="stroke:#656F33;stroke-width:1;" x1="2843.722" x2="2982.4231" y1="3708.071" y2="3708.071"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3708.071" y2="3743.071"/><polygon fill="#656F33" points="2978.4231,3733.071,2982.4231,3743.071,2986.4231,3733.071,2982.4231,3737.071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3350.052" y2="3385.052"/><polygon fill="#656F33" points="2978.4231,3375.052,2982.4231,3385.052,2986.4231,3375.052,2982.4231,3379.052" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3813.849" y2="3848.849"/><polygon fill="#656F33" points="2978.4231,3838.849,2982.4231,3848.849,2986.4231,3838.849,2982.4231,3842.849" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3185.582" y2="3226.126"/><polygon fill="#656F33" points="2978.4231,3216.126,2982.4231,3226.126,2986.4231,3216.126,2982.4231,3220.126" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3885.775" y2="3897.775"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="3378.9379" y1="3897.775" y2="3897.775"/><polygon fill="#656F33" points="3374.9379,3546.756,3378.9379,3536.756,3382.9379,3546.756,3378.9379,3542.756" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3378.9379" x2="3378.9379" y1="3173.582" y2="3897.775"/><line style="stroke:#656F33;stroke-width:1;" x1="3378.9379" x2="3055.5411" y1="3173.582" y2="3173.582"/><polygon fill="#656F33" points="3065.5411,3169.582,3055.5411,3173.582,3065.5411,3177.582,3061.5411,3173.582" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2909.3052" x2="2819.722" y1="3173.582" y2="3173.582"/><polygon fill="#656F33" points="2815.722,3532.756,2819.722,3542.756,2823.722,3532.756,2819.722,3536.756" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2819.722" x2="2819.722" y1="3173.582" y2="3909.775"/><line style="stroke:#656F33;stroke-width:1;" x1="2819.722" x2="2982.4231" y1="3909.775" y2="3909.775"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3909.775" y2="3942.923"/><polygon fill="#656F33" points="2978.4231,3932.923,2982.4231,3942.923,2986.4231,3932.923,2982.4231,3936.923" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1436.906" y2="1471.906"/><polygon fill="#656F33" points="3859.82,1461.906,3863.82,1471.906,3867.82,1461.906,3863.82,1465.906" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1508.832" y2="1538.258"/><polygon fill="#656F33" points="3859.82,1528.258,3863.82,1538.258,3867.82,1528.258,3863.82,1532.258" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1592.11" y2="1627.11"/><polygon fill="#656F33" points="3859.82,1617.11,3863.82,1627.11,3867.82,1617.11,3863.82,1621.11" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1723.036" y2="1749.499"/><polygon fill="#656F33" points="3859.82,1739.499,3863.82,1749.499,3867.82,1739.499,3863.82,1743.499" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3936.483" x2="3948.483" y1="1711.036" y2="1711.036"/><polygon fill="#656F33" points="3944.483,1757.962,3948.483,1767.962,3952.483,1757.962,3948.483,1761.962" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3948.483" x2="3948.483" y1="1711.036" y2="1823.24"/><line style="stroke:#656F33;stroke-width:1;" x1="3948.483" x2="3875.82" y1="1823.24" y2="1823.24"/><polygon fill="#656F33" points="3885.82,1819.24,3875.82,1823.24,3885.82,1827.24,3881.82,1823.24" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1786.425" y2="1811.24"/><polygon fill="#656F33" points="3859.82,1801.24,3863.82,1811.24,3867.82,1801.24,3863.82,1805.24" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1664.036" y2="1699.036"/><polygon fill="#656F33" points="3859.82,1689.036,3863.82,1699.036,3867.82,1689.036,3863.82,1693.036" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1359.054" y2="1399.98"/><polygon fill="#656F33" points="3859.82,1389.98,3863.82,1399.98,3867.82,1389.98,3863.82,1393.98" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1835.24" y2="1847.24"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="4008.6166" y1="1847.24" y2="1847.24"/><polygon fill="#656F33" points="4004.6166,1605.184,4008.6166,1595.184,4012.6166,1605.184,4008.6166,1601.184" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4008.6166" x2="4008.6166" y1="1347.054" y2="1847.24"/><line style="stroke:#656F33;stroke-width:1;" x1="4008.6166" x2="3932.8039" y1="1347.054" y2="1347.054"/><polygon fill="#656F33" points="3942.8039,1343.054,3932.8039,1347.054,3942.8039,1351.054,3938.8039,1347.054" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3794.836" x2="3719.0233" y1="1347.054" y2="1347.054"/><polygon fill="#656F33" points="3715.0233,1591.184,3719.0233,1601.184,3723.0233,1591.184,3719.0233,1595.184" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3719.0233" x2="3719.0233" y1="1347.054" y2="1859.24"/><line style="stroke:#656F33;stroke-width:1;" x1="3719.0233" x2="3863.82" y1="1859.24" y2="1859.24"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1859.24" y2="1892.24"/><polygon fill="#656F33" points="3859.82,1882.24,3863.82,1892.24,3867.82,1882.24,3863.82,1886.24" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1300.258" y2="1335.054"/><polygon fill="#656F33" points="3859.82,1325.054,3863.82,1335.054,3867.82,1325.054,3863.82,1329.054" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1929.166" y2="1999.296"/><polygon fill="#656F33" points="3859.82,1989.296,3863.82,1999.296,3867.82,1989.296,3863.82,1993.296" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2397.285" y2="2423.322"/><polygon fill="#656F33" points="3812.9334,2413.322,3816.9334,2423.322,3820.9334,2413.322,3816.9334,2417.322" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2460.248" y2="2495.248"/><polygon fill="#656F33" points="3812.9334,2485.248,3816.9334,2495.248,3820.9334,2485.248,3816.9334,2489.248" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2566.026" y2="2601.026"/><polygon fill="#656F33" points="3812.9334,2591.026,3816.9334,2601.026,3820.9334,2591.026,3816.9334,2595.026" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2696.952" y2="2723.415"/><polygon fill="#656F33" points="3812.9334,2713.415,3816.9334,2723.415,3820.9334,2713.415,3816.9334,2717.415" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3889.5964" x2="3901.5964" y1="2684.952" y2="2684.952"/><polygon fill="#656F33" points="3897.5964,2731.878,3901.5964,2741.878,3905.5964,2731.878,3901.5964,2735.878" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3901.5964" x2="3901.5964" y1="2684.952" y2="2792.341"/><line style="stroke:#656F33;stroke-width:1;" x1="3901.5964" x2="3828.9334" y1="2792.341" y2="2792.341"/><polygon fill="#656F33" points="3838.9334,2788.341,3828.9334,2792.341,3838.9334,2796.341,3834.9334,2792.341" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2760.341" y2="2780.341"/><polygon fill="#656F33" points="3812.9334,2770.341,3816.9334,2780.341,3820.9334,2770.341,3816.9334,2774.341" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2637.952" y2="2672.952"/><polygon fill="#656F33" points="3812.9334,2662.952,3816.9334,2672.952,3820.9334,2662.952,3816.9334,2666.952" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2319.926" y2="2360.359"/><polygon fill="#656F33" points="3812.9334,2350.359,3816.9334,2360.359,3820.9334,2350.359,3816.9334,2354.359" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2804.341" y2="2816.341"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3921.2885" y1="2816.341" y2="2816.341"/><polygon fill="#656F33" points="3917.2885,2570.637,3921.2885,2560.637,3925.2885,2570.637,3921.2885,2566.637" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3921.2885" x2="3921.2885" y1="2307.926" y2="2816.341"/><line style="stroke:#656F33;stroke-width:1;" x1="3921.2885" x2="3885.9173" y1="2307.926" y2="2307.926"/><polygon fill="#656F33" points="3895.9173,2303.926,3885.9173,2307.926,3895.9173,2311.926,3891.9173,2307.926" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3747.9495" x2="3712.5782" y1="2307.926" y2="2307.926"/><polygon fill="#656F33" points="3708.5782,2556.637,3712.5782,2566.637,3716.5782,2556.637,3712.5782,2560.637" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3712.5782" x2="3712.5782" y1="2307.926" y2="2828.341"/><line style="stroke:#656F33;stroke-width:1;" x1="3712.5782" x2="3816.9334" y1="2828.341" y2="2828.341"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2828.341" y2="2848.341"/><polygon fill="#656F33" points="3812.9334,2838.341,3816.9334,2848.341,3820.9334,2838.341,3816.9334,2842.341" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2275.926" y2="2295.926"/><polygon fill="#656F33" points="3812.9334,2285.926,3816.9334,2295.926,3820.9334,2285.926,3816.9334,2289.926" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2885.267" y2="2905.267"/><polygon fill="#656F33" points="3812.9334,2895.267,3816.9334,2905.267,3820.9334,2895.267,3816.9334,2899.267" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3456.83" y2="3491.83"/><polygon fill="#656F33" points="3720.597,3481.83,3724.597,3491.83,3728.597,3481.83,3724.597,3485.83" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3528.756" y2="3563.756"/><polygon fill="#656F33" points="3720.597,3553.756,3724.597,3563.756,3728.597,3553.756,3724.597,3557.756" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3378.978" y2="3419.904"/><polygon fill="#656F33" points="3720.597,3409.904,3724.597,3419.904,3728.597,3409.904,3724.597,3413.904" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3600.682" y2="3612.682"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3846.7133" y1="3612.682" y2="3612.682"/><polygon fill="#656F33" points="3842.7133,3499.83,3846.7133,3489.83,3850.7133,3499.83,3846.7133,3495.83" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3846.7133" x2="3846.7133" y1="3366.978" y2="3612.682"/><line style="stroke:#656F33;stroke-width:1;" x1="3846.7133" x2="3811.2285" y1="3366.978" y2="3366.978"/><polygon fill="#656F33" points="3821.2285,3362.978,3811.2285,3366.978,3821.2285,3370.978,3817.2285,3366.978" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3637.9655" x2="3602.4806" y1="3366.978" y2="3366.978"/><polygon fill="#656F33" points="3598.4806,3485.83,3602.4806,3495.83,3606.4806,3485.83,3602.4806,3489.83" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3602.4806" x2="3602.4806" y1="3366.978" y2="3624.682"/><line style="stroke:#656F33;stroke-width:1;" x1="3602.4806" x2="3724.597" y1="3624.682" y2="3624.682"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3624.682" y2="3655.293"/><polygon fill="#656F33" points="3720.597,3645.293,3724.597,3655.293,3728.597,3645.293,3724.597,3649.293" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3319.978" y2="3354.978"/><polygon fill="#656F33" points="3720.597,3344.978,3724.597,3354.978,3728.597,3344.978,3724.597,3348.978" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3785.071" y2="3811.534"/><polygon fill="#656F33" points="3720.597,3801.534,3724.597,3811.534,3728.597,3801.534,3724.597,3805.534" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3797.26" x2="3809.26" y1="3773.071" y2="3773.071"/><polygon fill="#656F33" points="3805.26,3819.997,3809.26,3829.997,3813.26,3819.997,3809.26,3823.997" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3809.26" x2="3809.26" y1="3773.071" y2="3886.923"/><line style="stroke:#656F33;stroke-width:1;" x1="3809.26" x2="3736.597" y1="3886.923" y2="3886.923"/><polygon fill="#656F33" points="3746.597,3882.923,3736.597,3886.923,3746.597,3890.923,3742.597,3886.923" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3848.46" y2="3874.923"/><polygon fill="#656F33" points="3720.597,3864.923,3724.597,3874.923,3728.597,3864.923,3724.597,3868.923" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3726.071" y2="3761.071"/><polygon fill="#656F33" points="3720.597,3751.071,3724.597,3761.071,3728.597,3751.071,3724.597,3755.071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3243.978" y2="3283.052"/><polygon fill="#656F33" points="3720.597,3273.052,3724.597,3283.052,3728.597,3273.052,3724.597,3277.052" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3898.923" y2="3910.923"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3858.7133" y1="3910.923" y2="3910.923"/><polygon fill="#656F33" points="3854.7133,3582.719,3858.7133,3572.719,3862.7133,3582.719,3858.7133,3578.719" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3858.7133" x2="3858.7133" y1="3231.978" y2="3910.923"/><line style="stroke:#656F33;stroke-width:1;" x1="3858.7133" x2="3793.5809" y1="3231.978" y2="3231.978"/><polygon fill="#656F33" points="3803.5809,3227.978,3793.5809,3231.978,3803.5809,3235.978,3799.5809,3231.978" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3655.6131" x2="3584.4806" y1="3231.978" y2="3231.978"/><polygon fill="#656F33" points="3580.4806,3568.719,3584.4806,3578.719,3588.4806,3568.719,3584.4806,3572.719" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3584.4806" x2="3584.4806" y1="3231.978" y2="3922.923"/><line style="stroke:#656F33;stroke-width:1;" x1="3584.4806" x2="3724.597" y1="3922.923" y2="3922.923"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3922.923" y2="3956.071"/><polygon fill="#656F33" points="3720.597,3946.071,3724.597,3956.071,3728.597,3946.071,3724.597,3950.071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3185.36" y2="3219.978"/><polygon fill="#656F33" points="3720.597,3209.978,3724.597,3219.978,3728.597,3209.978,3724.597,3213.978" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3992.997" y2="4012.997"/><polygon fill="#656F33" points="3720.597,4002.997,3724.597,4012.997,3728.597,4002.997,3724.597,4006.997" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="727.794" y2="732.794"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="982.6445" y1="732.794" y2="732.794"/><line style="stroke:#656F33;stroke-width:1;" x1="982.6445" x2="982.6445" y1="732.794" y2="747.794"/><polygon fill="#656F33" points="978.6445,737.794,982.6445,747.794,986.6445,737.794,982.6445,741.794" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="982.6445" x2="982.6445" y1="1036.424" y2="1041.424"/><line style="stroke:#656F33;stroke-width:1;" x1="982.6445" x2="2144.2591" y1="1041.424" y2="1041.424"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="1041.424" y2="1056.424"/><polygon fill="#656F33" points="2140.2591,1046.424,2144.2591,1056.424,2148.2591,1046.424,2144.2591,1050.424" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2030.971" x2="2030.971" y1="1193.202" y2="1197.202"/><line style="stroke:#656F33;stroke-width:1;" x1="2030.971" x2="3013.913" y1="1197.202" y2="1197.202"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1197.202" y2="1213.202"/><polygon fill="#656F33" points="3009.913,1203.202,3013.913,1213.202,3017.913,1203.202,3013.913,1207.202" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2721.3352" x2="2721.3352" y1="1193.202" y2="1197.202"/><line style="stroke:#656F33;stroke-width:1;" x1="2721.3352" x2="3863.82" y1="1197.202" y2="1197.202"/><line style="stroke:#656F33;stroke-width:1;" x1="3863.82" x2="3863.82" y1="1197.202" y2="1263.332"/><polygon fill="#656F33" points="3859.82,1253.332,3863.82,1263.332,3867.82,1253.332,3863.82,1257.332" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1528.4272" x2="1528.4272" y1="1649.61" y2="1985.296"/><line style="stroke:#656F33;stroke-width:1;" x1="1528.4272" x2="3563.4806" y1="1985.296" y2="1985.296"/><line style="stroke:#656F33;stroke-width:1;" x1="3563.4806" x2="3563.4806" y1="1985.296" y2="1999.296"/><polygon fill="#656F33" points="3559.4806,1989.296,3563.4806,1999.296,3567.4806,1989.296,3563.4806,1993.296" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3013.913" y1="1967.37" y2="1985.296"/><line style="stroke:#656F33;stroke-width:1;" x1="3013.913" x2="3575.4806" y1="1985.296" y2="1985.296"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="3575.4806" y1="1985.296" y2="1999.296"/><polygon fill="#656F33" points="3571.4806,1989.296,3575.4806,1999.296,3579.4806,1989.296,3575.4806,1993.296" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="3575.4806" y1="2005.296" y2="2010.296"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="2144.2591" y1="2010.296" y2="2010.296"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="2010.296" y2="2025.296"/><polygon fill="#656F33" points="2140.2591,2015.296,2144.2591,2025.296,2148.2591,2015.296,2144.2591,2019.296" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2016.5698" x2="2016.5698" y1="2219" y2="2223"/><line style="stroke:#656F33;stroke-width:1;" x1="2016.5698" x2="2999.5118" y1="2223" y2="2223"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2223" y2="2301.963"/><polygon fill="#656F33" points="2995.5118,2291.963,2999.5118,2301.963,3003.5118,2291.963,2999.5118,2295.963" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2674.4486" x2="2674.4486" y1="2219" y2="2223"/><line style="stroke:#656F33;stroke-width:1;" x1="2674.4486" x2="3816.9334" y1="2223" y2="2223"/><line style="stroke:#656F33;stroke-width:1;" x1="3816.9334" x2="3816.9334" y1="2223" y2="2239"/><polygon fill="#656F33" points="3812.9334,2229,3816.9334,2239,3820.9334,2229,3816.9334,2233" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1654.0323" x2="1654.0323" y1="2659.489" y2="2891.267"/><line style="stroke:#656F33;stroke-width:1;" x1="1654.0323" x2="3575.4806" y1="2891.267" y2="2891.267"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="3575.4806" y1="2891.267" y2="2905.267"/><polygon fill="#656F33" points="3571.4806,2895.267,3575.4806,2905.267,3579.4806,2895.267,3575.4806,2899.267" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="2999.5118" y1="2822.304" y2="2891.267"/><line style="stroke:#656F33;stroke-width:1;" x1="2999.5118" x2="3575.4806" y1="2891.267" y2="2891.267"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="3575.4806" y1="2891.267" y2="2905.267"/><polygon fill="#656F33" points="3571.4806,2895.267,3575.4806,2905.267,3579.4806,2895.267,3575.4806,2899.267" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="3575.4806" y1="2911.267" y2="2916.267"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="2144.2591" y1="2916.267" y2="2916.267"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="2916.267" y2="2931.267"/><polygon fill="#656F33" points="2140.2591,2921.267,2144.2591,2931.267,2148.2591,2921.267,2144.2591,2925.267" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1999.4811" x2="1999.4811" y1="3128.434" y2="3132.434"/><line style="stroke:#656F33;stroke-width:1;" x1="1999.4811" x2="2982.4231" y1="3132.434" y2="3132.434"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3132.434" y2="3161.582"/><polygon fill="#656F33" points="2978.4231,3151.582,2982.4231,3161.582,2986.4231,3151.582,2982.4231,3155.582" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2582.1122" x2="2582.1122" y1="3128.434" y2="3132.434"/><line style="stroke:#656F33;stroke-width:1;" x1="2582.1122" x2="3724.597" y1="3132.434" y2="3132.434"/><line style="stroke:#656F33;stroke-width:1;" x1="3724.597" x2="3724.597" y1="3132.434" y2="3148.434"/><polygon fill="#656F33" points="3720.597,3138.434,3724.597,3148.434,3728.597,3138.434,3724.597,3142.434" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1684.5348" x2="1684.5348" y1="3627.145" y2="3998.997"/><line style="stroke:#656F33;stroke-width:1;" x1="1684.5348" x2="3575.4806" y1="3998.997" y2="3998.997"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="3575.4806" y1="3998.997" y2="4012.997"/><polygon fill="#656F33" points="3571.4806,4002.997,3575.4806,4012.997,3579.4806,4002.997,3575.4806,4006.997" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="2982.4231" y1="3979.849" y2="3998.997"/><line style="stroke:#656F33;stroke-width:1;" x1="2982.4231" x2="3575.4806" y1="3998.997" y2="3998.997"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="3575.4806" y1="3998.997" y2="4012.997"/><polygon fill="#656F33" points="3571.4806,4002.997,3575.4806,4012.997,3579.4806,4002.997,3575.4806,4006.997" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="3575.4806" y1="4018.997" y2="4023.997"/><line style="stroke:#656F33;stroke-width:1;" x1="3575.4806" x2="2144.2591" y1="4023.997" y2="4023.997"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="4023.997" y2="4049.386"/><polygon fill="#656F33" points="2140.2591,4039.386,2144.2591,4049.386,2148.2591,4039.386,2144.2591,4043.386" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="2144.2591" y1="6252.7851" y2="6257.7851"/><line style="stroke:#656F33;stroke-width:1;" x1="2144.2591" x2="179.6112" y1="6257.7851" y2="6257.7851"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="6257.7851" y2="6272.7851"/><polygon fill="#656F33" points="175.6112,6262.7851,179.6112,6272.7851,183.6112,6262.7851,179.6112,6266.7851" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="28.5837" x="282.5246" y="77.226">Main</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.1019" x="876.4587" y="77.226">BiergartenPipelineOrchestrator::Run()</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.2797" x="2063.4144" y="77.226">Orchestrator</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="71.9356" x="3133.6335" y="77.226">LLM Worker</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="87.3536" x="3739.3718" y="77.226">SQLite Worker</text><?plantuml-src rLfRSoAv5NxdLsZza84Q83ixLVk0Soc3iTUp7ji1RvnKJHKbkW-WTRVKApLuIFaXFo4FoH_SNv9pTEaB1flPdKpOgIdRj8waS_s-8z5V2HabonXOj_lxgG0zvpe7sNa0yG_ybIyWXMwsJ9E6kHSouvgdB8OPNoRvcPBv6ANOcxULmLpa2HH3ttpTQDWdx7O1h5-ipqvvpjcDo20H4jZF__mtEuboiHBvcfqAFiUL6et7zrp8nuR9SKgZTyErWHCzNwOWSzFaUXwr6VvSjOuROiQQ5tB54n7J8_Fd5aFD9MkkmRGQZFLC5YTgtkk1raeVunEJgwm1YG7MbAhL01cBMQDt8KNEhZEGu_4bcoTgoXEKv3cmtx7BXAUypwDxb1tJi-D6hxyKISnEBvYGFqAKqz9k4O6geFdZdnAHm_1ZfdG-1hqI4SwI2jVJOhx8KG_QpB3nNovHZaLAIbn6ADd5eUQjvj9m-zcWMS2aUc0fbtmECOvde3lPWgC9Ay7PbEVHGiXvgql6CDe4THbe8EtxQYbZY0SBZXiaVxXKyw7CzVfF39qoYHPeoJZZ3vBX0BjJ-Xuq-W-dnXlQqlY36uyr1iVu1TXCqGn04GoEG5Mp4Df4p20Nc4GuTf8aVhfXaAAhWoBePBsCSeCoP4l82noUurQT3fEmmZzS55cC6qHvigvPMkPMc7sjemNWmXpZqkkDbhA9cVAubznZeu4MtLFcl3DANYeU0uxHxpw07kVh14ppQ8f_TupzqFqHvOvQb5gzeTGYMb2Q-fZtUZSQxhXEYya3ZdisQVx4pSUPj2FZStJhjdqlLSHj9ZIFal3dVfk6cMvFmzCiWNXIB8BJoOtMtbr6N_4KJ7yzm3J2Q3K_ICQEK1OaFUzCrvt8ZJY5sdRSBFNsuHTDlS7yK9AZfPd_gvXOQDfunNx-px_-l_zHXvllJiP3zhK5i1_6mn4x7ruDHoUt5zTN1w7XOpMv7nkKtJyOq3S46rjJOJjYc0-oYL9OwMq67pFyZQ8XMpRsm81UAfNrs9Y2LQGjwn3QH1PjK6IGA0Ikya4DPXYxqIfUHbZo4SaPBzYrOvUNxmD8FIn4GgiWbjD83ZeL4jKtJ4b4c0pPvBLR8kvQRF9mKSk_nt91qjwjwSrbw2Y6q9mIfGXJ40fQC888n0eA2z4Xzlavv4N58Gt2n_nCgzGLN_2qBTadHZDslaGEnJaGiuWci0M2v0odCqk2oynve8Gzk-E5BvWn98uznXGBcAzxFVV8Zzkw3IKroNW2UGwJNwaBOoF8iTIHePZVnwCvJjDwZPJavIpGJVXi9eWWmI1xJrSJt6CERIyYfij9fc4622qHj1bk6s5dCS5k11NRQdmTcj1YczJqr9eRFDuLHhrzy-stapUxx3q5bpx2v2AYdBfVPfPwbCqu8LSgMRayed-q0pFMlUWXwnVKl7CFQ_oOysa2Nf2ZlXatc8AuHgw89jaS96Yh5qvIcATRJJjtKa0LsmIBxrYj4VP8xH36DWj5J5ZR-Y29FgctydDTixF5MZ99kmmsFJRqYm-e_ufSrcBb-4tyb1XCf4LcjNuTzcMqRvS5LOsNdGhb32-2oOoOIvuODjSEMaB8fOqHbfoLTpjkTKUzAo2gc6FJDrDjHWuwBrngwSTvQOa34n6tsL6If4S-yZqBJ47Zc2OJE3bSEtOmuK60MiC2h4g15y3A2JeRV6VtMV6gjgO5tFxm_EAAtOvEhiOd0oAVunB8d3Px05dD8zvLQ5e4njWC96S65_wgM1ZR5HVXECaoCXH3O4KofPA96wAslazzBIOFTjF8J9IacyszNMHm_VxznIsswTOLRdhPtljimXP_MtJTrEOPXYAfzHYRxFbEORQMRD6kH_Vui9gIDzns9VtHy6uu-lkXDIRKYVGrF81UVvbcn2vlizE1TPbhZO3H0WjKv8iAemUmy9hUSdFV3ACkrLlFzZMViyzuHeTzMeySvtN_D_r700wluIPLUJvfCwk2HP7zUUhxltfDK86rOGzudWaCxBSZTo4KtHFjEdODrAGUSEs9nvqDpPz7CK8jl_nMB9kwiPUe9MZuAUpoPQ7UQrX7-n17R-MBcFz9tje9_a7gDup_jUojsKDneDkRsJ99rYnJsJ8XzrDIMlXZRwOivMisXRcGrNkDWsAKgMEKuU6TSosTG3ZOFaiT59TVS91r2Ox7bf2hTSGldkm1-LxsbzVfXRr7sdNQyxTJL7y-1x44YvkcwhdFhkQLEbEQKNsLPvhYiighfo55g-YACHGTyesxpTea6xkJB_4jeFu9Xykj3C1uf9N14sUI569aOULSPUZePjO6tUkFM8Lah82A4S-d2pfxMix7kiOVXjdxrB1tZIogF8TRDGlNEgzwajlDR8HrUKuEBeDAAYDdJJ554pWEAEK34Yi9hSO-q0ixEkxdMOgccRxT-l08ggBSyTOijU76g3dVxSpGCUHMj5lwmgLPrUSLvhEHXUASKoSeg9zEDaFrkI9LPyZVD0Vs5RRJTIAaLhlq9FNU_ekDI57NbiCcFmxS7P2TUAQI14LjbHeYJ7iOVs1wAIaPw1ke987aK0dq6ykVW--6W--nH5wpi-lBo-kxEfSsWn5MTaeEZC6ce9Be6YMh9vTNxkXIz_0Ki08sEutMGJXY9z4YVViu5mnEFEUVdGgK5TDbdUq-o1D3bqhXYyCxUqbecgL_MbikQxmKqXp4uUBE8WfDU-Nkhy8jrCRr8tlNYPOQqGa9PIRy1H-aeEUOZEu6q5-0nXM5QnSvBm5aWM_rwobHZVfsiEjvNnbSehYkQTTJeqiGqcorjaEgjnOtY-7ZJaIz5Ib63azOEC_lOIUKYEcwaB2pXzkdpNs5KBtgTPNnl1YsUfPLFNI7DRmLfJgxhwhyb0r4bbWuAilBo-Sje5pZXI1Nisr_sDu1t9lGNOBtDkPv-kG9f6yGzxOITF1Qgq3tg7JHq_9p4liL7-NQ215BfMvMMAtDN8cvyYD6M4g1-gPTEwLUuH1lJ7RPxEiwnYPz5GgRjEboFzkNiPKs2ZlE-Q8JngmaDfGvhecvcofKOMPtmSVxLV3plWgfxcHUyXEMqApZzgVh4mgJa3bh1fMeZVdgZq7363y6VaUdHMZz0hIxKEUvlH8vxJE3yKuvIs1515dhRdU2ZzDs1-3umdCoNhMNxuStdLIlkOg1pzqLEB4lU5MmkwfUw9Igh1QCjnysEgKQYDZ8LMsij4bRRX16w4XaVFSkoC7V8horZGtrErVdXtYDuBnPW62zdwLJXma7RpOLdBxMcr8RQg4cD0wRNtMwKWpVTbPYPkxX0T4cTi6a_g7y2gpwSijJmDbPiuE2nkj9jQsAU-zjoLIF7yQpDuIByh9P_o3fbXvgueKBYjwdjDhMhIrCMWm-ObDax9j2Ve6drLbq1CuzeI40-bdIyUvs862IdwxjhvSnoOdlmYItofSxczMURjNwZclvajRFNRgExuNzQZkqQ7GUbyhwsVWR05Hb4_sUOjzXmChjy6HqUdrtc2_SM5_jzohWcC_eyEk_HFQiNNqbi024ubicz_9UU56oUCjHO5Qpe-Bjod2o9aZu6qlDqN4unXUl-sseSahz1fk7IpgR7SMxUeAwj5WhP6FRNvZ5Ce_LGrL1-tRbVm40?></g></svg>