From c68e5d777417439e72823f1bc38d2a8b9aa816b2 Mon Sep 17 00:00:00 2001 From: Adam Chalmers Date: Tue, 11 Feb 2025 16:06:47 -0600 Subject: [PATCH] KCL: Linear/circular pattern in stdlib should use kwargs (#5315) Part of https://github.com/KittyCAD/modeling-app/issues/4600 --- docs/kcl/appearance.md | 32 +- docs/kcl/helix.md | 29 +- docs/kcl/loft.md | 10 +- docs/kcl/patternCircular2d.md | 16 +- docs/kcl/patternCircular3d.md | 17 +- docs/kcl/patternLinear2d.md | 16 +- docs/kcl/patternLinear3d.md | 16 +- docs/kcl/std.json | 25286 +++++++++++++++- docs/kcl/sweep.md | 9 +- e2e/playwright/point-click.spec.ts | 11 +- e2e/playwright/regression-tests.spec.ts | 10 +- ...e-with-none-z-up-1-Google-Chrome-linux.png | Bin 77947 -> 77758 bytes package.json | 2 +- src/lang/kclSamples.test.ts | 2 +- src/lib/exampleKcl.ts | 12 +- src/wasm-lib/justfile | 6 + src/wasm-lib/kcl/src/docs/mod.rs | 14 +- src/wasm-lib/kcl/src/lsp/tests.rs | 20 +- src/wasm-lib/kcl/src/std/appearance.rs | 30 +- src/wasm-lib/kcl/src/std/args.rs | 73 - src/wasm-lib/kcl/src/std/patterns.rs | 196 +- src/wasm-lib/kcl/src/unparser.rs | 53 +- .../ast.snap | 1 + .../artifact_commands.snap | 30 +- .../circular_pattern3d_a_pattern/ast.snap | 557 +- .../circular_pattern3d_a_pattern/input.kcl | 14 +- .../circular_pattern3d_a_pattern/ops.snap | 72 +- .../tests/helix_simple/artifact_commands.snap | 3 +- .../artifact_graph_flowchart.snap.md | 2 +- src/wasm-lib/kcl/tests/helix_simple/ast.snap | 33 +- src/wasm-lib/kcl/tests/helix_simple/input.kcl | 9 +- src/wasm-lib/kcl/tests/helix_simple/ops.snap | 27 +- .../tests/helix_simple/program_memory.snap | 3 +- .../artifact_commands.snap | 30 +- .../tests/linear_pattern3d_a_pattern/ast.snap | 385 +- .../linear_pattern3d_a_pattern/input.kcl | 14 +- .../tests/linear_pattern3d_a_pattern/ops.snap | 58 +- .../ast.snap | 1 + .../sketch-on-chamfer-two-times/ast.snap | 1 + .../ast.snap | 1 + .../inputs/circular_pattern3d_a_pattern.kcl | 20 +- .../focusrite_scarlett_mounting_braket.kcl | 20 +- .../tests/executor/inputs/global-tags.kcl | 20 +- src/wasm-lib/tests/executor/inputs/lego.kcl | 20 +- .../inputs/linear_pattern3d_a_pattern.kcl | 22 +- .../executor/inputs/server-rack-heavy.kcl | 320 +- .../executor/inputs/server-rack-lite.kcl | 80 +- .../tests/executor/inputs/slow_lego.kcl.tmpl | 20 +- src/wasm-lib/tests/executor/main.rs | 66 +- 49 files changed, 26313 insertions(+), 1376 deletions(-) diff --git a/docs/kcl/appearance.md b/docs/kcl/appearance.md index 89bfb3e75..1a2fbaba6 100644 --- a/docs/kcl/appearance.md +++ b/docs/kcl/appearance.md @@ -71,8 +71,18 @@ example0 = cube([0, 0]) example1 = cube([20, 0]) example2 = cube([40, 0]) -appearance([example0, example1], color = '#ff0000', metalness = 50, roughness = 50) -appearance(example2, color = '#00ff00', metalness = 50, roughness = 50) +appearance( + [example0, example1], + color = '#ff0000', + metalness = 50, + roughness = 50, +) +appearance( + example2, + color = '#00ff00', + metalness = 50, + roughness = 50, +) ``` ![Rendered example of appearance 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD0IUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq676b3fNNdc8+MyZMw9+ndd5nffiqquuuuqqq/53E2CekwDznASY5yTAPCcB5jkJMM9JgHlOAsxzEmCekwDznASY5yTAPCcB5jkJMM9JgHlOAsxzEmCekwDznASY5yTAPCcB5jkJMM9JgHlOAsxzEmCekwDznPQP//APv/0P//APv33ffffdylVXXXXVVf+d0IMe9CCuuuqqq6767/W5n/u5v/ViL/Zir33p7ru56qr/D45dfz0Al+6+mxfGXHXV/w3Hr7+e+929ezf/I5irrvpPdf2J67nvvvtu/ZAP+ZCHcNVVV1111X8n9KAHPYirrrrqqqv++3zu537ub73Yi73Ya//ud34nv/ed38m/lbjqqv845j/Xh//Yj3Hs+uv5/o/4CJ7xV3/FfyTzP495Edj8RzP/dcx/PvOfy/znMPDgl3kZ3vfrv567d+/m7b/y7fkPY/7jmf8c5j+e+Tcz5nmY/3jmP575j2X+4xne7w3ej/d7w/fjvvvuu/VDPuRDHsJVV1111VX/XQiuuuqqq676b/O5n/u5v/ViL/Zir/23v/iL/P53ficCBAgQIECAAAECBAgQIECAuOqq/1gCBAgQIECAAAECBAgQIECAAAECxAt27PrrAXjGX/0V/9EECBAgQIAAAQIECBAg/msIECBAgAABAgQIkAQSSCCB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BAgQIP59BPfs3sOHf8uHc8011zz4wz/8w7/rmmuueTBXXXXVVVf9VyC46qqrrrrqP90111zz4A//8A//LoAf/IiP4Pa/+isECBAgQIAAAQIECBAgQPzfJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAHi/z4BAgQIECBAgAABAgQIECBAgADxgt3yMi8DwG1/9Vf8RxIgQIAAAQIECBAgQPznEiBAgAABAgQIEP/xBAgQIECAAAECxH8sAQIECBAgQBKSQAIJJJBA4l9LgAABAgQIEP9+AgQIECBAgPj3EyBAgAAB4jn99S/9EgDXHb+OF5kAAQIECBD/PgIECBAgQPz7CBAgQID49xEgQIAAAeLfR4AAAQLEv48AAQIEiH+REEIIIYQQzyJAgAAB4t9HgAABAsS/jwABAgSIf7W7L97N5//o53PNNdc8+HM+53N+65prrnkwV1111VVX/WcjuOqqq6666j/dh3/4h3/Xi73Yi732L3zBF3DbX/0V/90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD/OwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIP7nEiBAgAABL/kmb8Kx668HYO+eexAgQIAA8V9DgAABAgQIECBAgADxn0OAAAECBAgQIED8xxMgQIAAAQLEfzwBAgQIECAJSSCBBBJI/FsIECBAgAAB4t9PgAABAgSIfz8BAgRcuvtubv2rv+L649fzMg9+Gf5dBAgQIED8+wkQIECA+PcRIECAAAHi30eAAAECxL+PAAECBIh/HwECBAgQ/yIhhBBCCCGeRYAAAQLEv48AAQIEiH8fAQIECBD/ol/8i1/k83/087nmmmse/Lmf+7m/zVVXXXXVVf/ZCK666qqrrvpP9bmf+7m/9WIv9mKv/fvf+Z383S/9Ev9aAgQIECBAgAABAgQIECBAgAABAgQIECCu+r9EgAABAgQIECBAgAABAgQIECBAgAAB4j/XseuvB+DvfvEXeUEECBAgQIAAAQIECBAg/vMJECBAgAABAgQIEP/xBAgQIECAAAECxH8cAQIECBAgQID4jyVAgAABkpCEJJBAAgkk/i0ECBAgQID49xMgQIAAAQLEv82tf/mXALzMg18GBAgQIED8+wgQIECAAPHvI0CAAAECxL+PAAECBIh/HwECBAgQIP7tBAgQIECA+LcTIECAAAHihRJCCCGEEOJZBAgQIED8+wgQIECA+PcRIECAAPE8fvEvfpHv+LXv4MyZMw/68A//8O/iqquuuuqq/0xUrrrqqquu+k/zuZ/7ub/1Yi/2Yq9921/9FX/wnd+J+P9L/N9j/u8R/z7mBXuJN3kTAG77q7/iP4p40Zn/POJfZv5jiRfO/McQL5j5jyOei8T9zAPY/GuJF8z8+4jnz7xgz/irvwLgTV/6TfnO3/lOnod4/sy/nXj+zL+deF7m3048f+bfTjwv828nnpf5txPPy7xAQjw3Yy4Tz8v824nnZf7txPP4jl//DgDe7w3e770Bvv7rv/59uOqqq6666j8DwVVXXXXVVf8p3vEd3/GzXuzFXuy1b/urv+KHPuIj+O8mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD/NwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECxP9MAgQIECBAgIBj118PwN//0i8hQIAA8V9DgAABAgQIECBAgADxn0OAAAECBAgQIED8xxIgQIAAAQIEiP8YAgQIECBAgADxH0eAAAGSkIQkJIEEEv9WAgQIECBA/PsJECBAgABxxe499wBw/fHruf749bzIBAgQIECA+PcRIECAAAHi306AAAECBIh/HwECBAgQ/z4CBAgQIP59BAgQIED8+wgQIECAeKGEEEIIIZ6DAAECBIh/HwECBAgQ/z6CX/jLX+Avn/aXvM7rvM57v+M7vuNncdVVV1111X8GyvHjx7nqqquuuuo/1ou92Iu99kd8xEd896W77+a73+d9+LcQIECAAAECBAgQIECAAAECBAgQIECAuOr/IgECBAgQIECAAAECBAgQIECAAAECBIj/XC/xJm/CI17zNfm7X/xFnvx7v8dzEyBAgAABAgQIECBAgPjPJ0CAAAECBAgQIP5zCBAgQIAAAQLEfywBAgQIECBA/McRIECAAAECxH8cAQIkIQlJSAIJJP6tBAgQIECA+PcTsD444EEv+7Icv/56nnzvk3nyvU/m30WAAAECxL+fAAECBIh/HwECBAgQ/z4CBAgQIP59BAgQIED8+wgQIECA+PcRIECAAPECCSGEEEII8RwECBAgQPz7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AQIECBAgXrDHvsmbAPC4X/ol9u65h38PAQIECBAgQIAAAeI/hwABAgQIECBA/McSIECAAAECxL+SBBJIIIEEEgIECBAgQID49xMgQIAAAQLEv48AAQIECBD/PgIECBAgQPz7CBAgQID499m75x5u+6u/4vpj1/MyD3oZEP8+AgQIECD+7QQIECBA/KsIIYQQQiBAgAAB4t9OgAABAsS/nQABAsS/nQABAgSIfzsBAgQIEP92AgQIEP92AgQIECD+7QQIECD+ze7evZuP+I6P4MyZMw/68A//8O+65pprHsxVV1111VX3I7jqqquuuuqya6655sEf/uEf/l0AP/6RH8kdf/VX/FcRIECAAAECBAgQIECAAAECBAgQIECAuOp/IgECBAgQIECAAAECBAgQIECAAAECxP8MAgQIECBAwM0v8zLcT4D4zydAgAABAgQIECD+4wkQIECAAAECxH8cAQIECBAgQPwrSCCBBBJIIAEgQIAAAQLEfwwBAgQIECD+fQQIECBAgPj3ESBAgADx7yNAgAABAsSL7hl/9VcAvMlLvgkACBAgQID49xEgQIAA8W8nQIAAAeJFJoQQQgghBAIECBAg/u0ECBAg/u0ECBAgQPzbCRAgQID4txMgQID4txMgQIAA8W8nQIAA8W8nQIAAAeJFdvfu3XzBT3wB11xzzYM/53M+57euueaaB3PVVVdddRUAwVVXXXXVVZd9+Id/+He92Iu92Gv/6hd+IXf81V/xryFAgAABAgQIECBAgAABAgQIEFdd9a8jQIAAAQIECBAgQIAAAQIECBD/uW56mZcB4I+/8zu5nwABAgQIECBAgADxn0uAAAECBAgQIP7jCRAgQIAAAeI/jgABAgQIECBeRBJIIIEEEkgACBAgQIAAAeLfT4AAAQLEv58AAQIEiH8fAQIECBAg/n0ECBAgQDx/t/3VXwHwMre8DC+QAAECBIh/HwECBIh/HwECBIh/FSGEEEIIAAQIECD+7QQIECBA/NsJECBAgPi3EyBAgPi3EyBAgADxbydAgADxbydAgAAB4t9OgAAB4oX6xb/6Rb7jN7+Da6655sGf8zmf81tcddVVV10FQHDVVVdddRWf+7mf+1sv9mIv9tp//J3fyeN/6ZcQIECAAAECBAgQIECA+J9LgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsT/DgIECBAgQIAAAQIECBD/OjvXXQfA3j338K8lQIAAAQIECBAgQPznECBAgAABAgSI/1gCBAgQIECA+I8jQIAAAQLEi0gCCSSQQAKJ+wkQIECAAPHvI0CAAAECxL+PAAECBAgQ/z4CBAgQIP59BAgQIEDAbX/1VwBcf+x6XuaWl+FFJkCAAAHi306AAAECxL+dAAECBIgXmRBCCCGEEAgQIECA+LcTIECAAPFvJ0CAAPFvJ0CAAAHi306AAAHi306AAAECxL+dAAECxL+dAAECxPP4zt/8Tr7jN7+Da6655sEf/uEf/l1cddVVV11F5aqrrrrq/7kP//AP/64Xe7EXe+07/uqv+JPv+i7+u4ir/i8Q/7HMfz/xonnsm7wJAI/7pV/iP5P4l5n/WOKFM/8xxAtm/v3E82deBBLPw+Z+4vkz/3bi+TP/duJ5mX878bzMv52A2/7qr7jlZV6Gl3nQy/BXt/8VmH8b8bzMv414XubfRjwv8yIR4oGMQTwv828jnpP5txHPy/zbiOdk/m3E8zL/NuI5mX8b8ZzMv414Ht/5m98JwPu97vu9N8DXf/3Xvw9XXXXVVf9/EVx11VVX/T/2ju/4jp/1Oq/zOu99x1/9FT/xkR/Jv4cAAQIECBAgQIAAAQIECBAgQFx11fMnQIAAAQIECBAgQIAAAQIECBD/tR7zJm8CwJ1/9VcIECBAgAABAgSI/1wCBAgQIECAAPEfT4AAAQIECBD/cQQIECBAgADx7ydAgAABAgSIf4EEEkgggQQSDyRAgAAB4t9PgAABAsS/jwABAgQIEP92AgQIECD+dX7/O78TgJe55WW4TIAAAQLEv50AAQIEiH87AQIECBD/dgIECBAgXiRCCCGEEM8iQIAA8W8nQIAAAeLfToAAAeLfToAAAQLEv50AAQLEv50AAQLEv50AAQIEiH87wS/91S/xV0//K17ndV7nvd/xHd/xs7jqqquu+v+L4Kqrrrrq/6kXe7EXe+13eqd3+uy9e+7hJz7yI3kgAQIECBAgQIAAAQIECBD/8wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIP53ESBAgAABAgQIECBAgADxb3fTy7wMAI/7pV/iRSFAgAABAgQIECBA/OcQIECAAAECBIj/WAIECBAgQID4jyNAgAABAsR/DAECBAgQIP4FEkgggQQSDyRAgAABAsS/jwABAgQIEP8+AgQIECD+7QQIECBAvGCX7r4bgOuOXccLJECAAAHi306AAAECxL+dAAECBIh/OwECBIgXiRBCCCGEEAAIECBAgPi3EyBAgPi3EyBAgADxbydAgADxbydAgADxbydAgAAB4t9OgAAB4l/l7t27+YKf/ALu3r2bd3qnd/rsd3zHd/wsrrrqqqv+fyK46qqrrvp/6MVe7MVe+3M/93N/a++ee/jJj/gIBAgQIP57CRAgQIAAAQIECBAgQIAAAQIkIQlJSEISkpAEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIICEJAQIECBAgQIAAAQIECBAgQIAAAQIECBD/cwgQIECAAAECBAgQIJ7tsW/yJgA87pd+if9oAgQIECBAgADxn0OAAAECBAgQIP7jCBAgQIAAAeI/hgABAgQIEP8xBAgQIED8CySQQAIJJJ6bAAECBAgQ/z4CBAgQIP59BAgQIED82wkQIECAuOLSPfdw21/9Fdcfu56XueVleJEJECBAgPi3EyBAgADxbydAgADxbydAgAAB4kUihBBCCPEsAgQIEP92AgQIECD+7QQIECD+7QQIECD+7QQIECBA/NsJECBA/NsJECBA/Ivu3r2bD/+OD+fu3bt5ndd5nfd+sRd7sdfmqquuuur/H4Krrrrqqv9nrrnmmgd/7ud+7m8B/NoXfiF799zDfyQBAgQIECBAgAABAgRIQhKSkIQkkEACCSSQQAIJJJBAAgkkkEACiav+C0kggQQSSCCBBBJIIIEEEkgggQQSSCCBBBIAAgQIECBAgAABAgQIECBAgADx30OAgJte5mUAuPOv/goBAgQIECD+8wgQIECAAAECBIj/eAIECBAgQID4jyNAgAABAsR/DAECBAgQIP79BAgQIECAeCEkkEACCSSeHwECBAgQ/z4CBAgQIP59BAgQIED82wkQcNtf/RUA7/vq78u/iwABAsS/jwABAsS/nQABAgSIfzsBAgSIF4kQQgghxLMIECBAgPi3EyBAgPi3EyBAgPi3EyBAgADxbydAgADxbydAgADxbydAgADxfN2zew8f8R0fwTXXXPPgD//wD/+uF3uxF3ttrrrqqqv+fyG46qqrrvp/5JprrnnwN33TNz0d4Cc+8iO586/+ihdEgAABAgQIECBAgCQkIQlJSAIJJJBAAgkkkEACCSSQ+O8mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLEfxMJJJBAAgkkkEACCSSQQAIJJJC4nwABAgQIECBAgAABAgSI/zg3vszLAHDnX/0VL4gAAQIECBAgQID4zyNAgAABAgQIEP+xBAgQIECAAPEfQ4AAAQIECBD/fgIECBAgQPz7CRAgQIAA8QJIIIEEEkg8PwIECBAg/n0ECBAgQID4txMgQIAA8a/z97/4iwBcf+x6ECBAgADxbydAgAAB4t9OgAABAsS/nQABAsS/nQABAgSIf5EQQgghxHMQIECA+LcTIECAAPFvI0CAAAHi306AAAHi306AAAHi306AAAHi306AAAECxGV3797N23/F23PNNdc8+MM//MO/65prrnkwV1111VX/fxBcddVVV/0/8uEf/uHfBfCTH/mR3PVXf4UAAQIkIQlJSAIJJJBAAgkkkEACif9sAgQIECBAgAABAgQIECBAgAABAgQIECBAgABx1QsiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEiP8kEkgggQQSSCCBBBJIIIHEAwkQIECAAAECBAgQIEA8f495kzdh57rrANi75x7+PQQIECBAgAABAsR/DgECBAgQIED8xxIgQIAAAQLEfwwBAgQIECD+/QQIECBAgPj3EyBAgADxAkgggQQSSDw/AgQIECBA/PsIECBAgPi3EyBAgADxgl265x5u+6u/4rpj1/Eyt7wMz0OAAAECxL+dAAECBIh/OwECBAgQ/zYCBAgQIP7tBAgQIP5FQgghhBDPQYAAAQLEv50AAQLEv50AAQLEv50AAQLEv50AAQLEv50AAQIEiH87AYK7L93NF/zUF3DNNdc8+HM/93N/m6uuuuqq/z8Irrrqqqv+n/jcz/3c33qxF3ux1/6T7/ou7vzrvwYJJJBA4j+aAAECBAgQIECAAAECBAgQIECAuOr/IgECBAgQIECAAAECBAgQIECAAPEfQAIJJJBAAgkkkEACCSSemwABAgQIuOllXgaAx//SLyFA/OcSIECAAAECBIj/eAIECBAgQIAA8R9HgAABAgSI/xgCBAgQIED8+wkQIECAAPHvI0CAAAECxPMhgQQSSCDxgggQIECA+PcRIECAAPFvJ0CAAAHi2W77q78C4GVufhleJAIECBAg/u0ECBAgQPzbCRAgQPzbCRAgQID4txEgQIAA8UIJIYQQQjwPAQIEiH87AQIEiH87AQIEiH87AQIECBD/NgIECBAg/u0ECBAg/k1+8a9+ke/4re/gzJkzD/qmb/qmp3PVVVdd9f8DwVVXXXXV/wOf+7mf+1sv9mIv9tqP/6Vf4k+/67v41xAgQIAAAQIECBAgQIAAAeL/HwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIj/3wQIECBAgAABAgQIECBAgPg3kkACCSSQQAIJJJC48WVeBoDH/9IvcT8BAgQIECBAgADxn0eAAAECBAgQIP7jCRAgQIAAAeI/hgABAgQIECD+/QQIECBAgPj3EyBAgADx7ydAgAAB4vmQQAIJJJB4QQQIECBA/PsIECBAgPi3EyDg9r/6KwDe5CXehH8zAQIECBD/dgIECBD/dgIECBAg/u0ECBAg/u0ECBAgXighhBBCiOchQIAAAeLfRoAAAQLEv40AAQIEiH87AQIEiH87AQIEiH87AQIEiBfZd/7Wd/Idv/UdXHPNNQ/+8A//8O/iqquuuur/PipXXXXVVf/HffiHf/h3vdiLvdhr3/lXf8Wvf9EXIf7vEP9/if85zP8O4kVnXnQ7110HwJ1//dcg8QLZPJD4l5n/eOKFM/9xxPNn/mOI58/8+4jnz/zbiefP/NuJ52Wei8RzsHlBxPMy/3bieZkX3d7ddwNw/bHreZlbXoa/uv2veA7m30Y8J/NvI56X+bcRz8n824jnZP5txPMyz5cQz82Y5yCek/m3Ec/J/NuI52T+bcRzMv824jmZfxvxnMwL9It/9Ytcf/x63vR13vS977vvvlt/9Ed/9HO46qqrrvq/i3L8+HGuuuqqq/6vep3XeZ33fqd3eqfPvvOv/oqf+qiPQvz3EyBAgAABAgQIECBAgAABAgQIECBAXPU/hQABAgQIECBAgAABAgQIECBAgADxP4sAAQIECBAgQIAAAY95kzfhoa/xGjz+l36Jp/3+7/NCSSCBBBJIIIEEEs+PAAECBAgQIECA+I8nQIAAAQIEiP84AgQIECBAgPiPIUCAAAECxL+fAAECBAgQ/z4CBAgQIP59BAgQIECAeAAJJJBAAokXRoAAAQLEv48AAQLEC7c+OODml3kZjl1/Pffs3cNf3f5XPAcBAgSIfzsBAgQIEP92AgQIEP92AgQIECD+bQQIECBA/NsJECBAvFBCCCGEEM9DgAAB4t9OgAAB4t9OgAAB4t9OgAAB4t9OgAAB4t9OgAAB4jkcrA54yj1P4RHXPYLXf/XXf22Af/iHf/gdrrrqqqv+byK46qqrrvo/6sVe7MVe+8M//MO/a++ee/ipj/oo/iMJECBAgAABAgQIECBAgAAB4qqrXjABAgQIECBAgAABAgQIECBA/Pe58aVfGoA7//qvESBAgAABAsSLSAIJJJBAAgkkkHhBBAgQIECAAAHiP5YAAQIECBAg/uMIECBAgADxH0OAAAECBIh/PwECBAgQ/z4CBAgQIED8+wgQIECAeAAJJJBAAokXRoAAAQLEv50AAQIEiOf097/4iwC8zM0vw79IgAABAsS/nQABAgSIfxsBAgQIEP92AgQIEP92AgQIEP92AgQIEC+UEEIIIcTzECBAgPi3EyBAgPi3EyBAgPi3EyBAgPi3EyBAgPi3EyBAgODu3bv5gp/6Au7evZvXeZ3Xee93eqd3+myuuuqqq/5vIrjqqquu+j/oxV7sxV77cz/3c39r7557+I0v/EJeGAECBAgQIECAAAECBAgQ/7MJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECD+dxEgQIAAAQIECBAgQID4j/OYN3kTAO78q7/ihREgQIAAAQIECBAvAgkkkEACCSSQeGEECBAgQIAA8R9LgAABAgQIEP8xBAgQIECA+I8hQIAAAeLfT4AAAQLEv58AAQIEiH8fAQIECBAPIIEEEkj8SwQIECBA/NsJECDg9r/6KwCuO3Yd/yYCBAgQIP7tBAgQIP7tBAgQIP7tBAgQIED82wgQIECA+LcRIECAAPECCSGEEM+XAAECBIh/GwECBAgQ/zYCBAgQIP5tBAgQIP7tBAgQIP7tBHdfupuP+K6PoPXtwa/zOq/z3i/2Yi/22lx11VVX/d9DcNVVV131f8w111zz4M/93M/9LYDf/MIv5K6//msECBAgQIAA8d9PgAABAgQIECBAgAABAgQIECBAgAAB4qr/SAIECBAgQIAAAQIECBAgQIAAAQIECBAg/ucQIECAAAECBAgQIEC8YI9+kzcB4PG/9Evs33MP/14CBAgQIECAAAHihZBAAgkkkEACiRdGgAABAgQIEP+xBAgQIECA+I8hQIAAAQLEv58AAQIECBD/PgIECBAgQPz7CBAgQID49xEgQIAA8UwSSCCBBBL/EgECBAgQ/3p799zD7X/1V1x/7Hpe5paXAQECxL+dAAECxL+dAAECBIh/GwECBAgQ/3YCBAgQ/3YCBAgQ/3YCBAgQz5cQQgghxAskQIAA8W8nQIAA8W8nQIAA8W8jQIAAAeLfRoAAAQLEv8rdu3fzEd/1EZw5c+ZBH/7hH/5d11xzzYO56qqrrvq/heCqq6666v+Qa6655sGf8zmf81sAP/2RH8mdf/3X/GcTIECAAAECBAgQIECAAAECBIir/r8RIECAAAECBAgQIECAAAECxH8fAQIECBAg4KaXfmkA9u+5B/FfQ4AAAQIECBAgXgAJJJBAAgkkkHhhBAgQIECAAPEfR4AAAQIEiP8YAgQIECBA/PsJECBAgPj3EyBAgADx7yNAgAAB4t9HgAAB4gEkkEACiReFAAECxIvmtr/6KwDe5MXfhOcgQIAA8W8nQIAAAeLfToAAAeLfToAAAeLfToAAAeLfToAAAeLfToAAAeL5EkIIIYR4gQQIECD+7QQIECD+7QQIECD+7QQIECD+7QQIECD+RXfv3s0X/NQXcM011zz4cz7nc37rmmuueTBXXXXVVf93EFx11VVX/R/y4R/+4d91zTXXPPg3vuiLuPOv/5p/LQECBAgQIECAAAECBAgQ/zsJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB4n83AQIECBAgQIAAAQIECBD/uW58mZcB4Am/9EsACBAgQIAAAQIEiP98AgQIECBAgHgBJJBAAgkkkPiXCBAgQIAAAeI/hgABAgQIECD+/QQIECBAgPj3ESBAgAAB4t9HgAABAsS/jwABAgSIfzsBAgQIEM8kgQQSSLwoBAgQIEA8r3/4xV8E4GVufhleKAECBAgQ/3YCBAgQ/3YCBAgQ/3YCBAgQIP5tBAgQIED82wgQIED82wkQIEA8X0IIIYQQL5AAAQLEv50AAQLEv50AAQLEv50AAQLEv50AAQLE8/WLf/2LfMFPfQHXXHPNgz/ncz7nt7jqqquu+r+D4Kqrrrrq/4jP/dzP/a0Xe7EXe+0//a7v4gm/9EvcT4AAAQIECBAgQIAA8T+DAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA+P9NgAABAgQIECBAgAABAgQIECBAgAABAgQIECD+5xEgQIAAAQIECBAgQPzrbF93HdvXXQfA/j338KISIECAAAECBAgQ/3kECBAgQIAA8XxIIIEEEkgggcS/RIAAAQIEiP84AgQIECD+YwgQIECA+PcTIECAAPHvI0CAAAHi30eAAAECxL+dAAECBAhAAgkkkHhRCRAgQMDePfdw6e67uf7Y9bzMzS/Dv4oAAQLEv50AAQIEiH8bAQIECBD/dgIECBD/dgIECBD/NgIECBAg/m0ECBAgni8hhBBCiBdIgAAB4t9OgAAB4t9OgAAB4t9OgAAB4t9OgAAB4ll+8a9/ke/4re/gmmuuefDnfu7n/hZXXXXVVf83EFx11VVX/R/wuZ/7ub/1Yi/2Yq9951/9FX/+Xd+FAAHiv54AAQIECBAgQIAAAQIECBAgQFz1v50AAQIECBAgQIAAAQIECBAgQPz3EiBAgAABAgQIECCuuPFlXgaAJ/zSL/EfTYAAAQIECBAg/nMIECBAgAAB4vmQQAIJJJBA4l8iQIAAAQIEiH8/AQIECBAg/v0ECBAgQID49xEgQIAA8e8jQIAAAeLfR4AAAQLEv50AAQIESAIJJJBA4kV1+1/9FQAvc8vLgPi3EyBAgADxbydAgADxbydAgADxbydAgADxbydAgADxbydAgADxbyNAgAAB4nkIIYQQQrxAAgQIECD+bQQIECD+7QQIECD+7QQIECD+7QQIEHzn73wn3/Fb38GLvdiLvfaHf/iHfxdXXXXVVf/7EVx11VVX/S/3ju/4jp/1Yi/2Yq9951/9FT/zUR/FfxQBAgQIECBAgAABAgQIECD+7xMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA8f+LAAECBAgQIECAAAECBIj/egIe/cZvDMBdf/3XCBAgQIAA8Z9HgAABAgQIEP85BAgQIECAAPFcJJBAAgkkXlQCBAgQIED8+wkQIECAAPHvJ0CAAAHi30eAAAECxL+PAAECBIh/HwECBIh/HwECBAhAAgkkkHhB/uGXfgmAl7n5ZQBAgAABAsS/nQABAsS/nQABAsS/nQABAgSIfxsBAgSIfzsBAgSIfzsBAgSIfzsBAgSI5yGEEEII8UIJECBA/NsIECBA/NsJECBA/NsJECBA/Jv90t/8En9161/xOq/zOu/9ju/4jp/FVVddddX/bgRXXXXVVf+LvdiLvdhrv9M7vdNn3/lXf8XPfNRH8cIIECBAgAABAgQIECBA/M8kQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg/nsIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSI/9kECBAgQIAAAQIECBAg/mPc+DIvA8ATfumXeEEECBAgQIAAAeI/hwABAgQIECBA/McTIECAAAHiASSQQAIJJJB4UQkQIECAAPHvJ0CAAAHi30+AAAECxL+PAAECBIh/HwECBAgQ/3YCBAgQIP7tBAgQIEASSCCBxP0u3X03ANftXMcLJECAAPFvJ0CAAAHi30aAAAECxL+dAAECxL+NAAECBIh/GwECBIh/OwECBIh/OwECBIjnIYQQQgjxQgkQIED82wgQIED82wkQIED82wkQIEC8yO7evZsv+Okv4C9v/Uve6Z3e6bPf8R3f8bO46qqrrvrfi+Cqq6666n+pF3uxF3vtz/3cz/2t/Xvu4Wc/6qMQIECAAAECBIj/PgIECBAgQIAAAQIECBAgQIAAAQIEiKv+OwkQIECAAAECBAgQIECAAAECBAgQ/zMIECBAgAABAgQIEC/Yo9/kTQB4wi/9Ev8eAgQIECBAgADxn0OAAAECBAgQ/7EECBAgQIAA8UwSSCCBBBL/GgIECBAg/v0ECBAgQID49xEgQIAAAeLfToAAAQLEv48AAQIEiH87AQIECBD/dgIECJCEJPbuvZfb/+qvuP7Y9bzMzS/Di0SAAAECxL+dAAECxL+dAAECxL+dAAECxL+dAAECxL+NAAECBIh/GwECBIh/OwECBIjnIYQQQvyLBAgQIP5tBAgQIP7tBAgQIP7tBAgQIF6ou3fv5gt++gu4e/duXud1Xue9X+zFXuy1ueqqq67634ngqquuuup/oRd7sRd77c/93M/9LYDf/MIv5L+CAAECBAgQIECAAAECBAgQV131nAQIECBAgAABAgQIECBAgPjvIUCAAAECBNz40i8NwF1//deI/zwCBAgQIECAAPEfT4AAAQIEiP94AgQIECBAABJIIIEEEki8qAQIECBAgPj3EyBAgADx7ydAgAAB4t9OgAABAsS/jwABAgSIfzsBAgSIfx8B//BLvwTA+73q+yGEEP9qAgQIEP92AgQIEP92AgQIEP92AgQIEP92AgQIEP92AgQIEP82AgQIEP92AgQIEM9BCCGEEOJfJECAAPFvI0CAAPFvJ0CAAPFvJ0CAAPE87tm9h4/47o/gmmuuefCHf/iHf9eLvdiLvTZXXXXVVf/7EFx11VVX/S9zzTXXPPhzP/dzfwvgZz7yI7nrr/+afwsBAgQIECBAgAABAgSI/x0ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEiP+dBAgQIECAAAECBAgQIP5z3fAyLwPAXX/1VwAIECBAgAABAsR/HgECBAgQIED8xxIgQIAAAQLEfywBAgQIECAACSSQQAKJfw0BAgQIECD+fQQIECBA/PsJECBAgPi3EyBAgADx7yNAgADxbydAgAAB4l/n9r/6KwCuO3YdCBBIQhJCCPGvJkCAAAHi30aAAAECxL+NAAECBIh/GwECBIh/OwECBIh/OwECBIh/GwECBIh/OwECBIjnIIQQQgjxLxIgQID4txEgQID4txMgQID4txMgQIC47O7du3n7r357rrnmmgd/+Id/+Hddc801D+aqq6666n8Xgquuuuqq/2U+/MM//LsAfuYjP5K7/vqveSABAgQIECBAgAABAsR/PwECBAgQIECAAAECBAgQIECAAAECBAgQ/4kkkEACCSSQQAIJJJBAAgkkkEACCSSQQAIJJJBAAon/agIECBAgQIAAAQIECBAgQIAAAQIE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mgd/0zd909MBfu6jPoq7//qvESBAgAABAsR/PQECBAgQIECAAAECBAgQIEBc9X+JAAECBAgQIECAAAECBAgQIP57CRAgQIAAAQIEiOcigcT1L/MyANz9138NEkj8WwkQIECAAAHiP54AAQIECBAg/uMIECBAgADxH0OAAAECxL+fAAECBAgQ/36SkIQkJCGJfw8BAgQIEP92AgQIECD+7QQIECBA/NsJECBA/Ovc/ld/BcCbvNibgAABAsS/nQABAsS/mhBCSEISCBD/dgIECBD/NgIECBD/dgIECBD/NgIECBD/dgIECBD/NgIECBD/NgIECBD/dgIECBAIIYQQQrzIBAgQIP7tBAgQIF4kd+/ezYd/z4dzzTXXPPhzPudzfuuaa655MFddddVV/7MQXHXVVVf9D/PhH/7h3wXwcx/1Udz913/NfzYBAgQIECBAgAABAgSI//sECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA8f+HAAECBAgQIECAAAECxH89AQIECBBww0u/NAB3//VfI55JAgkkkEACCSSQ+LcQIECAAAECxH88AQIECBAg/uMIECBAgADx7ydAgAABAsS/nwABAgSIfz9JSEISkhD/PgIECBD/PgIECBD/PgIECBD/dgIECBAv3ON+6ZcAeJmbXobnIUCAAPFvJ0CAAPGvJoQQkkCAAPFvJ0CAAPFvI0CAAPFvJ0CAAPFvI0CAAPFvJ0CA+LcTIECA+LcRIECA+LcTIEBcJoQQQvyrCBAgQPzbCRAgXqi/esZf8QU/8wVcc801D/6cz/mc3+Kqq6666n8Wgquuuuqq/0E+93M/97de7MVe7LX/4ru+i7v/+q/5txIgQIAAAQIECBAgQPzPJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIj/XgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQPzPJ0CAAAECBAgQIECA+M+xfd11bF93HQD799wDgAABAgQIECBAPJMEEkgggQQS/1YCBAgQIECA+I8lQIAAAQLEfxwBAgQIEP8xBAgQIED8+wkQIECA+HeSkIQkJCFA/NsJECBAgPi3EyBAgADxbydAgADxbydAgAAB4tn27rmHO/7qr7hu5zpe5qaX4YUSIECAAPFvI0CAAAHiRSaEEEJIAgEC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ddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9X8Y97+34M3zcLUQAAAABJRU5ErkJggg==) @@ -123,11 +133,7 @@ exampleSketch = startSketchOn('XZ') example = extrude(exampleSketch, length = 1) |> appearance(color = '#ff0000', metalness = 90, roughness = 90) - |> patternLinear3d({ - axis = [1, 0, 1], - instances = 7, - distance = 6 - }, %) + |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6) ``` ![Rendered example of appearance 5](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAACjJ0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVf9r3TNNdc8+LVf+7Xf68Vf/MVf++///u9/G+BHf/RHP4errrrqqquuejb0oAc9iKuuuuqqq6666qqrrrrqqqv+d7jmmmse/Nqv/drv9eIv/uKv/WIv9mKvvX/PPTzxF3+RG17mZbjhZV6G++6779bP+qzPep377rvvVq666qqrrroK0IMe9CCuuuqqq6666qqrrrrqqquu+p/rmmuuefBrv/Zrv9frvM7rvPc111zz4P177uGJv/iL7N9zD0/6pV/ifi/3Pu/Dy7/v+3Lffffd+lu/9Vvf/aM/+qOfw1VXXXXVVf/foQc96EFcddVVV1111VVXXXXVVVdd9T/LNddc8+DXfu3Xfq/XeZ3Xee9rrrnmwfv33MMTf/EXObjnHp74S7/EC3LDy7wMb/G1XwvA13/917/Pb/3Wb303V1111VVX/X+GHvSgB3HVVVddddVVV1111VVXXXXVf79rrrnmwa/92q/9Xq/zOq/z3tdcc82D9++5hyf+4i9y91//NXf91V/xgmxfdx2PfJM34VFv+qZsX3cd97vvvvtu/ZAP+ZCHcNVVV1111f9nVK666qqrrrrqqquuuuqqq676b3PNNdc8+LVf+7Xf63Ve53Xe+5prrnnw/j338MSf/3n+5K//mrv+6q94Qbavu45Hvcmb8Mg3fVO2r7uO+x3dcw/P+OVf5jHv/d5cddVVV111FUDlqquuuuqqq6666qqrrrrqqv9S11xzzYNf+7Vf+71e53Ve572vueaaB+/fcw9P/Pmf50/++q+566/+iudHwPZ11/HIN3kTHvmmb8r2dddxv6N77uEZv/zLnPvrv+bcX/81p1/6pQE4e/bsrVx11VVXXfX/HZWrrrrqqquuuuqqq6666qqr/tNdc801D37t137t93qnd3qnzwbYv+cenvjzP8+f/PVfc9df/RUPJJ5t+7rreOSbvAkv977vywMd3XMPz/jlX+bcX/815/76r3mgjeuuA+C+++67lauuuuqqq/6/o3LVVVddddVVV1111VVXXXXVf4prrrnmwa/92q/9Xu/0Tu/02QD799zDn3/nd3L3X/81d/3VXwEgQDyn7euu45Fv8ia83Pu+Lw90dM89POOXf5lzf/3XnPvrv+YF2bjuOgDuu+++W7nqqquuuur/OypXXXXVVVddddVVV1111VVX/Ye55pprHvzar/3a7/VO7/ROnw2wf889/Pl3fidP+qVf4uCee7ifeE7b113HI9/kTXi5931fHujonnu47Zd/mXN//dec/eu/5kWxed11AJw9e/YZXHXVVVdd9f8dlauuuuqqq6666qqrrrrqqqv+Xa655poHv/Zrv/Z7vdM7vdNnA+zfcw9//p3fyZN/6ZfYv+ceXpDrX+ZluOGlX5qXe9/35YGO7rmH2375l7ntl3+Zo3vu4V9r47rruOqqq6666qpnonLVVVddddVVV1111VVXXXXVv9qLvdiLvfaLvdiLvdY7vdM7fTbA/j338Bff+Z086Zd+if177uEFuf5lXoYbXvqlebn3fV8e6Oiee7jtl3+Z2375lzm65x6em3nRbVx3HQD/8A//8NtcddVVV131/x2Vq6666qqrrrrqqquuuuqqq14kL/ZiL/baL/ZiL/Za7/RO7/TZAPv33MNffOd38qRf+iX277mH52f7uut45Ju8CQAv977vywMd3XMPt/3yL3PbL/8yR/fcw3+UjeuuA+C+++67lauuuuqqq/6/o3LVVVddddVVV1111VVXXXXV83XNNdc8+LVf+7XfC+Cd3umdPhtg/557+Ivv/E7+4ru+ixdk+7rreOSbvAnb11/PI9/kTXigo3vu4bZf/mVu++Vf5uiee3hRmKuuuuqqq676N6Ny1VVXXXXVVVddddVVV1111bNcc801D37t137t97rmmmse/Dqv8zrvDbB/zz38xXd+J3/xXd/F8yNg+7rreMSbvAnb11/PI9/kTXigo3vu4bZf/mWe8N3fzX+20y/90gD8wz/8w29z1VVXXXXVVUDlqquuuuqqq6666qqrrrrq/7lrrrnmwa/92q/9Xtdcc82DX+d1Xue9AfbvuYe/+M7v5C++67t4IPFs29ddxyPe5E244WVehutf5mV4oKN77uG2X/5lnvDd382/h/nX2bjuOgDuu+++W7nqqquuuuoqoHLVVVddddVVV1111VVXXfX/0DXXXPPg137t136vF3/xF3/tF3uxF3ttgP177uEvvvM7+Yvv+i4ABIjntH3ddTziTd6EG17mZbj+ZV6GBzq65x5u++Vf5onf/d1cddVVV1111f8QVK666qqrrrrqqquuuuqqq/4feZ3XeZ33fp3XeZ33erEXe7HXBrjrr/6Kv/jO7+Qvvuu7EFeI57R93XU84k3ehBte5mW4/mVehgc699d/zbm//mue+N3fzXMz/z7mX+/MS780AP/wD//wO1x11VVXXXUVULnqqquuuuqqq6666qqrrvp/4sVe7MVe+3Ve53Xe68Ve7MVe+0m/9Ev8zhd+IfcTz2n7uut4xJu8CTe8zMtw/cu8DA907q//mnN//dc88bu/m6uuuuqqq676H47KVVddddVVV1111VVXXXXV/xPXXHPNg1/sxV7stQGuf5mXYfu669i/5x7ut33ddTziTd6ER77pm7J93XXc7+ieezi65x7O/fVf88Tv/m5eFObfx/zbnH7plwbgH/7hH36bq6666qqrrgIqV1111VVXXXXVVVddddVV/0+cOXPmQQf33MPB3Xdz3cu8DG/2dV/H73zhF3L9S780j3zTN2X7uuu439E993DbL/8yy3vu4bZf/mWuuuqqq6666n8pKlddddVVV1111VVXXXXVVf9PXHPNNQ++96/+ir/5ru/iYW/yJrzU+7wPb/61X8v9ju65h9t/+Zc5uucebvvlX+bfyvz7mH+7jeuuA+C+++67lauuuuqqq64CKlddddVVV1111VVXXXXVVf/PHNxzD0/9pV/iYW/yJmxddx1P/O7v5txf/zXn//qvMf97bVx3HQD33XffrVx11VVXXXXVFQRXXXXVVVddddVVV1111VX/T7zYi73Yax/ccw8AB/fcw9Z11wFw+y//Muf/+q/5j2D+fcy/3emXfmkA/uEf/uG3ueqqq6666qorqFx11VVXXXXVVVddddVVV/0/cnDPPQAgcb+je+4BwFx11VVXXXXV/zkEV1111VVXXXXVVVddddVV/09cc801D+aZtq67DoCje+4BwPz7mX8f8++zcd11ANx33323ctVVV1111VVXULnqqquuuuqqq6666qqrrvp/5N6/+isANq+7DoCje+7h/4qN664D4OzZs8/gqquuuuqqq66gctVVV1111VVXXXXVVVdd9f/ANddc82AeYOu66wBY3nMP5t/P/PuYfx8DG9ddB8B99913K1ddddVVV111BZWrrrrqqquuuuqqq6666qr/B86cOfNggIN77uH/qs3rrgPg7Nmzt3LVVVddddVVV1C56qqrrrrqqquuuuqqq676f+Caa655MA+wdd11ABzecw//Xubfx/z7mCs2rrsOgPvuu+9WrrrqqquuuuoKKlddddVVV1111VVXXXXVVf9PHNxzD5dJbF1/PQDLe+7h38P8z7Bx3XUA3Hfffbdy1VVXXXXVVc9G5aqrrrrqqquuuuqqq6666v+BF3uxF3utg7vv5n8a8+9jrti47joAzp49eytXXXXVVVdd9WxUrrrqqquuuuqqq6666qqr/p84vOce7nftS780AOf++q/5tzL/c2xedx0A9913361cddVVV1111bMRXHXVVVddddVVV1111VVX/T9wzTXXPJj/Ycy/j3m2jeuuA+C+++67lauuuuqqq656NoKrrrrqqquuuuqqq6666qr/B86cOfPgg3vu4X5b110HwNE99/BvYf5n2bjuOgDOnj37DK666qqrrrrq2ahcddVVV1111VVXXXXVVVf9P3Fwzz38T2H+fcxz2rjuOq666qqrrrrq+SC46qqrrrrqqquuuuqqq676f+Caa655MAASW9ddB8DRPffwb2H+59m87joA/uEf/uG3ueqqq6666qpno3LVVVddddVVV1111VVXXfX/xL1/9VcAbF53HQBH99zDfwfz72Oe18Z11wFw33333cpVV1111VVXPRuVq6666qqrrrrqqquuuuqq/+Ne7MVe7LV5gK3rrgPg6J57+Ncy/73MVVddddVVV/2rEFx11VVXXXXVVVddddVVV/0fd8011zwY4OCee/jvZv7jnX7plwbgH/7hH36bq6666qqrrnpOVK666qqrrrrqqquuuuqqq/6fue5lXgaAo3vu4V/D/PuYfx/z/G1edx0A9913361cddVVV1111XOictVVV1111VVXXXXVVVdd9X/cmTNnHnRwzz08t+U99/CiMlddddVVV131vxKVq6666qqrrrrqqquuuuqq/+OuueaaBx/cfTdIAGxedx0AR/fcw38V8+9jXrDTL/3SAPzDP/zD73DVVVddddVVz4nKVVddddVVV1111VVXXXXV/wOH99zD/bauuw6Ao3vu4UVhrrrqqquuuup/LYKrrrrqqquuuuqqq6666qr/46655poHH9xzD/9dzL+PeeHOvPRLA/AP//APv81VV1111VVXPSeCq6666qqrrrrqqquuuuqq/+POnDnz4IN77uF+W9ddB8DRPffwLzFXXXXVVVdd9b8alauuuuqqq6666qqrrrrqqv9Htq67DoCje+7hv4L59zH/so3rrgPgvvvuu5Wrrrrqqquuek4EV1111VVXXXXVVVddddVV/8ddc801Dz645x4ANq+7DoCje+7hX2L+59u47joA7rvvvlu56qqrrrrqqudF5aqrrrrqqquuuuqqq6666v+wa6655sEAh/fcA8DWddcBcHTPPfxnM/8+5l925qVfGoB/+Id/+G2uuuqqq6666nlRueqqq6666qqrrrrqqquu+j/szJkzD+bfwFx11VVXXXXV/wlUrrrqqquuuuqqq6666qqr/g+75pprHgxwcM89AGxddx0AR/fcw38m8+9jXjQb110HwH333XcrV1111VVXXfW8qFx11VVXXXXVVVddddVVV/0fd3DPPdxv6/rrAVjecw8viPnfY+O66wA4e/bsM7jqqquuuuqq50Xlqquuuuqqq6666qqrrrrq/7iDu+/mRWX+/cy/j3nRbVx3HQD33XffrVx11VVXXXXV8yK46qqrrrrqqquuuuqqq676P+wf/uEffvu6l3kZXuq93xuAzeuuA+Donnv4v2DzuusAOHv27K1cddVVV1111fOictVVV1111VVXXXXVVVdd9X/Yfffdd+uP/MiPfPabvcmbfDbA1nXXAXB0zz08N/PvZ/59zL/OxnXXAXDffffdylVXXXXVVVc9LypXXXXVVVddddVVV1111VX/x/3oj/7o5wC82Zu8yWdvXXcdAEf33MP/dhvXXcdVV1111VVX/QsIrrrqqquuuuqqq6666qqr/h/47d/+7e95xvnzv80zvcwnfzKnX/qluZ/59zP/PuZfZ+O66wD4h3/4h9/mqquuuuqqq54/yvHjx7nqqquuuuqqq6666qqrrvq/7vDwcPcf/uEffufw8HD3xV/8xV/72MMfzi1v/Mbc8sZvzLGHP5zx4ICje+7h38r81zvz0i/NDa/+6vzDP/zDb//pn/7pz3DVVVddddVVz4ty/Phxrrrqqquuuuqqq6666qqr/j84PDzc/Yd/+Iff+e3f/u3vOTw83JXEjQ996IOPPfzh3PLGb8wtb/zGHHv4wxkPDji65x7+K5l/vRte/dU589IvzZ/+6Z/+9D/8wz/8DlddddVVV131vCjHjx/nqquuuuqqq6666qqrrrrq/5PDw8Pdf/iHf/id3/qt3/qe3/7t3/6ew8PD3WuuuebBx6+99vixhz+cW974jbnljd+YbmsLgKN77uGFMf89HvTGb8zxhz+c3/7t3/6eW2+99a+56qqrrrrqqudFOX78OFddddVVV1111VVXXXXVVf9fHR4e7v7DP/zD7/zCL/zC1/z2b//29xweHu5ec801Dz5+7bXHT7/0S3PLG78xt7zxG9NtbQFwdM89/Ecz/zY3vPqrc/zhD+dP//RPf+bWW2/9a6666qqrrrrqeaEHPehBXHXVVVddddVVV1111VVXXfWcrrnmmge/4zu+42e9zuu8znvzAEf33MNtv/zLnPvrv+bcX/815t/P/Nu88Q//MBvXXceHfMiHPOS+++67lauuuuqqq656XuhBD3oQV1111VVXXXXVVVddddVVVz1/11xzzYPPnDnz4Nd5ndd5r9d5ndd5bx7g6J57eMYv/zK3/fIvc3TPPfxbmH+7t/3t3wbg7d7u7cRVV1111VVXPX/oQQ96EFddddVVV1111VVXXXXVVVf9y6655poHv9iLvdhrv9iLvdhrvc7rvM578wBH99zDM375l3nCd383/xrm3+5tf/u3AXi7t3s7cdVVV1111VXPH3rQgx7EVVddddVVV1111VVXXXXVVf8611xzzYNf7MVe7LVf7MVe7LVe53Ve5715pqN77uHonnt4xi//Mrf98i/zwph/u9Mv/dK85ld/Nf/wD//w25/5mZ/5Olx11VVXXXXV80c5fvw4V1111VVXXXXVVVddddVVV/3rHB4e7t56661//ad/+qc/89u//dvfc+utt/7N4eHh7iNf4iVeeuO667jh1V+dB73xG3P84Q+n29ri0lOewn+kMy/90tzw6q/OP/zDP/z2n/7pn/4MV1111VVXXfX8UY4fP85VV1111VVXXXXVVVddddVV/3aHh4e7t95661//6Z/+6c/89m//9vfceuutf7O5uXn8xoc+9MHHHv5wbnj1V+dBb/zGHH/4w+m2trj0lKdg/n2OPfzh3PDqr86tt97613/6p3/6M1x11VVXXXXV84ce9KAHcdVVV1111VVXXXXVVVddddV/vGuuuebBL/ZiL/bar/M6r/NeL/ZiL/baPNPRPfdw9q//mnN//dc845d/mX+Ll/vkT+ZBb/zGfP3Xf/37/NZv/dZ3c9VVV1111VXPH5Wrrrrqqquuuuqqq6666qqr/lPcd999t953333f/Vu/9Vvffc011zz4xV7sxV77dV7ndd7rxV7sxV77QW/8xjzojd+Yx7z3e3P2r/+aZ/zyL3Pur/+aF4W56qqrrrrqqhcZetCDHsRVV1111VVXXXXVVVddddVV/3WuueaaB7/2a7/2e734i7/4a7/Yi73Ya/NMR/fcw9m//mue8cu/zLm//mteEANv8sM/zMZ11/EhH/IhD7nvvvtu5aqrrrrqqqueP/SgBz2Iq6666qqrrrrqqquuuuqqq/57XHPNNQ9+7dd+7fd68Rd/8dd+sRd7sdfmmY7uuYezf/3XPOOXf5lzf/3X3M9c8SY//MNsXHcdH/IhH/KQ++6771auuuqqq6666vlDD3rQg7jqqquuuuqqq6666qqrrrrqv98111zz4Nd+7dd+rxd/8Rd/7Rd7sRd7bZ7p6J57OPvXf80zfvmXOfvXfw3A2/32bwPwdm/3duKqq6666qqrXjD0oAc9iKuuuuqqq6666qqrrrrqqqv+Z7nmmmse/Nqv/drv9Tqv8zrvfc011zyYZzq65x7O/vVf86A3fmPuu+++Wz/kQz7kIVx11VVXXXXVC0Y5fvw4V1111VVXXXXVVVddddVV/x2uueaaB7/Zm73ZR33u537ub19zzTUPfvCDH/zS//AP//A7XMXh4eHuP/zDP/zOL/zCL3zNb//2b3/P4eHh7jXXXPPg49dee/z4wx8OwJ/+6Z/+9J/+6Z/+DFddddVVV131gqEHPehBXHXVVVddddVVV1111VVX/Ve45pprHnzmzJkHv9iLvdhrvdM7vdNnA+zfcw9P+sVf5JFv+qZsX3cdP/IjP/LZP/qjP/o5XPV8XXPNNQ9+x3d8x8/6h3/4h9/5rd/6re/mqquuuuqqq1449KAHPYirrrrqqquuuuqqq6666qr/LNdcc82DX/u1X/u9rrnmmge/zuu8znsD7N9zD0/6xV/k7r/+a+75q78C4BFv8ia81qd+Kvfdd9+tX//1X/8+//AP//DbXHXVVVddddVV/17oQQ96EFddddVVV1111VVXXXXVVf+Rrrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GsD7N9zD0/+xV/kSb/0Sxzccw/Pz8u+z/vwsu/7vtx33323fsiHfMhDuOqqq6666qqr/r2oXHXVVVddddVVV1111VVX/Qe45pprHvzar/3a7/XiL/7ir/1iL/Zirw2wf889/OV3fidP+qVf4uCee3hhtq67jv177gHgmmuuefA111zz4Pvuu+9Wrrrqqquuuuqqfw/0oAc9iKuuuuqqq6666qqrrrrqqn+La6655sGv/dqv/V6v8zqv897XXHPNgwH277mHJ//iL/KX3/Vd/Eu2rruOR77Jm7B9/fU84k3ehAf6rd/6re/++q//+vfhqquuuuqqq67696By1VVXXXXVVVddddVVV131r3DNNdc8+LVf+7Xf63Ve53Xe+5prrnkwwN1/9Vf85c//PH/5Xd/Fv2T7uut4xJu8Cde/zMtw/cu8DA90dM89HN1zD6df+qW56qqrrrrqqqv+Q1C56qqrrrrqqquuuuqqq676F1xzzTUPfu3Xfu33eqd3eqfPBti/5x6e/PM/zx3AX37Xd/GCiCu2rruOR7zJm3D9y7wM17/My/BAR/fcw+2//Ms88bu/GwOPeu/35vRLvzT33XffrVx11VVXXXXVVf9eVK666qqrrrrqqquuuuqqq56Pa6655sGv/dqv/V7v9E7v9NkA+/fcw19+53dy91//NXf/1V/x/Ihn27ruOh7xJm/CI9/0Tdm67joe6Nxf/zXn//qveeJ3fzfPbeO66wA4e/bsM7jqqquuuuqqq/69qFx11VVXXXXVVVddddVVVwHXXHPNg8+cOfPgF3uxF3utd3qnd/psgP177uEvv/M7ufuv/5q7/+qveCDxvLauu45HvMmb8Mg3fVO2rruO+x3dcw+3//Ivc3TPPdz+y7/M82Ouuuqqq6666qr/BFSuuuqqq6666qqrrrrqqv+3rrnmmge/9mu/9ntdc801D36d13md9wbYv+ce/vI7v5O7//qvufuv/goAAeL527ruOh7xJm/Cy77v+/JAR/fcw+2//Muc++u/5vxf/zUvjHm20y/90gDcd999t3LVVVddddVVV/17Ubnqqquuuuqqq6666qqr/l+55pprHvzar/3a7/XiL/7ir/1iL/Zirw2wf889/OV3fidP+qVf4uCeexBXiOfv+pd5Ga576ZfmZd/3fXmgo3vu4fZf/mXO/fVfc/6v/5p/j7Nnz97KVVddddVVV13170Xlqquuuuqqq6666qqrrvo/75prrnnwa7/2a7/Xi7/4i7/2i73Yi702wP499/CX3/mdPPmXfomDe+7hfuJ5bV13HY94kzcB4GXf9315oKN77uH2X/5lbv/lX+bonnv41zLPaeO66wC47777buWqq6666qqrrvr3onLVVVddddVVV1111VVX/Z90zTXXPPi1X/u13+t1Xud13vuaa655MMD+Pffwl9/5nfzVd30X/5Kt667jEW/yJlz/Mi/D9S/zMjzQ0T33cPsv/zK3//Ivc3TPPVx11VVXXXXVVf9jUbnqqquuuuqqq6666qqr/s+45pprHvzar/3a7/U6r/M6733NNdc8GODuv/or/vLnf56/+q7v4l+ydd11POJN3oTrX+ZluP5lXoYHOrrnHm7/5V/mid/93fxHMc9p47rrALjvvvtu5aqrrrrqqquu+o9A5aqrrrrqqquuuuqqq676X+2aa6558Gu/9mu/1zu90zt9NsDBPffwpJ//ee4A/uq7vot/ydZ11/HIN3kTrnuZl+H6l3kZHuj8X/815/76r3nSd383/xU2rrsOgLNnz97KVVddddVVV131H4HKVVddddVVV1111VVXXfW/1ud+7uf+1ou92Iu99sE99/CX3/md3PPXf83df/VX/Eu2r7+eR7zJm/CIN3kTtq67jvsd3XMP5//6rzm65x6e9N3fzXMz/3HM89q47joA7rvvvlu56qqrrrrqqqv+I1C56qqrrrrqqquuuuqqq/5Xesd3fMfPerEXe7HXvvuv/opf/MiP5AURgMTWddfxiDd5E17mfd6HBzq65x5u/+VfZnnPPdz+y7/MC2Kuuuqqq6666qr/hahcddVVV1111VVXXXXVVf8rvfiLv/hrA2xffz1b113HwT33ACCJ+21ddx2PeJM34WXe5314oKN77uH2X/5lzv/N33D+r/6K/2rm+Vtcdx0A9913361cddVVV1111VX/EahcddVVV1111VVXXXXVVf+rbV13HS/7vu/L733RF7F13XVsXXcd17/My/Ay7/M+PNDRPfdw+y//Muf/5m84/9d/zbNIYPPCmP845gXbuO46rrrqqquuuuqq/1BUrrrqqquuuuqqq6666qr/lc6cOfPgJ/3SL/HIN3kTrn+Zl+E1PuVTeMSbvAkPdHTPPdz+y7/MHb/yKxzdcw//W5w9e/YZXHXVVVddddVV/xGoXHXVVVddddVVV1111VX/az35l36J7euu4/qXeRke8SZvAsDRPfdw+y//Mnf8yq9wdM89/HuZ/zjmhdu47jquuuqqq6666qr/UFSuuuqqq6666qqrrrrqqv+VrrnmmgcDHNxzDwC3//Iv89df8iX8m0hg89zMf62N664D4B/+4R9+m6uuuuqqq6666j8Clauuuuqqq6666qqrrrrqf639e+7hfuf/5m/4n8xcddVVV1111VX/DahcddVVV1111VVXXXXVVf+rbV13HQBH99zDfyTzX2/juusAuO+++27lqquuuuqqq676j0Dlqquuuuqqq6666qqrrvpf55prrnkwwME997B9/fUALO+5h/+pzFVXXXXVVVdd9d+E4Kqrrrrqqquuuuqqq666CkDifua/3sZ11wFw33333cpVV1111VVXXfUfhcpVV1111VVXXXXVVVdd9b/OmTNnHsz/EuZFs3HddQCcPXv2Vq666qqrrrrqqv8oVK666qqrrrrqqquuuuqq/3WuueaaB+/fcw8AW9ddB8DRPffwH8H899i47joA7rvvvlu56qqrrrrqqqv+oxBcddVVV1111VVXXXXVVVc9kyX+I5mrrrrqqquuuuq/GZWrrrrqqquuuuqqq6666n+lg7vvZvu66wA4uuce/rdbXHcdAPfdd9+tXHXVVVddddVV/1GoXHXVVVddddVVV1111VX/65w5c+ZB+/fcw38k8x/L/OtsXHcdAGfPnn0GV1111VVXXXXVfxSCq6666qqrrrrqqquuuup/re3rrgNgec89/IeRuOqqq6666qqr/s8guOqqq6666qqrrrrqqqv+17nmmmsezH8g8x/L/OttXHcdAPfdd9+tXHXVVVddddVV/1EIrrrqqquuuuqqq6666qr/lQ7uuYet668H4Oiee/gPJfFvZf5tNq67DoCzZ8/eylVXXXXVVVdd9R+FylVXXXXVVVddddVVV131/5q56qqrrrrqqqv+DyO46qqrrrrqqquuuuqqq/7Xueaaax68f889bF13HQBH99zD/wTm327juusAuO+++27lqquuuuqqq676j0Jw1VVXXXXVVVddddVVV/2vc+bMmQfzH8C8EBJXXXXVVVddddX/elSuuuqqq6666qqrrrrqqv+1tq+7DoDlvffy3838221cdx0A9913361cddVVV1111VX/kQiuuuqqq6666qqrrrrqqv+VDu6+m38P8z/HxnXXAXD27Nlbueqqq6666qqr/iMRXHXVVVddddVVV1111VX/61xzzTUP3r/nHv6tzItI4kVh/n02rrsOgPvuu+9Wrrrqqquuuuqq/0hUrrrqqquuuuqqq6666qr/tbauuw6Ao3vu4aqrrrrqqquuuur5ILjqqquuuuqqq6666qqr/le55pprHswzbV9/PQDLe+7hRWX+lSReGPPvt7juOgDuu+++W7nqqquuuuqqq/4jUbnqqquuuuqqq6666qqr/lc6uOce/q/YuO46AM6ePfsMrrrqqquuuuqq/0gEV1111VVXXXXVVVddddX/KmfOnHkw/0bm30jiqquuuuqqq676X4nKVVddddVVV1111VVXXfW/zv499wCwdd11ABzdcw//Hcx/jI3rrgPgvvvuu5Wrrrrqqquuuuo/EpWrrrrqqquuuuqqq6666n+Va6655sEA4l/H/M+1cd11AJw9e/ZWrrrqqquuuuqq/0gEV1111VVXXXXVVVddddX/Ogd3383WddcBcHTPPfyXkHggc9VVV1111VVX/S9A5aqrrrrqqquuuuqqq676X+XMmTMP4l/J/M+2cd11ANx33323ctVVV1111VVX/UciuOqqq6666qqrrrrqqqv+V/mHf/iH39m6/nq2r7sOgOU99/BfRgLA/McxV1111VVXXXXVfyIqV1111VVXXXXVVVddddX/KmfPnr11+7rruO5lXoYXhfmfbeO66wC47777buWqq6666qqrrvqPRnDVVVddddVVV1111VVX/a9y33333foP//APv/3IN3kTAI7uuYf/Spb4j2Jg47rrADh79uytXHXVVVddddVV/9EIrrrqqquuuuqqq6666qr/dX7kR37kc7auu45/ifmfb+O66wC47777buWqq6666qqrrvqPRnDVVVddddVVV1111VVX/a/zD//wD7/9D//wD7/NM5166Zfmv4J5Jol/L3PVVVddddVVV/0XoBw/fpyrrrrqqquuuuqqq6666n+f++677xkv9mIv9to3vNRLHb/5jd+Ym9/4jem2tkBiec89mP8drn/1V+f0S780f/qnf/rT//AP//A7XHXVVVddddVV/5Eox48f56qrrrrqqquuuuqqq6763+fs2bO3Hh0dXTo8PNx9yEMe8tLd1hanX/qlufmN35ib3/iN6ba2QGJ5zz38RzDPReLfyjzbLW/8xhx7+MP57d/+7e+59dZb/5qrrrrqqquuuuo/EuX48eNcddVVV1111VVXXXXVVf873XrrrX/9p3/6pz/z27/9299z6623/s3h4eHuQx7ykJfutrY4/dIvzS1v/Mbc/MZvTLe1BRLLe+7hf5rrX/3VOfbwh/Onf/qnP3Prrbf+NVddddVVV1111X8k9KAHPYirrrrqqquuuuqqq6666v+Oa6655sFnzpx58Ou8zuu81+u8zuu8Nw9wdM89nP/rv+a2X/kVzv/1X/OvYV4Am38t82yv/tVfzemXfmk+8zM/83X+4R/+4be56qqrrrrqqqv+I6EHPehBXHXVVVddddVVV1111VX/N11zzTUPPnPmzINf7MVe7LVe53Ve572vueaaB/NMR/fcw/m//mtu+5Vf4fxf/zUvjHkhbP41zHN6wx/+YTauu44P+ZAPech99913K1ddddVVV1111X8k9KAHPYirrrrqqquuuuqqq6666v+Ha6655sGv/dqv/V6v8zqv897XXHPNg3mmo3vu4fxf/zW3/cqvcP6v/5rnZv4FNi8q85ze8Id/mI3rruNDPuRDHnLffffdylVXXXXVVVdd9R8JPehBD+Kqq6666qqrrrrqqquu+v/nmmuuefBrv/Zrv9eLv/iLv/aLvdiLvTbPdHTPPZz/67/mtl/5Fc7/9V9jXgQ2LwrzvN76t38bgLd7u7cTV1111VVXXXXVfzT0oAc9iKuuuuqqq6666qqrrrrq/7drrrnmwa/92q/9Xi/+4i/+2i/2Yi/22jzT0T33cO6v/5rzf/M33PbLv8wLZfMvMc/rrX/7twF4u7d7O3HVVVddddVVV/1HQw960IO46qqrrrrqqquuuuqqq6663zXXXPPg137t136vF3/xF3/tF3uxF3ttnunonns499d/zfm/+Rtu++Vf5nnY/EvMc9q47jre8Id/mPvuu+/WD/mQD3kIV1111VVXXXXVfzTK8ePHueqqq6666qqrrrrqqquuut/h4eHuP/zDP/zOb/3Wb33Pb//2b3/P4eHhriRufOhDH3zs4Q/n+ld/dW554zfm2MMfTr+9zaWnPAUAJF4Y87yOPfzh3PLGb8ytt97617/1W7/1PVx11VVXXXXVVf/RKMePH+eqq6666qqrrrrqqquuuur5OTw83P2Hf/iH3/mt3/qt7/nt3/7t77n11lv/ZnNz8/iND33og489/OFc/+qvzi1v/MYce/jD6be3ufSUp/CvcfqlX5rrX/3V+Yd/+Iff/tM//dOf4aqrrrrqqquu+o9G5aqrrrrqqquuuuqqq6666kVw33333Xrfffd992/91m999zXXXPPgF3uxF3vt13md13mvF3uxF3vtW974jbnljd+YR73Xe3F0zz3c/su/zG2//MtcddVVV1111VX/7ahcddVVV1111VVXXXXVVVf9K91333233nfffd/9W7/1W999zTXXPPjFXuzFXvt1Xud13uvFXuzFXnvjuus4/dIvzaPe+705uucebv/lX+YZv/zLPD8b110HwH333XcrV1111VVXXXXVfwYqV1111VVXXXXVVVddddV/mmuuuebB99133638H3bffffdet999333b/3Wb333Nddc8+AXe7EXe+3XeZ3Xea8Xe7EXe+2N667j9Eu/NC/zyZ/M0T33cNsv/zK3/fIvc3TPPQBsXHcdAGfPnn0GV1111VVXXXXVfwb0oAc9iKuuuuqqq6666qqrrrrqP84111zz4Nd+7dd+r9d5ndd572uuuebBv/Vbv/Xdv/Vbv/U9//AP//Db/D9yzTXXPPjFXuzFXvvFXuzFXut1Xud13psHOLrnHm775V/m9Eu/NKdf+qX5+q//+vf5rd/6re/mqquuuuqqq676j4Ye9KAHcdVVV1111VVXXXXVVVf9+1xzzTUPfu3Xfu33eqd3eqfP5pkO7rmH/bvv5vqXeRl+5Ed+5LN/9Ed/9HP4f+qaa6558Iu92Iu99ou92Iu91uu8zuu8N8/lMz/zM1/nH/7hH36bq6666qqrrrrqPxp60IMexFVXXXXVVVddddVVV131r3PNNdc8+LVf+7XfC+Cd3umdPhvg4J572L/7bu7+q7/ir77ruwC4/mVehjf92q/lvvvuu/VDPuRDHsJVXHPNNQ9+sRd7sdd+sRd7sdd6ndd5nff+zM/8zNf5h3/4h9/mqquuuuqqq676z4Ae9KAHcdVVV1111VVXXXXVVVf9y6655poHv/Zrv/Z7vfiLv/hrv9iLvdhrAxzccw9P+sVf5J6//mvu/qu/4rltXXcd7/RjPwbAZ37mZ77OP/zDP/w2V1111VVXXXXVVf91qFx11VVXXXXVVVddddVVL9A111zz4Nd+7dd+rxd/8Rd/7Rd7sRd7bYCDe+7hL7/zO7nnr/+au//qr3hhDu+5h7v/6q+4/mVehhd7sRd7rX/4h3/4ba666qqrrrrqqqv+61C56qqrrrrqqquuuuqqq57DNddc8+DXfu3Xfq/XeZ3Xee9rrrnmwQAH99zDX37nd/LkX/olDu65hxdEABIAW9ddxyPe5E04uOceAK655poHc9VVV1111VVXXfVfi8pVV1111VVXXXXVVVddxTXXXPPg137t136vd3qnd/psnungnnv4y+/8Tv7qu76LF0QAEvfbuu46HvEmb8J1L/3SXP8yL8MDXXPNNQ/mqquuuuqqq6666r8Wlauuuuqqq6666qqrrvp/6Jprrnnwi73Yi732mTNnHvRO7/ROnw1wcM893P1Xf8Xdf/VX/NV3fRfPTQASz23ruut4xJu8Cde99Etz/cu8DA90dM89nP/rv+bmN35jrrrqqquuuuqqq/4bULnqqquuuuqqq6666qr/J6655poHv/Zrv/Z7vfiLv/hrv9iLvdhrAxzccw9/+Z3fycE99/DkX/olHkgAEs/P1nXX8Yg3eRMe8SZvwtZ113G/o3vuYXnPPZz767/mSd/zPQDc/MZvzM1v/Mbcd999t3LVVVddddVVV131X4vKVVddddVVV1111VVX/R92zTXXPPi1X/u13+vFX/zFX/vFXuzFXhvg4J57+Mvv/E7u+eu/5u6/+ivuJwCJF+S6l35prn+Zl+Fl3ud9eKCje+7hjl/+ZY7uvZc7fvmXATBXXXXVVVddddVV/yNQueqqq6666qqrrrrqqv9jrrnmmge/9mu/9nu9zuu8zntfc801DwY4uOce/vI7v5Mn/9IvcXDPPQAIkMQLsnXddTziTd6Ereuu4xFv8iY80NE993DHL/8y5//mbzj/13/NA5mrrrrqqquuuuqq/zGoXHXVVVddddVVV1111f8B11xzzYNf+7Vf+73e6Z3e6bN5poN77uEvv/M7+avv+i4ABCAhiRdk67rreMSbvAnXvfRLc/3LvAwPdHTPPdzxy7/M7b/yKyzvuYerrrrqqquuuuqq/wWoXHXVVVddddVVV1111f9C11xzzYPPnDnz4Bd7sRd7rXd6p3f6bJ7p7r/6K+7+q7/ir77ruxCAhCRemK3rruMRb/ImXPfSL831L/MyPNDRPfdwxy//Mk/6nu/h32px7bUA3Hfffbdy1VVXXXXVVVdd9V+LylVXXXXVVVddddVVV/0vcc011zz4tV/7td/rxV/8xV/7xV7sxV4b4OCee/jL7/xODu65h6f80i+BBIAkXpit667jEW/yJjziTd6Ereuu435H99zD8p57OP/Xf82Tvud7+NcyV1111VVXXXXVVf+jULnqqquuuuqqq6666qr/wa655poHv/Zrv/Z7vfiLv/hrv9iLvdhrAxzccw9/+Z3fyT1//dfc89d/zbNIvDDXvfRLc/3LvAwv8z7vwwMd3XMPd/zyL3P+b/6G83/91/xH27juOgDOnj37DK666qqrrrrqqqv+a1G56qqrrrrqqquuuuqq/6GuueaaB3/TN33T0wEO7rmHv/rO7+TJv/zLHNxzDy+Kreuu4xFv8iZsXXcdj3iTN+GBju65hzt++Zc5/zd/w/m//muuuuqqq6666qqr/o+ictVVV1111VVXXXXVVf9Dfc7nfM5vAfziR34k9/z1X/Oi2LruOh7xJm/C9S/90lz3Mi/DAx3dcw93/PIvc/uv/ArLe+7hP5q56qqrrrrqqquu+h+HylVXXXXVVVddddVVV/0Pt3399dzz13/NC7J13XU84k3ehEe8yZuwdd11PNDRPfdwxy//Mk/6nu/hv8vGddcBcN99993KVVddddVVV1111X8tKlddddVVV1111VVXXfU/3NZ11/Hctq+7joe/yZvwiDd5E7auu477Le+5h/N//dcc3XMPT/qe7+Gqq6666qqrrrrq/zkqV1111VVXXXXVVVdd9T/cdS/90gi47qVfmute5mV4mfd5Hx5oec893P7Lv8yFv/kbzv/1X/M/zeK66wA4e/bsrVx11VVXXXXVVVf916Jy1VVXXXXVVVddddVV/8NtX3897/O7v8sDLe+5h9t/5Ve48Nd/zfm/+Rv+u5mrrrrqqquuuuqq/5GoXHXVVVddddVVV1111f9Q11xzzYMBtq67DoDlPfdw+6/8Cnf8yq+wvOceni8JANtcddVVV1111VVXXQWVq6666qqrrrrqqquu+l/gF173dflXkbjM5r/bxnXXAXDffffdylVXXXXVVVddddV/LSpXXXXVVVddddVVV131P9zynnv4N5O4zOaqq6666qqrrrrq/yEqV1111VVXXXXVVVdd9f+BxGU2V1111VVXXXXVVf+PULnqqquuuuqqq6666qr/Y8wLIXGZzX8U84JtXHcdAPfdd9+tXHXVVVddddVVV/3XI7jqqquuuuqqq6666qr/jySuuuqqq6666qqr/h+gctVVV1111VVXXXXVVf8DXXPNNQ/mmY7uuYf/FBIA2PxnWVx3HQBnz569lauuuuqqq6666qr/elSuuuqqq6666qqrrrrq/zsJAGyuuuqqq6666qqr/o+hctVVV1111VVXXXXVVVddIQGAzX+UjeuuA+C+++67lauuuuqqq6666qr/elSuuuqqq6666qqrrrrqquckAYDNVVddddVVV1111f9yBFddddVVV1111VVXXXXV8ydx1VVXXXXVVVdd9b8clauuuuqqq6666qqrrvof6MyZMw/mmZb33st/G4nLbP4tFtdeC8B99913K1ddddVVV1111VX/9ahcddVVV1111VVXXXXV/yHmP4nEZTZXXXXVVVddddVV/4tQueqqq6666qqrrrrqqqtedBKX2bwoNq67jquuuuqqq6666qr/RgRXXXXVVVddddVVV1111b+eBIB50Zw9e/YZXHXVVVddddVVV/3Xo3LVVVddddVVV1111VVX/dtIAGBz1VVXXXXVVVdd9T8UwVVXXXXVVVddddVVV/0PdM011zyY/y0krrrqqquuuuqqq/6HonLVVVddddVVV1111VX/wx3dcw//40lcZvNAG9ddB8B99913K1ddddVVV1111VX/9ahcddVVV1111VVXXXXVVf9xJC6zueqqq6666qqrrvofgOCqq6666qqrrrrqqqv+DxH/tcQLIAGwuO46AM6ePXsrV1111VVXXXXVVf/1qFx11VVXXXXVVVddddVV/zkkrrrqqquuuuqqq/6bUbnqqquuuuqqq6666qqr/tNsXHcdV1111VVXXXXVVf+NqFx11VVXXXXVVVddddX/QGfOnHkQz7S85x7+t7vvvvtu5aqrrrrqqquuuuq/HpWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111X+Kjeuu46qrrrrqqquuuuq/GZWrrrrqqquuuuqqq676H+js2bPP4P+I++6771auuuqqq6666qqr/nsQXHXVVVddddVVV1111f9A99133638G4mrrrrqqquuuuqqq56JylVXXXXVVVddddVVV131n2Jx7bUAnD179lauuuqqq6666qqr/nsQXHXVVVddddVVV1111f9AZ8+evZVnWt5zD/+Tiauuuuqqq6666qr/sahcddVVV1111VVXXXXV/0D33Xffrfwvt3HddQDcd999t3LVVVddddVVV13134Pgqquuuuqqq6666qqr/of6h3/4h98GuOmN35ib3uiN+NcQV1111VVXXXXVVVcBVK666qqrrrrqqquuuup/qM/8zM98nW/6pm96+k1v9EYPvumN3ohHvtd7AXD7r/wKF/76rzn/N3/DVVddddVVV1111VUvFOX48eNcddVVV1111VVXXXXV/1R/9md/9jO33nrr32xubh6/4aEPfXC3tcWpl35pbnrjN+bmN3oj6tYWApb33sv/NNe9+qtz+qVfmj/90z/96X/4h3/4Ha666qqrrrrqqqv+61G56qqrrrrqqquuuuqq/8Huu+++W++7777v/q3f+q3vvuaaax78Yi/2Yq/9Yi/2Yq/1Oq/zOu+9uO46Hvle7wXv9V4s77mH83/zN9zxy7/M+b/5GwAEmP8aAsxVV1111VVXXXXV/ziU48ePc9VVV1111VVXXXXVVf8bHB4e7t56661//ad/+qc/89u//dvf86d/+qc/A7C5uXn8+LXXHt95+MO56Y3fmJvf6I3YefjD6ba22HvqU/nvcvMbvzHHHv5wfvu3f/t7br311r/mqquuuuqqq6666r8elauuuuqqq6666qqrrvpf6L777rv1vvvuu/Uf/uEffhvgmmuuefBrv/Zrv9eLv/iLv/aLvdiLvfZN113HTW/0Rjzivd6L83/zN5z/67/mjl/5Fa666qqrrrrqqqv+n0EPetCDuOqqq6666qqrrrrqqv9Lrrnmmge/2Iu92Gu/zuu8znu92Iu92GvzAEf33MMdv/IrnP/rv+b83/wN/9HMs730J30SN7/RG/H1X//17/Nbv/Vb381VV1111VVXXXXVfz30oAc9iKuuuuqqq6666qqrrvq/6pprrnnwi73Yi732i73Yi73W67zO67w3D7C8915u/+Vf5vxf/zXn/+Zv+I9gnu1Vv/IrOfXSL81nfuZnvs4//MM//DZXXXXVVVddddVV//XQgx70IK666qqrrrrqqquuuur/g2uuuebBL/ZiL/baL/ZiL/Zar/M6r/PePMDRPfdw/m/+hjt++Zc5/zd/w7+VebZX/cqv5NRLvzSf+Zmf+Tr/8A//8NtcddVVV1111VVX/ddDD3rQg7jqqquuuuqqq6666qr/b6655poHnzlz5kGv8zqv894v9mIv9trXXHPNg3mmo3vu4fzf/A3n//qvueNXfoV/LXPF6/3gD7Jx3XV8yId8yEPuu+++W7nqqquuuuqqq676r0flqquuuuqqq6666qqr/h+67777br3vvvtu/Yd/+IffAbjmmmse/Nqv/drv9eIv/uKv/WIv9mKvvXHdddz8Rm/EI9/rvVjeey+3//Ivc/5v/oblPfdw1VVXXXXVVVdd9b8IetCDHsRVV1111VVXXXXVVVdd9WzXXHPNg1/sxV7stV/ndV7nvV7sxV7stXmAo3vu4Y5f+RXO//Vfc/5v/obnx1zxej/4g2xcdx0f8iEf8pD77rvvVq666qqrrrrqqqv+66EHPehBXHXVVVddddVVV1111b/HNddc8+DXfu3Xfq9/+Id/+J1/+Id/+G3+D7nmmmse/GIv9mKv9WIv9mKv/Tqv8zrvzQMc3XMPd/zKr3D+r/+a83/zNzyQgbf4zd8E4O3e7u3EVVddddVVV1111X8P9KAHPYirrrrqqquuuuqqq67613qxF3ux136xF3ux13qnd3qnz+aZ7rvvvlv/4R/+4be//uu//n34P+iaa6558Iu92Iu99ou92Iu91uu8zuu8Nw9wdM89XPibv+H2X/5lzv/N32DgLX7zNwF4u7d7O3HVVVddddVVV1313wM96EEP4qqrrrrqqquuuuqqq/4l11xzzYNf+7Vf+72uueaaB7/O67zOe/NMB/fcw5N+8Rc5uOceXvNTP5Xf+q3f+u6v//qvfx/+jztz5syDrrnmmoe82Iu92Gu9+Iu/+Gu/2Iu92GvzTEf33MP5v/kbbn6jNwLg7d7u7cRVV1111VVXXXXVfw8qV1111VVXXXXVVVdd9QJcc801D37t137t93rxF3/x136xF3ux1wY4uOcenvxLv8T+3XfzV9/1Xdzv+pd5GQCuueaaB/P/wNmzZ59x9uzZZ/zDP/zDb//oj/7o51xzzTUPfu3Xfu33evEXf/HXfrEXe7HX3rjuOgD+4R/+4Xe46qqrrrrqqquu+u9D5aqrrrrqqquuuuqqqx7gmmuuefBrv/Zrv9frvM7rvPc111zzYICDe+7hL7/zO7nnr/+au//qr7jqed133323/uiP/ujn/OiP/ujnXHPNNQ9+sRd7sdc+c+bMg370R3/0c7jqqquuuuqqq67670Plqquuuuqqq6666qr/16655poHnzlz5sEv9mIv9lrv9E7v9Nk808E99/CX3/mdPPmXfomDe+7hX7J/990AnDlz5sH8P3fffffdet999303V1111VVXXXXVVf/9qFx11VVXXXXVVVdd9f/ONddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22e6eCee3jSL/4if/Vd38W/hoDt66/nqquuuuqqq6666qr/cahcddVVV1111VVXXfX/wjXXXPPg137t136vF3/xF3/tF3uxF3ttgIN77uEvv/M7Afir7/ou/jUEXPcyL8P1L/MyvMz7vA/3u+aaax7MVVddddVVV1111VX/U1C56qqrrrrqqquuuur/rGuuuebBr/3ar/1er/M6r/Pe11xzzYMBDu65h7/8zu/knr/+a+7+q7/iRSVg67rreMSbvilb113HI97kTXig5T33sLjuOq666qqrrrrqqquu+h+FylVXXXXVVVddddVV/2dcc801D36xF3ux1z5z5syD3umd3umzeaaDe+7hL7/zO3nyL/0SB/fcw4tCXLF1/fU84k3ehOte+qW5/mVehgda3nMPd/zKr3DHr/4qAK/zAz/AfffddytXXXXVVVddddVVV/1PQeWqq6666qqrrrrqqv/Vrrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GvzTHf/1V9x91/9FX/1Xd/Fi0oAElvXXccj3uRNeMSbvAlb113HA53/m7/hwl//NU/+3u/lgRbXXcdVV1111VVXXXXVVf/jULnqqquuuuqqq6666n+da6655sGv/dqv/V4v/uIv/tov9mIv9toAB/fcw19+53dycM89PPmXfokXhbhi6/rr2bruOq5/mZfhZd7nfXig5T33cMev/ArLe+/ljl/5Fa666qqrrrrqqquu+l+FylVXXXXVVVddddVV/ytcc801D37t137t93qnd3qnz+aZDu65h7/8zu/knr/+a+7+q7/iRSEAia3rruMRb/ImXPfSL831L/MyPNDynnu441d+hfN/8zdc+Ju/4aqrrrrqqquuuuqq/7WoXHXVVVddddVVV131P9I111zz4Nd+7dd+L4B3eqd3+mye6eCee3jSL/4iT/6lX+Lgnnv4l4hnkti67joe8SZvwnUv/dJc/zIvwwMt77mHO37lV7jjV3+V5T33cNVVV1111VVXXXXV/wlUrrrqqquuuuqqq676H+V1Xud13vt1Xud13uvFXuzFXhvg4J57uPuv/oq7/+qv+Kvv+i5eFAKQANi67joe8SZvwsu8z/vwQMt77uHo3nu58Nd/zZO/93u56qqrrrrqqquuuur/JCpXXXXVVVddddVVV/2P8WIv9mKv/Tqv8zrv9aBTp177L7/zO7nnr/+au//qr3hRCEBi67rreMSbvAkAL/M+78MDLe+5hzt+5Vc4/zd/w4W/+Ruuuuqqq6666qqrrvo/j8pVV1111VVXXXXVVf9jXHPNNQ9+sRd7sdd+8i/9En/1Xd/FCyOeSWLruut4xJu8Cde99Etz/cu8DA+0vOce7viVX+H83/wNF/7mb7jqqquuuuqqq6666v8VKlddddVVV1111VVX/Y9x5syZBwHs3303z48AJAC2rruOR7zJm/CIN3kTtq67jgda3nMPd/zKr/Dk7/1errrqqquuuuqqq676f43KVVddddVVV1111VX/Y1xzzTUPBji45x7uJwAJgOte+qW5/mVehpd5n/fhgZb33MMdv/IrADzle7+X+wkwV1111VVXXXXVVVf9P0blqquuuuqqq6666qr/cQRIYuu663jEm7wJW9ddxyPe5E14oOU993DHr/wKF/7mb7jwN3/DCyKezfznWVx7LQBnz569lauuuuqqq6666qqr/qegctVVV1111VVXXXXV/zgPf5M34eFv8iZc/zIvwwMt77mHO37lV7jzV3+V5T338K8lnpO56qqrrrrqqquuuur/OCpXXXXVVVddddVVV/2Pc/3LvAz3u/A3f8P5v/5rnvK938t/NPFs5qqrrrrqqquuuuqq/4OoXHXVVVddddVVV131P8Y111zzYIA7f+VXOP83f8Odv/Ir/FcRz2auuuqqq6666qqrrvo/gspVV1111VVXXXXVVf/j3PErv8KFv/kb/ruIZzNXXXXVVVddddVVV/0vRuWqq6666qqrrrrqqqteCHGFueqqq6666qqrrrrqfyEqV1111VVXXXXVVVdd9SIQz2auuuqqq6666qqrrvpfgspVV1111VVXXXXVVVf9K4krzFVXXXXVVVddddVV/8NRueqqq6666qqrrrrqqn8jcdVVV1111VVXXXXV/3BUrrrqqquuuuqqq6666j/AxrXXAnDffffdylVXXXXVVVddddVV/1MQXHXVVVddddVVV131P8Z99913K8Diuuu46qqrrrrqqquuuuqq/wBUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquu+h/jvvvuuxVgce21XHXVVVddddVVV1111X8AKlddddVVV1111VVX/d8j8R/C5kW1uO46AO67775bueqqq6666qqrrrrqfwoqV1111VVXXXXVVVf9jyNAPIDEv5f5N5B4kUlcddVVV1111VVXXfU/DpWrrrrqqquuuuqqq/7nkUDiP5J4wcxVV1111VVXXXXVVf9HUbnqqquuuuqqq6666v898bzMVVddddVVV1111VX/B1C56qqrrrrqqquuuuqq50M8L3PVVVddddVVV1111f8yVK666qqrrrrqqquuuupFJJ6Tueqqq6666qqrrrrqfzgqV1111VVXXXXVVVdd9W8knk1cddVVV1111VVXXfU/EJWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqP8Di2msBOHv27DO46qqrrrrqqquuuup/CipXXXXVVVddddVVV/2Pcfbs2WcAnHypl+Kqq6666qqrrrrqqqv+A1C56qqrrrrqqquuuup/jH/4h3/47X/4h3/47Rd7qZd67df6/u9nee+9XPibv+HC3/wNF/7mb7jqqquuuuqqq6666qp/JSpXXXXVVVddddVVV/2Pcd999936Iz/yI5/zTu/0TrzYi73Yay+uu46TL/VSACzvvZcLf/3X3Pmrv8qFv/kbrrrqqquuuuqqq6666kVA5aqrrrrqqquuuuqq/1H+4R/+4bc/8zM/87evueaaB7/Yi73Ya7/Yi73Ya73O67zOey+uvZYb3+iNuPGN3ojlPfdw4W/+hgt/8zfc+au/ylVXXXXVVVddddVVV70AVK666qqrrrrqqquu+h/pvvvuu/W+++777t/6rd/67h/90R/9nDNnzjzoxV7sxV77xV/8xV/7xV7sxV77xuuu48Y3eiMe/p7vyfLee7nwN3/Dhb/5Gy78zd9w1VVXXXXVVVddddVVz0Tlqquuuuqqq6666qr/8e67775b77vvvlv/4R/+4Xd+9Ed/9HOuueaaB7/Yi73Ya7/O67zOe73Yi73Yay+uu46TL/VSACzvvZcLf/3X3Pmrv8qFv/kbrrrqqquuuuqqq676f43KVVddddVVV1111VX/69x333233nfffd/9W7/1W999zTXXPPjFXuzFXvvFXuzFXut1Xud13ntx7bXc+EZvxI1v9EYs77mHC3/zN1z8m7/hzl/9VZ4fc9VVV1111VVXXXXV/2FUrrrqqquuuuqqq676X+2+++679b777vvu3/qt3/ruH/3RH/0c236d13md937xF3/x136xF3ux177xuuu48Y3eiIe953sCcOev/ioX/+ZvuPA3fwOAeOHMVVddddVVV1111VX/i1G56qqrrrrqqquuuur/jPvuu+9WgB/90R/9nB/90R/9nGuuuebBL/ZiL/bar/M6r/NeL/ZiL/baAA9/z/cEYHnvvVz467/mrl/9VS78zd/wgojnz1x11VVXXXXVVVdd9b8Alauuuuqqq6666qqr/s+67777br3vvvu++7d+67e++5prrnnwi73Yi732i73Yi73W67zO67z34tprufGN3ogb3+iNWN5zDxf+5m+4+Dd/w52/+qu8KMRVV1111VVXXXXVVf8LoAc96EFcddVVV1111VVXXfXvc8011zz4vvvuu5X/Rc6cOfOg13md13nvF3/xF3/tF3uxF3ttHmB5zz3c+au/ysW/+Rsu/M3f8KJ4ha/4Ck6+1EvxmZ/5ma/zD//wD7/NVVddddVVV1111VX/E1COHz/OVVddddVVV1111VX/etdcc82D3+zN3uyj3umd3umz3+d93uerz549+4yjo6Pdw8PDXf4XODo6uvQP//APv/Nbv/Vb3/Pbv/3b33Prrbf+zebm5vFrrrnmwd3WFidf6qW48Y3eiBvf6I3YftjDmA4PWd57Ly/IjW/0Riyuu47f+q3f+p6zZ8/eylVXXXXVVVddddVV/xOgBz3oQVx11VVXXXXVVVdd9aK55pprHvzar/3a7/U6r/M6733NNdc8GGD/nnvYvu46AD7zMz/zdf7hH/7ht/lf7Jprrnnwi73Yi732i73Yi73Wi73Yi732Nddc82CeaXnPPVz4m7/h4t/8DRf+5m9Y3nsv93uFr/gKTr7US/GZn/mZr/MP//APv81VV1111VVXXXXVVf8TULnqqquuuuqqq6666gW65pprHvzar/3a7wXwTu/0Tp/NM+3fcw9/8Z3fyd1//dfc/Vd/xTv/6I+yff31/F9w33333Xrfffd992/91m99N8CZM2ce9Dqv8zrv/eIv/uKv/WIv9mKvfeN113HjG70RAMt77uHOX/1VLv7N33DVVVddddVVV1111f9IVK666qqrrrrqqquueg7XXHPNg1/7tV/7vV78xV/8tV/sxV7stXmm/Xvu4Um/+Is86Zd+iYN77uGBtq+/HoBrrrnmwf/wD//A/yVnz559xo/+6I9+zo/+6I9+zjXXXPPgF3uxF3vtF3uxF3ut13md13nvxXXX8fD3fE+uuuqqq6666qqrrvofi8pVV1111VVXXXXVVVxzzTUPfu3Xfu33ep3XeZ33vuaaax4MsH/PPTzpl36J/bvv5i+/67t4fsT/L/fdd9+t991333f/1m/91nf/6I/+6OecOXPmwa/zOq/zXi/2Yi/22tdcc82Df+RHfuSz/+Ef/uG3ueqqq6666qqrrrrqfwoqV1111VVXXXXVVf8PXXPNNQ9+7dd+7fcCeKd3eqfP5pn277mHv/jO7+Tuv/5r7v6rv+L5Ec/p+pd5Gf4/uu+++2697777bv2Hf/iH3wY4c+bMg86ePfsMrrrqqquuuuqqq676n4TKVVddddVVV1111f8T11xzzYNf+7Vf+71e/MVf/LVf7MVe7LV5pv177uFJv/iLPOmXfomDe+7h+REv2NZ113EVnD179hlcddVVV1111VVXXfU/DZWrrrrqqquuuuqq/8OuueaaB7/2a7/2e73O67zOe19zzTUPBti/5x6e9Eu/xP7dd/OX3/VdvCDiBdu67joe+SZvwvUv8zJc/zIvw1VXXXXVVVddddVVV/0PReWqq6666qqrrrrq/5Brrrnmwa/92q/9XgDv9E7v9Nk80/499/AX3/md3P3Xf83df/VXvCDiBdu67joe+SZvwiPf9E3Zuu46np8zZ848iKuuuuqqq6666qqrrvqfg8pVV1111VVXXXXV/3LXXHPNg1/7tV/7vV78xV/8tV/sxV7stXmm/Xvu4Um/+Is8+Zd+if177uEFEc/f1nXXsX399Vz/0i/Ny77v+/JAy3vuYXnvvVz4m79hdc89vPgnfiJXXXXVVVddddVVV131PxCVq6666qqrrrrqqv+Frrnmmge/9mu/9nu9zuu8zntfc801DwbYv+cenvRLv8T+3Xfzl9/1Xbww4vnbuu46Hvkmb8L1L/MyXP8yL8MDLe+5hzt/9Ve58Nd/zcW//VvEFTe84Rty1VVXXXXVVVddddVV/0NRueqqq6666qqrrvpf4Jprrnnwa7/2a78XwDu90zt9Ns+0f889/MV3fid3//Vfc/df/RX/EvG8tq67jke+yZvwyDd9U7auu44HWt5zD3f+6q9y16/8Cst770VcIa666qqrrrrqqquuuup/BSpXXXXVVVddddVV/0Ndc801D37t137t93rxF3/x136xF3ux1+aZ9u+5hyf94i/y5F/6JfbvuYd/iXhOW9ddx/b113P9S780L/u+78sDLe+5hwt/8zcs772Xp37v9yKeTTx/y3vv5aqrrrrqqquuuuqqq/6HonLVVVddddVVV131P9A3fdM3Pf2aa655MMD+PffwpF/6Jfbvvpu//K7v4kUhntPWddfxyDd5E65/mZfh+pd5GR5oec893Pmrv8qFv/5rLv7t3yKuEFddddVVV1111VVXXfW/HpWrrrrqqquuuuqq/2E+93M/97euueaaB//Fd34nd//1X3P3X/0VLwrxnLauu45Hvsmb8Mg3fVO2rruOB1recw93/uqvctev/Aqre+/lfuJfQeIyiftdc801D+aqq6666qqrrrrqqqv+56By1VVXXXXVVVdd9T/Mi73Yi702wF9+13fxLxHPtnXddVz/Mi/D9nXX8bLv+7480PKee7jzV38VgKd+7/cCIP4NJK666qqrrrrqqquuuup/ESpXXXXVVVddddVV/4O82Iu92GsD7N9zDy+IeLat667jkW/yJlz/Mi/D9S/zMjzQ8p57uPNXf5ULf/3XXPzbvwVAgPhXkrjqqquuuuqqq6666qr/pahcddVVV1111VVX/Q9yzTXXPBjg7r/6K56buGLruut45Ju8CY980zdl67rreKDlPfdw56/+Knf9yq+wvPdeAASIfyWJF9Xqnnu46qqrrrrqqquuuuqq/6GoXHXVVVddddVVV/0P8mIv9mKvBXD3X/0VAAK2rruOR77JmwDwsu/7vjzQ8p57uPNXfxWAp37v9/JA4t9A4qqrrrrqqquuuuqqq/4PoXLVVVddddVVV131P8iLvdiLvTbAwT338HLv8z5c/zIvw/Uv8zI80PKee7jzV3+VC3/911z827/lgcS/gcR/lGuuuebBXHXVVVddddVVV1111f8cVK666qqrrrrqqqv+B7nmmmseDPBmX/u1PNDynnu481d/lbt+5VdY3nsvz038G0j8e4grxFVXXXXVVVddddVVV/2PReWqq6666qqrrrrqf4hrrrnmwTzT8p57uPNXf5XVPfdw56/+Ki+I+DeQ+LcQV1111VVXXXXVVVdd9b8Olauuuuqqq6666qr/gX733d+dF0b8G0j8a4irrrrqqquuuuqqq676X4/KVVddddVVV1111f8Q99133628EOLfQOJfQ/zrLe+9l6uuuuqqq6666qqrrvofispVV1111VVXXXXV/3Di30DiRSWuuuqqq6666qqrrrrq/ywqV1111VVXXXXVVf9DiX8DiReF+M9x5syZB3PVVVddddVVV1111VX/cxBcddVVV1111VVX/Q9y33333Qqwce21/KtJvDACBIirrrrqqquuuuqqq676f4PKVVddddVVV1111f92Ei+MuOqqq6666qqrrrrqqv+3CK666qqrrrrqqqv+Bzl79uytAPPrruNfJIHE8yNAgPjPJ2B5zz1cddVVV1111VVXXXXV/0BUrrrqqquuuuqqq/63kXhBxH8+cdVVV1111VVXXXXVVf9rULnqqquuuuqqq67630Li+RH/ucRVV1111VVXXXXVVVf9r0Vw1VVXXXXVVVdd9T/IfffddyvA4tpreQ4Sz02A+M8hQID417nmmmsezFVXXXXVVVddddVVV/3PQeWqq6666qqrrrrqfzKJ5yb+c4irrrrqqquuuuqqq676P4fgqquuuuqqq6666n+Q++6771aAxXXXgcQDCRD/cQQIECD+fVb33stVV1111VVXXXXVVVf9D0Tlqquuuuqqq6666n8w8R9PXHXVVVddddVVV1111f8bVK666qqrrrrqqqv+hxL/ccR/Iomrrrrqqquuuuqqq676H4rgqquuuuqqq6666n+Qs2fPPgNgcd11/HsJECD+E0hIQhLiOV1zzTUP5qqrrrrqqquuuuqqq/5noHLVVVddddVVV131f4z4zyGJq6666qqrrrrqqquu+l+GylVXXXXVVVddddX/IPfdd9+tAItrr+VfQ/znEIDEVVddddVVV1111VVX/S9F5aqrrrrqqquuuup/MfEfSzyTxL/G6t57ueqqq6666qqrrrrqqv+BqFx11VVXXXXVVVf9LyT+44gHkLjqqquuuuqqq6666qr/Qwiuuuqqq6666qqr/gc5e/bsrQDz667juQkQIP79BAgQgAQSSPxHOHPmzIO56qqrrrrqqquuuuqq/xmoXHXVVVddddVVV/0PJ/5jiOcicdVVV1111VVXXXXVVf/HUbnqqquuuuqqq676H0r8xxDPReI/grjqqquuuuqqq6666qr/8ahcddVVV1111VVX/Q9y33333QqwuPZa/j3E8yHx7yFesNW993LVVVddddVVV1111VX/A1G56qqrrrrqqquu+j9CvAAS/xbiqquuuuqqq6666qqr/tcjuOqqq6666qqrrvof5r777rsVYH7ttbwoBIjnQwKJfw0BAsRVV1111VVXXXXVVVf9n0Bw1VVXXXXVVVdd9T/UQ9/zPTnxUi/FCyJAPB8SSLyoBAgQ/zGuueaaB3PVVVddddVVV1111VX/M1C56qqrrrrqqquu+h/mMz/zM1/7m7/5m2+94Q3fkBve8A1Z3nsvu3/zN1z4m79hfe+9XPybv+EFknhRiKuuuuqqq6666qqrrvp/gcpVV1111VVXXXXV/0Cf+Zmf+Tov9mIv9lov/uIv/tov9mIv9tqLN3xDrn/DNwRgde+9XPybv+HuX/1VLv7N3wCAxL9E/McTV1111VVXXXXVVVdd9T8alauuuuqqq6666qr/Yc6ePfuMs2fPPuMf/uEffvtHf/RHP+eaa6558Iu92Iu91ou92Iu99uu8zuu89/zaa7n+Dd+Q69/wDVndey8X/+ZvuPi3f8vFv/kbVvfeywOJ/1ji+Vvdcw9XXXXVVVddddVVV131PxCVq6666qqrrrrqqv/h7rvvvlvvu+++W3/rt37re370R3/0c86cOfPgF3uxF3utF3/xF3/tF3uxF3vt69/wDbn+Dd8QgNW993Lxb/6Gu3/1V9n927/l30tcddVVV1111VVXXXXV/2pUrrrqqquuuuqqq/4Xue+++2697777bv2Hf/iH3/7RH/3Rz7nmmmse/GIv9mKv/WIv9mKv9Tqv8zrvPb/2Wq5/wzfk+jd8Q1b33svFv/kbdv/2b7n4N3/D6t57eVGIq6666qqrrrrqqquu+j+DylVXXXXVVVddddX/Yvfdd9+t991333f/1m/91nf/6I/+6OecOXPmQS/2Yi/22i/+4i/+2i/2Yi/22te/4Rty/Ru+IQCre+/l4t/8DXf/6q+y+7d/y/3EfwCJ+505c+ZBXHXVVVddddVVV1111f8M6EEPehBXXXXVVVddddVV/xddc801D36xF3ux136xF3ux13qd13md9+YBVvfey+7f/A0X//Zv2f2bv2F17738q0nc77o3eAMe8/EfD8DXf/3Xv89v/dZvfTdXXXXVVVddddVVV1313w896EEP4qqrrrrqqquuuuo/0jXXXPPg++6771b+B7nmmmsefObMmQe/2Iu92Gu9+Iu/+Gu/2Iu92GvzAKt772X3b/+Wu3/lV9j927/lBZK4n3i24y/5krz0l30ZAF//9V//Pr/1W7/13Vx11VVXXXXVVVddddV/P/SgBz2Iq6666qqrrrrqqn+Pa6655sEv9mIv9tpnzpx50Du90zt99n333Xfrj/7oj37Ob/3Wb303/0OdOXPmQS/+4i/+Oi/2Yi/2Wq/zOq/z3jzA6t572f2bv+Hi3/4tu3/zN6zuvRckxAt2/CVfkpf+si8D4DM/8zNf5x/+4R9+m6uuuuqqq6666qqrrvrvhx70oAdx1VVXXXXVVVdd9a91zTXXPPi1X/u13+vFX/zFX/vFXuzFXpvn4+3e7u3E/wLXXHPNg8+cOfPgF3uxF3utF3/xF3/tF3uxF3ttHmB1773s/u3fcs+v/iq7f/u3PD/HX/Ileekv+zIAPuRDPuQh9913361cddVVV1111VVXXXXVfz/0oAc9iKuuuuqqq6666qoXxTXXXPPg137t136v13md13nva6655sE80/499/DEX/xFnvRLv8QNL/MyvPanfioAb/d2byf+F7rmmmse/GIv9mKv/WIv9mKv9Tqv8zrvzQOs7r2X3b/9W3b/5m/Y/du/ZXXvvQAcf8mX5KW/7MsAeLu3eztx1VVXXXXVVVddddVV/zOgBz3oQVx11VVXXXXVVVc9P9dcc82DX/u1X/u9rrnmmge/zuu8znvzTPv33MMTf/EXAfiL7/ouHui1P/VTedSbvAkAH/IhH/KQ++6771b+Fztz5syDrrnmmoe82Iu92Gu9+Iu/+Gu/2Iu92GvzAKt772X3b/+W1T338OD3eA8A3u7t3k5cddVVV1111VVXXXXV/wxUrrrqqquuuuqqqx7gmmuuefBrv/Zrv9eLv/iLv/aLvdiLvTbPtH/PPTzxF3+Ru/7qr7jrr/8a8fzd8DIvw/8lZ8+efcbZs2ef8Q//8A+//aM/+qOfc8011zz4xV7sxV7rxV7sxV77dV7ndd57fu21XPcGb8D97rvvvlu56qqrrrrqqquuuuqq/zmoXHXVVVddddVV/69dc801D36xF3ux1z5z5syD3umd3umzeYC7/uqvuOuv/oo//67vAkBcIV6w7euu435nzpx58H333Xcr/4fcd999t9533323/tZv/db3/OiP/ujnnDlz5sEv9mIv9lov/uIv/toAX//1X/8+XHXVVVddddVVV1111f8cVK666qqrrrrqqv93rrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GvzTPv33MMTf/EXueuv/5q7/uqvuJ940TzqTd4EgFt/5Vc481Ivxf91991336333Xffrf/wD//w2z/6oz/6OVx11VVXXXXVVVddddX/PFSuuuqqq6666qr/F17sxV7stV/sxV7std7pnd7ps3mA/Xvu4Ym/+Is88Zd+if177uF+4l9n+7rreOSbvAkAh/feyxmuuuqqq6666qqrrrrqqv8BqFx11VVXXXXVVf8nXXPNNQ9+7dd+7fd68Rd/8dd5sRd7sdfimfbvuYcn/uIvAvDn3/VdPDfxotm+7jq2r7+e61/6pXn5931fHujonns4uucerrnmmgf/wz/8A1ddddVVV1111VVXXXXVfxsqV1111VVXXXXV/xnXXHPNg1/7tV/7vV7ndV7nva+55poH80z799zDE3/xF7nrr/+au/7qr3h+xL9s+7rreOSbvAk3vMzLcMPLvAwPtLr3XgDm117L/c6cOfMgrrrqqquuuuqqq6666qr/TlSuuuqqq6666qr/ta655poHv/Zrv/Z7AbzTO73TZ/NM+/fcw11/9Vfc9Vd/xZ9/13fxgoh/2fZ11/HIN3kTHvWmb8r2ddfxQKt77+WuX/kV7v7VX2V177085D3eg4e+53uyed11XHXVVVddddVVV1111VX/I1C56qqrrrrqqqv+V7nmmmse/Nqv/drv9eIv/uKv82Iv9mKvxTPt33MPT/zFX+Suv/5r7vqrv+KFES/Y9nXX8cg3eRO2r7+eR73Jm/BAq3vv5a5f+RUAnv5938cLc3jvvVx11VVXXXXVVVddddVV/+2oXHXVVVddddVV/yu82Iu92Gt/7ud+7m/xAPv33MMTf/EXeeIv/RL799zDCyNesO3rruORb/Im3PAyL8MNL/MyPNDy3nu5+1d+hd2//Vsu/s3f8MKI53TNNdc8mKuuuuqqq6666qqrrrrqvxOVq6666qqrrrrqf7wXe7EXe+13eqd3+qz9e+7hib/4iwD8+Xd9Fy8K8by2r7uOG17mZdi67jpe/n3flwda3nsvq3vu4eLf/A1P/77v40Uhrljdey8AG9dey9G993LNy73cg7nqqquuuuqqq6666qqr/jtRueqqq6666qqr/sd7ndd5nfd6sRd7sdf+rS/8Qp74S7/Ei0I8p+3rruORb/Im3PAyL8MNL/MyPNDy3nu5+1d+hYt/+7dc/Ju/AUC8aMSzLe+9F4DN667j6N57ueqqq6666qqrrrrqqqv+21G56qqrrrrqqqv+x3uxF3ux1wa466/+ihdGPKcbXuZluP6lX5qXf9/35bkt772Xu3/lV7jrV3+V1b33cj/xohEv3NE997Dgqquuuuqqq6666qqrrvpvRuWqq6666qqrrvof7XVe53Xe+5prrnkwwP499/D8iCu2r7uOR77Jm3DDy7wMN7zMy/BAy3vu4e5f/VWW997L3b/6qzw/4kUj/mUCzpw582Cuuuqqq6666qqrrrrqqv9OVK666qqrrrrqqv/RXuzFXuy1AJ74S7/EcxOwfd11PPJN3oRHvembsn3ddTzQ8p57uPtXf5WLf/M3XPzbv+UFES8a8UJIrO69F4DNa6/l8N57ueqqq6666qqrrrrqqqv+21G56qqrrrrqqqv+R3uxF3ux1wZ44i/9EgDb113Ho97kTQB4+fd9Xx5oec89rO69lwt/8zc87Xu/F/FMEi+I+JeJf4EEgLjqqquuuuqqq6666qqr/oehctVVV1111VVX/Y92zTXXPBjghpd+aV7+fd6HG17mZXig5T33cNev/ioX/+ZvuPg3f8P9xDNJvCDiXyb+BRIAAlb33gvAxnXXsbznHq655poHc9VVV1111VVXXXXVVVf9d6Jy1VVXXXXVVVf9j/U6r/M6780zvfz7vi/3u/g3f8OFv/kb7v6VX2F57708kPiXiReN+BdIiBfummuuefB99913K1ddddVVV1111VVXXXXVfwcqV1111VVXXXXV/3jLe+7hrl/9VS7+zd9w8W/+hhdEPBeJ5yb+ZeJfJonnZ3XvvcyvvZaN667jqquuuuqqq6666qqrrvpvR+Wqq6666qqrrvof68yZMw8CuOtXf5Wnfe/38sKI5yLx3MS/TPzLJPEvWd57LwBnzpx58H333XcrV1111VVXXXXVVVddddV/B4Krrrrqqquuuup/rLNnzz4DYHHddbww4rlIPJAA8cIJEC+cAEm8MKt77gFg49prueqqq6666qqrrrrqqqv+21G56qqrrrrqqqv+x7rvvvtuBVhcey0viHguEg8k/mXiXyYAiRdGPKeje+7hqquuuuqqq6666qqrrvpvRXDVVVddddVVV/2vJV448cIJEC+cAAFIvCACxHOSxNG993LNNdc8mKuuuuqqq6666qqrrrrqvwuVq6666qqrrrrqf6yzZ8/eCjC/7joeSLwAEvcTL5z4l4lnknhBxHNa3XsvABvXXstVV1111VVXXXXVVVdd9d+OylVXXXXVVVdd9b+KeAEk7ideOPHCiQeQeH7E87e6914AFtdeC8CZM2cexFVXXXXVVVddddVVV13134XKVVddddVVV131P9Z99913K8Di2msBEC+ceOHEv0y8cOJFI2B5zz1cddVVV1111VVXXXXVVf+tCK666qqrrrrqqv/R7rvvvlsBFtdeywskIV448cIJEM9F4oHECyee1zXXXPNgrrrqqquuuuqqq6666qr/LgRXXXXVVVddddX/aGfPnr0VYHHddTxfEuKFEy+ceD4k7idAvHDiivW99wKwcd11HN17L1ddddVVV1111VVXXXXVfyuCq6666qqrrrrqfzXxwokXTjwfEvcTL5wA8Wyre+4BYOO66wC45pprHsxVV1111VVXXXXVVVdd9d+F4Kqrrrrqqquu+h/tvvvuuxVgfu21PDdJvCACxAsmQDwfEgACxAsnXrjlvfdy1VVXXXXVVVddddVVV/23onLVVVddddVVV/2Pdt99990KsLjuOu4nAIkXRLxw4gWQABAvnHjRnTlz5sFcddVVV1111VVXXXXVVf9dqFx11VVXXXXVVf+riBdOvHDiBZAQL5z4l63vvReAxbXXsrz3Xq666qqrrrrqqquuuuqq/1ZUrrrqqquuuuqq/9HOnj37DID5tdcinkni+REvmHjhxAsnXjjxnMRVV1111VVXXXXVVVdd9T8Alauuuuqqq6666n+0++6771aAxXXXAYDE8yNeMPHCSeIFES+ceE6re+8FYHHttQi45pprHsxVV1111VVXXXXVVVdd9d+FylVXXXXVVVdd9b+aeOHECyYAiRdEvHDi+ZC439E993DVVVddddVVV1111VVX/bciuOqqq6666qqr/kc7e/bsrQCLa68FiQcSL5x4wQQg8fwIEC+YAPF8SACs7r0XgI3rrgPgmmuueTBXXXXVVVddddVVV1111X8HKlddddVVV1111f8OEg8kXjDxwokXTLxw4gWQEM9pec89XHXVVVddddVVV1111VX/rQiuuuqqq6666qr/0e67775bAebXXsv9xAsmXjAB4pkknpt4wQSIF0BCPNv63nsBWFx3HQBnzpx5MFddddVVV1111VVXXXXVfweCq6666qqrrrrqf7z77rvvVoD5tdciXjDxgokHkHggAeIFEy+YAPGCLe+9l6uuuuqqq6666qqrrrrqvw3BVVddddVVV131P9599913K8Diuut4QcQLJh5A4oHECyZAvGACkHhBxBXXXHPNg7nqqquuuuqqq6666qqr/jsQXHXVVVddddVV/6sJEM+fAPGCiRdMvGACBCDx/KzuvReAxXXXsbznHq666qqrrrrqqquuuuqq/zYEV1111VVXXXXV/3hnz569FWBx7bU8kHjBxPMhASBAPH8CxPMnQDyTxHMTIGB9770ALK69FoAzZ848iKuuuuqqq6666qqrrrrqvwPBVVddddVVV131P9599913K8Dxl3opjr/USwEgXjDxfEgAiBdMvGDiASSem3he4qqrrrrqqquuuuqqq676b0blqquuuuqqq676H+8f/uEffucf/uEffvvF3vANX/v6N3xDVvfey+7f/A0X/+Zv2P2bv2F1773cT7xg4vkTL5h4LhIPJF645b33ctVVV1111VVXXXXVVVf9t6EcP36cq6666qqrrrrqf7azZ8/eCujw8HD36Oho94aHPOTBWw97GGde7dW4+W3fluvf6I3YftjDaIeHrO69l+cmCfH8iRdMPBeJ+wkQz9/s2ms59aqvyvLee1necw/thhtu/dM//dOf4aqrrrrqqquuuuqqq676r0blqquuuuqqq676X+G3fuu3vvu3fuu3vhvgmmuuefCLvdiLvdaLvdiLvfbrvM7rvPf82mu57g3fkOve8A1Z3Xsvq3vuYfdv/obdv/1bLv3t3/KCiBdMvGDiBRMw3HsvAItrr2V5zz1cc801D+aqq6666qqrrrrqqquu+u9A5aqrrrrqqquu+l/nvvvuu/W+++679bd+67e+50d/9Ec/58yZMw9+sRd7sdd68Rd/8dd+sRd7sdeeX3stx1/qpQBY3Xsvu3/zN1z627/lnl/9VQDECyZeAAnxgonnTxJXXXXVVVddddVVV1111X8b9KAHPYirrrrqqquuuur/jmuuuebBL/ZiL/baL/ZiL/ZaL/ZiL/ba11xzzYN5gNW993Lpb/+We37lV7j0t3/LA4kXQEK8YOI5HXvJl+TFv+zLuPA3f8Ndv/ZrnH25l/vur//6r38frrrqqquuuuqqq6666qr/auhBD3oQV1111VVXXXXV/11nzpx50Iu/+Iu/zuu8zuu814u92Iu9Ng+wuvdeVvfcw32/9mus7rmHS3/7tzw3Sbwg4vmbXXstL/+938vy3nu5+Dd/wxO77ru//uu//n246qqrrrrqqquuuuqqq/6roQc96EFcddVVV1111VX/+a655poHv/Zrv/Z7/eiP/ujn8N/kmmuuefCZM2ce/GIv9mKv9eIv/uKv/WIv9mKvzQOs7r2XS3/zN1z627/l3l/9VSTxgojnT8Ds2mt5ue/9Xpb33gvAd/zYj73Pb/3Wb303V1111VVXXXXVVVddddV/NfSgBz2Iq6666qqrrrrqP94111zz4DNnzjz4xV7sxV7rnd7pnT6bZ/qt3/qt7/6t3/qt7/mHf/iH3+a/2TXXXPPgF3uxF3vtF3uxF3ut13md13lvnsv63nu599d+jUt/8zdc+tu/BUC8YOLZXvVXfoX7fciHfMhD7rvvvlu56qqrrrrqqquuuuqqq/6roQc96EFcddVVV1111VX/Ma655poHv/Zrv/Z7vfiLv/jrvNiLvdhr8Uz799wDwPZ11wHwmZ/5ma/zD//wD7/N/zDXXHPNg1/sxV7stV/ndV7nvV7sxV7stXmA1b33sve3f8ulv/kb1vfey6W//VvuJ57Xq/7Kr3C/t3u7txNXXXXVVVddddVVV1111X8HKlddddVVV1111b/ZNddc8+AzZ848+MVe7MVe653e6Z0+mwfYv+ceHv+Lv8hdf/3X3PlXf8Wj3+RNeL1P/VQArrnmmgf/wz/8A//T3Hfffbfed9993/1bv/Vb333NNdc8+MyZMw96ndd5nfe+5pprHvxiL/Zirz1/gzfgmjd4AwDW997Lpb/9W/b+5m+479d+jee2vvdeZtdey1VXXXXVVVddddVVV13134rKVVddddVVV131r3LNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVem2fav+ce9u6+mzv/6q/4s+/6Lp7bK7zP+3C/M2fOPIj/4e67775b77vvvlv/4R/+4XcArrnmmge/2Iu92Gu/2Iu92Gu9zuu8znvPrr2Wa97gDbjmDd6Am9/jPVjdey97f/u37P3N37D3d3/H/X7rt37ru7nqqquuuuqqq6666qqr/rtQueqqq6666qqrXqhrrrnmwWfOnHnwi73Yi73WO73TO302D7B/zz08/hd/kbv++q+586/+ihdEwM711wOw+zd/wzXXXPNg/pe57777br3vvvu++7d+67e+++u//uvf55prrnnwa7/2a7/Xi7/4i7/2i73Yi7327NprOfaSLwnv/u6s772X2bXXAnDffffdylVXXXXVVVddddVVV13134XKVVddddVVV131PK655poHv/Zrv/Z7vfiLv/hrv9iLvdhr8wB3/tVfcedf/RVP+KVfYv+ee3hhxBWPfpM3AeDeX/1VAK658cYH87/cfffdd+uP/uiPfs6P/uiPfs6ZM2ce9OIv/uKv82Iv9mKvdc011zz4xV7sxV4b4B/+4R9++x/+4R9+h6uuuuqqq6666qqrrrrqvwuVq6666qqrrrrqshd7sRd77Rd7sRd7rdd5ndd572uuuebBPNP+Pffw+F/8Re7667/mzr/6K14U4jnd8DIvA8Du3/4t82uugRtv5P+Ss2fPPuO3fuu3vvu3fuu3vhvgmmuuefCLvdiLvdZv/dZvfQ9XXXXVVVddddVVV1111X8nKlddddVVV131/9Q111zz4Nd+7dd+rxd/8Rd/7Rd7sRd7bR5g7557eMIv/iJP+KVfYv+ee3hRiee1fd11PPpN3gSAS3/zN8zf4A04c+bMg/k/7L777rv1vvvuu5Wrrrrqqquuuuqqq6666r8blauuuuqqq676f+Saa6558Gu/9mu/1+u8zuu89zXXXPNgnmnvnnt4wi/+Inf+9V9z11/9Ff9a4jltX3cdj36TN+HRb/qmbF93HQCre+9lfe+9XPrbv2Xxxm/MVVddddVVV1111VVXXXXVfwEqV1111VVXXfV/2DXXXPPg137t136vF3/xF3/tF3uxF3ttHmDvnnt4wi/+Io//pV9i/557EP964ort667j0W/yJtzwMi/DjS/zMjzQ6p57mF93HQ90zTXXPJirrrrqqquuuuqqq6666qr/fFSuuuqqq6666v+Ya6655sGv/dqv/V6v8zqv897XXHPNg3mmvXvu4Qm/+Ivs3XMPT/ilX+J+AsS/joDt667j0W/yJjz6Td+U7euu44FW99zD3b/6q1z8m79hdc89vOoP/AD3W997LwDXXHPNg++7775bueqqq6666qqrrrrqqquu+s9D5aqrrrrqqqv+j3id13md9/7wD//w7+IB9u65hyf84i/y+F/6JfbvuYcHEv8629ddx2Pe5E244WVehhtf5mV4oNU993Dxb/6G5b338vTv/V7E85pfey3i2c6cOfPg++6771auuuqqq6666qqrrrrqqqv+81C56qqrrrrqqv8DXud1Xue93+md3umz9+6+myf80i8B8Kff9V08P+JFt33ddTz6Td6Ex7zpm7J93XU80Oqee7jrV3+Vi3/91+z+7d9yP/G8Vvfcw/y665hdey3re+/lqquuuuqqq6666qqrrrrqvwiVq6666qqrrvo/4B3f8R0/68yZMw/6qY/8SO78q7/i+RH/su3rruPRb/Im3PgyL8ONL/MyPNDynntY3XsvF//mb3j6934vz494/lb33sv8uuuYX3stw733sr73Xq655poH/8M//ANXXXXVVVddddVVV1111VX/iahcddVVV1111f9yr/M6r/Pe11xzzYMB7vyrv+K5iRdu+7rrePSbvAmPedM3Zfu663ig5T33cPev/ioX/+ZvuPg3f8P9xPMSz594NnHF6p57OHPmzIO46qqrrrrqqquuuuqqq676z0Xlqquuuuqqq/6Xe7EXe7HXAnjCL/0SDySev+3rruPRb/Im7Fx/PY9+kzfhgZb33MPq3nu58Nd/zdO/93sBQOKBxPMSz5+4YnXPPfBSL8Xsuuvgb/8WgGuuuebBXHXVVVddddVVV1111VVX/eeictVVV1111VX/y73O67zOewP86Xd9FwDieW1fdx2PfpM34TFv+qZsX3cdD7S85x7u+pVf4eLf/A0X/+ZvABDPn3he4vkTz7a8914AZtdei4D1vfdyzY03Ppirrrrqqquuuuqqq6666qr/XFSuuuqqq6666n+x13md13lvgDv/6q/Yv/tuxBXb113Ho9/kTdi5/noe/SZvwgMt77mH5b33cvGv/5qnfe/38kJJ3E+86MRzWt1zDwDza68FYH3vvXDjjVx11VVXXXXVVVddddVVV/0no3LVVVddddVV/4u9zuu8znsBPOGXfont667j0W/yJjzmTd+U7euu44GW99zDXb/yK1z4m7/h4t/8DQDi+RPPSzx/4nmJ57W+914AZtddB8D63ns5c+bMg7nqqquuuuqqq6666qqrrvrPReWqq6666qqr/hd7sRd7sdcGeL1P/VQeaHnPPSzvvZcLf/3XPO17v5cXlXjRieclnpd4TgLW99zDVVddddVVV1111VVXXXXVfwEqV1111VVXXfW/1Iu92Iu9Ng+wvOce7vyVX+Hi3/wNF/7mb7ifeF7ieYnnIgEgnpd4XuIFW91zDwDza6/lftdcc82Dueqqq6666qqrrrrqqquu+s9F5aqrrrrqqqv+l1vecw+/+27vxvMjnpd40YnnJZ6XeP7EM0kAzK69FoD1vfcCcM011zz4vvvuu5Wrrrrqqquuuuqqq6666qr/HARXXXXVVVdd9X+UeNGJ5yWel3jRiWdb3Xsv95tfdx3iimuuuebBXHXVVVddddVVV1111VVX/echuOqqq6666qr/pc6ePXsr/0rieYnnJYkXlXhe4nnt/s3fADC79lrW994LwJkzZx7MVVddddVVV1111VVXXXXVfx4qV1111VVXXfW/1H333XcrwOK663hu4nmJ5yVedOJ5ieclnouEeE4C1vfey5kzZx7EVVddddVVV1111VVXXXXVfx6Cq6666qqrrvpf7B/+4R9+G+DkS70U9xP/PuJ5ieclnpd4XuKK1b33AjC/9loA1vfcw1VXXXXVVVddddVVV1111X8yKlddddVVV131/4B4XuJ5ieclnpd4XuJ5iWdb3XMPAP1114EEwDXXXPMQrrrqqquuuuqqq6666qqr/vMQXHXVVVddddX/Yvfdd9+tAIvrrgNAPC/xvMTzEs8k8cKI5yWelwAknh8Bw733cs011zyYq6666qqrrrrqqquuuuqq/zwEV1111VVXXfW/2H333XcrwPzaaxH/8cS/jXhe63vvBWB+7bUArO+9l6uuuuqqq6666qqrrrrqqv9kBFddddVVV131v9g//MM//A7AyZd+aZ4f8bzE8xLPSzwv8bzEv0zA6p57AOivvRaA9b33cs011zyYq6666qqrrrrqqquuuuqq/zxUrrrqqquuuur/KPG8xPMSDyABIJ6XeF7ieYlnknig9b33AjC79loEDPfey5kzZx7EVVddddVVV1111VVXXXXVfx6Cq6666qqrrvpf7OzZs7cCLK69lv8o4nmJ5yWel3he4oW75pprHsxVV1111VVXXXXVVVddddV/DoKrrrrqqquu+l/svvvuuxVgcd11PJB4XuJ5iX8b8bzE8xLPtrr3XgBm114LwHDvvQCcOXPmwVx11VVXXXXVVVddddVVV/3nILjqqquuuuqq/+Xuu+++WwEW110HgHhe4nmJ5yWel/iXieciIZ7X6t57AZhdey1XXXXVVVddddVVV1111VX/BQiuuuqqq6666n+5s2fP3gqwuO46XlTieUniuYnnJZ6TeF7ieQlY33MPALNrr2W4914Arrnmmgdz1VVXXXXVVVddddVVV131n4Pgqquuuuqqq/6Xu++++24FmF97LeJ5iX8b8bzEv0w8L/G8BOz/zd9w5syZB3HVVVddddVVV1111VVXXfWfg+Cqq6666qqr/pe77777bgVYXHstz008L/G8xL9MPC/xnAQg8UDi2Vb33gvA7Nprueqqq6666qqrrrrqqquu+i9A5aqrrrrqqqv+lzt79uwzABbXXce/RDwv8bzEcxLPS/zLxHNa3XMPAP111wEw3Hcf11xzzYO56qqrrrrqqquuuuqqq676z0Fw1VVXXXXVVf/L3XfffbcCLK67jgcS/zLxTBL3E/8y8bzEcxLPS1wxu/ZaBAz33ss111zzYK666qqrrrrqqquuuuqqq/5zULnqqquuuuqq/+XOnj17K8D8uuu4n3he4l8mnpd4TuJ5iWeSABDPS8Clv/1bAPprr+V+Z86ceTBXXXXVVVddddVVV1111VX/OQiuuuqqq6666v8B8bzEv0z8y8S/TDx/wz33cNVVV1111VVXXXXVVVdd9Z+I4Kqrrrrqqqv+l7vvvvtuve+++25dXHsti+uuQ/zLxPMSz0k8L/GcxPMSz0k82+qeewCYXXstAoZ77+Waa655MFddddVVV1111VVXXXXVVf85CK666qqrrrrq/4CzZ8/eCjC/9lqem/gXSIh/mfiXieckXrjh3nsBuOaaax7MVVddddVVV1111VVXXXXVfzyCq6666qqrrvo/5ORLvRQnXuqleGHEv0w8J/G8xHOSxL9kuPdeAPprrwUJccWZM2cezFVXXXXVVVddddVVV1111X88KlddddVVV131f8CP/MiPfM47vuM78uLv9V6vDbC85x4u/s3fsPs3f8Pqnnu4+Dd/A4B4XuI5iX+ZeE7ieYnnJK5Y33svs2uvZXbttQz33MNVV1111VVXXXXVVVddddV/Isrx48e56qqrrrrqqv/tzp49e6skDg8Pdzc3N48fv/ba49sPfzhnXu3VuP6N3ogb3uiN2H74w+m2tjh46lO5nwAkHkg8J/GcxHMSzyRxP/GcxLOdfNVXZX7ddVz6oz9iuPdeTr7hG/KEZzzjd2699da/5qqrrrrqqquuuuqqq6666j8Wlauuuuqqq676P+K3fuu3vue3fuu3vgfgmmuuefCLvdiLvfaLvdiLvdbrvM7rvPf8uuu4/rrruP6N3ojHfOInsrrnHi7+zd9wz6/8Crt/+7fcTzwn8ZzECyBxP/GcxPM3u/ZaDoHh3ns5c+bMg7jqqquuuuqqq6666qqrrvqPR+Wqq6666qqr/g+67777br3vvvu++7d+67e++0d/9Ec/B+DFXuzFXvt1Xud13uvFXuzFXnt+3XVcf911XP9Gb8TqnntY3Xcfu3/91+z+zd+w+zd/A4D4l4nnJJ6TeF57f/M3HHupl6K79loA+muv5ezv/u4zuOqqq6666qqrrrrqqquu+o9H5aqrrrrqqqv+j7vvvvtuBbjvvvu++7d+67e++8yZMw+65pprHvJiL/Zir/XiL/7ir/1iL/Zirz2/7jqOv+RLArC65x52/+ZvuPQ3f8Pq3nvZ/Zu/AUA8J/GvJ56LRH/ttdx33323ctVVV1111VVXXXXVVVdd9R8PPehBD+Kqq6666qqr/j+75pprHvxiL/Zir/ViL/Zir33NNdc8+MVe7MVemwdY3XMPl/7mb9j9m7/h3l/9VQDEc5EQz0k8J3HFNW/4hjz8Ez6Bi7/2axz87d9y88d9HG/3dm8nrrrqqquuuuqqq6666qqr/uOhBz3oQVx11VVXXXXVVc92zTXXPPjFXuzFXvvFXuzFXut1Xud13pvnsrrnHi79zd9w6W/+hnt/9VdBQjwn8ZzEs+281Evx4l/+5Rz87d8y3nsvf13rd3/913/9+3DVVVddddVVV1111VVXXfUfDz3oQQ/iqquuuuqqq656wa655poHv9iLvdhrv87rvM57vdiLvdhr8wCre+5BEvf+yq9w6W//lkt/8zeI5ySe0/zaa3nZ7/9+hnvvBeBbf+zH3ue3fuu3vpurrrrqqquuuuqqq6666qr/eOhBD3oQV1111VVXXXXVi+bMmTMPuuaaax7yYi/2Yq/14i/+4q/9Yi/2Yq/NA6zvvZfVPfdw36/+Kut772Xvb/6GBxIwu/ZaXvb7v5/h3nvpr72WD/mQD3nIfffddytXXXXVVVddddVVV1111VX/8dCDHvQgrrrqqquuuuqqf5trrrnmwS/2Yi/2Wi/2Yi/22tdcc82DX+zFXuy1eYD1vfdy6W/+hr2/+RvW997L3t/8DQCv8mu/xv3e7u3eTlx11VVXXXXVVVddddVVV/3nQA960IO46qqrrrrqqqv+Y1xzzTUPfrEXe7HXfrEXe7HXerEXe7HXvuaaax7MA6zvvZe9v/kbdl7qpZhdey2/9Vu/9T1f//Vf/95cddVVV1111VVXXXXVVVf950APetCDuOqqq6666qqr/nNcc801D36xF3ux136xF3ux13qd13md9+a5fP3Xf/37/NZv/dZ3c9VVV1111VVXXXXVVVdd9Z8DPehBD+Kqq6666qqrrvqvcc011zz4xV7sxV77dV7ndd7rR37kRz7nH/7hH36bq6666qqrrrrqqquuuuqq/zzoQQ96EFddddVVV1111VVXXXXVVVddddVVV1111f9JVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8V/wi9Xa3Gye3YywAAAABJRU5ErkJggg==) @@ -143,11 +149,7 @@ exampleSketch = startSketchOn('XZ') |> close() example = extrude(exampleSketch, length = 1) - |> patternLinear3d({ - axis = [1, 0, 1], - instances = 7, - distance = 6 - }, %) + |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6) |> appearance(color = '#ff0000', metalness = 90, roughness = 90) ``` @@ -161,12 +163,12 @@ exampleSketch = startSketchOn('XZ') |> line(end = [-1, 0]) |> line(end = [0, -5]) |> close() - |> patternCircular2d({ + |> patternCircular2d( center = [0, 0], instances = 13, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) example = extrude(exampleSketch, length = 1) |> appearance(color = '#ff0000', metalness = 90, roughness = 90) diff --git a/docs/kcl/helix.md b/docs/kcl/helix.md index a863b961b..bb26ef3f3 100644 --- a/docs/kcl/helix.md +++ b/docs/kcl/helix.md @@ -33,7 +33,14 @@ helix(revolutions: number, angle_start: number, ccw?: bool, radius: number, axis ```js // Create a helix around the Z axis. -helixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = 'Z') +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 5, + length = 10, + radius = 5, + axis = 'Z', +) // Create a spring by sweeping around the helix path. springSketch = startSketchOn('YZ') @@ -49,7 +56,14 @@ helper001 = startSketchOn('XZ') |> startProfileAt([0, 0], %) |> line(end = [0, 10], tag = $edge001) -helixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = edge001) +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 5, + length = 10, + radius = 5, + axis = edge001, +) // Create a spring by sweeping around the helix path. springSketch = startSketchOn('XY') @@ -61,12 +75,19 @@ springSketch = startSketchOn('XY') ```js // Create a helix around a custom axis. -helixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = { +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 5, + length = 10, + radius = 5, + axis = { custom = { axis = [0, 0, 1.0], origin = [0, 0.25, 0] } -}) +}, +) // Create a spring by sweeping around the helix path. springSketch = startSketchOn('XY') diff --git a/docs/kcl/loft.md b/docs/kcl/loft.md index ba48f202d..e71948b0f 100644 --- a/docs/kcl/loft.md +++ b/docs/kcl/loft.md @@ -93,11 +93,17 @@ circleSketch0 = startSketchOn(offsetPlane('XY', 75)) circleSketch1 = startSketchOn(offsetPlane('XY', 150)) |> circle({ center = [0, 100], radius = 20 }, %) -loft([ +loft( + [ squareSketch, circleSketch0, circleSketch1 -], baseCurveIndex = 0, bezApproximateRational = false, tolerance = 0.000001, vDegree = 2) +], + baseCurveIndex = 0, + bezApproximateRational = false, + tolerance = 0.000001, + vDegree = 2, +) ``` ![Rendered example of loft 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAIYp0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVdd9b/eNddc82Ce6cyZMw/mma655poH8yK47777buUBzp49e+t99913K1ddddVVV1111VVX/W9H5aqrrrrqqquuuuqq/7GuueaaBwO82Iu92GufOXPmQQDXXHPNg6+55poHnzlz5sHXXHPNg3ku9913363XXHPNg/kPct99990KcPbs2Vvvu+++WwH+4R/+4XcA7rvvvlv/4R/+4be56qqrrrrqqquuuup/KvSgBz2Iq6666qqrrrrqqqv+e11zzTUPPnPmzINf7MVe7LUAXvzFX/y1X+zFXuy1+RdcvHgRgIsXLwJw8eJF7nfx4kX+NU6cOMH9Tpw4AcCJEyc4ceIE/5L77rvv1rNnz95633333foP//APv3Pffffd+g//8A+/zVVXXXXVVVddddVV/93Qgx70IK666qqrrrrqqquu+q91zTXXPPi1X/u13wvgnd7pnT6b5+PixYsAPO1pT+PixYsAPP3pTwfg4sWLXLx4kf9KJ06cAOChD30oAA95yEMAOHHiBA996EN5fu67775b/+Ef/uG3/+Ef/uF37rvvvlv/4R/+4be56qqrrrrqqquuuuq/EnrQgx7EVVddddVVV1111VX/ua655poHv/Zrv/Z7XXPNNQ9+ndd5nffmuVy8eJGnP/3pXLx4kac97Wk8/elP5z+bbf4jnThxghMnTnDixAke8pCHcOLECR760IfyQPfdd9+t//AP//Db//AP//A7v/Vbv/XdXHXVVVddddVVV131nw096EEP4qqrrrrqqquuuuqq/xzv+I7v+Fkv/uIv/tov9mIv9to8wMWLF/nLv/xLnva0p/H0pz+d/6tOnDjB8ePHOXHiBC/7si/LQx/6UO5333333Xr27Nlbf+u3fut7fuu3fuu7ueqqq6666qqrrrrqPwN60IMexFVXXXXVVVddddVV/3GuueaaB7/Yi73Ya3/4h3/4d/FMFy9e5C//8i952tOextOf/nT+vzpx4gTHjx/n5V7u5XjZl31Z7nfffffd+lu/9Vvf/du//dvfc999993KVVddddVVV1111VX/UdCDHvQgrrrqqquuuuqqq67697vmmmse/GIv9mKv/eEf/uHfxTM97WlP4y//8i/5y7/8S656TidO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SEISEYEkJCEJSUhCEpKQhCQAJCEJSUgCQBKSAJCEJAAkASAJSQBIAkASL/uyL8s111zDH/3RH3HHHXcAIAkASQBIAkASAJIAkASAJAAkASAJSQBIQhKSAJCEJCQhCUlIQhKSkEREIImIQBIRgSQigoggIogIIgJJRASSiAgigoggIiilEBGUUogISimUUiilUEqhlEJEUEqhlEIphYggIogIIoKIQBKSkIQkJPH82AbANraxjW1sk5lkJplJZpKZ2MY2trFNZpKZ2MY2mYltbANgm+fHNrYBsM0D2ea5SeK5SeJ+knhuknhuknhukgCQxAOt12tmsxk33XQTOzs7PO5xj+PfShLPTRIPZJsHss1zsw2AbWxzP9u01ogIAG6//Xb+6q/+iqOjIx70oAcdf+3Xfu23ft3Xfd332djYOPYP//APv8NVV1111VVXXfX/BeX48eNcddVVV1111VX/t11zzTUPfrM3e7OP+tzP/dzffvEXf/HXXq1Wx3/913+db/iGb+CJT3witrGNbVpr1FoppVBKISKICCICSUQEkogIJCEJSUhCEpKQhCQkIQlJSEISAJKQBIAkJAEgCUkASEISAJIAkIQkAN7qrd4KgF/91V9lvV4jiftJAkASAJIAkASAJAAkIQkASQBIQhKSAJCEJCQhCQBJSEISEYEkJCGJiEASEYEkIoKIQBKSiAgigoggIogIIoKIICKICCKCUgoRQSmFUgqlFCKCiCAiiAgigoggIogISilEBJKICCQhCUlIQhLPj23uZxvb2MY2mYltbGMb29jGNraxjW1sY5vMxDa2sY1tAGxjG9vYxja2AbANgG3+NSRxP0ncTxLPTRLPTRIAknhukrjf/v4+L/3SLw3A2bNn2dvb44WRxItCEi+Ibe5nG9vczzb3sw2Abe43TRMRAcByueSJT3wif/VXf8VyuWRzc/P4a73Wa73267zO67z35ubm8bNnzz7j8PBwl6uuuuqqq6666v8yKlddddVVV1111f9Z11xzzYPf8R3f8bNe53Ve570Bzp8/zx/8wR/wcz/3c9gGwDa2sc00TdRaiQgkIQlJSEISkpCEJAAkIQlJSEISkpCEJCTx3CRxP0ncTxL3k8Rzk8T93viN3xiAxz3ucezt7fFAkgCQBIAkACQBIAkASdxPEgCSeCBJPDdJSEISknggSQBIAkAS95OE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Vf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q/iHwFQHN4Y8XkqbAAAAABJRU5ErkJggg==) diff --git a/docs/kcl/patternCircular2d.md b/docs/kcl/patternCircular2d.md index c6066700c..410f80c4e 100644 --- a/docs/kcl/patternCircular2d.md +++ b/docs/kcl/patternCircular2d.md @@ -9,7 +9,7 @@ Repeat a 2-dimensional sketch some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained. ```js -patternCircular2d(data: CircularPattern2dData, sketch_set: SketchSet) -> [Sketch] +patternCircular2d(sketch_set: SketchSet, instances: integer, center: [number], arc_degrees: number, rotate_duplicates: bool, use_original?: bool) -> [Sketch] ``` @@ -17,8 +17,12 @@ patternCircular2d(data: CircularPattern2dData, sketch_set: SketchSet) -> [Sketch | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`CircularPattern2dData`](/docs/kcl/types/CircularPattern2dData) | Data for a circular pattern on a 2D sketch. | Yes | -| `sketch_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | A sketch or a group of sketches. | Yes | +| `sketch_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | Which sketch(es) to pattern | Yes | +| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `center` | `[number]` | The center about which to make the pattern. This is a 2D vector. | Yes | +| `arc_degrees` | `number` | The arc angle (in degrees) to place the repetitions. Must be greater than 0. | Yes | +| `rotate_duplicates` | `bool` | Whether or not to rotate the duplicates as they are copied. | Yes | +| `use_original` | `bool` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns @@ -34,12 +38,12 @@ exampleSketch = startSketchOn('XZ') |> line(end = [-1, 0]) |> line(end = [0, -5]) |> close() - |> patternCircular2d({ + |> patternCircular2d( center = [0, 0], instances = 13, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) example = extrude(exampleSketch, length = 1) ``` diff --git a/docs/kcl/patternCircular3d.md b/docs/kcl/patternCircular3d.md index d31009197..cc205ccf7 100644 --- a/docs/kcl/patternCircular3d.md +++ b/docs/kcl/patternCircular3d.md @@ -9,7 +9,7 @@ Repeat a 3-dimensional solid some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained. ```js -patternCircular3d(data: CircularPattern3dData, solid_set: SolidSet) -> [Solid] +patternCircular3d(solid_set: SolidSet, instances: integer, axis: [number], center: [number], arc_degrees: number, rotate_duplicates: bool, use_original?: bool) -> [Solid] ``` @@ -17,8 +17,13 @@ patternCircular3d(data: CircularPattern3dData, solid_set: SolidSet) -> [Solid] | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`CircularPattern3dData`](/docs/kcl/types/CircularPattern3dData) | Data for a circular pattern on a 3D model. | Yes | -| `solid_set` | [`SolidSet`](/docs/kcl/types/SolidSet) | A solid or a group of solids. | Yes | +| `solid_set` | [`SolidSet`](/docs/kcl/types/SolidSet) | Which solid(s) to pattern | Yes | +| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `axis` | `[number]` | The axis around which to make the pattern. This is a 3D vector | Yes | +| `center` | `[number]` | The center about which to make the pattern. This is a 3D vector. | Yes | +| `arc_degrees` | `number` | The arc angle (in degrees) to place the repetitions. Must be greater than 0. | Yes | +| `rotate_duplicates` | `bool` | Whether or not to rotate the duplicates as they are copied. | Yes | +| `use_original` | `bool` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns @@ -32,13 +37,13 @@ exampleSketch = startSketchOn('XZ') |> circle({ center = [0, 0], radius = 1 }, %) example = extrude(exampleSketch, length = -5) - |> patternCircular3d({ + |> patternCircular3d( axis = [1, -1, 0], center = [10, -20, 0], instances = 11, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) ``` ![Rendered example of patternCircular3d 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAGU+ElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrvpvdc011zz4tV/7td/rxV/8xV/7zJkzD77mmmsefN999936D//wD79933333fqjP/qjn8NVV1111VVXXXXVVVf921C56qqrrrrqqquuuuq/3DXXXPPg137t136vd3qnd/psno9rrrnmwX3fv/cwDLcC/OiP/ujncNWL7JprrnkwD3DffffdylVXXXXVVVddddX/T1Suuuqqq6666qqrrvov82Iv9mKv/eEf/uHfdc011zyYZ9rf3+fxj388t99+O894xjNordFaYxxHNjY2Hvze7/3en/0P//APv/MP//APv81Vz+Gaa6558JkzZx78Yi/2Yq/14i/+4q/9Yi/2Yq/NA9x33323XnPNNQ8GuO+++249e/bsrX//93//2//wD//wO//wD//w21x11VVXXXXVVVf934ce9KAHcdVVV1111VVXXXXVf64Xe7EXe+0P//AP/65rrrnmwQCHh4fcfffdPPzhD2d/f5/v+77vo7VGa43WGq01pmliHEc2NjZ42tOe9pD77rvvVq7immuuefBrv/Zrv9eLv/iLv/aLvdiLvTbPx/7+PgC2AdjZ2eG5/cM//MNv/8iP/Mjn/MM//MNvc9VVV1111VVXXfV/F3rQgx7EVVddddVVV1111VX/Oa655poHf/iHf/h3vdiLvdhrA6xWK57xjGfwN3/zN3Rdxxu8wRuwtbXFE5/4RH7913+d1hqZSWuNaZqYpolxHBmG4buf+MQnvg//j73O67zOe7/O67zOe73Yi73Ya9933323XnPNNQ8GWC6X3H777dxzzz1cvHiRixcvMk0T4zjSWqO1RmuNra0tbrrpJm666SZe8iVfkvv9yI/8yGf/6I/+6Odw1VVXXXXVVVdd9X8TetCDHsRVV1111VVXXXXVVf+xrrnmmge/9mu/9nu90zu902cDtNY4f/48T3nKUzg4OODo6IjVasVsNuNt3uZtAPiZn/kZbr/9djKT1hqtNaZpYpom5vM5f/mXf/k66/X6t/l/5nVe53Xe+x3f8R0/65prrnkwz3TrrbeyXq+55557mKaJYRhYr9es12uGYWAYBqZpYpomWmu01shMWmu01tje3ubDP/zDud/Xf/3Xv89v/dZvfTdXXXXVVVddddVV//dQjh8/zlVXXXXVVVddddVV/3Fe7MVe7LW/4iu+4q9e/MVf/LUBbLO3t8f+/j6tNVprZCa2Wa/XtNa47rrruPHGG7n11lsZhoHntl6vmc/nr723t/cztnf5f+DFXuzFXvtzP/dzf+t1Xud13ntzc/P40dERT3/60/mLv/gL9vb2ODo6QhIAtslMMpPMxDa2sc39bGMbgNVqxc0338zx48e5ePEir/Var/XWZ8+efcatt97611x11VVXXXXVVVf930I5fvw4V1111VVXXXXVVVf9+11zzTUPfp/3eZ+vet/3fd+vBogIFosFEQGAbVprZCatNTKTzGR/f5/jx49z6tQpzpw5wxOe8ASen1LKcdvHDw8Pf4b/w6655poHf9InfdJPvdM7vdNnb25uHj84OOAv/uIv+Iu/+AsuXrxIKYVSChGBJABsY5vMJDPJTGyTmdjGNraxDYBtdnd3eamXeilWqxW/8Au/wJu+6Zu+9C/8wi98DVddddVVV1111VX/t1COHz/OVVddddVVV1111VX/Pi/2Yi/22p/0SZ/0Uy/+4i/+2gCSWCwWlFKICO6XmWQmmUlrjcxkvV5z9913c/PNN3Pq1CkigrvuuovnZz6fv/QwDKxWq9/h/6DXeZ3Xee/P/dzP/a1rrrnmwfv7+/z93/89v/Vbv8Xu7i4RQUQQEZRSiAgkIQkA22QmmUlmYhvb2MY2trENgG1s88hHPpITJ07wh3/4h1x//fXH77777t85e/bsrVx11VVXXXXVVVf930E5fvw4V1111VVXXXXVVVf9273jO77jZ33ER3zEd29ubh6fpond3V0iglIKpRQiAkkA2CYzaa2RmWQmtlmv1yyXS2655Ra2t7c5f/48+/v7PD+11gcfHBz8TWvtVv4P+fAP//Dveqd3eqfPBrjzzjv5sR/7Me655x4kIQlJRASlFEopRAQRgSQAbJOZZCaZSWZiG9vYxjYAtrHNarWi73se/OAHc+LECX7jN36Dm2+++dZ/+Id/+B2uuuqqq6666qqr/u+gHD9+nKuuuuqqq6666qqr/m0+93M/97de53Ve570B7r77bu666y4kERGUUogISilEBJIAsE1rjcyktUZmkplcuHCB1hoPetCDuPHGG/m7v/s77icJ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V1111VVXXfW/D+X48eNcddVVV1111VVXXQUf/uEf/t2bm5vHv/M7v5PVaoUkJCEJSUhCEveTBIAkACQBIAkASUgCQBKSkIQkJAEgiYggIogISilEBBHB/TKTzKS1RmaSmazXa+6++24e85jHcPr0aQ4ODjh37hzPz2w2e+nlcvmMYRj+mv9mZ8+efcabvumbvvXv//7vH6+1UkohIogIJCEJSUgiIpCEJCQhCUlIQhKSkEREEBFEBKUUSilEBBGBJABsk5m01shMbJOZ2OZ+trGNbVarFTs7O1x33XUAPOUpT3nw3t7e93DVVVddddVVV131vw/BVVddddVVV1111VWXXXPNNQ9+0pOexNmzZ5mmidYarTUyk8wkM8lMMhPbZCaZSWaSmWQmmUlrjcwkM2mt0VqjtUZrjdYa0zQxjiPjOLJer1kulyyXS9brNeM4kplEBLPZjMViwebmJhsbG2xsbDCfz5nNZnRdx3K55A/+4A8AeIVXeAWOHTtGRBARRASlFEopdF3Hdddd91mllAfz3+y+++679bM/+7MfcuzYsVunaaK1RmaSmdjGNraxjW1sYxvb2AbANraxTWaSmbTWaK3RWiMzsY1tJBERlFIopVBrpZRCRBARRASSkIQkJBERRAS/93u/B8BDH/pQ+r5/MFddddVVV1111VX/O1GOHz/OVVddddVVV1111f9311xzzYNf8RVf8a1//dd//fidd96JJCQREUhCEpKQhCTuJwkASQBIQhIAkpCEJCQBIAlJRAQAkpCEJCKCUgqlFCICSUgCwDaZSWuN1hqZiW3Onz/PxsYG119/PQ996EP5u7/7O56fUsrxjY2Nt7548eLX8D/A7u7upb7v37rWSimFiCAikIQkJCEJSUhCEhGBJCQhCYCIQBIRQSmFiKCUQkRQSiEikIRtbNNaIzPJTGxjG9vYxja2AbDNarXilltu4brrrmNvb+/4nXfeyXK5/B2uuuqqq6666qqr/nehHD9+nKuuuuqqq6666qr/7w4PD3cf8pCHvPTZs2df+s4770QSkgCQhCQkIQlJAEjifpIAkIQkJAEgCUlIQhKSkIQkJCEJSUgiIogISilEBBFBRABgm8yktUZmkpnYJjM5f/48N998M9vb20jirrvu4vmJiOPjOLJarX6H/367Xdd9dK2VUgqlFCQREUgiIpCEJCICSUhCEpKQhCQigohAEhFBRFBKoZRCKYWIQBIAmUlmkplkJpmJbTIT29gGwDa2sc3Fixd5qZd6KW644Qb+7M/+7MEXL178Gq666qqrrrrqqqv+d6EcP36cq6666qqrrrrqqqvg8PDw0s0338xTn/rUl5aEJCQhCUlIQhKSAJAEgCQAJAEgCUlIQhIAkpCEJCQhCUlIQhIAkpBERFBKISKICCQBYJvMJDNprZGZZCbr9Zpz587x8Ic/nO3tbc6fP8/+/j4AkrANgCRqrQ8+PDz8m9barfw3krQ7TdODu6576VorpRQkIYmIQBKSkIQkJCEJSUhCEpKQhCQkERFEBKUUSilEBKUUIoL7ZSatNTKTzCQzsY1tAGxjG9vYxjaPfOQjOX78OLfddtvxO+6443emabqVq6666qqrrrrqqv89KMePH+eqq6666qqrrrrqKjh79uyt586d+5v77rvvb+bz+VtLQhIAkpCEJCQhCQBJAEjifpKQhCQAJCEJSUgCQBKSiAgAJCEJSUiilEIphYggIpCEbWyTmWQmmUlmYpuDgwNaazzoQQ/ixhtv5O/+7u94fkopx+fz+WtfvHjxa/hv1lq71Pf9e9daiQhKKUQEEYEkJBERSEISkpCEJCQhCUlEBBFBRBARRASlFEopRAQRgSQAMpPMpLVGZpKZ2CYzsY1tbGMbgNVqRd/3PPjBDwbgKU95yoP39va+h6uuuuqqq6666qr/PSjHjx/nqquuuuqqq6666qorDg8PdyPir6dpenDf9y8dEUhCEpKQhCQkASAJAEkASAJAEpKQBIAkJCEJSUhCEpKQhCQkIQlJRASlFEopRAQRgSRsY5vWGplJaw3bZCZ7e3ucOHGCU6dOsbOzw9Of/nRs89wi4rikBx8eHv4M/40i4lbbr9113YNrrUQEEYEkJCEJSUhCEpKICCQhCUlIQhKSiAgkERGUUiilUGslIogIAGyTmWQmmUlmkpnYxja2sY1tAGyzu7vLK77iK7JYLPjDP/xDlsvl30zTdCtXXXXVVVddddVV/ztQjh8/zlVXXXXVVVddddVVz2mapr/puu6tI+K4JAAkEREASAJAEpIAkMT9JCEJSUgCQBIAkpCEJCQhCUlIAkASkogIIoJSChGBJCRhm8wkM8lMWmtkJuv1mrvvvpvHPOYxnD59GkncddddPD+z2eylx3FktVr9Dv+NWmvquu6ta62UUogIIgJJSEISkpBERCAJSUhCEpKQREQgiYiglEJEUEqhlEIphYhAErbJTDKT1hqtNTIT29jGNrYBsI1tVqsVt9xyC9dddx2llONPetKTbl0ul7/DVVddddVVV1111f8OlOPHj3PVVVddddVVV1111XOStLter3+m67qPLqUQEQBIIiIAiAgAJAEgCQBJAEhCEpKQhCQkIQlJAEgiIpCEJCQhCUlIopRCRFBKQRKSALBNa43WGplJZmKb1WrF3t4et9xyCzs7O9x6660Mw8Bzk0St9cEHBwd/01q7lf8mtne7rvvoUgq1ViKCiEASkpCEJCICSUhCEpKICCQhCUlIIiKICCKCUgq1VkopRASSALBNa43MpLWGbTKTzOR+trGNbWxz8eJFXuqlXooTJ07wZ3/2Zw++ePHi13DVVVddddVVV131vwPl+PHjXHXVVVddddVVV131vCTtLpdL5vP5a0siIpCEJCQBIAlJSAJAEveThCQAJAEgCUkASEISkpCEJCQBIAlJRASlFCKCiEASkrCNbTKT1hqZSWZim/Pnz7OxscH111/PQx/6UP7u7/6O56eUcnyxWLz2xYsXv4b/JpJ2M/O1u657cK2ViCAiiAgkIQlJSEISkpCEJCQhCUlIIiKQREQQEZRSKKUQEZRSiAgAbJOZtNbITFprZCa2sY1tbGMb2wDY5pprruG6667jtttuO3777bf/zjRNt3LVVVddddVVV131Px/l+PHjXHXVVVddddVVV131/Nl+hu2X7rruwRGBJAAkIQlJSEISAJIAkASAJO4nCQBJSEISkpCEJCQhCUlIQhKSiAgigoggIogIAGxjm9YarTUyk8zENufPn+fmm29me3ubnZ0dnv70p/P8RMRx4MGHh4c/w3+T1tozuq57767rKKUQEUgiIpBERCAJSUgiIpCEJCQhCUlIQhKSKKUQEZRSKKVQSiEikARAZpKZtNbITGyTmdjGNraxDYBtVqsVtnnUox7FiRMn+Lu/+7sH7+3tfQ9XXXXVVVddddVV//NRjh8/zlVXXXXVVVddddVVz5+k3XEcf6fruo+OCCQhCUlIQhKSkIQkACRxP0lI4n6SAJCEJAAkIYmIQBKSkIQkJBERRAQRQSmFiEASALbJTDKTzCQzyUzW6zXPeMYzeMxjHsPp06e5++672d/fB0AS95PE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kIQkACQhCQBJSEISEYEkJCEJSQBIIiKICCKCiEASALaxTWuNzCQzsU1mcuHCBa655hpOnTrFmTNneOITn8jzU0o5vrGx8dYXL178Gv6TSdrNzNfuuu7BtVYigoggIpCEJCQREUhCEpKQREQgCUlIIiKICCKCiKCUQimFUgqlFEopSMI2mUlrjcyktUZmkpnYxja2sQ2AbVarFbZ50IMehCSe8pSnPPjSpUvfw1VXXXXVVVddddX/DJTjx49z1VVXXXXVVVddddV/nGma/iYi3rrWelwSkpCEJCQhCUlIAkASAJIAkIQkJCEJSUhCEpKICCQREUhCEpIAkIQkJBERRAQRgSQAbJOZZCatNTKTzMQ2d911FzfffDOnTp1CEnfeeSfPzTa11uPjOLJarX6H/2TjOKrv+7fuuo5SChGBJCICSUhCEpKQhCQkIQlJSEISkogIJBERRAS1VkoplFKICCIC22QmmUlrjdYamYltbGOb+9nGNra5ePEir/iKr8hiseCP/uiPWC6XfzNN061cddVVV1111VVX/fejHD9+nKuuuuqqq6666qqr/uNI2l2v13/T9/17RwSSAJCEJCQhCUlIAkASAJIAkIQkACQhCYCIQBIRgSQiAklIQhIAkpBERBARSCIikASAbTKTzCQzyUwyk/V6zblz53j4wx/Ozs4O58+fZ39/nweShG26rnvw4eHh37TWbuU/127XdR9da6XWSkQQEUgiIpCEJCQhCUlEBJKQhCQkIQlJRAQRQSmFUgq1VmqtlFKICABs01qjtUZrjcwkM7FNZmIb29jGNgDL5ZJbbrmF6667jv39/ePPeMYzbl0ul7/DVVddddVVV1111X8/yvHjx7nqqquuuuqqq6666j+WpFvX6zWz2ey1IwJJSCIikIQkJCEJAEkASAJAEpKQBIAkJCEJSUhCEpKICCQBIAkASUgiIogIIoKI4H62yUxaa2QmtslM9vf3yUwe9KAHceONN/J3f/d3PD+llOPz+fy1L168+DX8J5K0O03Tg7uue+laKxFBRBARSEISkpBERCAJSUhCEpIAiAgkERFEBBFBKYVSCrVWaq1EBJIAyExaa7TWaK2RmWQmtrGNbWxjm/tdvHiRl3qpl+L666/nz//8zx984cKFr+Gqq6666qqrrrrqvx/l+PHjXHXVVVddddVVV131Hy8zn2H7pbuue3BEIAkASUhCEpKQBIAkACQBIAlJSAJAEpKQhCQiAklIQhKSkIQkJAEgiYggIpBERCAJ29gmM8lMMpPMxDb7+/ucOHGCU6dOsbOzw9Of/nTuJ4n7lVKOS3rw4eHhz/CfaJqmS7PZ7L1LKZRSiAgiAklIQhKSkIQkJCEJSUhCEpKICCQhiYggIqi1UmullEIpBUkAZCaZSWuNzKS1RmZiG9vYxjYAtrGNbR75yEdy/PhxbrvttuN33HHH70zTdCtXXXXVVVddddVV/70ox48f56qrrrrqqquuuuqq/3iSdqdp+p2u6z46IpCEJCQhCUlIQhIAkgCQBIAkJCEJSUhCEgCSkEREIImIQBKSkASAJCQREUQEEUFEIAkA22QmmUlrjczENuv1mrvvvpvHPOYxnD59moODA86dO8fzM5vNXnoYBtbr9e/wnyQibrX92l3XPbjWSikFSUQEkpBERCAJSUhCEhGBJCQhCUlIIiKICEoplFIopVBrpZRCRABgm9Yamck0TWQmmUlmkpkA2AbANrZZrVbMZjMe9KAHceLECf7+7//+wZcuXfoerrrqqquuuuqqq/57UY4fP85VV1111VVXXXXVVf85JO0ul8tnzGazt44IJAEgCUlIQhIAkpAEgCQAJAEgCQBJSEISkpCEJCQREUhCEgCSkIQkIoKIICKICCQBYJvMJDPJTGyTmazXa/b29rjllls4ffo0t956K+v1muen67oHX7p06Wds7/KfZJom9X3/1l3XUUohIogIJCEJSUhCEpKICCQhCUlIQhIRgSQigoiglEIphVIKtVZKKUjCNrZprZGZtNZorZGZ2MY2ALaxjW1sc/HiRV7xFV8RSTz96U9/8H333fc70zTdylVXXXXVVVddddV/H8rx48e56qqrrrrqqquuuuo/j6S/tv3aXdc9OCKQhCQkIQlJSAJAEgCSAJDE/SQBIAkASUgiIpCEJCICSUhCEpKQREQQEZRSkIQkJGEb22QmmUlmkpnY5sKFC2xsbHD99dfz0Ic+lL/927/l+SmlHN/Y2Hjrixcvfg3/SWzvdl330bVWSilEBJKICCQhCUlIIiKQhCQkIQlJSEISEUFEEBFEBLVWaq2UUiilEBEA2CYzaa3RWqO1RmZiG9vYxja2sQ3AarXilltu4brrrmO5XHLrrbdycHDwM1x11VVXXXXVVVf996EcP36cq6666qqrrrrqqqv+c43j+DsR8da11uOSAJBERHA/SUhCEgCSAJDE/SQBIAlJSEISkpCEJCQhCUlIQhIAEUFEEBFEBJIAsI1tMpPMJDOxTWZy/vx5br75Zra3t5HEnXfeyfMTEcclPfjw8PBn+E8gaTczX7vrugfXWimlEBFEBJKQhCQiAklIQhKSiAgkIQlJSCIiiAgiglIKpRRqrZRSiAgkAdBaIzNprZGZZCaZSWZiG9vYBsA2ttnd3eUlX/IlOXHiBH/yJ39y/MKFC1/Dv9I111zz4Ac/+MEvfc011zz4mmuuefA111zzYEkcHh7uctVVV1111VVXXfWvQ+Wqq6666qqrrrrqqv90EXHr/v7++/R9/1sRQUQwTRMRgSQkIQlJSAJAEgCSAJBEaw1JtNaICCKCaZqICKZpIiKICCKCiEASEUFEUEohIpBE13VEBF3XMZ/PmaaJcRyZpolpmshMMpPVasUf/MEf8EZv9EY8+tGP5s477+SOO+7ANraxTSmFWiunT59+793d3e9Zr9e/zX+CcRw/Z5qm126tkZlkJplJRGAb29jGNraxDYBtbGMb22QmmUlrjdYarTWmaaK1RmZim4iglELXddRaqbVSSqGUQkQQEUQEmYkkJCEJSdx222084xnP4EEPehCPetSjHnzfffe9997e3nfzAlxzzTUPfrEXe7HXPnPmzINe/MVf/LVf7MVe7LV5Ae67775bz549e+t9991362/91m99zz/8wz/8NlddddVVV1111VUvHOX48eNcddVVV1111VVXXfWfT9Kt6/Wa2Wz22pKICAAkIQlJSEISkgCQBIAkACQBIAlJAEhCEpKQhCQiAklIQhIAkpBERBARRAQRgSQAbJOZZCaZSWZim/39fTKTBz3oQdx444383d/9Hc9NEgDz+fy19/b2fsb2Lv/BbCPppbuue3AphYggIpBERCAJSUhCEhGBJCQhCUlIQhKSiAgigoig1kophVorpRQiAgDbZCatNVprtNbITDIT29gGwDa2sY1tMpNHPepRHD9+nL/5m785funSpe/hubzYi73Ya7/TO73TZ334h3/4d7/iK77iW7/4i7/4a19zzTUPBrh06RLr9Zr77ruPS5cucenSJQBOnTp1/JprrnnwQx7ykJd+ndd5nfd+ndd5nffe3Nw8/g//8A+/w1VXXXXVVVdd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JCQBIIn7SeK52QbANs/NNrbJTNbrNQ972MMYhuHWf/iHf/gdrrrqqquuuuqq/0uoXHXVVVddddVV/6O92Iu92GudO3eOZzzjGbTWsE1EAGAb29jGNraxjW1sYxvb2MY2trFNZpKZ2MY2mUlm0lqjtcY0TUzTxDRNtNaYponWGplJ3/d0XUcphYiglEJEEBGUUogIIoJpmlgul6xWK06cOEEpha2tLZbLJev1mogAYDabERFEBBFBKYVSCqUUSilEBBFBRDBNE5KQRGsNSbTWkIQkJCEJSUgiItje3n7wYrH47NOnT7/30572tNdprd3KVUTEd+/v779WKeW9IwJJRASSkMT9JPEu7/Iu3HTTTRwdHfHnf/7nnD17ln/JxsYGL//yL8+ZM2f4+q//+vf5rd/6re/mf4j77rvv1s/8zM98nQ//8A//rtd5ndd57wc96EE86EEPYrVacenSJQBWqxUPNJ/Pmc/nHDt2jOd233333fpbv/Vb3/3bv/3b33PffffdyguwWq1+e7FYvLZtbGMb29jGNraxjSTuZxtJANhGEv8akrCNJGwDIAkASUgiIrDN05/+dF78xV/8tX/0R3/0c7jqqquuuuqqq/4voXLVVVddddVVV/2P9mIv9mKvffr0ab7lW76F1hr3s41tbGMb29jGNraxjW1sYxvb2MY2EYFtbJOZZCaZSWaSmbTWaK3RWqO1xjRNtNZordFaIzPp+55aKxFBRBARRASlFEopjONIRDBNE7u7u8xmM7a2tlgsFsxmMw4PD7FNRND3PRFBKYVSCqUUSimUUiilsF6viQgigohgmiYk0VpDEq01JCEJSUhCEpmJJCSxvb394Ec84hG/de+99373xYsXP4erWK/Xn7NcLl87Ih4sCUlIQhKSkMS7v/u7c/PNN3N0dMQv/dIv8aJ4zGMew2Mf+1juu+++Wz/kQz7kde67775b+R/o67/+69/nH/7hH37ndV7ndd7rzJkzD77mmmsePJ/P+Zfcd999t/7DP/zDb9933323/vZv//b33HfffbfyIhjH8bdba6+dmdjGNgC2eW62kcRzs839JPH8SOJ+tpGEbSQhCdtIQhKSkERm8vSnP50Xe7EXezBXXXXVVVddddX/NVSuuuqqq6666qr/8c6fP899991HKQXbRASlFGxjG9vYxja2sY1tbGMb29jGNraxjW1s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1vraPJMkbPNAtvnXsA2AbWxjG9vYJjOxTWaSmWQmrTUyk8wkM7GNbe4nCUlEBBFBRFBKoZRCKYWIAGC9XjOOI7PZjI2NDXZ2dhiGgdYakpBERCAJSUQEkpCEJCTx2Mc+loc85CEAfNZnfdbrHB4e7nLV/zuHh4e7//AP//A7AC/+4i/+2tvb25w+fZpSCgcHB0gCQBKSAJCEJAAkIQlJAEhCEpLouo4TJ05www03sFgsuO+++2699dZb//qzPuuzXudP//RPf4arrrrqqquuuur/Ksrx48e56qqrrrrqqquu+i+2m5m/s1qtfgd47Yg4bpv72eZ+tvnXsI1t7mcb29gmM8lMMpPWGplJa43WGpmJbWxjm/tJQhIRQUQQEUQEpRRKKUQEAOM4cnBwwGw2o+s6NjY2KKWwXC6RhCQkIQlJSCIikMSpU6d4mZd5GQC+/uu//n3+4R/+4be56v+1f/iHf/id3/7t3/6ehzzkIS99/fXXP3h7e5tTp05x7NgxAGqtjOMIgCQkASAJSQD0fc/JkyfZ3Nzklltu4cSJE2xsbABw33333fr1X//17/OjP/qjn3N4eLjLVVddddVVV131fxl60IMexFVXXXXVVVddddV/owd3Xfdex44d++yu66i1UmslIiilEBFEBJKICCKCiCAiiAgigoggIogIIoKIICIopRARlFIopVBrpdZK13V0XUff98xmM+bzOYvFgo2NDTY2NtjY2GBjY4PFYsF8Pqfve2qtlFIAsE1mMo4jwzCwXq9ZrVasViumaaLWys7ODgDjOHL77bezXq/JTDKT1hrTNDGOI9M08Qqv8ArM53P+4R/+4bc/8zM/83W46qoHuOaaax78ju/4jp/1Oq/zOu/NcxmGAYBhGJBE13X0fc/zc9999936D//wD7/9oz/6o59z33333cpVV1111VVXXfX/BeX48eNcddVVV1111VVX/TfazczfWS6XvyPptSPiOC+EbV5UtgGwDYBtbGObzCQzyUwyk9YamUlrjczENraxDYAkJCEJSUQEEUEphYggIiilADAMA/v7+8xmM7quY2tri1IKq9UKSUhCEpJ42MMexrFjxwD4rM/6rNc5PDzc5aqrHuDw8HD38PDw0ou92Iu99ubm5nEeoJRCKYW+7+n7nlIK97t48SKPe9zjuOuuu1gul9x8883HH/KQh7z05ubm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uuqqq6666v8Kgquuuuqqq6666qr/2249ODh4nQsXLnz2arVivV4zjiPTNNFao7VGZtJao7VGa43WGq01Wmu01mit0VqjtUZrjdYarTWmaWKaJqZpYhxHxnFkvV5zww03cOrUKQC+/uu//n246qp/wb333ktmYhvb2MY2ALYBsM0D2eZfIglJPJAk7icJSUhCEpIA2NnZ+Wyuuuqqq6666qr/Kwiuuuqqq6666qqr/o+zfWtr7XPOnz//kMPDw1vX6zXjODJNE601pmkiM8lMWmu01mit0VqjtUZrjdYarTVaa7TWaK3RWqO1xjRNTNPEOI7MZjNe8RVfEYDf+q3f+u5/+Id/+G2uuupfkJlkJraxjW0AbPNAtrGNbV4QSTw3SQBIAkASkpAEgCQkIYmIoLX2oK2trdfmqquuuuqqq676v4By/Phxrrrqqquuuuqqq/6f2B2G4WfW6/VurfW1eS62kQSAbf41bAPwBm/wBmxvb3Pffffd+lmf9Vmvw1VX/QvOnDnz4DNnzrz2X/7lX1JKISKQhCQiAkkASEISkpCEJCQhCQBJAEji+ZEEgCT+JeM4slgs2N/f/xmuuuqqq6666qr/7Qiuuuqqq6666qqr/n+5dZqmz7lw4cJDDg8Pb12v14zjyDRNtNaYponWGplJa43WGq01Wmu01mit0VqjtUZrjdYarTVaazz84Q/n+uuvB+Drv/7r34errnoR/MM//MPvnDlzhtYatrHN/Wxjm/8MkpCEJAAkIQlJRASllNfmqquuuuqqq676v4Dgqquuuuqqq6666v8h27fu7e29zoULFz57tVoxDAPjONJaY5omWmtkJplJa43WGq01Wmu01mit0VqjtUZrjc3NTV7v9V4PgN/6rd/67n/4h3/4ba666kVw9uzZW6+99lqmaSIzsY1tbGOb+9nm30sSAJJ4IEkASEISEcE0TQ8+ceLEe3PVVVddddVVV/1vR3DVVVddddVVV131/9et0zR9zoULFx5ycHBw63q9ZhgGpmlimiamaaK1RmaSmbTWaK3RWqO1RmuN1hqtNd7gDd6Ag4MD7rvvvlu//uu//n246qoX0X333XfruXPnfvvEiRO01shMbGMbANvYBsA2/xqSkMQDSQJAEpKQhCQkIQlJRAQAx44d+yyuuuqqq6666qr/7SjHjx/nqquuuuqqq6666v+53WEYfma9Xu/WWl+bZ5KEbR7INs/tJV7iJXj5l395+r7nS77kS97m7Nmzt3LVVf8K99133zNe7uVe7r2f+MQnUmslIpCEJCICSQBIAkASkpAEgCQkASCJ+0kCQBKSuJ8knh/bPJfjmfk7wzDcylVXXXXVVVdd9b8VwVVXXXXVVVddddVVALdO0/Q5Fy5ceMjBwcGtwzAwDAPTNDFNE601WmtkJplJa43WGtvb27zZm70ZAD/yIz/y2f/wD//w21x11b/S2bNnb73++ut/u7VGZpKZ2MY2trHNA9nGNrZ5QSTx3CTxQJKQhCQkIQlJSEIS4zhy7Nix9+Kqq6666qqrrvrfjHL8+HGuuuqqq6666qqrrnqW3WEYfmYYht1SymvzALZ5INu88zu/M7VWdnd3b/3SL/3St+Gqq/4NDg8Pd4+Ojm49derUe+/u7lJKISKICCQREUgCQBKSkIQkJCEJSQBIAkASz48kACTxL7FNrfX4pUuXvoarrrrqqquuuup/K8rx48e56qqrrrrqqquuuuo57Gbm76xWq98BXjsijvN8vMzLvAyv+qqvSt/3fMmXfMnbnD179lauuurf6OzZs8+45557HlxrfelaKxFBRBARSEISkgCQhCQkIQlJSAJAEgCSeEEkcT9JvDCtteNd1z1juVz+NVddddVVV1111f9GBFddddVVV1111VVXPV+2f3t/f/91Lly48Nmr1YphGJimiWma2NnZ4e3e7u0A+JEf+ZHP/od/+Iff5qqr/p0kfc80TWQmtrGNbf6zSOK5SUISkpCEbY4dO/ZZXHXVVVddddVV/1sRXHXVVVddddVVV131wtw6juPnnD9//nUODw9vXa/XjOPI27/92wPwD//wD7/9oz/6o5/DVVf9B5B0a2uNzMQ2trGNbWxjGwDb/GtJ4oEkASAJSUhCEgCSkIQkIoLW2oO3t7dfm6uuuuqqq6666n8jgquuuuqqq6666qqr/kW2f3tvb+91Lly48Nmbm5ucPHkSgB/5kR/5HK666j9IRNw6TdNvt9bITGwDYJvnZpsHss0LIgkASUjifpJ4bpKQhCQigohgGAaOHTv2Xlx11VVXXXXVVf8bUbnqqquuuuqqq6666kV16ziOn1NrZZqm9/6RH/mR7/6Hf/iH3+aqq/5jfU9r7bVtYxvbANjGNraRBIBt7ieJ50cSz00StrmfJB7INpKQhCQiglLK63DVVVddddVVV/1vRDl+/DhXXXXVVVddddVVV73ozp49+zu33nrr3/z2b//293DVVf/xdoGP7rqOUgoRgSQiAklIAkASkpCEJCQhCUkASAJAEg90/Phx5vM5119/PSdOnADg+uuv5+LFi0jCNg9kG4DMPN73/TOWy+Vfc9VVV1111VVX/W+CHvSgB3HVVVddddVVV1111VVX/c+Rmb+1tbX12n3f03UdpRRKKUQEEUFEEBFIQhKSkIQkJAEgCYATJ07wMi/zMjz4wQ/mIQ95CC/MxYsXefrTn87TnvY0/uzP/gzbtNbITMZxZLFY3Pq0pz3tIVx11VVXXXXVVf+boAc96EFcddVVV1111VVXXXXVVf9zTNP0WZubm589n8/puo5SCqUUSilEBBGBJCICSUhCEpKQBMDLvuzL8rqv+7ocP36cB1oulwAcHR3xQKdOneKBLl68yFOf+lT+7M/+jCc/+clM00StlYsXL77O3t7eb3PVVVddddVVV/1vgR70oAdx1VVXXXXVVVddddVVV/3P0Vp77dls9luLxYK+76m1UkohIogIIoKIQBIRgSQkIYnXfd3X5fVe7/W433K55Pbbb+fChQucP38eAEk8N0ksFgtOnjzJqVOnuPHGG7nfn/3Zn/FLv/RL3HfffdRav/v2229/H6666qqrrrrqqv8t0IMe9CCuuuqqq6666qqrrrrqqv85MvPBpZSnb2xs0Pc9XddRSqGUQkQQEUQEkpBERHDy5Ene/u3fnoc85CEAHB0d8aQnPYk777yT5yaJ5yaJB1osFtx00008/OEPB+DixYv88R//Mb/+679+66233voQrrrqqquuuuqq/y0ox48f56qrrrrqqquuuuqqq676n0PSbmvttWutD661IomIQBKSkIQkJCGJhz70oXzkR34kJ06c4OjoiH/4h3/gb/7mb9jf3+e5SeK5SeK5tda4cOECd955J9M0cfLkSR7zmMeQmcef8YxnPGO5XP41V1111VVXXXXV/waU48ePc9VVV1111VVXXXXVVVf9z5KZKqW8da2ViCAikEREIAlJALzBG7wB7/iO7wjA7bffzh//8R+zt7cHgCSemySemySemyQApmniwoULdF3HYrHgMY95DLXWl/7Lv/zLr+Gqq6666qqrrvrfgHL8+HGuuuqqq6666qqrrrrqqv9xdiV9dK2VUgoRQUQgCUlI4g3f8A15wzd8QwD++q//mic/+ck8kCSemyQeSBLPTRLP7eLFi0zTxDXXXMMjHvGI43t7ezzlKU/5Ha666qqrrrrqqv/pKMePH+eqq6666qqrrrrqqquu+p9F0m5r7bW7rntwKYWIICKICCTx8Ic/nHd+53cG4I/+6I+49957eSBJPDdJPDdJPDdJPJAkAPb391mtVlxzzTXcfPPND37GM57xN/fdd9+tXHXVVVddddVV/5NRjh8/zlVXXXXVVVddddVVV131P09r7cG11tcupRARRASSeMQjHsGHfdiHAfCHf/iHXLhwgecmiecmiecmiQeSxHOTxP329/eRxM0333z8mmuuechv/dZvfTdXXXXVVVddddX/ZARXXXXVVVddddVVV1111f9Ikn57miYyE9vYxjZv/MZvDMDtt9/O+fPneVFI4rlJ4l8iiQeSxF133cWFCxd4sRd7sdd6ndd5nffmqquuuuqqq676n4zgqquuuuqqq6666qqrrvofqZTyO7bJTGxjm1d8xVfk4Q9/OEdHR/z1X/81knhukvi3kMSLYrlcctdddwHwju/4jp/FVVddddVVV131PxnBVVddddVVV1111VVXXfU/1jRNv91aIzOxzZu+6ZsC8Nd//df8e0jiXyKJB5LE/S5evMjFixe55pprHvxiL/Zir81VV1111VVXXfU/FcFVV1111VVXXXXVVVdd9T+W7c9prZGZPOIRj+DUqVOcP3+e8+fP86KSxL9EEv8ay+WSCxcuAPBiL/Zir8VVV1111VVXXfU/FcFVV1111VVXXXXVVVdd9T+WpFunaSIzeZVXeRUAbr/9dgAk8dwk8S+RxL9EEg8kiQeSxMWLFwF4ndd5nffmqquuuuqqq676n4rgqquuuuqqq6666qqrrvofKyJuba39dmbyqq/6qgDcfvvt/EeSxL/FcrkE4OzZs7dy1VVXXXXVVVf9T0Vw1VVXXXXVVVddddVVV/2P1lr77Vd7tVcD4Pbbb+dfQxL/WpJ4IEk8kCQAVqsVy+WSF3uxF3vta6655sFcddVVV1111VX/ExFcddVVV1111VVXXXXVVf+jlVK+59GPfjQAR0dHvCCS+JdI4qqrrrrqqquu+n+F4Kqrrrrqqquuuuqqq676Hy0ibrX92wDL5RIASfxHkMQDSeKBJPFAkrjq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2AbANraxDYBtbGMbANvYxjYAtrGNbWxjG9vYxja2sY1tMpOI4ODg4Nb9/f3fPjw8/J31en3rMAy/zVVXXfW/2uu8zuu894d/+Id/F8ByueSP//iPWS6X3E8SDySJ+0nigSTxQJJ46EMfysMe9jAA7rvvvlu//uu//n3+4R/+4be56qqrrrrqqqv+N0EPetCDuOqqq6666qr/b17ndV7nvT/8wz/8uw4PD7n33ntprdFao7VGa43WGq01Wmu01mit0VqjtUZm0lojM8lMMpPMJDPJTGyTmWQmtrFNZmIb29jGNraxjW1sYxvbANjGNrYBsI1tbANgG9vYBsA2trGNbQBsYxvb2CYzsY1tMhPbrFarW/f39397uVzeenR09Dvr9fpWSbdy1VVX/a9xzTXXPPhzPudzfuuaa6558HK55I477uCOO+5guVwiiftJ4oEk8UCSuN/DHvYwbrjhBhaLBQA/8iM/8tk/+qM/+jlcddVVV1111VX/G6EHPehBXHXVVVddddX/Nx/+4R/+XY997GPfe2dnh+VySWbSWqO1RmuN1hqtNVprTNNEa43WGq01Wmu01mit0VqjtUZm0lojM8lMMpPMJDPJTDKTzMQ2mYltbGObzMQ2trGNbWxjGwDb2MY2trENgG1sA2Ab29gGwDa2sY1tAGxjG9vYxja2yUxsk5kALJfLW4dhuPXo6OjWg4OD31mtVrdm5m9z1VVX/Y915syZB73O67zOe7/O67zOe19zzTUPXi6XXLhwgfPnz3PnnXcCIIkHksT9NjY2mM/nnDx5koc97GHc77777rv167/+69/nH/7hH36bq6666qqrrrrqfyv0oAc9iKuuuuqqq676/+abvumbnn7NNdc8eJomMpPMxDaZSWbSWiMzaa3RWqO1RmuN1hrTNNFao7XGNE201mit0VqjtUZrjdYamUlrjcyktUZmkplkJpmJbTKTzMQ2mYltbGMb29gmM7ENgG1sYxvb2MY2ALaxjW0AbGMbANvYxja2AbCNbWxjG9vYxja2yUxsk5msVqtb1+v1ravV6taDg4PfGYbh1nEcf5urrrrqf5Rrrrnmwe/4ju/4Wa/zOq/z3jzAcrnkwoULACyXS+63WCzY2NjgxIkTPNB9991369d//de/zz/8wz/8NlddddVVV1111f926EEPehBXXXXVVVdd9f/NT/zETxggM3kg2wBkJrbJTDKTzCQzaa2RmbTWaK0xTROtNVprTNNEa43WGtM00VqjtUZrjdYarTVaa2QmrTUyk8wkM8lMMpPMJDOxTWZim8zENraxjW1sYxvb2MY2trGNbQBsYxvbANjGNrYBsI1tbANgG9vYxja2sY1tbGMb22QmtlmtVrcCXLp06bcPDg5+ZxiGW4dh+G2uuuqq/3bXXHPNg1/sxV7stV7ndV7nvV/sxV7stXkh7rvvvluvueaaB//DP/zDb//93//9b//2b//299x33323ctVVV1111VVX/V+BHvSgB3HVVVddddVV/5+8zuu8znt/+Id/+He11mitERFIQhKSAJAEgG0AbGMb22QmmUlmkpm01mit0VqjtUZrjdYa0zTRWmOaJlprtNaYponWGq01Wmu01mitkZm01shMWmtkJplJZmKbzCQzsU1mYhvbZCa2sY1tbGMb29jGNrYBsI1tbANgG9vYBsA2trENgG1sYxvbAGQmtrGNbWxjG9tkJhHB4eHhrXt7e799eHj4O+v1+tZhGH6bq6666r/NNddc82CAF3uxF3ttwGfOnHkwz3T27Nln3HfffU//h3/4h9/hqquuuuqqq676vwo96EEP4qqrrrrqqqv+P/nwD//w73rsYx/73ltbW0zTRERQSiEikEREEBFIQhKSkMQD2QbANpmJbTKTzKS1RmbSWqO1RmuNaZpordFaY5omWmtM00RrjWmaaK3RWqO1RmuN1hqtNTKT1hqZSWaSmWQmmUlmYpvMxDaZiW1sk5nYxja2sY1tbGMbANvYxja2AbCNbQBsYxvbANjGNraxDYBtbGMb29gmM7GNbTIT26xWq1v39/d/e7lc3np0dPQ7q9Xq1oi4lauuuuqqq6666qqrrrrqPxuVq6666qqrrvp/5pprrnnwtddey3333UdmEhFEBBFBRBARRAQRQUQQEUQEEYEkJCEJSQCUUrifbWxjm8wkM8lMMpPWGq01Wmu01mitMU0TrTWmaaK1xjRNtNZorTFNE601Wmu01mit0VojM2mtkZm01shMMhPbZCaZSWZiG9tkJraxjW1sk5nYxjYAtrGNbWxjGwDb2MY2ALaxjW0AbGMb2wDYxja2sY1tbNP3/YO3trbe2zaZCcByubx1GIZbj46Obj04OPid1Wp1a2b+NlddddVVV1111VVXXXXVfyT0oAc9iKuuuuqqq676/+QnfuInDHD77bcDIAlJSEISEUFEEBFEBBFBRBARRAQRQUQQEUQEkpCEJCTx3GxjG9vYJjPJTFprZCatNVprtNaYponWGtM00VpjmiZaa0zTRGuNaZpordFao7VGa43WGq01MpPWGplJZpKZZCaZSWZim8zENpmJbWxjG9vYxja2sY1tbGMb2wDYxja2AbCNbWwDYBvb2AbANraxjW1sYxvb2MY2mYltMpP1en3rarW6dbVa3XpwcPA7wzDcOo7jb3PVVVddddVVV1111VVX/VtRueqqq6666qr/R17ndV7nvQGOjo6QBIBtbAMgidYakpCEJCQREUgiIogIIoKIoJRCRBARRAQRgSQiAklIIiIAkIRtAGwDkJnYJjPJTDKT1hqtNVprtNZorTFNE601pmlimiZaa0zTRGuNaZpordFao7VGa43WGq01WmtkJplJa43MJDOxTWaSmdgmM7GNbTIT29jGNraxjW1sYxvbANjGNraxDYBtbANgG9vYBsA2trGNbWxjG9vYpu/7B29tbT3YNpn53rZZrVa3Zib7+/u/fXBw8DvDMNw6DMNvc9VVV1111VVXXXXVVVe9KKhcddVVV1111f8jL/ZiL/ZaALbp+x7b2MY2ALaxDYBtbAPQWkMSAJKICCQREUQEEUFEEBFEBBFBRBARRAQRQUQgCUlEBAClFGxzP9vYJjPJTDKTzKS1RmuN1hqtNVprTNNEa41pmmitMU0T0zTRWmOaJlprtNaYponWGq01MpPWGplJa43MJDPJTDKTzMQ2mUlmYhvb2CYzsY1tbGMb29jGNgC2sY1tbANgG9vYBsA2trENgG1sYxvbANgmM7FN13UPts329vZ7237vzCQiODg4uHV/f/+3Dw8Pf2e9Xt86DMNvc9VVV1111VVXXXXVVVc9NypXXXXVVVdd9f/Ii73Yi702QEQwm82wjW1sYxvb2MY2trENgG1sA2Cb1hoAkgCQhCQigohAEhFBRBARlFKICCKCiCAiiAgkIYmIACAiACilcD/bZCa2yUwyk8yktUZm0lpjmiZaa0zTRGuNaZporTFNE9M00VpjmiZaa0zTRGuN1hqtNVprZCatNTKT1hqZSWaSmdgmM8lMbJOZ2MY2tslMbGMb29jGNgC2sY1tbANgG9vYBsA2trENgG1sYxvbANjGNraxjW12dnYevL29/d623zszsc1yubz14ODgt5fL5a2r1eoZy+XytyXdylVXXXXVVVddddVVV/3/ReWqq6666qqr/h+55pprHgxgm1or97MNgG1sYxvb2MY2trGNbWxjG9sA2MY2tslMACQhCUlIIiKICCKCiCAiiAgigoggIogIIoKIQBKSkEREEBHczzYAmYltMpPMJDNprZGZtNZorTFNE601pmlimiZaa0zTxDRNtNaYponWGtM00VqjtUZrjdYarTUyk9YamUlmkplkJplJZmKbzMQ2mYltbGMb29jGNraxjW1sYxvb2AbANraxDYBtbGMbANvYxjYAtrGNbWxjG9v0ff/g7e3t97ZNZgKwXC5vXa/Xt9588810Xfc99913363/8A//8NtcddVVV1111VVXXXXV/w9Urrrqqquuuur/iWuuuebBPIAkJAEgiQeyDYBtbANgG9vYJjOxjW1sYxvb2MY2ALaxDUBrDUlIQhKSkEREEBFEBBFBRFBKISKICCICSUQEkogIJAFQa+V+trGNbWyTmWQmmUlrjcyktUZrjWmaaK0xTRPTNNFaY5ompmlimiZaa0zTRGuN1hrTNNFaIzNprdFaIzNprZGZZCaZSWZim8wkM7GNbTIT29jGNraxjW1sYxvb2MY2ALaxjW0AbGMb2wDYxja2AbCNbWxjG9vYxjZd1z3Y9oNf93Vfl5d6qZd67a//+q9/n3/4h3/gqquuuuqqq6666qqr/p+gctVVV1111VX/T7zYi73YawMMw8A4jkQEkogIACQhCYCI4PmxDYBtbGMb29jGNpmJbWxjG9vYxja2sY1t7icJAElIIiKICCQREUQEpRQigoggIogIIgJJRASSkERE8NxsYxvbZCaZSWbSWiMzaa0xTROtNVprTNPENE201pimiWmamKaJ1hrTNNFaY5omWmu01mit0VojM2mtkZlkJplJZpKZZCaZiW0yE9vYJjOxjW1sYxvb2MY2trENgG1sYxvbANjGNgC2sY1tbANgG9vYxjYv9VIvBcA//MM//DZXXXXVVVddddVVV131/weVq6666qqrrvp/4sVe7MVeC2C9XrNarYgISilEBBGBJCICSUQEkpCEJCRxP0kA2OZ+trGNbWxjG9vYJjOxjW0yE9vYxja2AbCNbTITAElIQhKSiAgiAkmUUogIIoKIICKICCKCiEASkpCEJCKC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3323ctVVV1111VVX/V9H5aqrrrrqqquuuup/sGmabgU4PDy89fDw8Ht4plrrg2ez2Wv1ff/gruteG3jt++6771auuuo/0T/8wz/89j/8wz989zu90zu992d+5mfywtjGNhHBfffdB0Df9wDY5t/CNg9kmweyzb/GNddc82Cuuuqqq6666qr/6wiuuuqqq6666qqr/heapunWw8PD77l48eLnfM/3fM/rvN3bvZ1++7d/+3u46qr/ZD/6oz/6OS/+4i/Oa7/2a5OZ2MY2tgGwjW0AbJOZ2Obs2bM8P7Z5QWzz72GbF2Q+nwNw33333cpVV1111VVXXfV/GcFVV1111VVXXXXV/xH33XffrVx11X+y++6779av//qvf593fud35rGPfSyZiW1sYxvb2MY2trHNfffdB8BsNsM2L4htXhDbPJBtHsg2/xrz+Zz77rvv1vvuu+9Wrrrqqquuuuqq/8sIrrrqqquuuuqqq6666qp/ld/6rd/67t/6rd/67I/8yI/k9OnTZCaZSWZiG9vYxja2ue+++wCYzWbMZjPuZ5sXxDb/0WwDcN111wHwD//wD7/NVVddddVVV131fx3BVVddddVVV1111VVXXfWv9qM/+qOf89u//duf/QVf8AWcOnWKzCQzyUxsYxvb2MY2Z8+eBWA2m/H82OZFZZt/iW1ekGPHjgFw33333cpVV1111VVXXfV/HeX48eNcddVVV1111VVXXXXVVf96//AP//A7m5ubfPAHf/Brz+dz/vZv/5YXRBIv+ZIvycbGBufOncM2L4htHsg2L4xt/jUe/vCHU2vlG77hG97n8PBwl6uuuuqqq6666v8ygquuuuqqq6666qqrrrrq3+xHf/RHP+fTPu3THvJSL/VSv/093/M9POYxj6G1RmaSmdjGNn//93/PbDZjNpsxm814INv8R7LNc7MNwHXXXcd8Pucf/uEffvu+++67lauuuuqqq6666v86yvHjx7nqqquuuuqqq6666qqr/u0ODw93f+u3fut7Dg4Obn2rt3qr46/4iq/44Cc84QkcHh5iG4DDw0Ne/MVfnOuvv55SChcvXuT5sc0D2eaBbPNAtvnXeNjDHsZ8PudHf/RHP+fWW2/9a6666qqrrrrqqv/rKMePH+eqq6666qqrrrrqqquu+ve79dZb/+a3fuu3vucpT3nK97zCK7zC7okTJ7jtttsezDP9wz/8A6/4iq/IsWPHODo6Yr1eY5v/bLYBuPbaa7npppv4h3/4h9/+ru/6ro/hqquuuuqqq676/4By/Phxrrrqqquuuuqqq6666qr/OIeHh7tPecpTfufuu+/+nvl8/t2Zudtae+3Dw0O2trZ4qZd6KWazGWfPnuWBbPNAtnkg2zyQbZ6bbZ6f+XzOS7/0SwPw9V//9e9z9uzZW7nqqquuuuqqq/4/ILjqqquuuuqqq6666qqr/tOM4/iMiPic+Xz+kNbab//6r/869913Hzs7O9x44438V3nUox4FwD/8wz/89j/8wz/8NlddddVVV1111f8XlOPHj3PVVVddddVVV1111VVX/eeyvVtK+Z6u657xD//wDy/9eq/3esePHTsGwN7eHrZ5INs8kG3+JbZ5brZ5qZd6KY4fP859991368d//Me/DFddddVVV1111f8nlOPHj3PVVVddddVVV1111VVX/ddYr9d/fXBw8NPTNO2++Iu/+GsfO3YMgL29Pf41bPMvmc/nvNiLvRjHjx/nvvvuu/VDPuRDHsJVV1111VVXXfX/DeX48eNcddVVV1111VVXXXXVVf91WmuX/uEf/uF3AK655poH33DDDccB9vb2ALDNA9nmX2s+n/OSL/mSbG1tcd9999369V//9e9z9uzZW7nqqquuuuqqq/6/oRw/fpyrrrrqqquuuuqqq6666r/eP/zDP/zO5ubmcUk8/OEPf/A111zDNE0cHh7ywtjmudkGYD6fc+ONN/JiL/Zi1Fr5h3/4h9/++I//+Jc5e/bsrVx11VVXXXXVVf8foQc96EFcddVVV1111VVXXXXVVf99rrnmmgd/zud8zm8BXHPNNQ9er9fcdttt3Hfffdjmudnmuc1mM6699loe9KAHcb8f+ZEf+ewf/dEf/Ryuuuqqq6666qr/z9CDHvQgrrrqqquuuuqqq6666qr/XmfOnHnQ67zO67z3i7/4i7/2i73Yi702wHq9ZrVasVqtuHTpEuv1Gtvc79ixYwA86EEP4oH+4R/+4be/7uu+7r3Pnj37DK666qqrrrrqqv/v0IMe9CCuuuqqq6666qqrrrrqqv8Zrrnmmge/2Iu92Gu/zuu8znu92Iu92GvzIrrvvvtu/a3f+q3v/u3f/u3vue+++27lqquuuuqqq6666gr0oAc9iKuuuuqqq6666qqrrrrqf6bXeZ3Xee8Xe7EXey2Aa6655sE803333XfrfffddyvAP/zDP/z2P/zDP/wOV1111VVXXXXVVc8LPehBD+Kqq6666qqrrrrqqquuuuqqq6666qqrrvo/icpVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuur/mBd7sRd7bYCzZ8/eet99993KVVddddVVV1111VVX/f9F5aqrrrrqqquuuur/iIh48Iu/+Iu/9md91md9F8/0Iz/yI5/9oz/6o5/DVVddddVVV1111VVX/f9E5aqrrrrqqquuuup/mYh4cCnlwYvF4rXm8/mDu6578Pb29mtL4i3f8i05ODjgqU99KgDv9E7v9Nlnz559xm/91m99N1ddddVVV1111VVXXfX/D5Wrrrrqqquuuuqq/6Ei4sGllAcvFovXms/nD+m67kHb29uvLQlJRASSkIQkJPEyL/MyAPzt3/4t93und3qnz/6t3/qt7+aqq6666qqrrrrqqqv+/6Fy1VVXXXXVVVdd9d8sIh5cSnnwYrF4rfl8/uC+7x+ytbX1WpKQREQgCUlIQhKSkASAJCTxki/5kgA89alP5X5Pe9rTeKmXeqkHveM7vuNn/eiP/ujncNVVV1111VVXXXXVVf+/ULnqqquuuuqqq676LxIRDy6lPHixWLzWbDZ7cN/3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ACQBIAkASQBIAkASAJIAkASAJAAkASAJAEkASAJAEgCSAJAEgCQAJCEJAEkASEISkgCQhCQAJCEJSQBIQhKSAJCEJAAkIQkASQBI4rnZBsA2z80297MNgG1sA2Ab29jGNgC2sY1tbGObzMQ2trGNbWxjG9vYxja2sY1tbGMb29jGNrbZ3d0FYHNzk3/JmTNnHsRV/2ne8R3f8bOuueaaB3/f930fAJL4j2Sb53b+/Hme9KQn8chHPpIHPehBPOMZz+B+krDNfxZJPNDm5ib33Xffrffdd9+tXHXVVVddddVVV/33oHLVVVddddVVVz3LNddc82CAUgoAkgCQxP0kASAJAEkASAJAEgCSAJAEgCQAJAEgCQBJAEgCQBKSAJAEgCQkASAJSQBIQhKSAJCEJAAkIQkASQBIQhL3k8Rzs839bANgm/vZBsA2ALYBsI1tbGMbANvYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYBsA2trHNer3m4OCAra0trrnmGu677z4eSBIAh4eHXPWf653e6Z0++4/+6I940pOehCQeSBLPj20k8a9hmwf6hV/4BR75yEfy2Mc+lmc84xk8kCQAbPOf6cEPfjAA//AP//A7XHXVVVddddVVV/33oXLVVVddddVVV112zTXXPBjg4OCAiABAEveTBIAkACQBIAkASdxPEgCSAJAEgCQkASAJAEkASEISAJKQBIAkJAEgCUkASAJAEpIAkASAJAAkcT9JANjmfrZ5fmxzP9sA2MY2ALaxjW0AbGMb29jGNraxjW1sYxvb2MY2trENgG1sYxvb2MY2trGNbQBsYxvb2AbANrYBsI1tAPb29tja2uKaa67hvvvu436SuN/h4SFX/ed5ndd5nfcGeOITn8i/lm3+PZ74xCdy/vx5Tp06xZkzZzh79izPTRK2+c/y4Ac/GIB/+Id/+G2uuuqqq6666qqr/vtQueqqq6666qqrnoMkJCEJAEkASAJAEveTBIAkACQBIAkASQBIAkASkgCQBIAkJAEgCUkASAJAEpIAkASAJAAkASCJ58c297PNA9nmfrYBsA2AbQBsYxsA29jGNraxDYBtbGMb29jGNraxjW1sYxsA29jGNraxjW0AbGMb29gGwDa2sQ2AbWwDYBvbANgGwDa2edzjHscNN9zAtddey9///d8DIInnds011zyYq/5TvNiLvdhrAfzRH/0RkvjPYpvn5+d+7ud47/d+b17+5V+eX/qlX+L5kYRt/jOcOXMGgH/4h3/4ba666qqrrrrqqqv++1C56qqrrrrqqqsuu++++24F2NzcJCKQxP0kASAJAEkASAJAEgCSAJAEgCQAJCEJAEkASAJAEpIAkASAJAAkASCJ+0nifraRhG0eyDYAtnkg2wDYBsA2ALaxDYBtbGMbANvYxja2sQ2AbWxjG9vYxja2AbCNbWxjG9sA2MY2trENgG1sA2Ab2wDYxjYAtrENgG0AbANgGwDb2AbgtttuA2BzcxNJXPVf75prrnnwk570JCTx/NgGQBL/Etv8S2zzQE984hN54hOfyKMe9Sge+9jH8rjHPY7nRxIAtvmP8gqv8AoA/NZv/dZ333fffbdy1VVXXXXVVVdd9d+HylVXXXXVVVdd9TwiAgBJAEjifpIAkASAJCQBIAkASQBIAkASAJIAkASAJAAkASCJ+0nifraRBIBtHigzeW62AbANgG0AbANgG9sA2MY2tgGwjW1sYxvbANjGNraxjW0AbGMb29gGwDa2sQ2AbWxjGwDb2AbANrYBsA2AbWwDYBsA2wDYBsA2ALYBsA2AbQAuXrzI7bffzs0338w111zDfffdx1X/tV7sxV7stf/oj/6If4lt/rVs8/zY5n7nzp3j537u5zh9+jQPetCDOHv2LGfPnuUFkQSAbf49Njc3efCDHwzAb/3Wb30PV1111VVXXXXVVf+9qFx11VVXXXXVVc9y33333XrNNdc8eGtri6OjIwAkASAJAEkASAJAEgCSAJAEgCQAJAEgiftJ4n6SuJ9tJAFgmwfKTJ6bbQBsA2AbANsA2AbANrYBsI1tbANgG9vYxjYAtrGNbWwDYBvb2MY2ALaxDYBtbGMbANvYBsA2ALaxDYBtAGxjGwDbANgGwDYAtgGwDYBtAGwDYJv72QbANrfddhs333wz11xzDffddx9X/dd5ndd5nfcGOHfuHLaRxL+VbV4Q2zyQbR7oiU98Ij/7sz/L+7zP+/AKr/AK/PZv/zZHR0e8MJKwzb/VK7zCKwDwIz/yI5/9D//wD7/NVVddddVVV1111X8vKlddddVVV1111fOQhCQkASAJAEkASAJAEgCSAJDE/SRxP0k8kG0kAWCbB8pMnptt7mcbANsA2AbANrYBsI1tAGxjG9sA2MY2tgGwjW1sA2Ab29gGwDa2AbCNbWwDYBvbANgGwDa2AbANgG0AbANgG9sA2AbANgC2uZ9tAGwDYBsA2wDYBsA2ALYBOHbsGDs7O+zs7ADwkIc8hL//+7/nuZ09e/ZWrvpPcd99993KA9jmfpJ4INu8KGzz3GzzL/nDP/xDXvVVX5VHPepRvNZrvRa/8zu/w9HRES+MJO5nmxfVK7zCK3DmzBnuu+++W3/0R3/0c7jqqquuuuqqq67670flqquuuuqqq656lrNnz956zTXXPHhra4vVagWAJAAkASCJ+0nifpJ4INtIAsA2z802tnlutgGwzf1sA2Ab2wDYBsA2tgGwjW1sA2Ab2wDYxja2AbCNbQBsYxvbANjGNgC2AbCNbQBsYxsA2wDYBsA2ALYBsA2AbQBsA2AbANsA2AbANgC2uZ9tAGwDYBuAnZ0djh07xi233MKxY8c4duwYD3rQg3hum5ubXHPNNdx3333cTxIPfvCDH3zfffdx1X+8a6655sG8ALZ5UdjmudnmgWzzovjO7/xO3vd935dHPepRvNZrvRa/8zu/w9HRES8KSQDY5oV5hVd4BR784AcD8PVf//Xvw1VXXXXVVVddddX/DFSuuuqqq6666qpnue+++259sRd7MSQhCQBJ3E8SL4htnpttHsg297PN/WwDYBsA2wDYBsA2ALaxDYBtbANgG9vYBsA2tgGwjW0AbGMbANvYBsA2ALaxDYBtAGxjGwDbANgGwDYAtgGwDYBtAGwDYBsA29zPNgC2AbANgG0AbANgm2PHjnHLLbdw7Ngxjh07xrFjx3jQgx7EC7K7u8ulS5d4xjOewYMe9CAe9KAH8ZCHPIT77rsPAEnc77777ruVq/5b2eYFsc1zs82/1vnz5/nO7/xO3vd935dHPepRvNZrvRbPeMYzeNzjHseLShIPZJv7vcIrvAIPfvCDue+++279+q//+vf5h3/4h9/mqquuuuqqq6666n8GKlddddVVV1111bPcd999twKcPn2ac+fO8dxs80C2eUFscz/b3M82ALYBsA2AbQBsA2Ab2wDYxjYAtgGwjW0AbGMbANvYBsA2tgGwDYBtbANgGwDb2AbANgC2AbANgG0AbANgGwDb3M82ALYBsA2AbQBscz/bANgGYGdnB4BbbrmFY8eOccstt3D8+HGOHTvGC7K7u8ulS5e49dZbAXjGM57BM57xDB7o+PHjfMRHfATXXHMNknigzc1Nzp49+wyu+g9333333Qpw+vRpbPOiss1zs82/lW3ud+7cOb7zO7+TV33VV+Wt3uqteOxjH8uDH/xg/uzP/oyzZ8/yryWJjY0NXuu1XovNzU3uu+++W7/+67/+ff7hH/7ht7nqqquuuuqqq676n4PKVVddddVVV131PDY2NrifbR7INs/NNg9kGwDbANgGwDYAtgGwDYBtAGxjGwDbANjGNgC2sQ2AbWwDYBsA29gGwDYAtgGwDYBtbANgGwDbANgGwDb3sw2AbQBsA2AbANsA2OZ+tgGwDYBtAGxz7NgxbPOSL/mSADzoQQ/illtu4YXZ3d3l0qVL3HrrrVy6dInd3V2e8Yxn8C+RxKVLl3jGM57Bgx70IB7ykIfw9Kc/HYDNzU0A7rvvvlu56j/c2bNnbwU4deoUL4htnh/bPJBt/iPY5uzZs/zMz/wMAK/2aq/G6dOnea3Xei1uvfVWzp49yzOe8QxeFBsbG7zYi70YD3rQgwD4h3/4h9/+kR/5kc/5h3/4h9/mqquuuuqqq6666n8WKlddddVVV1111bP8wz/8w+8AbGxskJnczzYPZJv72eZ+tgGwDYBtAGwDYBvbANgGwDYAtrENgG0AbGMbANsA2MY2ALYBsA2AbQBsYxsA2wDY5n62AbANgG0AbANgGwDb3M82ALYBsA2Abe5nGwDbHDt2jJ2dHR70oAdhmwc96EE86EEP4oXZ3d3lGc94Bru7u1y6dInd3V2e8Yxn8KKSxPPze7/3exw/fpwXe7EX4+lPfzoAZ86cAeDs2bO3ctV/in/4h3/47euuu+61bfPC2Oa52ebfwzbPj20AfuEXfoG/+Iu/4DGPeQzv8i7vwoMf/GAe/OAH89jHPpZz585hm7Nnz3J0dATAxsYGm5ubbGxs8OAHP5gH+szP/MzX+Yd/+Iff5qqrrrrqqquuuup/JipXXXXVVVddddWznD179laAjY0NWmvczzb3sw2AbQBsA2AbANsA2AbANgC2AbCNbQBsA2AbANvYBsA2ALYBsA2AbQBsYxsA29zPNgC2AbANgG0AbANgm/vZBsA2ALYBsM39bANgGwDbAOzs7HDs2DEe9KAHYZsHPehBPOhBD+IF2d3dBeAZz3gGu7u7POMZz+DSpUtcvHiR50cSL4gknh9JPNAznvEMdnd3OX36NK/4iq/In/7pn/KQhzyE3/qt3/ru++6771au+g9333333QowjiOPetSjeOITn8j9bPPcbPNAtpHEC2Obf4ltHmg2m9H3PX3fMwwDj3vc4/iar/kaXvZlX5YHPehB3HLLLWxubgLw4Ac/mBfkH/7hH377t37rt77nt37rt76bq6666qqrrrrqqv/ZqFx11VVXXXXVVc9y33333QqwubnJfD7n4OCA+9kGwDYAtgGwDYBtAGwDYBsA29gGwDYAtgGwDYBtAGwDYBvbANgGwDb3sw2AbQBsA2AbANvczzYAtgGwDYBt7mcbANsA2OZ+tgHY2dnh2LFj3HLLLQA86EEP4kEPehAvyO7uLgB/8zd/A8Ctt97KM57xDP4lknhBJPGCSOL5kQTAz//8z/Pmb/7mPOQhD+EhD3kIAF//9V//Pfwnu+aaax4McN99993K/wEv9mIv9tov9mIv9lrXXHPNQ6655poH3XfffbcC/MM//MPv3Hfffbf+wz/8w2/zTH//93//2+/0Tu/02q/yKq/CE57wBB7INg9km+dmm38N2zw325RSmM1m9H1P13V0XUetla7rqLUyDAN//ud/zl/91V9x4sQJbr75Zm688UYksb29zblz52697777fvu+++67FeC3f/u3v+e+++67lauuuuqqq6666qr/HahcddVVV1111VXP4R/+4R9++8Ve7MVeez6fc+nSJWwDYBsA2wDYBsA2ALYBsA2AbQBsYxsA2wDYBsA2ALYBsM39bANgGwDbANgGwDb3sw2AbQBscz/bANgGwDb3sw2AbQBsc+zYMW655RaOHTvG8ePHOXbsGA960IN4QXZ3d9nd3eUZz3gGALfeeivPeMYzeFFJ4oWRxPMjiRdEEgDDMNwKsL+//9t33XXXrX/6p3/6O+/93u/9Xr/1W7/1Pddcc82D/uEf/uG3+U9wzTXXPPgd3/EdP+t1Xud13vsf/uEffvvMmTMPBviHf/iH3/6t3/qt7/mHf/iH3+Z/kWuuuebBr/3ar/1e7/RO7/TZPJcXe7EXA+B1Xud13vu+++67FeC3fuu3vvsf/uEffue3f/u3v+d1Xud13vtRj3rUg23z3Gzzb2Wb58c29+u6jtlsRtd19H1PrZWu66i1Umul1kqtlVorpRRqrUzTxO23387dd9/NE5/4xM9+2tOe9j2H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if39fQA2NzeRxItKEs/P4eEhf/qnf8orvuIr8k7v9E6f9Zmf+Zm/zYtgsVh81rFjxz67lEJEEBFIQhKSkIQkJCEJAEkASOJFJYkXlSRemMPDQ+677z6uueaaB73Yi73Ya/3DP/zDb3PVVVddddVVV1111X8kKlddddVVV1111b/oH/7hH377R3/0Rz/nwz/8w7/rZV7mZXj605/O05/+dJ6fcRxvtc3R0dFvD8Nw6+Hh4e9M03TrOI63ctV/qoh48LFjxz772LFj71VKISKICCICSUQEkpCEJCQhCUkASEISkgCQhCQAJAEgCQBJAEhib28PgM3NTTY3Nzk8POSFkcS/5OzZswC82Iu92Gu/2Iu92Gv/wz/8w2/zApRSXvv06dO/VUohIogIIgJJSEISkpAEgCQAJCGJ+128eJETJ06wubnJ4eEhz48kXlSS+JdI4u///u953dd9XV7ndV7nvX/0R3/0c7jqqquuuuqqq6666j8Slauuuuqqq6666kXyW7/1W9995syZB734i7/4a7/qq77qaz/4wQ/m6U9/Og9+8IP50R/90c8+PDz8neVy+dtc9V9uPp9/1okTJ957Pp8/OCIopRARSCIikIQkJCEJSUhCEpIAkIQkACQhCQBJAEgCQBIAkgCQBMAdd9zBTTfdxObmJoeHh7wgkviXSOLw8JBbb72VBz/4wbzO67zOe/3DP/zDb/NcJD14Z2fnuzY2Nl47IogIIgJJSEISkpCEJCQBIAkASQBIAmB3d5cTJ06wtbXF4eEhz00SLwpJvCgkAXB4eAjANddc8+Brrrnmwffdd9+tXHXVVVddddVVV131H4Vy/PhxrrrqqquuuuqqF80//MM//M4//MM//M6DHvSg49dee+1u3/e//du//dsf84xnPON7pmm6lav+y0h68Obm5kfdcMMNv72zs/Pas9nseK2VWisRQSmFiCAiiAgigoggIogIIgJJSCIikIQkIgJJSEISkpCEJCQhCUlIQhKSkMTOzg433XQTh4eH3HfffTw3SUjiXyKJ++3u7vLIRz6Szc3N47/wC7/wNTzAfD7/rFOnTv30bDZ7cK2ViKCUQkQQEUQEEYEkJCEJAEkASAJAEvd76EMfyvXXX8/BwQH33Xcf95OEJF4UkviXSEIS9xvHkWuuuYbNzU1uvfXWv7n11lv/mquuuuqqq6666qqr/qNQueqqq6666qqr/lXuu+++W7/+67/+fbjqv0VEPHhzc/O9Tp48+dmlFEopRASSiAgkIQlJSEISkpCEJCQBIAlJAEhCEgCSAJAEgCQAJAEgCQBJ3E8Sd955JwDXXHMNz00S/xJJPLfDw0Puu+8+AF7sxV7stf/hH/7ht0spr338+PHv6vv+waUUIgJJSEISkpCEJCQBIAkASQBIAkAS95PE05/+dF7mZV6Ga6+9lr/7u78DQBIvKkn8SyTx/Dz96U/nmmuu4cVe7MVe67d+67e+m6uuuuqqq6666qqr/qNQueqqq6666qqrrvpfICLe+9prr/2s2Wz24FIKEUFEEBFIQhIRgSQkIQkASUhCEgCSkASAJCQBIAkASQBIAkASAJK4nyQAJHG//f19ADY3N7mfJF4UknhBzp49y4u92Is9+HVe53Xe64477visxWLx2qUUIgJJRASSkIQkJAEgCUkASAJAEveTxHN7+tOfDsDW1haSeFFJ4kUhiRfkvvvuA+DFXuzFXpurrrrqqquuuuqqq/4jUbnqqquuuuqqq676H0rSgxeLxXsdO3bsvefz+YMjgoggIogIJBERSEISkpCEJAAkIQlJAEgCQBKSAJAEgCQAJAEgCQBJ3E8SAJK4nyQA9vb2uPPOO7nxxhu55pprOHv2LC8KSbwwt956Ky/2Yi/GS77kS7735uYmEUFEIAlJSEISkpCEJAAkASAJAEncTxIPJAmA3d1dnv70p/OQhzyEa665hvvuu49/iSReFJJ4UZw9e/ZWrrrqqquuuuqqq676j0Rw1VVXXXXVVVdd9T+MpAdvbW191s033/z0a6+99rM3Nzcf3HUdXddRa6XWSimFUgoRQUQQEUQEkpBERBARSEISkpBERCAJSUhCEpKQhCQkIQkASQBIQhIAkrifJO4nicc//vEAvPiLvzj/EklI4oWRxNHREWfPnuXUqVM86lGPopRCRBARRAQRgSQkIQkASQBIAkAS95PEA0nigf7qr/4KgIc+9KH8SyTxopDECyOJo6MjDg8PebEXe7HXvuaaax7MVVddddVVV1111VX/UahcddVVV1111VVX/Q8REQ/e2dn5rGPHjr13KYWIICKICCQREUhCEpKQhCQkASAJSUgCQBIAkpAEgCQAJAEgCQBJ3E8SAJK4nyTuJ4kHkgTAnXfeCcDm5iYvjCT+JZJ4bo94xCN4+tOfjiQkIQlJAEhCEgCSuJ8k7ieJf8nTn/50AK699lpeEEm8KCTxL5HEVVddddVVV1111VX/qQiuuuqqq6666qqr/pvN5/PPuv76659+yy23PP3UqVPv3fc9XddRa6XWSimFUgoRQUQQEUQEEUFEIImIICKQhCQkIYmIQBKSkIQkJCEJSQBIAkASkgCQBIAkJHE/STyQJO63t7fHnXfeyebmJg95yEN4bpKQxL9EEg/0D//wDwA8/OEPJyKICCQhCUlIQhIAkrifJO4niecmiee2u7vL05/+dDY3N3noQx/Kc5PEi0IS/xJJXHXVVVddddVVV131n47gqquuuuqqq6666r+BpAdvbm5+1i233OLrr7/+szc2Nh7cdR21VmqtlFIopRARRAQRQUQQEUQEEYEkJBERSEISkpBERCAJSUhCEpIAkASAJCQhCUkASEISAJK4nyQk8UCSeG5/8id/AsCLvdiL8UCS+JdIQhLP7ejoCICTJ08iCUlIQhIAkgCQxP0kcT9JPD+2eX5+8id/kt3dXV7iJV6CB5LEi0IS/xJJXHXVVVddddVVV131X4Lgqquuuuqqq6666r9QRDx4a2vrs26++eanX3PNNZ/d9z1d11FrpdZKKYWIICKICCKCiCAiiAgiAklIIiKQhCQkIYmIQBKSkIQkJAEgCUlIQhIAkgCQhCQAJCGJ+0niX2Ib2+zt7XHHHXewubnJNddcgyQk8S+RxL/kxIkTSAJAEpKQBIAk7ieJF5VtbGMb29jm4sWLXLx4kc3NTV7iJV4CSUjiRSGJf4kknp/NzU0A7rvvvlu56qqrrrrqqquuuuo/CsFVV1111VVXXXXVf4Fa62vfeOONt958881Pv+aaaz6773u6rqPWSimFUgqlFEoplFIopRARRAQRQUQgCUlEBJKQhCQkERFIQhKSAJAEgCQkIQlJAEhCEgCSuJ8kHkgSL4htbGOb++3t7fH4xz8egBd/8RfnXyIJSbwwR0dHnD17FoCHPexhSEIS95PE/STxQJL4t/jN3/xNAB760IeyubnJv0QSknhhJCGJF+Yf/uEffpurrrrqqquuuuqqq/4jEVx11VVXXXXVVVf9J5H04I2Njc+6/vrrn37TTTf91mw2e1Df99RaqbVSSqGUQimFUgoRQUQQEUgiIogIJCGJiEASkpCEJCQhCQBJAEhCEpKQBIAkACQhCQBJSOJ+knggSbwobGMb29jm9ttvB+DMmTOcOXOGF0QS/xJJ3O/ixYsASAJAEpK4nyT+I9jmaU97Gn/5l3/J5uYmr/zKr8wLI4l/iSRemAc/+MEA3Hfffbdy1VVXXXXVVVddddV/JIKrrrrqqquuuuqq/2CSHry1tfVZN91009Ovueaaz97Y2Hhw13V0XUcphVorpRRKKUQEEUFEEBFIQhIRgSQkERFIQhKSkIQkJCEJSUhCEpKQhCQAJCEJAEncTxL3k4QkXhS2sY1tbGMb29jGNpnJpUuX+JVf+RUAXvEVX5HnRxIvjCQkcb/Dw0NOnDjByZMnAZDEA0ni38o2trGNbe73G7/xGzztaU/jmmuu4cVf/MV5fiTxL5HECyOJa6+9FoB/+Id/+B2uuuqqq6666qqrrvqPROWqq6666qqrrrrqP0hEPHhnZ+ezdnZ23ruUQkQQEUQEEYEkJCEJSUhCEpIAkIQkACQhCQBJAEgCQBIAkgCQBIAk7ieJ+0nifpJ4IEm8ILZ5QWxzP9vczzYAt912G3t7e+zs7PDgBz+YW2+9FQBJ/Esk8cJI4oEk8YLYRhL3s80LY5v7Xbx4kd/4jd/goQ99KC/xEi8BwN///d9zP0n8SyTxwkgC4MEPfjAA//AP//DbXHXVVVddddVVV131H4ngqquuuuqqq6666t9pPp9/1nXXXff0m2+++eknT558777v6bqOWiu1VkopRAQRQUQQEUQEEUFEIImIICKQREQgCUlIQhKSkIQkJCEJSUgCQBIAkpAEgCQkcT9JPJAkXlS2sY1tbGMb29jGNrbJTGyTmVy6dIk/+IM/AODFXuzFAJDEv0QSz8/R0REAJ06c4IEk8S+xjW1s8/zYxja2uZ9tbPO0pz2NX//1XwfgoQ99KNdccw2SkMS/RBIvjCQAHvzgBwPwD//wD79933333cpVV1111VVXXXXVVf+RKMePH+eqq6666qqrrrrqX0vSgzc2Nj7quuuu++2dnZ3X7vv+eK2VUgqlFCKCiCAiiAgigoggIogIIgJJSCIikIQkJCEJSUhCEpKQhCQkIQlJAEhCEgCSuJ8kHkgSz00SL4htnptt7mcbANsA2AbANgC2uffee7nllls4c+YMm5ub3HXXXbwgkpDEC/KgBz2I48eP85d/+Zfcfffd3E8S/xa2eW62uZ9t7vfUpz4VgEc/+tFce+219H3PfffdxwsiCUm8MJK436u92quxu7t763d913d9zNmzZ2/lqquuuuqqq6666qr/SJTjx49z1VVXXXXVVVdd9aKKiAdvbm5+1HXXXffTW1tbr911HbVWaq2UUogIIoJSChGBJCKCiCAiiAgkIYmIQBKSkIQkJCEJSUhCEpKQBIAkACQhCQBJSAJAEpK4nyQk8W9hm/vZ5n62AbANgG0AbANgG9sAPOMZz+AVXuEVOH78OEdHR+zu7vLcJPHCSOLGG2/k+PHjPO5xj+Puu+/mfpJ4UdnmudnmgWwDYJv72eZpT3saFy5c4GVe5mXY3Nyk73vuu+8+npsk/iWSuN9rv/Zrc+LECX7hF37ha37rt37ru7nqqquuuuqqq6666j8a5fjx41x11VVXXXXVVVf9S0opr3399df/1vHjxz97a2vrtWut1FoppRARRASlFCKCiCAikEREEBFEBJKQREQgCUlIQhKSkIQkJCEJSUgCQBKSAJDE/SRxP0k8kCT+tWxzP9vczzYAtgGwDYBtAGwDYBvbANhmuVxy6dIlHvWoR3H8+HHuuusuxnEEQBKSeGEkAfBSL/VSHBwc8Jd/+Zfs7u5yP0m8ILZ5QWxzP9vczzYAtgGwDYBt7rrrLmzzmMc8hmuuuYZrrrmG++67j3EcAZDEv0QS93vFV3xFbrzxRu67775bv+u7vutjDg8Pd7nqqquuuuqqq6666j8a5fjx41x11VVXXXXVVVc9t2uuuebBR0dHxxeLxUedPn36u0+ePPnRfd8fr7VSa6WUQkRQSiEiiAgigohAEpKICCICSUgiIpCEJCQhCUlIQhKSkASAJAAkIQkASUgCQBKSuJ8knpsk/iW2eSDb3M82ALYBsA2AbQBsA2Ab29jGNraxjW1sc8899wDwiEc8ghtuuIG77rqLaZr4l0jifi/1Ui/FarXiD//wD1mtVvxb2OaBbHM/2wDYBsA2ALYBsI1tnvrUp/KUpzyFhz/84Zw+fZqbbrqJvu85e/YsL4wkJAGwubnJq73aq3HjjTfyD//wD7/9Xd/1XR9z6623/jVXXXXVVVddddVVV/1nQA960IO46qqrrrrqqquuAnixF3ux136d13md95L04MPDw9f+1V/9VWqtRAQRQUQgiYhAEpKQhCQkIQkASUgCQBKSAJAEgCQAJAEgiftJAkAS95PE/STxQJJ4YSQBYJsXxDb3sw2Abe5nGwDb2AbANgC2sQ2AbWwDYBvb2Abg2LFjvPVbvzUPfvCDOTw85Jd+6Zd4QSTxQA960IN4+Zd/eS5evMiXfdmX8a9hmweyzf1scz/bANgGwDYAtrENgG1sY5uTJ0/yiq/4irzJm7wJAIeHh5w9e5anP/3p3HfffTyQJAA2Nzd58IMfzIu92IsBcN9999369V//9e/zD//wD7/NVVddddVVV1111VX/WdCDHvQgrrrqqquuuuqq/9+uueaaB3/4h3/4d1177bWv/bM/+7P87d/+LaUUSilEBJKICCQhCUlIQhKSkASAJCQBIAlJAEgCQBIAkgCQxP0kcT9J3E8S95PEA0ni38I2D2QbANvczzYAtgGwjW0AbANgG9sA2MY2tgGwjW1sYxuAY8eO8b7v+76cOHGCw8NDfud3foejoyMeSBLP7eVf/uV50IMexI//+I/zl3/5l/xLbPPcbHM/29zPNgC2AbANgG1sYxsA29gGwDYRQa2VM2fO8I7v+I485CEP4X6Hh4cA3HfffUhiY2ODa665hvvdd999t549e/bWr//6r3+f++6771auuuqqq6666qqrrvrPRDl+/DhXXXXVVVddddX/b5/0SZ/0Uy/2Yi/22t/1Xd/Fk5/8ZGqt1FqJCEopRAQRQUQQEUQEEUFEIAlJRASSkEREIAlJSEISkpCEJAAkASAJSQBIQhIAkpDE/STx3CTxorDNA9nmfra5n20AbANgGwDb2AbANraxjW1sYxvb2MY2trGNbWxjm8zk6OiIxz/+8Tz2sY9lZ2eHG264gbvuuotxHJGEJJ7bmTNneKmXeikuXrzIb/7mb7JarXhutnl+bPNAtgGwzf1sA2Ab2wDYxjYAtrGNbQAk0XUds9mMrutorfH3f//3/P3f/z3jOCKJ06dPs1qtuO666zh+/Dibm5vc77777rv167/+69/nR3/0Rz/n8PBwl6uuuuqqq6666qqr/rOhBz3oQVx11VVXXXXVVf9/ffiHf/h3vc7rvM57f9M3fRO33norkogIJCEJSUhCEpKQhCQAJCEJAElIAkASAJIAkMT9JAEgiftJ4oEkcT9JvCCSeH5s89xscz/b3M82ALYBsA2AbQBsYxsA29gGwDa2AbCNbWxjG9sA2MY2tpGEJCRx8uRJ3ud93ofjx49zeHjIbbfdxuMe9zie28bGBi//8i9PrZW//Mu/5Dd+4zewzQtjmweyzf1sA2AbANsA2AbANrYBsI1tbHO/Witd11FrpZRCrZVSCrVWSinUWimlUGvl5ptv5tixY7zMy7wMW1tb3Hfffbf+6I/+6Of81m/91ndz1VVXXXXVVVddddV/JSpXXXXVVVddddX/Wy/2Yi/22i/2Yi/22k972tO47bbbKKUgCUlEBJIAkIQkJCEJAEkASEISAJIAkMT9JAEgiftJ4n6SuJ8kHkgSL4xtXhjb3M8297MNgG0AbANgGwDb2AbANgC2sQ2AbWxjGwDb2MY2trGNbQAkUUpBEpKICPb39/n+7/9+HvSgB/EWb/EWPOYxj+FBD3oQZ8+e5ezZswBsbGzw2Mc+FoC/+Iu/4Nd//dd5YWzzQLa5n20AbANgGwDbANjGNgC2sY1tAGxTa6XrOmqtlFKotVJrpZRCrZVSCqUUaq3UWqm10vc9L/uyL8vh4eGtv/ALv/DdP/qjP/o5XHXVVVddddVVV13134HKVVddddVVV131/9Y7vdM7fdY111zz4N/93d+llIIkJCEJSQBIQhKSAJAEgCQkASAJAEncTxIAkrifJO4niQeSxANJ4l/LNg9km/vZBsA2ALYBsA2AbQBsYxsA2wDYxja2AbCNbWxjG9vYxjYAkogIJCEJSUQEkogIJHHixAke/OAHc7+NjQ0e9KAH8aAHPYgH+ou/+At+/Md/nOfHNg9km/vZ5n62AbANgG0AbGMbANvYxjYAtimlUGul6zpKKdRaqbVSSqHWSimFWiulFGqt1Fo5fvw4r/EarwFw68///M9/94/+6I9+DlddddVVV1111VVX/XeictVVV1111VVX/b/0Yi/2Yq995syZBwP8zd/8DRGBJCQBIAlJSAJAEgCSAJCEJO4nCQBJAEjifpK4nyQeSBL/VrZ5bra5n20AbANgGwDbANgGwDYAtrENgG1sA2Ab29gGwDa2sY1tbAMgCUlIQhIRgSQiAkmcOHGCl3zJl+Q1XuM1eKA//uM/5s4772Rra4vTp09z8eJFdnd3+Yu/+AseyDbPj23uZ5v72QbANgC2AbCNbQBsYxvbANgmIuj7nlortVZKKdRaKaVQa6WUQq2VUgq1VmqtHD9+nJd92ZfloQ99KD/yIz/y2T/6oz/6OVx11VVXXXXVVVdd9T8Blauuuuqqq6666v+lF3uxF3uta6655sF/9Vd/RUQgCQBJSEISAJIAkASAJAAkASAJAEncTxL3k8T9JPFAknhBbCMJANu8ILZ5INsA2OZ+tgGwDYBtbANgGwDb2AbANraxDYBtbGMb29jGNraRhCQkIYmIQBIRgSQiguPHj/NSL/VSvPqrvzr329vb43GPexx//Md/zHK55OjoiGmaeCDbvCC2eSDbANjmfrYBsI1tAGxjGwDb2AbANpLo+55aK7VWSinUWimlUGullEKtlVIKtVZqrRw/fpxHPepRvORLviQ/8iM/8tlf9mVf9j333XffrVx11VVXXXXVVVdd9T8Flauuuuqqq6666v+lF3/xF39tgGc84xlEBACSkASAJAAkASAJAEkASAJAEveTxP0k8UCSeCBJ/Ets8/zY5oFsA2Cb+9kGwDYAtgGwjW0AbANgG9vYBsA2trENgG1sYxvb2EYSEUFEIAlJRASSiAiOHz/OS73US/GSL/mSHDt2jPv9wz/8A3feeSePe9zjWC6XXLp0iReVbR7INvezDYBt7mcb2wDYxjYAtrGNbe7XdR21VmqtlFKotVJrpZRCKYVaK6UUaq3UWqm18vIv//K85Eu+JP/wD//w2x/yIR/yPvfdd9+tXHXVVVddddVVV131Pw2Vq6666qqrrrrq/6UzZ848GOAZz3gGkpAEgCQAJAEgCQBJAEjifpIAkMT9JPFAknhukvjXsM0D2eZ+trmfbQBsA2AbANsA2MY2ALaxDYBtbANgG9vYxja2sY1tJCGJiEASkogIJCGJiOD48eO81Eu9FK/xGq/B/fb29viHf/gH/vRP/5TlcslqtWK1WvGisM1zs839bANgGwDbANgGwDa2AbCNbWwDYJuu66i1Umul1kophVorpRRqrZRSKKVQa6XWSq2Vl3/5l+elXuqluO+++279zM/8zPf5h3/4h9/mqquuuuqqq6666qr/qahcddVVV1111VX/L11zzTUPBtjb20MSkgCQBIAkACQBIIn7SeJ+krifJB5IEv8Wtnlutrmfbe5nGwDbANgGwDYAtrENgG0AbGMbANvYxja2AbCNbWxjG0lEBJKQhCQiAklEBJJ4rdd6LV7yJV+SY8eOcb+9vT3++I//mH/4h39gtVpx6dIlXhS2eW62uZ9t7mcbANsA2AbANrYBsI1tbANgm1IKXddR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8YlP/OyzZ89+z3q9vpWrrrrqqquuuuqqq6666j8TetCDHsRVV1111VVXXXXVc7vmmmse/Dmf8zm/dc011zz44sWLfNM3fRO7u7tIQhIAEYEkJCGJkydP8jqv8zq89Eu/NPe7dOkSf/u3f8tv/dZv3Xr+/PnvvuOOOz6Hq6666qqrrrrqqquuuuq/CnrQgx7EVVddddVVV1111fNz5syZB33ER3zEd585c+bBXdc9+C/+4i/4jd/4DSQhCUmcPHmSl3mZl+FlXuZlOH78OPf7vd/7Pf7u7/6Oc+fO3XrnnXd+zrlz576bq6666qqrrrrqqquuuuq/GnrQgx7EVVddddVVV1111QtyzTXXPPi1X/u13+ud3umdPhtgd3eX3/zN3+TWW2/lZV7mZXid13kd7re7u8vf/d3f8fd///eUUn77t3/7t99nvV7fylVXXXXVVVddddVVV1313wU96EEP4qqrrrrqqquuuupf8mIv9mKv/U7v9E6f9WIv9mKvzfPxe7/3e9x+++086EEP4vjx47/9mZ/5ma/DVVddddVVV1111VVXXfXfjXL8+HGuuuqqq6666qqr/iVnz5699R/+4R9+59Zbb/3rzc3N49dcc82DeYAHPehBRMRvP+UpT/nur//6r38frrrqqquuuuqqq6666qr/CdCDHvQgrrrqqquuuuqqq/4tXuzFXuy1ucJnz559xn333XcrV1111VVXXXXVVVddddX/JOhBD3oQV1111VVXXXXVVVddddVVV1111VVXXXXV/0lUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9V/CNabwGasoJS0AAAAABJRU5ErkJggg==) diff --git a/docs/kcl/patternLinear2d.md b/docs/kcl/patternLinear2d.md index 9910804d5..db0bb2bfe 100644 --- a/docs/kcl/patternLinear2d.md +++ b/docs/kcl/patternLinear2d.md @@ -9,7 +9,7 @@ Repeat a 2-dimensional sketch along some dimension, with a dynamic amount of distance between each repetition, some specified number of times. ```js -patternLinear2d(data: LinearPattern2dData, sketch_set: SketchSet, use_original?: bool) -> [Sketch] +patternLinear2d(sketch_set: SketchSet, instances: integer, distance: number, axis: [number], use_original?: bool) -> [Sketch] ``` @@ -17,9 +17,11 @@ patternLinear2d(data: LinearPattern2dData, sketch_set: SketchSet, use_original?: | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`LinearPattern2dData`](/docs/kcl/types/LinearPattern2dData) | Data for a linear pattern on a 2D sketch. | Yes | -| `sketch_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | A sketch or a group of sketches. | Yes | -| `use_original` | `bool` | | No | +| `sketch_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | The sketch(es) to duplicate | Yes | +| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `distance` | `number` | Distance between each repetition. Also known as 'spacing'. | Yes | +| `axis` | `[number]` | The axis of the pattern. A 2D vector. | Yes | +| `use_original` | `bool` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns @@ -31,11 +33,7 @@ patternLinear2d(data: LinearPattern2dData, sketch_set: SketchSet, use_original?: ```js exampleSketch = startSketchOn('XZ') |> circle({ center = [0, 0], radius = 1 }, %) - |> patternLinear2d({ - axis = [1, 0], - instances = 7, - distance = 4 - }, %) + |> patternLinear2d(axis = [1, 0], instances = 7, distance = 4) example = extrude(exampleSketch, length = 1) ``` diff --git a/docs/kcl/patternLinear3d.md b/docs/kcl/patternLinear3d.md index f6b04f543..49d7ff4a8 100644 --- a/docs/kcl/patternLinear3d.md +++ b/docs/kcl/patternLinear3d.md @@ -9,7 +9,7 @@ Repeat a 3-dimensional solid along a linear path, with a dynamic amount of distance between each repetition, some specified number of times. ```js -patternLinear3d(data: LinearPattern3dData, solid_set: SolidSet, use_original?: bool) -> [Solid] +patternLinear3d(solid_set: SolidSet, instances: integer, distance: number, axis: [number], use_original?: bool) -> [Solid] ``` @@ -17,9 +17,11 @@ patternLinear3d(data: LinearPattern3dData, solid_set: SolidSet, use_original?: b | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`LinearPattern3dData`](/docs/kcl/types/LinearPattern3dData) | Data for a linear pattern on a 3D model. | Yes | -| `solid_set` | [`SolidSet`](/docs/kcl/types/SolidSet) | A solid or a group of solids. | Yes | -| `use_original` | `bool` | | No | +| `solid_set` | [`SolidSet`](/docs/kcl/types/SolidSet) | The solid(s) to duplicate | Yes | +| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `distance` | `number` | Distance between each repetition. Also known as 'spacing'. | Yes | +| `axis` | `[number]` | The axis of the pattern. A 2D vector. | Yes | +| `use_original` | `bool` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns @@ -37,11 +39,7 @@ exampleSketch = startSketchOn('XZ') |> close() example = extrude(exampleSketch, length = 1) - |> patternLinear3d({ - axis = [1, 0, 1], - instances = 7, - distance = 6 - }, %) + |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6) ``` ![Rendered example of patternLinear3d 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAACqVklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVf9r3TNNdc8+LVf+7Xf68Vf/MVf++///u9/G+BHf/RHP4errrrqqquuejb0oAc9iKuuuuqqq6666qqrrrrqqqv+d7jmmmse/Nqv/drv9eIv/uKv/WIv9mKvvbu7y1/+5V/ykIc8hIc85CHcd999t37WZ33W69x33323ctVVV1111VWAHvSgB3HVVVddddVVV1111VVXXXXV/1zXXHPNg1/7tV/7vV7ndV7nva+55poH7+7u8pd/+Zfs7u7yV3/1VwBI4nVe53V4ndd5He67775bf+u3fuu7f/RHf/RzuOqqq6666v879KAHPYirrrrqqquuuuqqq6666qqr/me55pprHvzar/3a7/U6r/M6733NNdc8eHd3l7/8y79kd3eXv/7rv+YFefCDH8z7vu/7AvD1X//17/Nbv/Vb381VV1111VX/n6EHPehBXHXVVVddddVVV1111VVXXfXf75prrnnwa7/2a7/X67zO67z3Nddc8+Dd3V3+6q/+iqc//enceuutvCDHjx/nZV7mZXiZl3kZjh8/zv3uu+++Wz/kQz7kIVx11VVXXfX/GZWrrrrqqquuuuqqq6666qqr/ttcc801D37t137t93qd13md977mmmsevLu7y1/91V/x8z//89x66628IMePH+dlXuZleJmXeRmOHz/O/Y6OjnjGM57BYx7zGK666qqrrroKoHLVVVddddVVV1111VVXXXXVf6lrrrnmwa/92q/9Xq/zOq/z3tdcc82Dd3d3+au/+it+/ud/nltvvZUX5Pjx47zMy7wML/MyL8Px48e539HREc94xjM4e/Ys586d4/Tp0zzmMY/h7Nmzt3LVVVddddX/d1Suuuqqq6666qqrrrrqqquu+k93zTXXPPi1X/u13+ud3umdPhtgd3eXv/qrv+Lnf/7nufXWW3lBjh8/zsu8zMvwOq/zOjzQ0dERz3jGMzh37hxnz57lgTY3NwG47777buWqq6666qr/76hcddVVV1111VVXXXXVVVdd9Z/immuuefBrv/Zrv9c7vdM7fTbA7u4uv/Vbv8XTn/50br31Vl6QEydO8NIv/dK8zuu8Dg90dHTEM57xDM6dO8e5c+d4QRaLBQD33XffrVx11VVXXfX/HZWrrrrqqquuuuqqq6666qqr/sNcc801D37t137t93qnd3qnzwbY3d3lt37rt/irv/ordnd3eW6SADh+/Dgv/dIvzeu8zuvwQEdHR9x2222cO3eOs2fP8txs80C22dzcBODs2bPP4Kqrrrrqqv/vqFx11VVXXXXVVVddddVVV13173LNNdc8+LVf+7Xf653e6Z0+G2B3d5ff+q3f4q/+6q/Y3d3lfpJ4oAc/+ME8+MEP5nVe53V4oKOjI2677TZuu+02jo6OeEFs8/xsbGxw1VVXXXXVVc9E5aqrrrrqqquuuuqqq6666qp/tRd7sRd77Rd7sRd7rXd6p3f6bIDd3V1+67d+i7/6q79id3cXSQBI4oEe/OAH8+AHP5jXeZ3X4YGOjo647bbbuP322zk8POS52eaBbPPcbAOwubkJwD/8wz/8NlddddVVV/1/R+Wqq6666qqrrrrqqquuuuqqF8mLvdiLvfaLvdiLvdY7vdM7fTbA7u4uv/Vbv8Vf//Vfs7u7y/0kcb/jx4/z0i/90gC8zuu8Dg90dHTEbbfdxu23387R0REviG3+Jba538bGBgD33XffrVx11VVXXfX/HZWrrrrqqquuuuqqq6666qqrnq9rrrnmwa/92q/9XgDv9E7v9NkAu7u7/NZv/Ra//du/zQty/PhxXvqlX5oTJ07w0i/90jzQ0dERt99+O7fffjuHh4c8N9s8kG2em22uuuqqq6666kVE5aqrrrrqqquuuuqqq6666qpnueaaax782q/92u91zTXXPPh1Xud13htgd3eX3/qt3+K3f/u3eUGOHz/OS7/0S3PixAle+qVfmgc6Ojri9ttv54lPfCIvjG3+JbZ5bra535kzZwD4h3/4h9/mqquuuuqqq4DKVVddddVVV1111VVXXXXV/3PXXHPNg1/7tV/7va655poHv87rvM57A+zu7vJbv/Vb/PZv/zYvyPHjx3npl35pHvKQh/DgBz+YBzo6OuL222/nSU96ErZ5brZ5INs8N9s8kG2em20eaGNjA4D77rvvVq666qqrrroKqFx11VVXXXXVVVddddVVV/0/dM011zz4tV/7td/rxV/8xV/7xV7sxV4bYHd3l9/6rd/it3/7t3lBjh8/zku/9EvzkIc8hAc/+ME80NHREbfffjtPetKTeGFs8y+xzb/ENs/NNlddddVVV131AFSuuuqqq6666qqrrrrqqqv+H3md13md936d13md93qxF3ux1wa49dZb+a3f+i1++7d/mxfkxIkTvPRLvzQPfvCDefCDH8wDnT9/nvPnz/OkJz0J2zw32zyQbZ6bbR7INs/NNv8S25w5cwaAf/iHf/gdrrrqqquuugqoXHXVVVddddVVV1111VVX/T/xYi/2Yq/9Oq/zOu/1Yi/2Yq/913/91/zUT/0Uz00SAMePH+elX/qlefCDH8yDH/xgHuj8+fOcP3+eJz3pSdzPNs/NNg9km+dmm3+JbZ6bba666qqrrrrqRUDlqquuuuqqq6666qqrrrrq/4lrrrnmwS/2Yi/22gAPfvCDOX78OJcuXeJ+x48f56Vf+qV56Zd+aY4fP879lsslR0dHnD9/nic/+cnY5l9im3+JbZ6bbR7INs/NNs/NNgBnzpwB4B/+4R9+m6uuuuqqq64CKlddddVVV1111VVXXXXVVf9PnDlz5kG7u7vs7u7y4Ac/mPd5n/fhp3/6p3nwgx/MS7/0S3P8+HHut1wuueOOOzg6OuKOO+7gfrZ5brZ5INs8N9s8kG2em23+JbZ5bra56qqrrrrqqheAylVXXXXVVVddddVVV1111f8T11xzzYOf8Yxn8Du/8zu81Eu9FK/1Wq/Fe7/3e3O/5XLJHXfcwXK55I477sA2/xLb/Ets8y+xzXOzzb/ENg+0ubkJwH333XcrV1111VVXXQVUrrrqqquuuuqqq6666qqr/p/Z3d3lb//2b3mpl3opjh8/zpOf/GTOnz/PhQsXuJ9tnpttHsg2z802D2Sb52abB7LNc7PNc7PNC7OxsQHAfffddytXXXXVVVdddQXBVVddddVVV1111VVXXXXV/xMv9mIv9tq7u7sA7O7ucvz4cQDuuOMOLly4wAtjmweyzXOzzQPZ5rnZ5l9im+dmm+dmmwc6c+YMAP/wD//w21x11VVXXXXVFVSuuuqqq6666qqrrrrqqqv+H9nd3eW5LZdLHsg2D2SbB7LNc7PNv8Q2z802D2Sb52ab52abq6666qqrrnoRULnqqquuuuqqq6666qqrrvp/4pprrnkwz3T8+HEAlsslD2SbB7LNA9nmudnmudnmgWzz3Gzzb2Gb52abjY0NAO67775bueqqq6666qorqFx11VVXXXXVVVddddVVV/0/8oxnPAOAY8eOAXB0dMT9bPNAtvmX2Oa52eaBbPPcbPPcbPPcbPOi2tzcBODs2bPP4KqrrrrqqquuoHLVVVddddVVV1111VVXXfX/wDXXXPNgHuD48eMALJdLAGzzQLZ5brZ5INs8N9v8S2zz3Gzz3Gzz3Gzz3GwDsLm5CcB99913K1ddddVVV111BZWrrrrqqquuuuqqq6666qr/B86cOfNggN3dXZ6bbR7INs/NNv8S2zw32zyQbZ6bbZ6bbZ6bbZ6bbe63sbEBwNmzZ2/lqquuuuqqq66gctVVV1111VVXXXXVVVdd9f/ANddc82CeSRLHjh0D4OjoiAeyzXOzzXOzzQPZ5rnZ5l9im+dmm+dmm+dmmwfa3NwE4L777ruVq6666qqrrrqCylVXXXXVVVddddVVV1111f8Tu7u73O/48eMALJdLXhjbPDfbPJBtnpttnptt/iW2eW62+Zdsbm4CcN99993KVVddddVVVz0blauuuuqqq6666qqrrrrqqv8HXuzFXuy1dnd3eWFs80C2eW62+ZfY5rnZ5rnZ5t/KNg+0sbEBwNmzZ2/lqquuuuqqq56NylVXXXXVVVddddVVV1111f8Tly5d4n4PetCDADh//jwAtnkg2zw32zw32zyQbZ6bbZ6bbZ6bbZ6bbZ6bbZ7bxsYGAPfdd9+tXHXVVVddddWzEVx11VVXXXXVVVddddVVV/0/cM011zyYF8A2D2Sb52ab52abB7LNc7PNc7PNc7PNc7PNc7PNc7PN5uYmAPfdd9+tXHXVVVddddWzEVx11VVXXXXVVVddddVVV/0/cObMmQfv7u5yv+PHjwNwdHTEA9nmudnmudnmX2Kb52ab52ab52ab52abF2RzcxOAs2fPPoOrrrrqqquuejYqV1111VVXXXXVVVddddVV/0/s7u7ywtjmudnmudnmudnmX2Kb52ab52ab52ab58c2ABsbG1x11VVXXXXV80Hlqquuuuqqq6666qqrrrrq/4FrrrnmwTzT8ePHATg6OuJ+tnlutnlutnlutnlutvnPZpv7bW5uAvAP//APv81VV1111VVXPRuVq6666qqrrrrqqquuuuqq/yee8YxnAHDs2DEAlsslL4htnpttnpttnpttnpttnpttnpttnpttnpttHmhzcxOA++6771auuuqqq6666tmoXHXVVVddddVVV1111VVX/R/3Yi/2Yq/NAxw/fhyAo6MjAGzzL7HNc7PNc7PNc7PNc7PNc7PNc7PNc7PNVVddddVVV72IqFx11VVXXXXVVVddddVVV/0fd8011zwYYHd3l+dmm+dmmweyzXOzzXOzzXOzzXOzzXOzzXOzzXOzzXM7c+YMAP/wD//w21x11VVXXXXVc6Jy1VVXXXXVVVddddVVV131/8yDHvQgAI6Ojnhutnkg2zw32zw32zw32zw32zw32zw327yoNjc3Abjvvvtu5aqrrrrqqqueE5Wrrrrqqquuuuqqq6666qr/486cOfOg3d1dnttyueSBbPNAtnlutnlutnlutnlutnlutnlR2ea52eaqq6666qqrXggqV1111VVXXXXVVVddddVV/8ddc801D97d3eV+x48fB+Do6Ij72eaBbPPcbPPcbPPcbPPcbPPcbPP82Oa52ea52QbgzJkzAPzDP/zD73DVVVddddVVz4nKVVddddVVV1111VVXXXXV/wOXLl3ifseOHQNguVwCYJt/iW2em22em22em21eVLZ5bra56qqrrrrqqn8jgquuuuqqq6666qqrrrrqqv/jrrnmmgfv7u7y/NjmudnmgWzz3Gzz3GzzorLNc7PNc7PN82Ob+11zzTUA/MM//MNvc9VVV1111VXPieCqq6666qqrrrrqqquuuur/uDNnzjx4d3eX+x0/fhyAw8NDnpttHsg2z802LyrbPDfbPDfbPDfbPD+2ueqqq6666qoXEZWrrrrqqquuuuqqq6666qr/R06cOAHA0dERz802/1a2eW62eW62eW62eVHZ5rltbm4CcN99993KVVddddVVVz0nKlddddVVV1111VVXXXXVVf/HXXPNNQ/e3d0F4NixYwAcHR3xQLZ5brZ5brZ5brZ5brZ5brZ5brZ5fmzz3Gzz3DY3NwG47777buWqq6666qqrnheVq6666qqrrrrqqquuuuqq/8OuueaaBwNcunQJgOPHjwOwXC65n22em22em22em22em22em22em22eH9s8N9s8P2fOnAHgH/7hH36bq6666qqrrnpeVK666qqrrrrqqquuuuqqq/4PO3PmzIN5IWzz3Gzz3Gzz3Gzz3Gzz3GzzorLNi8o2V1111VVXXfUvoHLVVVddddVVV1111VVXXfV/2DXXXPNggN3dXQCOHTsGwNHREbZ5brZ5brZ5brZ5brZ5brZ5fmzz3Gzz/NjmudkGYHNzE4D77rvvVq666qqrrrrqeVG56qqrrrrqqquuuuqqq676P253d5f7HT9+HICjoyOem22em22em22em22em22eH9s8N9s8P7Z5bra53+bmJgBnz559BlddddVVV131vKhcddVVV1111VVXXXXVVVf9H7e7u8u/xDbPzTbPzTbPzTbPzTbPj22em22eH9v8SzY3NwG47777buWqq6666qqrnhfBVVddddVVV1111VVXXXXV/2H/8A//8NsPfvCDea3Xei0Ajh8/DsDR0RH3s81zs81zs81zs82LyjbPzTbPj22eH9s80ObmJgBnz569lauuuuqqq656XgRXXXXVVVddddVVV1111VX/h9133323/siP/Mhnv9RLvRSv9VqvxbFjxwA4OjoCwDbPzTbPzTbPzTbPj22em21eVLZ5fmzz3DY3NwG47777buWqq6666qqrnheVq6666qqrrrrqqquuuuqq/+N+9Ed/9HMA3uiN3uizjx8/DsDR0RG2eW62eW62eW62eX5s89xs8/zY5rnZ5vmxzXPb3Nzkqquuuuqqq/4FBFddddVVV1111VVXXXXVVf8P/PZv//b33Hnnnb/NM73My7wMp0+f5oFs89xs89xs8/zY5rnZ5vmxzXOzzfNjm+dnY2MDgH/4h3/4ba666qqrrrrq+aMcP36cq6666qqrrrrqqquuuuqq/+sODw93/+Ef/uF3Dg8Pd1/8xV/8tY8dO8Ytt9zCLbfcwrFjxxiGgaOjIx7INs/NNs+PbZ6bbZ4f27yobPP82Oaaa67hpptu4h/+4R9++0//9E9/hquuuuqqq656XpTjx49z1VVXXXXVVVddddVVV131/8Hh4eHuP/zDP/zOb//2b3/P4eHhriRuvPHGBx87dowHPehBPOhBD+L48eOM48jh4SHPzTbPj22em22eH9s8P7Z5brZ5fmwDcNNNN3Httdfyp3/6pz/9D//wD7/DVVddddVVVz0vyvHjx7nqqquuuuqqq6666qqrrvr/5PDwcPcf/uEffue3fuu3vue3f/u3v+fw8HD3mmuuefDx48ePHzt2jAc96EE86EEPous6AI6OjrDN82Ob52ab58c2z49tXlS2ud9DH/pQTpw4wW//9m9/z6233vrXXHXVVVddddXzohw/fpyrrrrqqquuuuqqq6666qr/rw4PD3f/4R/+4Xd+4Rd+4Wt++7d/+3sODw93r7nmmgcfP378+JkzZ3jQgx7Egx70ILquQxJHR0fczzbPzTbPj22eH9s8P7b5l9x0002cOHGCP/3TP/2ZW2+99a+56qqrrrrqqueFHvSgB3HVVVddddVVV1111VVXXXXVc7rmmmse/I7v+I6f9Tqv8zrvzQMcHR1x6623cvbsWc6ePcsD2eb5sc3zY5vnxzbPj20e6C3f8i3Z3NzkQz7kQx5y33333cpVV1111VVXPS/0oAc9iKuuuuqqq6666qqrrrrqqquev2uuuebBZ86cefDrvM7rvNfrvM7rvDcPcHh4yDOe8QxuvfVWjo6OsM1zs83zY5vnxzbPj22e27u8y7sA8HZv93biqquuuuqqq54/9KAHPYirrrrqqquuuuqqq6666qqr/mXXXHPNg1/sxV7stV/sxV7stV7ndV7nvXmAw8NDbr31Vh73uMdxP9s8P7Z5fmzz/Njm+XmXd3kXAN7u7d5OXHXVVVddddXzhx70oAdx1VVXXXXVVVddddVVV1111b/ONddc8+AXe7EXe+0Xe7EXe63XeZ3XeW+e6fDwkKOjI57+9Kdz66238txs8/zY5vmxzfNz5swZXv/1X59/+Id/+O3P/MzPfB2uuuqqq6666vmjHD9+nKuuuuqqq6666qqrrrrqqqv+dQ4PD3dvvfXWv/7TP/3Tn/nt3/7t77n11lv/5vDwcPeRj3zkS29ubnLjjTfy4Ac/mBMnTtB1Hbu7u9jm+bHN82Ob58c21157LTfddBP/8A//8Nt/+qd/+jNcddVVV1111fNHOX78OFddddVVV1111VVXXXXVVVf92x0eHu7eeuutf/2nf/qnP/Pbv/3b33Prrbf+zebm5vEbb7zxwcePH+fGG2/kwQ9+MMePH6fve3Z3d7mfbZ4f2zw/tgE4ceIEN910E7feeutf/+mf/unPcNVVV1111VXPH+X48eNcddVVV1111VVXXXXVVVdd9R/j8PBw99Zbb/3r3/qt3/qe3/7t3/6eW2+99W82NzeP33jjjQ8+ceIEN954Iw95yEM4fvw4Xdexu7vLc7PN82Ob+z3qUY/ixIkT/MIv/MLX3HrrrX/NVVddddVVVz1/VK666qqrrrrqqquuuuqqq676T3Hffffdet999333b/3Wb333Nddc8+AXe7EXe+3XeZ3Xea8Xe7EXe+2HPOQhPOQhD+HFX/zFue+++3j605/Offfdh22uuuqqq6666j8QetCDHsRVV1111VVXXXXVVVddddVV/3WuueaaB7/2a7/2e734i7/4a7/Yi73Ya/NMh4eH3HfffTztaU/jvvvu44Fs80Bv9VZvxebmJh/yIR/ykPvuu+9Wrrrqqquuuur5Qw960IO46qqrrrrqqquuuuqqq6666r/HNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22e6fDwkPvuu4+nPe1p3HvvvTy3t3qrt2Jzc5MP+ZAPech99913K1ddddVVV131/KEHPehBXHXVVVddddVVV1111VVXXfXf75prrnnwa7/2a7/Xi7/4i7/2i73Yi702z3R4eMi9997L0572NO677z4A3vVd3xWAt3u7txNXXXXVVVdd9YKhBz3oQVx11VVXXXXVVVddddVVV131P8s111zz4Nd+7dd+r9d5ndd572uuuebBPNPh4SH33nsvD33oQ7nvvvtu/ZAP+ZCHcNVVV1111VUvGOX48eNcddVVV1111VVXXXXVVVf9d7jmmmse/GZv9mYf9bmf+7m/fc011zz4wQ9+8Ev/wz/8w+9wFYeHh7v/8A//8Du/8Au/8DW//du//T2Hh4e711xzzYNPnDhx/MSJEwD86Z/+6U//6Z/+6c9w1VVXXXXVVS8YetCDHsRVV1111VVXXXXVVVddddV/hWuuuebBZ86cefCLvdiLvdY7vdM7fTbA7u4uf/3Xf81Lv/RLc/z4cX7kR37ks3/0R3/0c7jq+brmmmse/I7v+I6f9Q//8A+/81u/9VvfzVVXXXXVVVe9cOhBD3oQV1111VVXXXXVVVddddVV/1muueaaB7/2a7/2e11zzTUPfp3XeZ33Btjd3eWv//qvecYznsGtt94KwEu/9EvzVm/1Vtx33323fv3Xf/37/MM//MNvc9VVV1111VVX/XuhBz3oQVx11VVXXXXVVVddddVVV/1Huuaaax782q/92u/14i/+4q/9Yi/2Yq8NsLu7y1//9V/zN3/zN+zu7vL8vNZrvRav/dqvzX333Xfrh3zIhzyEq6666qqrrrrq34vKVVddddVVV1111VVXXXXVf4Brrrnmwa/92q/9Xi/+4i/+2i/2Yi/22gC7u7v89m//Nn/zN3/D7u4uz48kAI4fP86lS5cAuOaaax58zTXXPPi+++67lauuuuqqq6666t8DPehBD+Kqq6666qqrrrrqqquuuurf4pprrnnwa7/2a7/X67zO67z3Nddc82CA3d1d/vqv/5rf+Z3f4blJ4oGOHz/OS73US3H8+HFe6qVeigf6rd/6re/++q//+vfhqquuuuqqq67696By1VVXXXXVVVddddVVV131r3DNNdc8+LVf+7Xf63Ve53Xe+5prrnkwwK233spv//Zv8zu/8zvcTxLPz/Hjx3mpl3opHvSgB/HgBz+YBzo6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MLZ5QWzz/NjmBbHNC2KbF8Q2D7SxsQHAfffddytXXXXVVVddddV/BCpXXXXVVVddddVVV1111f8611xzzYMBdnd3OX78OABHR0fY5oWxzQtimxfENi+IbV4Q2zw/trnqqquuuuqqq/5LULnqqquuuuqqq6666qqr/s+zzQtimxfENi+IbV4Q27wgtnl+NjY2ALjvvvtu5aqrrrrqqquu+o9C5aqrrrrqqquuuuqqq676X+fMmTMP5kVgmxfGNi+IbV4Q27wgtnlBbPOCbGxsAHD27Nlbueqqq6666qqr/qNQueqqq6666qqrrrrqqqv+17nmmmsefPHiRQBOnDgBwNHREQ9kmxfENi+IbV4Q27wgtnlBbPOC2AZgY2MDgPvuu+9Wrrrqqquuuuqq/yhUrrrqqquuuuqqq6666qr/U2zzgtjmhbHNC2KbF8Q2L4htXhDbXHXVVVddddVV/6moXHXVVVddddVVV1111VX/K+3u7nL8+HEAjo6OsM0LY5sXxDYviG1eENu8MLZ5QWzzQJubmwDcd999t3LVVVddddVVV/1HoXLVVVddddVVV1111VVX/a9z5syZB128eJEXhW1eENu8MLZ5QWzzgtjmBbHN87OxsQHA2bNnn8FVV1111VVXXfUfhcpVV1111VVXXXXVVVdd9b/WiRMnADg6OuK52eaFsc0LYpsXxjYviG1eENtcddVVV1111VX/pahcddVVV1111VVXXXXVVf/rXHPNNQ/mhbDNC2KbF8Y2L4htXhDbvCC2eWFss7m5CcB99913K1ddddVVV1111X8UKlddddVVV1111VVXXXXV/0q7u7scP34cgOVyCYBtXhDbvDC2eUFs88LY5gWxzQtim/ttbGwAcPbs2Vu56qqrrrrqqqv+o1C56qqrrrrqqquuuuqqq/7Xs41tXhDbvCC2eWFs84LY5oWxzQtim6uuuuqqq6666j8dwVVXXXXVVVddddVVV131v84111zz4IsXL3LixAkAjo6OeH5sY5sXxDYviG1s84LY5gWxjW1eENs8t83NTQDuu+++W7nqqquuuuqqq/6jEFx11VVXXXXVVVddddVV/+ucOXPmwbwQtrHNC2Ib27wgtnlBbGObF8Q2L4htbHPVVVddddVVV/2XoXLVVVddddVVV1111VVX/a91/PhxAJbLJfezzQtimxfGNi+MbV4Q27wwtnlBNjY2ALjvvvtu5aqrrrrqqquu+o9E5aqrrrrqqquuuuqqq676X2l3d5cHss0LY5sXxjYviG1eGNu8MLZ5QWyzsbEBwNmzZ2/lqquuuuqqq676j0Tlqquuuuqqq6666qqrrvpf55prrnnwxYsXuZ9tXhDbvDC2eWFs88LY5gWxzQtjG4DNzU0A7rvvvlu56qqrrrrqqqv+I1G56qqrrrrqqquuuuqqq/7XOnHiBABHR0c8N9u8MLZ5YWzzwtjmhbHNC2Kbq6666qqrrrrqvwSVq6666qqrrrrqqquuuup/lWuuuebBPNPx48cBODo64oFs88LY5oWxzQtjmxfENi+MbZ7b5uYmAPfdd9+tXHXVVVddddVV/5GoXHXVVVddddVVV1111VX/K+3u7vLcbPPC2OaFsc0LY5sXxjYvjG2en83NTQDOnj37DK666qqrrrrqqv9IVK666qqrrrrqqquuuuqq/1XOnDnzYJ6LbWzzgtjmX2KbF8Y2L4htXhjbvDC2ueqqq6666qqr/lNQueqqq6666qqrrrrqqqv+17l48SIAJ06cAODo6IgXxDYvjG1eGNu8MLZ5YWzzwthmc3MTgPvuu+9Wrrrqqquuuuqq/0hUrrrqqquuuuqqq6666qr/Va655poH8yKwzQtjmxfGNi+MbV4Y27wwtrnf5uYmAGfPnr2Vq6666qqrrrrqPxKVq6666qqrrrrqqquuuup/nd3dXY4fPw7A0dERD2Sbf4ltXhjbvDC2eWFs88LY5qqrrrrqqquu+i9B5aqrrrrqqquuuuqqq676X+XMmTMP4vmwzb/ENi+MbV4Y2/xLbPPC2Oa5bW5uAnDffffdylVXXXXVVVdd9R+J4Kqrrrrqqquuuuqqq676X+Uf/uEffuf48eOcOHECgKOjI2zzwtjGNi+MbV4Y27wwtrHNC2Ib21x11VVXXXXVVf+lqFx11VVXXXXVVVddddVV/6ucPXv21hMnTvCQhzwEANu8MLZ5YWzzwtjmX2KbF8Y2L8jm5iYA9913361cddVVV1111VX/0Qiuuuqqq6666qqrrrrqqv9V7rvvvlv/4R/+4bdf5mVeBoCjoyOeH9vY5oWxzQtjmxfGNrZ5QWxjmxfENhsbGwCcPXv2Vq666qqrrrrqqv9oBFddddVVV1111VVXXXXV/zo/8iM/8jknTpzg+bGNbV4Y29jmBbGNbV4Y27wwtnlhbAOwubkJwH333XcrV1111VVXXXXVfzSCq6666qqrrrrqqquuuup/nX/4h3/47X/4h3/4bZ7p9OnT2MY2L4xtbPPC2OaFsY1tXhjbvDC2ueqqq6666qqr/ktQjh8/zlVXXXXVVVddddVVV131v8999933jBd7sRd77RtvvPH4gx70IB784AfTdR2SODo64rnZ5oWxzb/ENi+MbV4Y2zy3m266iWuuuYY//dM//el/+Id/+B2uuuqqq6666qr/SJTjx49z1VVXXXXVVVddddVVV/3vc/bs2VuPjo4uHR4e7j7kIQ956a7rOHPmDA960IN48IMfTNd1SOLw8JB/iW1eGNv8S2zzwtjm+XnIQx7CiRMn+O3f/u3vufXWW/+aq6666qqrrrrqPxLl+PHjXHXVVVddddVVV1111VX/O916661//ad/+qc/89u//dvfc+utt/7N4eHh7kMe8pCX7rqOM2fO8KAHPYgHPehB9H0PwNHREQ9km3+JbV4Y2/xLbPOC3HTTTZw4cYI//dM//Zlbb731r7nqqquuuuqqq/4joQc96EFcddVVV1111VVXXXXVVf93XHPNNQ8+c+bMg1/ndV7nvV7ndV7nvXmAw8NDzp49y6233srZs2d5YWzzL7HNC2Obf8nrvu7rcs011/CZn/mZr/MP//APv81VV1111VVXXfUfCT3oQQ/iqquuuuqqq6666qqrrvq/6ZprrnnwmTNnHvxiL/Zir/U6r/M6733NNdc8mGc6PDzk7Nmz3HrrrZw9e5YHss0LY5t/iW1eGNsAvOVbviWbm5t8yId8yEPuu+++W7nqqquuuuqqq/4joQc96EFcddVVV1111VVXXXXVVf8/XHPNNQ9+7dd+7fd6ndd5nfe+5pprHswzHR4ecvbsWZ7+9Kdz9uxZXhjb/Ets88LY5n5v+ZZvyebmJh/yIR/ykPvuu+9Wrrrqqquuuuqq/0joQQ96EFddddVVV1111VVXXXXV/z/XXHPNg1/7tV/7vV78xV/8tV/sxV7stXmmw8NDzp49y9Of/nTOnj3L/WzzL7HNv8Q2D/Qu7/IuALzd272duOqqq6666qqr/qOhBz3oQVx11VVXXXXVVVddddVV/79dc801D37t137t93rxF3/x136xF3ux1+aZDg8POXv2LPfddx9Pf/rTeWFs88LY5vl5l3d5FwDe7u3eTlx11VVXXXXVVf/R0IMe9CCuuuqqq6666qqrrrrqqqvud8011zz4tV/7td/rxV/8xV/7xV7sxV6bZzo8POS+++7j7NmzPP3pT+d+tvmX2Ob52dzc5C3f8i257777bv2QD/mQh3DVVVddddVVV/1Hoxw/fpyrrrrqqquuuuqqq6666qr7HR4e7v7DP/zD7/zWb/3W9/z2b//29xweHu5K4sYbb3zwiRMnuPHGG3nIQx7C8ePH6bqO3d1dXhjbvCAnTpzgoQ99KLfeeutf/9Zv/db3cNVVV1111VVX/UejHD9+nKuuuuqqq6666qqrrrrqqufn8PBw9x/+4R9+57d+67e+57d/+7e/59Zbb/2bzc3N4zfeeOODT5w4wU033cRDHvIQTpw4Qd/37O7ucj/b/EuuueYabrrpJv7hH/7ht//0T//0Z7jqqquuuuqqq/6jUbnqqquuuuqqq6666qqrrnoR3Hfffbfed9993/1bv/Vb333NNdc8+MVe7MVe+3Ve53Xe68Ve7MVe+yEPeQgPechDePEXf3EODw952tOextOf/nReGNtcddVVV1111VX/6ahcddVVV1111VVXXXXVVVf9K91333233nfffd/9W7/1W999zTXXPPjFXuzFXvt1Xud13uvFXuzFXntzc5NrrrmGl3iJl+Dw8JCnPe1pPP3pT+d+trnf5uYmAPfdd9+tXHXVVVddddVV/xmoXHXVVVddddVVV1111VX/aa655poH33fffbfyf9h9991363333ffdv/Vbv/Xd11xzzYNf7MVe7LVf53Ve571e7MVe7LU3Nze55ppreOVXfmUODw952tOextOe9jQODw8B2NzcBODs2bPP4Kqrrrrqqquu+s9A5aqrrrrqqquuuuqqq676D3XNNdc8+LVf+7Xf63Ve53Xe+5prrnnwb/3Wb333b/3Wb33PP/zDP/w2/8fdd999t953333f/Vu/9Vvffc011zz4xV7sxV77xV7sxV7rdV7ndd57c3OTl3iJl+AlXuIlODw85GlPexqbm5tcddVVV1111VX/qdCDHvQgrrrqqquuuuqqq6666qp/n2uuuebBr/3ar/1e7/RO7/TZPNPu7i6XLl3iQQ96ED/yIz/y2T/6oz/6Ofw/dc011zz4xV7sxV77xV7sxV7rdV7ndd6b5/KZn/mZ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VVddddVVV1111VX/wx0/fpxP+7RP44GOjo649dZbOXfuHGfPngXANv8etvm3sM1VV1111VVXXXXV/1BUrrrqqquuuuqqq6666n+oa6655sEAx44dA+Do6Ihbb72VZzzjGRwdHQFgm38P2/xb2eaqq6666qqrrrrqfzgqV1111VVXXXXVVVdd9b/AT/zET3A/2/x72ebfyjb/GpubmwDcd999t3LVVVddddVVV131X4vKVVddddVVV1111VVX/Q93dHSEbf4j2Obfyjb/Wra56qqrrrrqqquu+m9E5aqrrrrqqquuuuqqq/6Hs82/h23+PWzzr2Wbq6666qqrrrrqqv8BqFx11VVXXXXVVVddddX/Ubb5t7LNv4VtHmhzcxOA++6771auuuqqq6666qqr/utRueqqq6666qqrrrrqqv9DbPPvYZt/C9tcddVVV1111VVX/Q9E5aqrrrrqqquuuuqqq/4Huuaaax7MMx0dHfHC2Obfyzb/FrZ5YTY3NwE4e/bsrVx11VVXXXXVVVf916Ny1VVXXXXVVVddddVV/wvZ5j+Cbf6tbHPVVVddddVVV131PxyVq6666qqrrrrqqquu+l/ENv8RbPNvZZsX1ebmJgD33XffrVx11VVXXXXVVVf916Ny1VVXXXXVVVddddVV/wvY5t/LNv8etvnXss1VV1111VVXXXXVfyMqV1111VVXXXXVVVdd9X+cbf49bPNvYZurrrrqqquuuuqq/2ZUrrrqqquuuuqqq6666n+gM2fOPJhnOjw85N/CNv8etvm3sM39Njc3Abjvvvtu5aqrrrrqqquuuuq/HpWrrrrqqquuuuqqq676P8Q2/162+bewzVVXXXXVVVddddX/MFSuuuqqq6666qqrrrrq/wDb/HvZ5t/CNi/I5uYmV1111VVXXXXVVf+NqFx11VVXXXXVVVddddX/Urb5j2CbfyvbvCjOnj37DK666qqrrrrqqqv+61G56qqrrrrqqquuuuqq/2Vs8x/BNv9Wtrnqqquuuuqqq676X4DKVVddddVVV1111VVX/Q90zTXXPJgHsM1/FNv8W9nmqquuuuqqq6666n8RKlddddVVV1111VVXXfU/3OHhIf8RbPNvZZt/i83NTQDuu+++W7nqqquuuuqqq676r0flqquuuuqqq6666qqr/o+zzb+Hbf4tbHPVVVddddVVV13134zKVVddddVVV1111VVX/R9lm38P2/xb2OZ+m5ubAJw9e/ZWrrrqqquuuuqqq/7rUbnqqquuuuqqq6666qr/Q2zz72WbfyvbXHXVVVddddVVV/0PQuWqq6666qqrrrrqqqv+D7DNv5dt/q1s8/xsbm5y1VVXXXXVVVdd9d+IylVXXXXVVVddddVVV/0PdObMmQfxTIeHh7wgtvmPYJt/K9v8S+67775bueqqq6666qqrrvqvR+Wqq6666qqrrrrqqqv+F7LNfwTb/FvZ5qqrrrrqqquuuup/OCpXXXXVVVddddVVV131v4ht/iPY5t/DNv+Szc1Nrrrqqquuuuqqq/6bUbnqqquuuuqqq6666qr/gc6ePfsMHsA2/xFs8+9hm3+t++6771auuuqqq6666qqr/ntQueqqq6666qqrrrrqqv+B7rvvvlv5D2abfw/bXHXVVVddddVVV/0vQ+Wqq6666qqrrrrqqqv+j7PNv4dt/i02NjYAOHv27K1cddVVV1111VVX/fegctVVV1111VVXXXXVVf8DnT179lae6fDwkH8L2/x72ebfwjZXXXXVVVddddVV/wNQueqqq6666qqrrrrqqv+B7rvvvlv5N7LNv5dt/q1sA7C1tQXAfffddytXXXXVVVddddVV/z0Irrrqqquuuuqqq6666n+of/iHf/htgAc/+ME85CEP4UVhm38v2/xb2MY2V1111VVXXXXVVf+DULnqqquuuuqqq6666qr/oT7zMz/zdb7pm77p6Q95yEMe/JCHPIQXe7EXA+DpT386Z8+e5b777uN+tvn3ss2/lW2uuuqqq6666qqr/geiHD9+nKuuuuqqq6666qqrrvqf6s/+7M9+5tZbb/2bzc3N4zfeeOOD+77nmmuu4SEPeQgPechD6LoOgMPDQ/49bPNvZZvn56abbuLaa6/lT//0T3/6H/7hH36Hq6666qqrrrrqqv96VK666qqrrrrqqquuuup/sPvuu+/W++6777t/67d+67uvueaaB7/Yi73Ya7/Yi73Ya73O67zOe29ubvLiL/7iABweHnLffffx9Kc/nfvuu48XlW3+PWxz1VVXXXXVVVdd9T8Y5fjx41x11VVXXXXVVVddddX/BoeHh7u33nrrX//pn/7pz/z2b//29/zpn/7pzwBsbm4eP3HixPETJ07wkIc8hIc85CGcOHGCvu/Z3d3lBbHNv5Vt/iUPfehDOXHiBL/927/9Pbfeeutfc9VVV1111VVXXfVfj8pVV1111VVXXXXVVVf9L3Tffffdet999936D//wD78NcM011zz4tV/7td/rxV/8xV/7xV7sxV77IQ95CA95yEN48Rd/ce677z7uu+8+nv70p3M/2/xb2eaqq6666qqrrrrqfwnK8ePHueqqq6666qqrrrrqqv/tDg8Pd//hH/7hd37rt37re377t3/7e2699da/2dzcPH7jjTc++MSJE9x00028+Iu/OA95yEPoug6Aw8ND/rVs86K66aabOHHiBH/6p3/6M7feeutfc9VVV1111VVXXfVfj8pVV1111VVXXXXVVVf9H3Pffffdet999333b/3Wb333Nddc8+AXe7EXe+0Xe7EXe63XeZ3Xee/NzU1e4iVeAoDDw0Oe9rSncd9993HffffxL7HNv8bm5iYA9913361cddVVV1111VVX/fegHD9+nKuuuuqqq6666qqrrvq/6vDwcPfWW2/96z/90z/9md/+7d/+nltvvfVvDg8Pdx/ykIe8dN/3XHvttTz0oQ/loQ99KCdOnGAYBg4PD3lutvnXeuhDH8rW1ha/9Vu/9T1nz569lauuuuqqq6666qr/euhBD3oQV1111VVXXXXVVVdd9f/NNddc8+AzZ8486HVe53Xe+8Ve7MVe+5prrnkwz3R4eMh9993Hvffey9Of/nRs82/xVm/1VmxubvIhH/IhD7nvvvtu5aqrrrrqqquuuuq/HpWrrrrqqquuuuqqq676f+i+++679b777rv1H/7hH34H4Jprrnnwa7/2a7/Xi7/4i7/2i73Yi732Qx7yEB7ykIfwEi/xEhweHvK0pz2Ne++9l8PDQ14Utrnqqquuuuqqq676HwA96EEP4qqrrrrqqquuuuqqq656tmuuuebBL/ZiL/bar/M6r/NeL/ZiL/baPMDh4SFPe9rTuPfee7nvvvt4fmwD8NZv/dZsbm7yIR/yIQ+57777buWqq6666qqrrrrqvx560IMexFVXXXXVVVddddVVV/17XHPNNQ9+7dd+7ff6h3/4h9/5h3/4h9/m/5BrrrnmwS/2Yi/2Wi/2Yi/22q/zOq/z3jzA4eEhT3va07j33nu57777ALDN/d7t3d4NgLd7u7cTV1111VVXXXXVVf890IMe9CCuuuqqq6666qqrrrrqX+vFXuzFXvvFXuzFXuud3umdPptnuu+++279h3/4h9/++q//+vfh/6BrrrnmwS/2Yi/22i/2Yi/2Wq/zOq/z3jzA4eEh9957L0972tO49957AXi3d3s3AN7u7d5OXHXVVVddddVVV/33QA960IO46qqrrrrqqquuuuqqf8k111zz4Nd+7dd+r2uuuebBr/M6r/PePNPu7i5/+7d/y+7uLm/5lm/Jb/3Wb33313/9178P/8edOXPmQddcc81DXuzFXuy1XvzFX/y1X+zFXuy1eabDw0PuvfdeHvrQhwLwdm/3duKqq6666qqrrrrqvweVq6666qqrrrrqqquuegGuueaaB7/2a7/2e734i7/4a7/Yi73YawPs7u7yN3/zN1y6dInf/d3f5X4PetCDALjmmmsezP8DZ8+efcbZs2ef8Q//8A+//aM/+qOfc8011zz4tV/7td/rxV/8xV/7xV7sxV77oQ99KAD/8A//8DtcddVVV1111VVX/fehctVVV1111VVXXXXVVQ9wzTXXPPi1X/u13+t1Xud13vuaa655MMDu7i6/+7u/yzOe8Qye8YxncNXzuu+++2790R/90c/50R/90c+55pprHvxiL/Zir33mzJkH/eiP/ujncNVVV1111VVXXfXfh8pVV1111VVXXXXVVf+vXXPNNQ8+c+bMg1/sxV7std7pnd7ps3mm3d1dfvd3f5e//du/ZXd3l3/JpUuXADhz5syD+X/uvvvuu/W+++77bq666qqrrrrqqqv++1G56qqrrrrqqquuuur/nWuuuebBr/3ar/1eL/7iL/7aL/ZiL/baPNPu7i5/+7d/y+/+7u/yopIEwPHjx7nqqquuuuqqq6666n8cKlddddVVV1111VVX/b9wzTXXPPi1X/u13+vFX/zFX/vFXuzFXhtgd3eX3/3d3wXgd3/3d3lRSOJ+D3rQg7jlllt4zdd8Te53zTXXPJirrrrqqquuuuqqq/6noHLVVVddddVVV1111f9Z11xzzYNf+7Vf+71e53Ve572vueaaBwPs7u7yu7/7uzzjGc/gGc94Bv8SSdzv2LFjvORLviTHjx/nJV/yJXmgw8NDNjc3ueqqq6666qqrrrrqfxQqV1111VVXXXXVVVf9n3HNNdc8+MVe7MVe+8yZMw96p3d6p8/mmXZ3d/nd3/1d/vZv/5bd3V3+JZK437Fjx3jJl3xJHvSgB/GgBz2IBzo8POTpT386T3/60wF4i7d4C+67775bueqqq6666qqrrrrqfwoqV1111VVXXXXVVVf9r3bNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVem2d6xjOewTOe8Qx+93d/l3+JJB7o2LFjvORLviQv9VIvxbFjx3ig++67j/vuu4+///u/54E2Nze56qqrrrrqqquuuup/HCpXXXXVVVddddVVV/2vc8011zz4tV/7td/rxV/8xV/7xV7sxV4bYHd3l9/93d9ld3eXv/3bv+VfIon7HTt2jOPHj3PLLbfwmq/5mjzQ4eEhT3/60zk6OuLpT386ALa56qqrrrrqqquuuup/BSpXXXXVVVddddVVV/2vcM011zz4tV/7td/rnd7pnT6bZ9rd3eV3f/d3ecYznsEznvEMXhhJPNCxY8d4yZd8SR70oAfxoAc9iAc6PDzk6U9/OmfPnuW+++7jfra56qqrrrrqqquuuup/FSpXXXXVVVddddVVV/2PdM011zz4tV/7td8L4J3e6Z0+m2fa3d3lb//2b/nbv/1bdnd3eWEk8UDHjh3jJV/yJXnQgx7Egx70IB7o8PCQpz/96dx6660cHh7yQLa56qqrrrrqqquuuup/JSpXXXXVVVddddVVV/2P8jqv8zrv/Tqv8zrv9WIv9mKvDbC7u8sznvEMnvGMZ/C7v/u7vDCSeG7Hjh3jJV/yJXnN13xNHujw8JDDw0Puu+8+/uEf/oEXxDZXXXXVVVddddVVV/2vReWqq6666qqrrrrqqv8xXuzFXuy1X+d1Xue9brzxxtf+3d/9XZ7xjGfwjGc8gxdGEg907NgxXvIlXxKA13zN1+SBDg8PefrTn87Zs2e57777eGFsc9VVV1111VVXXXXV/3pUrrrqqquuuuqqq676H+Oaa6558Iu92Iu99t/8zd/wu7/7u7wgknigY8eO8ZIv+ZI86EEP4kEPehAPdHh4yNOf/nTOnj3Lfffdx4vCNlddddVVV1111VVX/Z9A5aqrrrrqqquuuuqq/zHOnDnzIIBLly7xQJJ4bseOHeMlX/IleamXeimOHTvGAx0eHvL0pz+df/iHf+BfwzZXXXXVVVddddVVV/2fQuWqq6666qqrrrrqqv8xrrnmmgcD7O7uIonn9qAHPYhbbrmF13zN1+SBDg8PefrTnw7AP/zDP/CvZZurrrrqqquuuuqqq/5PonLVVVddddVVV1111f84kgA4duwYL/mSL8nx48d5yZd8SR7o8PCQpz/96Zw9e5b77ruPfyvb/EfY3NwE4OzZs7dy1VVXXXXVVVddddX/FFSuuuqqq6666qqrrvof5yVf8iV5yZd8SR70oAfxQIeHhzz96U/n6U9/OoeHh0ji38o2V1111VVXXXXVVVf9n0flqquuuuqqq6666qr/cR70oAdxv/vuu4/77ruPv//7v+e52QZAEv8atrnqqquuuuqqq6666v8FKlddddVVV1111VVX/Y9xzTXXPBjg6U9/Ovfddx9Pf/rTeVHYBkASL4xtrrrqqquuuuqqq676f4XKVVddddVVV1111VX/4zz96U/nvvvu41/LNveTxP1sc9VVV1111VVXXXXV/0tUrrrqqquuuuqqq676P8k2V1111VVXXXXVVVf9v0flqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqqv+z5HE82Obq6666qqrrrrqqqv+X6Fy1VVXXXXVVVddddX/KZJ4QSQBYJv/aJubmwDcd999t3LVVVddddVVV1111f8UBFddddVVV1111VVX/Y9x33333QqwubnJv5YkJPGikIQkrrrqqquuuuqqq676P4/KVVddddVVV1111VX/60ni30ISALa56qqrrrrqqquuuur/JCpXXXXVVVddddVVV/2vJYn/CJIAsM1VV1111VVXXXXVVf+nULnqqquuuuqqq6666n8lSfxHkwSAba666qqrrrrqqquu+j+BylVXXXXVVVddddVV/6tI4j+bJGxz1VVXXXXVVVddddX/elSuuuqqq6666qqrrvpfQxL/VSQBYJurrrrqqquuuuqqq/7XonLVVVddddVVV1111f94kvjvIgkA21x11VVXXXXVVVdd9b8Olauuuuqqq6666qqr/keTxP8EkgCwzVVXXXXVVVddddVV/2sQXHXVVVddddVVV131P5Yk/qeRxFVXXXXVVVddddVV/2tQueqqq6666qqrrrrqf4z77rvvVoDNzU0k8T+VJABsc9VVV1111VVXXXXV/2hUrrrqqquuuuqqq6666t9IEgC22dzcBOC+++67lauuuuqqq6666qqr/qegctVVV1111VVXXXXVVf9Okrjqqquuuuqqq6666n8kKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq676D7C5uQnA2bNnn8FVV1111VVXXXXVVf9TEFx11VVXXXXVVVdd9T/G2bNnnwFwzTXXcNVVV1111VVXXXXVVf8BqFx11VVXXXXVVVdd9T/GP/zDP/z2P/zDP/z2i73Yi732m7/5m3N4eMh9993H2bNnue+++7jqqquuuuqqq6666qp/JSpXXXXVVVddddVVV/2Pcd999936Iz/yI5/zTu/0TrzYi73Ya29ubnLNNdcAcHh4yH333cett97Kfffdx/Mjif8otrnqqquuuuqqq6666n89KlddddVVV1111VVX/Y/yD//wD7/9mZ/5mb99zTXXPPjFXuzFXvvFXuzFXut1Xud13ntzc5OHPOQhPOQhD+Hw8JCzZ89y3333ceutt/KfQRLPzTZXXXXVVVddddVVV/2vQuWqq6666qqrrrrqqv+R7rvvvlvvu+++7/6t3/qt7/7RH/3Rzzlz5syDXuzFXuy1X/zFX/y1X+zFXuy1Nzc3efCDH8yLvdiLcXh4yNmzZ7nvvvs4e/Ys/1kk8UC2ueqqq6666qqrrrrqfzQqV1111VVXXXXVVVf9j3fffffdet999936D//wD7/zoz/6o59zzTXXPPjFXuzFXvt1Xud13uvFXuzFXntzc5NrrrmGF3uxF+Pw8JCzZ8/y9Kc/nbNnz/KfSRJXXXXVVVddddVVV/2PRuWqq6666qqrrrrqqv917rvvvlvvu+++7/6t3/qt777mmmse/GIv9mKv/WIv9mKv9Tqv8zrvvbm5yebmJg9+8IM5PDzk7Nmz3Hfffdx66638Z5LEVVddddVVV1111VX/41C56qqrrrrqqquuuup/tfvuu+/W++6777t/67d+67t/9Ed/9HNs+3Ve53Xe+8Vf/MVf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6qqrrrrqqqv+D5HECyOJf4kk/iWSuOqqq6666qqrrrrqqv8FqFx11VVXXXXVVVf9LyGJF0YSL4wk/iWS+JdI4gU5c+bMg7nqqquuuuqqq6666qr/OQiuuuqqq6666qqr/ge57777bgXY3NzkgSTxwkjihZHEv0QSL4wkJHHVVVddddVVV1111VX/i1C56qqrrrrqqquu+h9OEi+MJF4YSbwwkviXSOKqq6666qqrrrrqqqv+FyK46qqrrrrqqquu+h/k7NmztwJsbm4CIIkXRhIvjCReGEn8SyTxLzk8POSqq6666qqrrrrqqqv+B6Jy1VVXXXXVVVdd9b+UJF4YSbwwknhhJPEvkcRVV1111VVXXXXVVVf9D0blqquuuuqqq6666n8oSbwgknhhJPHCSOKFkcQLI4mrrrrqqquuuuqqq676X4Dgqquuuuqqq6666n+Q++6771aAra0t/q0k8cJI4gWRhCReGEm8INdcc82Dueqqq6666qqrrrrqqv85qFx11VVXXXXVVVf9LyOJF0QSL4wkXhBJvDCSuOqqq6666qqrrrrqqv9lCK666qqrrrrqqqv+B7nvvvtuBdjc3OT5kcQLIokXRBKSeEEk8cJI4oU5Ojriqquuuuqqq6666qqr/geictVVV1111VVXXfW/hCReEEm8IJJ4YSTxgkjihZHEVVddddVVV1111VVX/Q9G5aqrrrrqqquuuup/AUm8IJJ4QSTxgkjihZHECyOJq6666qqrrrrqqquu+h+O4Kqrrrrqqquuuup/kLNnzz4DYHNzk/tJ4gWRxAsiiRdEEi+IJCTxgkhCEi/INddc82Cuuuqqq6666qqrrrrqfwYqV1111VVXXXXVVf+DSeIFkcQLIokXRBIviCReGElcddVVV1111VVXXXXV/yJUrrrqqquuuuqqq/4Hue+++24F2Nzc5IWRxAsiiRdEEi+IJF4QSbwwkrjqqquuuuqqq6666qr/gahcddVVV1111VVX/Q8liedHEi+IJF4QSbwgknhBJPGCSALg6OiIq6666qqrrrrqqquu+h+IylVXXXXVVVddddX/EZJ4QSTx/EjiBZHECyKJq6666qqrrrrqqquu+l+A4Kqrrrrqqquuuup/kLNnz94KsLm5yfMjiedHEi+IJJ4fSbwgknhBJPHCnDlz5sFcddVVV1111VVXXXXV/wxUrrrqqquuuuqqq/6XkMTzI4nnRxIviCSeH0m8IJK46qqrrrrqqquuuuqq/2WoXHXVVVddddVVV/0vIInnRxLPjyReEEk8P5J4QSTxgkjiqquuuuqqq6666qqr/oeictVVV1111VVXXfU/yH333XcrwObmJveTxPMjiedHEi+IJJ4fSTw/knhBJHG/o6Mjrrrqqquuuuqqq6666n8gKlddddVVV1111VX/g0ni+ZHE8yOJ50cSz48kXhBJPD+SuOqqq6666qqrrrrqqv8lCK666qqrrrrqqqv+h7nvvvtuBdja2uL5kcTzI4nnRxLPjySeH0lI4vmRxFVXXXXVVVddddVVV/0vQnDVVVddddVVV131P9SLvdiLcebMGR5IEs+PJJ4fSTw/knh+JPH8SEISz48kHuiaa655MFddddVVV1111VVXXfU/A5Wrrrrqqquuuuqq/2E+8zM/87W/+Zu/+dYHP/jBPPjBD+bw8JCzZ89y9uxZDg8POXv2LA8kiedHEs+PJJ4fSTw/knh+JHHVVVddddVVV1111VX/w1G56qqrrrrqqquu+h/oMz/zM1/nxV7sxV7rxV/8xV/7xV7sxV57c3OTBz/4wQAcHh5y9uxZbr31Vs6dO8fzI4nnRxLPTRLPjySeH0lcddVVV1111VVXXXXV/xJUrrrqqquuuuqqq/6HOXv27DPOnj37jH/4h3/47R/90R/9nGuuuebBL/ZiL/ZaL/ZiL/bar/M6r/Pem5ubbG5u8uAHP5jDw0POnj3L2bNnOXv2LEdHR0jiuUni+ZHE8yOJ50cSz89yueSqq6666qqrrrrqqqv+B6Jy1VVXXXXVVVdd9T/cfffdd+t9991362/91m99z4/+6I9+zpkzZx78Yi/2Yq/14i/+4q/9Yi/2Yq+9ubnJgx/8YACOjo44e/Ysz3jGMzh79iwAknh+JPH8SOK5SeL5kcRVV1111VVXXXXVVVf9D0blqquuuuqqq6666n+R++6779b77rvv1n/4h3/47R/90R/9nGuuuebBL/ZiL/baL/ZiL/Zar/M6r/PeGxsbPOhBD+JBD3oQR0dHnD17lnPnznH27FmOjo64nySemySeH0k8P5K46qqrrrrqqquuuuqq/+Eox48f56qrrrrqqquuuup/q8PDw91bb731r//0T//0Z377t3/7e/70T//0p++7775bJXHjjTc++Pjx49xwww08/OEP50EPehDHjh1jmiaOjo54IEk8N0lI4rlJQhIPdOzYMa6//noAnv70p//1P/zDP/wOV1111VVXXXXVVVdd9d8PPehBD+Kqq6666qqrrrrq/6JrrrnmwS/2Yi/22i/2Yi/2Wq/zOq/z3jzA0dER586d4+zZs5w/f56joyMeSBLPjySemyRuvvlmXvqlXxqAr//6r3+f3/qt3/purrrqqquuuuqqq6666r8fetCDHsRVV1111VVXXXXVf6Rrrrnmwffdd9+t/A9yzTXXPPjMmTMPfrEXe7HXevEXf/HXfrEXe7HX5gGOjo44d+4ct912G+fPn+e5SeL5kQTAqVOneNVXfVUAvv7rv/59fuu3fuu7ueqqq6666qqrrrrqqv9+6EEPehBXXXXVVVddddVV/x7XXHPNg1/sxV7stc+cOfOgd3qnd/rs++6779Yf/dEf/Zzf+q3f+m7+hzpz5syDXvzFX/x1XuzFXuy1Xud1Xue9eYCjoyPOnTvH+fPnOXfuHMvlkucmiQc6deoUr/qqrwrAZ37mZ77OP/zDP/w2V1111VVXXXXVVVdd9d8PPehBD+Kqq6666qqrrrrqX+uaa6558Gu/9mu/14u/+Iu/9ou92Iu9Ns/H273d24n/Ba655poHnzlz5sEv9mIv9lov/uIv/tov9mIv9to8wNHREefPn+e2227j/PnzSOK5nT59mld5lVcB4EM+5EMect99993KVVddddVVV1111VVX/fdDD3rQg7jqqquuuuqqq656UVxzzTUPfu3Xfu33ep3XeZ33vuaaax7MM+3u7vI3f/M3/M3f/A0PetCDeKu3eisA3u7t3k78L3TNNdc8+MVe7MVe+8Ve7MVe63Ve53Xemwc4Ojri/PnznD9/nvPnz3N0dIQkTp06xau8yqsA8HZv93biqquuuuqqq6666qqr/mdAD3rQg7jqqquuuuqqq656fq655poHv/Zrv/Z7XXPNNQ9+ndd5nffmmXZ3d/mbv/kbAH7nd36HB3qrt3orXuqlXgqAD/mQD3nIfffddyv/i505c+ZB11xzzUNe7MVe7LVe/MVf/LVf7MVe7LV5gKOjI86fP89yueSRj3wkAG/3dm8nrrrqqquuuuqqq6666n8GKlddddVVV1111VUPcM011zz4tV/7td/rxV/8xV/7xV7sxV6bZ9rd3eVv/uZvuPXWW3nGM57BC/KgBz2I/0vOnj37jLNnzz7jH/7hH377R3/0Rz/nmmuuefCLvdiLvdaLvdiLvfbrvM7rvPfGxgYbGxvc77777ruVq6666qqrrrrqqquu+p+DylVXXXXVVVdd9f/aNddc8+AXe7EXe+0zZ8486J3e6Z0+mwe49dZbecYznsHv/M7v8KI6fvw49ztz5syD77vvvlv5P+S+++679b777rv1t37rt77nR3/0Rz/nzJkzD36xF3ux13rxF3/x1wb4+q//+vfhqquuuuqqq6666qqr/uegctVVV1111VVX/b9zzTXXPPi1X/u13+vFX/zFX/vFXuzFXptn2t3d5W/+5m+49dZbecYznsG/hiRe6qVeCoC/+Zu/4UEPehD/191333233nfffbf+wz/8w2//6I/+6Odw1VVXXXXVVVddddVV//NQueqqq6666qqr/l94sRd7sdd+sRd7sdd6p3d6p8/mAXZ3d/mbv/kb/vqv/5pLly7xryUJgOPHj/NSL/VSAFy6dImrrrrqqquuuuqqq6666n8EKlddddVVV1111f9J11xzzYNf+7Vf+71e/MVf/HVe7MVe7LV4pt3dXf76r/8aSfzO7/wO/xaSOH78OMeOHeNBD3oQr/Var8UDXbp0iUuXLnHNNdc8+B/+4R+46qqrrrrqqquuuuqqq/7bULnqqquuuuqqq/7PuOaaax782q/92u/1Oq/zOu99zTXXPJhn2t3d5a//+q95xjOewTOe8Qz+rU6cOMFLvuRL8uAHP5gHPehBPNDh4SEAm5ub3O/MmTMP4qqrrrrqqquuuuqqq67670Tlqquuuuqqq676X+uaa6558Gu/9mu/F8A7vdM7fTbPtLu7y6233sqtt97K7/zO7wAgiX+L48eP81Iv9VK81Eu9FMePH+eBDg8PefrTn87Tn/50jo6OeLEXezFe/MVfnGPHjnHVVVddddVVV1111VVX/Y9A5aqrrrrqqquu+l/lmmuuefBrv/Zrv9eLv/iLv86LvdiLvRbPtLu7y1//9V/zjGc8g1tvvRUASUjiX+P48eO81Eu9FMePH+elXuqleKDDw0Oe/vSnA/D3f//33E8SDySJS5cucdVVV1111VVXXXXVVVf9t6Ny1VVXXXXVVVf9r/BiL/Zir/25n/u5v8UD7O7u8td//df8zd/8Dbu7u9xPEv8ax48f56Ve6qV40IMexIMf/GAe6PDwkKc97Wncd999nD17ln+Na6655sFcddVVV1111VVXXXXVVf+dqFx11VVXXXXVVf/jvdiLvdhrv9M7vdNn7e7u8td//dcA/M7v/A7PTRIviuPHj/OgBz2I48eP81qv9Vo80OHhIYeHh9x77738/d//PQ8kiecmifsdHR0BcOzYMS5dusQ111zzYK666qqrrrrqqquuuuqq/05Urrrqqquuuuqq//Fe53Ve571e7MVe7LV/5md+hr/+67/mgSTxojh+/Dgv9VIvxYMe9CAe/OAH80CHh4c87WlP49577+W+++5DEs9NEs9NEg90eHgIwLFjx7h06RJXXXXVVVddddVVV1111X87KlddddVVV1111f94L/ZiL/baALfeeiv3k8S/5EEPehAPfvCDea3Xei2e2+HhIU972tN42tOexuHhIfeTxHOTxHOTxAsiiUuXLnHy5Emuuuqqq6666qqrrrrqqv9WVK666qqrrrrqqv/RXud1Xue9r7nmmgcD7O7uIokX5Pjx47zUS70UD3rQg3jwgx/MAx0eHvLUpz6Vw8NDnva0pyGJ/2xnzpx5MFddddVVV1111VVXXXXVfycqV1111VVXXXXV/2gv9mIv9loAf/M3f4Mkntvx48d5qZd6KV7qpV6K48eP80AHBwc87WlP47777uPee+/lXyKJ5yaJ5yaJ5yaJo6MjAI4dO8alS5e46qqrrrrqqquuuuqqq/7bUbnqqquuuuqqq/5He7EXe7HXBvjrv/5rAI4fP85LvdRLAfBar/VaPNDBwQGHh4fce++9/O3f/i2SeH4k8dwk8dwk8dwk8dwk8dwkcdVVV1111VVXXXXVVVf9t6Ny1VVXXXXVVVf9j3bNNdc8GODBD34wr/Var8WDH/xgHujg4ICnPe1p3Hvvvdx77738SyTxH0kS9zs8PATg2LFjXLp0iWuuuebBXHXVVVddddVVV1111VX/nahcddVVV1111VX/Y73O67zOe/NMr/Var8X97r33Xu655x6e9rSncXh4yPMjiReVJJ6bJJ6bJP61rrnmmgffd999t3LVVVddddVVV1111VVX/XegctVVV1111VVX/Y93cHDAU5/6VO69917uvfdeHkgSLypJPDdJPDdJPDdJPDdJPLfDw0M2Nzc5duwYV1111VVXXXXVVVddddV/O4Krrrrqqquuuup/rDNnzjwI4KlPfSp/+7d/y7333ssDSeL5kcR/Nkk8N0ncb29vD4AzZ848mKuuuuqqq6666qqrrrrqvwvBVVddddVVV131P9bZs2efAbC1tcVzk8TzI4nnRxLPTRLPTRLPTRL/EkkAHB0dAXDs2DGuuuqqq6666qqrrrrqqv92VK666qqrrrrqqv+x7rvvvlsBtra2+PeQxHOTxHOTxHOTxHOTxANJ4vm5dOkSV1111VVXXXXVVVddddV/K4Krrrrqqquuuup/HUk8P5L4zyaJF9WlS5e45pprHsxVV1111VVXXXXVVVdd9d+F4Kqrrrrqqquu+h/r7NmztwJsbm7ybyWJ5yaJ5yaJ5yaJB5LEc5PEAx0eHgJw7Ngxrrrqqquuuuqqq6666qr/dlSuuuqqq6666qr/VSTx/Eji30oSz00S/xJJPJAkjo6OADh27BgAZ86ceRBXXXXVVVddddVVV1111X8XKlddddVVV1111f9Y9913360AW1tb/FtI4rlJ4t9CEg8kiX/J3t4eV1111VVXXXXVVVddddV/K4Krrrrqqquuuup/tPvuu+9WgK2tLSTx/EjiuUniuUniuUniuUnigSTxL5HE83PNNdc8mKuuuuqqq6666qqrrrrqvwvBVVddddVVV131P9rZs2dvBdjc3OT5kcR/JEn8SyTxQJK43+HhIQDHjh3j0qVLXHXVVVddddVVV1111VX/rQiuuuqqq6666qr/FSTxopLEc5PEc5PEv0QSDySJB5LEAy2XSwCOHTsGwDXXXPNgrrrqqquuuuqqq6666qr/LgRXXXXVVVddddX/aPfdd9+tAJubmzw3SfxbSeK5SeKBJPHvsbe3x1VXXXXVVVddddVVV13134rKVVddddVVV131P9p99913K8DW1hYvCkk8N0n8SyTxL5HEA0nigSTx3M6cOfNgrrrqqquuuuqqq6666qr/LlSuuuqqq6666qr/lSTx3CTx3CTx3CTxL5HEA0nigSTxQJIAODw8BODYsWPs7e1x1VVXXXXVVVddddVVV/23onLVVVddddVVV/2Pdvbs2WcAbG5u8h9BEs9NEg8kiQeSxAsjiauuuuqqq6666qqrrrrqfyQqV1111VVXXXXV/2j33XffrQBbW1vcTxLPTRLPTRL/Ekn8a0niBTk6OgJgZ2cHSVxzzTUP5qqrrrrqqquuuuqqq67670Llqquuuuqqq676P0kSz00S/xJJPJAkHkgSDySJB5LE/S5dusRVV1111VVXXXXVVVdd9d+K4Kqrrrrqqquu+h/t7NmztwJsbm4CIInnJol/iSSemyQeSBIPJIkHksQDSeKBJAFwdHQEwLFjxwC45pprHsxVV1111VVXXXXVVVdd9d+BylVXXXXVVVdd9b+GJJ6bJJ6bJP4lkviPJInntre3x1VXXXXVVVddddVVV13134rgqquuuuqqq676H+2+++67FWBra4t/K0n8SyTxQJJ4IEk8kCRekKOjIwB2dnYAOHPmzIO56qqrrrrqqquuuuqqq/47EFx11VVXXXXVVf/j3XfffbcCbG5u8kCSeG6S+JdI4oEk8UCSeCBJPJAkHkgS95PEA+3t7XHVVVddddVVV1111VVX/bchuOqqq6666qqr/se77777bgXY2trihZHEc5PEA0ni30MSDySJf8k111zzYK666qqrrrrqqquuuuqq/w5Urrrqqquuuuqq/5Uk8S+RxL9EEg8kiQeSxAsiiQeSBMDR0REAx44dY29vj6uuuuqqq6666qqrrrrqvw2Vq6666qqrrrrqf7yzZ8/eCrC5uQmAJJ6bJP4lknggSTyQJB5IEg8kiRdEEvc7PDwEYGdnB4AzZ848iKuuuuqqq6666qqrrrrqvwPBVVddddVVV131P9599913K8C1117Ltddey4tCEg8kiX8PSTyQJO4niQeSxFVXXXXVVVddddVVV131PwKVq6666qqrrrrqf7x/+Id/+J1/+Id/+O0Xe7EXe+2HPvShHB4ecu+993Lfffdx7733cnR0xANJ4l8iiQeSxANJ4gWRxAsiiftJYm9vj6uuuuqqq6666qqrrrrqvw3l+PHjXHXVVVddddVV/7OdPXv2VkCHh4e7R0dHuzfeeOODT5w4wU033cSjH/1oHvrQh3LixAmGYeDw8BBJPJAkHkgSDySJB5LEA0nigSRxP0ncTxIAGxsbXH/99ezt7bG3t8dsNrv1T//0T3+Gq6666qqrrrrqqquuuuq/GpWrrrrqqquuuup/hd/6rd/67t/6rd/6boBrrrnmwS/2Yi/2Wi/2Yi/22q/zOq/z3pubmzzkIQ/hIQ95CIeHhxweHnLfffdx3333cd999/GvIYkHksQDSeJ+knh+jo6OANjZ2WFvb49rrrnmwVx11VVXXXXVVVddddVV/x2oXHXVVVddddVV/+vcd999t9533323/tZv/db3/OiP/ujnnDlz5sEv9mIv9lov/uIv/tov9mIv9tqbm5tcc801ABweHnLfffdx9uxZnv70pyOJB5LEi0oSL4gk7ieJq6666qqrrrrqqquuuup/BPSgBz2Iq6666qqrrrrq/45rrrnmwS/2Yi/22i/2Yi/2Wi/2Yi/22tdcc82DeYDDw0POnj3L05/+dM6dO8cDSeKBJHE/STyQJO4niftJ4vTp07zaq70ad9xxB49//OOptX7313/9178PV1111VVXXXXVVVddddV/NSpXXXXVVVddddX/Kffdd9+t991333f/1m/91ncDnDlz5kEv/uIv/jqv8zqv814v9mIv9tqbm5tsbm7y4Ac/mMPDQ46Ojrj11ls5Ojri7Nmz3E8SL4gk7ieJ53Z0dATAzs4ON910E/fccw9XXXXVVVddddVVV1111X8L9KAHPYirrrrqqquuuuo/3zXXXPPg137t136vH/3RH/0c/ptcc801Dz5z5syDX+zFXuy1XvzFX/y1X+zFXuy1eYDDw0POnj3LuXPneMYznsH9JHE/STyQJO4nCYCNjQ3e4A3egL29PQC+93u/931+67d+67u56qqrrrrqqquuuuqqq/6roQc96EFcddVVV1111VX/8a655poHnzlz5sEv9mIv9lrv9E7v9Nk802/91m9992/91m99zz/8wz/8Nv/Nrrnmmge/2Iu92Gu/2Iu92Gu9zuu8znvzXI6OjnjGM57B2bNnOXfuHACSuJ8k7ieJ+0niLd/yLbnfh3zIhzzkvvvuu5Wrrrrqqquuuuqqq6666r8aetCDHsRVV1111VVXXfUf45prrnnwa7/2a7/Xi7/4i7/Oi73Yi70Wz7S7uwvA8ePHAfjMz/zM1/mHf/iH3+Z/mGuuuebBL/ZiL/bar/M6r/NeL/ZiL/baPMDR0RHnzp3j7NmzHB0dcf78eR5IEveTxFu+5Vtyv7d7u7cTV1111VVXXXXVVVddddV/BypXXXXVVVddddW/2TXXXPPgM2fOPPjFXuzFXuud3umdPpsH2N3d5a//+q+59dZbufXWW3npl35p3vqt3xqAa6655sH/8A//wP80991336333Xffd//Wb/3Wd19zzTUPPnPmzINe53Ve572vueaaB7/Yi73Ya99yyy3ccsstABwdHXHu3DnOnTvH7bffzv0kAXB0dMTGxgZXXXXVVVddddVVV1111X8rKlddddVVV1111b/KNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22eaXd3l93dXZ7+9KfzO7/zOzy3137t1+Z+Z86ceRD/w91333233nfffbf+wz/8w+8AXHPNNQ9+sRd7sdd+sRd7sdd6ndd5nffe2Njglltu4ZZbbuHRj340R0dHnD9/nnPnznH+/Hnu91u/9VvfzVVXXXXVVVddddVVV13134XKVVddddVVV131Ql1zzTUPPnPmzINf7MVe7LXe6Z3e6bN5gN3dXf7qr/6KW2+9lVtvvRVJvCDHjx8H4O677+aaa655MP/L3Hfffbfed9993/1bv/Vb3/31X//173PNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVee2Njg9OnT/OoRz2Ko6MjNjY2ALjvvvtu5aqrrrrqqquuuuqqq67670Llqquuuuqqq656Htdcc82DX/u1X/u9XvzFX/y1X+zFXuy1eYBbb72Vpz/96fz1X/81u7u7AEhCEi/IS7/0SwPwpCc9CYBrrrnmwfwvd9999936oz/6o5/zoz/6o59z5syZB734i7/467zYi73Ya11zzTUPfrEXe7HXBviHf/iH3/6Hf/iH3+Gqq6666qqrrrrqqquu+u9C5aqrrrrqqquuuuzFXuzFXvvFXuzFXut1Xud13vuaa655MM+0u7vLX/3VX3Hrrbdy66238kCSeFE8+MEPBuDuu+9me3ub2WzG/yVnz559xm/91m9992/91m99N8A111zz4Bd7sRd7rd/6rd/6Hq666qqrrrrqqquuuuqq/05Urrrqqquuuur/qWuuuebBr/3ar/1eL/7iL/7aL/ZiL/baPMDu7i5/9Vd/xV//9V+zu7vLc5PEi+r48eO89Eu/NAB3330329vbnDlz5sH8H3bffffdet99993KVVddddVVV1111VVXXfXfjcpVV1111VVX/T9yzTXXPPi1X/u13+t1Xud13vuaa655MM+0u7vLX/3VX3Hrrbdy66238oJI4kVx/PhxXvqlX5qXfumX5vjx4wDs7+9zcHDA3XffzU033cRVV1111VVXXXXVVVddddV/ASpXXXXVVVdd9X/YNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe20eYHd3l7/6q7/ir//6r9nd3eWFkcQLc/z4cV76pV+aBz/4wTz4wQ/mgQ4ODtja2kIS97vmmmsezFVXXXXVVVddddVVV1111X8+KlddddVVV131f8w111zz4Nd+7dd+r9d5ndd572uuuebBPNPu7i5/9Vd/xe7uLn/913/Ni0ISL8jx48d56Zd+aV76pV+a48eP80AHBwc89alP5d577+Xw8JC3eZu3AUASBwcHAFxzzTUPvu+++27lqquuuuqqq6666qqrrrrqPw+Vq6666qqrrvo/4nVe53Xe+8M//MO/iwfY3d3lr/7qr/jrv/5rdnd3eVFI4vk5fvw4L/3SL82DH/xgHvzgB/NABwcH3HvvvRwcHPC3f/u3PJAkALa2tnigM2fOPPi+++67lauuuuqqq6666qqrrrrqqv88VK666qqrrrrq/4DXeZ3Xee93eqd3+uzd3V3+6q/+CoDf/u3f5l9DEs/t+PHjvPRLvzQv/dIvzfHjx3mgg4MDnvrUp3LPPfdw7733AiCJ5+fg4ICtrS22trY4ODjgqquuuuqqq6666qqrrrrqvwiVq6666qqrrvo/4B3f8R0/68yZMw/6ru/6Lm699Vb+tSQBcPz4cV76pV+aBz/4wTz4wQ/mgQ4ODjg4OOCee+7hb//2b3luknhukgA4PDxka2uL7e1tDg8POTg44JprrnnwP/zDP3DVVVddddVVV1111VVXXfWfiMpVV1111VVX/S/3Oq/zOu99zTXXPBjg1ltv5V9DEsePH+elX/qleemXfmmOHz/OAx0cHPCUpzyFe++9l3vuuYf7SeJfIokXZH9/nzNnzjyIq6666qqrrrrqqquuuuqq/1xUrrrqqquuuup/uRd7sRd7LYC//uu/5kVx/PhxXuZlXobjx4/z0i/90jzQwcEBBwcH3HPPPfz1X/81knhuknhuknhhDg4OuPbaa9ne3uaee+4B4JprrnkwV1111VVXXXXVVVddddVV/7moXHXVVVddddX/cq/zOq/z3gC/9Vu/xQty/PhxXvqlX5qXeZmX4fjx4zzQwcEBT3nKU7jnnnu45557uJ8k/q0k8UCHh4cAbG1tIYnDw0OuueaaB3PVVVddddVVV1111VVXXfWfi8pVV1111VVX/S/2Oq/zOu8NcOutt7K7u8v9jh8/zku/9Etz4sQJXvqlX5oHOjg44ODggLvvvpu//uu/RhIvKkk8N0n8Sw4ODgDY3t4GYH9/n77vueqqq6666qqrrrrqqquu+k9G5aqrrrrqqqv+F3ud13md9wL4q7/6K44fP85Lv/RL8zIv8zIcP36cBzo4OODJT34y99xzD/fccw//Ekm8KCTx3CTx3I6OjgDY2toC4ODggEc96lEP5qqrrrrqqquuuuqqq6666j8Xlauuuuqqq676X+zFXuzFXhvgbd7mbXigg4MD9vf3ueeee/irv/orACTx7yGJ/wiSODw85Kqrrrrqqquuuuqqq6666r8Alauuuuqqq676X+rFXuzFXpsHODg44ElPehL33HMP99xzDy8KSTw3STw3STw3STw3STw3SRwcHACwtbXF/a655poHc9VVV1111VVXXXXVVVdd9Z+LylVXXXXVVVf9L3dwcMCP/MiPACCJ50cS/xNsbW0BcHBwAMA111zz4Pvuu+9Wrrrqqquuuuqqq6666qqr/nMQXHXVVVddddX/U5J4bpJ4bpJ4bpJ4bpJ4bpIAODw85H7b29tIAuCaa655MFddddVVV1111VVXXXXVVf95CK666qqrrrrqf6mzZ8/eyotAEv8dJPFA9957LwBbW1scHBwAcObMmQdz1VVXXXXVVVddddVVV131n4fKVVddddVVV/0vdd99990KsLW1BYAkXlSSeG6SeG6SeG6SeG6S+Nc6ODjgzJkzD+Kqq6666qqrrrrqqquuuuo/D8FVV1111VVX/S/2D//wD78NcP311/P8SOK/gySe2+HhIQBbW1tI4uDggKuuuuqqq6666qqrrrrqqv9kVK666qqrrrrq/xlJPDdJPDdJPDdJPDdJ/EskcXh4CMDW1hb3u+aaax7CVVddddVVV1111VVXXXXVfx6Cq6666qqrrvpf7L777rsVYHt7m/8OknhuknhRHB4ecs011zyYq6666qqrrrrqqquuuuqq/zwEV1111VVXXfW/2H333XcrwNbWFs9NEs9NEs9NEs9NEs9NEv8WkgA4PDwEYGtrC0kcHBxw1VVXXXXVVVddddVVV131n4zgqquuuuqqq/4X+4d/+IffAbjuuuv4ryaJ5yaJB5LE/Q4ODgDY2toC4PDwkGuuuebBXHXVVVddddVVV1111VVX/eehctVVV1111VX/B0niuUniRSGJ5yaJf6/Dw0MANjc3ATg8POTMmTMP4qqrrrrqqquuuuqqq6666j8PwVVXXXXVVVf9L3b27NlbAba3t/m3kMS/hSSemyQeSBIPJIn7SeJ+11xzzYO56qqrrrrqqquuuuqqq676z0Fw1VVXXXXVVf+L3XfffbcCbG1tcT9J/FtJ4rlJ4l8iiX/J4eEhAFtbWwAcHBwAcObMmQdz1VVXXXXVVVddddVVV131n4Pgqquuuuqqq/6Xu++++24F2Nra4gWRxHOTxL+FJP4lknggSQAcHh4CsLm5yVVXXXXVVVddddVVV1111X8Bgquuuuqqq676X+7s2bO3AmxvbyOJfytJPDdJ/Esk8aI6PDwEYHt7m6OjIwCuueaaB3PVVVddddVVV1111VVXXfWfg+Cqq6666qqr/pe77777bgXY2tri+ZHEc5PEv4Uk/iWSeCBJvCD33nsvZ86ceRBXXXXVVVddddVVV1111VX/OahcddVVV1111f9y9913360AW1tb/FtJ4rlJ4l8iiQeSxAtzeHgIwObmJpK46qqrrrrqqquuuuqqq676T0blqquuuuqqq/6XO3v27DMAtre3eW6SeG6S+LeQxL+WJB7o8PAQgK2tLQAODw+55pprHsxVV1111VVXXXXVVVddddV/DipXXXXVVVdd9b/cfffddyvA1tYW/xaSeG6S+JdI4oEk8UCSeCBJ3G9zcxOAw8NDrrnmmgdz1VVXXXXVVVddddVVV131n4PKVVddddVVV/0vd/bs2VsBtra2eCBJPDdJ/FtI4j/CfffdB8Dm5iaSADhz5syDueqqq6666qqrrrrqqquu+s9B5aqrrrrqqquueg6S+JdI4oEk8UCSeCBJPJAkAA4PD7nqqquuuuqqq6666qqrrvpPRHDVVVddddVV/8vdd999t9533323bm1tsbW1BYAknpsknpsk/iWS+I9yeHgIwObmJgCHh4dcc801D+aqq6666qqrrrrqqquuuuo/B8FVV1111VVX/R9w9uzZWwG2trb495DEA0niuUnigSTxQJJ4IEk8P5I4OjoC4JprrnkwV1111VVXXXXVVVddddVV//EIrrrqqquuuur/kOuuu47rrruO5yaJ5yaJfy1J/GtI4oGOjo4A2Nzc5IHOnDnzYK666qqrrrrqqquuuuqqq/7jUbnqqquuuuqq/wN+5Ed+5HPe8R3fkZd5mZd5bYCDgwPuuece7rnnHg4ODrj33nv5l0jigSTxL5HEA0niX3J4eMjm5iabm5scHR1x1VVXXXXVVVddddVVV131n4hy/Phxrrrqqquuuup/u7Nnz94qicPDw93Nzc3jJ06cOH7y5EluueUWHv7wh/Pwhz+ckydPMpvNuHDhApJ4bpJ4IEk8kCSemyTuJ4kHksQDSQLgxhtvZHNzk7vuuovDw0Me8pCH8OQnP/l3br311r/mqquuuuqqq6666qqrrrrqPxaVq6666qqrrvo/4rd+67e+57d+67e+B+Caa6558Iu92Iu99ou92Iu91uu8zuu899bWFg9/+MN5+MMfzqu92qtxcHDAvffey1Oe8hTuvfdeJPFAkviXSOLfY3NzE4DDw0POnDnzIK666qqrrrrqqquuuuqqq/7jUbnqqquuuuqq/4Puu+++W++7777v/q3f+q3v/tEf/dHPAXixF3ux136d13md93qxF3ux197a2mJra4uHPexhHBwccHh4yD333MO9997Lvffey3OTxANJ4oEk8UCSeCBJ3O++++7jmmuuYWNjA0lsbm5y9uzZZ3DVVVddddVVV1111VVXXfUfj8pVV1111VVX/R9333333Qpw3333ffdv/dZvffeZM2cedM011zzkxV7sxV7rxV/8xV/7xV7sxV57a2uLa6+9FoCDgwPuvfde7r33Xg4PD7n33nv595DEA0kCQBIAm5ub3Hfffbdy1VVXXXXVVVddddVVV131Hw896EEP4qqrrrrqqqv+P7vmmmse/GIv9mKv9WIv9mKvfc011zz4xV7sxV6bBzg8POTee+/l3nvv5WlPexqSeCBJPJAkHkgS95PEgx/8YF7xFV+RW2+9lfvuu49XfMVX5O3e7u3EVVddddVVV1111VVXXXXVfzz0oAc9iKuuuuqqq6666tmuueaaB7/Yi73Ya7/Yi73Ya73O67zOe/NcDg8Puffee7nvvvt42tOehiQeSBL3k8QDSeLMmTO8zuu8Dvfddx9HR0c8/elP/+6v//qvfx+uuuqqq6666qqrrrrqqqv+46EHPehBXHXVVVddddVVL9g111zz4Bd7sRd77dd5ndd5rxd7sRd7bR7g8PAQgKc97Wncd999nD17lgeSxP0kAbC5ucmbvdmbcXh4CMB3fdd3vc9v/dZvfTdXXXXVVVddddVVV1111VX/8dCDHvQgrrrqqquuuuqqF82ZM2cedM011zzkxV7sxV7rxV/8xV/7xV7sxV6bBzg8POTw8JCnP/3pHB0dcd9993E/SQBsbm7yZm/2ZhweHrK5ucmHfMiHPOS+++67lauuuuqqq6666qqrrrrqqv946EEPehBXXXXVVVddddW/zTXXXPPgF3uxF3utF3uxF3vta6655sEv9mIv9to8wOHhIffddx9nz57l8PCQs2fPAvCO7/iO3O/t3u7txFVXXXXVVVddddVVV1111X8O9KAHPYirrrrqqquuuuo/xjXXXPPgF3uxF3vtF3uxF3utF3uxF3vta6655sE8wOHhIWfPnuXMmTNsbm7yW7/1W9/z9V//9e/NVVddddVVV1111VVXXXXVfw70oAc9iKuuuuqqq6666j/HNddc8+AXe7EXe+0Xe7EXe63XeZ3XeW+ey9d//de/z2/91m99N1ddddVVV1111VVXXXXVVf850IMe9CCuuuqqq6666qr/Gtdcc82DX+zFXuy1X+d1Xue9fuRHfuRz/uEf/uG3ueqqq6666qqrrrrqqquu+s+DHvSgB3HVVVddddVVV1111VVXXXXVVVddddVVV/2fROWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9X8Y80lIzVmDNlXAAAAABJRU5ErkJggg==) diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 31216ea61..262b014ba 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -42791,12 +42791,12 @@ "examples": [ "// Add color to an extruded solid.\nexampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n // There are other options besides 'color', but they're optional.\n |> appearance(color = '#ff0000')", "// Add color to a revolved solid.\nsketch001 = startSketchOn('XY')\n |> circle({ center = [15, 0], radius = 5 }, %)\n |> revolve({ angle = 360, axis = 'y' }, %)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// Add color to different solids.\nfn cube(center) {\n return startSketchOn('XY')\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\nexample0 = cube([0, 0])\nexample1 = cube([20, 0])\nexample2 = cube([40, 0])\n\nappearance([example0, example1], color = '#ff0000', metalness = 50, roughness = 50)\nappearance(example2, color = '#00ff00', metalness = 50, roughness = 50)", + "// Add color to different solids.\nfn cube(center) {\n return startSketchOn('XY')\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\nexample0 = cube([0, 0])\nexample1 = cube([20, 0])\nexample2 = cube([40, 0])\n\nappearance(\n [example0, example1],\n color = '#ff0000',\n metalness = 50,\n roughness = 50,\n)\nappearance(\n example2,\n color = '#00ff00',\n metalness = 50,\n roughness = 50,\n)", "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _after_ the shell.\nfirstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\nshell(firstSketch, faces = ['end'], thickness = 0.25)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _before_ the shell.\nfirstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n\nshell(firstSketch, faces = ['end'], thickness = 0.25)", - "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _before_ the pattern.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n |> patternLinear3d({\n axis = [1, 0, 1],\n instances = 7,\n distance = 6\n }, %)", - "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _after_ the pattern.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d({\n axis = [1, 0, 1],\n instances = 7,\n distance = 6\n }, %)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// Color the result of a 2D pattern that was extruded.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d({\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true\n }, %)\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", + "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _before_ the pattern.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", + "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _after_ the pattern.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", + "// Color the result of a 2D pattern that was extruded.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", "// Color the result of a sweep.\n\n\n// Create a path for the sweep.\nsweepPath = startSketchOn('XZ')\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\npipeHole = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 1.5 }, %)\n\nsweepSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 2 }, %)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> appearance(color = \"#ff0000\", metalness = 50, roughness = 50)" ] }, @@ -91768,9 +91768,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Create a helix around the Z axis.\nhelixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = 'Z')\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 0.5 }, %)\n |> sweep(path = helixPath)", - "// Create a helix around an edge.\nhelper001 = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 10], tag = $edge001)\n\nhelixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = edge001)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 0.5 }, %)\n |> sweep(path = helixPath)", - "// Create a helix around a custom axis.\nhelixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = {\n custom = {\n axis = [0, 0, 1.0],\n origin = [0, 0.25, 0]\n }\n})\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)" + "// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 5,\n length = 10,\n radius = 5,\n axis = 'Z',\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 0.5 }, %)\n |> sweep(path = helixPath)", + "// Create a helix around an edge.\nhelper001 = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 10], tag = $edge001)\n\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 5,\n length = 10,\n radius = 5,\n axis = edge001,\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 0.5 }, %)\n |> sweep(path = helixPath)", + "// Create a helix around a custom axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 5,\n length = 10,\n radius = 5,\n axis = {\n custom = {\n axis = [0, 0, 1.0],\n origin = [0, 0.25, 0]\n }\n},\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)" ] }, { @@ -122973,7 +122973,7 @@ "examples": [ "// Loft a square and a triangle.\nsquareSketch = startSketchOn('XY')\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ntriangleSketch = startSketchOn(offsetPlane('XY', 75))\n |> startProfileAt([0, 125], %)\n |> line(end = [-15, -30])\n |> line(end = [30, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\nloft([squareSketch, triangleSketch])", "// Loft a square, a circle, and another circle.\nsquareSketch = startSketchOn('XY')\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane('XY', 75))\n |> circle({ center = [0, 100], radius = 50 }, %)\n\ncircleSketch1 = startSketchOn(offsetPlane('XY', 150))\n |> circle({ center = [0, 100], radius = 20 }, %)\n\nloft([\n squareSketch,\n circleSketch0,\n circleSketch1\n])", - "// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn('XY')\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane('XY', 75))\n |> circle({ center = [0, 100], radius = 50 }, %)\n\ncircleSketch1 = startSketchOn(offsetPlane('XY', 150))\n |> circle({ center = [0, 100], radius = 20 }, %)\n\nloft([\n squareSketch,\n circleSketch0,\n circleSketch1\n], baseCurveIndex = 0, bezApproximateRational = false, tolerance = 0.000001, vDegree = 2)" + "// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn('XY')\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane('XY', 75))\n |> circle({ center = [0, 100], radius = 50 }, %)\n\ncircleSketch1 = startSketchOn(offsetPlane('XY', 150))\n |> circle({ center = [0, 100], radius = 20 }, %)\n\nloft(\n [\n squareSketch,\n circleSketch0,\n circleSketch1\n],\n baseCurveIndex = 0,\n bezApproximateRational = false,\n tolerance = 0.000001,\n vDegree = 2,\n)" ] }, { @@ -134534,60 +134534,8 @@ "summary": "Repeat a 2-dimensional sketch some number of times along a partial or", "description": "complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "CircularPattern2dData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "CircularPattern2dData", - "description": "Data for a circular pattern on a 2D sketch.", - "type": "object", - "required": [ - "arcDegrees", - "center", - "instances", - "rotateDuplicates" - ], - "properties": { - "instances": { - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "center": { - "description": "The center about which to make the pattern. This is a 2D vector.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "arcDegrees": { - "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", - "type": "number", - "format": "double" - }, - "rotateDuplicates": { - "description": "Whether or not to rotate the duplicates as they are copied.", - "type": "boolean" - }, - "useOriginal": { - "description": "If the target being patterned is itself a pattern, then, should you use the original solid, or the pattern?", - "default": null, - "type": "boolean", - "nullable": true - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "sketch_set", "type": "SketchSet", @@ -136158,6 +136106,7371 @@ }, "required": true, "includeInSnippet": true, + "description": "Which sketch(es) to pattern", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "center", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The center about which to make the pattern. This is a 2D vector.", + "labelRequired": true + }, + { + "name": "arc_degrees", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", + "labelRequired": true + }, + { + "name": "rotate_duplicates", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Boolean", + "type": "boolean", + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Whether or not to rotate the duplicates as they are copied.", + "labelRequired": true + }, + { + "name": "use_original", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], @@ -137637,7 +144950,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d({\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true\n }, %)\n\nexample = extrude(exampleSketch, length = 1)" + "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)" ] }, { @@ -137645,71 +144958,8 @@ "summary": "Repeat a 3-dimensional solid some number of times along a partial or", "description": "complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "CircularPattern3dData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "CircularPattern3dData", - "description": "Data for a circular pattern on a 3D model.", - "type": "object", - "required": [ - "arcDegrees", - "axis", - "center", - "instances", - "rotateDuplicates" - ], - "properties": { - "instances": { - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "axis": { - "description": "The axis around which to make the pattern. This is a 3D vector.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3 - }, - "center": { - "description": "The center about which to make the pattern. This is a 3D vector.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3 - }, - "arcDegrees": { - "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", - "type": "number", - "format": "double" - }, - "rotateDuplicates": { - "description": "Whether or not to rotate the duplicates as they are copied.", - "type": "boolean" - }, - "useOriginal": { - "description": "If the target being patterned is itself a pattern, then, should you use the original solid, or the pattern?", - "default": null, - "type": "boolean", - "nullable": true - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "solid_set", "type": "SolidSet", @@ -139284,6 +146534,8848 @@ }, "required": true, "includeInSnippet": true, + "description": "Which solid(s) to pattern", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "axis", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The axis around which to make the pattern. This is a 3D vector", + "labelRequired": true + }, + { + "name": "center", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The center about which to make the pattern. This is a 3D vector.", + "labelRequired": true + }, + { + "name": "arc_degrees", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", + "labelRequired": true + }, + { + "name": "rotate_duplicates", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Boolean", + "type": "boolean", + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Whether or not to rotate the duplicates as they are copied.", + "labelRequired": true + }, + { + "name": "use_original", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], @@ -140763,7 +156855,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn('XZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n\nexample = extrude(exampleSketch, length = -5)\n |> patternCircular3d({\n axis = [1, -1, 0],\n center = [10, -20, 0],\n instances = 11,\n arcDegrees = 360,\n rotateDuplicates = true\n }, %)" + "exampleSketch = startSketchOn('XZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n\nexample = extrude(exampleSketch, length = -5)\n |> patternCircular3d(\n axis = [1, -1, 0],\n center = [10, -20, 0],\n instances = 11,\n arcDegrees = 360,\n rotateDuplicates = true,\n )" ] }, { @@ -140771,49 +156863,8 @@ "summary": "Repeat a 2-dimensional sketch along some dimension, with a dynamic amount", "description": "of distance between each repetition, some specified number of times.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "LinearPattern2dData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "LinearPattern2dData", - "description": "Data for a linear pattern on a 2D sketch.", - "type": "object", - "required": [ - "axis", - "distance", - "instances" - ], - "properties": { - "instances": { - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "distance": { - "description": "The distance between each repetition. This can also be referred to as spacing.", - "type": "number", - "format": "double" - }, - "axis": { - "description": "The axis of the pattern. This is a 2D vector.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "sketch_set", "type": "SketchSet", @@ -142384,6 +158435,4429 @@ }, "required": true, "includeInSnippet": true, + "description": "The sketch(es) to duplicate", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "distance", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Distance between each repetition. Also known as 'spacing'.", + "labelRequired": true + }, + { + "name": "axis", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The axis of the pattern. A 2D vector.", "labelRequired": true }, { @@ -143854,6 +164328,7 @@ } }, "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], @@ -145333,7 +165808,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn('XZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> patternLinear2d({\n axis = [1, 0],\n instances = 7,\n distance = 4\n }, %)\n\nexample = extrude(exampleSketch, length = 1)" + "exampleSketch = startSketchOn('XZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> patternLinear2d(axis = [1, 0], instances = 7, distance = 4)\n\nexample = extrude(exampleSketch, length = 1)" ] }, { @@ -145341,49 +165816,8 @@ "summary": "Repeat a 3-dimensional solid along a linear path, with a dynamic amount", "description": "of distance between each repetition, some specified number of times.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "LinearPattern3dData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "LinearPattern3dData", - "description": "Data for a linear pattern on a 3D model.", - "type": "object", - "required": [ - "axis", - "distance", - "instances" - ], - "properties": { - "instances": { - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "distance": { - "description": "The distance between each repetition. This can also be referred to as spacing.", - "type": "number", - "format": "double" - }, - "axis": { - "description": "The axis of the pattern.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3 - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "solid_set", "type": "SolidSet", @@ -146958,6 +167392,4429 @@ }, "required": true, "includeInSnippet": true, + "description": "The solid(s) to duplicate", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "distance", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Distance between each repetition. Also known as 'spacing'.", + "labelRequired": true + }, + { + "name": "axis", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The axis of the pattern. A 2D vector.", "labelRequired": true }, { @@ -148428,6 +173285,7 @@ } }, "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], @@ -149907,7 +174765,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d({\n axis = [1, 0, 1],\n instances = 7,\n distance = 6\n }, %)" + "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)" ] }, { @@ -228088,7 +252946,7 @@ "deprecated": false, "examples": [ "// Create a pipe using a sweep.\n\n\n// Create a path for the sweep.\nsweepPath = startSketchOn('XZ')\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 1.5 }, %)\n\nsweepSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 2 }, %)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)", - "// Create a spring by sweeping around a helix path.\n\n\n// Create a helix around the Z axis.\nhelixPath = helix(angleStart = 0, ccw = true, revolutions = 4, length = 10, radius = 5, axis = 'Z')\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)" + "// Create a spring by sweeping around a helix path.\n\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = 'Z',\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)" ] }, { diff --git a/docs/kcl/sweep.md b/docs/kcl/sweep.md index fb3a38491..0401fc22e 100644 --- a/docs/kcl/sweep.md +++ b/docs/kcl/sweep.md @@ -59,7 +59,14 @@ sweepSketch = startSketchOn('XY') // Create a helix around the Z axis. -helixPath = helix(angleStart = 0, ccw = true, revolutions = 4, length = 10, radius = 5, axis = 'Z') +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 4, + length = 10, + radius = 5, + axis = 'Z', +) // Create a spring by sweeping around the helix path. springSketch = startSketchOn('YZ') diff --git a/e2e/playwright/point-click.spec.ts b/e2e/playwright/point-click.spec.ts index c8b53f4b2..850504889 100644 --- a/e2e/playwright/point-click.spec.ts +++ b/e2e/playwright/point-click.spec.ts @@ -1117,13 +1117,14 @@ openSketch = startSketchOn('XY') }) => { // One dumb hardcoded screen pixel value const testPoint = { x: 620, y: 257 } - const expectedOutput = `helix001 = helix(revolutions = 1, angleStart = 360, counterClockWise = false, radius = 5, axis = 'X', length = 5)` + const expectedOutput = `helix001 = helix( revolutions = 1, angleStart = 360, counterClockWise = false, radius = 5, axis = 'X', length = 5,)` + const expectedLine = `revolutions=1,` await homePage.goToModelingScene() - await test.step(`Look for the red of the default plane`, async () => { - await scene.expectPixelColor([96, 52, 52], testPoint, 15) - }) + // await test.step(`Look for the red of the default plane`, async () => { + // await scene.expectPixelColor([96, 52, 52], testPoint, 15) + // }) await test.step(`Go through the command bar flow`, async () => { await toolbar.helixButton.click() await cmdBar.expectState({ @@ -1154,7 +1155,7 @@ openSketch = startSketchOn('XY') await editor.expectEditor.toContain(expectedOutput) await editor.expectState({ diagnostics: [], - activeLines: [expectedOutput], + activeLines: [expectedLine], highlightedCode: '', }) // Red plane is now gone, white helix is there diff --git a/e2e/playwright/regression-tests.spec.ts b/e2e/playwright/regression-tests.spec.ts index 6d7821c95..78a3099eb 100644 --- a/e2e/playwright/regression-tests.spec.ts +++ b/e2e/playwright/regression-tests.spec.ts @@ -192,11 +192,11 @@ extrude001 = extrude(sketch001, length = 50) |> line(end = [0, -1]) |> close() |> extrude(length = 1) - |> patternLinear3d({ - axis: [1, 0, 1], - repetitions: 3, - distance: 6 - }, %)` + |> patternLinear3d( + axis = [1, 0, 1], + repetitions = 3, + distance = 6, + )` ) }) await page.setBodyDimensions({ width: 1000, height: 500 }) diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png index 2f01830a15bdb4530c06c9996c1545ba9896d3b1..f8ff9052fc0a1b4141e592f7bb4348cd0988f7bd 100644 GIT binary patch delta 74409 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 diff --git a/package.json b/package.json index 959d36b32..6039d0cdf 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "fmt": "prettier --write ./src *.ts *.json *.js ./e2e ./packages", "fmt-check": "prettier --check ./src *.ts *.json *.js ./e2e ./packages", "fetch:wasm": "./get-latest-wasm-bundle.sh", - "fetch:samples": "echo \"Fetching latest KCL samples...\" && curl -o public/kcl-samples-manifest-fallback.json https://raw.githubusercontent.com/KittyCAD/kcl-samples/achalmers/kw-appearance/manifest.json", + "fetch:samples": "echo \"Fetching latest KCL samples...\" && curl -o public/kcl-samples-manifest-fallback.json https://raw.githubusercontent.com/KittyCAD/kcl-samples/achalmers/kw-pattern/manifest.json", "isomorphic-copy-wasm": "(copy src/wasm-lib/pkg/wasm_lib_bg.wasm public || cp src/wasm-lib/pkg/wasm_lib_bg.wasm public)", "build:wasm-dev": "yarn wasm-prep && (cd src/wasm-lib && wasm-pack build --dev --target web --out-dir pkg && cargo test -p kcl-lib export_bindings) && yarn isomorphic-copy-wasm && yarn fmt", "build:wasm": "yarn wasm-prep && cd src/wasm-lib && wasm-pack build --release --target web --out-dir pkg && cargo test -p kcl-lib export_bindings && cd ../.. && yarn isomorphic-copy-wasm && yarn fmt", diff --git a/src/lang/kclSamples.test.ts b/src/lang/kclSamples.test.ts index 1cf7c9116..8092f1574 100644 --- a/src/lang/kclSamples.test.ts +++ b/src/lang/kclSamples.test.ts @@ -32,7 +32,7 @@ child_process.spawnSync('git', [ 'clone', '--single-branch', '--branch', - 'achalmers/kw-appearance', + 'achalmers/kw-pattern', URL_GIT_KCL_SAMPLES, DIR_KCL_SAMPLES, ]) diff --git a/src/lib/exampleKcl.ts b/src/lib/exampleKcl.ts index 4c6c37618..2f98eb105 100644 --- a/src/lib/exampleKcl.ts +++ b/src/lib/exampleKcl.ts @@ -51,16 +51,16 @@ sketch002 = startSketchOn(sketch001, seg03) center = [-1.25, 1], radius = mountingHoleDiameter / 2, }, %) - |> patternLinear2d({ + |> patternLinear2d( instances = 2, distance = 2.5, axis = [-1, 0], - }, %) - |> patternLinear2d({ + ) + |> patternLinear2d( instances = 2, distance = 4, axis = [0, 1], - }, %) + ) |> extrude(%, length = -thickness-.01) sketch003 = startSketchOn(sketch001, seg04) @@ -68,11 +68,11 @@ sketch003 = startSketchOn(sketch001, seg04) center = [1, -1], radius = mountingHoleDiameter / 2, }, %) - |> patternLinear2d({ + |> patternLinear2d( instances = 2, distance = 4, axis = [1, 0], - }, %) + ) |> extrude(%, length = -thickness-0.1) ` diff --git a/src/wasm-lib/justfile b/src/wasm-lib/justfile index b94e63f04..23f99d6db 100644 --- a/src/wasm-lib/justfile +++ b/src/wasm-lib/justfile @@ -36,5 +36,11 @@ run-sim-test test_name: {{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::unparse TWENTY_TWENTY=overwrite {{cita}} -p kcl-lib -- tests::{{test_name}}::kcl_test_execute +overwrite-sim-test test_name: + EXPECTORATE=overwrite {{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::parse + EXPECTORATE=overwrite {{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::unparse + {{cita}} -p kcl-lib -- tests::{{test_name}}::kcl_test_execute + + test: export RUST_BRACKTRACE="full" && cargo nextest run --workspace --test-threads=1 diff --git a/src/wasm-lib/kcl/src/docs/mod.rs b/src/wasm-lib/kcl/src/docs/mod.rs index 4a896c2d3..d82a5de20 100644 --- a/src/wasm-lib/kcl/src/docs/mod.rs +++ b/src/wasm-lib/kcl/src/docs/mod.rs @@ -944,13 +944,7 @@ mod tests { let snippet = pattern_fn.to_autocomplete_snippet().unwrap(); assert_eq!( snippet, - r#"patternCircular3d({ - instances = ${0:10}, - axis = [${1:3.14}, ${2:3.14}, ${3:3.14}], - center = [${4:3.14}, ${5:3.14}, ${6:3.14}], - arcDegrees = ${7:3.14}, - rotateDuplicates = ${8:false}, -}, ${9:%})${}"# + r#"patternCircular3d(${0:%}, instances = ${1:10}, axis = [${2:3.14}, ${3:3.14}, ${4:3.14}], center = [${5:3.14}, ${6:3.14}, ${7:3.14}], arc_degrees = ${8:3.14}, rotate_duplicates = ${9:false})${}"# ); } @@ -1006,11 +1000,7 @@ mod tests { let snippet = pattern_fn.to_autocomplete_snippet().unwrap(); assert_eq!( snippet, - r#"patternLinear2d({ - instances = ${0:10}, - distance = ${1:3.14}, - axis = [${2:3.14}, ${3:3.14}], -}, ${4:%})${}"# + r#"patternLinear2d(${0:%}, instances = ${1:10}, distance = ${2:3.14}, axis = [${3:3.14}, ${4:3.14}])${}"# ); } diff --git a/src/wasm-lib/kcl/src/lsp/tests.rs b/src/wasm-lib/kcl/src/lsp/tests.rs index 84483a185..bf872789e 100644 --- a/src/wasm-lib/kcl/src/lsp/tests.rs +++ b/src/wasm-lib/kcl/src/lsp/tests.rs @@ -1542,13 +1542,13 @@ sphere = startSketchOn('XZ') }, %) |> close() |> revolve({ axis: 'x' }, %) - |> patternCircular3d({ - axis: [0, 0, 1], - center: [0, 0, 0], - repetitions: 10, - arcDegrees: 360, - rotateDuplicates: true - }, %) + |> patternCircular3d( + axis = [0, 0, 1], + center = [0, 0, 0], + repetitions = 10, + arcDegrees = 360, + rotateDuplicates = true, + ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn('XZ') @@ -1643,13 +1643,13 @@ sphere = startSketchOn('XZ') }, %) |> close() |> revolve({ axis = 'x' }, %) - |> patternCircular3d({ + |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], repetitions = 10, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn('XZ') diff --git a/src/wasm-lib/kcl/src/std/appearance.rs b/src/wasm-lib/kcl/src/std/appearance.rs index f31ea420b..971305aa3 100644 --- a/src/wasm-lib/kcl/src/std/appearance.rs +++ b/src/wasm-lib/kcl/src/std/appearance.rs @@ -180,12 +180,12 @@ pub async fn appearance(_exec_state: &mut ExecState, args: Args) -> Result patternLinear3d({ -/// axis = [1, 0, 1], -/// instances = 7, -/// distance = 6 -/// }, %) +/// ) +/// |> patternLinear3d( +/// axis = [1, 0, 1], +/// instances = 7, +/// distance = 6 +/// ) /// ``` /// /// ```no_run @@ -199,16 +199,16 @@ pub async fn appearance(_exec_state: &mut ExecState, args: Args) -> Result close() /// /// example = extrude(exampleSketch, length = 1) -/// |> patternLinear3d({ +/// |> patternLinear3d( /// axis = [1, 0, 1], /// instances = 7, /// distance = 6 -/// }, %) -/// |> appearance( -/// color = '#ff0000', -/// metalness = 90, -/// roughness = 90 -/// ) +/// ) +/// |> appearance( +/// color = '#ff0000', +/// metalness = 90, +/// roughness = 90 +/// ) /// ``` /// /// ```no_run @@ -219,12 +219,12 @@ pub async fn appearance(_exec_state: &mut ExecState, args: Args) -> Result line(end = [-1, 0]) /// |> line(end = [0, -5]) /// |> close() -/// |> patternCircular2d({ +/// |> patternCircular2d( /// center = [0, 0], /// instances = 13, /// arcDegrees = 360, /// rotateDuplicates = true -/// }, %) +/// ) /// /// example = extrude(exampleSketch, length = 1) /// |> appearance( diff --git a/src/wasm-lib/kcl/src/std/args.rs b/src/wasm-lib/kcl/src/std/args.rs index 6c0cd1597..c5137f1c3 100644 --- a/src/wasm-lib/kcl/src/std/args.rs +++ b/src/wasm-lib/kcl/src/std/args.rs @@ -442,13 +442,6 @@ impl Args { FromArgs::from_args(self, 0) } - pub(crate) fn get_data_and_solid_set<'a, T>(&'a self) -> Result<(T, SolidSet), KclError> - where - T: serde::de::DeserializeOwned + FromKclValue<'a> + Sized, - { - FromArgs::from_args(self, 0) - } - pub(crate) fn get_data_and_solid<'a, T>(&'a self) -> Result<(T, Box), KclError> where T: serde::de::DeserializeOwned + FromKclValue<'a> + Sized, @@ -945,72 +938,6 @@ impl<'a> FromKclValue<'a> for kittycad_modeling_cmds::coord::Direction { } } -impl<'a> FromKclValue<'a> for super::patterns::CircularPattern3dData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, instances); - let_field_of!(obj, arc_degrees "arcDegrees"); - let_field_of!(obj, rotate_duplicates "rotateDuplicates"); - let_field_of!(obj, axis); - let_field_of!(obj, center); - let_field_of!(obj, use_original? "useOriginal"); - Some(Self { - instances, - axis, - center, - arc_degrees, - rotate_duplicates, - use_original, - }) - } -} - -impl<'a> FromKclValue<'a> for super::patterns::CircularPattern2dData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, instances); - let_field_of!(obj, arc_degrees "arcDegrees"); - let_field_of!(obj, rotate_duplicates "rotateDuplicates"); - let_field_of!(obj, center); - let_field_of!(obj, use_original? "useOriginal"); - Some(Self { - instances, - center, - arc_degrees, - rotate_duplicates, - use_original, - }) - } -} - -impl<'a> FromKclValue<'a> for super::patterns::LinearPattern3dData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, distance); - let_field_of!(obj, instances); - let_field_of!(obj, axis); - Some(Self { - instances, - distance, - axis, - }) - } -} - -impl<'a> FromKclValue<'a> for super::patterns::LinearPattern2dData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, distance); - let_field_of!(obj, instances); - let_field_of!(obj, axis); - Some(Self { - instances, - distance, - axis, - }) - } -} - impl<'a> FromKclValue<'a> for super::sketch::BezierData { fn from_kcl_val(arg: &'a KclValue) -> Option { let obj = arg.as_object()?; diff --git a/src/wasm-lib/kcl/src/std/patterns.rs b/src/wasm-lib/kcl/src/std/patterns.rs index eefb47177..6a055e611 100644 --- a/src/wasm-lib/kcl/src/std/patterns.rs +++ b/src/wasm-lib/kcl/src/std/patterns.rs @@ -29,22 +29,6 @@ use crate::{ const MUST_HAVE_ONE_INSTANCE: &str = "There must be at least 1 instance of your geometry"; -/// Data for a linear pattern on a 2D sketch. -#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] -#[ts(export)] -#[serde(rename_all = "camelCase")] -pub struct LinearPattern2dData { - /// The number of total instances. Must be greater than or equal to 1. - /// This includes the original entity. For example, if instances is 2, - /// there will be two copies -- the original, and one new copy. - /// If instances is 1, this has no effect. - pub instances: u32, - /// The distance between each repetition. This can also be referred to as spacing. - pub distance: f64, - /// The axis of the pattern. This is a 2D vector. - pub axis: [f64; 2], -} - /// Data for a linear pattern on a 3D model. #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] #[ts(export)] @@ -689,10 +673,13 @@ mod tests { /// A linear pattern on a 2D sketch. pub async fn pattern_linear_2d(exec_state: &mut ExecState, args: Args) -> Result { - let (data, sketch_set, use_original): (LinearPattern2dData, SketchSet, Option) = - super::args::FromArgs::from_args(&args, 0)?; + let sketch_set: SketchSet = args.get_unlabeled_kw_arg("sketchSet")?; + let instances: u32 = args.get_kw_arg("instances")?; + let distance: f64 = args.get_kw_arg("distance")?; + let axis: [f64; 2] = args.get_kw_arg("axis")?; + let use_original: Option = args.get_kw_arg_opt("useOriginal")?; - if data.axis == [0.0, 0.0] { + if axis == [0.0, 0.0] { return Err(KclError::Semantic(KclErrorDetails { message: "The axis of the linear pattern cannot be the zero vector. Otherwise they will just duplicate in place." @@ -701,7 +688,8 @@ pub async fn pattern_linear_2d(exec_state: &mut ExecState, args: Args) -> Result })); } - let sketches = inner_pattern_linear_2d(data, sketch_set, use_original, exec_state, args).await?; + let sketches = + inner_pattern_linear_2d(sketch_set, instances, distance, axis, use_original, exec_state, args).await?; Ok(sketches.into()) } @@ -711,31 +699,41 @@ pub async fn pattern_linear_2d(exec_state: &mut ExecState, args: Args) -> Result /// ```no_run /// exampleSketch = startSketchOn('XZ') /// |> circle({ center = [0, 0], radius = 1 }, %) -/// |> patternLinear2d({ +/// |> patternLinear2d( /// axis = [1, 0], /// instances = 7, /// distance = 4 -/// }, %) +/// ) /// /// example = extrude(exampleSketch, length = 1) /// ``` #[stdlib { name = "patternLinear2d", + keywords = true, + unlabeled_first = true, + args = { + sketch_set = { docs = "The sketch(es) to duplicate" }, + instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect." }, + distance = { docs = "Distance between each repetition. Also known as 'spacing'."}, + axis = { docs = "The axis of the pattern. A 2D vector." }, + use_original = { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false." }, + } }] async fn inner_pattern_linear_2d( - data: LinearPattern2dData, sketch_set: SketchSet, + instances: u32, + distance: f64, + axis: [f64; 2], use_original: Option, exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { - let axis = data.axis; let [x, y] = axis; let axis_len = f64::sqrt(x * x + y * y); let normalized_axis = kcmc::shared::Point2d::from([x / axis_len, y / axis_len]); - let transforms: Vec<_> = (1..data.instances) + let transforms: Vec<_> = (1..instances) .map(|i| { - let d = data.distance * (i as f64); + let d = distance * (i as f64); let translate = (normalized_axis * d).with_z(0.0).map(LengthUnit); vec![Transform { translate, @@ -755,10 +753,13 @@ async fn inner_pattern_linear_2d( /// A linear pattern on a 3D model. pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result { - let (data, solid_set, use_original): (LinearPattern3dData, SolidSet, Option) = - super::args::FromArgs::from_args(&args, 0)?; + let solid_set: SolidSet = args.get_unlabeled_kw_arg("solidSet")?; + let instances: u32 = args.get_kw_arg("instances")?; + let distance: f64 = args.get_kw_arg("distance")?; + let axis: [f64; 3] = args.get_kw_arg("axis")?; + let use_original: Option = args.get_kw_arg_opt("useOriginal")?; - if data.axis == [0.0, 0.0, 0.0] { + if axis == [0.0, 0.0, 0.0] { return Err(KclError::Semantic(KclErrorDetails { message: "The axis of the linear pattern cannot be the zero vector. Otherwise they will just duplicate in place." @@ -767,7 +768,7 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result })); } - let solids = inner_pattern_linear_3d(data, solid_set, use_original, exec_state, args).await?; + let solids = inner_pattern_linear_3d(solid_set, instances, distance, axis, use_original, exec_state, args).await?; Ok(solids.into()) } @@ -783,30 +784,40 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result /// |> close() /// /// example = extrude(exampleSketch, length = 1) -/// |> patternLinear3d({ +/// |> patternLinear3d( /// axis = [1, 0, 1], /// instances = 7, /// distance = 6 -/// }, %) +/// ) /// ``` #[stdlib { name = "patternLinear3d", feature_tree_operation = true, + keywords = true, + unlabeled_first = true, + args = { + solid_set = { docs = "The solid(s) to duplicate" }, + instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect." }, + distance = { docs = "Distance between each repetition. Also known as 'spacing'."}, + axis = { docs = "The axis of the pattern. A 2D vector." }, + use_original = { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false." }, + } }] async fn inner_pattern_linear_3d( - data: LinearPattern3dData, solid_set: SolidSet, + instances: u32, + distance: f64, + axis: [f64; 3], use_original: Option, exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { - let axis = data.axis; let [x, y, z] = axis; let axis_len = f64::sqrt(x * x + y * y + z * z); let normalized_axis = kcmc::shared::Point3d::from([x / axis_len, y / axis_len, z / axis_len]); - let transforms: Vec<_> = (1..data.instances) + let transforms: Vec<_> = (1..instances) .map(|i| { - let d = data.distance * (i as f64); + let d = distance * (i as f64); let translate = (normalized_axis * d).map(LengthUnit); vec![Transform { translate, @@ -828,7 +839,7 @@ async fn inner_pattern_linear_3d( #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] #[ts(export)] #[serde(rename_all = "camelCase")] -pub struct CircularPattern2dData { +struct CircularPattern2dData { /// The number of total instances. Must be greater than or equal to 1. /// This includes the original entity. For example, if instances is 2, /// there will be two copies -- the original, and one new copy. @@ -870,7 +881,7 @@ pub struct CircularPattern3dData { pub use_original: Option, } -pub enum CircularPattern { +enum CircularPattern { ThreeD(CircularPattern3dData), TwoD(CircularPattern2dData), } @@ -941,9 +952,24 @@ impl CircularPattern { /// A circular pattern on a 2D sketch. pub async fn pattern_circular_2d(exec_state: &mut ExecState, args: Args) -> Result { - let (data, sketch_set): (CircularPattern2dData, SketchSet) = args.get_data_and_sketch_set()?; + let sketch_set: SketchSet = args.get_unlabeled_kw_arg("sketchSet")?; + let instances: u32 = args.get_kw_arg("instances")?; + let center: [f64; 2] = args.get_kw_arg("center")?; + let arc_degrees: f64 = args.get_kw_arg("arcDegrees")?; + let rotate_duplicates: bool = args.get_kw_arg("rotateDuplicates")?; + let use_original: Option = args.get_kw_arg_opt("useOriginal")?; - let sketches = inner_pattern_circular_2d(data, sketch_set, exec_state, args).await?; + let sketches = inner_pattern_circular_2d( + sketch_set, + instances, + center, + arc_degrees, + rotate_duplicates, + use_original, + exec_state, + args, + ) + .await?; Ok(sketches.into()) } @@ -959,21 +985,36 @@ pub async fn pattern_circular_2d(exec_state: &mut ExecState, args: Args) -> Resu /// |> line(end = [-1, 0]) /// |> line(end = [0, -5]) /// |> close() -/// |> patternCircular2d({ +/// |> patternCircular2d( /// center = [0, 0], /// instances = 13, /// arcDegrees = 360, /// rotateDuplicates = true -/// }, %) +/// ) /// /// example = extrude(exampleSketch, length = 1) /// ``` #[stdlib { name = "patternCircular2d", + keywords = true, + unlabeled_first = true, + args = { + sketch_set = { docs = "Which sketch(es) to pattern" }, + instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect."}, + center = { docs = "The center about which to make the pattern. This is a 2D vector."}, + arc_degrees = { docs = "The arc angle (in degrees) to place the repetitions. Must be greater than 0."}, + rotate_duplicates= { docs = "Whether or not to rotate the duplicates as they are copied."}, + use_original= { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false."}, + } }] +#[allow(clippy::too_many_arguments)] async fn inner_pattern_circular_2d( - data: CircularPattern2dData, sketch_set: SketchSet, + instances: u32, + center: [f64; 2], + arc_degrees: f64, + rotate_duplicates: bool, + use_original: Option, exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { @@ -982,6 +1023,13 @@ async fn inner_pattern_circular_2d( if args.ctx.context_type == crate::execution::ContextType::Mock { return Ok(starting_sketches); } + let data = CircularPattern2dData { + instances, + center, + arc_degrees, + rotate_duplicates, + use_original, + }; let mut sketches = Vec::new(); for sketch in starting_sketches.iter() { @@ -1008,9 +1056,36 @@ async fn inner_pattern_circular_2d( /// A circular pattern on a 3D model. pub async fn pattern_circular_3d(exec_state: &mut ExecState, args: Args) -> Result { - let (data, solid_set): (CircularPattern3dData, SolidSet) = args.get_data_and_solid_set()?; + let solid_set: SolidSet = args.get_unlabeled_kw_arg("solidSet")?; + // The number of total instances. Must be greater than or equal to 1. + // This includes the original entity. For example, if instances is 2, + // there will be two copies -- the original, and one new copy. + // If instances is 1, this has no effect. + let instances: u32 = args.get_kw_arg("instances")?; + // The axis around which to make the pattern. This is a 3D vector. + let axis: [f64; 3] = args.get_kw_arg("axis")?; + // The center about which to make the pattern. This is a 3D vector. + let center: [f64; 3] = args.get_kw_arg("center")?; + // The arc angle (in degrees) to place the repetitions. Must be greater than 0. + let arc_degrees: f64 = args.get_kw_arg("arcDegrees")?; + // Whether or not to rotate the duplicates as they are copied. + let rotate_duplicates: bool = args.get_kw_arg("rotateDuplicates")?; + // If the target being patterned is itself a pattern, then, should you use the original solid, + // or the pattern? + let use_original: Option = args.get_kw_arg_opt("useOriginal")?; - let solids = inner_pattern_circular_3d(data, solid_set, exec_state, args).await?; + let solids = inner_pattern_circular_3d( + solid_set, + instances, + axis, + center, + arc_degrees, + rotate_duplicates, + use_original, + exec_state, + args, + ) + .await?; Ok(solids.into()) } @@ -1024,21 +1099,38 @@ pub async fn pattern_circular_3d(exec_state: &mut ExecState, args: Args) -> Resu /// |> circle({ center = [0, 0], radius = 1 }, %) /// /// example = extrude(exampleSketch, length = -5) -/// |> patternCircular3d({ +/// |> patternCircular3d( /// axis = [1, -1, 0], /// center = [10, -20, 0], /// instances = 11, /// arcDegrees = 360, /// rotateDuplicates = true -/// }, %) +/// ) /// ``` #[stdlib { name = "patternCircular3d", feature_tree_operation = true, + keywords = true, + unlabeled_first = true, + args = { + solid_set = { docs = "Which solid(s) to pattern" }, + instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect."}, + axis = { docs = "The axis around which to make the pattern. This is a 3D vector"}, + center = { docs = "The center about which to make the pattern. This is a 3D vector."}, + arc_degrees = { docs = "The arc angle (in degrees) to place the repetitions. Must be greater than 0."}, + rotate_duplicates = { docs = "Whether or not to rotate the duplicates as they are copied."}, + use_original = { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false."}, + } }] +#[allow(clippy::too_many_arguments)] async fn inner_pattern_circular_3d( - data: CircularPattern3dData, solid_set: SolidSet, + instances: u32, + axis: [f64; 3], + center: [f64; 3], + arc_degrees: f64, + rotate_duplicates: bool, + use_original: Option, exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { @@ -1055,6 +1147,14 @@ async fn inner_pattern_circular_3d( } let mut solids = Vec::new(); + let data = CircularPattern3dData { + instances, + axis, + center, + arc_degrees, + rotate_duplicates, + use_original, + }; for solid in starting_solids.iter() { let geometries = pattern_circular( CircularPattern::ThreeD(data.clone()), diff --git a/src/wasm-lib/kcl/src/unparser.rs b/src/wasm-lib/kcl/src/unparser.rs index 69d8a929c..0bb19e79d 100644 --- a/src/wasm-lib/kcl/src/unparser.rs +++ b/src/wasm-lib/kcl/src/unparser.rs @@ -331,8 +331,25 @@ impl CallExpressionKw { .iter() .map(|arg| arg.recast(options, indentation_level, ctxt)), ); - let args = arg_list.join(", "); - format!("{indent}{name}({args})") + let args = arg_list.clone().join(", "); + if arg_list.len() >= 4 { + let inner_indentation = if ctxt == ExprContext::Pipe { + options.get_indentation_offset_pipe(indentation_level + 1) + } else { + options.get_indentation(indentation_level + 1) + }; + let mut args = arg_list.join(&format!(",\n{inner_indentation}")); + args.push(','); + let args = args; + let end_indent = if ctxt == ExprContext::Pipe { + options.get_indentation_offset_pipe(indentation_level) + } else { + options.get_indentation(indentation_level) + }; + format!("{indent}{name}(\n{inner_indentation}{args}\n{end_indent})") + } else { + format!("{indent}{name}({args})") + } } } @@ -1060,13 +1077,13 @@ sphere = startSketchOn('XZ') }, %) |> close() |> revolve({ axis: 'x' }, %) - |> patternCircular3d({ + |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], repetitions = 10, arcDegrees = 360, rotateDuplicates = true - }, %) + ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn('XZ') @@ -1127,13 +1144,13 @@ sphere = startSketchOn('XZ') }, %) |> close() |> revolve({ axis = 'x' }, %) - |> patternCircular3d({ + |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], repetitions = 10, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn('XZ') @@ -1458,11 +1475,11 @@ tabs_r = startSketchOn({ radius = hole_diam / 2 }, %), %) |> extrude(-thk, %) - |> patternLinear3d({ + |> patternLinear3d( axis = [0, -1, 0], repetitions = 1, distance = length - 10 - }, %) + ) // build the tabs of the mounting bracket (left side) tabs_l = startSketchOn({ plane: { @@ -1485,11 +1502,7 @@ tabs_l = startSketchOn({ radius = hole_diam / 2 }, %), %) |> extrude(-thk, %) - |> patternLinear3d({ - axis = [0, -1, 0], - repetitions = 1, - distance = length - 10 - }, %) + |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10) "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -1583,11 +1596,7 @@ tabs_r = startSketchOn({ radius = hole_diam / 2 }, %), %) |> extrude(-thk, %) - |> patternLinear3d({ - axis = [0, -1, 0], - repetitions = 1, - distance = length - 10 - }, %) + |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10) // build the tabs of the mounting bracket (left side) tabs_l = startSketchOn({ plane = { @@ -1610,11 +1619,7 @@ tabs_l = startSketchOn({ radius = hole_diam / 2 }, %), %) |> extrude(-thk, %) - |> patternLinear3d({ - axis = [0, -1, 0], - repetitions = 1, - distance = length - 10 - }, %) + |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10) "# ); } diff --git a/src/wasm-lib/kcl/tests/big_number_angle_to_match_length_x/ast.snap b/src/wasm-lib/kcl/tests/big_number_angle_to_match_length_x/ast.snap index b40edc815..0bac91786 100644 --- a/src/wasm-lib/kcl/tests/big_number_angle_to_match_length_x/ast.snap +++ b/src/wasm-lib/kcl/tests/big_number_angle_to_match_length_x/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing big_number_angle_to_match_length_x.kcl +snapshot_kind: text --- { "Ok": { diff --git a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/artifact_commands.snap b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/artifact_commands.snap index 9dc6dc6e8..7cd5c76a0 100644 --- a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/artifact_commands.snap +++ b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/artifact_commands.snap @@ -631,7 +631,7 @@ snapshot_kind: text "cmdId": "[uuid]", "range": [ 189, - 276, + 277, 0 ], "command": { @@ -819,8 +819,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -844,8 +844,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -869,8 +869,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -894,8 +894,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -919,8 +919,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -944,8 +944,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -969,8 +969,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { diff --git a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ast.snap b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ast.snap index 9b22f7b2c..26a366ec6 100644 --- a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ast.snap +++ b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing circular_pattern3d_a_pattern.kcl +snapshot_kind: text --- { "Ok": { @@ -321,7 +322,7 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl }, { "declaration": { - "end": 276, + "end": 277, "id": { "end": 186, "name": "pattn1", @@ -331,115 +332,88 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl "init": { "arguments": [ { - "end": 260, - "properties": [ - { - "end": 225, - "key": { - "end": 213, - "name": "axis", - "start": 209, - "type": "Identifier" - }, - "start": 209, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "end": 218, - "raw": "1", - "start": 217, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "end": 221, - "raw": "0", - "start": 220, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 224, - "raw": "0", - "start": 223, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 225, - "start": 216, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 242, - "key": { - "end": 238, - "name": "instances", - "start": 229, - "type": "Identifier" - }, - "start": 229, - "type": "ObjectProperty", - "value": { - "end": 242, - "raw": "7", - "start": 241, + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "axis" + }, + "arg": { + "elements": [ + { + "end": 234, + "raw": "1", + "start": 233, "type": "Literal", "type": "Literal", "value": { - "value": 7.0, + "value": 1.0, "suffix": "None" } - } - }, - { - "end": 258, - "key": { - "end": 254, - "name": "distance", - "start": 246, - "type": "Identifier" }, - "start": 246, - "type": "ObjectProperty", - "value": { - "end": 258, - "raw": "6", - "start": 257, + { + "end": 237, + "raw": "0", + "start": 236, "type": "Literal", "type": "Literal", "value": { - "value": 6.0, + "value": 0.0, + "suffix": "None" + } + }, + { + "end": 240, + "raw": "0", + "start": 239, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, "suffix": "None" } } - } - ], - "start": 205, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 241, + "start": 232, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "end": 275, - "name": "exampleSketch", - "start": 262, - "type": "Identifier", - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "instances" + }, + "arg": { + "end": 258, + "raw": "7", + "start": 257, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "distance" + }, + "arg": { + "end": 274, + "raw": "6", + "start": 273, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + } } ], "callee": { @@ -448,15 +422,22 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl "start": 189, "type": "Identifier" }, - "end": 276, + "end": 277, "start": 189, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "end": 221, + "name": "exampleSketch", + "start": 208, + "type": "Identifier", + "type": "Identifier" + } }, "start": 180, "type": "VariableDeclarator" }, - "end": 276, + "end": 277, "kind": "const", "start": 180, "type": "VariableDeclaration", @@ -464,241 +445,213 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl }, { "declaration": { - "end": 430, + "end": 432, "id": { - "end": 284, + "end": 285, "name": "pattn2", - "start": 278, + "start": 279, "type": "Identifier" }, "init": { "arguments": [ { - "end": 421, - "properties": [ - { - "end": 325, - "key": { - "end": 313, - "name": "axis", - "start": 309, - "type": "Identifier" - }, - "start": 309, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "end": 318, - "raw": "0", - "start": 317, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 321, - "raw": "0", - "start": 320, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 324, - "raw": "1", - "start": 323, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - } - ], - "end": 325, - "start": 316, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 353, - "key": { - "end": 335, - "name": "center", - "start": 329, - "type": "Identifier" - }, - "start": 329, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "argument": { - "end": 342, - "raw": "20", - "start": 340, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" - } - }, - "end": 342, - "operator": "-", - "start": 339, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { - "end": 347, - "raw": "20", - "start": 345, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" - } - }, - "end": 347, - "operator": "-", - "start": 344, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { - "end": 352, - "raw": "20", - "start": 350, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" - } - }, - "end": 352, - "operator": "-", - "start": 349, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 353, - "start": 338, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 371, - "key": { - "end": 366, - "name": "instances", - "start": 357, - "type": "Identifier" - }, - "start": 357, - "type": "ObjectProperty", - "value": { - "end": 371, - "raw": "41", - "start": 369, + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "axis" + }, + "arg": { + "elements": [ + { + "end": 328, + "raw": "0", + "start": 327, "type": "Literal", "type": "Literal", "value": { - "value": 41.0, + "value": 0.0, "suffix": "None" } - } - }, - { - "end": 391, - "key": { - "end": 385, - "name": "arcDegrees", - "start": 375, - "type": "Identifier" }, - "start": 375, - "type": "ObjectProperty", - "value": { - "end": 391, - "raw": "360", - "start": 388, + { + "end": 331, + "raw": "0", + "start": 330, "type": "Literal", "type": "Literal", "value": { - "value": 360.0, + "value": 0.0, + "suffix": "None" + } + }, + { + "end": 334, + "raw": "1", + "start": 333, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, "suffix": "None" } } - }, - { - "end": 419, - "key": { - "end": 411, - "name": "rotateDuplicates", - "start": 395, - "type": "Identifier" - }, - "start": 395, - "type": "ObjectProperty", - "value": { - "end": 419, - "raw": "false", - "start": 414, - "type": "Literal", - "type": "Literal", - "value": false - } - } - ], - "start": 305, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 335, + "start": 326, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "end": 429, - "name": "pattn1", - "start": 423, - "type": "Identifier", - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "center" + }, + "arg": { + "elements": [ + { + "argument": { + "end": 352, + "raw": "20", + "start": 350, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } + }, + "end": 352, + "operator": "-", + "start": 349, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "end": 357, + "raw": "20", + "start": 355, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } + }, + "end": 357, + "operator": "-", + "start": 354, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "end": 362, + "raw": "20", + "start": 360, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } + }, + "end": 362, + "operator": "-", + "start": 359, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 363, + "start": 348, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "instances" + }, + "arg": { + "end": 381, + "raw": "41", + "start": 379, + "type": "Literal", + "type": "Literal", + "value": { + "value": 41.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "arcDegrees" + }, + "arg": { + "end": 401, + "raw": "360", + "start": 398, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "rotateDuplicates" + }, + "arg": { + "end": 429, + "raw": "false", + "start": 424, + "type": "Literal", + "type": "Literal", + "value": false + } } ], "callee": { - "end": 304, + "end": 305, "name": "patternCircular3d", - "start": 287, + "start": 288, "type": "Identifier" }, - "end": 430, - "start": 287, - "type": "CallExpression", - "type": "CallExpression" + "end": 432, + "start": 288, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "end": 315, + "name": "pattn1", + "start": 309, + "type": "Identifier", + "type": "Identifier" + } }, - "start": 278, + "start": 279, "type": "VariableDeclarator" }, - "end": 430, + "end": 432, "kind": "const", - "start": 278, + "start": 279, "type": "VariableDeclaration", "type": "VariableDeclaration" } ], - "end": 431, + "end": 433, "nonCodeMeta": { "nonCodeNodes": { "0": [ @@ -713,8 +666,8 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl ], "1": [ { - "end": 278, - "start": 276, + "end": 279, + "start": 277, "type": "NonCodeNode", "value": { "type": "newLine" diff --git a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/input.kcl b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/input.kcl index 17e165013..cece9fa3f 100644 --- a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/input.kcl +++ b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/input.kcl @@ -6,16 +6,18 @@ exampleSketch = startSketchOn('XZ') |> close(%) |> extrude(length = 1) -pattn1 = patternLinear3d({ +pattn1 = patternLinear3d( + exampleSketch, axis = [1, 0, 0], instances = 7, - distance = 6 -}, exampleSketch) + distance = 6, +) -pattn2 = patternCircular3d({ +pattn2 = patternCircular3d( + pattn1, axis = [0, 0, 1], center = [-20, -20, -20], instances = 41, arcDegrees = 360, - rotateDuplicates = false -}, pattn1) + rotateDuplicates = false, +) diff --git a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ops.snap b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ops.snap index 6e7fdda94..bd4cf3be4 100644 --- a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ops.snap +++ b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ops.snap @@ -44,17 +44,24 @@ snapshot_kind: text }, { "labeledArgs": { - "data": { + "axis": { "sourceRange": [ - 205, - 260, + 232, + 241, 0 ] }, - "solid_set": { + "distance": { "sourceRange": [ - 262, - 275, + 273, + 274, + 0 + ] + }, + "instances": { + "sourceRange": [ + 257, + 258, 0 ] } @@ -62,24 +69,51 @@ snapshot_kind: text "name": "patternLinear3d", "sourceRange": [ 189, - 276, + 277, 0 ], "type": "StdLibCall", - "unlabeledArg": null + "unlabeledArg": { + "sourceRange": [ + 208, + 221, + 0 + ] + } }, { "labeledArgs": { - "data": { + "arcDegrees": { "sourceRange": [ - 305, - 421, + 398, + 401, 0 ] }, - "solid_set": { + "axis": { "sourceRange": [ - 423, + 326, + 335, + 0 + ] + }, + "center": { + "sourceRange": [ + 348, + 363, + 0 + ] + }, + "instances": { + "sourceRange": [ + 379, + 381, + 0 + ] + }, + "rotateDuplicates": { + "sourceRange": [ + 424, 429, 0 ] @@ -87,11 +121,17 @@ snapshot_kind: text }, "name": "patternCircular3d", "sourceRange": [ - 287, - 430, + 288, + 432, 0 ], "type": "StdLibCall", - "unlabeledArg": null + "unlabeledArg": { + "sourceRange": [ + 309, + 315, + 0 + ] + } } ] diff --git a/src/wasm-lib/kcl/tests/helix_simple/artifact_commands.snap b/src/wasm-lib/kcl/tests/helix_simple/artifact_commands.snap index adab25f88..e584f81f9 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/artifact_commands.snap +++ b/src/wasm-lib/kcl/tests/helix_simple/artifact_commands.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Artifact commands helix_simple.kcl +snapshot_kind: text --- [ { @@ -383,7 +384,7 @@ description: Artifact commands helix_simple.kcl "cmdId": "[uuid]", "range": [ 151, - 242, + 257, 0 ], "command": { diff --git a/src/wasm-lib/kcl/tests/helix_simple/artifact_graph_flowchart.snap.md b/src/wasm-lib/kcl/tests/helix_simple/artifact_graph_flowchart.snap.md index 5ca288d88..f528cdc65 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/artifact_graph_flowchart.snap.md +++ b/src/wasm-lib/kcl/tests/helix_simple/artifact_graph_flowchart.snap.md @@ -5,7 +5,7 @@ flowchart LR 3["Segment
[102, 137, 0]"] end 1["Plane
[46, 65, 0]"] - 4["Helix
[151, 242, 0]"] + 4["Helix
[151, 257, 0]"] 1 --- 2 2 --- 3 3 <--x 4 diff --git a/src/wasm-lib/kcl/tests/helix_simple/ast.snap b/src/wasm-lib/kcl/tests/helix_simple/ast.snap index 8009aab8a..2ea9b916f 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/ast.snap +++ b/src/wasm-lib/kcl/tests/helix_simple/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing helix_simple.kcl +snapshot_kind: text --- { "Ok": { @@ -171,7 +172,7 @@ description: Result of parsing helix_simple.kcl }, { "declaration": { - "end": 242, + "end": 257, "id": { "end": 148, "name": "helixPath", @@ -187,9 +188,9 @@ description: Result of parsing helix_simple.kcl "name": "angleStart" }, "arg": { - "end": 171, + "end": 174, "raw": "0", - "start": 170, + "start": 173, "type": "Literal", "type": "Literal", "value": { @@ -205,9 +206,9 @@ description: Result of parsing helix_simple.kcl "name": "ccw" }, "arg": { - "end": 183, + "end": 188, "raw": "true", - "start": 179, + "start": 184, "type": "Literal", "type": "Literal", "value": true @@ -220,9 +221,9 @@ description: Result of parsing helix_simple.kcl "name": "revolutions" }, "arg": { - "end": 200, + "end": 207, "raw": "5", - "start": 199, + "start": 206, "type": "Literal", "type": "Literal", "value": { @@ -238,9 +239,9 @@ description: Result of parsing helix_simple.kcl "name": "length" }, "arg": { - "end": 213, + "end": 222, "raw": "10", - "start": 211, + "start": 220, "type": "Literal", "type": "Literal", "value": { @@ -256,9 +257,9 @@ description: Result of parsing helix_simple.kcl "name": "radius" }, "arg": { - "end": 225, + "end": 236, "raw": "5", - "start": 224, + "start": 235, "type": "Literal", "type": "Literal", "value": { @@ -274,9 +275,9 @@ description: Result of parsing helix_simple.kcl "name": "axis" }, "arg": { - "end": 241, + "end": 254, "name": "edge001", - "start": 234, + "start": 247, "type": "Identifier", "type": "Identifier" } @@ -288,7 +289,7 @@ description: Result of parsing helix_simple.kcl "start": 151, "type": "Identifier" }, - "end": 242, + "end": 257, "start": 151, "type": "CallExpressionKw", "type": "CallExpressionKw", @@ -297,14 +298,14 @@ description: Result of parsing helix_simple.kcl "start": 139, "type": "VariableDeclarator" }, - "end": 242, + "end": 257, "kind": "const", "start": 139, "type": "VariableDeclaration", "type": "VariableDeclaration" } ], - "end": 243, + "end": 258, "nonCodeMeta": { "nonCodeNodes": { "0": [ diff --git a/src/wasm-lib/kcl/tests/helix_simple/input.kcl b/src/wasm-lib/kcl/tests/helix_simple/input.kcl index f732df7a0..b0c9b9c67 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/input.kcl +++ b/src/wasm-lib/kcl/tests/helix_simple/input.kcl @@ -3,4 +3,11 @@ helper001 = startSketchOn('XZ') |> startProfileAt([0, 0], %) |> line(end = [0, 10], tag = $edge001) -helixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = edge001) +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 5, + length = 10, + radius = 5, + axis = edge001, +) diff --git a/src/wasm-lib/kcl/tests/helix_simple/ops.snap b/src/wasm-lib/kcl/tests/helix_simple/ops.snap index 9ac61969f..f39cb68a4 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/ops.snap +++ b/src/wasm-lib/kcl/tests/helix_simple/ops.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Operations executed helix_simple.kcl +snapshot_kind: text --- [ { @@ -26,43 +27,43 @@ description: Operations executed helix_simple.kcl "labeledArgs": { "angleStart": { "sourceRange": [ - 170, - 171, + 173, + 174, 0 ] }, "axis": { "sourceRange": [ - 234, - 241, + 247, + 254, 0 ] }, "ccw": { "sourceRange": [ - 179, - 183, + 184, + 188, 0 ] }, "length": { "sourceRange": [ - 211, - 213, + 220, + 222, 0 ] }, "radius": { "sourceRange": [ - 224, - 225, + 235, + 236, 0 ] }, "revolutions": { "sourceRange": [ - 199, - 200, + 206, + 207, 0 ] } @@ -70,7 +71,7 @@ description: Operations executed helix_simple.kcl "name": "helix", "sourceRange": [ 151, - 242, + 257, 0 ], "type": "StdLibCall", diff --git a/src/wasm-lib/kcl/tests/helix_simple/program_memory.snap b/src/wasm-lib/kcl/tests/helix_simple/program_memory.snap index da1672d2b..60dbc4f70 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/program_memory.snap +++ b/src/wasm-lib/kcl/tests/helix_simple/program_memory.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Program memory after executing helix_simple.kcl +snapshot_kind: text --- { "environments": [ @@ -86,7 +87,7 @@ description: Program memory after executing helix_simple.kcl { "sourceRange": [ 151, - 242, + 257, 0 ] } diff --git a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/artifact_commands.snap b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/artifact_commands.snap index c0383fa05..a7e0460ed 100644 --- a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/artifact_commands.snap +++ b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/artifact_commands.snap @@ -631,7 +631,7 @@ snapshot_kind: text "cmdId": "[uuid]", "range": [ 189, - 276, + 277, 0 ], "command": { @@ -819,8 +819,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1008,8 +1008,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1197,8 +1197,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1386,8 +1386,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1575,8 +1575,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1764,8 +1764,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1953,8 +1953,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { diff --git a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ast.snap b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ast.snap index 809bafb06..74abbcb12 100644 --- a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ast.snap +++ b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing linear_pattern3d_a_pattern.kcl +snapshot_kind: text --- { "Ok": { @@ -321,7 +322,7 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl }, { "declaration": { - "end": 276, + "end": 277, "id": { "end": 186, "name": "pattn1", @@ -331,115 +332,88 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl "init": { "arguments": [ { - "end": 260, - "properties": [ - { - "end": 225, - "key": { - "end": 213, - "name": "axis", - "start": 209, - "type": "Identifier" - }, - "start": 209, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "end": 218, - "raw": "1", - "start": 217, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "end": 221, - "raw": "0", - "start": 220, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 224, - "raw": "0", - "start": 223, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 225, - "start": 216, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 242, - "key": { - "end": 238, - "name": "instances", - "start": 229, - "type": "Identifier" - }, - "start": 229, - "type": "ObjectProperty", - "value": { - "end": 242, - "raw": "7", - "start": 241, + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "axis" + }, + "arg": { + "elements": [ + { + "end": 234, + "raw": "1", + "start": 233, "type": "Literal", "type": "Literal", "value": { - "value": 7.0, + "value": 1.0, "suffix": "None" } - } - }, - { - "end": 258, - "key": { - "end": 254, - "name": "distance", - "start": 246, - "type": "Identifier" }, - "start": 246, - "type": "ObjectProperty", - "value": { - "end": 258, - "raw": "6", - "start": 257, + { + "end": 237, + "raw": "0", + "start": 236, "type": "Literal", "type": "Literal", "value": { - "value": 6.0, + "value": 0.0, + "suffix": "None" + } + }, + { + "end": 240, + "raw": "0", + "start": 239, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, "suffix": "None" } } - } - ], - "start": 205, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 241, + "start": 232, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "end": 275, - "name": "exampleSketch", - "start": 262, - "type": "Identifier", - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "instances" + }, + "arg": { + "end": 258, + "raw": "7", + "start": 257, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "distance" + }, + "arg": { + "end": 274, + "raw": "6", + "start": 273, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + } } ], "callee": { @@ -448,15 +422,22 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl "start": 189, "type": "Identifier" }, - "end": 276, + "end": 277, "start": 189, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "end": 221, + "name": "exampleSketch", + "start": 208, + "type": "Identifier", + "type": "Identifier" + } }, "start": 180, "type": "VariableDeclarator" }, - "end": 276, + "end": 277, "kind": "const", "start": 180, "type": "VariableDeclaration", @@ -464,84 +445,49 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl }, { "declaration": { - "end": 367, + "end": 369, "id": { - "end": 284, + "end": 285, "name": "pattn2", - "start": 278, + "start": 279, "type": "Identifier" }, "init": { "arguments": [ { - "end": 358, - "properties": [ - { - "end": 323, - "key": { - "end": 311, - "name": "axis", - "start": 307, - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "axis" + }, + "arg": { + "elements": [ + { + "end": 326, + "raw": "0", + "start": 325, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } }, - "start": 307, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "end": 316, - "raw": "0", - "start": 315, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 319, - "raw": "0", - "start": 318, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 322, - "raw": "1", - "start": 321, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - } - ], - "end": 323, - "start": 314, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 339, - "key": { - "end": 335, - "name": "distance", - "start": 327, - "type": "Identifier" + { + "end": 329, + "raw": "0", + "start": 328, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } }, - "start": 327, - "type": "ObjectProperty", - "value": { - "end": 339, + { + "end": 332, "raw": "1", - "start": 338, + "start": 331, "type": "Literal", "type": "Literal", "value": { @@ -549,64 +495,79 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl "suffix": "None" } } - }, - { - "end": 356, - "key": { - "end": 352, - "name": "instances", - "start": 343, - "type": "Identifier" - }, - "start": 343, - "type": "ObjectProperty", - "value": { - "end": 356, - "raw": "7", - "start": 355, - "type": "Literal", - "type": "Literal", - "value": { - "value": 7.0, - "suffix": "None" - } - } - } - ], - "start": 303, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 333, + "start": 324, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "end": 366, - "name": "pattn1", - "start": 360, - "type": "Identifier", - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "distance" + }, + "arg": { + "end": 349, + "raw": "1", + "start": 348, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "instances" + }, + "arg": { + "end": 366, + "raw": "7", + "start": 365, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + } } ], "callee": { - "end": 302, + "end": 303, "name": "patternLinear3d", - "start": 287, + "start": 288, "type": "Identifier" }, - "end": 367, - "start": 287, - "type": "CallExpression", - "type": "CallExpression" + "end": 369, + "start": 288, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "end": 313, + "name": "pattn1", + "start": 307, + "type": "Identifier", + "type": "Identifier" + } }, - "start": 278, + "start": 279, "type": "VariableDeclarator" }, - "end": 367, + "end": 369, "kind": "const", - "start": 278, + "start": 279, "type": "VariableDeclaration", "type": "VariableDeclaration" } ], - "end": 368, + "end": 370, "nonCodeMeta": { "nonCodeNodes": { "0": [ @@ -621,8 +582,8 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl ], "1": [ { - "end": 278, - "start": 276, + "end": 279, + "start": 277, "type": "NonCodeNode", "value": { "type": "newLine" diff --git a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/input.kcl b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/input.kcl index 42acbe8d9..827fa105c 100644 --- a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/input.kcl +++ b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/input.kcl @@ -6,14 +6,16 @@ exampleSketch = startSketchOn('XZ') |> close(%) |> extrude(length = 1) -pattn1 = patternLinear3d({ +pattn1 = patternLinear3d( + exampleSketch, axis = [1, 0, 0], instances = 7, - distance = 6 -}, exampleSketch) + distance = 6, +) -pattn2 = patternLinear3d({ +pattn2 = patternLinear3d( + pattn1, axis = [0, 0, 1], distance = 1, - instances = 7 -}, pattn1) + instances = 7, +) diff --git a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ops.snap b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ops.snap index 126c98587..5f7598f9b 100644 --- a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ops.snap +++ b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ops.snap @@ -44,17 +44,24 @@ snapshot_kind: text }, { "labeledArgs": { - "data": { + "axis": { "sourceRange": [ - 205, - 260, + 232, + 241, 0 ] }, - "solid_set": { + "distance": { "sourceRange": [ - 262, - 275, + 273, + 274, + 0 + ] + }, + "instances": { + "sourceRange": [ + 257, + 258, 0 ] } @@ -62,24 +69,37 @@ snapshot_kind: text "name": "patternLinear3d", "sourceRange": [ 189, - 276, + 277, 0 ], "type": "StdLibCall", - "unlabeledArg": null + "unlabeledArg": { + "sourceRange": [ + 208, + 221, + 0 + ] + } }, { "labeledArgs": { - "data": { + "axis": { "sourceRange": [ - 303, - 358, + 324, + 333, 0 ] }, - "solid_set": { + "distance": { "sourceRange": [ - 360, + 348, + 349, + 0 + ] + }, + "instances": { + "sourceRange": [ + 365, 366, 0 ] @@ -87,11 +107,17 @@ snapshot_kind: text }, "name": "patternLinear3d", "sourceRange": [ - 287, - 367, + 288, + 369, 0 ], "type": "StdLibCall", - "unlabeledArg": null + "unlabeledArg": { + "sourceRange": [ + 307, + 313, + 0 + ] + } } ] diff --git a/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times-different-order/ast.snap b/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times-different-order/ast.snap index cd5ca055a..e5781ae0b 100644 --- a/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times-different-order/ast.snap +++ b/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times-different-order/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl +snapshot_kind: text --- { "Ok": { diff --git a/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times/ast.snap b/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times/ast.snap index bfb23a01e..8b5acc3b6 100644 --- a/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times/ast.snap +++ b/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing sketch-on-chamfer-two-times.kcl +snapshot_kind: text --- { "Ok": { diff --git a/src/wasm-lib/kcl/tests/sketch_on_face_after_fillets_referencing_face/ast.snap b/src/wasm-lib/kcl/tests/sketch_on_face_after_fillets_referencing_face/ast.snap index dfe3de20e..894dce68b 100644 --- a/src/wasm-lib/kcl/tests/sketch_on_face_after_fillets_referencing_face/ast.snap +++ b/src/wasm-lib/kcl/tests/sketch_on_face_after_fillets_referencing_face/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing sketch_on_face_after_fillets_referencing_face.kcl +snapshot_kind: text --- { "Ok": { diff --git a/src/wasm-lib/tests/executor/inputs/circular_pattern3d_a_pattern.kcl b/src/wasm-lib/tests/executor/inputs/circular_pattern3d_a_pattern.kcl index 51af9414e..cdf86f94c 100644 --- a/src/wasm-lib/tests/executor/inputs/circular_pattern3d_a_pattern.kcl +++ b/src/wasm-lib/tests/executor/inputs/circular_pattern3d_a_pattern.kcl @@ -6,10 +6,18 @@ exampleSketch = startSketchOn('XZ') |> close() |> extrude(length = 1) -pattn1 = patternLinear3d({ - axis: [1, 0, 0], - instances: 7, - distance: 6 - }, exampleSketch) +pattn1 = patternLinear3d( + exampleSketch, + axis = [1, 0, 0], + instances = 7, + distance = 6, +) -pattn2 = patternCircular3d({axis: [0,0, 1], center: [-20, -20, -20], instances: 41, arcDegrees: 360, rotateDuplicates: false}, pattn1) +pattn2 = patternCircular3d( + pattn1, + axis = [0,0, 1], + center = [-20, -20, -20], + instances = 41, + arcDegrees = 360, + rotateDuplicates = false, +) diff --git a/src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl b/src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl index f5d70f614..419951393 100644 --- a/src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl +++ b/src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl @@ -95,11 +95,11 @@ const tabsR = startSketchOn(tabPlane) getNextAdjacentEdge(edge13) ] }, %) - |> patternLinear3d({ - axis: [0, -1, 0], - instances: 2, - distance: length + 2 * thk - (tabLength * 4 / 3) - }, %) + |> patternLinear3d( + axis = [0, -1, 0], + instances = 2, + distance = length + 2 * thk - (tabLength * 4 / 3) + ) // build the tabs of the mounting bracket (left side) const tabsL = startSketchOn(tabPlane) @@ -123,11 +123,11 @@ const tabsL = startSketchOn(tabPlane) getNextAdjacentEdge(edge22) ] }, %) - |> patternLinear3d({ - axis: [0, -1, 0], - instances: 2, - distance: length + 2 * thk - (tabLength * 4 / 3) - }, %) + |> patternLinear3d( + axis = [0, -1, 0], + instances = 2, + distance = length + 2 * thk - (tabLength * 4 / 3) + ) // define a plane for retention bumps const retPlane = { diff --git a/src/wasm-lib/tests/executor/inputs/global-tags.kcl b/src/wasm-lib/tests/executor/inputs/global-tags.kcl index a902cdcdd..c8c8d4167 100644 --- a/src/wasm-lib/tests/executor/inputs/global-tags.kcl +++ b/src/wasm-lib/tests/executor/inputs/global-tags.kcl @@ -95,11 +95,11 @@ const tabsR = startSketchOn(tabPlane) getNextAdjacentEdge(edge11) ] }, %) - |> patternLinear3d({ - axis: [0, -1, 0], - instances: 2, - distance: length + 2 * thk - (tabLength * 4 / 3) - }, %) + |> patternLinear3d( + axis = [0, -1, 0], + instances = 2, + distance = length + 2 * thk - (tabLength * 4 / 3) + ) // build the tabs of the mounting bracket (left side) const tabsL = startSketchOn(tabPlane) @@ -123,11 +123,11 @@ const tabsL = startSketchOn(tabPlane) getNextAdjacentEdge(edge22) ] }, %) - |> patternLinear3d({ - axis: [0, -1, 0], - instances: 2, - distance: length + 2 * thk - (tabLength * 4 / 3) - }, %) + |> patternLinear3d( + axis = [0, -1, 0], + instances = 2, + distance = length + 2 * thk - (tabLength * 4 / 3) + ) // define a plane for retention bumps const retPlane = { diff --git a/src/wasm-lib/tests/executor/inputs/lego.kcl b/src/wasm-lib/tests/executor/inputs/lego.kcl index 5d2c3d6c8..684e6bcbb 100644 --- a/src/wasm-lib/tests/executor/inputs/lego.kcl +++ b/src/wasm-lib/tests/executor/inputs/lego.kcl @@ -43,14 +43,14 @@ const peg = startSketchOn(s, "end") -(total_width / 2 - wSegments), -(total_length / 2 - lSegments) ], radius: bumpDiam / 2 }, %) - |> patternLinear2d({ - axis: [1, 0], - instances: 6, - distance: 7 - }, %) - |> patternLinear2d({ - axis: [0, 1], - instances: 10, - distance: 7 - }, %) + |> patternLinear2d( + axis = [1, 0], + instances = 6, + distance = 7 + ) + |> patternLinear2d( + axis = [0, 1], + instances = 10, + distance = 7 + ) |> extrude(length = bumpHeight) diff --git a/src/wasm-lib/tests/executor/inputs/linear_pattern3d_a_pattern.kcl b/src/wasm-lib/tests/executor/inputs/linear_pattern3d_a_pattern.kcl index 2e913a021..6c8b37146 100644 --- a/src/wasm-lib/tests/executor/inputs/linear_pattern3d_a_pattern.kcl +++ b/src/wasm-lib/tests/executor/inputs/linear_pattern3d_a_pattern.kcl @@ -6,14 +6,16 @@ exampleSketch = startSketchOn('XZ') |> close() |> extrude(length = 1) -pattn1 = patternLinear3d({ - axis: [1, 0, 0], - instances: 7, - distance: 6 - }, exampleSketch) +pattn1 = patternLinear3d( + exampleSketch, + axis = [1, 0, 0], + instances = 7, + distance = 6 +) -pattn2 = patternLinear3d({ - axis: [0, 0, 1], - distance: 1, - instances: 7 - }, pattn1) +pattn2 = patternLinear3d( + pattn1, + axis = [0, 0, 1], + distance = 1, + instances = 7 +) diff --git a/src/wasm-lib/tests/executor/inputs/server-rack-heavy.kcl b/src/wasm-lib/tests/executor/inputs/server-rack-heavy.kcl index 909b6f600..163398631 100644 --- a/src/wasm-lib/tests/executor/inputs/server-rack-heavy.kcl +++ b/src/wasm-lib/tests/executor/inputs/server-rack-heavy.kcl @@ -710,11 +710,11 @@ const sketch004fl = startSketchOn(extrude002fl, 'START') ], %, $rectangleSegmentC003fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude004fl = extrude(sketch004fl, length = -thickness) // EIA-310-D standard hole pattern @@ -731,11 +731,11 @@ const sketch005fl = startSketchOn(extrude002fl, 'START') ], %, $rectangleSegmentC004fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude005fl = extrude(sketch005fl, length = -thickness) // EIA-310-D standard hole pattern @@ -755,11 +755,11 @@ const sketch006fl = startSketchOn(extrude002fl, 'START') ], %, $rectangleSegmentC005fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude006fl = extrude(sketch006fl, length = -thickness) // EIA-310-D standard hole pattern @@ -776,11 +776,11 @@ const sketch007fl = startSketchOn(extrude001fl, 'START') ], %, $rectangleSegmentC006fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude007fl = extrude(sketch007fl, length = -thickness) // EIA-310-D standard hole pattern @@ -797,11 +797,11 @@ const sketch008fl = startSketchOn(extrude001fl, 'START') ], %, $rectangleSegmentC007fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude008fl = extrude(sketch008fl, length = -thickness) // EIA-310-D standard hole pattern @@ -821,11 +821,11 @@ const sketch009fl = startSketchOn(extrude001fl, 'START') ], %, $rectangleSegmentC008fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude009fl = extrude(sketch009fl, length = -thickness) // define slots @@ -839,11 +839,11 @@ const sketch010fl = startSketchOn(extrude001fl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010fl = extrude(sketch010fl, length = -thickness) // define slots @@ -877,11 +877,11 @@ const sketch012fl = startSketchOn(extrude001fl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012fl = extrude(sketch012fl, length = -thickness) // FRONT RIGHT VERTICAL RAIL @@ -992,11 +992,11 @@ const sketch004fr = startSketchOn(extrude002fr, 'START') ], %, $rectangleSegmentC003fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude004fr = extrude(sketch004fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1016,11 +1016,11 @@ const sketch005fr = startSketchOn(extrude002fr, 'START') ], %, $rectangleSegmentC004fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude005fr = extrude(sketch005fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1040,11 +1040,11 @@ const sketch006fr = startSketchOn(extrude002fr, 'START') ], %, $rectangleSegmentC005fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude006fr = extrude(sketch006fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1064,11 +1064,11 @@ const sketch007fr = startSketchOn(extrude001fr, 'START') ], %, $rectangleSegmentC006fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude007fr = extrude(sketch007fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1088,11 +1088,11 @@ const sketch008fr = startSketchOn(extrude001fr, 'START') ], %, $rectangleSegmentC007fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude008fr = extrude(sketch008fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1112,11 +1112,11 @@ const sketch009fr = startSketchOn(extrude001fr, 'START') ], %, $rectangleSegmentC008fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude009fr = extrude(sketch009fr, length = -thickness) // define slots @@ -1133,11 +1133,11 @@ const sketch010fr = startSketchOn(extrude001fr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010fr = extrude(sketch010fr, length = -thickness) // define slots @@ -1171,11 +1171,11 @@ const sketch012fr = startSketchOn(extrude001fr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012fr = extrude(sketch012fr, length = -thickness) // RIGHT REAR VERTICAL RAIL @@ -1286,11 +1286,11 @@ const sketch004rr = startSketchOn(extrude002rr, 'START') ], %, $rectangleSegmentC003rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude004rr = extrude(sketch004rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1310,11 +1310,11 @@ const sketch005rr = startSketchOn(extrude002rr, 'START') ], %, $rectangleSegmentC004rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude005rr = extrude(sketch005rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1334,11 +1334,11 @@ const sketch006rr = startSketchOn(extrude002rr, 'START') ], %, $rectangleSegmentC005rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude006rr = extrude(sketch006rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1358,11 +1358,11 @@ const sketch007rr = startSketchOn(extrude001rr, 'START') ], %, $rectangleSegmentC006rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude007rr = extrude(sketch007rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1382,11 +1382,11 @@ const sketch008rr = startSketchOn(extrude001rr, 'START') ], %, $rectangleSegmentC007rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude008rr = extrude(sketch008rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1406,11 +1406,11 @@ const sketch009rr = startSketchOn(extrude001rr, 'START') ], %, $rectangleSegmentC008rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude009rr = extrude(sketch009rr, length = -thickness) // define slots @@ -1427,11 +1427,11 @@ const sketch010rr = startSketchOn(extrude001rr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010rr = extrude(sketch010rr, length = -thickness) // define slots @@ -1465,11 +1465,11 @@ const sketch012rr = startSketchOn(extrude001rr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012rr = extrude(sketch012rr, length = -thickness) // REAR LEFT VETCIAL RAIL @@ -1579,11 +1579,11 @@ const sketch004rl = startSketchOn(extrude002rl, 'START') ], %, $rectangleSegmentC003rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude004rl = extrude(sketch004rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1603,11 +1603,11 @@ const sketch005rl = startSketchOn(extrude002rl, 'START') ], %, $rectangleSegmentC004rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude005rl = extrude(sketch005rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1627,11 +1627,11 @@ const sketch006rl = startSketchOn(extrude002rl, 'START') ], %, $rectangleSegmentC005rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude006rl = extrude(sketch006rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1651,11 +1651,11 @@ const sketch007rl = startSketchOn(extrude001rl, 'START') ], %, $rectangleSegmentC006rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude007rl = extrude(sketch007rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1675,11 +1675,11 @@ const sketch008rl = startSketchOn(extrude001rl, 'START') ], %, $rectangleSegmentC007rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude008rl = extrude(sketch008rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1699,11 +1699,11 @@ const sketch009rl = startSketchOn(extrude001rl, 'START') ], %, $rectangleSegmentC008rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude009rl = extrude(sketch009rl, length = -thickness) // define slots @@ -1720,11 +1720,11 @@ const sketch010rl = startSketchOn(extrude001rl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010rl = extrude(sketch010rl, length = -thickness) // define slots @@ -1758,11 +1758,11 @@ const sketch012rl = startSketchOn(extrude001rl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012rl = extrude(sketch012rl, length = -thickness) // GENERATE SERVER MODELS diff --git a/src/wasm-lib/tests/executor/inputs/server-rack-lite.kcl b/src/wasm-lib/tests/executor/inputs/server-rack-lite.kcl index be802801e..10fb91363 100644 --- a/src/wasm-lib/tests/executor/inputs/server-rack-lite.kcl +++ b/src/wasm-lib/tests/executor/inputs/server-rack-lite.kcl @@ -719,11 +719,11 @@ const sketch010fl = startSketchOn(extrude001fl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010fl = extrude(sketch010fl, length = -thickness) // define slots @@ -757,11 +757,11 @@ const sketch012fl = startSketchOn(extrude001fl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012fl = extrude(sketch012fl, length = -thickness) // FRONT RIGHT VERTICAL RAIL @@ -869,11 +869,11 @@ const sketch010fr = startSketchOn(extrude001fr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010fr = extrude(sketch010fr, length = -thickness) // define slots @@ -907,11 +907,11 @@ const sketch012fr = startSketchOn(extrude001fr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012fr = extrude(sketch012fr, length = -thickness) // RIGHT REAR VERTICAL RAIL @@ -1019,11 +1019,11 @@ const sketch010rr = startSketchOn(extrude001rr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010rr = extrude(sketch010rr, length = -thickness) // define slots @@ -1057,11 +1057,11 @@ const sketch012rr = startSketchOn(extrude001rr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012rr = extrude(sketch012rr, length = -thickness) // REAR LEFT VETCIAL RAIL @@ -1168,11 +1168,11 @@ const sketch010rl = startSketchOn(extrude001rl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010rl = extrude(sketch010rl, length = -thickness) // define slots @@ -1206,11 +1206,11 @@ const sketch012rl = startSketchOn(extrude001rl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012rl = extrude(sketch012rl, length = -thickness) // Define planes so the server can be moved diff --git a/src/wasm-lib/tests/executor/inputs/slow_lego.kcl.tmpl b/src/wasm-lib/tests/executor/inputs/slow_lego.kcl.tmpl index 5a66d0d88..b71125392 100644 --- a/src/wasm-lib/tests/executor/inputs/slow_lego.kcl.tmpl +++ b/src/wasm-lib/tests/executor/inputs/slow_lego.kcl.tmpl @@ -66,16 +66,16 @@ const peg = startSketchOn(s, 'end') -(pitch*(wbumps-1)/2), -(pitch*(lbumps-1)/2) ], radius: bumpDiam / 2 }, %) - |> patternLinear2d({ - axis: [1, 0], - instances: wbumps, - distance: pitch - }, %) - |> patternLinear2d({ - axis: [0, 1], - instances: lbumps, - distance: pitch - }, %) + |> patternLinear2d( + axis = [1, 0], + instances = wbumps, + distance = pitch + ) + |> patternLinear2d( + axis = [0, 1], + instances = lbumps, + distance = pitch + ) |> extrude(bumpHeight, %) // |> patternTransform(int(totalBumps-1), tr, %) diff --git a/src/wasm-lib/tests/executor/main.rs b/src/wasm-lib/tests/executor/main.rs index b9b653e70..9e6f9c26a 100644 --- a/src/wasm-lib/tests/executor/main.rs +++ b/src/wasm-lib/tests/executor/main.rs @@ -348,7 +348,7 @@ async fn kcl_test_patterns_linear_basic_with_math() { distance = 5 part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternLinear2d({axis: [0,1], instances: num, distance: distance - 1}, %) + |> patternLinear2d(axis = [0,1], instances = num, distance = distance - 1) |> extrude(length = 1) "#; @@ -360,7 +360,7 @@ part = startSketchOn('XY') async fn kcl_test_patterns_linear_basic() { let code = r#"part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternLinear2d({axis: [0,1], instances: 13, distance: 4}, %) + |> patternLinear2d(axis = [0,1], instances = 13, distance = 4) |> extrude(length = 1) "#; @@ -377,7 +377,7 @@ async fn kcl_test_patterns_linear_basic_3d() { |> line(end = [0, -1]) |> close() |> extrude(length = 1) - |> patternLinear3d({axis: [1, 0, 1], instances: 4, distance: 6}, %) + |> patternLinear3d(axis = [1, 0, 1], instances = 4, distance = 6) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -388,7 +388,7 @@ async fn kcl_test_patterns_linear_basic_3d() { async fn kcl_test_patterns_linear_basic_negative_distance() { let code = r#"part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternLinear2d({axis: [0,1], instances: 13, distance: -2}, %) + |> patternLinear2d(axis = [0,1], instances = 13, distance = -2) |> extrude(length = 1) "#; @@ -400,7 +400,7 @@ async fn kcl_test_patterns_linear_basic_negative_distance() { async fn kcl_test_patterns_linear_basic_negative_axis() { let code = r#"part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternLinear2d({axis: [0,-1], instances: 13, distance: 2}, %) + |> patternLinear2d(axis = [0,-1], instances = 13, distance = 2) |> extrude(length = 1) "#; @@ -412,7 +412,7 @@ async fn kcl_test_patterns_linear_basic_negative_axis() { async fn kcl_test_patterns_linear_basic_holes() { let code = r#"circles = startSketchOn('XY') |> circle({ center: [5, 5], radius: 1 }, %) - |> patternLinear2d({axis: [1,1], instances: 13, distance: 3}, %) + |> patternLinear2d(axis = [1,1], instances = 13, distance = 3) rectangle = startSketchOn('XY') |> startProfileAt([0, 0], %) @@ -433,7 +433,7 @@ rectangle = startSketchOn('XY') async fn kcl_test_patterns_circular_basic_2d() { let code = r#"part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternCircular2d({center: [20, 20], instances: 13, arcDegrees: 210, rotateDuplicates: true}, %) + |> patternCircular2d(center = [20, 20], instances = 13, arcDegrees = 210, rotateDuplicates = true) |> extrude(length = 1) "#; @@ -450,7 +450,7 @@ async fn kcl_test_patterns_circular_basic_3d() { |> line(end = [0, -1]) |> close() |> extrude(length = 1) - |> patternCircular3d({axis: [0,0, 1], center: [-20, -20, -20], instances: 41, arcDegrees: 360, rotateDuplicates: false}, %) + |> patternCircular3d(axis = [0,0, 1], center = [-20, -20, -20], instances = 41, arcDegrees = 360, rotateDuplicates = false) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -466,7 +466,7 @@ async fn kcl_test_patterns_circular_3d_tilted_axis() { |> line(end = [0, -1]) |> close() |> extrude(length = 1) - |> patternCircular3d({axis: [1,1,0], center: [10, 0, 10], instances: 11, arcDegrees: 360, rotateDuplicates: true}, %) + |> patternCircular3d(axis = [1,1,0], center = [10, 0, 10], instances = 11, arcDegrees = 360, rotateDuplicates = true) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -1417,11 +1417,12 @@ sketch002 = plane001 let extrudes = [sketch001, sketch002] -pattn1 = patternLinear3d({ - axis: [0, 1, 0], - instances: 3, - distance: 20 - }, extrudes) +pattn1 = patternLinear3d( + extrudes, + axis = [0, 1, 0], + instances = 3, + distance = 20 + ) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -1558,17 +1559,17 @@ async fn kcl_test_linear_pattern3d_filleted_sketch() { part001 = cube([0,0], 20) |> close(tag = $line1) |> extrude(length = 20) - |> fillet({ - radius: 10, - tags: [getOppositeEdge(line1)] - }, %) - -pattn1 = patternLinear3d({ - axis: [1, 0, 0], - instances: 4, - distance: 40 - }, part001) + |> fillet({ + radius: 10, + tags: [getOppositeEdge(line1)] + }, %) +pattn1 = patternLinear3d( + part001, + axis = [1, 0, 0], + instances = 4, + distance = 40 +) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -1594,7 +1595,7 @@ part001 = cube([0,0], 20) tags: [getOppositeEdge(line1)] }, %) -pattn2 = patternCircular3d({axis: [0,0, 1], center: [-20, -20, -20], instances: 5, arcDegrees: 360, rotateDuplicates: false}, part001) +pattn2 = patternCircular3d(part001, axis = [0,0, 1], center = [-20, -20, -20], instances = 5, arcDegrees = 360, rotateDuplicates = false) "#; @@ -1621,8 +1622,7 @@ part001 = cube([0,0], 20) tags: [getOppositeEdge(line1)] }, %) -pattn2 = patternCircular3d({axis: [0,0, 1], center: [-20, -20, -20], instances: 5, arcDegrees: 360, rotateDuplicates: false}, part001) - +pattn2 = patternCircular3d(part001, axis = [0,0, 1], center = [-20, -20, -20], instances = 5, arcDegrees = 360, rotateDuplicates = false) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -1748,12 +1748,12 @@ async fn kcl_test_arc_error_same_start_end() { radius: 1.5 }, %) |> close() - |> patternCircular2d({ - arcDegrees: 360, - center: [0, 0], - instances: 6, - rotateDuplicates: true - }, %) + |> patternCircular2d( + arcDegrees = 360, + center = [0, 0], + instances = 6, + rotateDuplicates = true + ) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await;