mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-06-01 01:54:00 +00:00
1 line
93 KiB
XML
1 line
93 KiB
XML
<?plantuml 1.2026.2?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="ACTIVITY" height="4582px" preserveAspectRatio="none" style="width:3923px;height:4582px;background:#040404;" version="1.1" viewBox="0 0 3923 4582" width="3923px" zoomAndPan="magnify"><title>The Biergarten Data Pipeline — Activity Diagram</title><defs/><g><rect fill="#040404" height="4582" style="stroke:none;stroke-width:1;" width="3923" x="0" y="0"/><g class="title" data-source-line="24"><text fill="#EAEAEA" font-family="'Volkhov'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="486.14" x="1717.1033" y="39.42">The Biergarten Data Pipeline — Activity Diagram</text></g><rect fill="none" height="16.926" style="stroke:none;stroke-width:1;" width="3890.3465" x="15" y="59.33"/><ellipse cx="161.2959" cy="91.256" fill="#151515" rx="10" ry="10" style="stroke:#DDDDDD;stroke-width:1;"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="187.59" x="67.5009" y="121.256"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="167.59" x="77.5009" y="144.152">ParseArguments(argc, argv)</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="95.4522" x="113.5698" y="228.645"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="75.4522" x="123.5698" y="251.541">spdlog::error</text><ellipse cx="161.2959" cy="303.608" fill="none" rx="11" ry="11" style="stroke:#AFAFAF;stroke-width:1;"/><ellipse cx="161.2959" cy="303.608" fill="#DDDDDD" rx="6" ry="6" style="stroke:#AFAFAF;stroke-width:1;"/><polygon fill="#333333" points="124.0443,178.182,198.5475,178.182,210.5475,190.182,198.5475,202.182,124.0443,202.182,112.0443,190.182,124.0443,178.182" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="165.2959" y="215.078">yes</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="74.5032" x="124.0443" y="194.615">Invalid args?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="210.5475" y="186.152">no</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="273.4256" x="24.5831" y="356.608"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="253.4256" x="34.5831" y="379.504">Init CurlGlobalState & LlamaBackendState</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="114.5036" x="104.0441" y="413.534"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="94.5036" x="114.0441" y="436.43">Build DI injector</text><path d="M276.2738,460.46 L276.2738,486.849 L256.2738,490.849 L276.2738,494.849 L276.2738,521.238 A0,0 0 0 0 276.2738,521.238 L473.4405,521.238 A0,0 0 0 0 473.4405,521.238 L473.4405,470.46 L463.4405,460.46 L276.2738,460.46 A0,0 0 0 0 276.2738,460.46" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M463.4405,460.46 L463.4405,470.46 L473.4405,470.46 L463.4405,460.46" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="157.3748" x="282.2738" y="478.356">Opens SQLite connection.</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="160.5016" x="282.2738" y="495.282">Begins a single transaction</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="176.1667" x="282.2738" y="512.208">covering all five fixture types.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="189.9558" x="66.318" y="472.386"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="169.9558" x="76.318" y="495.282">Initialize SqliteExportService</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="280.5918" x="21" y="541.238"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="260.5918" x="31" y="564.134">Create BoundedChannel<LogEntry> log_ch</text><path d="M269.3659,588.164 L269.3659,623.016 L249.3659,627.016 L269.3659,631.016 L269.3659,665.868 A0,0 0 0 0 269.3659,665.868 L547.6006,665.868 A0,0 0 0 0 547.6006,665.868 L547.6006,598.164 L537.6006,588.164 L269.3659,588.164 A0,0 0 0 0 269.3659,588.164" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M537.6006,588.164 L537.6006,598.164 L547.6006,598.164 L537.6006,588.164" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="195.644" x="275.3659" y="606.06">Log worker drains log_ch for the</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="137.3777" x="275.3659" y="622.986">entire pipeline lifetime.</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="199.83" x="275.3659" y="639.912">All workers emit LogEntry structs</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="257.2347" x="275.3659" y="656.838">via PipelineLogger — never spdlog directly.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="176.1401" x="73.2258" y="608.553"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="156.1401" x="83.2258" y="631.449">Spawn Log Worker thread</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="245.1019" x="38.7449" y="685.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.1019" x="48.7449" y="708.764">BiergartenPipelineOrchestrator::Run()</text><path d="M274.132,4322.714 L274.132,4332.177 L254.132,4336.177 L274.132,4340.177 L274.132,4349.64 A0,0 0 0 0 274.132,4349.64 L515.0663,4349.64 A0,0 0 0 0 515.0663,4349.64 L515.0663,4332.714 L505.0663,4322.714 L274.132,4322.714 A0,0 0 0 0 274.132,4322.714" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M505.0663,4322.714 L505.0663,4332.714 L515.0663,4332.714 L505.0663,4322.714" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.9343" x="280.132" y="4340.61">COMMIT covers all five fixture types.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="185.6723" x="68.4597" y="4317.714"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.6723" x="78.4597" y="4340.61">Finalize SqliteExportService</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="98.6565" x="111.9676" y="4374.64"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.6565" x="121.9676" y="4397.536">Close log_ch</text><path d="M239.9794,4428.103 L239.9794,4446.029 L219.9794,4450.029 L239.9794,4454.029 L239.9794,4471.9551 A0,0 0 0 0 239.9794,4471.9551 L452.2715,4471.9551 A0,0 0 0 0 452.2715,4471.9551 L452.2715,4438.103 L442.2715,4428.103 L239.9794,4428.103 A0,0 0 0 0 239.9794,4428.103" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M442.2715,4428.103 L442.2715,4438.103 L452.2715,4438.103 L442.2715,4428.103" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="191.2921" x="245.9794" y="4445.999">Drain guarantees no LogEntry is</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="133.9327" x="245.9794" y="4462.9251">dropped at shutdown.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="117.3669" x="102.6124" y="4431.566"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="97.3669" x="112.6124" y="4454.462">Join Log Worker</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="254.6731" x="33.9594" y="4491.9551"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="234.6731" x="43.9594" y="4514.8511">spdlog::info "Pipeline complete in X ms"</text><ellipse cx="161.2959" cy="4559.8811" fill="none" rx="11" ry="11" style="stroke:#AFAFAF;stroke-width:1;"/><ellipse cx="161.2959" cy="4559.8811" fill="#DDDDDD" rx="6" ry="6" style="stroke:#AFAFAF;stroke-width:1;"/><line style="stroke:#AFAFAF;stroke-width:1;" x1="15" x2="15" y1="59.33" y2="4570.8811"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="283.8713" x="612.7814" y="742.794"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="263.8713" x="622.7814" y="765.69">JsonLoader::LoadLocations("locations.json")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="304.4079" x="602.5131" y="799.72"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="284.4079" x="612.5131" y="822.616">JsonLoader::LoadBeerStyles("beer-styles.json")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="280.5595" x="614.4373" y="856.646"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="260.5595" x="624.4373" y="879.542">JsonLoader::LoadPersonas("personas.json")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="392.2328" x="558.6006" y="913.572"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="372.2328" x="568.6006" y="936.468">JsonLoader::LoadNamesByCountry("names-by-country.json")</text><path d="M961.0216,960.498 L961.0216,986.887 L941.0216,990.887 L961.0216,994.887 L961.0216,1021.276 A0,0 0 0 0 961.0216,1021.276 L1262.5425,1021.276 A0,0 0 0 0 1262.5425,1021.276 L1262.5425,970.498 L1252.5425,960.498 L961.0216,960.498 A0,0 0 0 0 961.0216,960.498" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M1252.5425,960.498 L1252.5425,970.498 L1262.5425,970.498 L1252.5425,960.498" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="248.0371" x="967.0216" y="978.394">Beer styles do not need location context.</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="280.5209" x="967.0216" y="995.32">Wikipedia summaries for the entire palette are</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="237.3089" x="967.0216" y="1012.246">fetched and cached globally at startup.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="372.6092" x="568.4124" y="972.424"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="352.6092" x="578.4124" y="995.32">EnrichmentService::PreWarmBeerStyleCache(beer_styles)</text><path d="M948.3223,1031.276 L948.3223,1057.665 L928.3223,1061.665 L948.3223,1065.665 L948.3223,1092.054 A0,0 0 0 0 948.3223,1092.054 L1278.2482,1092.054 A0,0 0 0 0 1278.2482,1092.054 L1278.2482,1041.276 L1268.2482,1031.276 L948.3223,1031.276 A0,0 0 0 0 948.3223,1031.276" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M1268.2482,1031.276 L1268.2482,1041.276 L1278.2482,1041.276 L1268.2482,1031.276" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="308.9259" x="954.3223" y="1049.172">Persona descriptions do not need location context.</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="269.9161" x="954.3223" y="1066.098">All persona lookups are resolved and cached</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="111.966" x="954.3223" y="1083.024">globally at startup.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="347.2105" x="581.1118" y="1043.202"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="327.2105" x="591.1118" y="1066.098">EnrichmentService::PreWarmPersonaCache(personas)</text><line style="stroke:#AFAFAF;stroke-width:1;" x1="552.6006" x2="552.6006" y1="59.33" y2="4570.8811"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="230.9414" x="1890.9953" y="1112.054"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="210.9414" x="1900.9953" y="1134.95">RunUserPhase(sampled_locations)</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="174.2744" x="1919.3289" y="1168.98"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="1929.3289" y="1191.876">Create BoundedChannels</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.1945" x="1929.3289" y="1208.802">(loc_ch, llm_ch, exp_ch)</text><rect fill="#AAAAAA" height="6" rx="2.5" ry="2.5" style="stroke:#AAAAAA;stroke-width:1;" width="1027.2192" x="1392.5341" y="1242.832"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="208.0387" x="1406.5341" y="1522.747"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="188.0387" x="1416.5341" y="1545.643">Loop: Send Locations → loc_ch</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="98.8385" x="1461.1341" y="1594.673"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.8385" x="1471.1341" y="1617.569">Close loc_ch</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="213.3655" x="1899.7833" y="1923.488"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="1909.7833" y="1946.384">Join LLM Worker, SQLite Worker</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="304.7296" x="1854.1013" y="1980.414"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="284.7296" x="1864.1013" y="2003.31">RunBreweryAndBeerPhase(sampled_locations)</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="174.2744" x="1919.3289" y="2037.34"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="1929.3289" y="2060.236">Create BoundedChannels</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.1945" x="1929.3289" y="2077.162">(loc_ch, llm_ch, exp_ch)</text><rect fill="#AAAAAA" height="6" rx="2.5" ry="2.5" style="stroke:#AAAAAA;stroke-width:1;" width="1142.505" x="1289.2482" y="2111.192"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="208.0387" x="1301.2482" y="2507.107"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="188.0387" x="1311.2482" y="2530.003">Loop: Send Locations → loc_ch</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="98.8385" x="1355.8483" y="2579.033"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.8385" x="1365.8483" y="2601.929">Close loc_ch</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="171.2325" x="1575.1677" y="2720.811"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="151.2325" x="1585.1677" y="2743.707">Join Enrichment Workers</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="98.1755" x="1611.6962" y="2792.737"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.1755" x="1621.6962" y="2815.633">Close llm_ch</text><path d="M2133.1488,3024.478 L2133.1488,3042.404 L2113.1488,3046.404 L2133.1488,3050.404 L2133.1488,3068.33 A0,0 0 0 0 2133.1488,3068.33 L2379.9881,3068.33 A0,0 0 0 0 2379.9881,3068.33 L2379.9881,3034.478 L2369.9881,3024.478 L2133.1488,3024.478 A0,0 0 0 0 2133.1488,3024.478" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M2369.9881,3024.478 L2369.9881,3034.478 L2379.9881,3034.478 L2369.9881,3024.478" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.8393" x="2139.1488" y="3042.374">Both brewery_pool_ and beer_pool_</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="187.1287" x="2139.1488" y="3059.3">are now completely populated.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="213.3655" x="1899.7833" y="3027.941"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="1909.7833" y="3050.837">Join LLM Worker, SQLite Worker</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="137.0586" x="1937.9367" y="3088.33"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="117.0586" x="1947.9367" y="3111.226">RunCheckinPhase()</text><path d="M2143.9616,3141.793 L2143.9616,3168.182 L2123.9616,3172.182 L2143.9616,3176.182 L2143.9616,3202.571 A0,0 0 0 0 2143.9616,3202.571 L2407.7532,3202.571 A0,0 0 0 0 2407.7532,3202.571 L2407.7532,3151.793 L2397.7532,3141.793 L2143.9616,3141.793 A0,0 0 0 0 2143.9616,3141.793" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M2397.7532,3141.793 L2397.7532,3151.793 L2407.7532,3151.793 L2397.7532,3141.793" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="200.899" x="2149.9616" y="3159.689">Weights seeded from each user's</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="242.7917" x="2149.9616" y="3176.615">persona.checkin_weight. J-curve profile</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="212.6934" x="2149.9616" y="3193.541">emerges from persona distribution.</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="234.991" x="1888.9706" y="3145.256"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="179.0656" x="1898.9706" y="3168.152">ICheckinDistributionStrategy::</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="214.991" x="1898.9706" y="3185.078">AssignActivityWeights(user_pool_)</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="292.2334" x="1860.3494" y="3280.967"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="272.2334" x="1870.3494" y="3303.863">CheckinsForUser(user, brewery_pool_.size())</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="181.5219" x="1915.7051" y="3396.289"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="161.5219" x="1925.7051" y="3419.185">TimestampFor(user, index)</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="239.6223" x="1886.6549" y="3453.215"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.6223" x="1896.6549" y="3476.111">Select brewery from brewery_pool_</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="287.9727" x="1862.4797" y="3510.141"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="267.9727" x="1872.4797" y="3533.037">GenerateCheckin(user, brewery, timestamp)</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1872.4797" y="3549.963">via DataGenerator</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="271.4235" x="1870.7543" y="3591.03"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="251.4235" x="1880.7543" y="3613.926">ProcessCheckin(checkin) → sqlite3_int64</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="287.0855" x="1862.9233" y="3647.956"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="267.0855" x="1872.9233" y="3670.852">PipelineLogger::Log(Info, CheckinGeneration,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.565" x="1879.8393" y="3687.778">nullopt, checkin_id, "sqlite")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="175.4539" x="1918.7391" y="3721.808"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="155.4539" x="1928.7391" y="3744.704">Append → checkin_pool_</text><polygon fill="#333333" points="1933.7537,3337.893,2079.1784,3337.893,2091.1784,3349.893,2079.1784,3361.893,1933.7537,3361.893,1921.7537,3349.893,1933.7537,3337.893" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2010.4661" y="3374.789">remaining</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.4247" x="1933.7537" y="3354.326">For each checkin index?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1891.0477" y="3345.863">done</text><polygon fill="#333333" points="1885.6147,3222.571,2127.3174,3222.571,2139.3174,3234.571,2127.3174,3246.571,1885.6147,3246.571,1873.6147,3234.571,1885.6147,3222.571" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2010.4661" y="3259.467">remaining</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="241.7028" x="1885.6147" y="3239.004">For each GeneratedUser in user_pool_?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1842.9087" y="3230.541">done</text><path d="M2089.4834,3812.734 L2089.4834,3839.123 L2069.4834,3843.123 L2089.4834,3847.123 L2089.4834,3873.512 A0,0 0 0 0 2089.4834,3873.512 L2377.1691,3873.512 A0,0 0 0 0 2377.1691,3873.512 L2377.1691,3822.734 L2367.1691,3812.734 L2089.4834,3812.734 A0,0 0 0 0 2089.4834,3812.734" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M2367.1691,3812.734 L2367.1691,3822.734 L2377.1691,3822.734 L2367.1691,3812.734" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.5804" x="2095.4834" y="3830.63">Beer selection biased by</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="266.6857" x="2095.4834" y="3847.556">user.persona.style_affinities and abv_range.</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.4598" x="2095.4834" y="3864.482">Rating skew modulated per persona.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="126.0347" x="1943.4487" y="3824.66"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="106.0347" x="1953.4487" y="3847.556">RunRatingPhase()</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="322.7572" x="1845.0875" y="3951.908"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="302.7572" x="1855.0875" y="3974.804">Match brewery_id → select beer from beer_pool_</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="288.0478" x="1855.0875" y="3991.73">(same brewery_id, biased by persona affinities)</text><polygon fill="#333333" points="1933.3067,4025.76,2079.6254,4025.76,2091.6254,4037.76,2079.6254,4049.76,1933.3067,4049.76,1921.3067,4037.76,1933.3067,4025.76" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="146.3186" x="1933.3067" y="4042.193">Beer exists for brewery?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="1900.159" y="4033.73">yes</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2091.6254" y="4033.73">no</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="256.0901" x="1728.0665" y="4059.76"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="236.0901" x="1738.0665" y="4082.656">GenerateRating(user, beer, checkin_id)</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1738.0665" y="4099.582">via DataGenerator</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="150.1336" x="1781.0447" y="4134.936"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="130.1336" x="1791.0447" y="4157.832">ProcessRating(rating)</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="276.0616" x="1718.0807" y="4191.862"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="256.0616" x="1728.0807" y="4214.758">PipelineLogger::Log(Info, RatingGeneration,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="153.5141" x="1734.9967" y="4231.684">nullopt, rating_id, "sqlite")</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="285.3566" x="2014.1423" y="4059.76"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="265.3566" x="2024.1423" y="4082.656">PipelineLogger::Log(Warn, RatingGeneration,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="168.3958" x="2031.0583" y="4099.582">nullopt, brewery_id, "sqlite")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="194.1645" x="2059.7383" y="4134.936"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="174.1645" x="2069.7383" y="4157.832">Skip — brewery has no beers</text><polygon fill="#333333" points="2006.4661,4251.714,2018.4661,4263.714,2006.4661,4275.714,1994.4661,4263.714,2006.4661,4251.714" style="stroke:#AFAFAF;stroke-width:0.5;"/><polygon fill="#333333" points="1864.5336,3893.512,2148.3985,3893.512,2160.3985,3905.512,2148.3985,3917.512,1864.5336,3917.512,1852.5336,3905.512,1864.5336,3893.512" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2010.4661" y="3930.408">remaining</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="283.865" x="1864.5336" y="3909.945">For each GeneratedCheckin in checkin_pool_?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1821.8276" y="3901.482">done</text><line style="stroke:#AFAFAF;stroke-width:1;" x1="1283.2482" x2="1283.2482" y1="59.33" y2="4570.8811"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="123.1779" x="2563.4067" y="1327.228"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="103.1779" x="2573.4067" y="1350.124">Receive Location</text><path d="M2782.6852,1374.154 L2782.6852,1409.006 L2762.6852,1413.006 L2782.6852,1417.006 L2782.6852,1451.858 A0,0 0 0 0 2782.6852,1451.858 L3017.0221,1451.858 A0,0 0 0 0 3017.0221,1451.858 L3017.0221,1384.154 L3007.0221,1374.154 L2782.6852,1374.154 A0,0 0 0 0 2782.6852,1374.154" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M3007.0221,1374.154 L3007.0221,1384.154 L3017.0221,1384.154 L3007.0221,1374.154" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="2788.6852" y="1392.05">Guaranteed cache hit from startup.</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="201.4453" x="2788.6852" y="1408.976">Returns a Persona struct carrying</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="162.2598" x="2788.6852" y="1425.902">style_affinities, abv_range,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="197.9643" x="2788.6852" y="1442.828">ibu_preference, checkin_weight.</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="275.379" x="2487.3061" y="1386.08"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="255.379" x="2497.3061" y="1408.976">IPersonaSelectionStrategy::SelectPersona(</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="120.7278" x="2504.2221" y="1425.902">personas_palette_)</text><path d="M2752.7134,1486.858 L2752.7134,1513.247 L2732.7134,1517.247 L2752.7134,1521.247 L2752.7134,1547.636 A0,0 0 0 0 2752.7134,1547.636 L3016.6674,1547.636 A0,0 0 0 0 3016.6674,1547.636 L3016.6674,1496.858 L3006.6674,1486.858 L2752.7134,1486.858 A0,0 0 0 0 2752.7134,1486.858" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M3006.6674,1486.858 L3006.6674,1496.858 L3016.6674,1496.858 L3006.6674,1486.858" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="242.954" x="2758.7134" y="1504.754">Deterministic lookup — no LLM involved.</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="224.3249" x="2758.7134" y="1521.68">Name selected from pre-keyed table</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="239.9088" x="2758.7134" y="1538.606">and passed into the generation prompt.</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="215.4356" x="2517.2778" y="1490.321"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="195.4356" x="2527.2778" y="1513.217">NamesByCountry::SampleName(</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9809" x="2534.1938" y="1530.143">location.iso3166_1)</text><path d="M2803.238,1582.636 L2803.238,1617.488 L2783.238,1621.488 L2803.238,1625.488 L2803.238,1660.34 A0,0 0 0 0 2803.238,1660.34 L3064.9853,1660.34 A0,0 0 0 0 3064.9853,1660.34 L3064.9853,1592.636 L3054.9853,1582.636 L2803.238,1582.636 A0,0 0 0 0 2803.238,1582.636" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M3054.9853,1582.636 L3054.9853,1592.636 L3064.9853,1592.636 L3054.9853,1582.636" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="236.6329" x="2809.238" y="1600.532">LLM receives: Location fields + persona</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="240.7473" x="2809.238" y="1617.458">description + sampled name. Generates</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="221.3189" x="2809.238" y="1634.384">bio and preference signals grounded</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="130.7184" x="2809.238" y="1651.31">in locale and persona.</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="316.4848" x="2466.7532" y="1594.562"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="296.4848" x="2476.7532" y="1617.458">GenerateUser(location, persona, sampled_name)</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="2476.7532" y="1634.384">via DataGenerator</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="265.5933" x="2492.199" y="1680.525"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="245.5933" x="2502.199" y="1703.421">PipelineLogger::Log(Info, UserGeneration,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.3182" x="2509.115" y="1720.347">city, user_id, "llm")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="203.7583" x="2523.1165" y="1761.636"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="183.7583" x="2533.1165" y="1784.532">Send GeneratedUser → llm_ch</text><polygon fill="#333333" points="2569.9812,1268.832,2680.0101,1268.832,2692.0101,1280.832,2680.0101,1292.832,2569.9812,1292.832,2557.9812,1280.832,2569.9812,1268.832" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2628.9956" y="1305.728">yes</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.0289" x="2569.9812" y="1285.265">loc_ch has items?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2542.8134" y="1276.802">no</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="98.1755" x="2575.9079" y="1840.562"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.1755" x="2585.9079" y="1863.458">Close llm_ch</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="148.6644" x="2709.287" y="2195.588"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.6644" x="2719.287" y="2218.484">Receive EnrichedCity</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="236.4472" x="2665.3956" y="2267.514"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="216.4472" x="2675.3956" y="2290.41">GenerateBrewery(location, context)</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="2675.3956" y="2307.336">via DataGenerator</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="242.4597" x="2662.3893" y="2356.366"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="222.4597" x="2672.3893" y="2379.262">IBeerSelectionStrategy::SelectStyles(</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="186.0366" x="2679.3053" y="2396.188">brewery, beer_style_palette_)</text><path d="M2918.4074,2508.607 L2918.4074,2518.07 L2898.4074,2522.07 L2918.4074,2526.07 L2918.4074,2535.533 A0,0 0 0 0 2918.4074,2535.533 L3152.7443,2535.533 A0,0 0 0 0 3152.7443,2535.533 L3152.7443,2518.607 L3142.7443,2508.607 L2918.4074,2508.607 A0,0 0 0 0 2918.4074,2508.607" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><path d="M3142.7443,2508.607 L3142.7443,2518.607 L3152.7443,2518.607 L3142.7443,2508.607" fill="#191919" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="2924.4074" y="2526.503">Guaranteed cache hit from startup.</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="229.5765" x="2668.8309" y="2503.607"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="209.5765" x="2678.8309" y="2526.503">GetStyleContextFromCache(style)</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="253.4023" x="2656.918" y="2575.533"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="233.4023" x="2666.918" y="2598.429">GenerateBeer(brewery, style_context)</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="2666.918" y="2615.355">via DataGenerator</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="270.3154" x="2648.4615" y="2664.385"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="250.3154" x="2658.4615" y="2687.281">Attach GeneratedBeer to Brewery bundle</text><polygon fill="#333333" points="2695.6903,2438.681,2871.548,2438.681,2883.548,2450.681,2871.548,2462.681,2695.6903,2462.681,2683.6903,2450.681,2695.6903,2438.681" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2787.6192" y="2475.577">remaining</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="175.8578" x="2695.6903" y="2455.114">For each selected BeerStyle?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="2652.9843" y="2446.651">done</text><rect fill="#151515" height="70.778" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.6583" x="2684.79" y="2760.311"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="2694.79" y="2783.207">PipelineLogger::Log(Info,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="170.7423" x="2701.706" y="2800.133">BreweryAndBeerGeneration,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="133.819" x="2701.706" y="2817.059">city, brewery_id, "llm")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="272.7332" x="2647.2526" y="2866.089"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="252.7332" x="2657.2526" y="2888.985">Send BreweryWithBeers Bundle → exp_ch</text><polygon fill="#333333" points="2728.9362,2137.192,2838.3021,2137.192,2850.3021,2149.192,2838.3021,2161.192,2728.9362,2161.192,2716.9362,2149.192,2728.9362,2137.192" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2787.6192" y="2174.088">yes</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="109.3658" x="2728.9362" y="2153.625">llm_ch has items?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2701.7685" y="2145.162">no</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="102.7775" x="2732.2304" y="2945.015"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="82.7775" x="2742.2304" y="2967.911">Close exp_ch</text><line style="stroke:#AFAFAF;stroke-width:1;" x1="2435.7532" x2="2435.7532" y1="59.33" y2="4570.8811"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="162.5842" x="3293.2489" y="1462.821"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="142.5842" x="3303.2489" y="1485.717">Receive GeneratedUser</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="229.2612" x="3259.9104" y="1534.747"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="209.2612" x="3269.9104" y="1557.643">ProcessUser(user) → sqlite3_int64</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="265.5933" x="3241.7443" y="1606.673"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="245.5933" x="3251.7443" y="1629.569">PipelineLogger::Log(Info, UserGeneration,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="126.11" x="3258.6604" y="1646.495">city, user_id, "sqlite")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="154.784" x="3297.149" y="1680.71"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="134.784" x="3307.149" y="1703.606">Append → user_pool_</text><polygon fill="#333333" points="3319.8581,1397.895,3429.2239,1397.895,3441.2239,1409.895,3429.2239,1421.895,3319.8581,1421.895,3307.8581,1409.895,3319.8581,1397.895" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3378.541" y="1434.791">yes</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="109.3658" x="3319.8581" y="1414.328">llm_ch has items?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3292.6903" y="1405.865">no</text><rect fill="#AAAAAA" height="6" rx="2.5" ry="2.5" style="stroke:#AAAAAA;stroke-width:1;" width="319.5933" x="3213.7443" y="1897.488"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="226.957" x="3367.5184" y="2292.903"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="206.957" x="3377.5184" y="2315.799">Receive BreweryWithBeers Bundle</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="263.2532" x="3349.3703" y="2364.829"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="243.2532" x="3359.3703" y="2387.725">ProcessBrewery(brewery) → brewery_id</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="178.2848" x="3391.8545" y="2430.218"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="158.2848" x="3401.8545" y="2453.114">Append → brewery_pool_</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="226.8952" x="3367.5493" y="2567.07"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="206.8952" x="3377.5493" y="2589.966">Set beer.brewery_id = brewery_id</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="230.9869" x="3365.5034" y="2638.996"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="210.9869" x="3375.5034" y="2661.892">ProcessBeer(beer) → sqlite3_int64</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="156.3342" x="3402.8298" y="2710.922"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="136.3342" x="3412.8298" y="2733.818">Append → beer_pool_</text><polygon fill="#333333" points="3406.3654,2502.144,3555.6284,2502.144,3567.6284,2514.144,3555.6284,2526.144,3406.3654,2526.144,3394.3654,2514.144,3406.3654,2502.144" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="3484.9969" y="2539.04">remaining</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.263" x="3406.3654" y="2518.577">For each beer in bundle?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="3363.6594" y="2510.114">done</text><rect fill="#151515" height="70.778" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.6583" x="3382.1677" y="2806.848"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="3392.1677" y="2829.744">PipelineLogger::Log(Info,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="170.7423" x="3399.0837" y="2846.67">BreweryAndBeerGeneration,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.6108" x="3399.0837" y="2863.596">city, brewery_id, "sqlite")</text><polygon fill="#333333" points="3424.013,2227.977,3537.9808,2227.977,3549.9808,2239.977,3537.9808,2251.977,3424.013,2251.977,3412.013,2239.977,3424.013,2227.977" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3484.9969" y="2264.873">yes</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9678" x="3424.013" y="2244.41">exp_ch has items?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3396.8452" y="2235.947">no</text><rect fill="#AAAAAA" height="6" rx="2.5" ry="2.5" style="stroke:#AAAAAA;stroke-width:1;" width="436.8791" x="3201.7443" y="3001.941"/><line style="stroke:#AFAFAF;stroke-width:1;" x1="3195.7443" x2="3195.7443" y1="59.33" y2="4570.8811"/><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="123.1779" x="3712.5315" y="2364.866"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="103.1779" x="3722.5315" y="2387.762">Receive Location</text><rect fill="#151515" height="53.852" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="198.9941" x="3674.6235" y="2430.255"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="178.9941" x="3684.6235" y="2453.151">GetLocationContext(location,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2064" x="3684.6235" y="2470.077">BreweryContextStrategy)</text><rect fill="#151515" height="70.778" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.6583" x="3675.2913" y="2519.107"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="3685.2913" y="2542.003">PipelineLogger::Log(Info,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="170.7423" x="3692.2073" y="2558.929">BreweryAndBeerGeneration,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="157.7521" x="3692.2073" y="2575.855">city, nullopt, "enrichment")</text><rect fill="#151515" height="36.926" rx="12.5" ry="12.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="189.8386" x="3679.2012" y="2624.885"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="169.8386" x="3689.2012" y="2647.781">Send EnrichedCity → llm_ch</text><polygon fill="#333333" points="3719.1061,2299.94,3829.1349,2299.94,3841.1349,2311.94,3829.1349,2323.94,3719.1061,2323.94,3707.1061,2311.94,3719.1061,2299.94" style="stroke:#AFAFAF;stroke-width:0.5;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3778.1205" y="2336.836">yes</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.0289" x="3719.1061" y="2316.373">loc_ch has items?</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3691.9383" y="2307.91">no</text><line style="stroke:#AFAFAF;stroke-width:1;" x1="3643.6235" x2="3643.6235" y1="59.33" y2="4570.8811"/><line style="stroke:#AFAFAF;stroke-width:1;" x1="3904.6175" x2="3904.6175" y1="59.33" y2="4570.8811"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="101.256" y2="121.256"/><polygon fill="#9A9A9A" points="157.2959,111.256,161.2959,121.256,165.2959,111.256,161.2959,115.256" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="265.571" y2="292.608"/><polygon fill="#9A9A9A" points="157.2959,282.608,161.2959,292.608,165.2959,282.608,161.2959,286.608" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="202.182" y2="228.645"/><polygon fill="#9A9A9A" points="157.2959,218.645,161.2959,228.645,165.2959,218.645,161.2959,222.645" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="210.5475" x2="222.5475" y1="190.182" y2="190.182"/><polygon fill="#9A9A9A" points="218.5475,262.608,222.5475,272.608,226.5475,262.608,222.5475,266.608" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="222.5475" x2="222.5475" y1="190.182" y2="336.608"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="222.5475" x2="161.2959" y1="336.608" y2="336.608"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="336.608" y2="356.608"/><polygon fill="#9A9A9A" points="157.2959,346.608,161.2959,356.608,165.2959,346.608,161.2959,350.608" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="158.182" y2="178.182"/><polygon fill="#9A9A9A" points="157.2959,168.182,161.2959,178.182,165.2959,168.182,161.2959,172.182" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="393.534" y2="413.534"/><polygon fill="#9A9A9A" points="157.2959,403.534,161.2959,413.534,165.2959,403.534,161.2959,407.534" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="450.46" y2="472.386"/><polygon fill="#9A9A9A" points="157.2959,462.386,161.2959,472.386,165.2959,462.386,161.2959,466.386" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="509.312" y2="541.238"/><polygon fill="#9A9A9A" points="157.2959,531.238,161.2959,541.238,165.2959,531.238,161.2959,535.238" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="578.164" y2="608.553"/><polygon fill="#9A9A9A" points="157.2959,598.553,161.2959,608.553,165.2959,598.553,161.2959,602.553" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="645.479" y2="685.868"/><polygon fill="#9A9A9A" points="157.2959,675.868,161.2959,685.868,165.2959,675.868,161.2959,679.868" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="4354.64" y2="4374.64"/><polygon fill="#9A9A9A" points="157.2959,4364.64,161.2959,4374.64,165.2959,4364.64,161.2959,4368.64" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="4411.566" y2="4431.566"/><polygon fill="#9A9A9A" points="157.2959,4421.566,161.2959,4431.566,165.2959,4421.566,161.2959,4425.566" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="4468.4921" y2="4491.9551"/><polygon fill="#9A9A9A" points="157.2959,4481.9551,161.2959,4491.9551,165.2959,4481.9551,161.2959,4485.9551" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="4528.8811" y2="4548.8811"/><polygon fill="#9A9A9A" points="157.2959,4538.8811,161.2959,4548.8811,165.2959,4538.8811,161.2959,4542.8811" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="754.717" x2="754.717" y1="779.72" y2="799.72"/><polygon fill="#9A9A9A" points="750.717,789.72,754.717,799.72,758.717,789.72,754.717,793.72" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="754.717" x2="754.717" y1="836.646" y2="856.646"/><polygon fill="#9A9A9A" points="750.717,846.646,754.717,856.646,758.717,846.646,754.717,850.646" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="754.717" x2="754.717" y1="893.572" y2="913.572"/><polygon fill="#9A9A9A" points="750.717,903.572,754.717,913.572,758.717,903.572,754.717,907.572" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="754.717" x2="754.717" y1="950.498" y2="972.424"/><polygon fill="#9A9A9A" points="750.717,962.424,754.717,972.424,758.717,962.424,754.717,966.424" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="754.717" x2="754.717" y1="1009.35" y2="1043.202"/><polygon fill="#9A9A9A" points="750.717,1033.202,754.717,1043.202,758.717,1033.202,754.717,1037.202" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="1148.98" y2="1168.98"/><polygon fill="#9A9A9A" points="2002.4661,1158.98,2006.4661,1168.98,2010.4661,1158.98,2006.4661,1162.98" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1510.5534" x2="1510.5534" y1="1559.673" y2="1594.673"/><polygon fill="#9A9A9A" points="1506.5534,1584.673,1510.5534,1594.673,1514.5534,1584.673,1510.5534,1588.673" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1510.5534" x2="1510.5534" y1="1248.832" y2="1522.747"/><polygon fill="#9A9A9A" points="1506.5534,1512.747,1510.5534,1522.747,1514.5534,1512.747,1510.5534,1516.747" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="1222.832" y2="1242.832"/><polygon fill="#9A9A9A" points="2002.4661,1232.832,2006.4661,1242.832,2010.4661,1232.832,2006.4661,1236.832" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="1960.414" y2="1980.414"/><polygon fill="#9A9A9A" points="2002.4661,1970.414,2006.4661,1980.414,2010.4661,1970.414,2006.4661,1974.414" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="2017.34" y2="2037.34"/><polygon fill="#9A9A9A" points="2002.4661,2027.34,2006.4661,2037.34,2010.4661,2027.34,2006.4661,2031.34" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1405.2675" x2="1405.2675" y1="2544.033" y2="2579.033"/><polygon fill="#9A9A9A" points="1401.2675,2569.033,1405.2675,2579.033,1409.2675,2569.033,1405.2675,2573.033" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1660.7839" x2="1660.7839" y1="2757.737" y2="2792.737"/><polygon fill="#9A9A9A" points="1656.7839,2782.737,1660.7839,2792.737,1664.7839,2782.737,1660.7839,2786.737" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1405.2675" x2="1405.2675" y1="2117.192" y2="2507.107"/><polygon fill="#9A9A9A" points="1401.2675,2497.107,1405.2675,2507.107,1409.2675,2497.107,1405.2675,2501.107" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="2091.192" y2="2111.192"/><polygon fill="#9A9A9A" points="2002.4661,2101.192,2006.4661,2111.192,2010.4661,2101.192,2006.4661,2105.192" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3064.867" y2="3088.33"/><polygon fill="#9A9A9A" points="2002.4661,3078.33,2006.4661,3088.33,2010.4661,3078.33,2006.4661,3082.33" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3125.256" y2="3145.256"/><polygon fill="#9A9A9A" points="2002.4661,3135.256,2006.4661,3145.256,2010.4661,3135.256,2006.4661,3139.256" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3433.215" y2="3453.215"/><polygon fill="#9A9A9A" points="2002.4661,3443.215,2006.4661,3453.215,2010.4661,3443.215,2006.4661,3447.215" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3490.141" y2="3510.141"/><polygon fill="#9A9A9A" points="2002.4661,3500.141,2006.4661,3510.141,2010.4661,3500.141,2006.4661,3504.141" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3563.993" y2="3591.03"/><polygon fill="#9A9A9A" points="2002.4661,3581.03,2006.4661,3591.03,2010.4661,3581.03,2006.4661,3585.03" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3627.956" y2="3647.956"/><polygon fill="#9A9A9A" points="2002.4661,3637.956,2006.4661,3647.956,2010.4661,3637.956,2006.4661,3641.956" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3701.808" y2="3721.808"/><polygon fill="#9A9A9A" points="2002.4661,3711.808,2006.4661,3721.808,2010.4661,3711.808,2006.4661,3715.808" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3361.893" y2="3396.289"/><polygon fill="#9A9A9A" points="2002.4661,3386.289,2006.4661,3396.289,2010.4661,3386.289,2006.4661,3390.289" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3758.734" y2="3768.734"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2162.4524" y1="3768.734" y2="3768.734"/><polygon fill="#9A9A9A" points="2158.4524,3571.03,2162.4524,3561.03,2166.4524,3571.03,2162.4524,3567.03" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2162.4524" x2="2162.4524" y1="3349.893" y2="3768.734"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2162.4524" x2="2091.1784" y1="3349.893" y2="3349.893"/><polygon fill="#9A9A9A" points="2101.1784,3345.893,2091.1784,3349.893,2101.1784,3353.893,2097.1784,3349.893" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1921.7537" x2="1850.4797" y1="3349.893" y2="3349.893"/><polygon fill="#9A9A9A" points="1846.4797,3557.03,1850.4797,3567.03,1854.4797,3557.03,1850.4797,3561.03" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1850.4797" x2="1850.4797" y1="3349.893" y2="3780.734"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1850.4797" x2="2174.4524" y1="3780.734" y2="3780.734"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2174.4524" x2="2174.4524" y1="3234.571" y2="3780.734"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2174.4524" x2="2139.3174" y1="3234.571" y2="3234.571"/><polygon fill="#9A9A9A" points="2149.3174,3230.571,2139.3174,3234.571,2149.3174,3238.571,2145.3174,3234.571" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3317.893" y2="3337.893"/><polygon fill="#9A9A9A" points="2002.4661,3327.893,2006.4661,3337.893,2010.4661,3327.893,2006.4661,3331.893" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3246.571" y2="3280.967"/><polygon fill="#9A9A9A" points="2002.4661,3270.967,2006.4661,3280.967,2010.4661,3270.967,2006.4661,3274.967" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1873.6147" x2="1826.4797" y1="3234.571" y2="3234.571"/><polygon fill="#9A9A9A" points="1822.4797,3500.604,1826.4797,3510.604,1830.4797,3500.604,1826.4797,3504.604" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1826.4797" x2="1826.4797" y1="3234.571" y2="3802.734"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1826.4797" x2="2006.4661" y1="3802.734" y2="3802.734"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3802.734" y2="3824.66"/><polygon fill="#9A9A9A" points="2002.4661,3814.66,2006.4661,3824.66,2010.4661,3814.66,2006.4661,3818.66" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3199.108" y2="3222.571"/><polygon fill="#9A9A9A" points="2002.4661,3212.571,2006.4661,3222.571,2010.4661,3212.571,2006.4661,3216.571" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1856.1115" x2="1856.1115" y1="4113.612" y2="4134.936"/><polygon fill="#9A9A9A" points="1852.1115,4124.936,1856.1115,4134.936,1860.1115,4124.936,1856.1115,4128.936" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1856.1115" x2="1856.1115" y1="4171.862" y2="4191.862"/><polygon fill="#9A9A9A" points="1852.1115,4181.862,1856.1115,4191.862,1860.1115,4181.862,1856.1115,4185.862" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2156.8206" x2="2156.8206" y1="4113.612" y2="4134.936"/><polygon fill="#9A9A9A" points="2152.8206,4124.936,2156.8206,4134.936,2160.8206,4124.936,2156.8206,4128.936" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1921.3067" x2="1856.1115" y1="4037.76" y2="4037.76"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1856.1115" x2="1856.1115" y1="4037.76" y2="4059.76"/><polygon fill="#9A9A9A" points="1852.1115,4049.76,1856.1115,4059.76,1860.1115,4049.76,1856.1115,4053.76" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2091.6254" x2="2156.8206" y1="4037.76" y2="4037.76"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2156.8206" x2="2156.8206" y1="4037.76" y2="4059.76"/><polygon fill="#9A9A9A" points="2152.8206,4049.76,2156.8206,4059.76,2160.8206,4049.76,2156.8206,4053.76" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1856.1115" x2="1856.1115" y1="4245.714" y2="4263.714"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1856.1115" x2="1994.4661" y1="4263.714" y2="4263.714"/><polygon fill="#9A9A9A" points="1984.4661,4259.714,1994.4661,4263.714,1984.4661,4267.714,1988.4661,4263.714" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2156.8206" x2="2156.8206" y1="4171.862" y2="4263.714"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2156.8206" x2="2018.4661" y1="4263.714" y2="4263.714"/><polygon fill="#9A9A9A" points="2028.4661,4259.714,2018.4661,4263.714,2028.4661,4267.714,2024.4661,4263.714" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="4005.76" y2="4025.76"/><polygon fill="#9A9A9A" points="2002.4661,4015.76,2006.4661,4025.76,2010.4661,4015.76,2006.4661,4019.76" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3917.512" y2="3951.908"/><polygon fill="#9A9A9A" points="2002.4661,3941.908,2006.4661,3951.908,2010.4661,3941.908,2006.4661,3945.908" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="4275.714" y2="4285.714"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2321.4989" y1="4285.714" y2="4285.714"/><polygon fill="#9A9A9A" points="2317.4989,4110.186,2321.4989,4100.186,2325.4989,4110.186,2321.4989,4106.186" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2321.4989" x2="2321.4989" y1="3905.512" y2="4285.714"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2321.4989" x2="2160.3985" y1="3905.512" y2="3905.512"/><polygon fill="#9A9A9A" points="2170.3985,3901.512,2160.3985,3905.512,2170.3985,3909.512,2166.3985,3905.512" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1852.5336" x2="1696.0807" y1="3905.512" y2="3905.512"/><polygon fill="#9A9A9A" points="1692.0807,4104.936,1696.0807,4114.936,1700.0807,4104.936,1696.0807,4108.936" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1696.0807" x2="1696.0807" y1="3905.512" y2="4302.714"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1696.0807" x2="161.2959" y1="4302.714" y2="4302.714"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="4302.714" y2="4317.714"/><polygon fill="#9A9A9A" points="157.2959,4307.714,161.2959,4317.714,165.2959,4307.714,161.2959,4311.714" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3861.586" y2="3893.512"/><polygon fill="#9A9A9A" points="2002.4661,3883.512,2006.4661,3893.512,2010.4661,3883.512,2006.4661,3887.512" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1364.154" y2="1386.08"/><polygon fill="#9A9A9A" points="2620.9956,1376.08,2624.9956,1386.08,2628.9956,1376.08,2624.9956,1380.08" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1439.932" y2="1490.321"/><polygon fill="#9A9A9A" points="2620.9956,1480.321,2624.9956,1490.321,2628.9956,1480.321,2624.9956,1484.321" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1544.173" y2="1594.562"/><polygon fill="#9A9A9A" points="2620.9956,1584.562,2624.9956,1594.562,2628.9956,1584.562,2624.9956,1588.562" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1648.414" y2="1680.525"/><polygon fill="#9A9A9A" points="2620.9956,1670.525,2624.9956,1680.525,2628.9956,1670.525,2624.9956,1674.525" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1734.377" y2="1761.636"/><polygon fill="#9A9A9A" points="2620.9956,1751.636,2624.9956,1761.636,2628.9956,1751.636,2624.9956,1755.636" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1292.832" y2="1327.228"/><polygon fill="#9A9A9A" points="2620.9956,1317.228,2624.9956,1327.228,2628.9956,1317.228,2624.9956,1321.228" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1798.562" y2="1808.562"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="3076.9853" y1="1808.562" y2="1808.562"/><polygon fill="#9A9A9A" points="3072.9853,1551.21,3076.9853,1541.21,3080.9853,1551.21,3076.9853,1547.21" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3076.9853" x2="3076.9853" y1="1280.832" y2="1808.562"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3076.9853" x2="2692.0101" y1="1280.832" y2="1280.832"/><polygon fill="#9A9A9A" points="2702.0101,1276.832,2692.0101,1280.832,2702.0101,1284.832,2698.0101,1280.832" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2557.9812" x2="2454.7532" y1="1280.832" y2="1280.832"/><polygon fill="#9A9A9A" points="2450.7532,1537.21,2454.7532,1547.21,2458.7532,1537.21,2454.7532,1541.21" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2454.7532" x2="2454.7532" y1="1280.832" y2="1820.562"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2454.7532" x2="2624.9956" y1="1820.562" y2="1820.562"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1820.562" y2="1840.562"/><polygon fill="#9A9A9A" points="2620.9956,1830.562,2624.9956,1840.562,2628.9956,1830.562,2624.9956,1834.562" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2232.514" y2="2267.514"/><polygon fill="#9A9A9A" points="2779.6192,2257.514,2783.6192,2267.514,2787.6192,2257.514,2783.6192,2261.514" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2321.366" y2="2356.366"/><polygon fill="#9A9A9A" points="2779.6192,2346.366,2783.6192,2356.366,2787.6192,2346.366,2783.6192,2350.366" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2540.533" y2="2575.533"/><polygon fill="#9A9A9A" points="2779.6192,2565.533,2783.6192,2575.533,2787.6192,2565.533,2783.6192,2569.533" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2629.385" y2="2664.385"/><polygon fill="#9A9A9A" points="2779.6192,2654.385,2783.6192,2664.385,2787.6192,2654.385,2783.6192,2658.385" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2462.681" y2="2503.607"/><polygon fill="#9A9A9A" points="2779.6192,2493.607,2783.6192,2503.607,2787.6192,2493.607,2783.6192,2497.607" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2701.311" y2="2713.311"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="3164.7443" y1="2713.311" y2="2713.311"/><polygon fill="#9A9A9A" points="3160.7443,2591.996,3164.7443,2581.996,3168.7443,2591.996,3164.7443,2587.996" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3164.7443" x2="3164.7443" y1="2450.681" y2="2713.311"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3164.7443" x2="2883.548" y1="2450.681" y2="2450.681"/><polygon fill="#9A9A9A" points="2893.548,2446.681,2883.548,2450.681,2893.548,2454.681,2889.548,2450.681" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2683.6903" x2="2636.4615" y1="2450.681" y2="2450.681"/><polygon fill="#9A9A9A" points="2632.4615,2577.996,2636.4615,2587.996,2640.4615,2577.996,2636.4615,2581.996" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2636.4615" x2="2636.4615" y1="2450.681" y2="2725.311"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2636.4615" x2="2783.6192" y1="2725.311" y2="2725.311"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2725.311" y2="2760.311"/><polygon fill="#9A9A9A" points="2779.6192,2750.311,2783.6192,2760.311,2787.6192,2750.311,2783.6192,2754.311" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2410.218" y2="2438.681"/><polygon fill="#9A9A9A" points="2779.6192,2428.681,2783.6192,2438.681,2787.6192,2428.681,2783.6192,2432.681" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2831.089" y2="2866.089"/><polygon fill="#9A9A9A" points="2779.6192,2856.089,2783.6192,2866.089,2787.6192,2856.089,2783.6192,2860.089" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2161.192" y2="2195.588"/><polygon fill="#9A9A9A" points="2779.6192,2185.588,2783.6192,2195.588,2787.6192,2185.588,2783.6192,2189.588" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2903.015" y2="2913.015"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="3176.7443" y1="2913.015" y2="2913.015"/><polygon fill="#9A9A9A" points="3172.7443,2535.57,3176.7443,2525.57,3180.7443,2535.57,3176.7443,2531.57" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3176.7443" x2="3176.7443" y1="2149.192" y2="2913.015"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3176.7443" x2="2850.3021" y1="2149.192" y2="2149.192"/><polygon fill="#9A9A9A" points="2860.3021,2145.192,2850.3021,2149.192,2860.3021,2153.192,2856.3021,2149.192" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2716.9362" x2="2612.4615" y1="2149.192" y2="2149.192"/><polygon fill="#9A9A9A" points="2608.4615,2521.57,2612.4615,2531.57,2616.4615,2521.57,2612.4615,2525.57" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2612.4615" x2="2612.4615" y1="2149.192" y2="2925.015"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2612.4615" x2="2783.6192" y1="2925.015" y2="2925.015"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2925.015" y2="2945.015"/><polygon fill="#9A9A9A" points="2779.6192,2935.015,2783.6192,2945.015,2787.6192,2935.015,2783.6192,2939.015" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3374.541" x2="3374.541" y1="1499.747" y2="1534.747"/><polygon fill="#9A9A9A" points="3370.541,1524.747,3374.541,1534.747,3378.541,1524.747,3374.541,1528.747" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3374.541" x2="3374.541" y1="1571.673" y2="1606.673"/><polygon fill="#9A9A9A" points="3370.541,1596.673,3374.541,1606.673,3378.541,1596.673,3374.541,1600.673" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3374.541" x2="3374.541" y1="1660.525" y2="1680.71"/><polygon fill="#9A9A9A" points="3370.541,1670.71,3374.541,1680.71,3378.541,1670.71,3374.541,1674.71" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3374.541" x2="3374.541" y1="1421.895" y2="1462.821"/><polygon fill="#9A9A9A" points="3370.541,1452.821,3374.541,1462.821,3378.541,1452.821,3374.541,1456.821" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3374.541" x2="3374.541" y1="1717.636" y2="1729.636"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3374.541" x2="3519.3376" y1="1729.636" y2="1729.636"/><polygon fill="#9A9A9A" points="3515.3376,1587.173,3519.3376,1577.173,3523.3376,1587.173,3519.3376,1583.173" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3519.3376" x2="3519.3376" y1="1409.895" y2="1729.636"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3519.3376" x2="3441.2239" y1="1409.895" y2="1409.895"/><polygon fill="#9A9A9A" points="3451.2239,1405.895,3441.2239,1409.895,3451.2239,1413.895,3447.2239,1409.895" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3307.8581" x2="3229.7443" y1="1409.895" y2="1409.895"/><polygon fill="#9A9A9A" points="3225.7443,1573.173,3229.7443,1583.173,3233.7443,1573.173,3229.7443,1577.173" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3229.7443" x2="3229.7443" y1="1409.895" y2="1741.636"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3229.7443" x2="3374.541" y1="1741.636" y2="1741.636"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3374.541" x2="3374.541" y1="1741.636" y2="1897.488"/><polygon fill="#9A9A9A" points="3370.541,1887.488,3374.541,1897.488,3378.541,1887.488,3374.541,1891.488" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2329.829" y2="2364.829"/><polygon fill="#9A9A9A" points="3476.9969,2354.829,3480.9969,2364.829,3484.9969,2354.829,3480.9969,2358.829" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2401.755" y2="2430.218"/><polygon fill="#9A9A9A" points="3476.9969,2420.218,3480.9969,2430.218,3484.9969,2420.218,3480.9969,2424.218" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2603.996" y2="2638.996"/><polygon fill="#9A9A9A" points="3476.9969,2628.996,3480.9969,2638.996,3484.9969,2628.996,3480.9969,2632.996" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2675.922" y2="2710.922"/><polygon fill="#9A9A9A" points="3476.9969,2700.922,3480.9969,2710.922,3484.9969,2700.922,3480.9969,2704.922" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2526.144" y2="2567.07"/><polygon fill="#9A9A9A" points="3476.9969,2557.07,3480.9969,2567.07,3484.9969,2557.07,3480.9969,2561.07" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2747.848" y2="2759.848"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3608.4903" y1="2759.848" y2="2759.848"/><polygon fill="#9A9A9A" points="3604.4903,2646.996,3608.4903,2636.996,3612.4903,2646.996,3608.4903,2642.996" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3608.4903" x2="3608.4903" y1="2514.144" y2="2759.848"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3608.4903" x2="3567.6284" y1="2514.144" y2="2514.144"/><polygon fill="#9A9A9A" points="3577.6284,2510.144,3567.6284,2514.144,3577.6284,2518.144,3573.6284,2514.144" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3394.3654" x2="3353.5034" y1="2514.144" y2="2514.144"/><polygon fill="#9A9A9A" points="3349.5034,2632.996,3353.5034,2642.996,3357.5034,2632.996,3353.5034,2636.996" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3353.5034" x2="3353.5034" y1="2514.144" y2="2771.848"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3353.5034" x2="3480.9969" y1="2771.848" y2="2771.848"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2771.848" y2="2806.848"/><polygon fill="#9A9A9A" points="3476.9969,2796.848,3480.9969,2806.848,3484.9969,2796.848,3480.9969,2800.848" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2467.144" y2="2502.144"/><polygon fill="#9A9A9A" points="3476.9969,2492.144,3480.9969,2502.144,3484.9969,2492.144,3480.9969,2496.144" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2251.977" y2="2292.903"/><polygon fill="#9A9A9A" points="3476.9969,2282.903,3480.9969,2292.903,3484.9969,2282.903,3480.9969,2286.903" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2877.626" y2="2889.626"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3624.6235" y1="2889.626" y2="2889.626"/><polygon fill="#9A9A9A" points="3620.6235,2571.533,3624.6235,2561.533,3628.6235,2571.533,3624.6235,2567.533" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3624.6235" x2="3624.6235" y1="2239.977" y2="2889.626"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3624.6235" x2="3549.9808" y1="2239.977" y2="2239.977"/><polygon fill="#9A9A9A" points="3559.9808,2235.977,3549.9808,2239.977,3559.9808,2243.977,3555.9808,2239.977" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3412.013" x2="3329.5034" y1="2239.977" y2="2239.977"/><polygon fill="#9A9A9A" points="3325.5034,2557.533,3329.5034,2567.533,3333.5034,2557.533,3329.5034,2561.533" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3329.5034" x2="3329.5034" y1="2239.977" y2="2901.626"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3329.5034" x2="3480.9969" y1="2901.626" y2="2901.626"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2901.626" y2="3001.941"/><polygon fill="#9A9A9A" points="3476.9969,2991.941,3480.9969,3001.941,3484.9969,2991.941,3480.9969,2995.941" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3774.1205" x2="3774.1205" y1="2401.792" y2="2430.255"/><polygon fill="#9A9A9A" points="3770.1205,2420.255,3774.1205,2430.255,3778.1205,2420.255,3774.1205,2424.255" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3774.1205" x2="3774.1205" y1="2484.107" y2="2519.107"/><polygon fill="#9A9A9A" points="3770.1205,2509.107,3774.1205,2519.107,3778.1205,2509.107,3774.1205,2513.107" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3774.1205" x2="3774.1205" y1="2589.885" y2="2624.885"/><polygon fill="#9A9A9A" points="3770.1205,2614.885,3774.1205,2624.885,3778.1205,2614.885,3774.1205,2618.885" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3774.1205" x2="3774.1205" y1="2323.94" y2="2364.866"/><polygon fill="#9A9A9A" points="3770.1205,2354.866,3774.1205,2364.866,3778.1205,2354.866,3774.1205,2358.866" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3774.1205" x2="3774.1205" y1="2661.811" y2="2673.811"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3774.1205" x2="3885.6175" y1="2673.811" y2="2673.811"/><polygon fill="#9A9A9A" points="3881.6175,2499.607,3885.6175,2489.607,3889.6175,2499.607,3885.6175,2495.607" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3885.6175" x2="3885.6175" y1="2311.94" y2="2673.811"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3885.6175" x2="3841.1349" y1="2311.94" y2="2311.94"/><polygon fill="#9A9A9A" points="3851.1349,2307.94,3841.1349,2311.94,3851.1349,2315.94,3847.1349,2311.94" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3707.1061" x2="3662.6235" y1="2311.94" y2="2311.94"/><polygon fill="#9A9A9A" points="3658.6235,2494.357,3662.6235,2504.357,3666.6235,2494.357,3662.6235,2498.357" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3662.6235" x2="3662.6235" y1="2311.94" y2="2703.311"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3662.6235" x2="1660.7839" y1="2703.311" y2="2703.311"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1660.7839" x2="1660.7839" y1="2703.311" y2="2720.811"/><polygon fill="#9A9A9A" points="1656.7839,2710.811,1660.7839,2720.811,1664.7839,2710.811,1660.7839,2714.811" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="161.2959" y1="722.794" y2="727.794"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="161.2959" x2="754.717" y1="727.794" y2="727.794"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="754.717" x2="754.717" y1="727.794" y2="742.794"/><polygon fill="#9A9A9A" points="750.717,732.794,754.717,742.794,758.717,732.794,754.717,736.794" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="754.717" x2="754.717" y1="1080.128" y2="1097.054"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="754.717" x2="2006.4661" y1="1097.054" y2="1097.054"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="1097.054" y2="1112.054"/><polygon fill="#9A9A9A" points="2002.4661,1102.054,2006.4661,1112.054,2010.4661,1102.054,2006.4661,1106.054" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1824.8151" x2="1824.8151" y1="1248.832" y2="1252.832"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1824.8151" x2="2624.9956" y1="1252.832" y2="1252.832"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1252.832" y2="1268.832"/><polygon fill="#9A9A9A" points="2620.9956,1258.832,2624.9956,1268.832,2628.9956,1258.832,2624.9956,1262.832" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2412.7532" x2="2412.7532" y1="1248.832" y2="1252.832"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2412.7532" x2="3374.541" y1="1252.832" y2="1252.832"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3374.541" x2="3374.541" y1="1252.832" y2="1397.895"/><polygon fill="#9A9A9A" points="3370.541,1387.895,3374.541,1397.895,3378.541,1387.895,3374.541,1391.895" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1510.5534" x2="1510.5534" y1="1631.599" y2="1883.488"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1510.5534" x2="3220.7443" y1="1883.488" y2="1883.488"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="3220.7443" y1="1883.488" y2="1897.488"/><polygon fill="#9A9A9A" points="3216.7443,1887.488,3220.7443,1897.488,3224.7443,1887.488,3220.7443,1891.488" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="2624.9956" y1="1877.488" y2="1883.488"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2624.9956" x2="3220.7443" y1="1883.488" y2="1883.488"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="3220.7443" y1="1883.488" y2="1897.488"/><polygon fill="#9A9A9A" points="3216.7443,1887.488,3220.7443,1897.488,3224.7443,1887.488,3220.7443,1891.488" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="3220.7443" y1="1903.488" y2="1908.488"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="2006.4661" y1="1908.488" y2="1908.488"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="1908.488" y2="1923.488"/><polygon fill="#9A9A9A" points="2002.4661,1913.488,2006.4661,1923.488,2010.4661,1913.488,2006.4661,1917.488" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1660.7839" x2="1660.7839" y1="2117.192" y2="2121.192"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1660.7839" x2="3774.1205" y1="2121.192" y2="2121.192"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3774.1205" x2="3774.1205" y1="2121.192" y2="2299.94"/><polygon fill="#9A9A9A" points="3770.1205,2289.94,3774.1205,2299.94,3778.1205,2289.94,3774.1205,2293.94" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1983.4386" x2="1983.4386" y1="2117.192" y2="2121.192"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1983.4386" x2="2783.6192" y1="2121.192" y2="2121.192"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2121.192" y2="2137.192"/><polygon fill="#9A9A9A" points="2779.6192,2127.192,2783.6192,2137.192,2787.6192,2127.192,2783.6192,2131.192" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2412.7532" x2="2412.7532" y1="2117.192" y2="2121.192"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2412.7532" x2="3480.9969" y1="2121.192" y2="2121.192"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3480.9969" x2="3480.9969" y1="2121.192" y2="2227.977"/><polygon fill="#9A9A9A" points="3476.9969,2217.977,3480.9969,2227.977,3484.9969,2217.977,3480.9969,2221.977" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1405.2675" x2="1405.2675" y1="2615.959" y2="2987.941"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1405.2675" x2="3220.7443" y1="2987.941" y2="2987.941"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="3220.7443" y1="2987.941" y2="3001.941"/><polygon fill="#9A9A9A" points="3216.7443,2991.941,3220.7443,3001.941,3224.7443,2991.941,3220.7443,2995.941" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1660.7839" x2="1660.7839" y1="2829.663" y2="2987.941"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="1660.7839" x2="3220.7443" y1="2987.941" y2="2987.941"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="3220.7443" y1="2987.941" y2="3001.941"/><polygon fill="#9A9A9A" points="3216.7443,2991.941,3220.7443,3001.941,3224.7443,2991.941,3220.7443,2995.941" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="2783.6192" y1="2981.941" y2="2987.941"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2783.6192" x2="3220.7443" y1="2987.941" y2="2987.941"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="3220.7443" y1="2987.941" y2="3001.941"/><polygon fill="#9A9A9A" points="3216.7443,2991.941,3220.7443,3001.941,3224.7443,2991.941,3220.7443,2995.941" style="stroke:#9A9A9A;stroke-width:1;"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="3220.7443" y1="3007.941" y2="3012.941"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="3220.7443" x2="2006.4661" y1="3012.941" y2="3012.941"/><line style="stroke:#9A9A9A;stroke-width:1;" x1="2006.4661" x2="2006.4661" y1="3012.941" y2="3027.941"/><polygon fill="#9A9A9A" points="2002.4661,3017.941,2006.4661,3027.941,2010.4661,3017.941,2006.4661,3021.941" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="28.5837" x="269.5085" y="72.226">Main</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.1019" x="805.3735" y="72.226">BiergartenPipelineOrchestrator::Run()</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.2797" x="1820.3609" y="72.226">Orchestrator</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="71.9356" x="2779.781" y="72.226">LLM Worker</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="87.3536" x="3376.0071" y="72.226">SQLite Worker</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="151.551" x="3698.345" y="72.226">Enrichment Workers (xN)</text><?plantuml-src rLbRRnkv5NxNho2yG5T25IEE4-zYr0jqizUfxRYMjsw1008rSpJYQaJEafHiBVAmJtqkYlOFvfVq798pkeriRnkqRXnOyl3myDo-SncQgP0vrtp64XZpUMPFbRHNV0Rie7V91boQWvgfeXc8du0T7QyjMc4pM6t_aygc4xKugA9mcz-yNbiQyNYQQZMNILTbIhElJhluyqtrsO7awEtHjw-xLVpt4RIrLlTXyUJToUdnklmyjc8Xx79WkIuuz3lzRh-Ag5yA-hRzxjlZRohvg7mVJJlGTBRLtZcmf5Gw0VqKlvxWCoMJ7RRTJkzDvzqZ6nxbVgKixB3iTVhzNc-BwZ7ZEowFdZEu5xECorz4TJiHyLI2CUneZGPrKl54Amn43GlG1cgrcWiFTZi1rX6WK_GoIDRZbhDhaKCc9B3FF_-ZD0r3swJ8h5RxTCc5_5Gp51Yrw9eZkxPEvpEGrjIvJkCcmz-BHgicngn-BXSy4mazChzlC3l1K-fBC8qQOv79aqobKGGOYRg5Jmn6IGqo0wmkLQC6CX7ZMdGkXMNTkSxECZNY6OQa1VOhTf7n6ITF89bxrgf5dRd84jOxPqB-0B4bhZNFGA0OYBF1Zvcmq7_8bRO3q0iHupQ9pc1Qf1EBCdp8GHes-EC5qh5OIObyX9A7kDI1LE0QPqR85ArdDQO4xfPnDLPeMrnWFClOM2m0VptOkKQwPGxcaDHXT1HArDL0IdGeX23fJZWUa_tcGgLzQVNoTmpDCemdgD0Wv_UIuGAxKteA6Ys8MvCjcMdztgydcfECdW4RAze1I8Bk4IXANZWt4sEmOWQaLni5zjiDWnaQkn047QBdiJL8in2hoC3b58-Y-90KKCmxaYLuGcopvOQgg_0gjd_GyGIGCqV_HD7DNDOnM3uzY-vJBNflbBnG7ACzYkZpGiMSF63g1rdnzV0793f0hZlK7G0ziCiCa7o4tryPzyV-3TTe52KvakVXstvQolMci-oYLz5uzGD9VxyQBL_5_acvinRrfHRnX40JeZ2AhZNSSJqh9UnoLBzEGWwza8qjhnCbyqiiKMHlT0Sah303HQ-51qiklXDJj6g2JZJpsOnhWNj2S9IXmJEmo9vhYXUC3ZmUWOkUZBdxcZhuPKl6BNFmd-SRdjwlKp2YrwYmuxOwWGXhcucro9qZdzIBGZSmn7KrdUU65C14PrIss90VgP_GeFOr-_pFl_rl_wCCrz-r1ttssk7h-q7_Xftrh_etxTlp3rSlGi9Fwy14H28olpUWhoVSGDtmMPv1CYonI42fJ7VcewmZ5QQf9ikocVk4Xnm_2I4Od5FqsDPPM3GkbCeZDY2lbT1dd__wT-PvKHc9kfd26b8y85QCfvWNYU75nMN8fSJkVY8maGSv66h0CEtFg5G9KnOgv7W3CL1ABuv42Ttpyn2r0yXydHYGg90keyW_2klrZv8LWMg60Mh3HijnsO01_JkRO-7668SGkso2INcC5NmLjPxm1h30k99KeCTdRDoczHABKQ1pMMB8nsD1fH0CrkZHOeXdfD0C968q7-OQng11nj1aU6oCBSJm7aWmV-0AAaxvpNo76ZlVqrEdRX42XyAeuwEJa-7HFdrxO47FK3PZHHnmxCkBOkGl8HSEpONQhgasphve8cSO5FtL59Ruf-MZ308XeJ_dnk1Z8QrowIu52TedaXntvjMwdNageCYk5veq2nSsMH7dbECR7oMLH-gUmZRVpbHeIjfe7qicAgC9EmN84iD-NV0Fr6kf4DV2aOoEF6I5W2RGZeJowfO-n3ObbJmppBUgBWCwJqld6enxH-zFh3J2Pi6d8fTYHpTMJKPcEIiDsIHtnzWcDjaS5uOYQR83nFH1S7Zau5f8dD1c3ra7-vPhJv80HMhyLX0E19iG3itPBeeTzJDGl2594F5QgnWxP-TlKgBX93IkNpmUOlISl6rz0QjuXgLXsdbEfg6Z74skL3RSDGZHk8ouatpVAtJdAgSrsOPnMY-hfXqvK7Tk-dVzcxzW2uzJqukhRbJEEXhkGI_RqlMB_oU5RTL-1UTZw3zSDVwpAXToeIsUT7thjSg87mjZXPMY_ZMU0Wk1OzFEbSYHyonJkKNaGAdVPbhnUgFrQKnzFAli6jt1PzTohQTIK7KNyTpyiovoQwlW19kirPpGxbPNcT26kAbXNmyI1XuowiXpRxBLNB7UZJXkGPjJ70y0kuzLeIr7aw2OXXcQ0xkCHgWi52b-Tl4Yds9zzKs_EocuhQ8i_eAMfonHvP71RYXSlLJFQ_QevSB-jhMaP5aIt5I5hKBm0niXj3De5UKn62TH4XgrBnFYGUWzLJCmk1DsGXmCwpY1NAJxhF98_Im8dbS_FVKpudUFJ9kLj0Zae9wlfojTTmjWiHPgO6KiKjXI0-EziZSE1s0TwU7gFFRRdSFNP7N10uzK_IrHORrM_rS2Oxrn-5BDmURh16Kdcpvm_U5ALQIXqLggUqn9L0mju2YTgtoU4N3M9-cNr7IySKr7zxj-zm_dLo-ns-ZwISkt6THLd8SdFPo7DCvbcpdzesmRwkoBLxDtRa0pzLN_kFrc9L1W8eUac9SSccZBrpH054F0rj37th-Avne1ZuFIMBYf2cQWKtfvv8QkufNDcg3hOR2Dtiq906Dp9NCLbADW1uCCohwykHcZXqRyX5PpiDW-BcY31oNmK9qhebk1Cwp5tWvt1VwEV9M3gVWLPtgrjnBLHXaA8c-AscIsE6P_BIfoKS4XIF_lp261nLPIALkfmijF32G5MSLCuhFSJjPxIR0_Th0dg5-TlKJKtw1ZP5g2lkBDRj7EuMZFwGt6Q8bB55U71LotN-kuX5s-sQ6EoP_2p1JksKmbFbCJRbTp_pFWsYs1j1aKbQ2zv3QUhDKk7xy1HgIOnr1PLd1QClG-PxtQbHgNAMQbf8jKkbjoLe87p3t-NNPWi7tDj0PERuq2cq2_LrXu6fbXktOVJmuumVRxGEYvLDJsylfhB_ixhkLJxFVs3fJJfiA_NYko6dLyKZcBc01qCNwfyBxjjszw7-vUoBjmVniQdGhvt0l6xeVBo_DRVrredhuiB6V-S2FeUxhoGd2BUO-k_rXQ35FEhULjdg1IdsY5AJvnLo2JkKtK_Nh9Bkza1OOmEoZlWek6ZrB0dzdC7BHgxhBsNm00?></g></svg> |