mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-05-31 17:53:59 +00:00
1 line
184 KiB
XML
1 line
184 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="CLASS" height="2895px" preserveAspectRatio="none" style="width:10982px;height:2895px;background:#FFFFFF;" version="1.1" viewBox="0 0 10982 2895" width="10982px" zoomAndPan="magnify"><defs/><g><!--cluster Domain--><g class="cluster" data-qualified-name="Domain" data-source-line="13" id="ent0002"><path d="M4381.5,1936.36 L4457.1786,1936.36 A3.75,3.75 0 0 1 4459.6786,1938.86 L4466.6786,1968.4 L10972.5,1968.4 A2.5,2.5 0 0 1 10975,1970.9 L10975,2885.8 A2.5,2.5 0 0 1 10972.5,2888.3 L4381.5,2888.3 A2.5,2.5 0 0 1 4379,2885.8 L4379,1938.86 A2.5,2.5 0 0 1 4381.5,1936.36" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="4379" x2="4466.6786" y1="1968.4" y2="1968.4"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="74.6786" x="4383" y="1958.2">Domain</text></g><!--cluster Domain Models--><g class="cluster" data-qualified-name="Domain.Domain Models" data-source-line="14" id="ent0003"><path d="M5182.5,1989.36 L5333.9039,1989.36 A3.75,3.75 0 0 1 5336.4039,1991.86 L5343.4039,2021.4 L7672.5,2021.4 A2.5,2.5 0 0 1 7675,2023.9 L7675,2835.76 A2.5,2.5 0 0 1 7672.5,2838.26 L5182.5,2838.26 A2.5,2.5 0 0 1 5180,2835.76 L5180,1991.86 A2.5,2.5 0 0 1 5182.5,1989.36" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="5180" x2="5343.4039" y1="2021.4" y2="2021.4"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="150.4039" x="5184" y="2011.2">Domain Models</text></g><!--cluster Domain: Application Configuration--><g class="cluster" data-qualified-name="Domain.Domain. Application Configuration" data-source-line="130" id="ent0020"><path d="M4405.5,2041.44 L4744.3545,2041.44 A3.75,3.75 0 0 1 4746.8545,2043.94 L4753.8545,2073.48 L5153.5,2073.48 A2.5,2.5 0 0 1 5156,2075.98 L5156,2861.8 A2.5,2.5 0 0 1 5153.5,2864.3 L4405.5,2864.3 A2.5,2.5 0 0 1 4403,2861.8 L4403,2043.94 A2.5,2.5 0 0 1 4405.5,2041.44" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="4403" x2="4753.8545" y1="2073.48" y2="2073.48"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="337.8545" x="4407" y="2063.28">Domain: Application Configuration</text></g><!--cluster Domain Policy--><g class="cluster" data-qualified-name="Domain.Domain Policy" data-source-line="164" id="ent0028"><path d="M7701.5,1989.36 L7841.4043,1989.36 A3.75,3.75 0 0 1 7843.9043,1991.86 L7850.9043,2021.4 L10948.5,2021.4 A2.5,2.5 0 0 1 10951,2023.9 L10951,2592.52 A2.5,2.5 0 0 1 10948.5,2595.02 L7701.5,2595.02 A2.5,2.5 0 0 1 7699,2592.52 L7699,1991.86 A2.5,2.5 0 0 1 7701.5,1989.36" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="7699" x2="7850.9043" y1="2021.4" y2="2021.4"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="138.9043" x="7703" y="2011.2">Domain Policy</text></g><!--cluster Infrastructure--><g class="cluster" data-qualified-name="Infrastructure" data-source-line="245" id="ent0039"><path d="M8.5,634.84 L147.7238,634.84 A3.75,3.75 0 0 1 150.2238,637.34 L157.2238,666.88 L4352.5,666.88 A2.5,2.5 0 0 1 4355,669.38 L4355,2616.52 A2.5,2.5 0 0 1 4352.5,2619.02 L8.5,2619.02 A2.5,2.5 0 0 1 6,2616.52 L6,637.34 A2.5,2.5 0 0 1 8.5,634.84" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6" x2="157.2238" y1="666.88" y2="666.88"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="138.2238" x="10" y="656.68">Infrastructure</text></g><!--cluster Logging--><g class="cluster" data-qualified-name="Infrastructure.Logging" data-source-line="247" id="ent0040"><path d="M32.5,831.06 L110.4356,831.06 A3.75,3.75 0 0 1 112.9356,833.56 L119.9356,863.1 L953.5,863.1 A2.5,2.5 0 0 1 956,865.6 L956,2592.52 A2.5,2.5 0 0 1 953.5,2595.02 L32.5,2595.02 A2.5,2.5 0 0 1 30,2592.52 L30,833.56 A2.5,2.5 0 0 1 32.5,831.06" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="30" x2="119.9356" y1="863.1" y2="863.1"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="76.9356" x="34" y="852.9">Logging</text></g><!--cluster Pipeline Channel--><g class="cluster" data-qualified-name="Infrastructure.Pipeline Channel" data-source-line="298" id="ent0051"><path d="M982.5,1950.3 L1147.1494,1950.3 A3.75,3.75 0 0 1 1149.6494,1952.8 L1156.6494,1982.34 L1381.5,1982.34 A2.5,2.5 0 0 1 1384,1984.84 L1384,2295.2 A2.5,2.5 0 0 1 1381.5,2297.7 L982.5,2297.7 A2.5,2.5 0 0 1 980,2295.2 L980,1952.8 A2.5,2.5 0 0 1 982.5,1950.3" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="980" x2="1156.6494" y1="1982.34" y2="1982.34"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="163.6494" x="984" y="1972.14">Pipeline Channel</text></g><!--cluster Data Preloading--><g class="cluster" data-qualified-name="Infrastructure.Data Preloading" data-source-line="314" id="ent0053"><path d="M982.5,805.02 L1139.0092,805.02 A3.75,3.75 0 0 1 1141.5092,807.52 L1148.5092,837.06 L1779.5,837.06 A2.5,2.5 0 0 1 1782,839.56 L1782,1641.5 A2.5,2.5 0 0 1 1779.5,1644 L982.5,1644 A2.5,2.5 0 0 1 980,1641.5 L980,807.52 A2.5,2.5 0 0 1 982.5,805.02" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="980" x2="1148.5092" y1="837.06" y2="837.06"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="155.5092" x="984" y="826.86">Data Preloading</text></g><!--cluster Enrichment--><g class="cluster" data-qualified-name="Infrastructure.Enrichment" data-source-line="332" id="ent0056"><path d="M1808.5,831.06 L1923.4693,831.06 A3.75,3.75 0 0 1 1925.9693,833.56 L1932.9693,863.1 L2431.5,863.1 A2.5,2.5 0 0 1 2434,865.6 L2434,2540.44 A2.5,2.5 0 0 1 2431.5,2542.94 L1808.5,2542.94 A2.5,2.5 0 0 1 1806,2540.44 L1806,833.56 A2.5,2.5 0 0 1 1808.5,831.06" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="1806" x2="1932.9693" y1="863.1" y2="863.1"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="113.9693" x="1810" y="852.9">Enrichment</text></g><!--cluster Data Generation--><g class="cluster" data-qualified-name="Infrastructure.Data Generation" data-source-line="357" id="ent0061"><path d="M2460.5,687.84 L2622.9553,687.84 A3.75,3.75 0 0 1 2625.4553,690.34 L2632.4553,719.88 L3602.5,719.88 A2.5,2.5 0 0 1 3605,722.38 L3605,2540.44 A2.5,2.5 0 0 1 3602.5,2542.94 L2460.5,2542.94 A2.5,2.5 0 0 1 2458,2540.44 L2458,690.34 A2.5,2.5 0 0 1 2460.5,687.84" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="2458" x2="2632.4553" y1="719.88" y2="719.88"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="161.4553" x="2462" y="709.68">Data Generation</text></g><!--cluster Data Export--><g class="cluster" data-qualified-name="Infrastructure.Data Export" data-source-line="403" id="ent0067"><path d="M3631.5,765.96 L3748.6495,765.96 A3.75,3.75 0 0 1 3751.1495,768.46 L3758.1495,798 L4328.5,798 A2.5,2.5 0 0 1 4331,800.5 L4331,2527.42 A2.5,2.5 0 0 1 4328.5,2529.92 L3631.5,2529.92 A2.5,2.5 0 0 1 3629,2527.42 L3629,768.46 A2.5,2.5 0 0 1 3631.5,765.96" fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="3629" x2="3758.1495" y1="798" y2="798"/><text fill="#000000" font-family="'DM Sans'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="116.1495" x="3633" y="787.8">Data Export</text></g><!--class Location--><g class="entity" data-qualified-name="Domain.Domain Models.Location" data-source-line="16" id="ent0004"><rect fill="#F1F1F1" height="260.36" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="402.9709" x="5869.51" y="2344.7"/><ellipse cx="6026.1579" cy="2362.72" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M6028.9645,2369.8001 Q6028.2809,2370.1516 6027.529,2370.3274 Q6026.777,2370.5032 6025.9469,2370.5032 Q6022.9977,2370.5032 6021.445,2368.5598 Q6019.8922,2366.6165 6019.8922,2362.9446 Q6019.8922,2359.263 6021.445,2357.3196 Q6022.9977,2355.3763 6025.9469,2355.3763 Q6026.777,2355.3763 6027.5387,2355.552 Q6028.3005,2355.7278 6028.9645,2356.0794 L6028.9645,2359.2825 Q6028.2223,2358.5989 6027.5241,2358.2815 Q6026.8258,2357.9641 6026.0837,2357.9641 Q6024.5016,2357.9641 6023.696,2359.219 Q6022.8903,2360.4739 6022.8903,2362.9446 Q6022.8903,2365.4055 6023.696,2366.6604 Q6024.5016,2367.9153 6026.0837,2367.9153 Q6026.8258,2367.9153 6027.5241,2367.5979 Q6028.2223,2367.2805 6028.9645,2366.597 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="80.6751" x="6048.1579" y="2369.54">Location</text><line style="stroke:#181818;stroke-width:0.5;" x1="5870.51" x2="6271.4809" y1="2380.74" y2="2380.74"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5880.51" cy="2399.26" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="141.0404" x="5890.51" y="2404.58">city : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5880.51" cy="2425.3" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="248.4106" x="5890.51" y="2430.62">state_province : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5880.51" cy="2451.34" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="200.4755" x="5890.51" y="2456.66">iso3166_2 : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5880.51" cy="2477.38" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="178.4455" x="5890.51" y="2482.7">country : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5880.51" cy="2503.42" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="195.1905" x="5890.51" y="2508.74">iso3166_1 : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5880.51" cy="2529.46" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="375.9709" x="5890.51" y="2534.78">local_languages : std::vector<std::string></text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5880.51" cy="2555.5" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="150.0751" x="5890.51" y="2560.82">latitude : double</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5880.51" cy="2581.54" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="165.8452" x="5890.51" y="2586.86">longitude : double</text><line style="stroke:#181818;stroke-width:0.5;" x1="5870.51" x2="6271.4809" y1="2597.06" y2="2597.06"/></g><!--class LocationContext--><g class="entity" data-qualified-name="Domain.Domain Models.LocationContext" data-source-line="27" id="ent0005"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="307.7851" x="5527.11" y="2409.8"/><ellipse cx="5598.845" cy="2427.82" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M5601.6516,2434.9001 Q5600.968,2435.2516 5600.216,2435.4274 Q5599.4641,2435.6032 5598.634,2435.6032 Q5595.6848,2435.6032 5594.1321,2433.6598 Q5592.5793,2431.7165 5592.5793,2428.0446 Q5592.5793,2424.363 5594.1321,2422.4196 Q5595.6848,2420.4763 5598.634,2420.4763 Q5599.4641,2420.4763 5600.2258,2420.652 Q5600.9875,2420.8278 5601.6516,2421.1794 L5601.6516,2424.3825 Q5600.9094,2423.6989 5600.2112,2423.3815 Q5599.5129,2423.0641 5598.7707,2423.0641 Q5597.1887,2423.0641 5596.383,2424.319 Q5595.5774,2425.5739 5595.5774,2428.0446 Q5595.5774,2430.5055 5596.383,2431.7604 Q5597.1887,2433.0153 5598.7707,2433.0153 Q5599.5129,2433.0153 5600.2112,2432.6979 Q5600.9094,2432.3805 5601.6516,2431.697 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="155.3152" x="5620.845" y="2434.64">LocationContext</text><line style="stroke:#181818;stroke-width:0.5;" x1="5528.11" x2="5833.8951" y1="2445.84" y2="2445.84"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5538.11" cy="2464.36" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="142.8154" x="5548.11" y="2469.68">text : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5538.11" cy="2490.4" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="280.7851" x="5548.11" y="2495.72">completeness : Completeness</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5538.11" cy="2516.44" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="179.5602" x="5548.11" y="2521.76">char_count : size_t</text><line style="stroke:#181818;stroke-width:0.5;" x1="5528.11" x2="5833.8951" y1="2531.96" y2="2531.96"/></g><!--class Completeness--><g class="entity" data-qualified-name="Domain.Domain Models.Completeness" data-source-line="33" id="ent0006"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="168.51" x="5596.74" y="2692.1"/><ellipse cx="5612.74" cy="2710.12" fill="#EB937F" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M5617.4627,2717.62 L5608.3806,2717.62 L5608.3806,2703.0399 L5617.4627,2703.0399 L5617.4627,2705.579 L5611.2615,2705.579 L5611.2615,2708.7235 L5616.8767,2708.7235 L5616.8767,2711.2626 L5611.2615,2711.2626 L5611.2615,2715.0809 L5617.4627,2715.0809 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="134.51" x="5627.74" y="2716.94">Completeness</text><line style="stroke:#181818;stroke-width:0.5;" x1="5597.74" x2="5764.25" y1="2728.14" y2="2728.14"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="31.09" x="5602.74" y="2751.98">Full</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="57.8552" x="5602.74" y="2778.02">Partial</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="66.5301" x="5602.74" y="2804.06">Absent</text><line style="stroke:#181818;stroke-width:0.5;" x1="5597.74" x2="5764.25" y1="2814.26" y2="2814.26"/></g><!--class EnrichedCity--><g class="entity" data-qualified-name="Domain.Domain Models.EnrichedCity" data-source-line="39" id="ent0007"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="268.7204" x="5786.64" y="2086.44"/><ellipse cx="5856.5576" cy="2104.46" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M5859.3643,2111.5401 Q5858.6807,2111.8916 5857.9287,2112.0674 Q5857.1768,2112.2432 5856.3467,2112.2432 Q5853.3975,2112.2432 5851.8447,2110.2998 Q5850.292,2108.3565 5850.292,2104.6846 Q5850.292,2101.003 5851.8447,2099.0596 Q5853.3975,2097.1163 5856.3467,2097.1163 Q5857.1768,2097.1163 5857.9385,2097.292 Q5858.7002,2097.4678 5859.3643,2097.8194 L5859.3643,2101.0225 Q5858.6221,2100.3389 5857.9238,2100.0215 Q5857.2256,2099.7041 5856.4834,2099.7041 Q5854.9014,2099.7041 5854.0957,2100.959 Q5853.2901,2102.2139 5853.2901,2104.6846 Q5853.2901,2107.1455 5854.0957,2108.4004 Q5854.9014,2109.6553 5856.4834,2109.6553 Q5857.2256,2109.6553 5857.9238,2109.3379 Q5858.6221,2109.0205 5859.3643,2108.337 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="119.8851" x="5878.5576" y="2111.28">EnrichedCity</text><line style="stroke:#181818;stroke-width:0.5;" x1="5787.64" x2="6054.3604" y1="2122.48" y2="2122.48"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5797.64" cy="2141" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="169.9553" x="5807.64" y="2146.32">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5797.64" cy="2167.04" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="241.7204" x="5807.64" y="2172.36">context : LocationContext</text><line style="stroke:#181818;stroke-width:0.5;" x1="5787.64" x2="6054.3604" y1="2182.56" y2="2182.56"/></g><!--class BeerStyle--><g class="entity" data-qualified-name="Domain.Domain Models.BeerStyle" data-source-line="44" id="ent0008"><rect fill="#F1F1F1" height="208.28" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="238.9155" x="6900.54" y="2370.74"/><ellipse cx="6971.2127" cy="2388.76" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M6974.0194,2395.8401 Q6973.3358,2396.1916 6972.5838,2396.3674 Q6971.8319,2396.5432 6971.0018,2396.5432 Q6968.0526,2396.5432 6966.4998,2394.5998 Q6964.9471,2392.6565 6964.9471,2388.9846 Q6964.9471,2385.303 6966.4998,2383.3596 Q6968.0526,2381.4163 6971.0018,2381.4163 Q6971.8319,2381.4163 6972.5936,2381.592 Q6973.3553,2381.7678 6974.0194,2382.1194 L6974.0194,2385.3225 Q6973.2772,2384.6389 6972.5789,2384.3215 Q6971.8807,2384.0041 6971.1385,2384.0041 Q6969.5565,2384.0041 6968.7508,2385.259 Q6967.9451,2386.5139 6967.9451,2388.9846 Q6967.9451,2391.4455 6968.7508,2392.7004 Q6969.5565,2393.9553 6971.1385,2393.9553 Q6971.8807,2393.9553 6972.5789,2393.6379 Q6973.2772,2393.3205 6974.0194,2392.637 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="88.5701" x="6993.2127" y="2395.58">BeerStyle</text><line style="stroke:#181818;stroke-width:0.5;" x1="6901.54" x2="7138.4555" y1="2406.78" y2="2406.78"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6911.54" cy="2425.3" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="157.3954" x="6921.54" y="2430.62">name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6911.54" cy="2451.34" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="211.9155" x="6921.54" y="2456.66">description : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6911.54" cy="2477.38" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="137.7552" x="6921.54" y="2482.7">min_abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6911.54" cy="2503.42" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="142.3051" x="6921.54" y="2508.74">max_abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6911.54" cy="2529.46" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="114.84" x="6921.54" y="2534.78">min_ibu : int</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6911.54" cy="2555.5" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="119.39" x="6921.54" y="2560.82">max_ibu : int</text><line style="stroke:#181818;stroke-width:0.5;" x1="6901.54" x2="7138.4555" y1="2571.02" y2="2571.02"/></g><!--class BreweryResult--><g class="entity" data-qualified-name="Domain.Domain Models.BreweryResult" data-source-line="53" id="ent0009"><rect fill="#F1F1F1" height="156.2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="295.2255" x="5196.39" y="2396.78"/><ellipse cx="5272.9976" cy="2414.8" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M5275.8042,2421.8801 Q5275.1206,2422.2316 5274.3687,2422.4074 Q5273.6167,2422.5832 5272.7867,2422.5832 Q5269.8374,2422.5832 5268.2847,2420.6398 Q5266.732,2418.6965 5266.732,2415.0246 Q5266.732,2411.343 5268.2847,2409.3996 Q5269.8374,2407.4563 5272.7867,2407.4563 Q5273.6167,2407.4563 5274.3785,2407.632 Q5275.1402,2407.8078 5275.8042,2408.1594 L5275.8042,2411.3625 Q5275.0621,2410.6789 5274.3638,2410.3615 Q5273.6656,2410.0441 5272.9234,2410.0441 Q5271.3413,2410.0441 5270.5357,2411.299 Q5269.73,2412.5539 5269.73,2415.0246 Q5269.73,2417.4855 5270.5357,2418.7404 Q5271.3413,2419.9953 5272.9234,2419.9953 Q5273.6656,2419.9953 5274.3638,2419.6779 Q5275.0621,2419.3605 5275.8042,2418.677 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="133.0103" x="5294.9976" y="2421.62">BreweryResult</text><line style="stroke:#181818;stroke-width:0.5;" x1="5197.39" x2="5490.6155" y1="2432.82" y2="2432.82"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5207.39" cy="2451.34" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="193.4353" x="5217.39" y="2456.66">name_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5207.39" cy="2477.38" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="247.9555" x="5217.39" y="2482.7">description_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5207.39" cy="2503.42" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="213.7054" x="5217.39" y="2508.74">name_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5207.39" cy="2529.46" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="268.2255" x="5217.39" y="2534.78">description_local : std::string</text><line style="stroke:#181818;stroke-width:0.5;" x1="5197.39" x2="5490.6155" y1="2544.98" y2="2544.98"/></g><!--class BeerResult--><g class="entity" data-qualified-name="Domain.Domain Models.BeerResult" data-source-line="60" id="ent0010"><rect fill="#F1F1F1" height="234.32" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="295.2255" x="6570.39" y="2357.72"/><ellipse cx="6663.8827" cy="2375.74" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M6666.6893,2382.8201 Q6666.0057,2383.1716 6665.2538,2383.3474 Q6664.5018,2383.5232 6663.6717,2383.5232 Q6660.7225,2383.5232 6659.1698,2381.5798 Q6657.617,2379.6365 6657.617,2375.9646 Q6657.617,2372.283 6659.1698,2370.3396 Q6660.7225,2368.3963 6663.6717,2368.3963 Q6664.5018,2368.3963 6665.2635,2368.572 Q6666.0253,2368.7478 6666.6893,2369.0994 L6666.6893,2372.3025 Q6665.9471,2371.6189 6665.2489,2371.3015 Q6664.5506,2370.9841 6663.8085,2370.9841 Q6662.2264,2370.9841 6661.4208,2372.239 Q6660.6151,2373.4939 6660.6151,2375.9646 Q6660.6151,2378.4255 6661.4208,2379.6804 Q6662.2264,2380.9353 6663.8085,2380.9353 Q6664.5506,2380.9353 6665.2489,2380.6179 Q6665.9471,2380.3005 6666.6893,2379.617 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="99.2402" x="6685.8827" y="2382.56">BeerResult</text><line style="stroke:#181818;stroke-width:0.5;" x1="6571.39" x2="6864.6155" y1="2393.76" y2="2393.76"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6581.39" cy="2412.28" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="193.4353" x="6591.39" y="2417.6">name_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6581.39" cy="2438.32" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="247.9555" x="6591.39" y="2443.64">description_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6581.39" cy="2464.36" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="213.7054" x="6591.39" y="2469.68">name_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6581.39" cy="2490.4" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="268.2255" x="6591.39" y="2495.72">description_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6581.39" cy="2516.44" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="150.6854" x="6591.39" y="2521.76">style : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6581.39" cy="2542.48" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="90.4703" x="6591.39" y="2547.8">abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6581.39" cy="2568.52" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="67.5551" x="6591.39" y="2573.84">ibu : int</text><line style="stroke:#181818;stroke-width:0.5;" x1="6571.39" x2="6864.6155" y1="2584.04" y2="2584.04"/></g><!--class UserResult--><g class="entity" data-qualified-name="Domain.Domain Models.UserResult" data-source-line="70" id="ent0011"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="227.8405" x="6307.08" y="2409.8"/><ellipse cx="6367.0152" cy="2427.82" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M6369.8218,2434.9001 Q6369.1382,2435.2516 6368.3863,2435.4274 Q6367.6343,2435.6032 6366.8042,2435.6032 Q6363.855,2435.6032 6362.3023,2433.6598 Q6360.7495,2431.7165 6360.7495,2428.0446 Q6360.7495,2424.363 6362.3023,2422.4196 Q6363.855,2420.4763 6366.8042,2420.4763 Q6367.6343,2420.4763 6368.396,2420.652 Q6369.1578,2420.8278 6369.8218,2421.1794 L6369.8218,2424.3825 Q6369.0796,2423.6989 6368.3814,2423.3815 Q6367.6831,2423.0641 6366.941,2423.0641 Q6365.3589,2423.0641 6364.5533,2424.319 Q6363.7476,2425.5739 6363.7476,2428.0446 Q6363.7476,2430.5055 6364.5533,2431.7604 Q6365.3589,2433.0153 6366.941,2433.0153 Q6367.6831,2433.0153 6368.3814,2432.6979 Q6369.0796,2432.3805 6369.8218,2431.697 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="98.9702" x="6389.0152" y="2434.64">UserResult</text><line style="stroke:#181818;stroke-width:0.5;" x1="6308.08" x2="6533.9205" y1="2445.84" y2="2445.84"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6318.08" cy="2464.36" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="197.6655" x="6328.08" y="2469.68">username : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6318.08" cy="2490.4" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="135.0404" x="6328.08" y="2495.72">bio : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6318.08" cy="2516.44" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="200.8405" x="6328.08" y="2521.76">activity_weight : float</text><line style="stroke:#181818;stroke-width:0.5;" x1="6308.08" x2="6533.9205" y1="2531.96" y2="2531.96"/></g><!--class CheckinResult--><g class="entity" data-qualified-name="Domain.Domain Models.CheckinResult" data-source-line="76" id="ent0012"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="273.9603" x="7174.02" y="2422.82"/><ellipse cx="7240.4826" cy="2440.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M7243.2892,2447.9201 Q7242.6056,2448.2716 7241.8537,2448.4474 Q7241.1017,2448.6232 7240.2717,2448.6232 Q7237.3224,2448.6232 7235.7697,2446.6798 Q7234.217,2444.7365 7234.217,2441.0646 Q7234.217,2437.383 7235.7697,2435.4396 Q7237.3224,2433.4963 7240.2717,2433.4963 Q7241.1017,2433.4963 7241.8635,2433.672 Q7242.6252,2433.8478 7243.2892,2434.1994 L7243.2892,2437.4025 Q7242.5471,2436.7189 7241.8488,2436.4015 Q7241.1506,2436.0841 7240.4084,2436.0841 Q7238.8264,2436.0841 7238.0207,2437.339 Q7237.215,2438.5939 7237.215,2441.0646 Q7237.215,2443.5255 7238.0207,2444.7804 Q7238.8264,2446.0353 7240.4084,2446.0353 Q7241.1506,2446.0353 7241.8488,2445.7179 Q7242.5471,2445.4005 7243.2892,2444.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="132.0351" x="7262.4826" y="2447.66">CheckinResult</text><line style="stroke:#181818;stroke-width:0.5;" x1="7175.02" x2="7446.9803" y1="2458.86" y2="2458.86"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7185.02" cy="2477.38" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="246.9603" x="7195.02" y="2482.7">checked_in_at : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7185.02" cy="2503.42" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="148.3904" x="7195.02" y="2508.74">note : std::string</text><line style="stroke:#181818;stroke-width:0.5;" x1="7175.02" x2="7446.9803" y1="2518.94" y2="2518.94"/></g><!--class RatingResult--><g class="entity" data-qualified-name="Domain.Domain Models.RatingResult" data-source-line="81" id="ent0013"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="175.3904" x="7483.3" y="2422.82"/><ellipse cx="7511.1418" cy="2440.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M7513.9485,2447.9201 Q7513.2649,2448.2716 7512.5129,2448.4474 Q7511.761,2448.6232 7510.9309,2448.6232 Q7507.9817,2448.6232 7506.4289,2446.6798 Q7504.8762,2444.7365 7504.8762,2441.0646 Q7504.8762,2437.383 7506.4289,2435.4396 Q7507.9817,2433.4963 7510.9309,2433.4963 Q7511.761,2433.4963 7512.5227,2433.672 Q7513.2844,2433.8478 7513.9485,2434.1994 L7513.9485,2437.4025 Q7513.2063,2436.7189 7512.508,2436.4015 Q7511.8098,2436.0841 7511.0676,2436.0841 Q7509.4856,2436.0841 7508.6799,2437.339 Q7507.8743,2438.5939 7507.8743,2441.0646 Q7507.8743,2443.5255 7508.6799,2444.7804 Q7509.4856,2446.0353 7511.0676,2446.0353 Q7511.8098,2446.0353 7512.508,2445.7179 Q7513.2063,2445.4005 7513.9485,2444.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="115.0752" x="7528.7733" y="2447.66">RatingResult</text><line style="stroke:#181818;stroke-width:0.5;" x1="7484.3" x2="7657.6904" y1="2458.86" y2="2458.86"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7494.3" cy="2477.38" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="108.6253" x="7504.3" y="2482.7">score : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7494.3" cy="2503.42" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="148.3904" x="7504.3" y="2508.74">note : std::string</text><line style="stroke:#181818;stroke-width:0.5;" x1="7484.3" x2="7657.6904" y1="2518.94" y2="2518.94"/></g><!--class GeneratedBrewery--><g class="entity" data-qualified-name="Domain.Domain Models.GeneratedBrewery" data-source-line="86" id="ent0014"><rect fill="#F1F1F1" height="182.24" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="556.1055" x="5195.95" y="2047.38"/><ellipse cx="5381.8326" cy="2065.4" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M5384.6392,2072.4801 Q5383.9556,2072.8316 5383.2037,2073.0074 Q5382.4517,2073.1832 5381.6216,2073.1832 Q5378.6724,2073.1832 5377.1197,2071.2398 Q5375.567,2069.2965 5375.567,2065.6246 Q5375.567,2061.943 5377.1197,2059.9996 Q5378.6724,2058.0563 5381.6216,2058.0563 Q5382.4517,2058.0563 5383.2134,2058.232 Q5383.9752,2058.4078 5384.6392,2058.7594 L5384.6392,2061.9625 Q5383.897,2061.2789 5383.1988,2060.9615 Q5382.5005,2060.6441 5381.7584,2060.6441 Q5380.1763,2060.6441 5379.3707,2061.899 Q5378.565,2063.1539 5378.565,2065.6246 Q5378.565,2068.0855 5379.3707,2069.3404 Q5380.1763,2070.5953 5381.7584,2070.5953 Q5382.5005,2070.5953 5383.1988,2070.2779 Q5383.897,2069.9605 5384.6392,2069.277 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="175.3403" x="5403.8326" y="2072.22">GeneratedBrewery</text><line style="stroke:#181818;stroke-width:0.5;" x1="5196.95" x2="5751.0555" y1="2083.42" y2="2083.42"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5206.95" cy="2101.94" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="246.4952" x="5216.95" y="2107.26">brewery_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5206.95" cy="2127.98" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="169.9553" x="5216.95" y="2133.3">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5206.95" cy="2154.02" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="224.1105" x="5216.95" y="2159.34">brewery : BreweryResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5206.95" cy="2180.06" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="529.1055" x="5216.95" y="2185.38">context_completeness : LocationContext::Completeness</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5206.95" cy="2206.1" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="233.1555" x="5216.95" y="2211.42">generated_at : std::string</text><line style="stroke:#181818;stroke-width:0.5;" x1="5196.95" x2="5751.0555" y1="2221.62" y2="2221.62"/></g><!--class GeneratedBeer--><g class="entity" data-qualified-name="Domain.Domain Models.GeneratedBeer" data-source-line="94" id="ent0015"><rect fill="#F1F1F1" height="208.28" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="273.4952" x="6434.25" y="2034.36"/><ellipse cx="6495.7125" cy="2052.38" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M6498.5191,2059.4601 Q6497.8356,2059.8116 6497.0836,2059.9874 Q6496.3316,2060.1632 6495.5016,2060.1632 Q6492.5524,2060.1632 6490.9996,2058.2198 Q6489.4469,2056.2765 6489.4469,2052.6046 Q6489.4469,2048.923 6490.9996,2046.9796 Q6492.5524,2045.0363 6495.5016,2045.0363 Q6496.3316,2045.0363 6497.0934,2045.212 Q6497.8551,2045.3878 6498.5191,2045.7394 L6498.5191,2048.9425 Q6497.777,2048.2589 6497.0787,2047.9415 Q6496.3805,2047.6241 6495.6383,2047.6241 Q6494.0563,2047.6241 6493.2506,2048.879 Q6492.4449,2050.1339 6492.4449,2052.6046 Q6492.4449,2055.0655 6493.2506,2056.3204 Q6494.0563,2057.5753 6495.6383,2057.5753 Q6496.3805,2057.5753 6497.0787,2057.2579 Q6497.777,2056.9405 6498.5191,2056.257 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="141.5702" x="6517.7125" y="2059.2">GeneratedBeer</text><line style="stroke:#181818;stroke-width:0.5;" x1="6435.25" x2="6706.7452" y1="2070.4" y2="2070.4"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6445.25" cy="2088.92" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="212.7251" x="6455.25" y="2094.24">beer_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6445.25" cy="2114.96" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="246.4952" x="6455.25" y="2120.28">brewery_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6445.25" cy="2141" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="169.9553" x="6455.25" y="2146.32">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6445.25" cy="2167.04" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="148.0752" x="6455.25" y="2172.36">style : BeerStyle</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6445.25" cy="2193.08" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="156.5702" x="6455.25" y="2198.4">beer : BeerResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6445.25" cy="2219.12" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="233.1555" x="6455.25" y="2224.44">generated_at : std::string</text><line style="stroke:#181818;stroke-width:0.5;" x1="6435.25" x2="6706.7452" y1="2234.64" y2="2234.64"/></g><!--class GeneratedUser--><g class="entity" data-qualified-name="Domain.Domain Models.GeneratedUser" data-source-line="103" id="ent0016"><rect fill="#F1F1F1" height="156.2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="260.1555" x="6089.92" y="2060.4"/><ellipse cx="6144.8477" cy="2078.42" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M6147.6543,2085.5001 Q6146.9707,2085.8516 6146.2188,2086.0274 Q6145.4668,2086.2032 6144.6367,2086.2032 Q6141.6875,2086.2032 6140.1348,2084.2598 Q6138.5821,2082.3165 6138.5821,2078.6446 Q6138.5821,2074.963 6140.1348,2073.0196 Q6141.6875,2071.0763 6144.6367,2071.0763 Q6145.4668,2071.0763 6146.2285,2071.252 Q6146.9903,2071.4278 6147.6543,2071.7794 L6147.6543,2074.9825 Q6146.9121,2074.2989 6146.2139,2073.9815 Q6145.5156,2073.6641 6144.7735,2073.6641 Q6143.1914,2073.6641 6142.3858,2074.919 Q6141.5801,2076.1739 6141.5801,2078.6446 Q6141.5801,2081.1055 6142.3858,2082.3604 Q6143.1914,2083.6153 6144.7735,2083.6153 Q6145.5156,2083.6153 6146.2139,2083.2979 Q6146.9121,2082.9805 6147.6543,2082.297 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="141.3002" x="6166.8477" y="2085.24">GeneratedUser</text><line style="stroke:#181818;stroke-width:0.5;" x1="6090.92" x2="6349.0755" y1="2096.44" y2="2096.44"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6100.92" cy="2114.96" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="210.3401" x="6110.92" y="2120.28">user_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6100.92" cy="2141" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="169.9553" x="6110.92" y="2146.32">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6100.92" cy="2167.04" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="153.9153" x="6110.92" y="2172.36">user : UserResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6100.92" cy="2193.08" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="233.1555" x="6110.92" y="2198.4">generated_at : std::string</text><line style="stroke:#181818;stroke-width:0.5;" x1="6090.92" x2="6349.0755" y1="2208.6" y2="2208.6"/></g><!--class GeneratedCheckin--><g class="entity" data-qualified-name="Domain.Domain Models.GeneratedCheckin" data-source-line="110" id="ent0017"><rect fill="#F1F1F1" height="182.24" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="273.4952" x="6876.25" y="2047.38"/><ellipse cx="6921.5585" cy="2065.4" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M6924.3652,2072.4801 Q6923.6816,2072.8316 6922.9296,2073.0074 Q6922.1777,2073.1832 6921.3476,2073.1832 Q6918.3984,2073.1832 6916.8456,2071.2398 Q6915.2929,2069.2965 6915.2929,2065.6246 Q6915.2929,2061.943 6916.8456,2059.9996 Q6918.3984,2058.0563 6921.3476,2058.0563 Q6922.1777,2058.0563 6922.9394,2058.232 Q6923.7011,2058.4078 6924.3652,2058.7594 L6924.3652,2061.9625 Q6923.623,2061.2789 6922.9247,2060.9615 Q6922.2265,2060.6441 6921.4843,2060.6441 Q6919.9023,2060.6441 6919.0966,2061.899 Q6918.2909,2063.1539 6918.2909,2065.6246 Q6918.2909,2068.0855 6919.0966,2069.3404 Q6919.9023,2070.5953 6921.4843,2070.5953 Q6922.2265,2070.5953 6922.9247,2070.2779 Q6923.623,2069.9605 6924.3652,2069.277 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="174.3651" x="6943.0715" y="2072.22">GeneratedCheckin</text><line style="stroke:#181818;stroke-width:0.5;" x1="6877.25" x2="7148.7452" y1="2083.42" y2="2083.42"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6887.25" cy="2101.94" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="242.1401" x="6897.25" y="2107.26">checkin_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6887.25" cy="2127.98" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="210.3401" x="6897.25" y="2133.3">user_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6887.25" cy="2154.02" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="246.4952" x="6897.25" y="2159.34">brewery_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6887.25" cy="2180.06" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="218.7802" x="6897.25" y="2185.38">checkin : CheckinResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6887.25" cy="2206.1" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="233.1555" x="6897.25" y="2211.42">generated_at : std::string</text><line style="stroke:#181818;stroke-width:0.5;" x1="6877.25" x2="7148.7452" y1="2221.62" y2="2221.62"/></g><!--class GeneratedRating--><g class="entity" data-qualified-name="Domain.Domain Models.GeneratedRating" data-source-line="118" id="ent0018"><rect fill="#F1F1F1" height="182.24" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="269.1401" x="7389.43" y="2047.38"/><ellipse cx="7440.7974" cy="2065.4" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M7443.604,2072.4801 Q7442.9204,2072.8316 7442.1685,2073.0074 Q7441.4165,2073.1832 7440.5865,2073.1832 Q7437.6372,2073.1832 7436.0845,2071.2398 Q7434.5318,2069.2965 7434.5318,2065.6246 Q7434.5318,2061.943 7436.0845,2059.9996 Q7437.6372,2058.0563 7440.5865,2058.0563 Q7441.4165,2058.0563 7442.1783,2058.232 Q7442.94,2058.4078 7443.604,2058.7594 L7443.604,2061.9625 Q7442.8619,2061.2789 7442.1636,2060.9615 Q7441.4654,2060.6441 7440.7232,2060.6441 Q7439.1412,2060.6441 7438.3355,2061.899 Q7437.5298,2063.1539 7437.5298,2065.6246 Q7437.5298,2068.0855 7438.3355,2069.3404 Q7439.1412,2070.5953 7440.7232,2070.5953 Q7441.4654,2070.5953 7442.1636,2070.2779 Q7442.8619,2069.9605 7443.604,2069.277 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="157.4053" x="7462.7974" y="2072.22">GeneratedRating</text><line style="stroke:#181818;stroke-width:0.5;" x1="7390.43" x2="7657.5701" y1="2083.42" y2="2083.42"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7400.43" cy="2101.94" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="210.3401" x="7410.43" y="2107.26">user_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7400.43" cy="2127.98" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="212.7251" x="7410.43" y="2133.3">beer_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7400.43" cy="2154.02" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="242.1401" x="7410.43" y="2159.34">checkin_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7400.43" cy="2180.06" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="183.2805" x="7410.43" y="2185.38">rating : RatingResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7400.43" cy="2206.1" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="233.1555" x="7410.43" y="2211.42">generated_at : std::string</text><line style="stroke:#181818;stroke-width:0.5;" x1="7390.43" x2="7657.5701" y1="2221.62" y2="2221.62"/></g><!--class SamplingOptions--><g class="entity" data-qualified-name="Domain.Domain. Application Configuration.SamplingOptions" data-source-line="131" id="ent0021"><rect fill="#F1F1F1" height="182.24" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="257.0005" x="4460.5" y="2666.06"/><ellipse cx="4505.4194" cy="2684.08" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M4508.2261,2691.1601 Q4507.5425,2691.5116 4506.7905,2691.6874 Q4506.0386,2691.8632 4505.2085,2691.8632 Q4502.2593,2691.8632 4500.7065,2689.9198 Q4499.1538,2687.9765 4499.1538,2684.3046 Q4499.1538,2680.623 4500.7065,2678.6796 Q4502.2593,2676.7363 4505.2085,2676.7363 Q4506.0386,2676.7363 4506.8003,2676.912 Q4507.562,2677.0878 4508.2261,2677.4394 L4508.2261,2680.6425 Q4507.4839,2679.9589 4506.7856,2679.6415 Q4506.0874,2679.3241 4505.3452,2679.3241 Q4503.7632,2679.3241 4502.9575,2680.579 Q4502.1518,2681.8339 4502.1518,2684.3046 Q4502.1518,2686.7655 4502.9575,2688.0204 Q4503.7632,2689.2753 4505.3452,2689.2753 Q4506.0874,2689.2753 4506.7856,2688.9579 Q4507.4839,2688.6405 4508.2261,2687.957 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="158.7351" x="4526.846" y="2690.9">SamplingOptions</text><line style="stroke:#181818;stroke-width:0.5;" x1="4461.5" x2="4716.5005" y1="2702.1" y2="2702.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4471.5" cy="2720.62" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="230.0005" x="4481.5" y="2725.94">temperature : float = 1.0F</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4471.5" cy="2746.66" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="189.2501" x="4481.5" y="2751.98">top_p : float = 0.95F</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4471.5" cy="2772.7" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="196.4851" x="4481.5" y="2778.02">top_k : uint32_t = 64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4471.5" cy="2798.74" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="212.6252" x="4481.5" y="2804.06">n_ctx : uint32_t = 8192</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4471.5" cy="2824.78" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="122.7852" x="4481.5" y="2830.1">seed : int = -1</text><line style="stroke:#181818;stroke-width:0.5;" x1="4461.5" x2="4716.5005" y1="2840.3" y2="2840.3"/></g><!--class GeneratorOptions--><g class="entity" data-qualified-name="Domain.Domain. Application Configuration.GeneratorOptions" data-source-line="139" id="ent0022"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="340.6204" x="4418.69" y="2409.8"/><ellipse cx="4500.1176" cy="2427.82" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M4502.9242,2434.9001 Q4502.2406,2435.2516 4501.4887,2435.4274 Q4500.7367,2435.6032 4499.9066,2435.6032 Q4496.9574,2435.6032 4495.4047,2433.6598 Q4493.852,2431.7165 4493.852,2428.0446 Q4493.852,2424.363 4495.4047,2422.4196 Q4496.9574,2420.4763 4499.9066,2420.4763 Q4500.7367,2420.4763 4501.4984,2420.652 Q4502.2602,2420.8278 4502.9242,2421.1794 L4502.9242,2424.3825 Q4502.182,2423.6989 4501.4838,2423.3815 Q4500.7856,2423.0641 4500.0434,2423.0641 Q4498.4613,2423.0641 4497.6557,2424.319 Q4496.85,2425.5739 4496.85,2428.0446 Q4496.85,2430.5055 4497.6557,2431.7604 Q4498.4613,2433.0153 4500.0434,2433.0153 Q4500.7856,2433.0153 4501.4838,2432.6979 Q4502.182,2432.3805 4502.9242,2431.697 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="168.7652" x="4522.1176" y="2434.64">GeneratorOptions</text><line style="stroke:#181818;stroke-width:0.5;" x1="4419.69" x2="4758.3104" y1="2445.84" y2="2445.84"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4429.69" cy="2464.36" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="313.6204" x="4439.69" y="2469.68">model_path : std::filesystem::path</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4429.69" cy="2490.4" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="241.7801" x="4439.69" y="2495.72">use_mocked : bool = false</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4429.69" cy="2516.44" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="256.5652" x="4439.69" y="2521.76">sampling : SamplingOptions</text><line style="stroke:#181818;stroke-width:0.5;" x1="4419.69" x2="4758.3104" y1="2531.96" y2="2531.96"/></g><!--class PipelineOptions--><g class="entity" data-qualified-name="Domain.Domain. Application Configuration.PipelineOptions" data-source-line="145" id="ent0023"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="345.5656" x="4794.22" y="2422.82"/><ellipse cx="4889.3028" cy="2440.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M4892.1094,2447.9201 Q4891.4258,2448.2716 4890.6739,2448.4474 Q4889.9219,2448.6232 4889.0918,2448.6232 Q4886.1426,2448.6232 4884.5899,2446.6798 Q4883.0371,2444.7365 4883.0371,2441.0646 Q4883.0371,2437.383 4884.5899,2435.4396 Q4886.1426,2433.4963 4889.0918,2433.4963 Q4889.9219,2433.4963 4890.6836,2433.672 Q4891.4453,2433.8478 4892.1094,2434.1994 L4892.1094,2437.4025 Q4891.3672,2436.7189 4890.669,2436.4015 Q4889.9707,2436.0841 4889.2286,2436.0841 Q4887.6465,2436.0841 4886.8409,2437.339 Q4886.0352,2438.5939 4886.0352,2441.0646 Q4886.0352,2443.5255 4886.8409,2444.7804 Q4887.6465,2446.0353 4889.2286,2446.0353 Q4889.9707,2446.0353 4890.669,2445.7179 Q4891.3672,2445.4005 4892.1094,2444.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="146.4" x="4911.3028" y="2447.66">PipelineOptions</text><line style="stroke:#181818;stroke-width:0.5;" x1="4795.22" x2="5138.7856" y1="2458.86" y2="2458.86"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4805.22" cy="2477.38" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="318.5656" x="4815.22" y="2482.7">output_path : std::filesystem::path</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4805.22" cy="2503.42" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="283.0505" x="4815.22" y="2508.74">log_path : std::filesystem::path</text><line style="stroke:#181818;stroke-width:0.5;" x1="4795.22" x2="5138.7856" y1="2518.94" y2="2518.94"/></g><!--class ApplicationOptions--><g class="entity" data-qualified-name="Domain.Domain. Application Configuration.ApplicationOptions" data-source-line="150" id="ent0024"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="301.1705" x="4816.41" y="2086.44"/><ellipse cx="4872.5452" cy="2104.46" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M4875.3519,2111.5401 Q4874.6683,2111.8916 4873.9163,2112.0674 Q4873.1644,2112.2432 4872.3343,2112.2432 Q4869.3851,2112.2432 4867.8323,2110.2998 Q4866.2796,2108.3565 4866.2796,2104.6846 Q4866.2796,2101.003 4867.8323,2099.0596 Q4869.3851,2097.1163 4872.3343,2097.1163 Q4873.1644,2097.1163 4873.9261,2097.292 Q4874.6878,2097.4678 4875.3519,2097.8194 L4875.3519,2101.0225 Q4874.6097,2100.3389 4873.9114,2100.0215 Q4873.2132,2099.7041 4872.471,2099.7041 Q4870.889,2099.7041 4870.0833,2100.959 Q4869.2776,2102.2139 4869.2776,2104.6846 Q4869.2776,2107.1455 4870.0833,2108.4004 Q4870.889,2109.6553 4872.471,2109.6553 Q4873.2132,2109.6553 4873.9114,2109.3379 Q4874.6097,2109.0205 4875.3519,2108.337 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="179.9001" x="4894.5452" y="2111.28">ApplicationOptions</text><line style="stroke:#181818;stroke-width:0.5;" x1="4817.41" x2="5116.5805" y1="2122.48" y2="2122.48"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4827.41" cy="2141" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="274.1705" x="4837.41" y="2146.32">generator : GeneratorOptions</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4827.41" cy="2167.04" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="234.375" x="4837.41" y="2172.36">pipeline : PipelineOptions</text><line style="stroke:#181818;stroke-width:0.5;" x1="4817.41" x2="5116.5805" y1="2182.56" y2="2182.56"/></g><!--class ContextStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.ContextStrategy" data-source-line="166" id="ent0029"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="566.3062" x="7714.85" y="2073.42"/><ellipse cx="7916.6631" cy="2104.46" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M7912.3428,2099.919 L7912.3428,2097.3799 L7921.0244,2097.3799 L7921.0244,2099.919 L7918.124,2099.919 L7918.124,2109.4209 L7921.0244,2109.4209 L7921.0244,2111.96 L7912.3428,2111.96 L7912.3428,2109.4209 L7915.2432,2109.4209 L7915.2432,2099.919 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="7964.6831" y="2098.26">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="153.68" x="7938.6631" y="2124.3">ContextStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="7715.85" x2="8280.1562" y1="2135.5" y2="2135.5"/><line style="stroke:#181818;stroke-width:0.5;" x1="7715.85" x2="8280.1562" y1="2143.5" y2="2143.5"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7725.85" cy="2162.02" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="539.3062" x="7735.85" y="2167.34">QueriesFor(loc : const Location&) : std::vector<std::string></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7725.85" cy="2188.06" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="252.4202" x="7735.85" y="2193.38">MaxContextChars() : size_t</text></g><!--class BreweryContextStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.BreweryContextStrategy" data-source-line="171" id="ent0030"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="566.3062" x="7714.85" y="2422.82"/><ellipse cx="7878.6078" cy="2440.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M7881.4144,2447.9201 Q7880.7308,2448.2716 7879.9789,2448.4474 Q7879.2269,2448.6232 7878.3969,2448.6232 Q7875.4476,2448.6232 7873.8949,2446.6798 Q7872.3422,2444.7365 7872.3422,2441.0646 Q7872.3422,2437.383 7873.8949,2435.4396 Q7875.4476,2433.4963 7878.3969,2433.4963 Q7879.2269,2433.4963 7879.9887,2433.672 Q7880.7504,2433.8478 7881.4144,2434.1994 L7881.4144,2437.4025 Q7880.6723,2436.7189 7879.974,2436.4015 Q7879.2758,2436.0841 7878.5336,2436.0841 Q7876.9515,2436.0841 7876.1459,2437.339 Q7875.3402,2438.5939 7875.3402,2441.0646 Q7875.3402,2443.5255 7876.1459,2444.7804 Q7876.9515,2446.0353 7878.5336,2446.0353 Q7879.2758,2446.0353 7879.974,2445.7179 Q7880.6723,2445.4005 7881.4144,2444.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="229.7906" x="7900.6078" y="2447.66">BreweryContextStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="7715.85" x2="8280.1562" y1="2458.86" y2="2458.86"/><line style="stroke:#181818;stroke-width:0.5;" x1="7715.85" x2="8280.1562" y1="2466.86" y2="2466.86"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7725.85" cy="2485.38" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="539.3062" x="7735.85" y="2490.7">QueriesFor(loc : const Location&) : std::vector<std::string></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7725.85" cy="2511.42" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="252.4202" x="7735.85" y="2516.74">MaxContextChars() : size_t</text></g><!--class BeerContextStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.BeerContextStrategy" data-source-line="176" id="ent0031"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="566.3062" x="8315.85" y="2422.82"/><ellipse cx="8496.4929" cy="2440.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M8499.2995,2447.9201 Q8498.6159,2448.2716 8497.864,2448.4474 Q8497.112,2448.6232 8496.2819,2448.6232 Q8493.3327,2448.6232 8491.78,2446.6798 Q8490.2273,2444.7365 8490.2273,2441.0646 Q8490.2273,2437.383 8491.78,2435.4396 Q8493.3327,2433.4963 8496.2819,2433.4963 Q8497.112,2433.4963 8497.8737,2433.672 Q8498.6355,2433.8478 8499.2995,2434.1994 L8499.2995,2437.4025 Q8498.5573,2436.7189 8497.8591,2436.4015 Q8497.1609,2436.0841 8496.4187,2436.0841 Q8494.8366,2436.0841 8494.031,2437.339 Q8493.2253,2438.5939 8493.2253,2441.0646 Q8493.2253,2443.5255 8494.031,2444.7804 Q8494.8366,2446.0353 8496.4187,2446.0353 Q8497.1609,2446.0353 8497.8591,2445.7179 Q8498.5573,2445.4005 8499.2995,2444.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="196.0204" x="8518.4929" y="2447.66">BeerContextStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="8316.85" x2="8881.1562" y1="2458.86" y2="2458.86"/><line style="stroke:#181818;stroke-width:0.5;" x1="8316.85" x2="8881.1562" y1="2466.86" y2="2466.86"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8326.85" cy="2485.38" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="539.3062" x="8336.85" y="2490.7">QueriesFor(loc : const Location&) : std::vector<std::string></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8326.85" cy="2511.42" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="252.4202" x="8336.85" y="2516.74">MaxContextChars() : size_t</text></g><!--class SamplingStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.SamplingStrategy" data-source-line="181" id="ent0032"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="700.3912" x="8615.8" y="2086.44"/><ellipse cx="8879.5956" cy="2117.48" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M8875.2753,2112.939 L8875.2753,2110.3999 L8883.957,2110.3999 L8883.957,2112.939 L8881.0566,2112.939 L8881.0566,2122.4409 L8883.957,2122.4409 L8883.957,2124.98 L8875.2753,2124.98 L8875.2753,2122.4409 L8878.1757,2122.4409 L8878.1757,2112.939 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="8932.6756" y="2111.28">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="163.8" x="8901.5956" y="2137.32">SamplingStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="8616.8" x2="9315.1912" y1="2148.52" y2="2148.52"/><line style="stroke:#181818;stroke-width:0.5;" x1="8616.8" x2="9315.1912" y1="2156.52" y2="2156.52"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8626.8" cy="2175.04" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="673.3912" x="8636.8" y="2180.36">Sample(locations : const std::vector<Location>&) : std::vector<Location></text></g><!--class UniformSamplingStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.UniformSamplingStrategy" data-source-line="185" id="ent0033"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="700.3912" x="8916.8" y="2422.82"/><ellipse cx="9143.9179" cy="2440.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M9146.7245,2447.9201 Q9146.0409,2448.2716 9145.289,2448.4474 Q9144.537,2448.6232 9143.7069,2448.6232 Q9140.7577,2448.6232 9139.205,2446.6798 Q9137.6523,2444.7365 9137.6523,2441.0646 Q9137.6523,2437.383 9139.205,2435.4396 Q9140.7577,2433.4963 9143.7069,2433.4963 Q9144.537,2433.4963 9145.2987,2433.672 Q9146.0605,2433.8478 9146.7245,2434.1994 L9146.7245,2437.4025 Q9145.9823,2436.7189 9145.2841,2436.4015 Q9144.5859,2436.0841 9143.8437,2436.0841 Q9142.2616,2436.0841 9141.456,2437.339 Q9140.6503,2438.5939 9140.6503,2441.0646 Q9140.6503,2443.5255 9141.456,2444.7804 Q9142.2616,2446.0353 9143.8437,2446.0353 Q9144.5859,2446.0353 9145.2841,2445.7179 Q9145.9823,2445.4005 9146.7245,2444.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="237.1555" x="9165.9179" y="2447.66">UniformSamplingStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="8917.8" x2="9616.1912" y1="2458.86" y2="2458.86"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8924.8" y="2474.38"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="199.96" x="8937.8" y="2482.7">sample_size_ : size_t</text><line style="stroke:#181818;stroke-width:0.5;" x1="8917.8" x2="9616.1912" y1="2492.9" y2="2492.9"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8927.8" cy="2511.42" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="673.3912" x="8937.8" y="2516.74">Sample(locations : const std::vector<Location>&) : std::vector<Location></text></g><!--class BeerSelectionStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.BeerSelectionStrategy" data-source-line="190" id="ent0034"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="602.1661" x="9500.92" y="2073.42"/><ellipse cx="9693.593" cy="2104.46" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M9689.2727,2099.919 L9689.2727,2097.3799 L9697.9544,2097.3799 L9697.9544,2099.919 L9695.054,2099.919 L9695.054,2109.4209 L9697.9544,2109.4209 L9697.9544,2111.96 L9689.2727,2111.96 L9689.2727,2109.4209 L9692.1731,2109.4209 L9692.1731,2099.919 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="9768.683" y="2098.26">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="207.82" x="9715.593" y="2124.3">BeerSelectionStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="9501.92" x2="10102.0861" y1="2135.5" y2="2135.5"/><line style="stroke:#181818;stroke-width:0.5;" x1="9501.92" x2="10102.0861" y1="2143.5" y2="2143.5"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9511.92" cy="2175.04" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="464.6609" x="9521.92" y="2167.34">SelectStyles(brewery : const GeneratedBrewery&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="564.5261" x="9532.56" y="2193.38">palette : std::span<const BeerStyle>) : std::vector<BeerStyle></text></g><!--class RandomBeerSelectionStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.RandomBeerSelectionStrategy" data-source-line="194" id="ent0035"><rect fill="#F1F1F1" height="182.24" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="602.1661" x="9651.92" y="2383.76"/><ellipse cx="9806.4878" cy="2401.78" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M9809.2945,2408.8601 Q9808.6109,2409.2116 9807.8589,2409.3874 Q9807.107,2409.5632 9806.2769,2409.5632 Q9803.3277,2409.5632 9801.7749,2407.6198 Q9800.2222,2405.6765 9800.2222,2402.0046 Q9800.2222,2398.323 9801.7749,2396.3796 Q9803.3277,2394.4363 9806.2769,2394.4363 Q9807.107,2394.4363 9807.8687,2394.612 Q9808.6304,2394.7878 9809.2945,2395.1394 L9809.2945,2398.3425 Q9808.5523,2397.6589 9807.854,2397.3415 Q9807.1558,2397.0241 9806.4136,2397.0241 Q9804.8316,2397.0241 9804.0259,2398.279 Q9803.2202,2399.5339 9803.2202,2402.0046 Q9803.2202,2404.4655 9804.0259,2405.7204 Q9804.8316,2406.9753 9806.4136,2406.9753 Q9807.1558,2406.9753 9807.854,2406.6579 Q9808.5523,2406.3405 9809.2945,2405.657 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="284.0305" x="9828.4878" y="2408.6">RandomBeerSelectionStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="9652.92" x2="10253.0861" y1="2419.8" y2="2419.8"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9659.92" y="2435.32"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="175.9203" x="9672.92" y="2443.64">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9659.92" y="2461.36"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="184.2699" x="9672.92" y="2469.68">min_beers_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9659.92" y="2487.4"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="188.8199" x="9672.92" y="2495.72">max_beers_ : size_t</text><line style="stroke:#181818;stroke-width:0.5;" x1="9652.92" x2="10253.0861" y1="2505.92" y2="2505.92"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9662.92" cy="2537.46" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="464.6609" x="9672.92" y="2529.76">SelectStyles(brewery : const GeneratedBrewery&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="564.5261" x="9683.56" y="2555.8">palette : std::span<const BeerStyle>) : std::vector<BeerStyle></text></g><!--class CheckinDistributionStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.CheckinDistributionStrategy" data-source-line="201" id="ent0036"><rect fill="#F1F1F1" height="208.28" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="646.6413" x="10212.68" y="2034.36"/><ellipse cx="10399.9706" cy="2065.4" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M10395.6503,2060.859 L10395.6503,2058.3199 L10404.332,2058.3199 L10404.332,2060.859 L10401.4316,2060.859 L10401.4316,2070.3609 L10404.332,2070.3609 L10404.332,2072.9 L10395.6503,2072.9 L10395.6503,2070.3609 L10398.5507,2070.3609 L10398.5507,2060.859 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="10502.6806" y="2059.2">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="263.06" x="10421.9706" y="2085.24">CheckinDistributionStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="10213.68" x2="10858.3213" y1="2096.44" y2="2096.44"/><line style="stroke:#181818;stroke-width:0.5;" x1="10213.68" x2="10858.3213" y1="2104.44" y2="2104.44"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10223.68" cy="2122.96" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="619.6413" x="10233.68" y="2128.28">AssignActivityWeights(users : std::vector<GeneratedUser>&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10223.68" cy="2162.02" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="436.8807" x="10233.68" y="2154.32">CheckinsForUser(user : const GeneratedUser&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="293.3104" x="10244.32" y="2180.36">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10223.68" cy="2214.1" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="414.2506" x="10233.68" y="2206.4">TimestampFor(user : const GeneratedUser&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="234.4755" x="10244.32" y="2232.44">index : size_t) : std::string</text></g><!--class JCurveCheckinStrategy--><g class="entity" data-qualified-name="Domain.Domain Policy.JCurveCheckinStrategy" data-source-line="207" id="ent0037"><rect fill="#F1F1F1" height="208.28" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="646.6413" x="10288.68" y="2370.74"/><ellipse cx="10497.8504" cy="2388.76" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M10500.6571,2395.8401 Q10499.9735,2396.1916 10499.2215,2396.3674 Q10498.4696,2396.5432 10497.6395,2396.5432 Q10494.6903,2396.5432 10493.1376,2394.5998 Q10491.5848,2392.6565 10491.5848,2388.9846 Q10491.5848,2385.303 10493.1376,2383.3596 Q10494.6903,2381.4163 10497.6395,2381.4163 Q10498.4696,2381.4163 10499.2313,2381.592 Q10499.993,2381.7678 10500.6571,2382.1194 L10500.6571,2385.3225 Q10499.9149,2384.6389 10499.2167,2384.3215 Q10498.5184,2384.0041 10497.7762,2384.0041 Q10496.1942,2384.0041 10495.3885,2385.259 Q10494.5829,2386.5139 10494.5829,2388.9846 Q10494.5829,2391.4455 10495.3885,2392.7004 Q10496.1942,2393.9553 10497.7762,2393.9553 Q10498.5184,2393.9553 10499.2167,2393.6379 Q10499.9149,2393.3205 10500.6571,2392.637 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="219.3004" x="10519.8504" y="2395.58">JCurveCheckinStrategy</text><line style="stroke:#181818;stroke-width:0.5;" x1="10289.68" x2="10934.3213" y1="2406.78" y2="2406.78"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="10296.68" y="2422.3"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="175.9203" x="10309.68" y="2430.62">rng_ : std::mt19937</text><line style="stroke:#181818;stroke-width:0.5;" x1="10289.68" x2="10934.3213" y1="2440.82" y2="2440.82"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10299.68" cy="2459.34" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="619.6413" x="10309.68" y="2464.66">AssignActivityWeights(users : std::vector<GeneratedUser>&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10299.68" cy="2498.4" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="436.8807" x="10309.68" y="2490.7">CheckinsForUser(user : const GeneratedUser&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="293.3104" x="10320.32" y="2516.74">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10299.68" cy="2550.48" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="414.2506" x="10309.68" y="2542.78">TimestampFor(user : const GeneratedUser&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="234.4755" x="10320.32" y="2568.82">index : size_t) : std::string</text></g><!--class LogLevel--><g class="entity" data-qualified-name="Infrastructure.Logging.LogLevel" data-source-line="248" id="ent0041"><rect fill="#F1F1F1" height="156.2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="115.8051" x="147.1" y="2396.78"/><ellipse cx="163.1" cy="2414.8" fill="#EB937F" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M167.8227,2422.3 L158.7406,2422.3 L158.7406,2407.7199 L167.8227,2407.7199 L167.8227,2410.259 L161.6215,2410.259 L161.6215,2413.4035 L167.2367,2413.4035 L167.2367,2415.9426 L161.6215,2415.9426 L161.6215,2419.7609 L167.8227,2419.7609 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="81.8051" x="178.1" y="2421.62">LogLevel</text><line style="stroke:#181818;stroke-width:0.5;" x1="148.1" x2="261.9051" y1="2432.82" y2="2432.82"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="60.275" x="153.1" y="2456.66">Debug</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="34.8051" x="153.1" y="2482.7">Info</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="49.1051" x="153.1" y="2508.74">Warn</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="45.3552" x="153.1" y="2534.78">Error</text><line style="stroke:#181818;stroke-width:0.5;" x1="148.1" x2="261.9051" y1="2544.98" y2="2544.98"/></g><!--class PipelinePhase--><g class="entity" data-qualified-name="Infrastructure.Logging.PipelinePhase" data-source-line="255" id="ent0042"><rect fill="#F1F1F1" height="208.28" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="271.0404" x="297.48" y="2370.74"/><ellipse cx="364.6177" cy="2388.76" fill="#EB937F" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M369.3403,2396.26 L360.2583,2396.26 L360.2583,2381.6799 L369.3403,2381.6799 L369.3403,2384.219 L363.1392,2384.219 L363.1392,2387.3635 L368.7544,2387.3635 L368.7544,2389.9026 L363.1392,2389.9026 L363.1392,2393.7209 L369.3403,2393.7209 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="127.7651" x="386.6177" y="2395.58">PipelinePhase</text><line style="stroke:#181818;stroke-width:0.5;" x1="298.48" x2="567.5204" y1="2406.78" y2="2406.78"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="69.5452" x="303.48" y="2430.62">Startup</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="145.5202" x="303.48" y="2456.66">UserGeneration</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="259.0404" x="303.48" y="2482.7">BreweryAndBeerGeneration</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="178.5852" x="303.48" y="2508.74">CheckinGeneration</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="161.6253" x="303.48" y="2534.78">RatingGeneration</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="91.9902" x="303.48" y="2560.82">Teardown</text><line style="stroke:#181818;stroke-width:0.5;" x1="298.48" x2="567.5204" y1="2571.02" y2="2571.02"/></g><!--class LogEntry--><g class="entity" data-qualified-name="Infrastructure.Logging.LogEntry" data-source-line="264" id="ent0043"><rect fill="#F1F1F1" height="234.32" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="496.9755" x="64.51" y="2021.34"/><ellipse cx="267.1576" cy="2039.36" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M269.9643,2046.4401 Q269.2807,2046.7916 268.5287,2046.9674 Q267.7768,2047.1432 266.9467,2047.1432 Q263.9975,2047.1432 262.4447,2045.1998 Q260.892,2043.2565 260.892,2039.5846 Q260.892,2035.903 262.4447,2033.9596 Q263.9975,2032.0163 266.9467,2032.0163 Q267.7768,2032.0163 268.5385,2032.192 Q269.3002,2032.3678 269.9643,2032.7194 L269.9643,2035.9225 Q269.2221,2035.2389 268.5238,2034.9215 Q267.8256,2034.6041 267.0834,2034.6041 Q265.5014,2034.6041 264.6957,2035.859 Q263.8901,2037.1139 263.8901,2039.5846 Q263.8901,2042.0455 264.6957,2043.3004 Q265.5014,2044.5553 267.0834,2044.5553 Q267.8256,2044.5553 268.5238,2044.2379 Q269.2221,2043.9205 269.9643,2043.237 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="82.6802" x="289.1576" y="2046.18">LogEntry</text><line style="stroke:#181818;stroke-width:0.5;" x1="65.51" x2="560.4855" y1="2057.38" y2="2057.38"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="75.51" cy="2075.9" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="469.9755" x="85.51" y="2081.22">timestamp : std::chrono::system_clock::time_point</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="75.51" cy="2101.94" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="138.6653" x="85.51" y="2107.26">level : LogLevel</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="75.51" cy="2127.98" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="198.7552" x="85.51" y="2133.3">phase : PipelinePhase</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="75.51" cy="2154.02" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="188.5354" x="85.51" y="2159.34">message : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="75.51" cy="2180.06" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="277.2307" x="85.51" y="2185.38">city : std::optional<std::string></text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="75.51" cy="2206.1" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="327.0006" x="85.51" y="2211.42">entity_id : std::optional<std::string></text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="75.51" cy="2232.14" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="305.4008" x="85.51" y="2237.46">worker : std::optional<std::string></text><line style="stroke:#181818;stroke-width:0.5;" x1="65.51" x2="560.4855" y1="2247.66" y2="2247.66"/></g><!--class Logger--><g class="entity" data-qualified-name="Infrastructure.Logging.Logger" data-source-line="274" id="ent0044"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="300.9105" x="615.54" y="876.06"/><ellipse cx="712.6752" cy="907.1" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M708.3549,902.559 L708.3549,900.0199 L717.0366,900.0199 L717.0366,902.559 L714.1362,902.559 L714.1362,912.0609 L717.0366,912.0609 L717.0366,914.6 L708.3549,914.6 L708.3549,912.0609 L711.2553,912.0609 L711.2553,902.559 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="732.6752" y="900.9">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="63.42" x="751.7852" y="926.94">Logger</text><line style="stroke:#181818;stroke-width:0.5;" x1="616.54" x2="915.4505" y1="938.14" y2="938.14"/><line style="stroke:#181818;stroke-width:0.5;" x1="616.54" x2="915.4505" y1="946.14" y2="946.14"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="626.54" cy="977.68" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="243.7404" x="636.54" y="969.98">Log(level, phase, message,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="263.2705" x="647.18" y="996.02">city, entity_id, worker) : void</text></g><!--class PipelineLogger--><g class="entity" data-qualified-name="Infrastructure.Logging.PipelineLogger" data-source-line="278" id="ent0045"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="396.6303" x="543.68" y="1484.82"/><ellipse cx="669.5751" cy="1502.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M672.3817,1509.9201 Q671.6981,1510.2716 670.9461,1510.4474 Q670.1942,1510.6232 669.3641,1510.6232 Q666.4149,1510.6232 664.8622,1508.6798 Q663.3094,1506.7365 663.3094,1503.0646 Q663.3094,1499.383 664.8622,1497.4396 Q666.4149,1495.4963 669.3641,1495.4963 Q670.1942,1495.4963 670.9559,1495.672 Q671.7176,1495.8478 672.3817,1496.1994 L672.3817,1499.4025 Q671.6395,1498.7189 670.9413,1498.4015 Q670.243,1498.0841 669.5008,1498.0841 Q667.9188,1498.0841 667.1131,1499.339 Q666.3075,1500.5939 666.3075,1503.0646 Q666.3075,1505.5255 667.1131,1506.7804 Q667.9188,1508.0353 669.5008,1508.0353 Q670.243,1508.0353 670.9413,1507.7179 Q671.6395,1507.4005 672.3817,1506.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="135.8402" x="691.5751" y="1509.66">PipelineLogger</text><line style="stroke:#181818;stroke-width:0.5;" x1="544.68" x2="939.3103" y1="1520.86" y2="1520.86"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="551.68" y="1536.38"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="369.6303" x="564.68" y="1544.7">log_ch_ : BoundedChannel<LogEntry>&</text><line style="stroke:#181818;stroke-width:0.5;" x1="544.68" x2="939.3103" y1="1554.9" y2="1554.9"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="554.68" cy="1586.44" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="243.7404" x="564.68" y="1578.74">Log(level, phase, message,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="263.2705" x="575.32" y="1604.78">city, entity_id, worker) : void</text></g><!--class LogWorker--><g class="entity" data-qualified-name="Infrastructure.Logging.LogWorker" data-source-line="283" id="ent0046"><rect fill="#F1F1F1" height="182.24" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="462.6805" x="45.66" y="1458.78"/><ellipse cx="221.9952" cy="1476.8" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M224.8018,1483.8801 Q224.1182,1484.2316 223.3663,1484.4074 Q222.6143,1484.5832 221.7842,1484.5832 Q218.835,1484.5832 217.2823,1482.6398 Q215.7295,1480.6965 215.7295,1477.0246 Q215.7295,1473.343 217.2823,1471.3996 Q218.835,1469.4563 221.7842,1469.4563 Q222.6143,1469.4563 223.376,1469.632 Q224.1377,1469.8078 224.8018,1470.1594 L224.8018,1473.3625 Q224.0596,1472.6789 223.3614,1472.3615 Q222.6631,1472.0441 221.9209,1472.0441 Q220.3389,1472.0441 219.5332,1473.299 Q218.7276,1474.5539 218.7276,1477.0246 Q218.7276,1479.4855 219.5332,1480.7404 Q220.3389,1481.9953 221.9209,1481.9953 Q222.6631,1481.9953 223.3614,1481.6779 Q224.0596,1481.3605 224.8018,1480.677 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="101.0102" x="243.9952" y="1483.62">LogWorker</text><line style="stroke:#181818;stroke-width:0.5;" x1="46.66" x2="507.3405" y1="1494.82" y2="1494.82"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="53.66" y="1510.34"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="369.6303" x="66.66" y="1518.66">log_ch_ : BoundedChannel<LogEntry>&</text><line style="stroke:#181818;stroke-width:0.5;" x1="46.66" x2="507.3405" y1="1528.86" y2="1528.86"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="56.66" cy="1547.38" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="104.1252" x="66.66" y="1552.7">Run() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="53.66" y="1570.42"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="311.9356" x="66.66" y="1578.74">FormatTimestamp(tp) : std::string</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="53.66" y="1596.46"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="435.6805" x="66.66" y="1604.78">ToSpdlogLevel(level) : spdlog::level::level_enum</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="53.66" y="1622.5"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="254.4007" x="66.66" y="1630.82">ToString(phase) : std::string</text></g><!--class BoundedChannel--><g class="entity" data-qualified-name="Infrastructure.Pipeline Channel.BoundedChannel" data-source-line="300" id="ent0052"><rect fill="#F1F1F1" height="286.4" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="372.5302" x="995.73" y="1995.3"/><ellipse cx="1090.5001" cy="2013.32" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M1093.3067,2020.4001 Q1092.6231,2020.7516 1091.8712,2020.9274 Q1091.1192,2021.1032 1090.2891,2021.1032 Q1087.3399,2021.1032 1085.7872,2019.1598 Q1084.2345,2017.2165 1084.2345,2013.5446 Q1084.2345,2009.863 1085.7872,2007.9196 Q1087.3399,2005.9763 1090.2891,2005.9763 Q1091.1192,2005.9763 1091.8809,2006.152 Q1092.6427,2006.3278 1093.3067,2006.6794 L1093.3067,2009.8825 Q1092.5645,2009.1989 1091.8663,2008.8815 Q1091.168,2008.5641 1090.4259,2008.5641 Q1088.8438,2008.5641 1088.0382,2009.819 Q1087.2325,2011.0739 1087.2325,2013.5446 Q1087.2325,2016.0055 1088.0382,2017.2604 Q1088.8438,2018.5153 1090.4259,2018.5153 Q1091.168,2018.5153 1091.8663,2018.1979 Q1092.5645,2017.8805 1093.3067,2017.197 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="158.7901" x="1112.5001" y="2020.14">BoundedChannel</text><rect fill="#FFFFFF" height="28.04" style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2;" width="13.2" x="1358.0602" y="1992.3"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="11.2" x="1359.0602" y="2013.14">T</text><line style="stroke:#181818;stroke-width:0.5;" x1="996.73" x2="1367.2602" y1="2031.34" y2="2031.34"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1003.73" y="2046.86"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="215.99" x="1016.73" y="2055.18">queue_ : std::queue<T></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1003.73" y="2072.9"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="183.19" x="1016.73" y="2081.22">mutex_ : std::mutex</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1003.73" y="2098.94"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="312.0403" x="1016.73" y="2107.26">not_full_ : std::condition_variable</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1003.73" y="2124.98"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="345.5302" x="1016.73" y="2133.3">not_empty_ : std::condition_variable</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1003.73" y="2151.02"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="165.2051" x="1016.73" y="2159.34">capacity_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1003.73" y="2177.06"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="130.31" x="1016.73" y="2185.38">closed_ : bool</text><line style="stroke:#181818;stroke-width:0.5;" x1="996.73" x2="1367.2602" y1="2195.58" y2="2195.58"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.73" cy="2214.1" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="183.9852" x="1016.73" y="2219.42">Send(item : T) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.73" cy="2240.14" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="249.7254" x="1016.73" y="2245.46">Receive() : std::optional<T></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.73" cy="2266.18" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="121.3851" x="1016.73" y="2271.5">Close() : void</text></g><!--class DataPreloader--><g class="entity" data-qualified-name="Infrastructure.Data Preloading.DataPreloader" data-source-line="316" id="ent0054"><rect fill="#F1F1F1" height="182.24" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="770.0361" x="995.98" y="850.02"/><ellipse cx="1310.078" cy="881.06" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M1305.7577,876.519 L1305.7577,873.9799 L1314.4394,873.9799 L1314.4394,876.519 L1311.539,876.519 L1311.539,886.0209 L1314.4394,886.0209 L1314.4394,888.56 L1305.7577,888.56 L1305.7577,886.0209 L1308.6581,886.0209 L1308.6581,876.519 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="1347.678" y="874.86">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="132.84" x="1332.078" y="900.9">DataPreloader</text><line style="stroke:#181818;stroke-width:0.5;" x1="996.98" x2="1765.0161" y1="912.1" y2="912.1"/><line style="stroke:#181818;stroke-width:0.5;" x1="996.98" x2="1765.0161" y1="920.1" y2="920.1"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.98" cy="938.62" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="710.1312" x="1016.98" y="943.94">LoadLocations(filepath : const std::filesystem::path&) : std::vector<Location></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.98" cy="964.66" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="725.9213" x="1016.98" y="969.98">LoadBeerStyles(filepath : const std::filesystem::path&) : std::vector<BeerStyle></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.98" cy="990.7" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="698.0414" x="1016.98" y="996.02">LoadPersonas(filepath : const std::filesystem::path&) : std::vector<Persona></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.98" cy="1016.74" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="743.0361" x="1016.98" y="1022.06">LoadNamesByCountry(filepath : const std::filesystem::path&) : NamesByCountry</text></g><!--class JsonLoader--><g class="entity" data-qualified-name="Infrastructure.Data Preloading.JsonLoader" data-source-line="323" id="ent0055"><rect fill="#F1F1F1" height="156.2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="770.0361" x="995.98" y="1471.8"/><ellipse cx="1322.508" cy="1489.82" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M1325.3146,1496.9001 Q1324.631,1497.2516 1323.8791,1497.4274 Q1323.1271,1497.6032 1322.297,1497.6032 Q1319.3478,1497.6032 1317.7951,1495.6598 Q1316.2423,1493.7165 1316.2423,1490.0446 Q1316.2423,1486.363 1317.7951,1484.4196 Q1319.3478,1482.4763 1322.297,1482.4763 Q1323.1271,1482.4763 1323.8888,1482.652 Q1324.6505,1482.8278 1325.3146,1483.1794 L1325.3146,1486.3825 Q1324.5724,1485.6989 1323.8742,1485.3815 Q1323.1759,1485.0641 1322.4337,1485.0641 Q1320.8517,1485.0641 1320.046,1486.319 Q1319.2404,1487.5739 1319.2404,1490.0446 Q1319.2404,1492.5055 1320.046,1493.7604 Q1320.8517,1495.0153 1322.4337,1495.0153 Q1323.1759,1495.0153 1323.8742,1494.6979 Q1324.5724,1494.3805 1325.3146,1493.697 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="107.9802" x="1344.508" y="1496.64">JsonLoader</text><line style="stroke:#181818;stroke-width:0.5;" x1="996.98" x2="1765.0161" y1="1507.84" y2="1507.84"/><line style="stroke:#181818;stroke-width:0.5;" x1="996.98" x2="1765.0161" y1="1515.84" y2="1515.84"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.98" cy="1534.36" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="710.1312" x="1016.98" y="1539.68">LoadLocations(filepath : const std::filesystem::path&) : std::vector<Location></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.98" cy="1560.4" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="725.9213" x="1016.98" y="1565.72">LoadBeerStyles(filepath : const std::filesystem::path&) : std::vector<BeerStyle></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.98" cy="1586.44" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="698.0414" x="1016.98" y="1591.76">LoadPersonas(filepath : const std::filesystem::path&) : std::vector<Persona></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1006.98" cy="1612.48" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="743.0361" x="1016.98" y="1617.8">LoadNamesByCountry(filepath : const std::filesystem::path&) : NamesByCountry</text></g><!--class EnrichmentService--><g class="entity" data-qualified-name="Infrastructure.Enrichment.EnrichmentService" data-source-line="334" id="ent0057"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="533.8711" x="1869.06" y="876.06"/><ellipse cx="2044.0655" cy="907.1" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M2039.7452,902.559 L2039.7452,900.0199 L2048.4269,900.0199 L2048.4269,902.559 L2045.5265,902.559 L2045.5265,912.0609 L2048.4269,912.0609 L2048.4269,914.6 L2039.7452,914.6 L2039.7452,912.0609 L2042.6456,912.0609 L2042.6456,902.559 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="2102.6755" y="900.9">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="174.86" x="2066.0655" y="926.94">EnrichmentService</text><line style="stroke:#181818;stroke-width:0.5;" x1="1870.06" x2="2401.9311" y1="938.14" y2="938.14"/><line style="stroke:#181818;stroke-width:0.5;" x1="1870.06" x2="2401.9311" y1="946.14" y2="946.14"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1880.06" cy="977.68" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="396.5207" x="1890.06" y="969.98">GetLocationContext(loc : const Location&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="496.2311" x="1900.7" y="996.02">strategy : const ContextStrategy&) : LocationContext</text></g><!--class WikipediaService--><g class="entity" data-qualified-name="Infrastructure.Enrichment.WikipediaService" data-source-line="338" id="ent0058"><rect fill="#F1F1F1" height="182.24" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="595.0209" x="1822.49" y="1458.78"/><ellipse cx="2035.6929" cy="1476.8" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M2038.4995,1483.8801 Q2037.8159,1484.2316 2037.064,1484.4074 Q2036.312,1484.5832 2035.4819,1484.5832 Q2032.5327,1484.5832 2030.98,1482.6398 Q2029.4272,1480.6965 2029.4272,1477.0246 Q2029.4272,1473.343 2030.98,1471.3996 Q2032.5327,1469.4563 2035.4819,1469.4563 Q2036.312,1469.4563 2037.0737,1469.632 Q2037.8354,1469.8078 2038.4995,1470.1594 L2038.4995,1473.3625 Q2037.7573,1472.6789 2037.0591,1472.3615 Q2036.3608,1472.0441 2035.6186,1472.0441 Q2034.0366,1472.0441 2033.231,1473.299 Q2032.4253,1474.5539 2032.4253,1477.0246 Q2032.4253,1479.4855 2033.231,1480.7404 Q2034.0366,1481.9953 2035.6186,1481.9953 Q2036.3608,1481.9953 2037.0591,1481.6779 Q2037.7573,1481.3605 2038.4995,1480.677 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="159.6151" x="2057.6929" y="1483.62">WikipediaService</text><line style="stroke:#181818;stroke-width:0.5;" x1="1823.49" x2="2416.5109" y1="1494.82" y2="1494.82"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1830.49" y="1510.34"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="341.3002" x="1843.49" y="1518.66">client_ : std::unique_ptr<WebClient></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1830.49" y="1536.38"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="568.0209" x="1843.49" y="1544.7">extract_cache_ : std::unordered_map<std::string, std::string></text><line style="stroke:#181818;stroke-width:0.5;" x1="1823.49" x2="2416.5109" y1="1554.9" y2="1554.9"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1833.49" cy="1586.44" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="396.5207" x="1843.49" y="1578.74">GetLocationContext(loc : const Location&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="496.2311" x="1854.13" y="1604.78">strategy : const ContextStrategy&) : LocationContext</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="1830.49" y="1622.5"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="455.0912" x="1843.49" y="1630.82">FetchExtract(query : std::string_view) : std::string</text></g><!--class WebClient--><g class="entity" data-qualified-name="Infrastructure.Enrichment.WebClient" data-source-line="345" id="ent0059"><rect fill="#F1F1F1" height="130.16" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="469.9061" x="1885.05" y="2073.42"/><ellipse cx="2066.683" cy="2104.46" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M2062.3627,2099.919 L2062.3627,2097.3799 L2071.0444,2097.3799 L2071.0444,2099.919 L2068.144,2099.919 L2068.144,2109.4209 L2071.0444,2109.4209 L2071.0444,2111.96 L2062.3627,2111.96 L2062.3627,2109.4209 L2065.2631,2109.4209 L2065.2631,2099.919 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="2086.683" y="2098.26">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="97.46" x="2088.773" y="2124.3">WebClient</text><line style="stroke:#181818;stroke-width:0.5;" x1="1886.05" x2="2353.9561" y1="2135.5" y2="2135.5"/><line style="stroke:#181818;stroke-width:0.5;" x1="1886.05" x2="2353.9561" y1="2143.5" y2="2143.5"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1896.05" cy="2162.02" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="356.9361" x="1906.05" y="2167.34">Get(url : const std::string&) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1896.05" cy="2188.06" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="442.9061" x="1906.05" y="2193.38">UrlEncode(value : const std::string&) : std::string</text></g><!--class CURLWebClient--><g class="entity" data-qualified-name="Infrastructure.Enrichment.CURLWebClient" data-source-line="350" id="ent0060"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="469.9061" x="1885.05" y="2422.82"/><ellipse cx="2041.8105" cy="2440.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M2044.6172,2447.9201 Q2043.9336,2448.2716 2043.1816,2448.4474 Q2042.4297,2448.6232 2041.5996,2448.6232 Q2038.6504,2448.6232 2037.0976,2446.6798 Q2035.5449,2444.7365 2035.5449,2441.0646 Q2035.5449,2437.383 2037.0976,2435.4396 Q2038.6504,2433.4963 2041.5996,2433.4963 Q2042.4297,2433.4963 2043.1914,2433.672 Q2043.9531,2433.8478 2044.6172,2434.1994 L2044.6172,2437.4025 Q2043.875,2436.7189 2043.1767,2436.4015 Q2042.4785,2436.0841 2041.7363,2436.0841 Q2040.1543,2436.0841 2039.3486,2437.339 Q2038.543,2438.5939 2038.543,2441.0646 Q2038.543,2443.5255 2039.3486,2444.7804 Q2040.1543,2446.0353 2041.7363,2446.0353 Q2042.4785,2446.0353 2043.1767,2445.7179 Q2043.875,2445.4005 2044.6172,2444.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="147.385" x="2063.8105" y="2447.66">CURLWebClient</text><line style="stroke:#181818;stroke-width:0.5;" x1="1886.05" x2="2353.9561" y1="2458.86" y2="2458.86"/><line style="stroke:#181818;stroke-width:0.5;" x1="1886.05" x2="2353.9561" y1="2466.86" y2="2466.86"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1896.05" cy="2485.38" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="356.9361" x="1906.05" y="2490.7">Get(url : const std::string&) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1896.05" cy="2511.42" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="442.9061" x="1906.05" y="2516.74">UrlEncode(value : const std::string&) : std::string</text></g><!--class DataGenerator--><g class="entity" data-qualified-name="Infrastructure.Data Generation.DataGenerator" data-source-line="359" id="ent0062"><rect fill="#F1F1F1" height="416.6" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="526.9009" x="3048.55" y="732.84"/><ellipse cx="3238.1705" cy="763.88" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M3233.8502,759.339 L3233.8502,756.7999 L3242.5318,756.7999 L3242.5318,759.339 L3239.6314,759.339 L3239.6314,768.8409 L3242.5318,768.8409 L3242.5318,771.38 L3233.8502,771.38 L3233.8502,768.8409 L3236.7505,768.8409 L3236.7505,759.339 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="3278.6805" y="757.68">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="138.66" x="3260.1705" y="783.72">DataGenerator</text><line style="stroke:#181818;stroke-width:0.5;" x1="3049.55" x2="3574.4509" y1="794.92" y2="794.92"/><line style="stroke:#181818;stroke-width:0.5;" x1="3049.55" x2="3574.4509" y1="802.92" y2="802.92"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3059.55" cy="834.46" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="416.4859" x="3069.55" y="826.76">GenerateBrewery(location : const Location&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="469.4959" x="3080.19" y="852.8">context : const LocationContext&) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3059.55" cy="912.58" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="386.6154" x="3069.55" y="878.84">GenerateBeer(brewery_id : sqlite3_int64,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="246.2355" x="3080.19" y="904.88">location : const Location&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="318.0005" x="3080.19" y="930.92">context : const LocationContext&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="342.0806" x="3080.19" y="956.96">style : const BeerStyle&) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3059.55" cy="977.68" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="499.9009" x="3069.55" y="983">GenerateUser(location : const Location&) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3059.55" cy="1029.76" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="441.8007" x="3069.55" y="1009.04">GenerateCheckin(user : const GeneratedUser&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="342.7208" x="3080.19" y="1035.08">brewery : const GeneratedBrewery&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="433.5807" x="3080.19" y="1061.12">timestamp : const std::string&) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3059.55" cy="1107.88" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="424.8408" x="3069.55" y="1087.16">GenerateRating(user : const GeneratedUser&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="275.1805" x="3080.19" y="1113.2">beer : const GeneratedBeer&,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="379.3404" x="3080.19" y="1139.24">checkin_id : sqlite3_int64) : RatingResult</text></g><!--class MockGenerator--><g class="entity" data-qualified-name="Infrastructure.Data Generation.MockGenerator" data-source-line="367" id="ent0063"><rect fill="#F1F1F1" height="208.28" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="526.3008" x="2473.85" y="1445.76"/><ellipse cx="2660.0228" cy="1463.78" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M2662.8294,1470.8601 Q2662.1458,1471.2116 2661.3939,1471.3874 Q2660.6419,1471.5632 2659.8119,1471.5632 Q2656.8626,1471.5632 2655.3099,1469.6198 Q2653.7572,1467.6765 2653.7572,1464.0046 Q2653.7572,1460.323 2655.3099,1458.3796 Q2656.8626,1456.4363 2659.8119,1456.4363 Q2660.6419,1456.4363 2661.4036,1456.612 Q2662.1654,1456.7878 2662.8294,1457.1394 L2662.8294,1460.3425 Q2662.0872,1459.6589 2661.389,1459.3415 Q2660.6908,1459.0241 2659.9486,1459.0241 Q2658.3665,1459.0241 2657.5609,1460.279 Q2656.7552,1461.5339 2656.7552,1464.0046 Q2656.7552,1466.4655 2657.5609,1467.7204 Q2658.3665,1468.9753 2659.9486,1468.9753 Q2660.6908,1468.9753 2661.389,1468.6579 Q2662.0872,1468.3405 2662.8294,1467.657 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="144.9552" x="2682.0228" y="1470.6">MockGenerator</text><line style="stroke:#181818;stroke-width:0.5;" x1="2474.85" x2="2999.1508" y1="1481.8" y2="1481.8"/><line style="stroke:#181818;stroke-width:0.5;" x1="2474.85" x2="2999.1508" y1="1489.8" y2="1489.8"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2484.85" cy="1508.32" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="337.2808" x="2494.85" y="1513.64">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2484.85" cy="1534.36" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="269.7405" x="2494.85" y="1539.68">GenerateBeer(...) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2484.85" cy="1560.4" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="269.2006" x="2494.85" y="1565.72">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2484.85" cy="1586.44" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="335.3304" x="2494.85" y="1591.76">GenerateCheckin(...) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2484.85" cy="1612.48" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="301.4107" x="2494.85" y="1617.8">GenerateRating(...) : RatingResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="2481.85" y="1635.52"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="499.3008" x="2494.85" y="1643.84">DeterministicHash(location : const Location&) : size_t</text></g><!--class LlamaGenerator--><g class="entity" data-qualified-name="Infrastructure.Data Generation.LlamaGenerator" data-source-line="376" id="ent0064"><rect fill="#F1F1F1" height="390.56" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="553.9558" x="3035.02" y="1354.62"/><ellipse cx="3232.8378" cy="1372.64" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M3235.6444,1379.7201 Q3234.9608,1380.0716 3234.2089,1380.2474 Q3233.4569,1380.4232 3232.6268,1380.4232 Q3229.6776,1380.4232 3228.1249,1378.4798 Q3226.5722,1376.5365 3226.5722,1372.8646 Q3226.5722,1369.183 3228.1249,1367.2396 Q3229.6776,1365.2963 3232.6268,1365.2963 Q3233.4569,1365.2963 3234.2186,1365.472 Q3234.9804,1365.6478 3235.6444,1365.9994 L3235.6444,1369.2025 Q3234.9022,1368.5189 3234.204,1368.2015 Q3233.5057,1367.8841 3232.7636,1367.8841 Q3231.1815,1367.8841 3230.3759,1369.139 Q3229.5702,1370.3939 3229.5702,1372.8646 Q3229.5702,1375.3255 3230.3759,1376.5804 Q3231.1815,1377.8353 3232.7636,1377.8353 Q3233.5057,1377.8353 3234.204,1377.5179 Q3234.9022,1377.2005 3235.6444,1376.517 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="149.3203" x="3254.8378" y="1379.46">LlamaGenerator</text><line style="stroke:#181818;stroke-width:0.5;" x1="3036.02" x2="3587.9758" y1="1390.66" y2="1390.66"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3043.02" y="1406.18"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="207.3199" x="3056.02" y="1414.5">model_ : ModelHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3043.02" y="1432.22"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="238.5802" x="3056.02" y="1440.54">context_ : ContextHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3043.02" y="1458.26"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="526.9558" x="3056.02" y="1466.58">prompt_formatter_ : std::unique_ptr<PromptFormatter></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3043.02" y="1484.3"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="175.9203" x="3056.02" y="1492.62">rng_ : std::mt19937</text><line style="stroke:#181818;stroke-width:0.5;" x1="3036.02" x2="3587.9758" y1="1502.82" y2="1502.82"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3046.02" cy="1521.34" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="337.2808" x="3056.02" y="1526.66">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3046.02" cy="1547.38" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="269.7405" x="3056.02" y="1552.7">GenerateBeer(...) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3046.02" cy="1573.42" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="269.2006" x="3056.02" y="1578.74">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3046.02" cy="1599.46" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="335.3304" x="3056.02" y="1604.78">GenerateCheckin(...) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3046.02" cy="1625.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="301.4107" x="3056.02" y="1630.82">GenerateRating(...) : RatingResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3043.02" y="1648.54"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="413.4806" x="3056.02" y="1656.86">Load(opts : const GeneratorOptions&) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3043.02" y="1687.6"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="336.6154" x="3056.02" y="1682.9">Infer(system_prompt, user_prompt,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="320.1206" x="3066.66" y="1708.94">max_tokens, grammar) : std::string</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3043.02" y="1726.66"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="319.5854" x="3056.02" y="1734.98">ValidateModelArchitecture() : void</text></g><!--class PromptFormatter--><g class="entity" data-qualified-name="Infrastructure.Data Generation.PromptFormatter" data-source-line="391" id="ent0065"><rect fill="#F1F1F1" height="156.2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="435.3959" x="3094.3" y="2060.4"/><ellipse cx="3226.648" cy="2091.44" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M3222.3277,2086.899 L3222.3277,2084.3599 L3231.0093,2084.3599 L3231.0093,2086.899 L3228.1089,2086.899 L3228.1089,2096.4009 L3231.0093,2096.4009 L3231.0093,2098.94 L3222.3277,2098.94 L3222.3277,2096.4009 L3225.2281,2096.4009 L3225.2281,2086.899 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="3278.678" y="2085.24">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="161.7" x="3248.648" y="2111.28">PromptFormatter</text><line style="stroke:#181818;stroke-width:0.5;" x1="3095.3" x2="3528.6959" y1="2122.48" y2="2122.48"/><line style="stroke:#181818;stroke-width:0.5;" x1="3095.3" x2="3528.6959" y1="2130.48" y2="2130.48"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3105.3" cy="2162.02" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="390.0106" x="3115.3" y="2154.32">Format(system_prompt : std::string_view,</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="397.7559" x="3125.94" y="2180.36">user_prompt : std::string_view) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3105.3" cy="2201.08" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="381.2908" x="3115.3" y="2206.4">ExpectedArchitecture() : std::string_view</text></g><!--class Gemma4JinjaPromptFormatter--><g class="entity" data-qualified-name="Infrastructure.Data Generation.Gemma4JinjaPromptFormatter" data-source-line="396" id="ent0066"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="408.2908" x="3107.85" y="2422.82"/><ellipse cx="3162.8127" cy="2440.84" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M3165.6193,2447.9201 Q3164.9358,2448.2716 3164.1838,2448.4474 Q3163.4318,2448.6232 3162.6018,2448.6232 Q3159.6526,2448.6232 3158.0998,2446.6798 Q3156.5471,2444.7365 3156.5471,2441.0646 Q3156.5471,2437.383 3158.0998,2435.4396 Q3159.6526,2433.4963 3162.6018,2433.4963 Q3163.4318,2433.4963 3164.1936,2433.672 Q3164.9553,2433.8478 3165.6193,2434.1994 L3165.6193,2437.4025 Q3164.8772,2436.7189 3164.1789,2436.4015 Q3163.4807,2436.0841 3162.7385,2436.0841 Q3161.1565,2436.0841 3160.3508,2437.339 Q3159.5451,2438.5939 3159.5451,2441.0646 Q3159.5451,2443.5255 3160.3508,2444.7804 Q3161.1565,2446.0353 3162.7385,2446.0353 Q3163.4807,2446.0353 3164.1789,2445.7179 Q3164.8772,2445.4005 3165.6193,2444.717 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="289.3654" x="3184.8127" y="2447.66">Gemma4JinjaPromptFormatter</text><line style="stroke:#181818;stroke-width:0.5;" x1="3108.85" x2="3515.1408" y1="2458.86" y2="2458.86"/><line style="stroke:#181818;stroke-width:0.5;" x1="3108.85" x2="3515.1408" y1="2466.86" y2="2466.86"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3118.85" cy="2485.38" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="199.1556" x="3128.85" y="2490.7">Format(...) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3118.85" cy="2511.42" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="381.2908" x="3128.85" y="2516.74">ExpectedArchitecture() : std::string_view</text></g><!--class ExportService--><g class="entity" data-qualified-name="Infrastructure.Data Export.ExportService" data-source-line="405" id="ent0068"><rect fill="#F1F1F1" height="260.36" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="670.2261" x="3644.89" y="810.96"/><ellipse cx="3910.863" cy="842" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M3906.5427,837.459 L3906.5427,834.9199 L3915.2244,834.9199 L3915.2244,837.459 L3912.324,837.459 L3912.324,846.9609 L3915.2244,846.9609 L3915.2244,849.5 L3906.5427,849.5 L3906.5427,846.9609 L3909.4431,846.9609 L3909.4431,837.459 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="3946.683" y="835.8">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="129.28" x="3932.863" y="861.84">ExportService</text><line style="stroke:#181818;stroke-width:0.5;" x1="3645.89" x2="4314.1161" y1="873.04" y2="873.04"/><line style="stroke:#181818;stroke-width:0.5;" x1="3645.89" x2="4314.1161" y1="881.04" y2="881.04"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="899.56" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="143.5253" x="3665.89" y="904.88">Initialize() : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="925.6" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="643.2261" x="3665.89" y="930.92">ProcessBrewery(brewery : const GeneratedBrewery&) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="951.64" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="541.9157" x="3665.89" y="956.96">ProcessBeer(beer : const GeneratedBeer&) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="977.68" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="538.9908" x="3665.89" y="983">ProcessUser(user : const GeneratedUser&) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1003.72" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="636.9206" x="3665.89" y="1009.04">ProcessCheckin(checkin : const GeneratedCheckin&) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1029.76" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="499.3311" x="3665.89" y="1035.08">ProcessRating(rating : const GeneratedRating&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1055.8" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="136.9352" x="3665.89" y="1061.12">Finalize() : void</text></g><!--class SqliteExportService--><g class="entity" data-qualified-name="Infrastructure.Data Export.SqliteExportService" data-source-line="415" id="ent0069"><rect fill="#F1F1F1" height="624.92" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="670.2261" x="3644.89" y="1237.44"/><ellipse cx="3884.5379" cy="1255.46" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M3887.3445,1262.5401 Q3886.6609,1262.8916 3885.909,1263.0674 Q3885.157,1263.2432 3884.327,1263.2432 Q3881.3777,1263.2432 3879.825,1261.2998 Q3878.2723,1259.3565 3878.2723,1255.6846 Q3878.2723,1252.003 3879.825,1250.0596 Q3881.3777,1248.1163 3884.327,1248.1163 Q3885.157,1248.1163 3885.9187,1248.292 Q3886.6805,1248.4678 3887.3445,1248.8194 L3887.3445,1252.0225 Q3886.6023,1251.3389 3885.9041,1251.0215 Q3885.2059,1250.7041 3884.4637,1250.7041 Q3882.8816,1250.7041 3882.076,1251.959 Q3881.2703,1253.2139 3881.2703,1255.6846 Q3881.2703,1258.1455 3882.076,1259.4004 Q3882.8816,1260.6553 3884.4637,1260.6553 Q3885.2059,1260.6553 3885.9041,1260.3379 Q3886.6023,1260.0205 3887.3445,1259.337 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="181.9303" x="3906.5379" y="1262.28">SqliteExportService</text><line style="stroke:#181818;stroke-width:0.5;" x1="3645.89" x2="4314.1161" y1="1273.48" y2="1273.48"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1289"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="548.2203" x="3665.89" y="1297.32">date_time_provider_ : std::unique_ptr<DateTimeProvider></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1315.04"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="333.475" x="3665.89" y="1323.36">db_handle_ : SqliteDatabaseHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1341.08"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="440.2603" x="3665.89" y="1349.4">insert_location_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1367.12"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="442.0804" x="3665.89" y="1375.44">insert_brewery_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1393.16"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="408.3102" x="3665.89" y="1401.48">insert_beer_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1419.2"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="405.9253" x="3665.89" y="1427.52">insert_user_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1445.24"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="437.7253" x="3665.89" y="1453.56">insert_checkin_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1471.28"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="419.1854" x="3665.89" y="1479.6">insert_rating_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1497.32"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="234.9451" x="3665.89" y="1505.64">transaction_open_ : bool</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1523.36"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="609.6306" x="3665.89" y="1531.68">location_cache_ : std::unordered_map<std::string, sqlite3_int64></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1549.4"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="611.4506" x="3665.89" y="1557.72">brewery_cache_ : std::unordered_map<std::string, sqlite3_int64></text><line style="stroke:#181818;stroke-width:0.5;" x1="3645.89" x2="4314.1161" y1="1567.92" y2="1567.92"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1586.44" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="143.5253" x="3665.89" y="1591.76">Initialize() : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1612.48" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="643.2261" x="3665.89" y="1617.8">ProcessBrewery(brewery : const GeneratedBrewery&) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1638.52" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="541.9157" x="3665.89" y="1643.84">ProcessBeer(beer : const GeneratedBeer&) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1664.56" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="538.9908" x="3665.89" y="1669.88">ProcessUser(user : const GeneratedUser&) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1690.6" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="636.9206" x="3665.89" y="1695.92">ProcessCheckin(checkin : const GeneratedCheckin&) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1716.64" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="499.3311" x="3665.89" y="1721.96">ProcessRating(rating : const GeneratedRating&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3655.89" cy="1742.68" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="136.9352" x="3665.89" y="1748">Finalize() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1765.72"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="218.1203" x="3665.89" y="1774.04">InitializeSchema() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1791.76"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="249.9004" x="3665.89" y="1800.08">PrepareStatements() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1817.8"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="319.1804" x="3665.89" y="1826.12">RollbackAndCloseNoThrow() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="3652.89" y="1843.84"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="244.9904" x="3665.89" y="1852.16">FinalizeStatements() : void</text></g><!--class DateTimeProvider--><g class="entity" data-qualified-name="Infrastructure.Data Export.DateTimeProvider" data-source-line="440" id="ent0070"><rect fill="#F1F1F1" height="104.12" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="318.8105" x="3820.59" y="2086.44"/><ellipse cx="3892.0053" cy="2117.48" fill="#B4A7E5" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M3887.6849,2112.939 L3887.6849,2110.3999 L3896.3666,2110.3999 L3896.3666,2112.939 L3893.4662,2112.939 L3893.4662,2122.4409 L3896.3666,2122.4409 L3896.3666,2124.98 L3887.6849,2124.98 L3887.6849,2122.4409 L3890.5853,2122.4409 L3890.5853,2112.939 Z " fill="#000000"/><text fill="#000000" font-family="DM Sans" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="101.64" x="3946.6753" y="2111.28">«interface»</text><text fill="#000000" font-family="'DM Sans'" font-size="20" font-style="italic" lengthAdjust="spacing" textLength="166.98" x="3914.0053" y="2137.32">DateTimeProvider</text><line style="stroke:#181818;stroke-width:0.5;" x1="3821.59" x2="4138.4005" y1="2148.52" y2="2148.52"/><line style="stroke:#181818;stroke-width:0.5;" x1="3821.59" x2="4138.4005" y1="2156.52" y2="2156.52"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3831.59" cy="2175.04" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="291.8105" x="3841.59" y="2180.36">GetUtcTimestamp() : std::string</text></g><!--class SystemDateTimeProvider--><g class="entity" data-qualified-name="Infrastructure.Data Export.SystemDateTimeProvider" data-source-line="444" id="ent0071"><rect fill="#F1F1F1" height="78.08" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="318.8105" x="3820.59" y="2435.84"/><ellipse cx="3858.4107" cy="2453.86" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M3861.2173,2460.9401 Q3860.5337,2461.2916 3859.7818,2461.4674 Q3859.0298,2461.6432 3858.1997,2461.6432 Q3855.2505,2461.6432 3853.6978,2459.6998 Q3852.145,2457.7565 3852.145,2454.0846 Q3852.145,2450.403 3853.6978,2448.4596 Q3855.2505,2446.5163 3858.1997,2446.5163 Q3859.0298,2446.5163 3859.7915,2446.692 Q3860.5532,2446.8678 3861.2173,2447.2194 L3861.2173,2450.4225 Q3860.4751,2449.7389 3859.7769,2449.4215 Q3859.0786,2449.1041 3858.3364,2449.1041 Q3856.7544,2449.1041 3855.9487,2450.359 Q3855.1431,2451.6139 3855.1431,2454.0846 Q3855.1431,2456.5455 3855.9487,2457.8004 Q3856.7544,2459.0553 3858.3364,2459.0553 Q3859.0786,2459.0553 3859.7769,2458.7379 Q3860.4751,2458.4205 3861.2173,2457.737 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="236.3202" x="3878.2597" y="2460.68">SystemDateTimeProvider</text><line style="stroke:#181818;stroke-width:0.5;" x1="3821.59" x2="4138.4005" y1="2471.88" y2="2471.88"/><line style="stroke:#181818;stroke-width:0.5;" x1="3821.59" x2="4138.4005" y1="2479.88" y2="2479.88"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="3831.59" cy="2498.4" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="291.8105" x="3841.59" y="2503.72">GetUtcTimestamp() : std::string</text></g><!--class BiergartenPipelineOrchestrator--><g class="entity" data-qualified-name="BiergartenPipelineOrchestrator" data-source-line="220" id="ent0038"><rect fill="#F1F1F1" height="580.84" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="715.5112" x="5116.24" y="7"/><ellipse cx="5325.2353" cy="25.02" fill="#ADD1B2" rx="12" ry="12" style="stroke:#181818;stroke-width:1;"/><path d="M5328.0419,32.1001 Q5327.3583,32.4516 5326.6064,32.6274 Q5325.8544,32.8032 5325.0243,32.8032 Q5322.0751,32.8032 5320.5224,30.8598 Q5318.9697,28.9165 5318.9697,25.2446 Q5318.9697,21.563 5320.5224,19.6196 Q5322.0751,17.6763 5325.0243,17.6763 Q5325.8544,17.6763 5326.6161,17.852 Q5327.3779,18.0278 5328.0419,18.3794 L5328.0419,21.5825 Q5327.2997,20.8989 5326.6015,20.5815 Q5325.9033,20.2641 5325.1611,20.2641 Q5323.579,20.2641 5322.7734,21.519 Q5321.9677,22.7739 5321.9677,25.2446 Q5321.9677,27.7055 5322.7734,28.9604 Q5323.579,30.2153 5325.1611,30.2153 Q5325.9033,30.2153 5326.6015,29.8979 Q5327.2997,29.5805 5328.0419,28.897 Z " fill="#000000"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="288.5206" x="5347.2353" y="31.84">BiergartenPipelineOrchestrator</text><line style="stroke:#181818;stroke-width:0.5;" x1="5117.24" x2="5830.7512" y1="43.04" y2="43.04"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="58.56"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="414.4704" x="5137.24" y="66.88">preloader_ : std::unique_ptr<DataPreloader></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="84.6"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="553.8606" x="5137.24" y="92.92">enrichment_service_ : std::unique_ptr<EnrichmentService></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="110.64"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="421.2656" x="5137.24" y="118.96">generator_ : std::unique_ptr<DataGenerator></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="136.68"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="313.2905" x="5137.24" y="145">logger_ : std::unique_ptr<Logger></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="162.72"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="401.4456" x="5137.24" y="171.04">exporter_ : std::unique_ptr<ExportService></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="188.76"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="598.4708" x="5137.24" y="197.08">brewery_context_strategy_ : std::unique_ptr<ContextStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="214.8"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="530.3357" x="5137.24" y="223.12">sampling_strategy_ : std::unique_ptr<SamplingStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="240.84"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="631.3307" x="5137.24" y="249.16">beer_selection_strategy_ : std::unique_ptr<BeerSelectionStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="266.88"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="618.0908" x="5137.24" y="275.2">checkin_strategy_ : std::unique_ptr<CheckinDistributionStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="292.92"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="417.5404" x="5137.24" y="301.24">beer_style_palette_ : std::vector<BeerStyle></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="318.96"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="278.1801" x="5137.24" y="327.28">options_ : ApplicationOptions</text><line style="stroke:#181818;stroke-width:1;" x1="5117.24" x2="5830.7512" y1="337.48" y2="337.48"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="353"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="384.2954" x="5137.24" y="361.32">user_pool_ : std::vector<GeneratedUser></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="379.04"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="454.4907" x="5137.24" y="387.36">brewery_pool_ : std::vector<GeneratedBrewery></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="405.08"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="386.9504" x="5137.24" y="413.4">beer_pool_ : std::vector<GeneratedBeer></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="431.12"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="449.1604" x="5137.24" y="439.44">checkin_pool_ : std::vector<GeneratedCheckin></text><line style="stroke:#181818;stroke-width:1;" x1="5117.24" x2="5830.7512" y1="449.64" y2="449.64"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="5127.24" cy="468.16" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="105.1151" x="5137.24" y="473.48">Run() : bool</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="491.2"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="574.9911" x="5137.24" y="499.52">RunUserPhase(locations : const std::vector<Location>&) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="517.24"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="688.5112" x="5137.24" y="525.56">RunBreweryAndBeerPhase(locations : const std::vector<Location>&) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="543.28"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="234.4953" x="5137.24" y="551.6">RunCheckinPhase() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5124.24" y="569.32"/></g><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="217.5354" x="5137.24" y="577.64">RunRatingPhase() : void</text></g><!--reverse link LocationContext to Completeness--><g class="link" data-entity-1="ent0005" data-entity-2="ent0006" data-link-type="composition" data-source-line="127" id="lnk19"><path codeLine="127" d="M5681,2552.19 C5681,2597.6 5681,2646.23 5681,2691.69" fill="none" id="LocationContext-backto-Completeness" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5681,2540.19,5677,2546.19,5681,2552.19,5685,2546.19,5681,2540.19" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ApplicationOptions to GeneratorOptions--><g class="link" data-entity-1="ent0024" data-entity-2="ent0022" data-link-type="composition" data-source-line="156" id="lnk25"><path codeLine="156" d="M4899.782,2198.9608 C4833.402,2257.6808 4733.82,2345.78 4661.88,2409.41" fill="none" id="ApplicationOptions-backto-GeneratorOptions" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="4908.77,2191.01,4901.6257,2191.9894,4899.782,2198.9608,4906.9263,2197.9814,4908.77,2191.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ApplicationOptions to PipelineOptions--><g class="link" data-entity-1="ent0024" data-entity-2="ent0023" data-link-type="composition" data-source-line="157" id="lnk26"><path codeLine="157" d="M4967,2203.01 C4967,2265.94 4967,2359.75 4967,2422.58" fill="none" id="ApplicationOptions-backto-PipelineOptions" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="4967,2191.01,4963,2197.01,4967,2203.01,4971,2197.01,4967,2191.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratorOptions to SamplingOptions--><g class="link" data-entity-1="ent0022" data-entity-2="ent0021" data-link-type="composition" data-source-line="158" id="lnk27"><path codeLine="158" d="M4589,2552.19 C4589,2589.36 4589,2624.72 4589,2665.62" fill="none" id="GeneratorOptions-backto-SamplingOptions" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="4589,2540.19,4585,2546.19,4589,2552.19,4593,2546.19,4589,2540.19" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link LogEntry to LogLevel--><g class="link" data-entity-1="ent0043" data-entity-2="ent0041" data-link-type="composition" data-source-line="292" id="lnk47"><path codeLine="292" d="M271.6909,2267.3989 C256.6809,2313.8589 243.5,2354.67 230.04,2396.35" fill="none" id="LogEntry-backto-LogLevel" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="275.38,2255.98,269.7291,2260.4597,271.6909,2267.3989,277.3417,2262.9191,275.38,2255.98" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link LogEntry to PipelinePhase--><g class="link" data-entity-1="ent0043" data-entity-2="ent0042" data-link-type="composition" data-source-line="293" id="lnk48"><path codeLine="293" d="M358.8531,2267.2748 C372.2131,2304.5048 382.85,2334.13 395.85,2370.37" fill="none" id="LogEntry-backto-PipelinePhase" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="354.8,2255.98,353.0616,2262.9784,358.8531,2267.2748,360.5915,2260.2763,354.8,2255.98" style="stroke:#181818;stroke-width:1;"/></g><!--link PipelineLogger to LogEntry--><g class="link" data-entity-1="ent0045" data-entity-2="ent0043" data-link-type="dependency" data-source-line="294" id="lnk49"><path codeLine="294" d="M698.7,1615.42 C655.77,1678.89 587.66,1778.24 526,1862.36 C487.34,1915.1 446.983,1967.7012 409.013,2016.3212" fill="none" id="PipelineLogger-to-LogEntry" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#181818" points="405.32,2021.05,414.012,2016.4188,408.3975,2017.1093,407.7069,2011.4948,405.32,2021.05" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="51.855" x="504.56" y="1913.2">emits</text></g><!--link LogWorker to LogEntry--><g class="link" data-entity-1="ent0046" data-entity-2="ent0043" data-link-type="dependency" data-source-line="295" id="lnk50"><path codeLine="295" d="M282.55,1641.27 C288.8,1743.23 298.6325,1903.3713 305.4825,2015.0013" fill="none" id="LogWorker-to-LogEntry" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#181818" points="305.85,2020.99,309.2913,2011.7619,305.5438,2015.9994,301.3063,2012.2519,305.85,2020.99" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="95.51" x="300.28" y="1913.2">consumes</text></g><!--reverse link BiergartenPipelineOrchestrator to DataPreloader--><g class="link" data-entity-1="ent0038" data-entity-2="ent0054" data-link-type="composition" data-source-line="456" id="lnk72"><path codeLine="456" d="M5104.0641,306.323 C4303.8541,327.203 2405.35,399.69 1806,626.84 C1676.78,675.81 1552.37,775.75 1471.92,849.65" fill="none" id="BiergartenPipelineOrchestrator-backto-DataPreloader" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5116.06,306.01,5109.9577,302.1679,5104.0641,306.323,5110.1664,310.1651,5116.06,306.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to EnrichmentService--><g class="link" data-entity-1="ent0038" data-entity-2="ent0057" data-link-type="composition" data-source-line="457" id="lnk73"><path codeLine="457" d="M5104.154,364.7462 C4653.064,442.4162 3865,567.06 3174,618.84 C3154.17,620.33 2476.39,619.25 2458,626.84 C2335.07,677.58 2233.06,799.7 2178.63,875.62" fill="none" id="BiergartenPipelineOrchestrator-backto-EnrichmentService" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5115.98,362.71,5109.3883,359.7861,5104.154,364.7462,5110.7458,367.6701,5115.98,362.71" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to DataGenerator--><g class="link" data-entity-1="ent0038" data-entity-2="ent0062" data-link-type="composition" data-source-line="458" id="lnk74"><path codeLine="458" d="M5104.3581,416.9116 C4854.5581,491.2216 4523.36,577.97 4214,618.84 C4181.78,623.1 3658.98,614.28 3629,626.84 C3572.26,650.6 3520.19,689.82 3475.36,732.6" fill="none" id="BiergartenPipelineOrchestrator-backto-DataGenerator" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5115.86,413.49,5108.9685,411.3668,5104.3581,416.9116,5111.2496,419.0347,5115.86,413.49" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ExportService--><g class="link" data-entity-1="ent0038" data-entity-2="ent0068" data-link-type="composition" data-source-line="459" id="lnk75"><path codeLine="459" d="M5104.9206,464.8179 C4989.6506,516.2279 4872.15,568.04 4754,618.84 C4604.3,683.21 4437.44,752.75 4297.09,810.63" fill="none" id="BiergartenPipelineOrchestrator-backto-ExportService" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5115.88,459.93,5108.771,458.7208,5104.9206,464.8179,5112.0296,466.0271,5115.88,459.93" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to CheckinDistributionStrategy--><g class="link" data-entity-1="ent0038" data-entity-2="ent0036" data-link-type="composition" data-source-line="460" id="lnk76"><path codeLine="460" d="M5844.027,343.7932 C6196.687,392.5432 6736.05,482.45 7197,626.84 C8450.79,1019.59 9854.45,1761.66 10350.39,2033.95" fill="none" id="BiergartenPipelineOrchestrator-backto-CheckinDistributionStrategy" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5832.14,342.15,5837.5357,346.9339,5844.027,343.7932,5838.6312,339.0093,5832.14,342.15" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to SamplingStrategy--><g class="link" data-entity-1="ent0038" data-entity-2="ent0032" data-link-type="composition" data-source-line="461" id="lnk77"><path codeLine="461" d="M5842.8374,464.4778 C5953.6974,516.1278 6064.77,569.72 6175,626.84 C7205.63,1160.95 7401.89,1409.01 8444,1920.36 C8571.99,1983.16 8722.78,2044.6 8829.3,2086.01" fill="none" id="BiergartenPipelineOrchestrator-backto-SamplingStrategy" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5831.96,459.41,5835.7094,465.5697,5842.8374,464.4778,5839.088,458.3181,5831.96,459.41" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to BeerSelectionStrategy--><g class="link" data-entity-1="ent0038" data-entity-2="ent0034" data-link-type="composition" data-source-line="462" id="lnk78"><path codeLine="462" d="M5843.7092,381.5296 C6081.6092,439.4696 6387.18,522.82 6658,626.84 C7859.87,1088.49 8012.27,1565.9 9250,1920.36 C9286.05,1930.68 9297.74,1918.81 9334,1928.36 C9459.43,1961.41 9593.73,2024.61 9686.15,2072.93" fill="none" id="BiergartenPipelineOrchestrator-backto-BeerSelectionStrategy" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5832.05,378.69,5836.9331,383.9962,5843.7092,381.5296,5838.8261,376.2234,5832.05,378.69" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ApplicationOptions--><g class="link" data-entity-1="ent0038" data-entity-2="ent0024" data-link-type="composition" data-source-line="463" id="lnk79"><path codeLine="463" d="M5390.8909,599.8785 C5267.1109,1048.8885 5040.27,1871.72 4981.14,2086.19" fill="none" id="BiergartenPipelineOrchestrator-backto-ApplicationOptions" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5394.08,588.31,5388.6293,593.0312,5390.8909,599.8785,5396.3416,595.1573,5394.08,588.31" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to Logger--><g class="link" data-entity-1="ent0038" data-entity-2="ent0044" data-link-type="composition" data-source-line="464" id="lnk80"><path codeLine="464" d="M5103.964,307.131 C4102.544,333.091 1334.84,422.61 980,626.84 C883.38,682.45 820.98,801.47 789.78,875.75" fill="none" id="BiergartenPipelineOrchestrator-backto-Logger" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5115.96,306.82,5109.8584,302.9768,5103.964,307.131,5110.0657,310.9741,5115.96,306.82" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedUser--><g class="link" data-entity-1="ent0038" data-entity-2="ent0016" data-link-type="composition" data-source-line="467" id="lnk81"><path codeLine="467" d="M5596.1008,599.4299 C5771.5708,1031.9999 6087.61,1811.12 6188.64,2060.19" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedUser" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5591.59,588.31,5590.1387,595.3736,5596.1008,599.4299,5597.552,592.3664,5591.59,588.31" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="107.3999" x="5843.7" y="1200.28">user_pool_</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="31.2" x="6153.6218" y="2046.1848">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedBrewery--><g class="link" data-entity-1="ent0038" data-entity-2="ent0014" data-link-type="composition" data-source-line="468" id="lnk82"><path codeLine="468" d="M5474,600.31 C5474,1025.54 5474,1784.42 5474,2047.05" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedBrewery" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5474,588.31,5470,594.31,5474,600.31,5478,594.31,5474,588.31" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="143.555" x="5475" y="1200.28">brewery_pool_</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="31.2" x="5441.8689" y="2033.2209">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedBeer--><g class="link" data-entity-1="ent0038" data-entity-2="ent0015" data-link-type="composition" data-source-line="469" id="lnk83"><path codeLine="469" d="M5720.1777,598.0056 C5729.4177,610.9056 5731.4,614.05 5740,626.84 C6078.58,1130.51 6402.1,1783.94 6522.04,2033.98" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedBeer" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5713.19,588.25,5713.432,595.457,5720.1777,598.0056,5719.9357,590.7986,5713.19,588.25" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="109.7849" x="6093.65" y="1200.28">beer_pool_</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="31.2" x="6486.9171" y="2020.2927">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedCheckin--><g class="link" data-entity-1="ent0038" data-entity-2="ent0017" data-link-type="composition" data-source-line="470" id="lnk84"><path codeLine="470" d="M5841.3177,549.3893 C5874.2677,576.7093 5896.92,597.62 5926,626.84 C6399.26,1102.3 6819.87,1800.21 6961.92,2046.99" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedCheckin" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5832.08,541.73,5834.1457,548.6389,5841.3177,549.3893,5839.252,542.4804,5832.08,541.73" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="139.1999" x="6407.61" y="1200.28">checkin_pool_</text><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="31.2" x="6926.0381" y="2033.1565">0..*</text></g><!--reverse link DataPreloader to JsonLoader--><g class="link" data-entity-1="ent0054" data-entity-2="ent0055" data-link-type="extension" data-source-line="473" id="lnk85"><path codeLine="473" d="M1381,1050.65 C1381,1169.75 1381,1359.07 1381,1471.33" fill="none" id="DataPreloader-backto-JsonLoader" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1381,1032.65,1375,1050.65,1387,1050.65,1381,1032.65" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link Logger to PipelineLogger--><g class="link" data-entity-1="ent0044" data-entity-2="ent0045" data-link-type="extension" data-source-line="474" id="lnk86"><path codeLine="474" d="M762.7393,1024.486 C758.1293,1141.146 749.15,1368.23 744.54,1484.74" fill="none" id="Logger-backto-PipelineLogger" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="763.45,1006.5,756.7439,1024.249,768.7346,1024.7229,763.45,1006.5" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ContextStrategy to BreweryContextStrategy--><g class="link" data-entity-1="ent0029" data-entity-2="ent0030" data-link-type="extension" data-source-line="475" id="lnk87"><path codeLine="475" d="M7998,2221.97 C7998,2285.64 7998,2363.76 7998,2422.47" fill="none" id="ContextStrategy-backto-BreweryContextStrategy" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="7998,2203.97,7992,2221.97,8004,2221.97,7998,2203.97" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ContextStrategy to BeerContextStrategy--><g class="link" data-entity-1="ent0029" data-entity-2="ent0031" data-link-type="extension" data-source-line="476" id="lnk88"><path codeLine="476" d="M8129.6094,2212.7213 C8244.0494,2276.3913 8401.08,2363.76 8506.6,2422.47" fill="none" id="ContextStrategy-backto-BeerContextStrategy" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="8113.88,2203.97,8126.6924,2217.9644,8132.5265,2207.4781,8113.88,2203.97" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link SamplingStrategy to UniformSamplingStrategy--><g class="link" data-entity-1="ent0032" data-entity-2="ent0033" data-link-type="extension" data-source-line="477" id="lnk89"><path codeLine="477" d="M9024.4129,2204.3879 C9081.0629,2267.3179 9164.27,2359.75 9220.82,2422.58" fill="none" id="SamplingStrategy-backto-UniformSamplingStrategy" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="9012.37,2191.01,9019.9536,2208.4022,9028.8722,2200.3736,9012.37,2191.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link BeerSelectionStrategy to RandomBeerSelectionStrategy--><g class="link" data-entity-1="ent0034" data-entity-2="ent0035" data-link-type="extension" data-source-line="478" id="lnk90"><path codeLine="478" d="M9838.5201,2220.374 C9861.5401,2271.334 9886.52,2326.67 9912.13,2383.38" fill="none" id="BeerSelectionStrategy-backto-RandomBeerSelectionStrategy" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="9831.11,2203.97,9833.0521,2222.844,9843.9881,2217.9039,9831.11,2203.97" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link CheckinDistributionStrategy to JCurveCheckinStrategy--><g class="link" data-entity-1="ent0036" data-entity-2="ent0037" data-link-type="extension" data-source-line="479" id="lnk91"><path codeLine="479" d="M10563.516,2260.5631 C10572.706,2301.0331 10579.25,2329.8 10588.45,2370.28" fill="none" id="CheckinDistributionStrategy-backto-JCurveCheckinStrategy" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="10559.53,2243.01,10557.665,2261.8918,10569.367,2259.2345,10559.53,2243.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link EnrichmentService to WikipediaService--><g class="link" data-entity-1="ent0057" data-entity-2="ent0058" data-link-type="extension" data-source-line="480" id="lnk92"><path codeLine="480" d="M2133.8257,1024.4937 C2130.9657,1132.9937 2125.65,1334.58 2122.38,1458.5" fill="none" id="EnrichmentService-backto-WikipediaService" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2134.3,1006.5,2127.8278,1024.3356,2139.8236,1024.6519,2134.3,1006.5" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WebClient to CURLWebClient--><g class="link" data-entity-1="ent0059" data-entity-2="ent0060" data-link-type="extension" data-source-line="481" id="lnk93"><path codeLine="481" d="M2120,2221.97 C2120,2285.64 2120,2363.76 2120,2422.47" fill="none" id="WebClient-backto-CURLWebClient" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2120,2203.97,2114,2221.97,2126,2221.97,2120,2203.97" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link DataGenerator to MockGenerator--><g class="link" data-entity-1="ent0062" data-entity-2="ent0063" data-link-type="extension" data-source-line="482" id="lnk94"><path codeLine="482" d="M3090.0969,1162.6417 C3061.4069,1191.8517 3045.12,1208.82 3018,1237.44 C2953.37,1305.63 2882.53,1384.18 2828.14,1445.34" fill="none" id="DataGenerator-backto-MockGenerator" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="3102.71,1149.8,3085.8163,1158.4373,3094.3775,1166.8461,3102.71,1149.8" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link DataGenerator to LlamaGenerator--><g class="link" data-entity-1="ent0062" data-entity-2="ent0064" data-link-type="extension" data-source-line="483" id="lnk95"><path codeLine="483" d="M3312,1167.68 C3312,1233.91 3312,1288.94 3312,1354.23" fill="none" id="DataGenerator-backto-LlamaGenerator" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="3312,1149.68,3306,1167.68,3318,1167.68,3312,1149.68" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link PromptFormatter to Gemma4JinjaPromptFormatter--><g class="link" data-entity-1="ent0065" data-entity-2="ent0066" data-link-type="extension" data-source-line="484" id="lnk96"><path codeLine="484" d="M3312,2235.05 C3312,2298.24 3312,2367.67 3312,2422.48" fill="none" id="PromptFormatter-backto-Gemma4JinjaPromptFormatter" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="3312,2217.05,3306,2235.05,3318,2235.05,3312,2217.05" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link ExportService to SqliteExportService--><g class="link" data-entity-1="ent0068" data-entity-2="ent0069" data-link-type="extension" data-source-line="485" id="lnk97"><path codeLine="485" d="M3980,1089.56 C3980,1138.55 3980,1178.68 3980,1237.21" fill="none" id="ExportService-backto-SqliteExportService" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="3980,1071.56,3974,1089.56,3986,1089.56,3980,1071.56" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link DateTimeProvider to SystemDateTimeProvider--><g class="link" data-entity-1="ent0070" data-entity-2="ent0071" data-link-type="extension" data-source-line="486" id="lnk98"><path codeLine="486" d="M3980,2209.01 C3980,2276.61 3980,2375.7 3980,2435.83" fill="none" id="DateTimeProvider-backto-SystemDateTimeProvider" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="3980,2191.01,3974,2209.01,3986,2209.01,3980,2191.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link WikipediaService to WebClient--><g class="link" data-entity-1="ent0058" data-entity-2="ent0059" data-link-type="composition" data-source-line="489" id="lnk99"><path codeLine="489" d="M2120,1653.27 C2120,1772.82 2120,1968.61 2120,2073.3" fill="none" id="WikipediaService-backto-WebClient" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="2120,1641.27,2116,1647.27,2120,1653.27,2124,1647.27,2120,1641.27" style="stroke:#181818;stroke-width:1;"/></g><!--link WikipediaService to ContextStrategy--><g class="link" data-entity-1="ent0058" data-entity-2="ent0029" data-link-type="dependency" data-source-line="490" id="lnk100"><path codeLine="490" d="M2186.53,1641.52 C2247.6,1716.47 2345.49,1817.6 2458,1862.36 C2525.33,1889.14 7605.64,1907.39 7675,1928.36 C7769.96,1957.07 7858.7833,2019.0664 7920.5433,2069.2464" fill="none" id="WikipediaService-to-ContextStrategy" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#181818" points="7925.2,2073.03,7920.7373,2064.2502,7921.3194,2069.877,7915.6926,2070.4591,7925.2,2073.03" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link LlamaGenerator to PromptFormatter--><g class="link" data-entity-1="ent0064" data-entity-2="ent0065" data-link-type="composition" data-source-line="491" id="lnk101"><path codeLine="491" d="M3312,1757.41 C3312,1864.8 3312,1980.2 3312,2059.96" fill="none" id="LlamaGenerator-backto-PromptFormatter" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="3312,1745.41,3308,1751.41,3312,1757.41,3316,1751.41,3312,1745.41" style="stroke:#181818;stroke-width:1;"/></g><!--link LlamaGenerator to GeneratorOptions--><g class="link" data-entity-1="ent0064" data-entity-2="ent0022" data-link-type="dependency" data-source-line="492" id="lnk102"><path codeLine="492" d="M3468.18,1745.55 C3514.93,1791.35 3569.71,1834.8 3629,1862.36 C3771.08,1928.41 4202.7,1838.42 4331,1928.36 C4495.28,2043.52 4557.0837,2285.7455 4578.3437,2403.4655" fill="none" id="LlamaGenerator-to-GeneratorOptions" style="stroke:#181818;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#181818" points="4579.41,2409.37,4581.7468,2399.8024,4578.5214,2404.4496,4573.8742,2401.2242,4579.41,2409.37" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link SqliteExportService to DateTimeProvider--><g class="link" data-entity-1="ent0069" data-entity-2="ent0070" data-link-type="composition" data-source-line="493" id="lnk103"><path codeLine="493" d="M3980,1874.66 C3980,1961.49 3980,2034.16 3980,2086.05" fill="none" id="SqliteExportService-backto-DateTimeProvider" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="3980,1862.66,3976,1868.66,3980,1874.66,3984,1868.66,3980,1862.66" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link PipelineLogger to BoundedChannel--><g class="link" data-entity-1="ent0045" data-entity-2="ent0052" data-link-type="aggregation" data-source-line="496" id="lnk104"><path codeLine="496" d="M797.5503,1624.9497 C865.6403,1715.7297 984.39,1874.04 1075.1,1994.98" fill="none" id="PipelineLogger-backto-BoundedChannel" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="790.35,1615.35,790.7503,1622.55,797.5503,1624.9497,797.1501,1617.7498,790.35,1615.35" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="62.5452" x="1015.35" y="1913.2">logs to</text></g><!--reverse link LogWorker to BoundedChannel--><g class="link" data-entity-1="ent0046" data-entity-2="ent0052" data-link-type="aggregation" data-source-line="497" id="lnk105"><path codeLine="497" d="M330.575,1651.7191 C373.305,1723.7091 436.91,1810.37 526,1862.36 C665.59,1943.83 724.87,1898.42 885,1920.36 C916.46,1924.67 927.13,1915.14 956,1928.36 C991.6,1944.66 1025.33,1968.76 1055.35,1994.86" fill="none" id="LogWorker-backto-BoundedChannel" style="stroke:#181818;stroke-width:1;"/><polygon fill="none" points="324.45,1641.4,324.0728,1648.6012,330.575,1651.7191,330.9522,1644.5179,324.45,1641.4" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="'DM Sans'" font-size="20" lengthAdjust="spacing" textLength="106.3252" x="886" y="1913.2">drains from</text></g><!--reverse link EnrichedCity to Location--><g class="link" data-entity-1="ent0007" data-entity-2="ent0004" data-link-type="composition" data-source-line="500" id="lnk106"><path codeLine="500" d="M5949.0194,2201.9598 C5967.3394,2242.8198 5988.87,2290.79 6012.87,2344.3" fill="none" id="EnrichedCity-backto-Location" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5944.11,2191.01,5942.9148,2198.1214,5949.0194,2201.9598,5950.2146,2194.8484,5944.11,2191.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link EnrichedCity to LocationContext--><g class="link" data-entity-1="ent0007" data-entity-2="ent0005" data-link-type="composition" data-source-line="501" id="lnk107"><path codeLine="501" d="M5877.0324,2200.7585 C5834.8824,2259.4785 5772.95,2345.78 5727.27,2409.41" fill="none" id="EnrichedCity-backto-LocationContext" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5884.03,2191.01,5877.2817,2193.5517,5877.0324,2200.7585,5883.7807,2198.2168,5884.03,2191.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to Location--><g class="link" data-entity-1="ent0014" data-entity-2="ent0004" data-link-type="composition" data-source-line="502" id="lnk108"><path codeLine="502" d="M5640.2012,2235.9768 C5684.8112,2261.1468 5723.29,2282.12 5769,2305.7 C5805.22,2324.38 5815.96,2325.66 5852,2344.7 C5857.66,2347.69 5863.38,2350.76 5869.14,2353.88" fill="none" id="GeneratedBrewery-backto-Location" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5629.75,2230.08,5633.01,2236.5121,5640.2012,2235.9768,5636.9412,2229.5447,5629.75,2230.08" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to BreweryResult--><g class="link" data-entity-1="ent0014" data-entity-2="ent0009" data-link-type="composition" data-source-line="503" id="lnk109"><path codeLine="503" d="M5434.4714,2241.1743 C5414.2414,2293.2043 5393.45,2346.7 5374.13,2396.37" fill="none" id="GeneratedBrewery-backto-BreweryResult" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="5438.82,2229.99,5432.9176,2234.1326,5434.4714,2241.1743,5440.3738,2237.0317,5438.82,2229.99" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedBeer to Location--><g class="link" data-entity-1="ent0015" data-entity-2="ent0004" data-link-type="composition" data-source-line="504" id="lnk110"><path codeLine="504" d="M6444.2494,2250.491 C6417.0094,2272.401 6396.86,2287 6368,2305.7 C6335.47,2326.77 6324.05,2326.18 6290,2344.7 C6284.38,2347.76 6278.69,2350.89 6272.96,2354.06" fill="none" id="GeneratedBeer-backto-Location" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="6453.6,2242.97,6446.4177,2243.6136,6444.2494,2250.491,6451.4317,2249.8474,6453.6,2242.97" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedBeer to BeerStyle--><g class="link" data-entity-1="ent0015" data-entity-2="ent0008" data-link-type="composition" data-source-line="505" id="lnk111"><path codeLine="505" d="M6718.3082,2228.8615 C6774.0782,2264.4215 6828.07,2301.28 6883,2344.7 C6893.26,2352.81 6903.66,2361.54 6913.9,2370.49" fill="none" id="GeneratedBeer-backto-BeerStyle" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="6708.19,2222.41,6711.0986,2229.0085,6718.3082,2228.8615,6715.3996,2222.263,6708.19,2222.41" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedBeer to BeerResult--><g class="link" data-entity-1="ent0015" data-entity-2="ent0010" data-link-type="composition" data-source-line="506" id="lnk112"><path codeLine="506" d="M6621.3378,2253.996 C6637.2678,2290.246 6650.44,2320.21 6666.81,2357.44" fill="none" id="GeneratedBeer-backto-BeerResult" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="6616.51,2243.01,6615.2619,2250.1123,6621.3378,2253.996,6622.5859,2246.8937,6616.51,2243.01" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedUser to Location--><g class="link" data-entity-1="ent0016" data-entity-2="ent0004" data-link-type="composition" data-source-line="507" id="lnk113"><path codeLine="507" d="M6180.5564,2228.0113 C6163.7064,2265.8313 6147.87,2301.37 6128.71,2344.36" fill="none" id="GeneratedUser-backto-Location" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="6185.44,2217.05,6179.3444,2220.9028,6180.5564,2228.0113,6186.652,2224.1585,6185.44,2217.05" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedUser to UserResult--><g class="link" data-entity-1="ent0016" data-entity-2="ent0011" data-link-type="composition" data-source-line="508" id="lnk114"><path codeLine="508" d="M6272.8022,2227.3349 C6307.8822,2285.6949 6349.22,2354.46 6382.23,2409.38" fill="none" id="GeneratedUser-backto-UserResult" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="6266.62,2217.05,6266.2828,2224.2532,6272.8022,2227.3349,6273.1394,2220.1317,6266.62,2217.05" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedCheckin to CheckinResult--><g class="link" data-entity-1="ent0017" data-entity-2="ent0012" data-link-type="composition" data-source-line="509" id="lnk115"><path codeLine="509" d="M7101.6242,2238.9484 C7156.6142,2300.6484 7219.47,2371.18 7265.07,2422.34" fill="none" id="GeneratedCheckin-backto-CheckinResult" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="7093.64,2229.99,7094.6459,2237.1306,7101.6242,2238.9484,7100.6182,2231.8078,7093.64,2229.99" style="stroke:#181818;stroke-width:1;"/></g><!--reverse link GeneratedRating to RatingResult--><g class="link" data-entity-1="ent0018" data-entity-2="ent0013" data-link-type="composition" data-source-line="510" id="lnk116"><path codeLine="510" d="M7538.3898,2241.8733 C7547.0598,2303.5733 7556.56,2371.18 7563.76,2422.34" fill="none" id="GeneratedRating-backto-RatingResult" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="7536.72,2229.99,7533.5938,2236.4882,7538.3898,2241.8733,7541.516,2235.375,7536.72,2229.99" style="stroke:#181818;stroke-width:1;"/></g><?plantuml-src xHjhRziuyhj_XP0FMMSt3ffshtSriW5I9scpI9jSd6wnm0428z4sBpAb9IatkLx_-mrVaaXHjfpUFd2t0ef6uinmEEIywM-Y7te_Ws-YoTNxyuit7svERY-ktaUxqVJsvykBzszWP0io_9xG0Z6qZ98CSNuY12DtfS3dEHLJyYyS7RuO0CNHQ1JTFXRvdA5YyIXV6vWfdg4o4nBbFLhYQEVqNJH5bE-4OHJPvyyQWuA83DVeF-NP_I9VxOGW5FABPuD1WP9xD9UJvKj4w4xqUH15tiVeNPxYZCin68pq4gFBF462v5HXoEUxA27YCHf7NAJZCGS9q7arn0KIE2vOlY8qmHr0XESl3b--Z9ztZ2TvIGLxt81zs36U0SDPd24wBs5nt4AjS29oTjJ0EAvHO8MYJ2M_QLxUPRX1ZCu3Grz24fg0mF63Q0XAlNQjSLbaM62AkMHnqdYjOHQ8nKeOaWXiPIoQisDQBXt4QkRpCilCdzU82OBisyaTnrIqbt166KaME9t8dVtiY5Bj_RXQP6C1r2pFMt-R-ckCsLGyPhX1cigp6nPDYdd2I64c3a4i2OtHtGf6PrcEHFqTFOI_0ppeANmdr8LslxfSC_m9iySRp44JFSvZJ3SptmsaIAXpseDA5rnBn7zOJhLXaFiV7WjjsPgD-S03QotXuvepTKVohiaJGLPmxEDFcCmNmc74cNQom0bOsDRCYVoEqrYUoIvjfxd0cxRm1fI8pblaUP8pt19F7u9lm2WmCCUfESaDedVwIqnIIUINZ0Zy0XOWNdxVI_SDEWmvIkBRXjWpSfwX68-3LczksGwBisE9SFwRwuFNTOlxolNRmrmPDcTYC-39v4dBaaVTE-HFvLdYmlTQURwECwCDlXv8GzlDtoR-UsoBcKMwpAO-VjrYjEfj8UXDvwk7B9YUS-pe_HRBKF_xeSUt47XwIgLMx4Lwu-YaA39Y3WiWpyYyPEfjvtD3G5C4f63EAsNVkHFPB0l9O5dRfkY7wF3WsNaDaXTnqHXyTl3gB-xeFOoM89KNpsC9q10EZHFnu8x-xV3Lyre1CKwrUu2HqM7drkQipVfIHhbnWSJ22dP6CimVEQnfF9RVcySWNkRIkWFeNPvdCDiCPRpMTsua1EEUiDeyNPC20m1kivINeYX5FvwoVBuPq9ctiTVjgUTMK43F5re5L1ZE0SPRH7CsdVSqSude1cTgNhuW1LTva8f2smp9WnkSlWCsn4PhpoC5sjuNnUzMUPy4FxrwTtBnFhg-khoO_Bmz0J_PkivXNOzLiWL76RCPWfp9wF9KIFsVFqP7HzNOyN5Zv_vUOaOmFy_P4Em-R0ruNIugax2xroVpUOSUp7mJI3RuS2-OQJW1iS_VxyaHcE4_13lrxjdJjd7x520UMfVDA_wQB5bUZrlCLYE1-9YIMSwMBKxit2DjjN2irk6kvzVYh1QGYfbm1h00irbA2bB5M7nOXvsQ7p_0tTt_1vMA1jwl4HqNY1vf-2fSE_PvhaT2SJbDysMOxLgaZCvZItGf3b-zUl7NQaocdp9Yu2rXZrGI6XxxdHVVC4Wwc3abN5Ux-kpR2UTaJazCRlLHfLPyACCglo3ZnBhwDAroabQKpEnIZIN4qCIndX3aa9Q0ZI7TkibUMxgtP8cvWBCk3SGcgeIc-C6bjYwo_75IiXKsh6zrMlu_HIV_VHbiLulz9hgwcRmzczxgakvso0FZG0XcSyGWMAu22WQnEnSw998RDeeAXY64JI7YjxoNbFnIuhWGxEWK2NHj0OuLF5R5j2Mc8WOXh4Y2GuXd5THK0sdaAXxhcgoASZGyX8FpC6UNQiImz53aiCeWt9aQSvYe3uBEuxavmI5qp_zg0ZOiNelfEoWpjqojkBMqQma4RRAcOXEmjPntsxKcAz8oniQknkjCvoZATOWfeTfnguGOAJ2LNHQGJiHh5ThPYhNWnWKqk5uFZYrrAwQru4PEntO1tqKt9LM1a4o951tu85c-NY2-NU1Wx9MYO5PnGXM3NqVByAo9-8Cwu_R6lZIQ91TqnX2SYZAH2Qw9qQjHgLY0lsFikIh3mxTBl8ACnzhuKtnNsleVaClDdnyHioMPCyPorghdMpkakAkeJGKOgR8mRrBKPdVg2eyhlTQm4KZhkvP5w_CjHYpDFz5GjsD-fhepZMA0TGVs12KBbjCSRBpAI-C4Tl5-F9PWSDAQ9VXCoMnSYQ_EEDNonwuuwXGUSowtegErqcXFQOr4MJYu1-ChAx-wIhCP_5FExfMlsm3RYg2qAUuCbc1ug2InhzUzRnUe_ATSpdxDwhvXm_7smJg3cRMEEcJf85b8FNyD7ZwLceqenTcHtTFZtL-B9o3tKKllQUnOYzE8RqOHH1zB9AfWP2YAlU2H64Mt-RH8CtF8zBeKgFeu7giFvhzOgc4JKL4QAY6iYVjqySEOXewwHwKw-f752VVaXm3Q6k3jxy71SGjp7E4b4TmIDQ9NJnXSsjOIvDWg6Dh98hCvNdTunzkws-ET275lGnjx3hwthBseUWESEXig8PQe8sFvLetHNCIpCglz5F2S4XKah10Zg6xRQbYyBCHZ7-04mMg9WNMpCx1S7ATnxUfiOaRJ8G7J1WEthR3x1YUOhBHhSIt5RMrB9fBoiAqmNhaM0hx8X9V6vNYcnOa_rrWOb5fdoOUoP6XAY0sVwXSIDoJsbcmL0ZsPhfT_MiBNaF20r9vCrk2xHEML2VxwSQ9l66n3siKCf7mmsQNUXJ_b_Xl8tLMKEfiAw4WhrUhKapTOU2sLSEbGEK6RMrJ3NYgasDzuEU8ZkGSJcn9aUVlSi3v49f61rEKZlfkemTfq0d664X4d28Bw1axEu4Y23LkYeXcfx4V14EUt4O1otbWaYpFDz13MvT_tYLS4VrhZSEljhOInRbk79SlSqwP9xkvrH94VM7P6app5mnNAIjmRrxqpyE7cicRlTsGeu5RgcB_3hLILXZLorIcYoJs6ZVvpwBpKLuRSKNCq5FVX2mNLH62oXjrTOZNBLp9XJhPky7kbKyrXkxTlsLDLjkxvzyBzTujjKhI-PReDbU1cKXO-AE46kgMc4yFDpE3Gk9IH4NTd9tmlrFjsjESTf8tr8Um-TWS71psFZeNSi8K6hCTU6SXUeZImWNx_A3h5e5zBGWaN97cB-6B3CUhgY5rcQ8dQCXkPhZTWgiRiMqJJPWHiwdpg8gBwqmCeM0xHT3nJ2LT77V5QmPnRaEDUnUx_mQsKuSuGGdxkgqNLcDvjPR8NT0QycdA95lQ-AHFg5wbAibKaydjC-NuqPsYvHAmht_q9PIG5TjLcdx1a0MgdQbd3K8fUctrl3piDluPm6GwuRyLsOnazFRoSuUoX08vnscBU9n2w-m6Y-Vv7Gl-9_FMqLc0syh_4GS3BwkfwA2Xjbjqx1Nr1YRo-2ze-REMPiBW4SsvLPwDRsEkyYsGfAU_QRT0t4jZKPTf8mEfYVSlB8sC0DbCoYbhTilBewE5so-oSq82qdUCrLTEwsrVRMQbriQvqoalmtLqZBEjMrmQcDfRfNRnGjbUYwQdaERf377iscL0GgOYjduYvM8eQQIeluikK9unbOwZja7G_P0iCfVjROTIDcosGz2xtn86CWtAakqjvWQbNtHbL0UGMgLJp9DPxMRNHlehEdqRWZs44j9-sEp45xfQe3N7DS85OVVXu6-Gcpx8xS18dD5LLmFVvxOBbdmBrRSD75x4lWQpDCIlh4k8F8gahvniJsQdoz2twJw3ub4R_cykhroUNqStPfMhrJzzUN4-txFVh-dpTtPUHzSbypl3Sz1U7nfPp-TimNS0WcE-fuls6QmAgJkyKOdjXjCfIlUUf0if-ypHTLI-CDPtnNlX-PxyNKh2Rtmipq6llWwRx9tsEXYx3Wu_eVnvsdXqSVBlZtUHNhPQw-_yKEgyh0-_S37WIAMnPggyCF8NEfBRJpUi4Lh0NrW99pRgGLmlbaJUYbT9qMnYjv-ZV1mUDwlh0jBsw7WNkjiW6_XtH44huTci_rFOrr47hzcK0h-EYvY1yrz35NNChSR3kmbubqD0DjK6xKjxcsYzO3-e2P_U6E8NGWLjT36CunPzU66xjO-3dVY6KxbHnu0RuuHa3gS2WvID3U45lQXN6pYb_o95peXLbDph54Aocc2RWbfJUj3e7xgDiN2tp3T2gBUmVOg-Q58LcyEMs0KVDqxhf7ygf_8cwn3LXEUSZ9Img3w5hkj_YB8rky0m2RffOV-vrqFqdL-x8RM6FvNK57ebyuFNJ-o6d346k4ir0M9Plypi0ANFuN-gSuitvAMuKbddruwvjW6q3fkLAratG1zWjrhNSIp_otS3rZ-pwGlkSMD_RYvCrm8qYOilv1S3TIgB_OxCGXbDF_0y0?></g></svg> |