Files
modeling-app/rust/kcl-lib/tests/kittycad_svg/artifact_graph_flowchart.snap.md

3108 lines
56 KiB
Markdown
Raw Normal View History

Rust artifact graph (#5068) * Start porting artifact graph creation to Rust * Add most of artifact graph creation * Add handling loft command from recent PR * Refactor artifact merge code so that it errors when a new artifact type is added * Add sweep subtype * Finish implementation of build artifact graph * Fix wasm.ts to use new combined generated ts-rs file * Fix Rust lints * Fix lints * Fix up replacement code * Add artifact graph to WASM outcome * Add artifact graph to simulation test output * Add new artifact graph output snapshots * Fix wall field and reduce unreachable code * Change field order for subtype * Change subtype to be determined from the request, like the TS * Fix plane sweep_id * Condense code * Change ID types to be properly optional * Change to favor the new ID, the same as TS * Fix to make error impossible * Rename artifact type tag values to match TS * Fix name of field on Cap * Update outputs * Change to use Rust source range * Update output snapshots * Add conversion to mermaid mind map and add to snapshot tests * Add new mermaid mind map output * Add flowchart * Remove raw artifact graph from tests * Remove JSON artifact graph output * Update output file with header * Update output after adding flowchart * Fix flowchart to not have duplicate edges, one in each direction * Fix not not output duplicate edges in flowcharts * Change flowchart edge style to be more obvious when a direction is missing * Update output after deduplication of edges * Fix not not skip sketch-on-face artifacts * Add docs * Fix edge iteration order to be stable * Update output after fixing order * Port TS artifactGraph.test.ts tests to simulation tests * Add grouping segments and solid2ds with their path * Update output flowcharts since grouping paths * Remove TS artifactGraph tests * Remove unused d3 dependencies * Fix to track loft ID on paths * Add command ID to error messages * Move artifact graph test code to a separate file since it's a large file * Reduce function visibility * Remove TS artifact graph code * Fix spelling error with serde * Add TODO for edge cut consumed ID * Add comment about mermaid edge rank * Fix mermaid flowchart edge cuts to appear as children of their edges * Update output since fixing flowchart order * Fix to always build the artifact graph even when there's a KCL error * Add artifact graph to error output * Change optional ID merge to match TS * Remove redundant SourceRange definition * Remove Rust-flavored default source range function * Add helper for source range creation * Update doc comment for the website * Update docs after doc comment change * Fix to save engine responses in execution cache * Remove unused import * Fix to not call WASM function before beforeAll callback is run * Remove more unused imports
2025-01-17 14:34:36 -05:00
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[31, 56, 0]"]
KCL: Use keyword arguments for line, lineTo, extrude and close (#5249) Part of #4600. PR: https://github.com/KittyCAD/modeling-app/pull/4826 # Changes to KCL stdlib - `line(point, sketch, tag)` and `lineTo(point, sketch, tag)` are combined into `line(@sketch, end?, endAbsolute?, tag?)` - `close(sketch, tag?)` is now `close(@sketch, tag?)` - `extrude(length, sketch)` is now `extrude(@sketch, length)` Note that if a parameter starts with `@` like `@sketch`, it doesn't have any label when called, so you call it like this: ``` sketch = startSketchAt([0, 0]) line(sketch, end = [3, 3], tag = $hi) ``` Note also that if you're using a `|>` pipeline, you can omit the `@` argument and it will be assumed to be the LHS of the `|>`. So the above could be written as ``` sketch = startSketchAt([0, 0]) |> line(end = [3, 3], tag = $hi) ``` Also changes frontend tests to use KittyCAD/kcl-samples#139 instead of its main The regex find-and-replace I use for migrating code (note these don't work with multi-line expressions) are: ``` line\(([^=]*), %\) line(end = $1) line\((.*), %, (.*)\) line(end = $1, tag = $2) lineTo\((.*), %\) line(endAbsolute = $1) lineTo\((.*), %, (.*)\) line(endAbsolute = $1, tag = $2) extrude\((.*), %\) extrude(length = $1) extrude\(([^=]*), ([a-zA-Z0-9]+)\) extrude($2, length = $1) close\(%, (.*)\) close(tag = $1) ``` # Selected notes from commits before I squash them all * Fix test 'yRelative to horizontal distance' Fixes: - Make a lineTo helper - Fix pathToNode to go through the labeled arg .arg property * Fix test by changing lookups into transformMap Parts of the code assumed that `line` is always a relative call. But actually now it might be absolute, if it's got an `endAbsolute` parameter. So, change whether to look up `line` or `lineTo` and the relevant absolute or relative line types based on that parameter. * Stop asserting on exact source ranges When I changed line to kwargs, all the source ranges we assert on became slightly different. I find these assertions to be very very low value. So I'm removing them. * Fix more tests: getConstraintType calls weren't checking if the 'line' fn was absolute or relative. * Fixed another queryAst test There were 2 problems: - Test was looking for the old style of `line` call to choose an offset for pathToNode - Test assumed that the `tag` param was always the third one, but in a kwarg call, you have to look it up by label * Fix test: traverse was not handling CallExpressionKw * Fix another test, addTagKw addTag helper was not aware of kw args. * Convert close from positional to kwargs If the close() call has 0 args, or a single unlabeled arg, the parser interprets it as a CallExpression (positional) not a CallExpressionKw. But then if a codemod wants to add a tag to it, it tries adding a kwarg called 'tag', which fails because the CallExpression doesn't need kwargs inserted into it. The fix is: change the node from CallExpression to CallExpressionKw, and update getNodeFromPath to take a 'replacement' arg, so we can replace the old node with the new node in the AST. * Fix the last test Test was looking for `lineTo` as a substring of the input KCL program. But there's no more lineTo function, so I changed it to look for line() with an endAbsolute arg, which is the new equivalent. Also changed the getConstraintInfo code to look up the lineTo if using line with endAbsolute. * Fix many bad regex find-replaces I wrote a regex find-and-replace which converted `line` calls from positional to keyword calls. But it was accidentally applied to more places than it should be, for example, angledLine, xLine and yLine calls. Fixes this. * Fixes test 'Basic sketch › code pane closed at start' Problem was, the getNodeFromPath call might not actually find a callExpressionKw, it might find a callExpression. So the `giveSketchFnCallTag` thought it was modifying a kwargs call, but it was actually modifying a positional call. This meant it tried to push a labeled argument in, rather than a normal arg, and a lot of other problems. Fixed by doing runtime typechecking. * Fix: Optional args given with wrong type were silently ignored Optional args don't have to be given. But if the user gives them, they should be the right type. Bug: if the KCL interpreter found an optional arg, which was given, but was the wrong type, it would ignore it and pretend the arg was never given at all. This was confusing for users. Fix: Now if you give an optional arg, but it's the wrong type, KCL will emit a type error just like it would for a mandatory argument. --------- Signed-off-by: Nick Cameron <nrc@ncameron.org> Co-authored-by: Nick Cameron <nrc@ncameron.org> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Frank Noirot <frank@kittycad.io> Co-authored-by: Kevin Nadro <kevin@zoo.dev> Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
2025-02-04 08:31:43 -06:00
3["Segment<br>[62, 96, 0]"]
4["Segment<br>[118, 151, 0]"]
5["Segment<br>[181, 214, 0]"]
6["Segment<br>[246, 280, 0]"]
7["Segment<br>[310, 341, 0]"]
8["Segment<br>[373, 403, 0]"]
9["Segment<br>[433, 466, 0]"]
10["Segment<br>[498, 531, 0]"]
11["Segment<br>[561, 594, 0]"]
12["Segment<br>[626, 659, 0]"]
13["Segment<br>[689, 722, 0]"]
14["Segment<br>[754, 786, 0]"]
15["Segment<br>[816, 848, 0]"]
16["Segment<br>[880, 913, 0]"]
17["Segment<br>[943, 977, 0]"]
18["Segment<br>[1009, 1042, 0]"]
19["Segment<br>[1072, 1105, 0]"]
20["Segment<br>[1137, 1171, 0]"]
21["Segment<br>[1202, 1236, 0]"]
22["Segment<br>[1268, 1302, 0]"]
23["Segment<br>[1333, 1367, 0]"]
24["Segment<br>[1399, 1433, 0]"]
25["Segment<br>[1463, 1494, 0]"]
26["Segment<br>[1526, 1558, 0]"]
27["Segment<br>[1589, 1624, 0]"]
28["Segment<br>[1656, 1690, 0]"]
29["Segment<br>[1721, 1755, 0]"]
30["Segment<br>[1787, 1822, 0]"]
31["Segment<br>[1853, 1888, 0]"]
32["Segment<br>[1920, 1955, 0]"]
33["Segment<br>[1986, 2020, 0]"]
34["Segment<br>[2052, 2086, 0]"]
35["Segment<br>[2117, 2152, 0]"]
36["Segment<br>[2184, 2219, 0]"]
37["Segment<br>[2249, 2283, 0]"]
38["Segment<br>[2315, 2349, 0]"]
39["Segment<br>[2379, 2412, 0]"]
40["Segment<br>[2444, 2477, 0]"]
41["Segment<br>[2508, 2542, 0]"]
42["Segment<br>[2574, 2608, 0]"]
43["Segment<br>[2639, 2672, 0]"]
44["Segment<br>[2704, 2737, 0]"]
45["Segment<br>[2768, 2802, 0]"]
46["Segment<br>[2834, 2868, 0]"]
47["Segment<br>[2899, 2937, 0]"]
48["Segment<br>[2959, 2997, 0]"]
49["Segment<br>[3028, 3062, 0]"]
50["Segment<br>[3094, 3127, 0]"]
51["Segment<br>[3158, 3192, 0]"]
52["Segment<br>[3224, 3259, 0]"]
53["Segment<br>[3290, 3325, 0]"]
54["Segment<br>[3357, 3392, 0]"]
55["Segment<br>[3440, 3474, 0]"]
56["Segment<br>[3496, 3530, 0]"]
57["Segment<br>[3561, 3596, 0]"]
58["Segment<br>[3628, 3663, 0]"]
59["Segment<br>[3694, 3728, 0]"]
60["Segment<br>[3750, 3784, 0]"]
61["Segment<br>[3815, 3849, 0]"]
62["Segment<br>[3881, 3915, 0]"]
63["Segment<br>[3946, 3980, 0]"]
64["Segment<br>[4002, 4036, 0]"]
65["Segment<br>[4067, 4101, 0]"]
66["Segment<br>[4133, 4167, 0]"]
67["Segment<br>[4198, 4233, 0]"]
68["Segment<br>[4255, 4290, 0]"]
69["Segment<br>[4321, 4369, 0]"]
70["Segment<br>[4401, 4449, 0]"]
71["Segment<br>[4480, 4514, 0]"]
72["Segment<br>[4536, 4570, 0]"]
73["Segment<br>[4601, 4636, 0]"]
74["Segment<br>[4668, 4703, 0]"]
75["Segment<br>[4734, 4769, 0]"]
76["Segment<br>[4791, 4826, 0]"]
77["Segment<br>[4857, 4892, 0]"]
78["Segment<br>[4924, 4959, 0]"]
79["Segment<br>[4990, 5025, 0]"]
80["Segment<br>[5047, 5082, 0]"]
81["Segment<br>[5113, 5148, 0]"]
82["Segment<br>[5180, 5215, 0]"]
83["Segment<br>[5246, 5280, 0]"]
84["Segment<br>[5302, 5336, 0]"]
85["Segment<br>[5366, 5400, 0]"]
86["Segment<br>[5432, 5465, 0]"]
87["Segment<br>[5495, 5527, 0]"]
88["Segment<br>[5559, 5592, 0]"]
89["Segment<br>[5622, 5655, 0]"]
90["Segment<br>[5687, 5720, 0]"]
91["Segment<br>[5750, 5783, 0]"]
92["Segment<br>[5815, 5848, 0]"]
93["Segment<br>[5878, 5915, 0]"]
94["Segment<br>[5947, 5983, 0]"]
95["Segment<br>[6013, 6046, 0]"]
96["Segment<br>[6078, 6112, 0]"]
97["Segment<br>[6142, 6176, 0]"]
98["Segment<br>[6208, 6242, 0]"]
99["Segment<br>[6272, 6306, 0]"]
100["Segment<br>[6328, 6365, 0]"]
101["Segment<br>[6397, 6435, 0]"]
102["Segment<br>[6465, 6500, 0]"]
103["Segment<br>[6532, 6566, 0]"]
104["Segment<br>[6588, 6624, 0]"]
105["Segment<br>[6654, 6691, 0]"]
106["Segment<br>[6723, 6758, 0]"]
107["Segment<br>[6788, 6823, 0]"]
108["Segment<br>[6855, 6889, 0]"]
109["Segment<br>[6920, 6954, 0]"]
110["Segment<br>[6986, 7021, 0]"]
111["Segment<br>[7052, 7086, 0]"]
112["Segment<br>[7118, 7151, 0]"]
113["Segment<br>[7181, 7214, 0]"]
114["Segment<br>[7246, 7293, 0]"]
115["Segment<br>[7324, 7359, 0]"]
116["Segment<br>[7381, 7416, 0]"]
117["Segment<br>[7447, 7482, 0]"]
118["Segment<br>[7514, 7549, 0]"]
119["Segment<br>[7580, 7615, 0]"]
120["Segment<br>[7647, 7681, 0]"]
121["Segment<br>[7703, 7738, 0]"]
122["Segment<br>[7770, 7805, 0]"]
123["Segment<br>[7836, 7871, 0]"]
124["Segment<br>[7908, 7956, 0]"]
125["Segment<br>[7987, 8035, 0]"]
126["Segment<br>[8067, 8102, 0]"]
127["Segment<br>[8133, 8168, 0]"]
128["Segment<br>[8200, 8248, 0]"]
129["Segment<br>[8279, 8327, 0]"]
130["Segment<br>[8359, 8393, 0]"]
131["Segment<br>[8423, 8456, 0]"]
132["Segment<br>[8488, 8522, 0]"]
133["Segment<br>[8552, 8586, 0]"]
134["Segment<br>[8618, 8665, 0]"]
135["Segment<br>[8696, 8743, 0]"]
136["Segment<br>[8775, 8809, 0]"]
137["Segment<br>[8840, 8875, 0]"]
138["Segment<br>[8907, 8942, 0]"]
139["Segment<br>[8972, 9006, 0]"]
140["Segment<br>[9038, 9071, 0]"]
141["Segment<br>[9093, 9127, 0]"]
142["Segment<br>[9157, 9191, 0]"]
143["Segment<br>[9223, 9256, 0]"]
144["Segment<br>[9286, 9318, 0]"]
145["Segment<br>[9350, 9383, 0]"]
146["Segment<br>[9414, 9448, 0]"]
147["Segment<br>[9480, 9514, 0]"]
148["Segment<br>[9545, 9593, 0]"]
149["Segment<br>[9625, 9673, 0]"]
150["Segment<br>[9704, 9737, 0]"]
151["Segment<br>[9769, 9801, 0]"]
152["Segment<br>[9832, 9865, 0]"]
153["Segment<br>[9887, 9920, 0]"]
154["Segment<br>[9950, 9982, 0]"]
155["Segment<br>[10014, 10046, 0]"]
156["Segment<br>[10076, 10109, 0]"]
157["Segment<br>[10141, 10174, 0]"]
158["Segment<br>[10204, 10237, 0]"]
159["Segment<br>[10269, 10308, 0]"]
160["Segment<br>[10338, 10377, 0]"]
161["Segment<br>[10409, 10442, 0]"]
162["Segment<br>[10472, 10505, 0]"]
163["Segment<br>[10537, 10570, 0]"]
164["Segment<br>[10600, 10632, 0]"]
165["Segment<br>[10664, 10696, 0]"]
166["Segment<br>[10727, 10760, 0]"]
167["Segment<br>[10792, 10825, 0]"]
168["Segment<br>[10856, 10890, 0]"]
169["Segment<br>[10912, 10946, 0]"]
170["Segment<br>[10976, 11010, 0]"]
171["Segment<br>[11042, 11076, 0]"]
172["Segment<br>[11106, 11139, 0]"]
173["Segment<br>[11171, 11204, 0]"]
174["Segment<br>[11234, 11268, 0]"]
175["Segment<br>[11300, 11334, 0]"]
176["Segment<br>[11364, 11398, 0]"]
177["Segment<br>[11430, 11470, 0]"]
178["Segment<br>[11500, 11540, 0]"]
179["Segment<br>[11572, 11606, 0]"]
180["Segment<br>[11636, 11683, 0]"]
181["Segment<br>[11715, 11762, 0]"]
182["Segment<br>[11793, 11826, 0]"]
183["Segment<br>[11858, 11891, 0]"]
184["Segment<br>[11922, 11956, 0]"]
185["Segment<br>[11978, 12009, 0]"]
186["Segment<br>[12039, 12083, 0]"]
187["Segment<br>[12115, 12162, 0]"]
188["Segment<br>[12193, 12226, 0]"]
189["Segment<br>[12258, 12291, 0]"]
190["Segment<br>[12322, 12356, 0]"]
191["Segment<br>[12388, 12422, 0]"]
192["Segment<br>[12452, 12485, 0]"]
193["Segment<br>[12517, 12550, 0]"]
194["Segment<br>[12580, 12614, 0]"]
195["Segment<br>[12646, 12680, 0]"]
196["Segment<br>[12710, 12744, 0]"]
197["Segment<br>[12776, 12816, 0]"]
198["Segment<br>[12846, 12886, 0]"]
199["Segment<br>[12918, 12952, 0]"]
200["Segment<br>[12982, 13016, 0]"]
201["Segment<br>[13048, 13082, 0]"]
202["Segment<br>[13112, 13145, 0]"]
203["Segment<br>[13177, 13210, 0]"]
204["Segment<br>[13240, 13274, 0]"]
205["Segment<br>[13306, 13340, 0]"]
206["Segment<br>[13370, 13403, 0]"]
207["Segment<br>[13435, 13468, 0]"]
208["Segment<br>[13498, 13531, 0]"]
209["Segment<br>[13553, 13583, 0]"]
210["Segment<br>[13613, 13643, 0]"]
211["Segment<br>[13675, 13708, 0]"]
212["Segment<br>[13738, 13770, 0]"]
213["Segment<br>[13802, 13834, 0]"]
214["Segment<br>[13864, 13897, 0]"]
215["Segment<br>[13929, 13962, 0]"]
216["Segment<br>[13992, 14024, 0]"]
217["Segment<br>[14056, 14088, 0]"]
218["Segment<br>[14118, 14151, 0]"]
219["Segment<br>[14183, 14216, 0]"]
220["Segment<br>[14246, 14279, 0]"]
221["Segment<br>[14311, 14350, 0]"]
222["Segment<br>[14380, 14419, 0]"]
223["Segment<br>[14451, 14484, 0]"]
224["Segment<br>[14514, 14547, 0]"]
225["Segment<br>[14579, 14612, 0]"]
226["Segment<br>[14642, 14674, 0]"]
227["Segment<br>[14706, 14738, 0]"]
228["Segment<br>[14768, 14801, 0]"]
229["Segment<br>[14833, 14866, 0]"]
230["Segment<br>[14896, 14928, 0]"]
231["Segment<br>[14960, 14992, 0]"]
232["Segment<br>[15022, 15056, 0]"]
233["Segment<br>[15078, 15112, 0]"]
234["Segment<br>[15142, 15176, 0]"]
235["Segment<br>[15208, 15241, 0]"]
236["Segment<br>[15271, 15304, 0]"]
237["Segment<br>[15336, 15370, 0]"]
238["Segment<br>[15401, 15448, 0]"]
239["Segment<br>[15480, 15527, 0]"]
240["Segment<br>[15558, 15591, 0]"]
241["Segment<br>[15613, 15645, 0]"]
242["Segment<br>[15675, 15707, 0]"]
243["Segment<br>[15739, 15772, 0]"]
244["Segment<br>[15802, 15835, 0]"]
245["Segment<br>[15867, 15900, 0]"]
246["Segment<br>[15930, 15963, 0]"]
247["Segment<br>[15995, 16028, 0]"]
248["Segment<br>[16058, 16092, 0]"]
249["Segment<br>[16114, 16148, 0]"]
250["Segment<br>[16178, 16211, 0]"]
251["Segment<br>[16243, 16275, 0]"]
252["Segment<br>[16305, 16338, 0]"]
253["Segment<br>[16370, 16404, 0]"]
254["Segment<br>[16435, 16469, 0]"]
255["Segment<br>[16501, 16535, 0]"]
256["Segment<br>[16566, 16599, 0]"]
257["Segment<br>[16621, 16654, 0]"]
258["Segment<br>[16684, 16717, 0]"]
259["Segment<br>[16749, 16782, 0]"]
260["Segment<br>[16812, 16845, 0]"]
261["Segment<br>[16877, 16909, 0]"]
262["Segment<br>[16939, 16970, 0]"]
263["Segment<br>[17002, 17034, 0]"]
264["Segment<br>[17065, 17096, 0]"]
265["Segment<br>[17118, 17150, 0]"]
266["Segment<br>[17182, 17215, 0]"]
267["Segment<br>[17246, 17280, 0]"]
268["Segment<br>[17312, 17346, 0]"]
269["Segment<br>[17376, 17409, 0]"]
270["Segment<br>[17441, 17474, 0]"]
271["Segment<br>[17504, 17536, 0]"]
272["Segment<br>[17568, 17601, 0]"]
273["Segment<br>[17623, 17655, 0]"]
274["Segment<br>[17687, 17720, 0]"]
275["Segment<br>[17750, 17784, 0]"]
276["Segment<br>[17816, 17850, 0]"]
277["Segment<br>[17880, 17914, 0]"]
278["Segment<br>[17946, 17980, 0]"]
279["Segment<br>[18010, 18044, 0]"]
280["Segment<br>[18076, 18111, 0]"]
281["Segment<br>[18133, 18168, 0]"]
282["Segment<br>[18200, 18235, 0]"]
283["Segment<br>[18266, 18301, 0]"]
284["Segment<br>[18333, 18341, 0]"]
Rust artifact graph (#5068) * Start porting artifact graph creation to Rust * Add most of artifact graph creation * Add handling loft command from recent PR * Refactor artifact merge code so that it errors when a new artifact type is added * Add sweep subtype * Finish implementation of build artifact graph * Fix wasm.ts to use new combined generated ts-rs file * Fix Rust lints * Fix lints * Fix up replacement code * Add artifact graph to WASM outcome * Add artifact graph to simulation test output * Add new artifact graph output snapshots * Fix wall field and reduce unreachable code * Change field order for subtype * Change subtype to be determined from the request, like the TS * Fix plane sweep_id * Condense code * Change ID types to be properly optional * Change to favor the new ID, the same as TS * Fix to make error impossible * Rename artifact type tag values to match TS * Fix name of field on Cap * Update outputs * Change to use Rust source range * Update output snapshots * Add conversion to mermaid mind map and add to snapshot tests * Add new mermaid mind map output * Add flowchart * Remove raw artifact graph from tests * Remove JSON artifact graph output * Update output file with header * Update output after adding flowchart * Fix flowchart to not have duplicate edges, one in each direction * Fix not not output duplicate edges in flowcharts * Change flowchart edge style to be more obvious when a direction is missing * Update output after deduplication of edges * Fix not not skip sketch-on-face artifacts * Add docs * Fix edge iteration order to be stable * Update output after fixing order * Port TS artifactGraph.test.ts tests to simulation tests * Add grouping segments and solid2ds with their path * Update output flowcharts since grouping paths * Remove TS artifactGraph tests * Remove unused d3 dependencies * Fix to track loft ID on paths * Add command ID to error messages * Move artifact graph test code to a separate file since it's a large file * Reduce function visibility * Remove TS artifact graph code * Fix spelling error with serde * Add TODO for edge cut consumed ID * Add comment about mermaid edge rank * Fix mermaid flowchart edge cuts to appear as children of their edges * Update output since fixing flowchart order * Fix to always build the artifact graph even when there's a KCL error * Add artifact graph to error output * Change optional ID merge to match TS * Remove redundant SourceRange definition * Remove Rust-flavored default source range function * Add helper for source range creation * Update doc comment for the website * Update docs after doc comment change * Fix to save engine responses in execution cache * Remove unused import * Fix to not call WASM function before beforeAll callback is run * Remove more unused imports
2025-01-17 14:34:36 -05:00
285[Solid2d]
end
1["Plane<br>[6, 25, 0]"]
KCL: Use keyword arguments for line, lineTo, extrude and close (#5249) Part of #4600. PR: https://github.com/KittyCAD/modeling-app/pull/4826 # Changes to KCL stdlib - `line(point, sketch, tag)` and `lineTo(point, sketch, tag)` are combined into `line(@sketch, end?, endAbsolute?, tag?)` - `close(sketch, tag?)` is now `close(@sketch, tag?)` - `extrude(length, sketch)` is now `extrude(@sketch, length)` Note that if a parameter starts with `@` like `@sketch`, it doesn't have any label when called, so you call it like this: ``` sketch = startSketchAt([0, 0]) line(sketch, end = [3, 3], tag = $hi) ``` Note also that if you're using a `|>` pipeline, you can omit the `@` argument and it will be assumed to be the LHS of the `|>`. So the above could be written as ``` sketch = startSketchAt([0, 0]) |> line(end = [3, 3], tag = $hi) ``` Also changes frontend tests to use KittyCAD/kcl-samples#139 instead of its main The regex find-and-replace I use for migrating code (note these don't work with multi-line expressions) are: ``` line\(([^=]*), %\) line(end = $1) line\((.*), %, (.*)\) line(end = $1, tag = $2) lineTo\((.*), %\) line(endAbsolute = $1) lineTo\((.*), %, (.*)\) line(endAbsolute = $1, tag = $2) extrude\((.*), %\) extrude(length = $1) extrude\(([^=]*), ([a-zA-Z0-9]+)\) extrude($2, length = $1) close\(%, (.*)\) close(tag = $1) ``` # Selected notes from commits before I squash them all * Fix test 'yRelative to horizontal distance' Fixes: - Make a lineTo helper - Fix pathToNode to go through the labeled arg .arg property * Fix test by changing lookups into transformMap Parts of the code assumed that `line` is always a relative call. But actually now it might be absolute, if it's got an `endAbsolute` parameter. So, change whether to look up `line` or `lineTo` and the relevant absolute or relative line types based on that parameter. * Stop asserting on exact source ranges When I changed line to kwargs, all the source ranges we assert on became slightly different. I find these assertions to be very very low value. So I'm removing them. * Fix more tests: getConstraintType calls weren't checking if the 'line' fn was absolute or relative. * Fixed another queryAst test There were 2 problems: - Test was looking for the old style of `line` call to choose an offset for pathToNode - Test assumed that the `tag` param was always the third one, but in a kwarg call, you have to look it up by label * Fix test: traverse was not handling CallExpressionKw * Fix another test, addTagKw addTag helper was not aware of kw args. * Convert close from positional to kwargs If the close() call has 0 args, or a single unlabeled arg, the parser interprets it as a CallExpression (positional) not a CallExpressionKw. But then if a codemod wants to add a tag to it, it tries adding a kwarg called 'tag', which fails because the CallExpression doesn't need kwargs inserted into it. The fix is: change the node from CallExpression to CallExpressionKw, and update getNodeFromPath to take a 'replacement' arg, so we can replace the old node with the new node in the AST. * Fix the last test Test was looking for `lineTo` as a substring of the input KCL program. But there's no more lineTo function, so I changed it to look for line() with an endAbsolute arg, which is the new equivalent. Also changed the getConstraintInfo code to look up the lineTo if using line with endAbsolute. * Fix many bad regex find-replaces I wrote a regex find-and-replace which converted `line` calls from positional to keyword calls. But it was accidentally applied to more places than it should be, for example, angledLine, xLine and yLine calls. Fixes this. * Fixes test 'Basic sketch › code pane closed at start' Problem was, the getNodeFromPath call might not actually find a callExpressionKw, it might find a callExpression. So the `giveSketchFnCallTag` thought it was modifying a kwargs call, but it was actually modifying a positional call. This meant it tried to push a labeled argument in, rather than a normal arg, and a lot of other problems. Fixed by doing runtime typechecking. * Fix: Optional args given with wrong type were silently ignored Optional args don't have to be given. But if the user gives them, they should be the right type. Bug: if the KCL interpreter found an optional arg, which was given, but was the wrong type, it would ignore it and pretend the arg was never given at all. This was confusing for users. Fix: Now if you give an optional arg, but it's the wrong type, KCL will emit a type error just like it would for a mandatory argument. --------- Signed-off-by: Nick Cameron <nrc@ncameron.org> Co-authored-by: Nick Cameron <nrc@ncameron.org> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Frank Noirot <frank@kittycad.io> Co-authored-by: Kevin Nadro <kevin@zoo.dev> Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
2025-02-04 08:31:43 -06:00
286["Sweep Extrusion<br>[18347, 18366, 0]"]
Rust artifact graph (#5068) * Start porting artifact graph creation to Rust * Add most of artifact graph creation * Add handling loft command from recent PR * Refactor artifact merge code so that it errors when a new artifact type is added * Add sweep subtype * Finish implementation of build artifact graph * Fix wasm.ts to use new combined generated ts-rs file * Fix Rust lints * Fix lints * Fix up replacement code * Add artifact graph to WASM outcome * Add artifact graph to simulation test output * Add new artifact graph output snapshots * Fix wall field and reduce unreachable code * Change field order for subtype * Change subtype to be determined from the request, like the TS * Fix plane sweep_id * Condense code * Change ID types to be properly optional * Change to favor the new ID, the same as TS * Fix to make error impossible * Rename artifact type tag values to match TS * Fix name of field on Cap * Update outputs * Change to use Rust source range * Update output snapshots * Add conversion to mermaid mind map and add to snapshot tests * Add new mermaid mind map output * Add flowchart * Remove raw artifact graph from tests * Remove JSON artifact graph output * Update output file with header * Update output after adding flowchart * Fix flowchart to not have duplicate edges, one in each direction * Fix not not output duplicate edges in flowcharts * Change flowchart edge style to be more obvious when a direction is missing * Update output after deduplication of edges * Fix not not skip sketch-on-face artifacts * Add docs * Fix edge iteration order to be stable * Update output after fixing order * Port TS artifactGraph.test.ts tests to simulation tests * Add grouping segments and solid2ds with their path * Update output flowcharts since grouping paths * Remove TS artifactGraph tests * Remove unused d3 dependencies * Fix to track loft ID on paths * Add command ID to error messages * Move artifact graph test code to a separate file since it's a large file * Reduce function visibility * Remove TS artifact graph code * Fix spelling error with serde * Add TODO for edge cut consumed ID * Add comment about mermaid edge rank * Fix mermaid flowchart edge cuts to appear as children of their edges * Update output since fixing flowchart order * Fix to always build the artifact graph even when there's a KCL error * Add artifact graph to error output * Change optional ID merge to match TS * Remove redundant SourceRange definition * Remove Rust-flavored default source range function * Add helper for source range creation * Update doc comment for the website * Update docs after doc comment change * Fix to save engine responses in execution cache * Remove unused import * Fix to not call WASM function before beforeAll callback is run * Remove more unused imports
2025-01-17 14:34:36 -05:00
287[Wall]
288[Wall]
289[Wall]
290[Wall]
291[Wall]
292[Wall]
293[Wall]
294[Wall]
295[Wall]
296[Wall]
297[Wall]
298[Wall]
299[Wall]
300[Wall]
301[Wall]
302[Wall]
303[Wall]
304[Wall]
305[Wall]
306[Wall]
307[Wall]
308[Wall]
309[Wall]
310[Wall]
311[Wall]
312[Wall]
313[Wall]
314[Wall]
315[Wall]
316[Wall]
317[Wall]
318[Wall]
319[Wall]
320[Wall]
321[Wall]
322[Wall]
323[Wall]
324[Wall]
325[Wall]
326[Wall]
327[Wall]
328[Wall]
329[Wall]
330[Wall]
331[Wall]
332[Wall]
333[Wall]
334[Wall]
335[Wall]
336[Wall]
337[Wall]
338[Wall]
339[Wall]
340[Wall]
341[Wall]
342[Wall]
343[Wall]
344[Wall]
345[Wall]
346[Wall]
347[Wall]
348[Wall]
349[Wall]
350[Wall]
351[Wall]
352[Wall]
353[Wall]
354[Wall]
355[Wall]
356[Wall]
357[Wall]
358[Wall]
359[Wall]
360[Wall]
361[Wall]
362[Wall]
363[Wall]
364[Wall]
365[Wall]
366[Wall]
367[Wall]
368[Wall]
369[Wall]
370[Wall]
371[Wall]
372[Wall]
373[Wall]
374[Wall]
375[Wall]
376[Wall]
377[Wall]
378[Wall]
379[Wall]
380[Wall]
381[Wall]
382[Wall]
383[Wall]
384[Wall]
385[Wall]
386[Wall]
387[Wall]
388[Wall]
389[Wall]
390[Wall]
391[Wall]
392[Wall]
393[Wall]
394[Wall]
395[Wall]
396[Wall]
397[Wall]
398[Wall]
399[Wall]
400[Wall]
401[Wall]
402[Wall]
403[Wall]
404[Wall]
405[Wall]
406[Wall]
407[Wall]
408[Wall]
409[Wall]
410[Wall]
411[Wall]
412[Wall]
413[Wall]
414[Wall]
415[Wall]
416[Wall]
417[Wall]
418[Wall]
419[Wall]
420[Wall]
421[Wall]
422[Wall]
423[Wall]
424[Wall]
425[Wall]
426[Wall]
427[Wall]
428[Wall]
429[Wall]
430[Wall]
431[Wall]
432[Wall]
433[Wall]
434[Wall]
435[Wall]
436[Wall]
437[Wall]
438[Wall]
439[Wall]
440[Wall]
441[Wall]
442[Wall]
443[Wall]
444[Wall]
445[Wall]
446[Wall]
447[Wall]
448[Wall]
449[Wall]
450[Wall]
451[Wall]
452[Wall]
453[Wall]
454[Wall]
455[Wall]
456[Wall]
457[Wall]
458[Wall]
459[Wall]
460[Wall]
461[Wall]
462[Wall]
463[Wall]
464[Wall]
465[Wall]
466[Wall]
467[Wall]
468[Wall]
469[Wall]
470[Wall]
471[Wall]
472[Wall]
473[Wall]
474[Wall]
475[Wall]
476[Wall]
477[Wall]
478[Wall]
479[Wall]
480[Wall]
481[Wall]
482[Wall]
483[Wall]
484[Wall]
485[Wall]
486[Wall]
487[Wall]
488[Wall]
489[Wall]
490[Wall]
491[Wall]
492[Wall]
493[Wall]
494[Wall]
495[Wall]
496[Wall]
497[Wall]
498[Wall]
499[Wall]
500[Wall]
501[Wall]
502[Wall]
503[Wall]
504[Wall]
505[Wall]
506[Wall]
507[Wall]
508[Wall]
509[Wall]
510[Wall]
511[Wall]
512[Wall]
513[Wall]
514[Wall]
515[Wall]
516[Wall]
517[Wall]
518[Wall]
519[Wall]
520[Wall]
521[Wall]
522[Wall]
523[Wall]
524[Wall]
525[Wall]
526[Wall]
527[Wall]
528[Wall]
529[Wall]
530[Wall]
531[Wall]
532[Wall]
533[Wall]
534[Wall]
535[Wall]
536[Wall]
537[Wall]
538[Wall]
539[Wall]
540[Wall]
541[Wall]
542[Wall]
543[Wall]
544[Wall]
545[Wall]
546[Wall]
547[Wall]
548[Wall]
549[Wall]
550[Wall]
551[Wall]
552[Wall]
553[Wall]
554[Wall]
555[Wall]
556[Wall]
557[Wall]
558[Wall]
559[Wall]
560[Wall]
561[Wall]
562[Wall]
563[Wall]
564[Wall]
565[Wall]
566[Wall]
567[Wall]
568["Cap Start"]
569["Cap End"]
570["SweepEdge Opposite"]
571["SweepEdge Adjacent"]
572["SweepEdge Opposite"]
573["SweepEdge Adjacent"]
574["SweepEdge Opposite"]
575["SweepEdge Adjacent"]
576["SweepEdge Opposite"]
577["SweepEdge Adjacent"]
578["SweepEdge Opposite"]
579["SweepEdge Adjacent"]
580["SweepEdge Opposite"]
581["SweepEdge Adjacent"]
582["SweepEdge Opposite"]
583["SweepEdge Adjacent"]
584["SweepEdge Opposite"]
585["SweepEdge Adjacent"]
586["SweepEdge Opposite"]
587["SweepEdge Adjacent"]
588["SweepEdge Opposite"]
589["SweepEdge Adjacent"]
590["SweepEdge Opposite"]
591["SweepEdge Adjacent"]
592["SweepEdge Opposite"]
593["SweepEdge Adjacent"]
594["SweepEdge Opposite"]
595["SweepEdge Adjacent"]
596["SweepEdge Opposite"]
597["SweepEdge Adjacent"]
598["SweepEdge Opposite"]
599["SweepEdge Adjacent"]
600["SweepEdge Opposite"]
601["SweepEdge Adjacent"]
602["SweepEdge Opposite"]
603["SweepEdge Adjacent"]
604["SweepEdge Opposite"]
605["SweepEdge Adjacent"]
606["SweepEdge Opposite"]
607["SweepEdge Adjacent"]
608["SweepEdge Opposite"]
609["SweepEdge Adjacent"]
610["SweepEdge Opposite"]
611["SweepEdge Adjacent"]
612["SweepEdge Opposite"]
613["SweepEdge Adjacent"]
614["SweepEdge Opposite"]
615["SweepEdge Adjacent"]
616["SweepEdge Opposite"]
617["SweepEdge Adjacent"]
618["SweepEdge Opposite"]
619["SweepEdge Adjacent"]
620["SweepEdge Opposite"]
621["SweepEdge Adjacent"]
622["SweepEdge Opposite"]
623["SweepEdge Adjacent"]
624["SweepEdge Opposite"]
625["SweepEdge Adjacent"]
626["SweepEdge Opposite"]
627["SweepEdge Adjacent"]
628["SweepEdge Opposite"]
629["SweepEdge Adjacent"]
630["SweepEdge Opposite"]
631["SweepEdge Adjacent"]
632["SweepEdge Opposite"]
633["SweepEdge Adjacent"]
634["SweepEdge Opposite"]
635["SweepEdge Adjacent"]
636["SweepEdge Opposite"]
637["SweepEdge Adjacent"]
638["SweepEdge Opposite"]
639["SweepEdge Adjacent"]
640["SweepEdge Opposite"]
641["SweepEdge Adjacent"]
642["SweepEdge Opposite"]
643["SweepEdge Adjacent"]
644["SweepEdge Opposite"]
645["SweepEdge Adjacent"]
646["SweepEdge Opposite"]
647["SweepEdge Adjacent"]
648["SweepEdge Opposite"]
649["SweepEdge Adjacent"]
650["SweepEdge Opposite"]
651["SweepEdge Adjacent"]
652["SweepEdge Opposite"]
653["SweepEdge Adjacent"]
654["SweepEdge Opposite"]
655["SweepEdge Adjacent"]
656["SweepEdge Opposite"]
657["SweepEdge Adjacent"]
658["SweepEdge Opposite"]
659["SweepEdge Adjacent"]
660["SweepEdge Opposite"]
661["SweepEdge Adjacent"]
662["SweepEdge Opposite"]
663["SweepEdge Adjacent"]
664["SweepEdge Opposite"]
665["SweepEdge Adjacent"]
666["SweepEdge Opposite"]
667["SweepEdge Adjacent"]
668["SweepEdge Opposite"]
669["SweepEdge Adjacent"]
670["SweepEdge Opposite"]
671["SweepEdge Adjacent"]
672["SweepEdge Opposite"]
673["SweepEdge Adjacent"]
674["SweepEdge Opposite"]
675["SweepEdge Adjacent"]
676["SweepEdge Opposite"]
677["SweepEdge Adjacent"]
678["SweepEdge Opposite"]
679["SweepEdge Adjacent"]
680["SweepEdge Opposite"]
681["SweepEdge Adjacent"]
682["SweepEdge Opposite"]
683["SweepEdge Adjacent"]
684["SweepEdge Opposite"]
685["SweepEdge Adjacent"]
686["SweepEdge Opposite"]
687["SweepEdge Adjacent"]
688["SweepEdge Opposite"]
689["SweepEdge Adjacent"]
690["SweepEdge Opposite"]
691["SweepEdge Adjacent"]
692["SweepEdge Opposite"]
693["SweepEdge Adjacent"]
694["SweepEdge Opposite"]
695["SweepEdge Adjacent"]
696["SweepEdge Opposite"]
697["SweepEdge Adjacent"]
698["SweepEdge Opposite"]
699["SweepEdge Adjacent"]
700["SweepEdge Opposite"]
701["SweepEdge Adjacent"]
702["SweepEdge Opposite"]
703["SweepEdge Adjacent"]
704["SweepEdge Opposite"]
705["SweepEdge Adjacent"]
706["SweepEdge Opposite"]
707["SweepEdge Adjacent"]
708["SweepEdge Opposite"]
709["SweepEdge Adjacent"]
710["SweepEdge Opposite"]
711["SweepEdge Adjacent"]
712["SweepEdge Opposite"]
713["SweepEdge Adjacent"]
714["SweepEdge Opposite"]
715["SweepEdge Adjacent"]
716["SweepEdge Opposite"]
717["SweepEdge Adjacent"]
718["SweepEdge Opposite"]
719["SweepEdge Adjacent"]
720["SweepEdge Opposite"]
721["SweepEdge Adjacent"]
722["SweepEdge Opposite"]
723["SweepEdge Adjacent"]
724["SweepEdge Opposite"]
725["SweepEdge Adjacent"]
726["SweepEdge Opposite"]
727["SweepEdge Adjacent"]
728["SweepEdge Opposite"]
729["SweepEdge Adjacent"]
730["SweepEdge Opposite"]
731["SweepEdge Adjacent"]
732["SweepEdge Opposite"]
733["SweepEdge Adjacent"]
734["SweepEdge Opposite"]
735["SweepEdge Adjacent"]
736["SweepEdge Opposite"]
737["SweepEdge Adjacent"]
738["SweepEdge Opposite"]
739["SweepEdge Adjacent"]
740["SweepEdge Opposite"]
741["SweepEdge Adjacent"]
742["SweepEdge Opposite"]
743["SweepEdge Adjacent"]
744["SweepEdge Opposite"]
745["SweepEdge Adjacent"]
746["SweepEdge Opposite"]
747["SweepEdge Adjacent"]
748["SweepEdge Opposite"]
749["SweepEdge Adjacent"]
750["SweepEdge Opposite"]
751["SweepEdge Adjacent"]
752["SweepEdge Opposite"]
753["SweepEdge Adjacent"]
754["SweepEdge Opposite"]
755["SweepEdge Adjacent"]
756["SweepEdge Opposite"]
757["SweepEdge Adjacent"]
758["SweepEdge Opposite"]
759["SweepEdge Adjacent"]
760["SweepEdge Opposite"]
761["SweepEdge Adjacent"]
762["SweepEdge Opposite"]
763["SweepEdge Adjacent"]
764["SweepEdge Opposite"]
765["SweepEdge Adjacent"]
766["SweepEdge Opposite"]
767["SweepEdge Adjacent"]
768["SweepEdge Opposite"]
769["SweepEdge Adjacent"]
770["SweepEdge Opposite"]
771["SweepEdge Adjacent"]
772["SweepEdge Opposite"]
773["SweepEdge Adjacent"]
774["SweepEdge Opposite"]
775["SweepEdge Adjacent"]
776["SweepEdge Opposite"]
777["SweepEdge Adjacent"]
778["SweepEdge Opposite"]
779["SweepEdge Adjacent"]
780["SweepEdge Opposite"]
781["SweepEdge Adjacent"]
782["SweepEdge Opposite"]
783["SweepEdge Adjacent"]
784["SweepEdge Opposite"]
785["SweepEdge Adjacent"]
786["SweepEdge Opposite"]
787["SweepEdge Adjacent"]
788["SweepEdge Opposite"]
789["SweepEdge Adjacent"]
790["SweepEdge Opposite"]
791["SweepEdge Adjacent"]
792["SweepEdge Opposite"]
793["SweepEdge Adjacent"]
794["SweepEdge Opposite"]
795["SweepEdge Adjacent"]
796["SweepEdge Opposite"]
797["SweepEdge Adjacent"]
798["SweepEdge Opposite"]
799["SweepEdge Adjacent"]
800["SweepEdge Opposite"]
801["SweepEdge Adjacent"]
802["SweepEdge Opposite"]
803["SweepEdge Adjacent"]
804["SweepEdge Opposite"]
805["SweepEdge Adjacent"]
806["SweepEdge Opposite"]
807["SweepEdge Adjacent"]
808["SweepEdge Opposite"]
809["SweepEdge Adjacent"]
810["SweepEdge Opposite"]
811["SweepEdge Adjacent"]
812["SweepEdge Opposite"]
813["SweepEdge Adjacent"]
814["SweepEdge Opposite"]
815["SweepEdge Adjacent"]
816["SweepEdge Opposite"]
817["SweepEdge Adjacent"]
818["SweepEdge Opposite"]
819["SweepEdge Adjacent"]
820["SweepEdge Opposite"]
821["SweepEdge Adjacent"]
822["SweepEdge Opposite"]
823["SweepEdge Adjacent"]
824["SweepEdge Opposite"]
825["SweepEdge Adjacent"]
826["SweepEdge Opposite"]
827["SweepEdge Adjacent"]
828["SweepEdge Opposite"]
829["SweepEdge Adjacent"]
830["SweepEdge Opposite"]
831["SweepEdge Adjacent"]
832["SweepEdge Opposite"]
833["SweepEdge Adjacent"]
834["SweepEdge Opposite"]
835["SweepEdge Adjacent"]
836["SweepEdge Opposite"]
837["SweepEdge Adjacent"]
838["SweepEdge Opposite"]
839["SweepEdge Adjacent"]
840["SweepEdge Opposite"]
841["SweepEdge Adjacent"]
842["SweepEdge Opposite"]
843["SweepEdge Adjacent"]
844["SweepEdge Opposite"]
845["SweepEdge Adjacent"]
846["SweepEdge Opposite"]
847["SweepEdge Adjacent"]
848["SweepEdge Opposite"]
849["SweepEdge Adjacent"]
850["SweepEdge Opposite"]
851["SweepEdge Adjacent"]
852["SweepEdge Opposite"]
853["SweepEdge Adjacent"]
854["SweepEdge Opposite"]
855["SweepEdge Adjacent"]
856["SweepEdge Opposite"]
857["SweepEdge Adjacent"]
858["SweepEdge Opposite"]
859["SweepEdge Adjacent"]
860["SweepEdge Opposite"]
861["SweepEdge Adjacent"]
862["SweepEdge Opposite"]
863["SweepEdge Adjacent"]
864["SweepEdge Opposite"]
865["SweepEdge Adjacent"]
866["SweepEdge Opposite"]
867["SweepEdge Adjacent"]
868["SweepEdge Opposite"]
869["SweepEdge Adjacent"]
870["SweepEdge Opposite"]
871["SweepEdge Adjacent"]
872["SweepEdge Opposite"]
873["SweepEdge Adjacent"]
874["SweepEdge Opposite"]
875["SweepEdge Adjacent"]
876["SweepEdge Opposite"]
877["SweepEdge Adjacent"]
878["SweepEdge Opposite"]
879["SweepEdge Adjacent"]
880["SweepEdge Opposite"]
881["SweepEdge Adjacent"]
882["SweepEdge Opposite"]
883["SweepEdge Adjacent"]
884["SweepEdge Opposite"]
885["SweepEdge Adjacent"]
886["SweepEdge Opposite"]
887["SweepEdge Adjacent"]
888["SweepEdge Opposite"]
889["SweepEdge Adjacent"]
890["SweepEdge Opposite"]
891["SweepEdge Adjacent"]
892["SweepEdge Opposite"]
893["SweepEdge Adjacent"]
894["SweepEdge Opposite"]
895["SweepEdge Adjacent"]
896["SweepEdge Opposite"]
897["SweepEdge Adjacent"]
898["SweepEdge Opposite"]
899["SweepEdge Adjacent"]
900["SweepEdge Opposite"]
901["SweepEdge Adjacent"]
902["SweepEdge Opposite"]
903["SweepEdge Adjacent"]
904["SweepEdge Opposite"]
905["SweepEdge Adjacent"]
906["SweepEdge Opposite"]
907["SweepEdge Adjacent"]
908["SweepEdge Opposite"]
909["SweepEdge Adjacent"]
910["SweepEdge Opposite"]
911["SweepEdge Adjacent"]
912["SweepEdge Opposite"]
913["SweepEdge Adjacent"]
914["SweepEdge Opposite"]
915["SweepEdge Adjacent"]
916["SweepEdge Opposite"]
917["SweepEdge Adjacent"]
918["SweepEdge Opposite"]
919["SweepEdge Adjacent"]
920["SweepEdge Opposite"]
921["SweepEdge Adjacent"]
922["SweepEdge Opposite"]
923["SweepEdge Adjacent"]
924["SweepEdge Opposite"]
925["SweepEdge Adjacent"]
926["SweepEdge Opposite"]
927["SweepEdge Adjacent"]
928["SweepEdge Opposite"]
929["SweepEdge Adjacent"]
930["SweepEdge Opposite"]
931["SweepEdge Adjacent"]
932["SweepEdge Opposite"]
933["SweepEdge Adjacent"]
934["SweepEdge Opposite"]
935["SweepEdge Adjacent"]
936["SweepEdge Opposite"]
937["SweepEdge Adjacent"]
938["SweepEdge Opposite"]
939["SweepEdge Adjacent"]
940["SweepEdge Opposite"]
941["SweepEdge Adjacent"]
942["SweepEdge Opposite"]
943["SweepEdge Adjacent"]
944["SweepEdge Opposite"]
945["SweepEdge Adjacent"]
946["SweepEdge Opposite"]
947["SweepEdge Adjacent"]
948["SweepEdge Opposite"]
949["SweepEdge Adjacent"]
950["SweepEdge Opposite"]
951["SweepEdge Adjacent"]
952["SweepEdge Opposite"]
953["SweepEdge Adjacent"]
954["SweepEdge Opposite"]
955["SweepEdge Adjacent"]
956["SweepEdge Opposite"]
957["SweepEdge Adjacent"]
958["SweepEdge Opposite"]
959["SweepEdge Adjacent"]
960["SweepEdge Opposite"]
961["SweepEdge Adjacent"]
962["SweepEdge Opposite"]
963["SweepEdge Adjacent"]
964["SweepEdge Opposite"]
965["SweepEdge Adjacent"]
966["SweepEdge Opposite"]
967["SweepEdge Adjacent"]
968["SweepEdge Opposite"]
969["SweepEdge Adjacent"]
970["SweepEdge Opposite"]
971["SweepEdge Adjacent"]
972["SweepEdge Opposite"]
973["SweepEdge Adjacent"]
974["SweepEdge Opposite"]
975["SweepEdge Adjacent"]
976["SweepEdge Opposite"]
977["SweepEdge Adjacent"]
978["SweepEdge Opposite"]
979["SweepEdge Adjacent"]
980["SweepEdge Opposite"]
981["SweepEdge Adjacent"]
982["SweepEdge Opposite"]
983["SweepEdge Adjacent"]
984["SweepEdge Opposite"]
985["SweepEdge Adjacent"]
986["SweepEdge Opposite"]
987["SweepEdge Adjacent"]
988["SweepEdge Opposite"]
989["SweepEdge Adjacent"]
990["SweepEdge Opposite"]
991["SweepEdge Adjacent"]
992["SweepEdge Opposite"]
993["SweepEdge Adjacent"]
994["SweepEdge Opposite"]
995["SweepEdge Adjacent"]
996["SweepEdge Opposite"]
997["SweepEdge Adjacent"]
998["SweepEdge Opposite"]
999["SweepEdge Adjacent"]
1000["SweepEdge Opposite"]
1001["SweepEdge Adjacent"]
1002["SweepEdge Opposite"]
1003["SweepEdge Adjacent"]
1004["SweepEdge Opposite"]
1005["SweepEdge Adjacent"]
1006["SweepEdge Opposite"]
1007["SweepEdge Adjacent"]
1008["SweepEdge Opposite"]
1009["SweepEdge Adjacent"]
1010["SweepEdge Opposite"]
1011["SweepEdge Adjacent"]
1012["SweepEdge Opposite"]
1013["SweepEdge Adjacent"]
1014["SweepEdge Opposite"]
1015["SweepEdge Adjacent"]
1016["SweepEdge Opposite"]
1017["SweepEdge Adjacent"]
1018["SweepEdge Opposite"]
1019["SweepEdge Adjacent"]
1020["SweepEdge Opposite"]
1021["SweepEdge Adjacent"]
1022["SweepEdge Opposite"]
1023["SweepEdge Adjacent"]
1024["SweepEdge Opposite"]
1025["SweepEdge Adjacent"]
1026["SweepEdge Opposite"]
1027["SweepEdge Adjacent"]
1028["SweepEdge Opposite"]
1029["SweepEdge Adjacent"]
1030["SweepEdge Opposite"]
1031["SweepEdge Adjacent"]
1032["SweepEdge Opposite"]
1033["SweepEdge Adjacent"]
1034["SweepEdge Opposite"]
1035["SweepEdge Adjacent"]
1036["SweepEdge Opposite"]
1037["SweepEdge Adjacent"]
1038["SweepEdge Opposite"]
1039["SweepEdge Adjacent"]
1040["SweepEdge Opposite"]
1041["SweepEdge Adjacent"]
1042["SweepEdge Opposite"]
1043["SweepEdge Adjacent"]
1044["SweepEdge Opposite"]
1045["SweepEdge Adjacent"]
1046["SweepEdge Opposite"]
1047["SweepEdge Adjacent"]
1048["SweepEdge Opposite"]
1049["SweepEdge Adjacent"]
1050["SweepEdge Opposite"]
1051["SweepEdge Adjacent"]
1052["SweepEdge Opposite"]
1053["SweepEdge Adjacent"]
1054["SweepEdge Opposite"]
1055["SweepEdge Adjacent"]
1056["SweepEdge Opposite"]
1057["SweepEdge Adjacent"]
1058["SweepEdge Opposite"]
1059["SweepEdge Adjacent"]
1060["SweepEdge Opposite"]
1061["SweepEdge Adjacent"]
1062["SweepEdge Opposite"]
1063["SweepEdge Adjacent"]
1064["SweepEdge Opposite"]
1065["SweepEdge Adjacent"]
1066["SweepEdge Opposite"]
1067["SweepEdge Adjacent"]
1068["SweepEdge Opposite"]
1069["SweepEdge Adjacent"]
1070["SweepEdge Opposite"]
1071["SweepEdge Adjacent"]
1072["SweepEdge Opposite"]
1073["SweepEdge Adjacent"]
1074["SweepEdge Opposite"]
1075["SweepEdge Adjacent"]
1076["SweepEdge Opposite"]
1077["SweepEdge Adjacent"]
1078["SweepEdge Opposite"]
1079["SweepEdge Adjacent"]
1080["SweepEdge Opposite"]
1081["SweepEdge Adjacent"]
1082["SweepEdge Opposite"]
1083["SweepEdge Adjacent"]
1084["SweepEdge Opposite"]
1085["SweepEdge Adjacent"]
1086["SweepEdge Opposite"]
1087["SweepEdge Adjacent"]
1088["SweepEdge Opposite"]
1089["SweepEdge Adjacent"]
1090["SweepEdge Opposite"]
1091["SweepEdge Adjacent"]
1092["SweepEdge Opposite"]
1093["SweepEdge Adjacent"]
1094["SweepEdge Opposite"]
1095["SweepEdge Adjacent"]
1096["SweepEdge Opposite"]
1097["SweepEdge Adjacent"]
1098["SweepEdge Opposite"]
1099["SweepEdge Adjacent"]
1100["SweepEdge Opposite"]
1101["SweepEdge Adjacent"]
1102["SweepEdge Opposite"]
1103["SweepEdge Adjacent"]
1104["SweepEdge Opposite"]
1105["SweepEdge Adjacent"]
1106["SweepEdge Opposite"]
1107["SweepEdge Adjacent"]
1108["SweepEdge Opposite"]
1109["SweepEdge Adjacent"]
1110["SweepEdge Opposite"]
1111["SweepEdge Adjacent"]
1112["SweepEdge Opposite"]
1113["SweepEdge Adjacent"]
1114["SweepEdge Opposite"]
1115["SweepEdge Adjacent"]
1116["SweepEdge Opposite"]
1117["SweepEdge Adjacent"]
1118["SweepEdge Opposite"]
1119["SweepEdge Adjacent"]
1120["SweepEdge Opposite"]
1121["SweepEdge Adjacent"]
1122["SweepEdge Opposite"]
1123["SweepEdge Adjacent"]
1124["SweepEdge Opposite"]
1125["SweepEdge Adjacent"]
1126["SweepEdge Opposite"]
1127["SweepEdge Adjacent"]
1128["SweepEdge Opposite"]
1129["SweepEdge Adjacent"]
1130["SweepEdge Opposite"]
1 --- 2
2 --- 3
2 --- 4
2 --- 5
2 --- 6
2 --- 7
2 --- 8
2 --- 9
2 --- 10
2 --- 11
2 --- 12
2 --- 13
2 --- 14
2 --- 15
2 --- 16
2 --- 17
2 --- 18
2 --- 19
2 --- 20
2 --- 21
2 --- 22
2 --- 23
2 --- 24
2 --- 25
2 --- 26
2 --- 27
2 --- 28
2 --- 29
2 --- 30
2 --- 31
2 --- 32
2 --- 33
2 --- 34
2 --- 35
2 --- 36
2 --- 37
2 --- 38
2 --- 39
2 --- 40
2 --- 41
2 --- 42
2 --- 43
2 --- 44
2 --- 45
2 --- 46
2 --- 47
2 --- 48
2 --- 49
2 --- 50
2 --- 51
2 --- 52
2 --- 53
2 --- 54
2 --- 55
2 --- 56
2 --- 57
2 --- 58
2 --- 59
2 --- 60
2 --- 61
2 --- 62
2 --- 63
2 --- 64
2 --- 65
2 --- 66
2 --- 67
2 --- 68
2 --- 69
2 --- 70
2 --- 71
2 --- 72
2 --- 73
2 --- 74
2 --- 75
2 --- 76
2 --- 77
2 --- 78
2 --- 79
2 --- 80
2 --- 81
2 --- 82
2 --- 83
2 --- 84
2 --- 85
2 --- 86
2 --- 87
2 --- 88
2 --- 89
2 --- 90
2 --- 91
2 --- 92
2 --- 93
2 --- 94
2 --- 95
2 --- 96
2 --- 97
2 --- 98
2 --- 99
2 --- 100
2 --- 101
2 --- 102
2 --- 103
2 --- 104
2 --- 105
2 --- 106
2 --- 107
2 --- 108
2 --- 109
2 --- 110
2 --- 111
2 --- 112
2 --- 113
2 --- 114
2 --- 115
2 --- 116
2 --- 117
2 --- 118
2 --- 119
2 --- 120
2 --- 121
2 --- 122
2 --- 123
2 --- 124
2 --- 125
2 --- 126
2 --- 127
2 --- 128
2 --- 129
2 --- 130
2 --- 131
2 --- 132
2 --- 133
2 --- 134
2 --- 135
2 --- 136
2 --- 137
2 --- 138
2 --- 139
2 --- 140
2 --- 141
2 --- 142
2 --- 143
2 --- 144
2 --- 145
2 --- 146
2 --- 147
2 --- 148
2 --- 149
2 --- 150
2 --- 151
2 --- 152
2 --- 153
2 --- 154
2 --- 155
2 --- 156
2 --- 157
2 --- 158
2 --- 159
2 --- 160
2 --- 161
2 --- 162
2 --- 163
2 --- 164
2 --- 165
2 --- 166
2 --- 167
2 --- 168
2 --- 169
2 --- 170
2 --- 171
2 --- 172
2 --- 173
2 --- 174
2 --- 175
2 --- 176
2 --- 177
2 --- 178
2 --- 179
2 --- 180
2 --- 181
2 --- 182
2 --- 183
2 --- 184
2 --- 185
2 --- 186
2 --- 187
2 --- 188
2 --- 189
2 --- 190
2 --- 191
2 --- 192
2 --- 193
2 --- 194
2 --- 195
2 --- 196
2 --- 197
2 --- 198
2 --- 199
2 --- 200
2 --- 201
2 --- 202
2 --- 203
2 --- 204
2 --- 205
2 --- 206
2 --- 207
2 --- 208
2 --- 209
2 --- 210
2 --- 211
2 --- 212
2 --- 213
2 --- 214
2 --- 215
2 --- 216
2 --- 217
2 --- 218
2 --- 219
2 --- 220
2 --- 221
2 --- 222
2 --- 223
2 --- 224
2 --- 225
2 --- 226
2 --- 227
2 --- 228
2 --- 229
2 --- 230
2 --- 231
2 --- 232
2 --- 233
2 --- 234
2 --- 235
2 --- 236
2 --- 237
2 --- 238
2 --- 239
2 --- 240
2 --- 241
2 --- 242
2 --- 243
2 --- 244
2 --- 245
2 --- 246
2 --- 247
2 --- 248
2 --- 249
2 --- 250
2 --- 251
2 --- 252
2 --- 253
2 --- 254
2 --- 255
2 --- 256
2 --- 257
2 --- 258
2 --- 259
2 --- 260
2 --- 261
2 --- 262
2 --- 263
2 --- 264
2 --- 265
2 --- 266
2 --- 267
2 --- 268
2 --- 269
2 --- 270
2 --- 271
2 --- 272
2 --- 273
2 --- 274
2 --- 275
2 --- 276
2 --- 277
2 --- 278
2 --- 279
2 --- 280
2 --- 281
2 --- 282
2 --- 283
2 --- 284
2 ---- 286
2 --- 285
3 --- 567
3 --- 1130
3 --- 571
4 --- 566
4 --- 1128
4 --- 1129
5 --- 565
5 --- 1126
5 --- 1127
6 --- 564
6 --- 1124
6 --- 1125
7 --- 563
7 --- 1122
7 --- 1123
8 --- 562
8 --- 1120
8 --- 1121
9 --- 561
9 --- 1118
9 --- 1119
10 --- 560
10 --- 1116
10 --- 1117
11 --- 559
11 --- 1114
11 --- 1115
12 --- 558
12 --- 1112
12 --- 1113
13 --- 557
13 --- 1110
13 --- 1111
14 --- 556
14 --- 1108
14 --- 1109
15 --- 555
15 --- 1106
15 --- 1107
16 --- 554
16 --- 1104
16 --- 1105
17 --- 553
17 --- 1102
17 --- 1103
18 --- 552
18 --- 1100
18 --- 1101
19 --- 551
19 --- 1098
19 --- 1099
20 --- 550
20 --- 1096
20 --- 1097
21 --- 549
21 --- 1094
21 --- 1095
22 --- 548
22 --- 1092
22 --- 1093
23 --- 547
23 --- 1090
23 --- 1091
24 --- 546
24 --- 1088
24 --- 1089
25 --- 545
25 --- 1086
25 --- 1087
26 --- 544
26 --- 1084
26 --- 1085
27 --- 543
27 --- 1082
27 --- 1083
28 --- 542
28 --- 1080
28 --- 1081
29 --- 541
29 --- 1078
29 --- 1079
30 --- 540
30 --- 1076
30 --- 1077
31 --- 539
31 --- 1074
31 --- 1075
32 --- 538
32 --- 1072
32 --- 1073
33 --- 537
33 --- 1070
33 --- 1071
34 --- 536
34 --- 1068
34 --- 1069
35 --- 535
35 --- 1066
35 --- 1067
36 --- 534
36 --- 1064
36 --- 1065
37 --- 533
37 --- 1062
37 --- 1063
38 --- 532
38 --- 1060
38 --- 1061
39 --- 531
39 --- 1058
39 --- 1059
40 --- 530
40 --- 1056
40 --- 1057
41 --- 529
41 --- 1054
41 --- 1055
42 --- 528
42 --- 1052
42 --- 1053
43 --- 527
43 --- 1050
43 --- 1051
44 --- 526
44 --- 1048
44 --- 1049
45 --- 525
45 --- 1046
45 --- 1047
46 --- 524
46 --- 1044
46 --- 1045
47 --- 523
47 --- 1042
47 --- 1043
48 --- 522
48 --- 1040
48 --- 1041
49 --- 521
49 --- 1038
49 --- 1039
50 --- 520
50 --- 1036
50 --- 1037
51 --- 519
51 --- 1034
51 --- 1035
52 --- 518
52 --- 1032
52 --- 1033
53 --- 517
53 --- 1030
53 --- 1031
54 --- 516
54 --- 1028
54 --- 1029
55 --- 515
55 --- 1026
55 --- 1027
56 --- 514
56 --- 1024
56 --- 1025
57 --- 513
57 --- 1022
57 --- 1023
58 --- 512
58 --- 1020
58 --- 1021
59 --- 511
59 --- 1018
59 --- 1019
60 --- 510
60 --- 1016
60 --- 1017
61 --- 509
61 --- 1014
61 --- 1015
62 --- 508
62 --- 1012
62 --- 1013
63 --- 507
63 --- 1010
63 --- 1011
64 --- 506
64 --- 1008
64 --- 1009
65 --- 505
65 --- 1006
65 --- 1007
66 --- 504
66 --- 1004
66 --- 1005
67 --- 503
67 --- 1002
67 --- 1003
68 --- 502
68 --- 1000
68 --- 1001
69 --- 501
69 --- 998
69 --- 999
70 --- 500
70 --- 996
70 --- 997
71 --- 499
71 --- 994
71 --- 995
72 --- 498
72 --- 992
72 --- 993
73 --- 497
73 --- 990
73 --- 991
74 --- 496
74 --- 988
74 --- 989
75 --- 495
75 --- 986
75 --- 987
76 --- 494
76 --- 984
76 --- 985
77 --- 493
77 --- 982
77 --- 983
78 --- 492
78 --- 980
78 --- 981
79 --- 491
79 --- 978
79 --- 979
80 --- 490
80 --- 976
80 --- 977
81 --- 489
81 --- 974
81 --- 975
82 --- 488
82 --- 972
82 --- 973
83 --- 487
83 --- 970
83 --- 971
84 --- 486
84 --- 968
84 --- 969
85 --- 485
85 --- 966
85 --- 967
86 --- 484
86 --- 964
86 --- 965
87 --- 483
87 --- 962
87 --- 963
88 --- 482
88 --- 960
88 --- 961
89 --- 481
89 --- 958
89 --- 959
90 --- 480
90 --- 956
90 --- 957
91 --- 479
91 --- 954
91 --- 955
92 --- 478
92 --- 952
92 --- 953
93 --- 477
93 --- 950
93 --- 951
94 --- 476
94 --- 948
94 --- 949
95 --- 475
95 --- 946
95 --- 947
96 --- 474
96 --- 944
96 --- 945
97 --- 473
97 --- 942
97 --- 943
98 --- 472
98 --- 940
98 --- 941
99 --- 471
99 --- 938
99 --- 939
100 --- 470
100 --- 936
100 --- 937
101 --- 469
101 --- 934
101 --- 935
102 --- 468
102 --- 932
102 --- 933
103 --- 467
103 --- 930
103 --- 931
104 --- 466
104 --- 928
104 --- 929
105 --- 465
105 --- 926
105 --- 927
106 --- 464
106 --- 924
106 --- 925
107 --- 463
107 --- 922
107 --- 923
108 --- 462
108 --- 920
108 --- 921
109 --- 461
109 --- 918
109 --- 919
110 --- 460
110 --- 916
110 --- 917
111 --- 459
111 --- 914
111 --- 915
112 --- 458
112 --- 912
112 --- 913
113 --- 457
113 --- 910
113 --- 911
114 --- 456
114 --- 908
114 --- 909
115 --- 455
115 --- 906
115 --- 907
116 --- 454
116 --- 904
116 --- 905
117 --- 453
117 --- 902
117 --- 903
118 --- 452
118 --- 900
118 --- 901
120 --- 451
120 --- 898
120 --- 899
121 --- 450
121 --- 896
121 --- 897
122 --- 449
122 --- 894
122 --- 895
123 --- 448
123 --- 892
123 --- 893
124 --- 447
124 --- 890
124 --- 891
125 --- 446
125 --- 888
125 --- 889
126 --- 445
126 --- 886
126 --- 887
127 --- 444
127 --- 884
127 --- 885
128 --- 443
128 --- 882
128 --- 883
129 --- 442
129 --- 880
129 --- 881
130 --- 441
130 --- 878
130 --- 879
131 --- 440
131 --- 876
131 --- 877
132 --- 439
132 --- 874
132 --- 875
133 --- 438
133 --- 872
133 --- 873
134 --- 437
134 --- 870
134 --- 871
135 --- 436
135 --- 868
135 --- 869
136 --- 435
136 --- 866
136 --- 867
137 --- 434
137 --- 864
137 --- 865
138 --- 433
138 --- 862
138 --- 863
139 --- 432
139 --- 860
139 --- 861
140 --- 431
140 --- 858
140 --- 859
141 --- 430
141 --- 856
141 --- 857
142 --- 429
142 --- 854
142 --- 855
143 --- 428
143 --- 852
143 --- 853
144 --- 427
144 --- 850
144 --- 851
145 --- 426
145 --- 848
145 --- 849
146 --- 425
146 --- 846
146 --- 847
147 --- 424
147 --- 844
147 --- 845
148 --- 423
148 --- 842
148 --- 843
149 --- 422
149 --- 840
149 --- 841
150 --- 421
150 --- 838
150 --- 839
151 --- 420
151 --- 836
151 --- 837
152 --- 419
152 --- 834
152 --- 835
153 --- 418
153 --- 832
153 --- 833
154 --- 417
154 --- 830
154 --- 831
155 --- 416
155 --- 828
155 --- 829
156 --- 415
156 --- 826
156 --- 827
157 --- 414
157 --- 824
157 --- 825
158 --- 413
158 --- 822
158 --- 823
159 --- 412
159 --- 820
159 --- 821
160 --- 411
160 --- 818
160 --- 819
161 --- 410
161 --- 816
161 --- 817
162 --- 409
162 --- 814
162 --- 815
163 --- 408
163 --- 812
163 --- 813
164 --- 407
164 --- 810
164 --- 811
165 --- 406
165 --- 808
165 --- 809
166 --- 405
166 --- 806
166 --- 807
167 --- 404
167 --- 804
167 --- 805
168 --- 403
168 --- 802
168 --- 803
169 --- 402
169 --- 800
169 --- 801
170 --- 401
170 --- 798
170 --- 799
171 --- 400
171 --- 796
171 --- 797
172 --- 399
172 --- 794
172 --- 795
173 --- 398
173 --- 792
173 --- 793
174 --- 397
174 --- 790
174 --- 791
175 --- 396
175 --- 788
175 --- 789
176 --- 395
176 --- 786
176 --- 787
177 --- 394
177 --- 784
177 --- 785
178 --- 393
178 --- 782
178 --- 783
179 --- 392
179 --- 780
179 --- 781
180 --- 391
180 --- 778
180 --- 779
181 --- 390
181 --- 776
181 --- 777
182 --- 389
182 --- 774
182 --- 775
183 --- 388
183 --- 772
183 --- 773
184 --- 387
184 --- 770
184 --- 771
185 --- 386
185 --- 768
185 --- 769
186 --- 385
186 --- 766
186 --- 767
187 --- 384
187 --- 764
187 --- 765
188 --- 383
188 --- 762
188 --- 763
189 --- 382
189 --- 760
189 --- 761
190 --- 381
190 --- 758
190 --- 759
191 --- 380
191 --- 756
191 --- 757
192 --- 379
192 --- 754
192 --- 755
193 --- 378
193 --- 752
193 --- 753
194 --- 377
194 --- 750
194 --- 751
195 --- 376
195 --- 748
195 --- 749
196 --- 375
196 --- 746
196 --- 747
197 --- 374
197 --- 744
197 --- 745
198 --- 373
198 --- 742
198 --- 743
199 --- 372
199 --- 740
199 --- 741
200 --- 371
200 --- 738
200 --- 739
201 --- 370
201 --- 736
201 --- 737
202 --- 369
202 --- 734
202 --- 735
203 --- 368
203 --- 732
203 --- 733
204 --- 367
204 --- 730
204 --- 731
205 --- 366
205 --- 728
205 --- 729
206 --- 365
206 --- 726
206 --- 727
207 --- 364
207 --- 724
207 --- 725
208 --- 363
208 --- 722
208 --- 723
209 --- 362
209 --- 720
209 --- 721
210 --- 361
210 --- 718
210 --- 719
211 --- 360
211 --- 716
211 --- 717
212 --- 359
212 --- 714
212 --- 715
213 --- 358
213 --- 712
213 --- 713
214 --- 357
214 --- 710
214 --- 711
215 --- 356
215 --- 708
215 --- 709
216 --- 355
216 --- 706
216 --- 707
217 --- 354
217 --- 704
217 --- 705
218 --- 353
218 --- 702
218 --- 703
219 --- 352
219 --- 700
219 --- 701
220 --- 351
220 --- 698
220 --- 699
221 --- 350
221 --- 696
221 --- 697
222 --- 349
222 --- 694
222 --- 695
223 --- 348
223 --- 692
223 --- 693
224 --- 347
224 --- 690
224 --- 691
225 --- 346
225 --- 688
225 --- 689
226 --- 345
226 --- 686
226 --- 687
227 --- 344
227 --- 684
227 --- 685
228 --- 343
228 --- 682
228 --- 683
229 --- 342
229 --- 680
229 --- 681
230 --- 341
230 --- 678
230 --- 679
231 --- 340
231 --- 676
231 --- 677
232 --- 339
232 --- 674
232 --- 675
233 --- 338
233 --- 672
233 --- 673
234 --- 337
234 --- 670
234 --- 671
235 --- 336
235 --- 668
235 --- 669
236 --- 335
236 --- 666
236 --- 667
237 --- 334
237 --- 664
237 --- 665
238 --- 333
238 --- 662
238 --- 663
239 --- 332
239 --- 660
239 --- 661
240 --- 331
240 --- 658
240 --- 659
241 --- 330
241 --- 656
241 --- 657
242 --- 329
242 --- 654
242 --- 655
243 --- 328
243 --- 652
243 --- 653
244 --- 327
244 --- 650
244 --- 651
245 --- 326
245 --- 648
245 --- 649
246 --- 325
246 --- 646
246 --- 647
247 --- 324
247 --- 644
247 --- 645
248 --- 323
248 --- 642
248 --- 643
249 --- 322
249 --- 640
249 --- 641
250 --- 321
250 --- 638
250 --- 639
251 --- 320
251 --- 636
251 --- 637
252 --- 319
252 --- 634
252 --- 635
253 --- 318
253 --- 632
253 --- 633
254 --- 317
254 --- 630
254 --- 631
255 --- 316
255 --- 628
255 --- 629
256 --- 315
256 --- 626
256 --- 627
257 --- 314
257 --- 624
257 --- 625
258 --- 313
258 --- 622
258 --- 623
259 --- 312
259 --- 620
259 --- 621
260 --- 311
260 --- 618
260 --- 619
261 --- 310
261 --- 616
261 --- 617
262 --- 309
262 --- 614
262 --- 615
263 --- 308
263 --- 612
263 --- 613
264 --- 307
264 --- 610
264 --- 611
265 --- 306
265 --- 608
265 --- 609
266 --- 305
266 --- 606
266 --- 607
267 --- 304
267 --- 604
267 --- 605
268 --- 303
268 --- 602
268 --- 603
269 --- 302
269 --- 600
269 --- 601
270 --- 301
270 --- 598
270 --- 599
271 --- 300
271 --- 596
271 --- 597
272 --- 299
272 --- 594
272 --- 595
273 --- 298
273 --- 592
273 --- 593
274 --- 297
274 --- 590
274 --- 591
275 --- 296
275 --- 588
275 --- 589
276 --- 295
276 --- 586
276 --- 587
277 --- 294
277 --- 584
277 --- 585
278 --- 293
278 --- 582
278 --- 583
279 --- 292
279 --- 580
279 --- 581
280 --- 291
280 --- 578
280 --- 579
281 --- 290
281 --- 576
281 --- 577
282 --- 289
282 --- 574
282 --- 575
283 --- 288
283 --- 572
283 --- 573
284 --- 287
284 --- 570
284 x--> 571
286 --- 287
286 --- 288
286 --- 289
286 --- 290
286 --- 291
286 --- 292
286 --- 293
286 --- 294
286 --- 295
286 --- 296
286 --- 297
286 --- 298
286 --- 299
286 --- 300
286 --- 301
286 --- 302
286 --- 303
286 --- 304
286 --- 305
286 --- 306
286 --- 307
286 --- 308
286 --- 309
286 --- 310
286 --- 311
286 --- 312
286 --- 313
286 --- 314
286 --- 315
286 --- 316
286 --- 317
286 --- 318
286 --- 319
286 --- 320
286 --- 321
286 --- 322
286 --- 323
286 --- 324
286 --- 325
286 --- 326
286 --- 327
286 --- 328
286 --- 329
286 --- 330
286 --- 331
286 --- 332
286 --- 333
286 --- 334
286 --- 335
286 --- 336
286 --- 337
286 --- 338
286 --- 339
286 --- 340
286 --- 341
286 --- 342
286 --- 343
286 --- 344
286 --- 345
286 --- 346
286 --- 347
286 --- 348
286 --- 349
286 --- 350
286 --- 351
286 --- 352
286 --- 353
286 --- 354
286 --- 355
286 --- 356
286 --- 357
286 --- 358
286 --- 359
286 --- 360
286 --- 361
286 --- 362
286 --- 363
286 --- 364
286 --- 365
286 --- 366
286 --- 367
286 --- 368
286 --- 369
286 --- 370
286 --- 371
286 --- 372
286 --- 373
286 --- 374
286 --- 375
286 --- 376
286 --- 377
286 --- 378
286 --- 379
286 --- 380
286 --- 381
286 --- 382
286 --- 383
286 --- 384
286 --- 385
286 --- 386
286 --- 387
286 --- 388
286 --- 389
286 --- 390
286 --- 391
286 --- 392
286 --- 393
286 --- 394
286 --- 395
286 --- 396
286 --- 397
286 --- 398
286 --- 399
286 --- 400
286 --- 401
286 --- 402
286 --- 403
286 --- 404
286 --- 405
286 --- 406
286 --- 407
286 --- 408
286 --- 409
286 --- 410
286 --- 411
286 --- 412
286 --- 413
286 --- 414
286 --- 415
286 --- 416
286 --- 417
286 --- 418
286 --- 419
286 --- 420
286 --- 421
286 --- 422
286 --- 423
286 --- 424
286 --- 425
286 --- 426
286 --- 427
286 --- 428
286 --- 429
286 --- 430
286 --- 431
286 --- 432
286 --- 433
286 --- 434
286 --- 435
286 --- 436
286 --- 437
286 --- 438
286 --- 439
286 --- 440
286 --- 441
286 --- 442
286 --- 443
286 --- 444
286 --- 445
286 --- 446
286 --- 447
286 --- 448
286 --- 449
286 --- 450
286 --- 451
286 --- 452
286 --- 453
286 --- 454
286 --- 455
286 --- 456
286 --- 457
286 --- 458
286 --- 459
286 --- 460
286 --- 461
286 --- 462
286 --- 463
286 --- 464
286 --- 465
286 --- 466
286 --- 467
286 --- 468
286 --- 469
286 --- 470
286 --- 471
286 --- 472
286 --- 473
286 --- 474
286 --- 475
286 --- 476
286 --- 477
286 --- 478
286 --- 479
286 --- 480
286 --- 481
286 --- 482
286 --- 483
286 --- 484
286 --- 485
286 --- 486
286 --- 487
286 --- 488
286 --- 489
286 --- 490
286 --- 491
286 --- 492
286 --- 493
286 --- 494
286 --- 495
286 --- 496
286 --- 497
286 --- 498
286 --- 499
286 --- 500
286 --- 501
286 --- 502
286 --- 503
286 --- 504
286 --- 505
286 --- 506
286 --- 507
286 --- 508
286 --- 509
286 --- 510
286 --- 511
286 --- 512
286 --- 513
286 --- 514
286 --- 515
286 --- 516
286 --- 517
286 --- 518
286 --- 519
286 --- 520
286 --- 521
286 --- 522
286 --- 523
286 --- 524
286 --- 525
286 --- 526
286 --- 527
286 --- 528
286 --- 529
286 --- 530
286 --- 531
286 --- 532
286 --- 533
286 --- 534
286 --- 535
286 --- 536
286 --- 537
286 --- 538
286 --- 539
286 --- 540
286 --- 541
286 --- 542
286 --- 543
286 --- 544
286 --- 545
286 --- 546
286 --- 547
286 --- 548
286 --- 549
286 --- 550
286 --- 551
286 --- 552
286 --- 553
286 --- 554
286 --- 555
286 --- 556
286 --- 557
286 --- 558
286 --- 559
286 --- 560
286 --- 561
286 --- 562
286 --- 563
286 --- 564
286 --- 565
286 --- 566
286 --- 567
286 --- 568
286 --- 569
286 --- 570
286 --- 571
286 --- 572
286 --- 573
286 --- 574
286 --- 575
286 --- 576
286 --- 577
286 --- 578
286 --- 579
286 --- 580
286 --- 581
286 --- 582
286 --- 583
286 --- 584
286 --- 585
286 --- 586
286 --- 587
286 --- 588
286 --- 589
286 --- 590
286 --- 591
286 --- 592
286 --- 593
286 --- 594
286 --- 595
286 --- 596
286 --- 597
286 --- 598
286 --- 599
286 --- 600
286 --- 601
286 --- 602
286 --- 603
286 --- 604
286 --- 605
286 --- 606
286 --- 607
286 --- 608
286 --- 609
286 --- 610
286 --- 611
286 --- 612
286 --- 613
286 --- 614
286 --- 615
286 --- 616
286 --- 617
286 --- 618
286 --- 619
286 --- 620
286 --- 621
286 --- 622
286 --- 623
286 --- 624
286 --- 625
286 --- 626
286 --- 627
286 --- 628
286 --- 629
286 --- 630
286 --- 631
286 --- 632
286 --- 633
286 --- 634
286 --- 635
286 --- 636
286 --- 637
286 --- 638
286 --- 639
286 --- 640
286 --- 641
286 --- 642
286 --- 643
286 --- 644
286 --- 645
286 --- 646
286 --- 647
286 --- 648
286 --- 649
286 --- 650
286 --- 651
286 --- 652
286 --- 653
286 --- 654
286 --- 655
286 --- 656
286 --- 657
286 --- 658
286 --- 659
286 --- 660
286 --- 661
286 --- 662
286 --- 663
286 --- 664
286 --- 665
286 --- 666
286 --- 667
286 --- 668
286 --- 669
286 --- 670
286 --- 671
286 --- 672
286 --- 673
286 --- 674
286 --- 675
286 --- 676
286 --- 677
286 --- 678
286 --- 679
286 --- 680
286 --- 681
286 --- 682
286 --- 683
286 --- 684
286 --- 685
286 --- 686
286 --- 687
286 --- 688
286 --- 689
286 --- 690
286 --- 691
286 --- 692
286 --- 693
286 --- 694
286 --- 695
286 --- 696
286 --- 697
286 --- 698
286 --- 699
286 --- 700
286 --- 701
286 --- 702
286 --- 703
286 --- 704
286 --- 705
286 --- 706
286 --- 707
286 --- 708
286 --- 709
286 --- 710
286 --- 711
286 --- 712
286 --- 713
286 --- 714
286 --- 715
286 --- 716
286 --- 717
286 --- 718
286 --- 719
286 --- 720
286 --- 721
286 --- 722
286 --- 723
286 --- 724
286 --- 725
286 --- 726
286 --- 727
286 --- 728
286 --- 729
286 --- 730
286 --- 731
286 --- 732
286 --- 733
286 --- 734
286 --- 735
286 --- 736
286 --- 737
286 --- 738
286 --- 739
286 --- 740
286 --- 741
286 --- 742
286 --- 743
286 --- 744
286 --- 745
286 --- 746
286 --- 747
286 --- 748
286 --- 749
286 --- 750
286 --- 751
286 --- 752
286 --- 753
286 --- 754
286 --- 755
286 --- 756
286 --- 757
286 --- 758
286 --- 759
286 --- 760
286 --- 761
286 --- 762
286 --- 763
286 --- 764
286 --- 765
286 --- 766
286 --- 767
286 --- 768
286 --- 769
286 --- 770
286 --- 771
286 --- 772
286 --- 773
286 --- 774
286 --- 775
286 --- 776
286 --- 777
286 --- 778
286 --- 779
286 --- 780
286 --- 781
286 --- 782
286 --- 783
286 --- 784
286 --- 785
286 --- 786
286 --- 787
286 --- 788
286 --- 789
286 --- 790
286 --- 791
286 --- 792
286 --- 793
286 --- 794
286 --- 795
286 --- 796
286 --- 797
286 --- 798
286 --- 799
286 --- 800
286 --- 801
286 --- 802
286 --- 803
286 --- 804
286 --- 805
286 --- 806
286 --- 807
286 --- 808
286 --- 809
286 --- 810
286 --- 811
286 --- 812
286 --- 813
286 --- 814
286 --- 815
286 --- 816
286 --- 817
286 --- 818
286 --- 819
286 --- 820
286 --- 821
286 --- 822
286 --- 823
286 --- 824
286 --- 825
286 --- 826
286 --- 827
286 --- 828
286 --- 829
286 --- 830
286 --- 831
286 --- 832
286 --- 833
286 --- 834
286 --- 835
286 --- 836
286 --- 837
286 --- 838
286 --- 839
286 --- 840
286 --- 841
286 --- 842
286 --- 843
286 --- 844
286 --- 845
286 --- 846
286 --- 847
286 --- 848
286 --- 849
286 --- 850
286 --- 851
286 --- 852
286 --- 853
286 --- 854
286 --- 855
286 --- 856
286 --- 857
286 --- 858
286 --- 859
286 --- 860
286 --- 861
286 --- 862
286 --- 863
286 --- 864
286 --- 865
286 --- 866
286 --- 867
286 --- 868
286 --- 869
286 --- 870
286 --- 871
286 --- 872
286 --- 873
286 --- 874
286 --- 875
286 --- 876
286 --- 877
286 --- 878
286 --- 879
286 --- 880
286 --- 881
286 --- 882
286 --- 883
286 --- 884
286 --- 885
286 --- 886
286 --- 887
286 --- 888
286 --- 889
286 --- 890
286 --- 891
286 --- 892
286 --- 893
286 --- 894
286 --- 895
286 --- 896
286 --- 897
286 --- 898
286 --- 899
286 --- 900
286 --- 901
286 --- 902
286 --- 903
286 --- 904
286 --- 905
286 --- 906
286 --- 907
286 --- 908
286 --- 909
286 --- 910
286 --- 911
286 --- 912
286 --- 913
286 --- 914
286 --- 915
286 --- 916
286 --- 917
286 --- 918
286 --- 919
286 --- 920
286 --- 921
286 --- 922
286 --- 923
286 --- 924
286 --- 925
286 --- 926
286 --- 927
286 --- 928
286 --- 929
286 --- 930
286 --- 931
286 --- 932
286 --- 933
286 --- 934
286 --- 935
286 --- 936
286 --- 937
286 --- 938
286 --- 939
286 --- 940
286 --- 941
286 --- 942
286 --- 943
286 --- 944
286 --- 945
286 --- 946
286 --- 947
286 --- 948
286 --- 949
286 --- 950
286 --- 951
286 --- 952
286 --- 953
286 --- 954
286 --- 955
286 --- 956
286 --- 957
286 --- 958
286 --- 959
286 --- 960
286 --- 961
286 --- 962
286 --- 963
286 --- 964
286 --- 965
286 --- 966
286 --- 967
286 --- 968
286 --- 969
286 --- 970
286 --- 971
286 --- 972
286 --- 973
286 --- 974
286 --- 975
286 --- 976
286 --- 977
286 --- 978
286 --- 979
286 --- 980
286 --- 981
286 --- 982
286 --- 983
286 --- 984
286 --- 985
286 --- 986
286 --- 987
286 --- 988
286 --- 989
286 --- 990
286 --- 991
286 --- 992
286 --- 993
286 --- 994
286 --- 995
286 --- 996
286 --- 997
286 --- 998
286 --- 999
286 --- 1000
286 --- 1001
286 --- 1002
286 --- 1003
286 --- 1004
286 --- 1005
286 --- 1006
286 --- 1007
286 --- 1008
286 --- 1009
286 --- 1010
286 --- 1011
286 --- 1012
286 --- 1013
286 --- 1014
286 --- 1015
286 --- 1016
286 --- 1017
286 --- 1018
286 --- 1019
286 --- 1020
286 --- 1021
286 --- 1022
286 --- 1023
286 --- 1024
286 --- 1025
286 --- 1026
286 --- 1027
286 --- 1028
286 --- 1029
286 --- 1030
286 --- 1031
286 --- 1032
286 --- 1033
286 --- 1034
286 --- 1035
286 --- 1036
286 --- 1037
286 --- 1038
286 --- 1039
286 --- 1040
286 --- 1041
286 --- 1042
286 --- 1043
286 --- 1044
286 --- 1045
286 --- 1046
286 --- 1047
286 --- 1048
286 --- 1049
286 --- 1050
286 --- 1051
286 --- 1052
286 --- 1053
286 --- 1054
286 --- 1055
286 --- 1056
286 --- 1057
286 --- 1058
286 --- 1059
286 --- 1060
286 --- 1061
286 --- 1062
286 --- 1063
286 --- 1064
286 --- 1065
286 --- 1066
286 --- 1067
286 --- 1068
286 --- 1069
286 --- 1070
286 --- 1071
286 --- 1072
286 --- 1073
286 --- 1074
286 --- 1075
286 --- 1076
286 --- 1077
286 --- 1078
286 --- 1079
286 --- 1080
286 --- 1081
286 --- 1082
286 --- 1083
286 --- 1084
286 --- 1085
286 --- 1086
286 --- 1087
286 --- 1088
286 --- 1089
286 --- 1090
286 --- 1091
286 --- 1092
286 --- 1093
286 --- 1094
286 --- 1095
286 --- 1096
286 --- 1097
286 --- 1098
286 --- 1099
286 --- 1100
286 --- 1101
286 --- 1102
286 --- 1103
286 --- 1104
286 --- 1105
286 --- 1106
286 --- 1107
286 --- 1108
286 --- 1109
286 --- 1110
286 --- 1111
286 --- 1112
286 --- 1113
286 --- 1114
286 --- 1115
286 --- 1116
286 --- 1117
286 --- 1118
286 --- 1119
286 --- 1120
286 --- 1121
286 --- 1122
286 --- 1123
286 --- 1124
286 --- 1125
286 --- 1126
286 --- 1127
286 --- 1128
286 --- 1129
286 --- 1130
```