mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-06-01 01:54:00 +00:00
1 line
73 KiB
XML
1 line
73 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="3623px" preserveAspectRatio="none" style="width:3261px;height:3623px;background:#FAFCF9;" version="1.1" viewBox="0 0 3261 3623" width="3261px" zoomAndPan="magnify"><title>The Biergarten Data Pipeline — Activity Diagram</title><defs/><g><rect fill="#FAFCF9" height="3623" style="stroke:none;stroke-width:1;" width="3261" x="0" y="0"/><g class="title" data-source-line="16"><text fill="#28342A" font-family="'Volkhov'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="486.14" x="1386.2746" y="39.42">The Biergarten Data Pipeline — Activity Diagram</text></g><rect fill="none" height="16.926" style="stroke:none;stroke-width:1;" width="3228.6892" x="15" y="59.33"/><ellipse cx="207.3046" cy="91.256" fill="#222222" rx="10" ry="10" style="stroke:#222222;stroke-width:1;"/><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="187.59" x="113.5096" y="121.256"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="167.59" x="123.5096" y="144.152">ParseArguments(argc, argv)</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="95.4522" x="159.5785" y="228.645"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="75.4522" x="169.5785" y="251.541">spdlog::error</text><ellipse cx="207.3046" cy="303.608" fill="none" rx="11" ry="11" style="stroke:#222222;stroke-width:1;"/><ellipse cx="207.3046" cy="303.608" fill="#222222" rx="6" ry="6" style="stroke:#222222;stroke-width:1;"/><polygon fill="#DCE8D8" points="170.053,178.182,244.5562,178.182,256.5562,190.182,244.5562,202.182,170.053,202.182,158.053,190.182,170.053,178.182" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="211.3046" y="215.078">yes</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="74.5032" x="170.053" y="194.615">Invalid args?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="256.5562" y="186.152">no</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="273.4256" x="70.5918" y="356.608"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="253.4256" x="80.5918" y="379.504">Init CurlGlobalState & LlamaBackendState</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="114.5036" x="150.0528" y="413.534"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="94.5036" x="160.0528" y="436.43">Build DI injector</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="283.8713" x="65.3689" y="470.46"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="263.8713" x="75.3689" y="493.356">JsonLoader::LoadLocations("locations.json")</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="304.4079" x="55.1006" y="527.386"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="284.4079" x="65.1006" y="550.282">JsonLoader::LoadBeerStyles("beer-styles.json")</text><path d="M413.6092,574.312 L413.6092,600.701 L393.6092,604.701 L413.6092,608.701 L413.6092,635.09 A0,0 0 0 0 413.6092,635.09 L719.0252,635.09 A0,0 0 0 0 719.0252,635.09 L719.0252,584.312 L709.0252,574.312 L413.6092,574.312 A0,0 0 0 0 413.6092,574.312" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><path d="M709.0252,574.312 L709.0252,584.312 L719.0252,584.312 L709.0252,574.312" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="30.2982" x="419.6092" y="592.208">NEW</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="254.1179" x="449.9073" y="592.208">: Beer styles do not need location context.</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="280.5209" x="419.6092" y="609.134">Wikipedia summaries for the entire palette are</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="237.3089" x="419.6092" y="626.06">fetched and cached globally at startup.</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="372.6092" x="21" y="586.238"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="352.6092" x="31" y="609.134">EnrichmentService::PreWarmBeerStyleCache(beer_styles)</text><path d="M322.2825,645.09 L322.2825,671.479 L302.2825,675.479 L322.2825,679.479 L322.2825,705.868 A0,0 0 0 0 322.2825,705.868 L519.4492,705.868 A0,0 0 0 0 519.4492,705.868 L519.4492,655.09 L509.4492,645.09 L322.2825,645.09 A0,0 0 0 0 322.2825,645.09" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><path d="M509.4492,645.09 L509.4492,655.09 L519.4492,655.09 L509.4492,645.09" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="157.3748" x="328.2825" y="662.986">Opens SQLite connection.</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="160.5016" x="328.2825" y="679.912">Begins a single transaction</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="176.1667" x="328.2825" y="696.838">covering all five fixture types.</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="189.9558" x="112.3267" y="657.016"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="169.9558" x="122.3267" y="679.912">Initialize SqliteExportService</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="245.1019" x="84.7536" y="725.868"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.1019" x="94.7536" y="748.764">BiergartenPipelineOrchestrator::Run()</text><path d="M320.1407,3481.085 L320.1407,3490.548 L300.1407,3494.548 L320.1407,3498.548 L320.1407,3508.011 A0,0 0 0 0 320.1407,3508.011 L561.075,3508.011 A0,0 0 0 0 561.075,3508.011 L561.075,3491.085 L551.075,3481.085 L320.1407,3481.085 A0,0 0 0 0 320.1407,3481.085" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><path d="M551.075,3481.085 L551.075,3491.085 L561.075,3491.085 L551.075,3481.085" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.9343" x="326.1407" y="3498.981">COMMIT covers all five fixture types.</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="185.6723" x="114.4684" y="3476.085"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.6723" x="124.4684" y="3498.981">Finalize SqliteExportService</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="254.6731" x="79.968" y="3533.011"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="234.6731" x="89.968" y="3555.907">spdlog::info "Pipeline complete in X ms"</text><ellipse cx="207.3046" cy="3600.937" fill="none" rx="11" ry="11" style="stroke:#222222;stroke-width:1;"/><ellipse cx="207.3046" cy="3600.937" fill="#222222" rx="6" ry="6" style="stroke:#222222;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1.5;" x1="15" x2="15" y1="59.33" y2="3611.937"/><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="230.9414" x="1280.2859" y="782.794"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="210.9414" x="1290.2859" y="805.69">RunUserPhase(sampled_locations)</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="191.3594" x="1300.0769" y="839.72"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="1310.0769" y="862.616">Create BoundedChannels</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="171.3594" x="1310.0769" y="879.542">(user_llm_ch, user_exp_ch)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="820.7794" x="960.4993" y="913.572"/><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="242.1344" x="974.4993" y="1064.424"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="222.1344" x="984.4993" y="1087.32">Loop: Send Locations → user_llm_ch</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="132.9342" x="1029.0993" y="1136.35"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="112.9342" x="1039.0993" y="1159.246">Close user_llm_ch</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="213.3655" x="1289.0738" y="1342.128"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="1299.0738" y="1365.024">Join LLM Worker, SQLite Worker</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="304.7296" x="1243.3918" y="1399.054"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="284.7296" x="1253.3918" y="1421.95">RunBreweryAndBeerPhase(sampled_locations)</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="174.2744" x="1308.6194" y="1455.98"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="1318.6194" y="1478.876">Create BoundedChannels</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.1945" x="1318.6194" y="1495.802">(loc_ch, llm_ch, exp_ch)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1063.2534" x="730.0252" y="1529.832"/><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="208.0387" x="742.0252" y="1879.821"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="188.0387" x="752.0252" y="1902.717">Loop: Send Locations → loc_ch</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="98.8385" x="796.6253" y="1951.747"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.8385" x="806.6253" y="1974.643">Close loc_ch</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="171.2325" x="960.0639" y="2040.636"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="151.2325" x="970.0639" y="2063.532">Join Enrichment Workers</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="98.1755" x="996.5924" y="2112.562"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.1755" x="1006.5924" y="2135.458">Close llm_ch</text><path d="M1522.4394,2356.229 L1522.4394,2374.155 L1502.4394,2378.155 L1522.4394,2382.155 L1522.4394,2400.081 A0,0 0 0 0 1522.4394,2400.081 L1769.2786,2400.081 A0,0 0 0 0 1769.2786,2400.081 L1769.2786,2366.229 L1759.2786,2356.229 L1522.4394,2356.229 A0,0 0 0 0 1522.4394,2356.229" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><path d="M1759.2786,2356.229 L1759.2786,2366.229 L1769.2786,2366.229 L1759.2786,2356.229" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.8393" x="1528.4394" y="2374.125">Both brewery_pool_ and beer_pool_</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="187.1287" x="1528.4394" y="2391.051">are now completely populated.</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="213.3655" x="1289.0738" y="2359.692"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="1299.0738" y="2382.588">Join LLM Worker, SQLite Worker</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="137.0586" x="1327.2273" y="2420.081"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="117.0586" x="1337.2273" y="2442.977">RunCheckinPhase()</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="234.991" x="1278.2611" y="2477.007"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="179.0656" x="1288.2611" y="2499.903">ICheckinDistributionStrategy::</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="214.991" x="1288.2611" y="2516.829">AssignActivityWeights(user_pool_)</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="292.2334" x="1249.6399" y="2609.255"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="272.2334" x="1259.6399" y="2632.151">CheckinsForUser(user, brewery_pool_.size())</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="181.5219" x="1304.9957" y="2724.577"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="161.5219" x="1314.9957" y="2747.473">TimestampFor(user, index)</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="239.6223" x="1275.9454" y="2781.503"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.6223" x="1285.9454" y="2804.399">Select brewery from brewery_pool_</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="287.9727" x="1251.7703" y="2838.429"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="267.9727" x="1261.7703" y="2861.325">GenerateCheckin(user, brewery, timestamp)</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1261.7703" y="2878.251">via DataGenerator</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="271.4235" x="1260.0449" y="2912.281"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="251.4235" x="1270.0449" y="2935.177">ProcessCheckin(checkin) → sqlite3_int64</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="175.4539" x="1308.0296" y="2969.207"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="155.4539" x="1318.0296" y="2992.103">Append → checkin_pool_</text><polygon fill="#DCE8D8" points="1323.0443,2666.181,1468.4689,2666.181,1480.4689,2678.181,1468.4689,2690.181,1323.0443,2690.181,1311.0443,2678.181,1323.0443,2666.181" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="1399.7566" y="2703.077">remaining</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.4247" x="1323.0443" y="2682.614">For each checkin index?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1280.3383" y="2674.151">done</text><polygon fill="#DCE8D8" points="1274.9052,2550.859,1516.608,2550.859,1528.608,2562.859,1516.608,2574.859,1274.9052,2574.859,1262.9052,2562.859,1274.9052,2550.859" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="1399.7566" y="2587.755">remaining</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="241.7028" x="1274.9052" y="2567.292">For each GeneratedUser in user_pool_?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1232.1992" y="2558.829">done</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="126.0347" x="1332.7393" y="3070.133"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="106.0347" x="1342.7393" y="3093.029">RunRatingPhase()</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="242.0401" x="1274.7366" y="3185.455"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="195.9589" x="1284.7366" y="3208.351">Match brewery_id → select beer</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="222.0401" x="1284.7366" y="3225.277">from beer_pool_ (same brewery_id)</text><polygon fill="#DCE8D8" points="1322.5973,3259.307,1468.9159,3259.307,1480.9159,3271.307,1468.9159,3283.307,1322.5973,3283.307,1310.5973,3271.307,1322.5973,3259.307" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="146.3186" x="1322.5973" y="3275.74">Beer exists for brewery?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="1289.4495" y="3267.277">yes</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="1480.9159" y="3267.277">no</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="256.0901" x="1145.1479" y="3293.307"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="236.0901" x="1155.1479" y="3316.203">GenerateRating(user, beer, checkin_id)</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1155.1479" y="3333.129">via DataGenerator</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="150.1336" x="1198.1262" y="3367.159"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="130.1336" x="1208.1262" y="3390.055">ProcessRating(rating)</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="194.1645" x="1421.238" y="3293.307"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="174.1645" x="1431.238" y="3316.203">Skip — brewery has no beers</text><polygon fill="#DCE8D8" points="1395.7566,3410.085,1407.7566,3422.085,1395.7566,3434.085,1383.7566,3422.085,1395.7566,3410.085" style="stroke:#547461;stroke-width:0.5;"/><polygon fill="#DCE8D8" points="1253.8241,3127.059,1537.6891,3127.059,1549.6891,3139.059,1537.6891,3151.059,1253.8241,3151.059,1241.8241,3139.059,1253.8241,3127.059" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="1399.7566" y="3163.955">remaining</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="283.865" x="1253.8241" y="3143.492">For each GeneratedCheckin in checkin_pool_?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1211.1181" y="3135.029">done</text><line style="stroke:#000000;stroke-width:1.5;" x1="724.0252" x2="724.0252" y1="59.33" y2="3611.937"/><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="123.1779" x="1941.7057" y="1004.498"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="103.1779" x="1951.7057" y="1027.394">Receive Location</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="161.8725" x="1922.3584" y="1076.424"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="141.8725" x="1932.3584" y="1099.32">GenerateUser(location)</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1932.3584" y="1116.246">via DataGenerator</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="243.1191" x="1881.7351" y="1165.276"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="223.1191" x="1891.7351" y="1188.172">Send GeneratedUser → user_exp_ch</text><polygon fill="#DCE8D8" points="1931.2323,939.572,2075.3569,939.572,2087.3569,951.572,2075.3569,963.572,1931.2323,963.572,1919.2323,951.572,1931.2323,939.572" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2007.2946" y="976.468">yes</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="144.1246" x="1931.2323" y="956.005">user_llm_ch has items?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="1904.0646" y="947.542">no</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="137.5362" x="1934.5265" y="1259.202"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="117.5362" x="1944.5265" y="1282.098">Close user_exp_ch</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="148.6644" x="1907.1041" y="1614.228"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.6644" x="1917.1041" y="1637.124">Receive EnrichedCity</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="236.4472" x="1863.2127" y="1686.154"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="216.4472" x="1873.2127" y="1709.05">GenerateBrewery(location, context)</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1873.2127" y="1725.976">via DataGenerator</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="242.4597" x="1860.2065" y="1775.006"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="222.4597" x="1870.2065" y="1797.902">IBeerSelectionStrategy::SelectStyles(</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="186.0366" x="1877.1225" y="1814.828">brewery, beer_style_palette_)</text><path d="M2116.2246,1922.284 L2116.2246,1931.747 L2096.2246,1935.747 L2116.2246,1939.747 L2116.2246,1949.21 A0,0 0 0 0 2116.2246,1949.21 L2350.5615,1949.21 A0,0 0 0 0 2350.5615,1949.21 L2350.5615,1932.284 L2340.5615,1922.284 L2116.2246,1922.284 A0,0 0 0 0 2116.2246,1922.284" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><path d="M2340.5615,1922.284 L2340.5615,1932.284 L2350.5615,1932.284 L2340.5615,1922.284" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="2122.2246" y="1940.18">Guaranteed cache hit from startup.</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="229.5765" x="1866.6481" y="1917.284"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="209.5765" x="1876.6481" y="1940.18">GetStyleContextFromCache(style)</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="253.4023" x="1854.7352" y="1989.21"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="233.4023" x="1864.7352" y="2012.106">GenerateBeer(brewery, style_context)</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1864.7352" y="2029.032">via DataGenerator</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="270.3154" x="1846.2786" y="2078.062"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="250.3154" x="1856.2786" y="2100.958">Attach GeneratedBeer to Brewery bundle</text><polygon fill="#DCE8D8" points="1893.5074,1852.358,2069.3652,1852.358,2081.3652,1864.358,2069.3652,1876.358,1893.5074,1876.358,1881.5074,1864.358,1893.5074,1852.358" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="1985.4363" y="1889.254">remaining</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="175.8578" x="1893.5074" y="1868.791">For each selected BeerStyle?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1850.8014" y="1860.328">done</text><path d="M2137.8029,2173.988 L2137.8029,2200.377 L2117.8029,2204.377 L2137.8029,2208.377 L2137.8029,2234.766 A0,0 0 0 0 2137.8029,2234.766 L2371.3501,2234.766 A0,0 0 0 0 2371.3501,2234.766 L2371.3501,2183.988 L2361.3501,2173.988 L2137.8029,2173.988 A0,0 0 0 0 2137.8029,2173.988" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><path d="M2361.3501,2173.988 L2361.3501,2183.988 L2371.3501,2183.988 L2361.3501,2173.988" fill="#EAF0E8" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="212.5472" x="2143.8029" y="2191.884">The next generation of a brewery is</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="205.3678" x="2143.8029" y="2208.81">entirely dependent on the current</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="205.8293" x="2143.8029" y="2225.736">brewery and its beers completing.</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="272.7332" x="1845.0697" y="2185.914"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="252.7332" x="1855.0697" y="2208.81">Send BreweryWithBeers Bundle → exp_ch</text><polygon fill="#DCE8D8" points="1926.7534,1555.832,2036.1192,1555.832,2048.1192,1567.832,2036.1192,1579.832,1926.7534,1579.832,1914.7534,1567.832,1926.7534,1555.832" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="1985.4363" y="1592.728">yes</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="109.3658" x="1926.7534" y="1572.265">llm_ch has items?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="1899.5856" y="1563.802">no</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="102.7775" x="1930.0476" y="2276.766"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="82.7775" x="1940.0476" y="2299.662">Close exp_ch</text><line style="stroke:#000000;stroke-width:1.5;" x1="1797.2786" x2="1797.2786" y1="59.33" y2="3611.937"/><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="162.5842" x="2481.6887" y="1048.924"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="142.5842" x="2491.6887" y="1071.82">Receive GeneratedUser</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="229.2612" x="2448.3501" y="1120.85"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="209.2612" x="2458.3501" y="1143.746">ProcessUser(user) → sqlite3_int64</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="154.784" x="2485.5888" y="1192.776"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="134.784" x="2495.5888" y="1215.672">Append → user_pool_</text><polygon fill="#DCE8D8" points="2488.6175,983.998,2637.344,983.998,2649.344,995.998,2637.344,1007.998,2488.6175,1007.998,2476.6175,995.998,2488.6175,983.998" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2566.9807" y="1020.894">yes</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.7266" x="2488.6175" y="1000.431">user_exp_ch has items?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2461.4497" y="991.968">no</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="283.2612" x="2420.3501" y="1316.128"/><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="226.957" x="2720.8611" y="1723.469"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="206.957" x="2730.8611" y="1746.365">Receive BreweryWithBeers Bundle</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="263.2532" x="2702.713" y="1795.395"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="243.2532" x="2712.713" y="1818.291">ProcessBrewery(brewery) → brewery_id</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="178.2848" x="2745.1972" y="1855.821"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="158.2848" x="2755.1972" y="1878.717">Append → brewery_pool_</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="226.8952" x="2720.892" y="1992.673"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="206.8952" x="2730.892" y="2015.569">Set beer.brewery_id = brewery_id</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="230.9869" x="2718.8461" y="2064.599"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="210.9869" x="2728.8461" y="2087.495">ProcessBeer(beer) → sqlite3_int64</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="156.3342" x="2756.1725" y="2136.525"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="136.3342" x="2766.1725" y="2159.421">Append → beer_pool_</text><polygon fill="#DCE8D8" points="2759.7081,1927.747,2908.9711,1927.747,2920.9711,1939.747,2908.9711,1951.747,2759.7081,1951.747,2747.7081,1939.747,2759.7081,1927.747" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2838.3396" y="1964.643">remaining</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.263" x="2759.7081" y="1944.18">For each beer in bundle?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="2717.0021" y="1935.717">done</text><polygon fill="#DCE8D8" points="2777.3557,1658.543,2891.3235,1658.543,2903.3235,1670.543,2891.3235,1682.543,2777.3557,1682.543,2765.3557,1670.543,2777.3557,1658.543" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2838.3396" y="1695.439">yes</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9678" x="2777.3557" y="1674.976">exp_ch has items?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2750.1879" y="1666.513">no</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="569.6161" x="2408.3501" y="2333.692"/><line style="stroke:#000000;stroke-width:1.5;" x1="2402.3501" x2="2402.3501" y1="59.33" y2="3611.937"/><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="123.1779" x="3050.8743" y="1795.432"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="103.1779" x="3060.8743" y="1818.328">Receive Location</text><rect fill="#EAF0E8" height="53.852" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="198.9941" x="3012.9662" y="1855.858"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="178.9941" x="3022.9662" y="1878.754">GetLocationContext(location,</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2064" x="3022.9662" y="1895.68">BreweryContextStrategy)</text><rect fill="#EAF0E8" height="36.926" rx="12.5" ry="12.5" style="stroke:#547461;stroke-width:0.5;" width="189.8386" x="3017.5439" y="1944.71"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="169.8386" x="3027.5439" y="1967.606">Send EnrichedCity → llm_ch</text><polygon fill="#DCE8D8" points="3057.4488,1730.506,3167.4776,1730.506,3179.4776,1742.506,3167.4776,1754.506,3057.4488,1754.506,3045.4488,1742.506,3057.4488,1730.506" style="stroke:#547461;stroke-width:0.5;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3116.4632" y="1767.402">yes</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.0289" x="3057.4488" y="1746.939">loc_ch has items?</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3030.281" y="1738.476">no</text><line style="stroke:#000000;stroke-width:1.5;" x1="2981.9662" x2="2981.9662" y1="59.33" y2="3611.937"/><line style="stroke:#000000;stroke-width:1.5;" x1="3242.9602" x2="3242.9602" y1="59.33" y2="3611.937"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="101.256" y2="121.256"/><polygon fill="#628A5B" points="203.3046,111.256,207.3046,121.256,211.3046,111.256,207.3046,115.256" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="265.571" y2="292.608"/><polygon fill="#628A5B" points="203.3046,282.608,207.3046,292.608,211.3046,282.608,207.3046,286.608" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="202.182" y2="228.645"/><polygon fill="#628A5B" points="203.3046,218.645,207.3046,228.645,211.3046,218.645,207.3046,222.645" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="256.5562" x2="268.5562" y1="190.182" y2="190.182"/><polygon fill="#628A5B" points="264.5562,262.608,268.5562,272.608,272.5562,262.608,268.5562,266.608" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="268.5562" x2="268.5562" y1="190.182" y2="336.608"/><line style="stroke:#628A5B;stroke-width:1;" x1="268.5562" x2="207.3046" y1="336.608" y2="336.608"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="336.608" y2="356.608"/><polygon fill="#628A5B" points="203.3046,346.608,207.3046,356.608,211.3046,346.608,207.3046,350.608" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="158.182" y2="178.182"/><polygon fill="#628A5B" points="203.3046,168.182,207.3046,178.182,211.3046,168.182,207.3046,172.182" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="393.534" y2="413.534"/><polygon fill="#628A5B" points="203.3046,403.534,207.3046,413.534,211.3046,403.534,207.3046,407.534" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="450.46" y2="470.46"/><polygon fill="#628A5B" points="203.3046,460.46,207.3046,470.46,211.3046,460.46,207.3046,464.46" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="507.386" y2="527.386"/><polygon fill="#628A5B" points="203.3046,517.386,207.3046,527.386,211.3046,517.386,207.3046,521.386" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="564.312" y2="586.238"/><polygon fill="#628A5B" points="203.3046,576.238,207.3046,586.238,211.3046,576.238,207.3046,580.238" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="623.164" y2="657.016"/><polygon fill="#628A5B" points="203.3046,647.016,207.3046,657.016,211.3046,647.016,207.3046,651.016" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="693.942" y2="725.868"/><polygon fill="#628A5B" points="203.3046,715.868,207.3046,725.868,211.3046,715.868,207.3046,719.868" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="3513.011" y2="3533.011"/><polygon fill="#628A5B" points="203.3046,3523.011,207.3046,3533.011,211.3046,3523.011,207.3046,3527.011" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="3569.937" y2="3589.937"/><polygon fill="#628A5B" points="203.3046,3579.937,207.3046,3589.937,211.3046,3579.937,207.3046,3583.937" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="819.72" y2="839.72"/><polygon fill="#628A5B" points="1391.7566,829.72,1395.7566,839.72,1399.7566,829.72,1395.7566,833.72" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1095.5665" x2="1095.5665" y1="1101.35" y2="1136.35"/><polygon fill="#628A5B" points="1091.5665,1126.35,1095.5665,1136.35,1099.5665,1126.35,1095.5665,1130.35" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1095.5665" x2="1095.5665" y1="919.572" y2="1064.424"/><polygon fill="#628A5B" points="1091.5665,1054.424,1095.5665,1064.424,1099.5665,1054.424,1095.5665,1058.424" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="893.572" y2="913.572"/><polygon fill="#628A5B" points="1391.7566,903.572,1395.7566,913.572,1399.7566,903.572,1395.7566,907.572" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="1379.054" y2="1399.054"/><polygon fill="#628A5B" points="1391.7566,1389.054,1395.7566,1399.054,1399.7566,1389.054,1395.7566,1393.054" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="1435.98" y2="1455.98"/><polygon fill="#628A5B" points="1391.7566,1445.98,1395.7566,1455.98,1399.7566,1445.98,1395.7566,1449.98" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="846.0446" x2="846.0446" y1="1916.747" y2="1951.747"/><polygon fill="#628A5B" points="842.0446,1941.747,846.0446,1951.747,850.0446,1941.747,846.0446,1945.747" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1045.6801" x2="1045.6801" y1="2077.562" y2="2112.562"/><polygon fill="#628A5B" points="1041.6801,2102.562,1045.6801,2112.562,1049.6801,2102.562,1045.6801,2106.562" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="846.0446" x2="846.0446" y1="1535.832" y2="1879.821"/><polygon fill="#628A5B" points="842.0446,1869.821,846.0446,1879.821,850.0446,1869.821,846.0446,1873.821" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="1509.832" y2="1529.832"/><polygon fill="#628A5B" points="1391.7566,1519.832,1395.7566,1529.832,1399.7566,1519.832,1395.7566,1523.832" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2396.618" y2="2420.081"/><polygon fill="#628A5B" points="1391.7566,2410.081,1395.7566,2420.081,1399.7566,2410.081,1395.7566,2414.081" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2457.007" y2="2477.007"/><polygon fill="#628A5B" points="1391.7566,2467.007,1395.7566,2477.007,1399.7566,2467.007,1395.7566,2471.007" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2761.503" y2="2781.503"/><polygon fill="#628A5B" points="1391.7566,2771.503,1395.7566,2781.503,1399.7566,2771.503,1395.7566,2775.503" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2818.429" y2="2838.429"/><polygon fill="#628A5B" points="1391.7566,2828.429,1395.7566,2838.429,1399.7566,2828.429,1395.7566,2832.429" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2892.281" y2="2912.281"/><polygon fill="#628A5B" points="1391.7566,2902.281,1395.7566,2912.281,1399.7566,2902.281,1395.7566,2906.281" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2949.207" y2="2969.207"/><polygon fill="#628A5B" points="1391.7566,2959.207,1395.7566,2969.207,1399.7566,2959.207,1395.7566,2963.207" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2690.181" y2="2724.577"/><polygon fill="#628A5B" points="1391.7566,2714.577,1395.7566,2724.577,1399.7566,2714.577,1395.7566,2718.577" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="3006.133" y2="3016.133"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1551.7429" y1="3016.133" y2="3016.133"/><polygon fill="#628A5B" points="1547.7429,2854.892,1551.7429,2844.892,1555.7429,2854.892,1551.7429,2850.892" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1551.7429" x2="1551.7429" y1="2678.181" y2="3016.133"/><line style="stroke:#628A5B;stroke-width:1;" x1="1551.7429" x2="1480.4689" y1="2678.181" y2="2678.181"/><polygon fill="#628A5B" points="1490.4689,2674.181,1480.4689,2678.181,1490.4689,2682.181,1486.4689,2678.181" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1311.0443" x2="1239.7703" y1="2678.181" y2="2678.181"/><polygon fill="#628A5B" points="1235.7703,2840.892,1239.7703,2850.892,1243.7703,2840.892,1239.7703,2844.892" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1239.7703" x2="1239.7703" y1="2678.181" y2="3028.133"/><line style="stroke:#628A5B;stroke-width:1;" x1="1239.7703" x2="1563.7429" y1="3028.133" y2="3028.133"/><line style="stroke:#628A5B;stroke-width:1;" x1="1563.7429" x2="1563.7429" y1="2562.859" y2="3028.133"/><line style="stroke:#628A5B;stroke-width:1;" x1="1563.7429" x2="1528.608" y1="2562.859" y2="2562.859"/><polygon fill="#628A5B" points="1538.608,2558.859,1528.608,2562.859,1538.608,2566.859,1534.608,2562.859" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2646.181" y2="2666.181"/><polygon fill="#628A5B" points="1391.7566,2656.181,1395.7566,2666.181,1399.7566,2656.181,1395.7566,2660.181" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2574.859" y2="2609.255"/><polygon fill="#628A5B" points="1391.7566,2599.255,1395.7566,2609.255,1399.7566,2599.255,1395.7566,2603.255" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1262.9052" x2="1215.7703" y1="2562.859" y2="2562.859"/><polygon fill="#628A5B" points="1211.7703,2799.466,1215.7703,2809.466,1219.7703,2799.466,1215.7703,2803.466" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1215.7703" x2="1215.7703" y1="2562.859" y2="3050.133"/><line style="stroke:#628A5B;stroke-width:1;" x1="1215.7703" x2="1395.7566" y1="3050.133" y2="3050.133"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="3050.133" y2="3070.133"/><polygon fill="#628A5B" points="1391.7566,3060.133,1395.7566,3070.133,1399.7566,3060.133,1395.7566,3064.133" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2530.859" y2="2550.859"/><polygon fill="#628A5B" points="1391.7566,2540.859,1395.7566,2550.859,1399.7566,2540.859,1395.7566,2544.859" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1273.193" x2="1273.193" y1="3347.159" y2="3367.159"/><polygon fill="#628A5B" points="1269.193,3357.159,1273.193,3367.159,1277.193,3357.159,1273.193,3361.159" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1310.5973" x2="1273.193" y1="3271.307" y2="3271.307"/><line style="stroke:#628A5B;stroke-width:1;" x1="1273.193" x2="1273.193" y1="3271.307" y2="3293.307"/><polygon fill="#628A5B" points="1269.193,3283.307,1273.193,3293.307,1277.193,3283.307,1273.193,3287.307" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1480.9159" x2="1518.3202" y1="3271.307" y2="3271.307"/><line style="stroke:#628A5B;stroke-width:1;" x1="1518.3202" x2="1518.3202" y1="3271.307" y2="3293.307"/><polygon fill="#628A5B" points="1514.3202,3283.307,1518.3202,3293.307,1522.3202,3283.307,1518.3202,3287.307" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1273.193" x2="1273.193" y1="3404.085" y2="3422.085"/><line style="stroke:#628A5B;stroke-width:1;" x1="1273.193" x2="1383.7566" y1="3422.085" y2="3422.085"/><polygon fill="#628A5B" points="1373.7566,3418.085,1383.7566,3422.085,1373.7566,3426.085,1377.7566,3422.085" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1518.3202" x2="1518.3202" y1="3330.233" y2="3422.085"/><line style="stroke:#628A5B;stroke-width:1;" x1="1518.3202" x2="1407.7566" y1="3422.085" y2="3422.085"/><polygon fill="#628A5B" points="1417.7566,3418.085,1407.7566,3422.085,1417.7566,3426.085,1413.7566,3422.085" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="3239.307" y2="3259.307"/><polygon fill="#628A5B" points="1391.7566,3249.307,1395.7566,3259.307,1399.7566,3249.307,1395.7566,3253.307" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="3151.059" y2="3185.455"/><polygon fill="#628A5B" points="1391.7566,3175.455,1395.7566,3185.455,1399.7566,3175.455,1395.7566,3179.455" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="3434.085" y2="3444.085"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1637.4025" y1="3444.085" y2="3444.085"/><polygon fill="#628A5B" points="1633.4025,3299.307,1637.4025,3289.307,1641.4025,3299.307,1637.4025,3295.307" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1637.4025" x2="1637.4025" y1="3139.059" y2="3444.085"/><line style="stroke:#628A5B;stroke-width:1;" x1="1637.4025" x2="1549.6891" y1="3139.059" y2="3139.059"/><polygon fill="#628A5B" points="1559.6891,3135.059,1549.6891,3139.059,1559.6891,3143.059,1555.6891,3139.059" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1241.8241" x2="1123.1479" y1="3139.059" y2="3139.059"/><polygon fill="#628A5B" points="1119.1479,3294.057,1123.1479,3304.057,1127.1479,3294.057,1123.1479,3298.057" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1123.1479" x2="1123.1479" y1="3139.059" y2="3461.085"/><line style="stroke:#628A5B;stroke-width:1;" x1="1123.1479" x2="207.3046" y1="3461.085" y2="3461.085"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="3461.085" y2="3476.085"/><polygon fill="#628A5B" points="203.3046,3466.085,207.3046,3476.085,211.3046,3466.085,207.3046,3470.085" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="3107.059" y2="3127.059"/><polygon fill="#628A5B" points="1391.7566,3117.059,1395.7566,3127.059,1399.7566,3117.059,1395.7566,3121.059" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2003.2946" y1="1041.424" y2="1076.424"/><polygon fill="#628A5B" points="1999.2946,1066.424,2003.2946,1076.424,2007.2946,1066.424,2003.2946,1070.424" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2003.2946" y1="1130.276" y2="1165.276"/><polygon fill="#628A5B" points="1999.2946,1155.276,2003.2946,1165.276,2007.2946,1155.276,2003.2946,1159.276" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2003.2946" y1="963.572" y2="1004.498"/><polygon fill="#628A5B" points="1999.2946,994.498,2003.2946,1004.498,2007.2946,994.498,2003.2946,998.498" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2003.2946" y1="1202.202" y2="1214.202"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2136.8541" y1="1214.202" y2="1214.202"/><polygon fill="#628A5B" points="2132.8541,1092.887,2136.8541,1082.887,2140.8541,1092.887,2136.8541,1088.887" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2136.8541" x2="2136.8541" y1="951.572" y2="1214.202"/><line style="stroke:#628A5B;stroke-width:1;" x1="2136.8541" x2="2087.3569" y1="951.572" y2="951.572"/><polygon fill="#628A5B" points="2097.3569,947.572,2087.3569,951.572,2097.3569,955.572,2093.3569,951.572" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1919.2323" x2="1869.7351" y1="951.572" y2="951.572"/><polygon fill="#628A5B" points="1865.7351,1078.887,1869.7351,1088.887,1873.7351,1078.887,1869.7351,1082.887" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1869.7351" x2="1869.7351" y1="951.572" y2="1226.202"/><line style="stroke:#628A5B;stroke-width:1;" x1="1869.7351" x2="2003.2946" y1="1226.202" y2="1226.202"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2003.2946" y1="1226.202" y2="1259.202"/><polygon fill="#628A5B" points="1999.2946,1249.202,2003.2946,1259.202,2007.2946,1249.202,2003.2946,1253.202" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="1651.154" y2="1686.154"/><polygon fill="#628A5B" points="1977.4363,1676.154,1981.4363,1686.154,1985.4363,1676.154,1981.4363,1680.154" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="1740.006" y2="1775.006"/><polygon fill="#628A5B" points="1977.4363,1765.006,1981.4363,1775.006,1985.4363,1765.006,1981.4363,1769.006" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="1954.21" y2="1989.21"/><polygon fill="#628A5B" points="1977.4363,1979.21,1981.4363,1989.21,1985.4363,1979.21,1981.4363,1983.21" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="2043.062" y2="2078.062"/><polygon fill="#628A5B" points="1977.4363,2068.062,1981.4363,2078.062,1985.4363,2068.062,1981.4363,2072.062" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="1876.358" y2="1917.284"/><polygon fill="#628A5B" points="1977.4363,1907.284,1981.4363,1917.284,1985.4363,1907.284,1981.4363,1911.284" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="2114.988" y2="2126.988"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="2362.5615" y1="2126.988" y2="2126.988"/><polygon fill="#628A5B" points="2358.5615,2005.673,2362.5615,1995.673,2366.5615,2005.673,2362.5615,2001.673" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2362.5615" x2="2362.5615" y1="1864.358" y2="2126.988"/><line style="stroke:#628A5B;stroke-width:1;" x1="2362.5615" x2="2081.3652" y1="1864.358" y2="1864.358"/><polygon fill="#628A5B" points="2091.3652,1860.358,2081.3652,1864.358,2091.3652,1868.358,2087.3652,1864.358" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1881.5074" x2="1834.2786" y1="1864.358" y2="1864.358"/><polygon fill="#628A5B" points="1830.2786,1991.673,1834.2786,2001.673,1838.2786,1991.673,1834.2786,1995.673" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1834.2786" x2="1834.2786" y1="1864.358" y2="2138.988"/><line style="stroke:#628A5B;stroke-width:1;" x1="1834.2786" x2="1981.4363" y1="2138.988" y2="2138.988"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="2138.988" y2="2185.914"/><polygon fill="#628A5B" points="1977.4363,2175.914,1981.4363,2185.914,1985.4363,2175.914,1981.4363,2179.914" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="1828.858" y2="1852.358"/><polygon fill="#628A5B" points="1977.4363,1842.358,1981.4363,1852.358,1985.4363,1842.358,1981.4363,1846.358" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="1579.832" y2="1614.228"/><polygon fill="#628A5B" points="1977.4363,1604.228,1981.4363,1614.228,1985.4363,1604.228,1981.4363,1608.228" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="2222.84" y2="2244.766"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="2383.3501" y1="2244.766" y2="2244.766"/><polygon fill="#628A5B" points="2379.3501,1908.284,2383.3501,1898.284,2387.3501,1908.284,2383.3501,1904.284" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2383.3501" x2="2383.3501" y1="1567.832" y2="2244.766"/><line style="stroke:#628A5B;stroke-width:1;" x1="2383.3501" x2="2048.1192" y1="1567.832" y2="1567.832"/><polygon fill="#628A5B" points="2058.1192,1563.832,2048.1192,1567.832,2058.1192,1571.832,2054.1192,1567.832" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1914.7534" x2="1816.2786" y1="1567.832" y2="1567.832"/><polygon fill="#628A5B" points="1812.2786,1894.284,1816.2786,1904.284,1820.2786,1894.284,1816.2786,1898.284" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1816.2786" x2="1816.2786" y1="1567.832" y2="2256.766"/><line style="stroke:#628A5B;stroke-width:1;" x1="1816.2786" x2="1981.4363" y1="2256.766" y2="2256.766"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="2256.766" y2="2276.766"/><polygon fill="#628A5B" points="1977.4363,2266.766,1981.4363,2276.766,1985.4363,2266.766,1981.4363,2270.766" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2562.9807" x2="2562.9807" y1="1085.85" y2="1120.85"/><polygon fill="#628A5B" points="2558.9807,1110.85,2562.9807,1120.85,2566.9807,1110.85,2562.9807,1114.85" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2562.9807" x2="2562.9807" y1="1157.776" y2="1192.776"/><polygon fill="#628A5B" points="2558.9807,1182.776,2562.9807,1192.776,2566.9807,1182.776,2562.9807,1186.776" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2562.9807" x2="2562.9807" y1="1007.998" y2="1048.924"/><polygon fill="#628A5B" points="2558.9807,1038.924,2562.9807,1048.924,2566.9807,1038.924,2562.9807,1042.924" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2562.9807" x2="2562.9807" y1="1229.702" y2="1239.702"/><line style="stroke:#628A5B;stroke-width:1;" x1="2562.9807" x2="2689.6114" y1="1239.702" y2="1239.702"/><polygon fill="#628A5B" points="2685.6114,1128.85,2689.6114,1118.85,2693.6114,1128.85,2689.6114,1124.85" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2689.6114" x2="2689.6114" y1="995.998" y2="1239.702"/><line style="stroke:#628A5B;stroke-width:1;" x1="2689.6114" x2="2649.344" y1="995.998" y2="995.998"/><polygon fill="#628A5B" points="2659.344,991.998,2649.344,995.998,2659.344,999.998,2655.344,995.998" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2476.6175" x2="2436.3501" y1="995.998" y2="995.998"/><polygon fill="#628A5B" points="2432.3501,1114.85,2436.3501,1124.85,2440.3501,1114.85,2436.3501,1118.85" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2436.3501" x2="2436.3501" y1="995.998" y2="1251.702"/><line style="stroke:#628A5B;stroke-width:1;" x1="2436.3501" x2="2562.9807" y1="1251.702" y2="1251.702"/><line style="stroke:#628A5B;stroke-width:1;" x1="2562.9807" x2="2562.9807" y1="1251.702" y2="1316.128"/><polygon fill="#628A5B" points="2558.9807,1306.128,2562.9807,1316.128,2566.9807,1306.128,2562.9807,1310.128" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="1760.395" y2="1795.395"/><polygon fill="#628A5B" points="2830.3396,1785.395,2834.3396,1795.395,2838.3396,1785.395,2834.3396,1789.395" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="1832.321" y2="1855.821"/><polygon fill="#628A5B" points="2830.3396,1845.821,2834.3396,1855.821,2838.3396,1845.821,2834.3396,1849.821" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="2029.599" y2="2064.599"/><polygon fill="#628A5B" points="2830.3396,2054.599,2834.3396,2064.599,2838.3396,2054.599,2834.3396,2058.599" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="2101.525" y2="2136.525"/><polygon fill="#628A5B" points="2830.3396,2126.525,2834.3396,2136.525,2838.3396,2126.525,2834.3396,2130.525" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="1951.747" y2="1992.673"/><polygon fill="#628A5B" points="2830.3396,1982.673,2834.3396,1992.673,2838.3396,1982.673,2834.3396,1986.673" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="2173.451" y2="2185.451"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2961.8331" y1="2185.451" y2="2185.451"/><polygon fill="#628A5B" points="2957.8331,2072.599,2961.8331,2062.599,2965.8331,2072.599,2961.8331,2068.599" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2961.8331" x2="2961.8331" y1="1939.747" y2="2185.451"/><line style="stroke:#628A5B;stroke-width:1;" x1="2961.8331" x2="2920.9711" y1="1939.747" y2="1939.747"/><polygon fill="#628A5B" points="2930.9711,1935.747,2920.9711,1939.747,2930.9711,1943.747,2926.9711,1939.747" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2747.7081" x2="2706.8461" y1="1939.747" y2="1939.747"/><polygon fill="#628A5B" points="2702.8461,2058.599,2706.8461,2068.599,2710.8461,2058.599,2706.8461,2062.599" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2706.8461" x2="2706.8461" y1="1939.747" y2="2197.451"/><line style="stroke:#628A5B;stroke-width:1;" x1="2706.8461" x2="2970.9662" y1="2197.451" y2="2197.451"/><line style="stroke:#628A5B;stroke-width:1;" x1="2970.9662" x2="2970.9662" y1="1670.543" y2="2197.451"/><line style="stroke:#628A5B;stroke-width:1;" x1="2970.9662" x2="2903.3235" y1="1670.543" y2="1670.543"/><polygon fill="#628A5B" points="2913.3235,1666.543,2903.3235,1670.543,2913.3235,1674.543,2909.3235,1670.543" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="1892.747" y2="1927.747"/><polygon fill="#628A5B" points="2830.3396,1917.747,2834.3396,1927.747,2838.3396,1917.747,2834.3396,1921.747" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="1682.543" y2="1723.469"/><polygon fill="#628A5B" points="2830.3396,1713.469,2834.3396,1723.469,2838.3396,1713.469,2834.3396,1717.469" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2765.3557" x2="2682.8461" y1="1670.543" y2="1670.543"/><polygon fill="#628A5B" points="2678.8461,1930.247,2682.8461,1940.247,2686.8461,1930.247,2682.8461,1934.247" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2682.8461" x2="2682.8461" y1="1670.543" y2="2221.451"/><line style="stroke:#628A5B;stroke-width:1;" x1="2682.8461" x2="2834.3396" y1="2221.451" y2="2221.451"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="2221.451" y2="2333.692"/><polygon fill="#628A5B" points="2830.3396,2323.692,2834.3396,2333.692,2838.3396,2323.692,2834.3396,2327.692" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="3112.4632" x2="3112.4632" y1="1832.358" y2="1855.858"/><polygon fill="#628A5B" points="3108.4632,1845.858,3112.4632,1855.858,3116.4632,1845.858,3112.4632,1849.858" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="3112.4632" x2="3112.4632" y1="1909.71" y2="1944.71"/><polygon fill="#628A5B" points="3108.4632,1934.71,3112.4632,1944.71,3116.4632,1934.71,3112.4632,1938.71" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="3112.4632" x2="3112.4632" y1="1754.506" y2="1795.432"/><polygon fill="#628A5B" points="3108.4632,1785.432,3112.4632,1795.432,3116.4632,1785.432,3112.4632,1789.432" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="3112.4632" x2="3112.4632" y1="1981.636" y2="1993.636"/><line style="stroke:#628A5B;stroke-width:1;" x1="3112.4632" x2="3223.9602" y1="1993.636" y2="1993.636"/><polygon fill="#628A5B" points="3219.9602,1872.321,3223.9602,1862.321,3227.9602,1872.321,3223.9602,1868.321" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="3223.9602" x2="3223.9602" y1="1742.506" y2="1993.636"/><line style="stroke:#628A5B;stroke-width:1;" x1="3223.9602" x2="3179.4776" y1="1742.506" y2="1742.506"/><polygon fill="#628A5B" points="3189.4776,1738.506,3179.4776,1742.506,3189.4776,1746.506,3185.4776,1742.506" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="3045.4488" x2="3000.9662" y1="1742.506" y2="1742.506"/><polygon fill="#628A5B" points="2996.9662,1867.071,3000.9662,1877.071,3004.9662,1867.071,3000.9662,1871.071" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="3000.9662" x2="3000.9662" y1="1742.506" y2="2023.136"/><line style="stroke:#628A5B;stroke-width:1;" x1="3000.9662" x2="1045.6801" y1="2023.136" y2="2023.136"/><line style="stroke:#628A5B;stroke-width:1;" x1="1045.6801" x2="1045.6801" y1="2023.136" y2="2040.636"/><polygon fill="#628A5B" points="1041.6801,2030.636,1045.6801,2040.636,1049.6801,2030.636,1045.6801,2034.636" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="207.3046" y1="762.794" y2="767.794"/><line style="stroke:#628A5B;stroke-width:1;" x1="207.3046" x2="1395.7566" y1="767.794" y2="767.794"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="767.794" y2="782.794"/><polygon fill="#628A5B" points="1391.7566,772.794,1395.7566,782.794,1399.7566,772.794,1395.7566,776.794" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1390.1932" x2="1390.1932" y1="919.572" y2="923.572"/><line style="stroke:#628A5B;stroke-width:1;" x1="1390.1932" x2="2003.2946" y1="923.572" y2="923.572"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2003.2946" y1="923.572" y2="939.572"/><polygon fill="#628A5B" points="1999.2946,929.572,2003.2946,939.572,2007.2946,929.572,2003.2946,933.572" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1690.3833" x2="1690.3833" y1="919.572" y2="923.572"/><line style="stroke:#628A5B;stroke-width:1;" x1="1690.3833" x2="2562.9807" y1="923.572" y2="923.572"/><line style="stroke:#628A5B;stroke-width:1;" x1="2562.9807" x2="2562.9807" y1="923.572" y2="983.998"/><polygon fill="#628A5B" points="2558.9807,973.998,2562.9807,983.998,2566.9807,973.998,2562.9807,977.998" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1095.5665" x2="1095.5665" y1="1173.276" y2="1302.128"/><line style="stroke:#628A5B;stroke-width:1;" x1="1095.5665" x2="2427.3501" y1="1302.128" y2="1302.128"/><line style="stroke:#628A5B;stroke-width:1;" x1="2427.3501" x2="2427.3501" y1="1302.128" y2="1316.128"/><polygon fill="#628A5B" points="2423.3501,1306.128,2427.3501,1316.128,2431.3501,1306.128,2427.3501,1310.128" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2003.2946" y1="1296.128" y2="1302.128"/><line style="stroke:#628A5B;stroke-width:1;" x1="2003.2946" x2="2427.3501" y1="1302.128" y2="1302.128"/><line style="stroke:#628A5B;stroke-width:1;" x1="2427.3501" x2="2427.3501" y1="1302.128" y2="1316.128"/><polygon fill="#628A5B" points="2423.3501,1306.128,2427.3501,1316.128,2431.3501,1306.128,2427.3501,1310.128" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2427.3501" x2="2427.3501" y1="1322.128" y2="1327.128"/><line style="stroke:#628A5B;stroke-width:1;" x1="2427.3501" x2="1395.7566" y1="1327.128" y2="1327.128"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="1327.128" y2="1342.128"/><polygon fill="#628A5B" points="1391.7566,1332.128,1395.7566,1342.128,1399.7566,1332.128,1395.7566,1336.128" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1045.6801" x2="1045.6801" y1="1535.832" y2="1539.832"/><line style="stroke:#628A5B;stroke-width:1;" x1="1045.6801" x2="3112.4632" y1="1539.832" y2="1539.832"/><line style="stroke:#628A5B;stroke-width:1;" x1="3112.4632" x2="3112.4632" y1="1539.832" y2="1730.506"/><polygon fill="#628A5B" points="3108.4632,1720.506,3112.4632,1730.506,3116.4632,1720.506,3112.4632,1724.506" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1368.3349" x2="1368.3349" y1="1535.832" y2="1539.832"/><line style="stroke:#628A5B;stroke-width:1;" x1="1368.3349" x2="1981.4363" y1="1539.832" y2="1539.832"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="1539.832" y2="1555.832"/><polygon fill="#628A5B" points="1977.4363,1545.832,1981.4363,1555.832,1985.4363,1545.832,1981.4363,1549.832" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1786.2786" x2="1786.2786" y1="1535.832" y2="1539.832"/><line style="stroke:#628A5B;stroke-width:1;" x1="1786.2786" x2="2834.3396" y1="1539.832" y2="1539.832"/><line style="stroke:#628A5B;stroke-width:1;" x1="2834.3396" x2="2834.3396" y1="1539.832" y2="1658.543"/><polygon fill="#628A5B" points="2830.3396,1648.543,2834.3396,1658.543,2838.3396,1648.543,2834.3396,1652.543" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="846.0446" x2="846.0446" y1="1988.673" y2="2319.692"/><line style="stroke:#628A5B;stroke-width:1;" x1="846.0446" x2="2415.3501" y1="2319.692" y2="2319.692"/><line style="stroke:#628A5B;stroke-width:1;" x1="2415.3501" x2="2415.3501" y1="2319.692" y2="2333.692"/><polygon fill="#628A5B" points="2411.3501,2323.692,2415.3501,2333.692,2419.3501,2323.692,2415.3501,2327.692" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1045.6801" x2="1045.6801" y1="2149.488" y2="2319.692"/><line style="stroke:#628A5B;stroke-width:1;" x1="1045.6801" x2="2427.3501" y1="2319.692" y2="2319.692"/><line style="stroke:#628A5B;stroke-width:1;" x1="2427.3501" x2="2427.3501" y1="2319.692" y2="2333.692"/><polygon fill="#628A5B" points="2423.3501,2323.692,2427.3501,2333.692,2431.3501,2323.692,2427.3501,2327.692" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="1981.4363" y1="2313.692" y2="2319.692"/><line style="stroke:#628A5B;stroke-width:1;" x1="1981.4363" x2="2427.3501" y1="2319.692" y2="2319.692"/><line style="stroke:#628A5B;stroke-width:1;" x1="2427.3501" x2="2427.3501" y1="2319.692" y2="2333.692"/><polygon fill="#628A5B" points="2423.3501,2323.692,2427.3501,2333.692,2431.3501,2323.692,2427.3501,2327.692" style="stroke:#628A5B;stroke-width:1;"/><line style="stroke:#628A5B;stroke-width:1;" x1="2427.3501" x2="2427.3501" y1="2339.692" y2="2344.692"/><line style="stroke:#628A5B;stroke-width:1;" x1="2427.3501" x2="1395.7566" y1="2344.692" y2="2344.692"/><line style="stroke:#628A5B;stroke-width:1;" x1="1395.7566" x2="1395.7566" y1="2344.692" y2="2359.692"/><polygon fill="#628A5B" points="1391.7566,2349.692,1395.7566,2359.692,1399.7566,2349.692,1395.7566,2353.692" style="stroke:#628A5B;stroke-width:1;"/><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="28.5837" x="355.2207" y="72.226">Main</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.2797" x="1221.5121" y="72.226">Orchestrator</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="71.9356" x="2063.8466" y="72.226">LLM Worker</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="87.3536" x="2648.4814" y="72.226">SQLite Worker</text><text fill="#28342A" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="151.551" x="3036.6877" y="72.226">Enrichment Workers (xN)</text><?plantuml-src pLZRRYD547sVhoW52UnL2Bl9xX8cGiXsd138ZJXBG8faTMRATfDnzz3TpWNj0qyy8mG_k5z2zMLkjfCD2n9UhHnxkggxBkTKrRI-vY9dYaqXnH6RPMPF2dFCfWXhkqSmO4AlHNgPp83_Wl1YgxPekCcmKlzUPjSJUREsJC8fRpwlBLsnv7giv4oaFPb91H_jTVPwUryiFpk8R6vllTpiBDl_8O6EKl8sBBxUtEwywjON4yDlkBdlpflIx-mzxsylavGgHHMaNhty_ENh5qkaTZcRIf4kRBlRws_lRZ-YyEZknzBW-orrKalsYLoeu7o2qEMenamP5B3B38DJdcF61SAxN_yiJGAoQKmRHj7R8yR5sqWRKedYKwOqTjHuDaLXT8kfSR8Ez7dJtedu25e7uePbFBMFz5TjC1CwfNMFkXq1n3fFCpcEOwIig1rweetC8ymqGal8TeGYvQCeFX3SG6-cilrCNh5iO9X1-1WECpPbDW8avfxjH75tnhCKTW-0YvymCNRNAFv6It4e6SKWZktVGvammwNGhRMi-Bhn4mcjaT4Bqbr4DJ3t6PBu5Nt_LBiVfK8KzuNYoSG6O83gXYSOnwSABvYQbhezbaomPTM7NfqK1QK651zF37d-xDbn_-BPinYi2dWPI2MG40Z450fB8I5uuvtP8AKBVasvIZa3FPjEcUAaCw8aKvI1hE4A8MSP6Zg7AII54HgoWx8XKaYO-pfsCStkWHbmEPtb6pRmzcICVF0vfP3uElWvumRxTxbKXQTpNfpaA3GClZiaEMkee1oGpTRMBeuvhP6fN8m9UKPHQM5kcLOJUOEA5e1CWH6_GVguCpDomDpd5EpAehY2Qm7K4qMUQDgGyXt7PpFHicdv1DxzzVl_-vziEFswC-Z3SyUbDuF-6UptZ_jddVE3a-ELiF1jFNXl8nkzDnhLwOHfR6aspJDCXoLBB3zw2Yt_khRgODgRCCfofYz5QqPwmooR3fF9EhWVU9VJ3viCGkKrfNdkD2e1XrBcCGniUajQmhlV_e3QRhOonBrCKbbeFBMR0XjJER9R7nuUmGKzGRVnxOGJoEes0Ra4XCkfhKDSbrM8zZx312tc2Wjs_EDz54YMeWr8guX1-rBS4E5ifGphldIHlFEYK4gjLkM93uKL9A5Wd2rnJSyAgQPdWK_BdVCgJt2kOLYm-5J91BLs3jhTsivWxNY-DUJ2l7uP93jvRhqh_Scbp8QBxbWPb-i5O7qZkO0gH-lGy6h5-Fh2yRLxrh_ed_r8hQRRdsTkJqwlgFIar6YChAfQYZPCL7jXPfkM7C4j-RUn4ivPRdSLtgAwxmZNrZw4vIJb25uG_TzmtEzLetVne8d_ghy6j12-xuxRDIPulGzXk2cUz7nRBNc-Vba4AwmCh4Sulc_NsUvDem3P4ScvL5QiUPulniLHOj6vUZoUNkcUNEJg9bFM6fKkU5m5ePWsbbSzhtpWfXpCVAylmXJ7_b4OdIu5m9NVVHsgEMWOvfDXE-mMlDcZAGPfG07jDY6UbQDKS4pXbC91hFFk-MJwMSkRlAVar8zTxgIGDe36mEB_xSzeLYOb35CHJ8Yx8zAl9Y8lM4uXvP4XRcHSgtJFU_Pev89-nnZhP5cQtV17zIJa0Qw8VHbwyGfFgHJOZcee3E8Nt4pi3XgwJiy1iceyIrotuxyW8s7iBR3p9TKiLgIA8brwRiT96XEh2aUoTj1CPahHpo1NADe9anljKgq9HRR46ChMHZGNnmVQuJ_hX4zkWWz4gjaE2nO4NtnJ33-6F5tiYCLQQ8fBWMm3GSqYfFH140_GED6DwZpuSk7mcgqEUVX8wvup5UlDUn5L_rr3Ru2jAysa6IQ7aCeQag5N50B5RG4M2xPSvhFC4gF-Ih9AWyAc6nHwN_TxtnuSDoU40VuyiwnXcVFAJEW5ooEBNjC-y-YpBjkuhyw0q9jWSis5dmpi870GdknoIZs_cZLh_ANeQCt7ehWck42RSDsgPaHRsEUvq9oH2KQL-39YnC44JHkKe-fw4quRcjvGMsrNvUUFIxmw7PJYtNBcnUTyIjYcIOYqmlvElEhsjW-LvSqrXpdQDpf2CBbfwZgOufX7NYC2iuiTWlLF6is3xBBftDDxeOci4fcs79aiWOxtL-qzsNBZZDaELbBZOLZtIi0rCx8Kt4VC99DQXVTv3d2ZAd4fFDZAKWbsOiUQXiEelMnpumFU4LFzFL0GcRztgy7KkrIW5ErdOJ7j-rwC1dNb_ZWpgiixJvjhdhki5iInBLf8FnO4WFBHgiBolDyvspsvM96R6d_l6kznyTJhkDx9qT71kRzSqq-uMYlkOxaOILWhxu6BXcpn_0DCzTfEv2vg_mO0?></g></svg> |