diff --git a/docs/kcl/index.md b/docs/kcl/index.md index 765b2eb066..da22436467 100644 --- a/docs/kcl/index.md +++ b/docs/kcl/index.md @@ -61,6 +61,7 @@ layout: manual * [`log10`](kcl/log10) * [`log2`](kcl/log2) * [`m`](kcl/m) +* [`map`](kcl/map) * [`max`](kcl/max) * [`min`](kcl/min) * [`mirror2d`](kcl/mirror2d) diff --git a/docs/kcl/map.md b/docs/kcl/map.md new file mode 100644 index 0000000000..019aa041b3 --- /dev/null +++ b/docs/kcl/map.md @@ -0,0 +1,56 @@ +--- +title: "map" +excerpt: "Apply a function to every element of a list." +layout: manual +--- + +Apply a function to every element of a list. + +Given a list like `[a, b, c]`, and a function like `f`, returns `[f(a), f(b), f(c)]` + +```js +map(array: [KclValue], map_fn: FunctionParam) -> [KclValue] +``` + + +### Arguments + +| Name | Type | Description | Required | +|----------|------|-------------|----------| +| `array` | [`[KclValue]`](/docs/kcl/types/KclValue) | | Yes | +| `map_fn` | `FunctionParam` | | Yes | + +### Returns + +[`[KclValue]`](/docs/kcl/types/KclValue) + + +### Examples + +```js +const r = 10 // radius +fn drawCircle = (id) => { + return startSketchOn("XY") + |> circle({ center: [id * 2 * r, 0], radius: r }, %) +} + +// Call `drawCircle`, passing in each element of the array. +// The outputs from each `drawCircle` form a new array, +// which is the return value from `map`. +const circles = map([1, 2, 3], drawCircle) +``` + +![Rendered example of map 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAACGl0lEQVR4Ae3gAZAkSZIkSRKLqpm7R0REZmZmVlVVVVV3d3d3d/fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMdHd3d3dXV1VVVVVmZkZGRIS7m5kKz0xmV3d1d3dPz8zMzMxMYn3Qgx7EVVddddVVV1111VVXXXXVVVddddVVV131fxKVq6666qqrrrrqqquuuuqqq6666qqrrrrq/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/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/V9F5aqrrrrqqqv+D7vmmmsezAOcOXPmwfwbnT179lae6b777ruVq676H+Saa655MA9w5syZB/NvdPbs2Vt5pvvuu+9Wrrrqf5BrrrnmwTzAmTNnHsy/0dmzZ2/lme67775bueqqq6666qr/m6hcddVVV1111f8C11xzzYMBzpw58+BrrrnmwWfOnHkQwDXXXPPga6655sE805kzZx58zTXXPJj/Ivfdd9+tPNPZs2dvve+++24FuO+++249e/bsMwDuu+++W8+ePXvrfffddytXXfUvuOaaax4McObMmQdfc801Dz5z5syDAK655poHA1xzzTUPBjhz5syDr7nmmgfzX+S+++67lWc6e/bsrffdd9+tAPfdd9+tZ8+efQbAfffddyvAP/zDP/w2V131IrjmmmsefObMmQdfc801Dz5z5syDAK655poHA1xzzTUPBrjmmmsecubMmQfxX+S+++67FUCS7rvvvqcD3HfffbcC3HfffbeePXv2Gf/wD//w22fOnHnw2bNnb73vvvtu5aqrrrrqqqv+Z0MPetCDuOqqq6666qr/Ttdcc82Dz5w58+BrrrnmwWfOnHkQwIu/+Iu/NsCLvdiLvTYvwO/+7u9+F/+DveZrvub78Fzuu+++WwH+4R/+4bcB/uEf/uF37rvvvlvPnj1763333XcrV/2fd8011zz4zJkzD77mmmsefObMmQddc801D77mmmsefObMmQdfc801D+b5+N3f/d3v4n+w13zN13wfnst99913K8DZs2dvve+++2697777bj179uwz7rvvvlvPnj1763333XcrV/2fd8011zz4zJkzD36xF3ux1wK45pprHnzNNdc8+MVe7MVem+fjd3/3d7+L/8Fe8zVf8314Pu67775bAc6ePXvrfffdd+t999136z/8wz/8DsDZs2dvve+++27lqquuuuqqq/77oAc96EFcddVVV1111X+2a6655sFnzpx58DXXXPPgM2fOPOjFX/zFXxvgxV7sxV6b5/K7v/u738X/E6/5mq/5PjzTfffddyvAP/zDP/z2P/zDP/zOfffdd+vZs2dvve+++27lqv91rrnmmge/2Iu92GufOXPmQddcc82Dr7nmmge/2Iu92GvzXH73d3/3u/h/4jVf8zXfh2e67777bgX4h3/4h98G+Id/+Iffue+++279h3/4h9/mqv91rrnmmgefOXPmwS/2Yi/2Wtdcc81Drrnmmge92Iu92GvzAL/7u7/7Xfw/8Zqv+ZrvwwPcd999t0rSfffd9/T77rvv1n/4h3/4nfvuu+/Ws2fP3nrffffdylVXXXXVVVf950IPetCDuOqqq6666qr/KNdcc82Dz5w58+AXe7EXey2AF3/xF3/tF3uxF3ttHuB3f/d3v4urXqjXfM3XfB+e6b777rv17Nmzt9533323/sM//MPv/MM//MNv33fffbdy1f8I11xzzYPPnDnz4Bd7sRd7rWuuuebBL/ZiL/ba11xzzYN5pt/93d/9Lq76F73ma77m+/BM9913363/8A//8Nv/8A//8Dv33Xffrf/wD//w21z1P8Y111zz4DNnzjz4xV7sxV7rxV/8xV/nxV7sxV6LB/jd3/3d7+KqF+o1X/M134dnuu+++249e/bsrffdd9+t//AP//A79913363/8A//8NtcddVVV1111X8c9KAHPYirrrrqqquu+re45pprHvxiL/Zir33mzJkHvfiLv/hrv9iLvdhr8wC/+7u/+11c9R/qNV/zNd8H4L777rv1H/7hH377H/7hH37nvvvuu/Uf/uEffpur/tNdc801DwZ47dd+7fd68Rd/8dd+sRd7sdfmAX73d3/3u7jqP8xrvuZrvg/PdN999936D//wD79933333foP//APv/MP//APv81V/yWuueaaB7/2a7/2ewG80zu902fzTL/7u7/7XVz1H+o1X/M134dnuu+++249e/bsrffdd9+t//AP//A79913363/8A//8NtcddVVV1111b8eetCDHsRVV1111VVX/UuuueaaB585c+bBL/ZiL/ZaL/7iL/7aL/ZiL/baPNPv/u7vfhdX/bd4zdd8zfcBuO+++279h3/4h9/+h3/4h9/5rd/6re/mqv8Q11xzzYPPnDnz4Bd7sRd7rRd/8Rd/7Rd7sRd7bZ7pd3/3d7+Lq/7LveZrvub73HfffbfyTP/wD//w2//wD//wO7/1W7/13Vz1H+Kaa6558Gu/9mu/F8A7vdM7fTbP9Lu/+7vfxVX/LV7zNV/zfQDuu+++W8+ePXvrfffdd+tv/dZvfc8//MM//DZXXXXVVVdd9S9DD3rQg7jqqquuuuqq53bNNdc8+LVf+7XfC+DFX/zFX/vFXuzFXptn+t3f/d3v4qr/kV7zNV/zfQDuu+++W3/rt37ru//hH/7hd/7hH/7ht7nqRfZiL/Zir/1iL/Zir/XiL/7ir/1iL/Zirw3wu7/7u9/FVf9jveZrvub7ANx33323/sM//MNv/9Zv/db3/MM//MNvc9WL7Jprrnnwa7/2a7/Xi7/4i7/2i73Yi702wO/+7u9+F1f9j/Sar/ma78Mz3Xfffbf+wz/8w2//1m/91vcA/MM//MNvc9VVV1111VXPCT3oQQ/iqquuuuqqq6655poHv/Zrv/Z7AbzTO73TZ/NMv/u7v/tdXPW/0qMf/ejXueaaax5833333fpbv/Vb3/0P//APv/MP//APv81Vz+Gaa6558Gu/9mu/14u/+Iu/9ou92Iu9NsDv/u7vfhdX/a/1mq/5mu9z33333Xr27Nlb//7v//63/+Ef/uF3/uEf/uG3ueo5XHPNNQ9+7dd+7fd63dd93fc5c+bMgwB+93d/97u46n+l13zN13wfgPvuu+/Wf/iHf/jtf/iHf/id++6779Z/+Id/+G2uuuqqq676/w496EEP4qqrrrrqqv9/rrnmmge/2Iu92GufOXPmQe/0Tu/02TzT7/7u734XV/2f85qv+Zrvc999990K8Fu/9Vvf/aM/+qOfw/9j11xzzYNf+7Vf+71e53Ve572vueaaBwP87u/+7ndx1f85r/mar/k+APfdd9+tv/3bv/09f//3f//b//AP//Db/D91zTXXPPi1X/u13+t1Xud13vuaa655MMDv/u7vfhdX/Z/zmq/5mu8DcPbs2Wf8/d///W/9wz/8w+/81m/91ndz1VVXXXXV/0foQQ96EFddddVVV/3/cM011zz4xV7sxV77dV7ndd7rxV7sxV4b4Hd/93e/i6v+X3nN13zN97nvvvtu/Yd/+Iff/q3f+q3v+Yd/+Iff5v+Ba6655sGv/dqv/V6v8zqv897XXHPNg++7775bn/CEJ/wWV/2/8Zqv+ZrvA3Dffffd+lu/9Vvf/Q//8A+/8w//8A+/zf8D11xzzYNf+7Vf+73e6Z3e6bMBfvd3f/e7uOr/ldd8zdd8n/vuu+9WgN/+7d/+nr//+7//7X/4h3/4ba666qqrrvr/AD3oQQ/iqquuuuqq/7uuueaaB7/2a7/2e73TO73TZ/NMv/u7v/tdXHUV8Jqv+Zrvc9999936oz/6o5/zW7/1W9/N/zHXXHPNg1/7tV/7vV7ndV7nva+55poHA/zu7/7ud3HV/3uv+Zqv+T4AZ8+efcZv/uZvftdv//Zvf8999913K//HvM7rvM57v+M7vuNnXXPNNQ/+3d/93e/iqquA13zN13wfgPvuu+/Wf/iHf/jt3/qt3/qef/iHf/htrrrqqquu+r8KPehBD+Kqq676X0Ywvs3iU6d32Pgsqvr46+FXuh89+ux48vTHPJNPxc3jO258Vnvd+fsBlF9efkP3o0efrX2f46r/817sxV7stV/sxV7std7pnd7pswF+93d/97u46qoX4jVf8zXf57777rv1t37rt777R3/0Rz+H/+Ve53Ve571f7MVe7LVe53Ve570Bfvd3f/e7uOqqF+A1X/M13wfgH/7hH377R37kRz7nH/7hH36b/+Xe8R3f8bNe93Vf933OnDnzoN/93d/9Lq666oV4zdd8zfc5e/bsM/7+7//+t/7hH/7hd37rt37ru7nqqquuuur/EvSgBz2Iq6666n8Xb+j49I4bnzW92eKjAcrvrL6v/tjR58S9+VSeKR9aX256x43Pai/XvwVJqz9+9Lndjy8/Hzu56v+ka6655sGv/dqv/V7v9E7v9NkAv/u7v/tdXHXVv9JrvuZrvs99991362/91m9994/+6I9+Dv+LXHPNNQ9+7dd+7fd6p3d6p88G+N3f/d3v4qqr/pVe8zVf833Onj37jN/8zd/8rt/+7d/+nvvuu+9W/hd5ndd5nfd+x3d8x8+65pprHvy7v/u738VVV/0rveZrvub73Hfffbf+wz/8w2//wz/8w+/81m/91ndz1VVXXXXV/3boQQ96EFddddX/Lnldefj0jhuf3V5j9m4A9eeWX1l/7OiztfQ+z9RepnuT6R02Pisf0b2SLuW99UePPrv+6uqbuer/lGuuuebBr/3ar/1e7/RO7/TZAL/7u7/7XVx11X+A13zN13yff/iHf/jtH/mRH/mcf/iHf/ht/ge75pprHvyO7/iOn/U6r/M67w3wu7/7u9/FVVf9O73ma77m+9x33323/sM//MNv/9Zv/db3/MM//MNv8z/YNddc8+AP//AP/64Xe7EXe+3f/d3f/S6uuuo/wGu+5mu+z3333XfrP/zDP/z2b/3Wb33PP/zDP/w2V1111VVX/W+EHvSgB3HVVVf975KPrK8yvuPGZ+dL9W/I4FX3Y0efXX96+SU8wPRas/ea3nHjs3xNeYhua3/X/ejhZ5c/GX6Sq/7Xu+aaax782q/92u/1Oq/zOu99zTXXPPh3f/d3v4urrvpP8pqv+Zrv81u/9Vvf/aM/+qOfc999993K/yDXXHPNgz/8wz/8u17sxV7stX/3d3/3u7jqqv8kr/mar/k+Z8+efcaP/MiPfPZv/dZvfTf/g1xzzTUPfu3Xfu33eqd3eqfP/t3f/d3v4qqr/pO85mu+5vvcd999t/72b//29/zWb/3Wd9933323ctVVV1111f8W6EEPehBXXXXV/y7t5fu3nN5x47PzIfVldK7dVn/06HPqb62/kweY3nLxCeM7bnwWM23G3w2/UX/06LPLE6bf56r/ta655poHv+M7vuNnvc7rvM57A/zu7/7ud3HVVf8FXvM1X/N97rvvvlt/67d+67t/9Ed/9HP4b/ZiL/Zir/3hH/7h33XNNdc8+Hd/93e/i6uu+i/ymq/5mu9z33333fqjP/qjn/Nbv/Vb381/sxd7sRd77c/93M/9LYDf/d3f/S6uuuq/wGu+5mu+z3333XfrP/zDP/z2P/zDP/zOb/3Wb303V1111VVX/U+HHvSgB3HVVVf97zK93vz9pnfY+Gyfipv01Okvuh87+uzyF8PP80yeaWN6h8VnT2+18QkA5ffXP9T92NFn6672JK76X+Waa6558Gu/9mu/1+u8zuu89zXXXPPg3/3d3/0urrrqv8lrvuZrvs+P/MiPfPaP/uiPfg7/Da655poHf/iHf/h3vdiLvdhr/+7v/u53cdVV/01e8zVf833+4R/+4bd/5Ed+5HP+4R/+4bf5b/CO7/iOn/VO7/ROn/27v/u738VVV/03ec3XfM33ue+++2797d/+7e/5kR/5kc/mqquuuuqq/6nQgx70IK666qr/Xaa3WXzy+A4bn0WnefzV8Evdjx59djxl+lOeydfEQ8Z32Pis9trz9wKov7D8mvpjR5+tQ+9y1f8K11xzzYNf+7Vf+73e6Z3e6bMBfvd3f/e7uOqq/wFe8zVf833uu+++Wz/rsz7rde67775b+S9wzTXXPPjDP/zDv+vFXuzFXvt3f/d3v4urrvof4jVf8zXf57d+67e++0d/9Ec/57777ruV/wLXXHPNgz/8wz/8u17sxV7stX/3d3/3u7jqqv8BXvM1X/N97rvvvlv/4R/+4bd/67d+63v+4R/+4be56qqrrrrqfxLK8ePHueqqq/738Fxb+bL9m+ZjutcEiCeNf1T+cvhFHXqXZ/KD6ku2V5i9la8pD2H0EH85/GL5u/HXuOp/vGuuuebB7/M+7/NVH/7hH/7dFy5cePoznvGMv37GM57x11x11f8Qz3jGM/763Llzt77DO7zDZ996661/c/bs2Vv5T/SO7/iOn/VJn/RJP/2EJzzht57xjGf8NVdd9T/IM57xjL+OCN7hHd7hszc3N4//wz/8w+/wn+iaa6558Dd90zc9/QlPeMJvPeMZz/hrrrrqf4hnPOMZf33u3LlbI4L3fu/3/uprrrnmwYeHh5fOnj17K1ddddVVV/1PQDl+/DhXXXXV/yLH47r2Mv2b+CH1ZQDK48ffib8ef0UDSwCC0l5p9nbtVWfvRK+5Lvme8pfjL8TTpr/kqv+xXuzFXuy1P/dzP/e33umd3umzb7/99r96xjOe8ddcddX/YOfOnbv1Td/0TT96c3Pz+D/8wz/8Dv/BXuzFXuy1P/dzP/e3XumVXumtf/d3f/e7uOqq/8HOnTt365u92Zt9zOu8zuu899bW1ol/+Id/+G3+g73Yi73Ya3/FV3zFX/3u7/7ud3HVVf+DPeMZz/jriOC93/u9v/p1Xud13vvo6OjSrbfe+tdcddVVV13134ly/Phxrrrqqv89fDyuy5fs38C31BcHiKe1v4jHT7+ntQ8B2kt0r9fecP4hvqE8EiDuaU8tfzn8QtzVnshV/+O82Iu92Gt/7ud+7m+9+Zu/+Uf/xV/8xU894xnP+Guuuup/iXPnzt36Cq/wCm+zubl5/B/+4R9+h/8A11xzzYPf533e56ve933f96v/4i/+4qee8Yxn/DVXXfW/wDOe8Yy/Pnfu3K1v+qZv+tEA//AP//A7/Ad5sRd7sdf+3M/93N/63d/93e/iqqv+l3jGM57x1+fOnbv1Hd7hHT77dV7ndd776Ojo0q233vrXXHXVVVdd9d+Bcvz4ca666qr/PTzXdj66e3U/pL40gHvNdTHv1sW8O1+qf8P2WvP39PXl4cy0SVHVM6a/LX85/IIu5B1c9T/Gi73Yi732537u5/7Wm7/5m3/0X/zFX/zUM57xjL/mqqv+Fzp37tytr/AKr/A2R0dHl2699da/5t/hxV7sxV77K77iK/7qIQ95yEv/7u/+7ndx1VX/Cz3jGc/46zd7szf7mNd5ndd576Ojo0u33nrrX/Pv8GIv9mKv/bmf+7m/9bu/+7vfxVVX/S/0jGc846/PnTt36zu8wzt89uu+7uu+z9Of/vS/Pnv27K1cddVVV131Xwk96EEP4qqrrvpfZKaN6e03PmN8y8UnEBSeS/mz4WcB2iv0bwlQfnf9fd2PHn227m1P46r/dtdcc82DP/zDP/y7zpw58+AnPOEJv8VVV/0f8ehHP/p1vv7rv/59/uEf/uG3+Td4x3d8x896p3d6p8/+3d/93e/iqqv+j3j0ox/9Or/1W7/13T/6oz/6OfwbvNiLvdhrv+M7vuNnXbhw4elcddX/Ea/5mq/5Pvfdd9+tX//1X/8+//AP//DbXHXVVVdd9V+Bcvz4ca666qr/RRqjK72vL4/yqXIjDxCPH3+v/Pn4cz4ZN/rm+mIA5W/HX4+/HH5BEwNX/be55pprHvxmb/ZmH/VJn/RJP/2EJzzht86dO3crV131f8i5c+dufdM3fdOP/oVf+IWv4V/hmmuuefAnfdIn/dTrvM7rvPfv/u7vfhdXXfV/yLlz5259szd7s4958Rd/8df+rd/6re/hX+kjPuIjvuvChQtP56qr/g95xjOe8dfnzp279b3f+72/+pprrnnwrbfe+jeHh4e7XHXVVVdd9Z+Jcvz4ca666qr/XXRfPl1n81a24iQ7OqOV98vvr3+4+9GjzwFavuLsbXwybuDIl8qfDz9bHj/+Llf9t3nHd3zHz/qkT/qkn37xF3/x1/7d3/3d7+Kqq/6PeuxjH/s611xzzYP/9E//9Gd4EVxzzTUP/vAP//DverEXe7HX/t3f/d3v4qqr/g96xjOe8dev8Aqv8Dav8zqv895/9md/9jOHh4e7vAg+/MM//Lte8RVf8a2f8Yxn/DVXXfV/0DOe8Yy/fu3Xfu33eaVXeqW32djYOPYP//APv8NVV1111VX/WdCDHvQgrrrqqv9dfDyuA9Bu3sMDeKHt6W0WnzK9xeJjqZrpadNfdD969DnlL4af46r/ctdcc82DP+dzPue3rrnmmgf/7u/+7ndx1VX/D7zma77m+3zmZ37m6/zDP/zDb/NCXHPNNQ/+pm/6pqf/7u/+7ndx1VX/Tzz60Y9+nc/6rM96nfvuu+9WXogXe7EXe+3P/dzP/a3f/d3f/S6uuur/gdd8zdd8n/vuu+/Wr//6r3+ff/iHf/htrrrqqquu+o9GOX78OFddddX/Hu3R9dXH99n8mvaas3dnZM2lvI9Q+Jb6Eu2tFp/QXmv+XixiG+Py58PP1j9Y/6BWPuCq/1Lv+I7v+Fmf9Emf9NN/8Rd/8VPPeMYz/pqrrvp/4hnPeMZfv+mbvulH/8Iv/MLX8AK82Iu92Gt/xVd8xV/97u/+7ndx1VX/j5w7d+7Wd3iHd/jsW2+99W/Onj17Ky/AO73TO33W7bff/ldcddX/E894xjP++ty5c7e+93u/91cD/MM//MPvcNVVV1111X8k9KAHPYirrrrqf4d8UH3J6R03Pru9Yv82/Av0pPGPux87+pzy1+Mvc9V/mRd7sRd77Q//8A//rmuuuebBv/u7v/tdXHXV/0Ov+Zqv+T6f+Zmf+Tr/8A//8Ns8lxd7sRd77c/93M/9rd/93d/9Lq666v+pRz/60a/zDd/wDe/z93//97/Nc3md13md9/7wD//w7/rd3/3d7+Kqq/4fes3XfM33OXv27DO+7uu+7r3/4R/+4be56qqrrrrqPwJ60IMexFVXXfU/l8/Eg31NeXB7bPda+ZLd6+eju1enMVLoeH6M4ynjn9YfP/rc8lfjL2HMVf8l3vEd3/Gz3umd3umzf/d3f/e7uOqq/+dOnTr1kM/8zM98HR7gmmuuefA3fdM3Pf13f/d3v4urrvp/7jGPeczrfuZnfuZr33fffbfyAB/+4R/+XaUUc9VV/889+tGPfp3f+q3f+u4f/dEf/Ryuuuqqq67690IPetCDuOqqq/5nGj5s67vaa8/fm+dSf2P17Rjno7tX9am42ZWeA1+MZ0x/W/5k+MnyF8PP6WLezVX/Ja655poHf/iHf/h3vdiLvdhr/+7v/u53cdVVV/Gar/ma7/OZn/mZr/MP//APvw1wzTXXPPjDP/zDv+v8+fNP56qrrrrs0Y9+9Ot81md91uvcd999t/JMP/ETP+Hf/d3f/S6uuuoqXvM1X/N97rvvvls/67M+63Xuu+++W7nqqquuuurfispVV131P9LwYVvf1V57/t48H/Unjr5AZ/NWrvpv92Iv9mKv/bmf+7m/9bu/+7vf9bu/+7tP56qrrnqWa6655sH/8A//AMCHf/iHf9eLvdiLvfbv/u7vPp2rrrrqsmuuuebBH/7hH/5dn/mZn/k6AK/zOq/zXvfdd9+tXHXVVZf97u/+7ncBfM7nfM5v/fZv//b3/MiP/Mhnc9VVV1111b8FwVVXXfW/js7mrfw3egVmr/7Defq3ntBuOPqtdu2TXoL+5Ximt/PGe/56u/ZxT2w3LL8vT//Kace1/B/1ju/4jp/1uZ/7ub/1u7/7u9/FVVdd9Rx+93d/97te53Ve570A3vEd3/GzXuzFXuy1f/d3f/e7uOqqq57ld3/3d7/rxV7sxV77Hd/xHT8L4MVe7MVe+wlPeMJvcdVVVz2HJzzhCb/1ju/4jp/1ju/4jp/FVVddddVV/xaU48ePc9VVV/3PoyNfaq89f2+eS/nt1XeXPxt+hv8GAn2ktz/jK/LE99xMfUhF3Qni1Gt6/obfGQdf8265+cFf4hPffpI4U1F9EPVhN7jc8oux+nH+j/nwD//w73rzN3/zj/7d3/3d7+Kqq656vh70oAe9zK233vo3r/u6r/veT3jCE36Lq6666nk84xnP+OtXeIVXeJtbb731b978zd/8o8+dO3crV1111fN4xjOe8ddv9mZv9jEA//AP//A7XHXVVVdd9a+BHvSgB3HVVVf9z9Nee/bew4dtfxfPZfbZl14n/mH8bf6LLdDGl7cT3/1mLN6B5+PN476X+748/asniFM8QLPbS9e7T+3jS/wf8bmf+7m/9WIv9mKv/bu/+7vfxVVXXfUCnTp16iEA58+ffzpXXXXVC/XoRz/6da655poH/+7v/u53cdVVV71Ar/mar/k+9913360f8iEf8hCuuuqqq656URFcddVV/+O015699/Bh298V/zD+9vxDLzyk/4b996k/evTZ8w+98JD4h/G3+W/wPXn6l96MxTsAHOHDz4pLH/E12vtcnumdvPl+x4gTHxkX3vWlyt0nn6bpiQBFKje6PIj/Iz73cz/3t17sxV7stX/3d3/3u7jqqqteqBd7sRd77Rd7sRd7ba666qp/0TXXXPNgrrrqqn/R7/7u737XNddc8+Bv+qZvejpXXXXVVVe9qAiuuuqq/xZ933Prrbf61ltv9a233upbb73Vx48fV3vt2XsPH7b9XfEP42/PPvvS6+hs3lp+e/3d3Y8dfY7O5q38N/kRHX4HwJ9o+J03Lve95Pfo4Ovvpd3FM72zN9//B3T4zT+r5Q9dIi/+BcMf8kw7Ksf4P+BzP/dzf+vFXuzFXvt3f/d3v4urrrrqRfK7v/u738VVV131L/rd3/3d7+Kqq656kfzu7/7ud11zzTUP/uZv/uZbueqqq6666kVBcNVVV/2X+9Iv/dL3edKTnmRJSEISkvjrv/7r/JGv+8GPin8Yf3v22Zdeh/9BfkJH3/s+cf7N3jnOvs5tTE8DmCvmPFMH/Q/r8Nt5pqdoevyvs/y5H9DhNz+D6an8L/e5n/u5v/ViL/Zir/27v/u738VVV1111VVXXXXVVf+tfvd3f/e7zpw586Bv+qZvejpXXXXVVVf9S9CDHvQgrrrqqv86tVae8pSnWBIAx48fvzSfz8d77rnnNIBtXuEVXqGcPXs2+Tf4yvv4rWsbD763cOuvbPI9v7LJd/Of5FPz2Jd9oLc+HuASefGly92nDOb/mM/93M/9rRd7sRd77d/93d/9Lq666qoX2Xw+31qtVgdcddVVL5L5fL61Wq0OuOqqq15kr/mar/k+v/Vbv/XdX//1X/8+XHXVVVdd9YJQueqqq/5LPeUpT7EkAGwDHOOZJCEJ2+3BD36w+Fd6o0Pe+6XWvDbAdRMPfqk1r/2JF/iueyq3/soG3/03c37nb2b8Nv9BXpzuZXmmJzL+vcH8H/OO7/iOn/ViL/Zir/27v/u738VVV131r7JarQ646qqrXmSr1erg2LFj1126dOkerrrqqhfJ7/7u737X67zO67zPfffdd+uP/uiPfg5XXXXVVVc9P1Suuuqq/xZd141AxwM89rGPvf1xj3vczQBfeR+/xb/StY0H83xcN/Hg99rjs9mDeyq3/soG3/03c37nb2b8Ni+CT89jX3ED5ZYlPvy4uPjeANV0L+H+5Xime5R38ABv5Pnb/LGG375EXuR/qRd7sRd77Xd6p3f67N/93d/9Lq666qp/lWuvvfbh995771O46qqrrrrqqv9kf/qnf/pj7/RO7/TZZ8+efcZv/dZvfTdXXXXVVVc9N4Krrrrq/6V7C7fyInp/b33sm3rx9i9D/8o805uz8Y5ztOCZ1ngFsEMc/+o88f3fkqd+8ivbie8ViP+Frrnmmgd/7ud+7m/9zd/8zS9x1VVXXXXVVVddddX/WKvV6uBP//RPf+wd3/EdP+uaa655MFddddVVVz039KAHPYirrrrqv86tt95qSQDY5oEkAWCbBz/4weJf6aXWvPZX3sdv8Vzuqdz6Kxt8969u8j33VG7lX+kJ7YajOVpMML5+ufexx4gT395O/ewv6ujH38tbHw7w+6x//Ztj/0u+zCe+83qXmwHupD3jLeK+V7igPMv/Mp/7uZ/7W9M0LS9dunQPV1111b/afD7fWq1WB1x11VX/KvP5fGu1Wh1w1VVX/atde+21Dz958uQtH/zBH/xgrrrqqquueiCCq6666r/Uwx/+cNkGQBInTpy4dP3115+TBIBtXuEVXqHwb/A3M377b2b8NsA9lVu/Z4fPfr2b0btdz0O+9xifc0/lVv4NbmN6GkCF7rfbtU/+mXbmT88Q1/2wjr79Inke4NWZvf735+lfu97lZoCnMj3h7cvZV7+gPMv/Mq/zOq/z3i/2Yi/22pcuXbqHq6666t9ktVodcNVVV/2rrVarg2PHjl3HVVdd9a927733PuXMmTMPep3XeZ335qqrrrrqqgciuOqqq/5LTdPEj/7oj76vbQB2d3eP3XPPPacBbPPHf/zHX3327Nnk3+hLT/I+r3czerfrecj3HuNz+A/w43H03TyXn9TR9z1e49/8ipY/xXP5G41/+g5x9jXvpt3B/0Lv+I7v+Fm/+7u/+11cddVV/yav+Zqv+T5cddVV/2Yv9VIv9SZcddVV/yZ/+qd/+mPv+I7v+FlcddVVV131QARXXXXVf7lP/MRP/K5HPvKRso1tbGObl37pl453fud3/hj+He6p3Mp/sO/k4Gt+WIfffoQP71a7/Rti/ws/OXY/AODLtffpf8D6Nwa8vpXpKV8ce5/0drrv1S8oz/K/0Du+4zt+1jXXXPNgrrrqqquuuuqqq676X2e1Wh1cc801D/7wD//w7+Kqq6666qr7oQc96EFcddVVV111xU/8xE/4d3/3d7+Lq6666t/kNV/zNd8H4Hd/93e/i6uuuurf5DVf8zXfB+B3f/d3v4urrrrq3+TRj37063zIh3zIQ7jqqquuugqA4Kqrrrrqqste53Ve57256qqr/l3+4R/+4be56qqr/t3+4R/+4be56qqr/s2uueaaB7/O67zOe3PVVVdddRUAwVVXXXXVVZe9zuu8znv97u/+7ndx1VVX/Zu85mu+5vv8yI/8yOf8wz/8w29z1VVX/bv8yI/8yOe85mu+5vtw1VVX/Zv87u/+7ne9zuu8zntx1VVXXXUVAMFVV1111VWXvdiLvdhrc9VVV/2bvOZrvub7/NZv/dZ3/8M//MNvc9VVV/27/NZv/dZ3/8M//MNv/8iP/Mhnv+Zrvub7cNVVV/2bnDlz5sHXXHPNg7nqqquuuorgqquuuuoqXud1Xue9ueqqq/7N7rvvvlu//uu//n0A/v7v//63X/M1X/N9uOqqq/7VXvM1X/N97rvvvlsBfvu3f/t7/v7v//63ueqqq/5NrrnmmgefOXPmwVx11VVXXUVw1VVXXXUVL/ZiL/Zav/u7v/tdXHXVVf9qr/mar/k+X//1X/8+PNNv//Zvfw9XXXXVv9k//MM//A7Afffdd+vXf/3Xv/drvuZrvg9XXXXVv9rv/u7vfteLvdiLvRZXXXXVVVcRXHXVVVddxTXXXPNgrrrqqn+113zN13yfD/mQD3nIP/zDP/w2z3Tffffd+g//8A+/zVVXXfVv8g//8A+/zTOdPXv2GZ/5mZ/5Oq/5mq/5Plx11VX/ai/+4i/+2lx11VVXXUVw1VVXXXUVZ86ceTBXXXXVv8prvuZrvs/Xf/3Xv8999913K8/l7//+73/7NV/zNd+Hq6666kX2mq/5mu/zW7/1W9/Nc/mHf/iH3/6RH/mRz370ox/9Olx11VX/KmfOnHkwV1111VVXEVx11VVXXXXVVVf9K73ma77m+/zIj/zIZ//Wb/3Wd/N8/PZv//b3cNVVV/2r3Hfffbf+6I/+6OfwfPzoj/7o5/zWb/3Wd7/ma77m+3DVVVddddVVV131r0Nw1VVXXXUV11xzzYO56qqrXiSv+Zqv+T4/8iM/8tk/+qM/+jm8APfdd9+tP/IjP/LZr/mar/k+XHXVVS+Sf/iHf/id++6771ZegB/90R/9nB/5kR/57Nd8zdd8H6666qqrrrrqqqtedARXXXXVVVdx33333cpVV131L3rN13zN9/n6r//69/nRH/3Rz+Ff8Nu//dvfw1VXXfUiec3XfM33+dEf/dHP5l/woz/6o5/zIz/yI5/9mq/5mu/DVVddddVVV1111YuG4KqrrrrqKs6ePXsrV1111Qv1mq/5mu/z9V//9e/zW7/1W9/Ni+C+++679eu//uvf5zVf8zXfh6uuuuoFes3XfM33+ZEf+ZHPvu+++27lRfCjP/qjn/MjP/Ijn/2ar/ma78NVV131Qp09e/ZWrrrqqquuohw/fpyrrrrqqv/vXuzFXuy1I4Krrrrq+XvN13zN9/nMz/zM1/nTP/3Tn+Zf4ejoaPchD3nISy+Xy12uuuqq5+vg4ODS13/9178P/wr/8A//8Dv/8A//8Dvv/d7v/dXPeMYz/pqrrrrq+Xra0572N//wD//wO1x11VVX/f9GcNVVV111Ff/wD//wO6/5mq/5Plx11VXP4TVf8zXf59GPfvTrfOZnfubr/MM//MNv869033333fr1X//17/Oar/ma78NVV131PF7zNV/zfX7kR37kc/g3+Id/+Iff/pAP+ZCHPPrRj36d13zN13wfrrrqqufwmq/5mu9z9uzZZ3DVVVdddRXBVVddddVV/MM//MNvc9VVVz2H13zN13yff/iHf/jtD/mQD3nIP/zDP/w2/0b33XffrV//9V//Pq/5mq/5Plx11VXP8pqv+Zrv85mf+Zmv8w//8A+/zb/Rfffdd+tnfdZnvc6P/MiPfPZrvuZrvg9XXXXVc/iHf/iH3+aqq6666irK8ePHueqqq676/+7w8HD3xV/8xV97uVzuctVVV/Gar/ma7/MjP/Ijn/31X//178N/gFtvvfWvAd7szd7sY57xjGf8NVdd9f/ca77ma77Pj/zIj3z2b//2b38P/06Hh4e7//AP//A7AG/2Zm/2Mc94xjP+mquuuoqDg4NLP//zP/81XHXVVVddRTl+/DhXXXXVVVddpnd4h3f47Gc84xl/zVVX/T/1mq/5mu+zWCxOfMmXfMnb/PZv//b38B/oH/7hH34H4M3e7M0+5hnPeMZfc9VV/0+95mu+5vv8wz/8w29//dd//fvwH+gf/uEffue3f/u3v+e1X/u13/sVXuEV3uYZz3jGX3PVVf9PveZrvub7/OiP/ujn3HrrrX/NVVddddVVlOPHj3PVVVdddRUcHR3tvuIrvuJbnzt37lauuur/odd8zdd8nx/5kR/57C/90i99m7Nnz97Kf4KzZ88+4/DwcPfN3uzNPuYZz3jGX3PVVf/PvOZrvub7/NZv/dZ3f8mXfMnb8J/g8PBw9x/+4R9+5/DwcPfN3uzNPuYZz3jGX3PVVf8PPehBD3qZL/mSL3kbrrrqqquuAqAcP36cq6666qqr4PDwcPfP/uzPfubDPuzDvvsZz3jGX3PVVf9PvOZrvub7LBaLE1/yJV/yNr/927/9PfwnOjw83D179uwzDg8Pd9/szd7sY57xjGf8NVdd9f/Ea77ma77PP/zDP/z2l3zJl7wN/4kODw93/+Ef/uF3fuu3fuu73+Ed3uFzHvvYx77OM57xjL/mqqv+n3jN13zN9/n6r//697n11lv/mquuuuqqqwAox48f56qrrrrqqis2NzePP+QhD3np5XK5y1VX/R/3mq/5mu/zoAc96GV+5Ed+5LO/9Eu/9G3Onj17K/8FDg8Pd8+ePfuMw8PD3Td7szf7mGc84xl/zVVX/R/36Ec/+nX+9E//9Ke/5Eu+5G34L3J0dHTpz/7sz37m8PBw983e7M0+5hnPeMZfc9VV/w8cHBxc+q7v+q6P4aqrrrrqqvtRjh8/zlVXXXXVVVccHh7u/sM//MPvfNiHfdh3P+MZz/hrrrrq/6jXfM3XfJ/f+q3f+u6P//iPf5l/+Id/+B3+ix0eHu7+wz/8w+8AvNmbvdnHPOMZz/hrrrrq/6jXfM3XfJ/v+q7v+pgf/dEf/Rz+ix0eHu7+wz/8w+/89m//9vfY1ju8wzt89jOe8Yy/5qqr/o96zdd8zff5+q//+vc5e/bsrVx11VVXXXU/9KAHPYirrrrqqque0+u8zuu894d/+Id/1+/+7u9+F1dd9X/Ia77ma77PP/zDP/z2j/zIj3zOP/zDP/w2/wNcc801D/6cz/mc33rCE57wW1x11f8xp06desiP/MiPfM4//MM//Db/A5w5c+ZBH/ERH/HdL/ZiL/bav/u7v/tdXHXV/yGv+Zqv+T6f+Zmf+Tr/8A//8NtcddVVV131QJTjx49z1VVXXXXVc7r11lv/GuDN3uzNPuYZz3jGX3PVVf/LveZrvub7LBaLE9/1Xd/1Md/1Xd/1MWfPnr2V/yEODw93/+zP/uxnXvu1X/u9X+EVXuFtnvGMZ/w1V131v9xrvuZrvs/BwcGlz/zMz3yds2fP3sr/EEdHR5d+67d+63vOnj37jNd6rdd678c+9rGv84xnPOOvueqq/+Ve8zVf831+67d+67t/4Rd+4Wu46qqrrrrquVGOHz/OVVddddVVz+vs2bPPODw83H2zN3uzj3nGM57x11x11f9Cr/mar/k+i8XixM///M9/9Zd+6Ze+za233vrX/A90eHi4+w//8A+/c3h4uPtmb/ZmH/OMZzzjr7nqqv+lXvM1X/N9fuRHfuSzv/7rv/59+B/q1ltv/es/+7M/+5lbb731b17rtV7rvR/72Me+zjOe8Yy/5qqr/hd6zdd8zff5h3/4h9/+ki/5krfhqquuuuqq5wc96EEP4qqrrrrqqufvmmuuefCLvdiLvfaHf/iHf9fv/u7vfhdXXfW/xGu+5mu+z3333Xfrb/3Wb333j/7oj34O/4tcc801D/7wD//w73qxF3ux1/7d3/3d7+Kqq/6XeM3XfM33ue+++279+q//+vf5h3/4h9/mf4kzZ8486MVf/MVf5x3f8R0/65prrnnw7/7u734XV131v8RrvuZrvs8//MM//PZnfuZnvg5XXXXVVVe9IJTjx49z1VVXXXXV83d4eLh7dHS0e3h4uPtmb/ZmH/OMZzzjr7nqqv/BXvM1X/N9FovFiZ//+Z//6i/90i99m3/4h3/4Hf6XOTw83P2Hf/iH3zk8PNx9szd7s4950IMe9DLPeMYz/pqrrvof6jVf8zXf50EPetDL/MiP/Mhnf+mXfunbnD179lb+Fzk6Orp06623/vWf/dmf/cytt976N4997GNf+xVe4RXe5hnPeMZfc9VV/4O95mu+5vv8wz/8w29/5md+5utw1VVXXXXVC4Me9KAHcdVVV1111b/sHd/xHT/rnd7pnT77d3/3d7+Lq676H+Y1X/M13+e+++679Ud/9Ec/57d+67e+m/8jrrnmmge/9mu/9nu90zu902f/7u/+7ndx1VX/w7zma77m+/zWb/3Wd3/913/9+/B/yOu8zuu81+u8zuu894u92Iu99u/+7u9+F1dd9T/Ma77ma77Pj/zIj3z2j/7oj34OV1111VVX/UvQgx70IK666qqrrnrRvNiLvdhrf/iHf/h3PeEJT/gtrrrqv9lrvuZrvg/Aj/zIj3z2b//2b3/Pfffddyv/R11zzTUP/vAP//DverEXe7HX/t3f/d3v4qqr/pu95mu+5vvcd999t37913/9+/zDP/zDb/N/1DXXXPPg137t136vd3qnd/psgN/93d/9Lq666r/Zox/96Nf5rM/6rNe57777buWqq6666qoXBXrQgx7EVVddddVVL7prrrnmwe/4ju/4Wa/zOq/z3r/7u7/7XVx11X+x13zN13yf++6779bf+q3f+u4f/dEf/Rz+H3md13md936d13md93qxF3ux1/7d3/3d7+Kqq/6LveZrvub73Hfffbf+6I/+6Of81m/91nfz/8Q111zz4Bd7sRd7rXd8x3f87GuuuebBv/u7v/tdXHXVf7HXfM3XfJ9/+Id/+O3P/MzPfB2uuuqqq67610APetCDuOqqq6666l/vHd/xHT/rnd7pnT77d3/3d7+Lq676T/aar/ma7wPwIz/yI5999uzZZ/zWb/3Wd/P/2Ou8zuu89+u8zuu814u92Iu99u/+7u9+F1dd9Z/sNV/zNd/nvvvuu/VHf/RHP+e3fuu3vpv/x6655poHv+M7vuNnvc7rvM57A/zu7/7ud3HVVf+JXvM1X/N97rvvvlt/67d+67t/9Ed/9HO46qqrrrrqXws96EEP4qqrrrrqqn+ba6655sGv/dqv/V7v9E7v9Nm/+7u/+11cddV/oNd8zdd8H4D77rvv1t/6rd/67h/90R/9HK56Dq/zOq/z3q/zOq/zXi/2Yi/22r/7u7/7XVx11X+w13zN13yf++6779Yf/dEf/ezf+q3f+h6uepZrrrnmwS/2Yi/2Wq/zOq/z3i/2Yi/22gC/+7u/+11cddV/oNd8zdd8n3/4h3/47c/8zM98Ha666qqrrvq3Qg960IO46qqrrrrq3+eaa6558Id/+Id/14u92Iu99u/+7u9+F1dd9W/0mq/5mu8DcN999936W7/1W9/927/9299z33333cpVL9Q111zz4Nd+7dd+r3d6p3f6bIDf/d3f/S6uuurf6DVf8zXfB+BHfuRHPvu3f/u3v+e+++67lateqGuuuebBr/3ar/1eL/7iL/7aL/ZiL/baAL/7u7/7XVx11b/Ra77ma77Pfffdd+vXf/3Xv88//MM//DZXXXXVVVf9e6AHPehBXHXVVVdd9R/jdV7ndd77dV7ndd7rxV7sxV77d3/3d7+Lq656Ebzma77m+wDcd999t/7Wb/3Wd//2b//299x33323ctW/2jXXXPPg137t136vF3/xF3/tF3uxF3vt3/3d3/0urrrqRfSar/ma73Pffffd+lu/9Vvf/aM/+qOfw1X/JmfOnHnQ67zO67z3i7/4i7/2i73Yi702wO/+7u9+F1dd9SJ4zdd8zfe57777bv3RH/3Rz/mt3/qt7+aqq6666qr/COhBD3oQV1111VVX/cd6ndd5nfd+ndd5nfd6sRd7sdf+3d/93e/iqquey6Mf/ejXueaaax5833333fpbv/Vb3/0P//APv/MP//APv81V/2GuueaaB7/jO77jZ73O67zOewP87u/+7ndx1VXP5TVf8zXf57777rv1t37rt777H/7hH37nH/7hH36bq/7DXHPNNQ9+7dd+7fd68Rd/8dd+sRd7sdcG+N3f/d3v4qqrnstrvuZrvs99991364/+6I9+zm/91m99N1ddddVVV/1HQg960IO46qqrrrrqP8c111zz4Hd8x3f8rNd5ndd5b4Df/d3f/S6u+n/rNV/zNd8H4L777rv1t37rt777t3/7t7/nvvvuu5Wr/lNdc801D36xF3ux13qd13md936xF3ux1wb43d/93e/iqv+3XvM1X/N9AO67775bf+u3fuu7f/RHf/RzuOo/3TXXXPPgF3uxF3vt13md13mvF3uxF3ttgN/93d/9Lq76f+s1X/M13wfgt37rt777t37rt77nH/7hH36bq6666qqr/jOgBz3oQVx11VVXXfWf65prrnnwa7/2a7/X67zO67z3Nddc8+Df/d3f/S6u+j/vNV/zNd8H4B/+4R9+++///u9/++zZs8/4rd/6re/mqv8211xzzYNf7MVe7LVf53Ve571e7MVe7LUBfvd3f/e7uOr/vNd8zdd8n/vuu+9WgN/6rd/67h/90R/9HK76b3PNNdc8+MVe7MVe68Ve7MVe+5prrnnwi73Yi702wO/+7u9+F1f9n/ear/ma73Pffffd+lu/9Vvf/aM/+qOfw1VXXXXVVf/Z0IMe9CCuuuqqq676r3PNNdc8+B3f8R0/63Ve53XeG+B3f/d3v4ur/k94zdd8zfcBuO+++249e/bsrX//93//27/927/9Pffdd9+tXPU/zpkzZx704i/+4q/zYi/2Yq/1Oq/zOu/NM/3u7/7ud3HV/3qv+Zqv+T4A9913362/9Vu/9d0AP/qjP/o5XPU/0jXXXPPgF3uxF3vtF3uxF3ut13md13lvnul3f/d3v4ur/k94zdd8zfe57777bv2t3/qt7/6Hf/iH3/mHf/iH3+aqq6666qr/KuhBD3oQV1111VVX/de75pprHvxiL/Zir/1iL/Zir/U6r/M67w3wu7/7u9/FVf9rvOZrvub7ANx33323nj179ta///u//+1/+Id/+J1/+Id/+G2u+l/lmmuueTDAa7/2a7/Xi7/4i7/2i73Yi702wO/+7u9+F1f9r/Gar/ma7wNw33333fpbv/Vb3/0P//APv/MP//APv81V/+tcc801D36xF3ux136xF3ux13qd13md9+aZfvd3f/e7uOp/hdd8zdd8H4D77rvv1t/6rd/67rNnzz7jt37rt76bq6666qqr/jugBz3oQVx11VVXXfXf65prrnnwmTNnHvxiL/Zir/XiL/7ir/1iL/Zirw3wu7/7u9/FVf8jvOZrvub78Ez33XffrT/6oz/6OWfOnHnQb//2b3/PfffddytX/Z9yzTXXPPjFXuzFXvvFXuzFXuuaa6558Iu92Iu9NsDv/u7vfhdX/Y/xmq/5mu8DcN999936W7/1W98N8KM/+qOfw1X/51xzzTUPfrEXe7HXfrEXe7HXuuaaax78Yi/2Yq/NM/3u7/7ud3HV/wiv+Zqv+T4A9913362/9Vu/9d3/8A//8Dv/8A//8NtcddVVV1313w096EEP4qqrrrrqqv9Zrrnmmge/2Iu92Gu/2Iu92Gtdc801D36xF3ux1wb43d/93e/iqv90r/mar/k+PNN9991369mzZ2/9+7//+9/+h3/4h9/5h3/4h9/mqv93rrnmmge/2Iu92Gu/2Iu92Gtdc801D36xF3ux1+aZfvd3f/e7uOo/3Wu+5mu+D89033333fpbv/Vb3/0P//APv/MP//APv81V/++cOXPmQddcc81Drrnmmge/2Iu92Gtdc801D36xF3ux1+aZfvd3f/e7uOo/3Wu+5mu+D8A//MM//Pbf//3f/zbAj/7oj34OV1111VVX/U+DHvSgB3HVVVddddX/bNdcc82DX+zFXuy1X+zFXuy1rrnmmge/2Iu92GvzTL/7u7/7XVz1b/Kar/ma78MD3Hfffbf+wz/8w2/fd999t/7DP/zD7/zDP/zDb3PVVc/HmTNnHiRJL/ZiL/baL/ZiL/Za11xzzYNf7MVe7LV5pt/93d/9Lq76N3vN13zN9+GZ7rvvvlt/67d+67sB/uEf/uF3/uEf/uG3ueqq5+PMmTMPuuaaax5yzTXXPPjFXuzFXuuaa6558Iu92Iu9Ng/wu7/7u9/FVf8mr/mar/k+PNN9991362/91m99N8CP/uiPfg5XXXXVVVf9T4ce9KAHcdVVV1111f8u11xzzYPPnDnz4GuuuebBL/ZiL/Za11xzzYNf7MVe7LV5gN/93d/9Lq7iNV/zNd+HB7jvvvtuBfiHf/iH377vvvtu/Yd/+IffOXv27K333XffrVx11b/DmTNnHiRJL/ZiL/baL/ZiL/Za11xzzYPPnDnz4GuuuebBPMDv/u7vfhdX8Zqv+ZrvwwPcd999t549e/bWv//7v/9tgH/4h3/4nX/4h3/4ba666t/pmmuuefCLvdiLvTbAi73Yi73WNddc8+AXe7EXe20e4Hd/93e/i6sue83XfM334QH+4R/+4bf//u///rcB/uEf/uF3/uEf/uG3ueqqq6666n8b9KAHPYirrrrqqqv+b7jmmmse/GIv9mKvDfBiL/Zir3XNNdc8+MyZMw++5pprHswD/O7v/u538X/Ea77ma74Pz+W+++679ezZs7f+/d///W8DnD179hn33Xffrf/wD//w21x11X+xa6655sEAL/ZiL/baAC/2Yi/2Wtdcc82Dz5w58+BrrrnmwTyX3/3d3/0u/g94zdd8zffhudx33323nj179tb77rvv1vvuu+/Ws2fPPuO+++679R/+4R9+m6uu+i92zTXXPPjMmTMPvuaaax585syZB11zzTUPvuaaax585syZB19zzTUP5rn87u/+7nfxf8RrvuZrvg8PcN9999169uzZW++7775b77vvvlv/4R/+4XfOnj1763333XcrV1111VVX/V+AHvSgB3HVVVddddX/bddcc82DAc6cOfPga6655sEv9mIv9loA11xzzYMBXuzFXuy1eSH+9E//9Mf4L/CKr/iK78ALcd99990KcPbs2Vvvu+++W++7775bAc6ePfuM++6779azZ8/eet99993KVVf9L3HNNdc8GODMmTMPuuaaax4C8GIv9mKvdc011zwY4MyZMw++5pprHswL8ad/+qc/xn+BV3zFV3wHXoh/+Id/+O0zZ848+OzZs7f+/d///W8DnD179hn33Xff08+ePfuM++6771auuup/iWuuuebBtn3NNdc85JprrnkwwIu92Iu9FsA111zzYIAzZ848+JprrnkwL8Sf/umf/hj/yV7xFV/xHXgh7rvvvlsBzp49e+t9991363333XcrwG//9m9/z5kzZx78D//wD7/NVVddddVV/9ehBz3oQVx11VVXXXUVwDXXXPNggDNnzjz4mmuueTDPdObMmQddc801D+a5XHPNNQ/muZw5c+bBPMDZs2dv5fm47777buWZ7rvvvlt5prNnzz4D4L777rsV4OzZs7fed999t3LVVf+PXXPNNQ8GsO1rrrnmIddcc82DeTa/2Iu92GvzXK655poH83ycOXPmwTzT2bNnbwW47777br3mmmsezDPdd999twLcd999t/IAZ8+efQbAfffddyvgs2fPPuO+++67lauu+n/szJkzD5KkM2fOPBjgmmuueTDgM2fOPBjgmmuueTDP5Zprrnkwz+XMmTMP5gHOnj17K8/HfffddyvPdN99993KM509e/YZgO+7775nAPzDP/zDb3PVVVddddVVV6AHPehBXHXVVVddddVVV1111VVXXXXVVVddddVV/ydRueqqq6666qqrrrrqqquuuuqqq6666qqr/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/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/yr+EYliN0PTFQVBAAAAAElFTkSuQmCC) + +```js +const r = 10 // radius +// Call `map`, using an anonymous function instead of a named one. +const circles = map([1, 2, 3], (id) => { + return startSketchOn("XY") + |> circle({ center: [id * 2 * r, 0], radius: r }, %) +}) +``` + +![Rendered example of map 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAACGl0lEQVR4Ae3gAZAkSZIkSRKLqpm7R0REZmZmVlVVVVV3d3d3d/fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMdHd3d3dXV1VVVVVmZkZGRIS7m5kKz0xmV3d1d3dPz8zMzMxMYn3Qgx7EVVddddVVV1111VVXXXXVVVddddVVV131fxKVq6666qqrrrrqqquuuuqqq6666qqrrrrq/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/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/V9F5aqrrrrqqqv+D7vmmmsezAOcOXPmwfwbnT179lae6b777ruVq676H+Saa655MA9w5syZB/NvdPbs2Vt5pvvuu+9Wrrrqf5BrrrnmwTzAmTNnHsy/0dmzZ2/lme67775bueqqq6666qr/m6hcddVVV1111f8C11xzzYMBzpw58+BrrrnmwWfOnHkQwDXXXPPga6655sE805kzZx58zTXXPJj/Ivfdd9+tPNPZs2dvve+++24FuO+++249e/bsMwDuu+++W8+ePXvrfffddytXXfUvuOaaax4McObMmQdfc801Dz5z5syDAK655poHA1xzzTUPBjhz5syDr7nmmgfzX+S+++67lWc6e/bsrffdd9+tAPfdd9+tZ8+efQbAfffddyvAP/zDP/w2V131IrjmmmsefObMmQdfc801Dz5z5syDAK655poHA1xzzTUPBrjmmmsecubMmQfxX+S+++67FUCS7rvvvqcD3HfffbcC3HfffbeePXv2Gf/wD//w22fOnHnw2bNnb73vvvtu5aqrrrrqqqv+Z0MPetCDuOqqq6666qr/Ttdcc82Dz5w58+BrrrnmwWfOnHkQwIu/+Iu/NsCLvdiLvTYvwO/+7u9+F/+DveZrvub78Fzuu+++WwH+4R/+4bcB/uEf/uF37rvvvlvPnj1763333XcrV/2fd8011zz4zJkzD77mmmsefObMmQddc801D77mmmsefObMmQdfc801D+b5+N3f/d3v4n+w13zN13wfnst99913K8DZs2dvve+++2697777bj179uwz7rvvvlvPnj1763333XcrV/2fd8011zz4zJkzD36xF3ux1wK45pprHnzNNdc8+MVe7MVem+fjd3/3d7+L/8Fe8zVf8314Pu67775bAc6ePXvrfffdd+t999136z/8wz/8DsDZs2dvve+++27lqquuuuqqq/77oAc96EFcddVVV1111X+2a6655sFnzpx58DXXXPPgM2fOPOjFX/zFXxvgxV7sxV6b5/K7v/u738X/E6/5mq/5PjzTfffddyvAP/zDP/z2P/zDP/zOfffdd+vZs2dvve+++27lqv91rrnmmge/2Iu92GufOXPmQddcc82Dr7nmmge/2Iu92GvzXH73d3/3u/h/4jVf8zXfh2e67777bgX4h3/4h98G+Id/+Iffue+++279h3/4h9/mqv91rrnmmgefOXPmwS/2Yi/2Wtdcc81Drrnmmge92Iu92GvzAL/7u7/7Xfw/8Zqv+ZrvwwPcd999t0rSfffd9/T77rvv1n/4h3/4nfvuu+/Ws2fP3nrffffdylVXXXXVVVf950IPetCDuOqqq6666qr/KNdcc82Dz5w58+AXe7EXey2AF3/xF3/tF3uxF3ttHuB3f/d3v4urXqjXfM3XfB+e6b777rv17Nmzt9533323/sM//MPv/MM//MNv33fffbdy1f8I11xzzYPPnDnz4Bd7sRd7rWuuuebBL/ZiL/ba11xzzYN5pt/93d/9Lq76F73ma77m+/BM9913363/8A//8Nv/8A//8Dv33Xffrf/wD//w21z1P8Y111zz4DNnzjz4xV7sxV7rxV/8xV/nxV7sxV6LB/jd3/3d7+KqF+o1X/M134dnuu+++249e/bsrffdd9+t//AP//A79913363/8A//8NtcddVVV1111X8c9KAHPYirrrrqqquu+re45pprHvxiL/Zir33mzJkHvfiLv/hrv9iLvdhr8wC/+7u/+11c9R/qNV/zNd8H4L777rv1H/7hH377H/7hH37nvvvuu/Uf/uEffpur/tNdc801DwZ47dd+7fd68Rd/8dd+sRd7sdfmAX73d3/3u7jqP8xrvuZrvg/PdN999936D//wD79933333foP//APv/MP//APv81V/yWuueaaB7/2a7/2ewG80zu902fzTL/7u7/7XVz1H+o1X/M134dnuu+++249e/bsrffdd9+t//AP//A79913363/8A//8NtcddVVV1111b8eetCDHsRVV1111VVX/UuuueaaB585c+bBL/ZiL/ZaL/7iL/7aL/ZiL/baPNPv/u7vfhdX/bd4zdd8zfcBuO+++279h3/4h9/+h3/4h9/5rd/6re/mqv8Q11xzzYPPnDnz4Bd7sRd7rRd/8Rd/7Rd7sRd7bZ7pd3/3d7+Lq/7LveZrvub73HfffbfyTP/wD//w2//wD//wO7/1W7/13Vz1H+Kaa6558Gu/9mu/F8A7vdM7fTbP9Lu/+7vfxVX/LV7zNV/zfQDuu+++W8+ePXvrfffdd+tv/dZvfc8//MM//DZXXXXVVVdd9S9DD3rQg7jqqquuuuqq53bNNdc8+LVf+7XfC+DFX/zFX/vFXuzFXptn+t3f/d3v4qr/kV7zNV/zfQDuu+++W3/rt37ru//hH/7hd/7hH/7ht7nqRfZiL/Zir/1iL/Zir/XiL/7ir/1iL/Zirw3wu7/7u9/FVf9jveZrvub7ANx33323/sM//MNv/9Zv/db3/MM//MNvc9WL7Jprrnnwa7/2a7/Xi7/4i7/2i73Yi702wO/+7u9+F1f9j/Sar/ma78Mz3Xfffbf+wz/8w2//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X/N97rvvvlt/67d+67t/9Ed/9HO46qqrrrrqXws96EEP4qqrrrrqqn+ba6655sGv/dqv/V7v9E7v9Nm/+7u/+11cddV/oNd8zdd8H4D77rvv1t/6rd/67h/90R/9HK56Dq/zOq/z3q/zOq/zXi/2Yi/22r/7u7/7XVx11X+w13zN13yf++6779Yf/dEf/ezf+q3f+h6uepZrrrnmwS/2Yi/2Wq/zOq/z3i/2Yi/22gC/+7u/+11cddV/oNd8zdd8n3/4h3/47c/8zM98Ha666qqrrvq3Qg960IO46qqrrrrq3+eaa6558Id/+Id/14u92Iu99u/+7u9+F1dd9W/0mq/5mu8DcN999936W7/1W9/927/9299z33333cpVL9Q111zz4Nd+7dd+r3d6p3f6bIDf/d3f/S6uuurf6DVf8zXfB+BHfuRHPvu3f/u3v+e+++67lateqGuuuebBr/3ar/1eL/7iL/7aL/ZiL/baAL/7u7/7XVx11b/Ra77ma77Pfffdd+vXf/3Xv88//MM//DZXXXXVVVf9e6AHPehBXHXVVVdd9R/jdV7ndd77dV7ndd7rxV7sxV77d3/3d7+Lq656Ebzma77m+wDcd999t/7Wb/3Wd//2b//299x33323ctW/2jXXXPPg137t136vF3/xF3/tF3uxF3vt3/3d3/0urrrqRfSar/ma73Pffffd+lu/9Vvf/aM/+qOfw1X/JmfOnHnQ67zO67z3i7/4i7/2i73Yi702wO/+7u9+F1dd9SJ4zdd8zfe57777bv3RH/3Rz/mt3/qt7+aqq6666qr/COhBD3oQV1111VVX/cd6ndd5nfd+ndd5nfd6sRd7sdf+3d/93e/iqquey6Mf/ejXueaaax5833333fpbv/Vb3/0P//APv/MP//APv81V/2GuueaaB7/jO77jZ73O67zOewP87u/+7ndx1VXP5TVf8zXf57777rv1t37rt777H/7hH37nH/7hH36bq/7DXHPNNQ9+7dd+7fd68Rd/8dd+sRd7sdcG+N3f/d3v4qqrnstrvuZrvs99991364/+6I9+zm/91m99N1ddddVVV/1HQg960IO46qqrrrrqP8c111zz4Hd8x3f8rNd5ndd5b4Df/d3f/S6u+n/rNV/zNd8H4L777rv1t37rt777t3/7t7/nvvvuu5Wr/lNdc801D36xF3ux13qd13md936xF3ux1wb43d/93e/iqv+3XvM1X/N9AO67775bf+u3fuu7f/RHf/RzuOo/3TXXXPPgF3uxF3vt13md13mvF3uxF3ttgN/93d/9Lq76f+s1X/M13wfgt37rt777t37rt77nH/7hH36bq6666qqr/jOgBz3oQVx11VVXXfWf65prrnnwa7/2a7/X67zO67z3Nddc8+Df/d3f/S6u+j/vNV/zNd8H4B/+4R9+++///u9/++zZs8/4rd/6re/mqv8211xzzYNf7MVe7LVf53Ve571e7MVe7LUBfvd3f/e7uOr/vNd8zdd8n/vuu+9WgN/6rd/67h/90R/9HK76b3PNNdc8+MVe7MVe68Ve7MVe+5prrnnwi73Yi702wO/+7u9+F1f9n/ear/ma73Pffffd+lu/9Vvf/aM/+qOfw1VXXXXVVf/Z0IMe9CCuuuqqq676r3PNNdc8+B3f8R0/63Ve53XeG+B3f/d3v4ur/k94zdd8zfcBuO+++249e/bsrX//93//27/927/9Pffdd9+tXPU/zpkzZx704i/+4q/zYi/2Yq/1Oq/zOu/NM/3u7/7ud3HV/3qv+Zqv+T4A9913362/9Vu/9d0AP/qjP/o5XPU/0jXXXPPgF3uxF3vtF3uxF3ut13md13lvnul3f/d3v4ur/k94zdd8zfe57777bv2t3/qt7/6Hf/iH3/mHf/iH3+aqq6666qr/KuhBD3oQV1111VVX/de75pprHvxiL/Zir/1iL/Zir/U6r/M67w3wu7/7u9/FVf9rvOZrvub7ANx33323nj179ta///u//+1/+Id/+J1/+Id/+G2u+l/lmmuueTDAa7/2a7/Xi7/4i7/2i73Yi702wO/+7u9+F1f9r/Gar/ma7wNw33333fpbv/Vb3/0P//APv/MP//APv81V/+tcc801D36xF3ux136xF3ux13qd13md9+aZfvd3f/e7uOp/hdd8zdd8H4D77rvv1t/6rd/67rNnzz7jt37rt76bq6666qqr/jugBz3oQVx11VVXXfXf65prrnnwmTNnHvxiL/Zir/XiL/7ir/1iL/Zirw3wu7/7u9/FVf8jvOZrvub78Ez33XffrT/6oz/6OWfOnHnQb//2b3/PfffddytX/Z9yzTXXPPjFXuzFXvvFXuzFXuuaa6558Iu92Iu9NsDv/u7vfhdX/Y/xmq/5mu8DcN999936W7/1W98N8KM/+qOfw1X/51xzzTUPfrEXe7HXfrEXe7HXuuaaax78Yi/2Yq/NM/3u7/7ud3HV/wiv+Zqv+T4A9913362/9Vu/9d3/8A//8Dv/8A//8NtcddVVV1313w096EEP4qqrrrrqqv9Zrrnmmge/2Iu92Gu/2Iu92Gtdc801D36xF3ux1wb43d/93e/iqv90r/mar/k+PNN9991369mzZ2/9+7//+9/+h3/4h9/5h3/4h9/mqv93rrnmmge/2Iu92Gu/2Iu92Gtdc801D36xF3ux1+aZfvd3f/e7uOo/3Wu+5mu+D89033333fpbv/Vb3/0P//APv/MP//APv81V/++cOXPmQddcc81Drrnmmge/2Iu92Gtdc801D36xF3ux1+aZfvd3f/e7uOo/3Wu+5mu+D8A//MM//Pbf//3f/zbAj/7oj34OV1111VVX/U+DHvSgB3HVVVddddX/bNdcc82DX+zFXuy1X+zFXuy1rrnmmge/2Iu92GvzTL/7u7/7XVz1b/Kar/ma78MD3Hfffbf+wz/8w2/fd999t/7DP/zD7/zDP/zDb3PVVc/HmTNnHiRJL/ZiL/baL/ZiL/Za11xzzYNf7MVe7LV5pt/93d/9Lq76N3vN13zN9+GZ7rvvvlt/67d+67sB/uEf/uF3/uEf/uG3ueqq5+PMmTMPuuaaax5yzTXXPPjFXuzFXuuaa6558Iu92Iu9Ng/wu7/7u9/FVf8mr/mar/k+PNN9991362/91m99N8CP/uiPfg5XXXXVVVf9T4ce9KAHcdVVV1111f8u11xzzYPPnDnz4GuuuebBL/ZiL/Za11xzzYNf7MVe7LV5gN/93d/9Lq7iNV/zNd+HB7jvvvtuBfiHf/iH377vvvtu/Yd/+IffOXv27K333XffrVx11b/DmTNnHiRJL/ZiL/baL/ZiL/Za11xzzYPPnDnz4GuuuebBPMDv/u7vfhdX8Zqv+ZrvwwPcd999t549e/bWv//7v/9tgH/4h3/4nX/4h3/4ba666t/pmmuuefCLvdiLvTbAi73Yi73WNddc8+AXe7EXe20e4Hd/93e/i6sue83XfM334QH+4R/+4bf//u///rcB/uEf/uF3/uEf/uG3ueqqq6666n8b9KAHPYirrrrqqqv+b7jmmmse/GIv9mKvDfBiL/Zir3XNNdc8+MyZMw++5pprHswD/O7v/u538X/Ea77ma74Pz+W+++679ezZs7f+/d///W8DnD179hn33Xffrf/wD//w21x11X+xa6655sEAL/ZiL/baAC/2Yi/2Wtdcc82Dz5w58+BrrrnmwTyX3/3d3/0u/g94zdd8zffhudx33323nj179tb77rvv1vvuu+/Ws2fPPuO+++679R/+4R9+m6uu+i92zTXXPPjMmTMPvuaaax585syZB11zzTUPvuaaax585syZB19zzTUP5rn87u/+7nfxf8RrvuZrvg8PcN9999169uzZW++7775b77vvvlv/4R/+4XfOnj1763333XcrV1111VVX/V+AHvSgB3HVVVddddX/bddcc82DAc6cOfPga6655sEv9mIv9loA11xzzYMBXuzFXuy1eSH+9E//9Mf4L/CKr/iK78ALcd99990KcPbs2Vvvu+++W++7775bAc6ePfuM++6779azZ8/eet99993KVVf9L3HNNdc8GODMmTMPuuaaax4C8GIv9mKvdc011zwY4MyZMw++5pprHswL8ad/+qc/xn+BV3zFV3wHXoh/+Id/+O0zZ848+OzZs7f+/d///W8DnD179hn33Xff08+ePfuM++6771auuup/iWuuuebBtn3NNdc85JprrnkwwIu92Iu9FsA111zzYIAzZ848+JprrnkwL8Sf/umf/hj/yV7xFV/xHXgh7rvvvlsBzp49e+t9991363333XcrwG//9m9/z5kzZx78D//wD7/NVVddddVV/9ehBz3oQVx11VVXXXUVwDXXXPNggDNnzjz4mmuueTDPdObMmQddc801D+a5XHPNNQ/muZw5c+bBPMDZs2dv5fm47777buWZ7rvvvlt5prNnzz4D4L777rsV4OzZs7fed999t3LVVf+PXXPNNQ8GsO1rrrnmIddcc82DeTa/2Iu92GvzXK655poH83ycOXPmwTzT2bNnbwW47777br3mmmsezDPdd999twLcd999t/IAZ8+efQbAfffddyvgs2fPPuO+++67lauu+n/szJkzD5KkM2fOPBjgmmuueTDgM2fOPBjgmmuueTDP5Zprrnkwz+XMmTMP5gHOnj17K8/HfffddyvPdN99993KM509e/YZgO+7775nAPzDP/zDb3PVVVddddVVV6AHPehBXHXVVVddddVVV1111VVXXXXVVVddddVV/ydRueqqq6666qqrrrrqqquuuuqqq6666qqr/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/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/yr+EYliN0PTFQVBAAAAAElFTkSuQmCC) + + diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 9282eed3a7..216e1dd164 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -80894,6 +80894,10736 @@ "const totalWidth = 10 * m()" ] }, + { + "name": "map", + "summary": "Apply a function to every element of a list.", + "description": "Given a list like `[a, b, c]`, and a function like `f`, returns `[f(a), f(b), f(c)]`", + "tags": [], + "args": [ + { + "name": "array", + "type": "[KclValue]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_KclValue", + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + }, + "definitions": { + "KclValue": { + "description": "A memory item.", + "oneOf": [ + { + "type": "object", + "required": [ + "__meta", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UserVal" + ] + }, + "value": {}, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "__meta", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solids" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + } + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "__meta", + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "__meta", + "expression", + "memory", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + }, + "expression": { + "$ref": "#/components/schemas/FunctionExpression" + }, + "memory": { + "$ref": "#/components/schemas/ProgramMemory" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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/BasePath" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "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" + } + ] + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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" + } + ] + } + } + }, + "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" + } + ] + } + } + } + ] + }, + "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" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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" + } + }, + "__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", + "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" + } + ] + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "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" + } + } + } + }, + "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 + } + } + } + ] + }, + "FunctionExpression": { + "type": "object", + "required": [ + "body", + "end", + "params", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "params": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Parameter" + } + }, + "body": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Parameter": { + "description": "Parameter of a KCL function.", + "type": "object", + "required": [ + "identifier", + "optional" + ], + "properties": { + "identifier": { + "description": "The parameter's label or name.", + "allOf": [ + { + "$ref": "#/components/schemas/Identifier" + } + ] + }, + "optional": { + "description": "Is the parameter optional?", + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Identifier": { + "type": "object", + "required": [ + "end", + "name", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Program": { + "description": "A KCL program top level, or function body.", + "type": "object", + "required": [ + "body", + "end", + "nonCodeMeta", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "body": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BodyItem" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "BodyItem": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "expression", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ExpressionStatement" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "expression": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "declarations", + "end", + "kind", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "VariableDeclaration" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "declarations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VariableDeclarator" + } + }, + "kind": { + "$ref": "#/components/schemas/VariableKind" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ReturnStatement" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "argument": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "Expr": { + "description": "An expression can be evaluated to yield a single KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "left", + "operator", + "right", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "BinaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/BinaryOperator" + }, + "left": { + "$ref": "#/components/schemas/BinaryPart" + }, + "right": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "body", + "end", + "params", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "FunctionExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "params": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Parameter" + } + }, + "body": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "arguments", + "callee", + "end", + "optional", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CallExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "callee": { + "$ref": "#/components/schemas/Identifier" + }, + "arguments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "optional": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "body", + "end", + "nonCodeMeta", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "PipeExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "body": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "PipeSubstitution" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "elements", + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArrayExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "properties", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ObjectExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "properties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ObjectProperty" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "operator", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UnaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/UnaryOperator" + }, + "argument": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "cond", + "else_ifs", + "end", + "final_else", + "start", + "then_val", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "IfExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "else_ifs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ElseIf" + } + }, + "final_else": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "required": [ + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "None" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + } + ] + }, + "LiteralValue": { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "number", + "format": "double" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "BinaryOperator": { + "oneOf": [ + { + "description": "Add two numbers.", + "type": "string", + "enum": [ + "+" + ] + }, + { + "description": "Subtract two numbers.", + "type": "string", + "enum": [ + "-" + ] + }, + { + "description": "Multiply two numbers.", + "type": "string", + "enum": [ + "*" + ] + }, + { + "description": "Divide two numbers.", + "type": "string", + "enum": [ + "/" + ] + }, + { + "description": "Modulo two numbers.", + "type": "string", + "enum": [ + "%" + ] + }, + { + "description": "Raise a number to a power.", + "type": "string", + "enum": [ + "^" + ] + } + ] + }, + "BinaryPart": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "left", + "operator", + "right", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "BinaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/BinaryOperator" + }, + "left": { + "$ref": "#/components/schemas/BinaryPart" + }, + "right": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "arguments", + "callee", + "end", + "optional", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CallExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "callee": { + "$ref": "#/components/schemas/Identifier" + }, + "arguments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "optional": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "operator", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UnaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/UnaryOperator" + }, + "argument": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "cond", + "else_ifs", + "end", + "final_else", + "start", + "then_val", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "IfExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "else_ifs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ElseIf" + } + }, + "final_else": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "UnaryOperator": { + "oneOf": [ + { + "description": "Negate a number.", + "type": "string", + "enum": [ + "-" + ] + }, + { + "description": "Negate a boolean.", + "type": "string", + "enum": [ + "!" + ] + } + ] + }, + "MemberObject": { + "oneOf": [ + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "LiteralIdentifier": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "ElseIf": { + "type": "object", + "required": [ + "cond", + "end", + "start", + "then_val" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeMeta": { + "type": "object", + "required": [ + "nonCodeNodes", + "start" + ], + "properties": { + "nonCodeNodes": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NonCodeNode" + } + } + }, + "start": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NonCodeNode" + } + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeNode": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/NonCodeValue" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeValue": { + "oneOf": [ + { + "description": "A shebang. This is a special type of comment that is at the top of the file. It looks like this: ```python,no_run #!/usr/bin/env python ```", + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "shebang" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "description": "An inline comment. Here are examples: `1 + 1 // This is an inline comment`. `1 + 1 /* Here's another */`.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "inlineComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "description": "A block comment. An example of this is the following: ```python,no_run /* This is a block comment */ 1 + 1 ``` Now this is important. The block comment is attached to the next line. This is always the case. Also the block comment doesn't have a new line above it. If it did it would be a `NewLineBlockComment`.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "blockComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "description": "A block comment that has a new line above it. The user explicitly added a new line above the block comment.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "newLineBlockComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "newLine" + ] + } + } + } + ] + }, + "CommentStyle": { + "oneOf": [ + { + "description": "Like // foo", + "type": "string", + "enum": [ + "line" + ] + }, + { + "description": "Like /* foo */", + "type": "string", + "enum": [ + "block" + ] + } + ] + }, + "ObjectProperty": { + "type": "object", + "required": [ + "end", + "key", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "key": { + "$ref": "#/components/schemas/Identifier" + }, + "value": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "VariableDeclarator": { + "type": "object", + "required": [ + "end", + "id", + "init", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "id": { + "description": "The identifier of the variable.", + "allOf": [ + { + "$ref": "#/components/schemas/Identifier" + } + ] + }, + "init": { + "description": "The value of the variable.", + "allOf": [ + { + "$ref": "#/components/schemas/Expr" + } + ] + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "VariableKind": { + "oneOf": [ + { + "description": "Declare a variable.", + "type": "string", + "enum": [ + "let" + ] + }, + { + "description": "Declare a variable that is read-only.", + "type": "string", + "enum": [ + "const" + ] + }, + { + "description": "Declare a function.", + "type": "string", + "enum": [ + "fn" + ] + }, + { + "description": "Declare a variable.", + "type": "string", + "enum": [ + "var" + ] + } + ] + }, + "ProgramMemory": { + "type": "object", + "required": [ + "currentEnv", + "environments" + ], + "properties": { + "environments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Environment" + } + }, + "currentEnv": { + "$ref": "#/components/schemas/EnvironmentRef" + }, + "return": { + "allOf": [ + { + "$ref": "#/components/schemas/KclValue" + } + ], + "nullable": true + } + } + }, + "Environment": { + "type": "object", + "required": [ + "bindings" + ], + "properties": { + "bindings": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } + }, + "parent": { + "allOf": [ + { + "$ref": "#/components/schemas/EnvironmentRef" + } + ], + "nullable": true + } + } + }, + "EnvironmentRef": { + "description": "An index pointing to an environment.", + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "required": true + }, + { + "name": "map_fn", + "type": "FunctionParam", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "FunctionParam", + "type": "null", + "definitions": { + "KclValue": { + "description": "A memory item.", + "oneOf": [ + { + "type": "object", + "required": [ + "__meta", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UserVal" + ] + }, + "value": {}, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "__meta", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solids" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + } + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "__meta", + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "__meta", + "expression", + "memory", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + }, + "expression": { + "$ref": "#/components/schemas/FunctionExpression" + }, + "memory": { + "$ref": "#/components/schemas/ProgramMemory" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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/BasePath" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "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" + } + ] + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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" + } + ] + } + } + }, + "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" + } + ] + } + } + } + ] + }, + "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" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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" + } + }, + "__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", + "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" + } + ] + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "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" + } + } + } + }, + "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 + } + } + } + ] + }, + "FunctionExpression": { + "type": "object", + "required": [ + "body", + "end", + "params", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "params": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Parameter" + } + }, + "body": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Parameter": { + "description": "Parameter of a KCL function.", + "type": "object", + "required": [ + "identifier", + "optional" + ], + "properties": { + "identifier": { + "description": "The parameter's label or name.", + "allOf": [ + { + "$ref": "#/components/schemas/Identifier" + } + ] + }, + "optional": { + "description": "Is the parameter optional?", + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Identifier": { + "type": "object", + "required": [ + "end", + "name", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Program": { + "description": "A KCL program top level, or function body.", + "type": "object", + "required": [ + "body", + "end", + "nonCodeMeta", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "body": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BodyItem" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "BodyItem": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "expression", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ExpressionStatement" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "expression": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "declarations", + "end", + "kind", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "VariableDeclaration" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "declarations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VariableDeclarator" + } + }, + "kind": { + "$ref": "#/components/schemas/VariableKind" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ReturnStatement" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "argument": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "Expr": { + "description": "An expression can be evaluated to yield a single KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "left", + "operator", + "right", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "BinaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/BinaryOperator" + }, + "left": { + "$ref": "#/components/schemas/BinaryPart" + }, + "right": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "body", + "end", + "params", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "FunctionExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "params": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Parameter" + } + }, + "body": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "arguments", + "callee", + "end", + "optional", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CallExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "callee": { + "$ref": "#/components/schemas/Identifier" + }, + "arguments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "optional": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "body", + "end", + "nonCodeMeta", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "PipeExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "body": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "PipeSubstitution" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "elements", + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArrayExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "properties", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ObjectExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "properties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ObjectProperty" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "operator", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UnaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/UnaryOperator" + }, + "argument": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "cond", + "else_ifs", + "end", + "final_else", + "start", + "then_val", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "IfExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "else_ifs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ElseIf" + } + }, + "final_else": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "required": [ + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "None" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + } + ] + }, + "LiteralValue": { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "number", + "format": "double" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "BinaryOperator": { + "oneOf": [ + { + "description": "Add two numbers.", + "type": "string", + "enum": [ + "+" + ] + }, + { + "description": "Subtract two numbers.", + "type": "string", + "enum": [ + "-" + ] + }, + { + "description": "Multiply two numbers.", + "type": "string", + "enum": [ + "*" + ] + }, + { + "description": "Divide two numbers.", + "type": "string", + "enum": [ + "/" + ] + }, + { + "description": "Modulo two numbers.", + "type": "string", + "enum": [ + "%" + ] + }, + { + "description": "Raise a number to a power.", + "type": "string", + "enum": [ + "^" + ] + } + ] + }, + "BinaryPart": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "left", + "operator", + "right", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "BinaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/BinaryOperator" + }, + "left": { + "$ref": "#/components/schemas/BinaryPart" + }, + "right": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "arguments", + "callee", + "end", + "optional", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CallExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "callee": { + "$ref": "#/components/schemas/Identifier" + }, + "arguments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "optional": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "operator", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UnaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/UnaryOperator" + }, + "argument": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "cond", + "else_ifs", + "end", + "final_else", + "start", + "then_val", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "IfExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "else_ifs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ElseIf" + } + }, + "final_else": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "UnaryOperator": { + "oneOf": [ + { + "description": "Negate a number.", + "type": "string", + "enum": [ + "-" + ] + }, + { + "description": "Negate a boolean.", + "type": "string", + "enum": [ + "!" + ] + } + ] + }, + "MemberObject": { + "oneOf": [ + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "LiteralIdentifier": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "ElseIf": { + "type": "object", + "required": [ + "cond", + "end", + "start", + "then_val" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeMeta": { + "type": "object", + "required": [ + "nonCodeNodes", + "start" + ], + "properties": { + "nonCodeNodes": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NonCodeNode" + } + } + }, + "start": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NonCodeNode" + } + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeNode": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/NonCodeValue" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeValue": { + "oneOf": [ + { + "description": "A shebang. This is a special type of comment that is at the top of the file. It looks like this: ```python,no_run #!/usr/bin/env python ```", + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "shebang" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "description": "An inline comment. Here are examples: `1 + 1 // This is an inline comment`. `1 + 1 /* Here's another */`.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "inlineComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "description": "A block comment. An example of this is the following: ```python,no_run /* This is a block comment */ 1 + 1 ``` Now this is important. The block comment is attached to the next line. This is always the case. Also the block comment doesn't have a new line above it. If it did it would be a `NewLineBlockComment`.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "blockComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "description": "A block comment that has a new line above it. The user explicitly added a new line above the block comment.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "newLineBlockComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "newLine" + ] + } + } + } + ] + }, + "CommentStyle": { + "oneOf": [ + { + "description": "Like // foo", + "type": "string", + "enum": [ + "line" + ] + }, + { + "description": "Like /* foo */", + "type": "string", + "enum": [ + "block" + ] + } + ] + }, + "ObjectProperty": { + "type": "object", + "required": [ + "end", + "key", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "key": { + "$ref": "#/components/schemas/Identifier" + }, + "value": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "VariableDeclarator": { + "type": "object", + "required": [ + "end", + "id", + "init", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "id": { + "description": "The identifier of the variable.", + "allOf": [ + { + "$ref": "#/components/schemas/Identifier" + } + ] + }, + "init": { + "description": "The value of the variable.", + "allOf": [ + { + "$ref": "#/components/schemas/Expr" + } + ] + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "VariableKind": { + "oneOf": [ + { + "description": "Declare a variable.", + "type": "string", + "enum": [ + "let" + ] + }, + { + "description": "Declare a variable that is read-only.", + "type": "string", + "enum": [ + "const" + ] + }, + { + "description": "Declare a function.", + "type": "string", + "enum": [ + "fn" + ] + }, + { + "description": "Declare a variable.", + "type": "string", + "enum": [ + "var" + ] + } + ] + }, + "ProgramMemory": { + "type": "object", + "required": [ + "currentEnv", + "environments" + ], + "properties": { + "environments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Environment" + } + }, + "currentEnv": { + "$ref": "#/components/schemas/EnvironmentRef" + }, + "return": { + "allOf": [ + { + "$ref": "#/components/schemas/KclValue" + } + ], + "nullable": true + } + } + }, + "Environment": { + "type": "object", + "required": [ + "bindings" + ], + "properties": { + "bindings": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } + }, + "parent": { + "allOf": [ + { + "$ref": "#/components/schemas/EnvironmentRef" + } + ], + "nullable": true + } + } + }, + "EnvironmentRef": { + "description": "An index pointing to an environment.", + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "[KclValue]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_KclValue", + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + }, + "definitions": { + "KclValue": { + "description": "A memory item.", + "oneOf": [ + { + "type": "object", + "required": [ + "__meta", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UserVal" + ] + }, + "value": {}, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "__meta", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solids" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + } + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "__meta", + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "type": "object", + "required": [ + "__meta", + "expression", + "memory", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + }, + "expression": { + "$ref": "#/components/schemas/FunctionExpression" + }, + "memory": { + "$ref": "#/components/schemas/ProgramMemory" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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/BasePath" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "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" + } + ] + } + } + }, + "TagDeclarator": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "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" + } + ] + } + } + }, + "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" + } + ] + } + } + } + ] + }, + "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" + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "sketch", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "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" + } + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "start", + "value" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes.", + "type": "string", + "format": "uuid" + }, + "value": { + "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" + } + }, + "__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", + "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" + } + ] + } + } + } + ] + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "solid", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "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" + } + ] + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "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" + } + } + } + }, + "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 + } + } + } + ] + }, + "FunctionExpression": { + "type": "object", + "required": [ + "body", + "end", + "params", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "params": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Parameter" + } + }, + "body": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Parameter": { + "description": "Parameter of a KCL function.", + "type": "object", + "required": [ + "identifier", + "optional" + ], + "properties": { + "identifier": { + "description": "The parameter's label or name.", + "allOf": [ + { + "$ref": "#/components/schemas/Identifier" + } + ] + }, + "optional": { + "description": "Is the parameter optional?", + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Identifier": { + "type": "object", + "required": [ + "end", + "name", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "Program": { + "description": "A KCL program top level, or function body.", + "type": "object", + "required": [ + "body", + "end", + "nonCodeMeta", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "body": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BodyItem" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "BodyItem": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "expression", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ExpressionStatement" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "expression": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "declarations", + "end", + "kind", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "VariableDeclaration" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "declarations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VariableDeclarator" + } + }, + "kind": { + "$ref": "#/components/schemas/VariableKind" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ReturnStatement" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "argument": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "Expr": { + "description": "An expression can be evaluated to yield a single KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "left", + "operator", + "right", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "BinaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/BinaryOperator" + }, + "left": { + "$ref": "#/components/schemas/BinaryPart" + }, + "right": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "body", + "end", + "params", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "FunctionExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "params": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Parameter" + } + }, + "body": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "arguments", + "callee", + "end", + "optional", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CallExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "callee": { + "$ref": "#/components/schemas/Identifier" + }, + "arguments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "optional": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "body", + "end", + "nonCodeMeta", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "PipeExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "body": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "PipeSubstitution" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "elements", + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArrayExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "properties", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ObjectExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "properties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ObjectProperty" + } + }, + "nonCodeMeta": { + "$ref": "#/components/schemas/NonCodeMeta" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "operator", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UnaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/UnaryOperator" + }, + "argument": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "cond", + "else_ifs", + "end", + "final_else", + "start", + "then_val", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "IfExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "else_ifs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ElseIf" + } + }, + "final_else": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "required": [ + "end", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "None" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + } + ] + }, + "LiteralValue": { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "number", + "format": "double" + }, + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "BinaryOperator": { + "oneOf": [ + { + "description": "Add two numbers.", + "type": "string", + "enum": [ + "+" + ] + }, + { + "description": "Subtract two numbers.", + "type": "string", + "enum": [ + "-" + ] + }, + { + "description": "Multiply two numbers.", + "type": "string", + "enum": [ + "*" + ] + }, + { + "description": "Divide two numbers.", + "type": "string", + "enum": [ + "/" + ] + }, + { + "description": "Modulo two numbers.", + "type": "string", + "enum": [ + "%" + ] + }, + { + "description": "Raise a number to a power.", + "type": "string", + "enum": [ + "^" + ] + } + ] + }, + "BinaryPart": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "left", + "operator", + "right", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "BinaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/BinaryOperator" + }, + "left": { + "$ref": "#/components/schemas/BinaryPart" + }, + "right": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "arguments", + "callee", + "end", + "optional", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CallExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "callee": { + "$ref": "#/components/schemas/Identifier" + }, + "arguments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Expr" + } + }, + "optional": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "argument", + "end", + "operator", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "UnaryExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "operator": { + "$ref": "#/components/schemas/UnaryOperator" + }, + "argument": { + "$ref": "#/components/schemas/BinaryPart" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "cond", + "else_ifs", + "end", + "final_else", + "start", + "then_val", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "IfExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "else_ifs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ElseIf" + } + }, + "final_else": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "UnaryOperator": { + "oneOf": [ + { + "description": "Negate a number.", + "type": "string", + "enum": [ + "-" + ] + }, + { + "description": "Negate a boolean.", + "type": "string", + "enum": [ + "!" + ] + } + ] + }, + "MemberObject": { + "oneOf": [ + { + "type": "object", + "required": [ + "computed", + "end", + "object", + "property", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MemberExpression" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "object": { + "$ref": "#/components/schemas/MemberObject" + }, + "property": { + "$ref": "#/components/schemas/LiteralIdentifier" + }, + "computed": { + "type": "boolean" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "LiteralIdentifier": { + "oneOf": [ + { + "type": "object", + "required": [ + "end", + "name", + "start", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Identifier" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + { + "type": "object", + "required": [ + "end", + "raw", + "start", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Literal" + ] + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/LiteralValue" + }, + "raw": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + ] + }, + "ElseIf": { + "type": "object", + "required": [ + "cond", + "end", + "start", + "then_val" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "cond": { + "$ref": "#/components/schemas/Expr" + }, + "then_val": { + "$ref": "#/components/schemas/Program" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeMeta": { + "type": "object", + "required": [ + "nonCodeNodes", + "start" + ], + "properties": { + "nonCodeNodes": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NonCodeNode" + } + } + }, + "start": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NonCodeNode" + } + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeNode": { + "type": "object", + "required": [ + "end", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "value": { + "$ref": "#/components/schemas/NonCodeValue" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "NonCodeValue": { + "oneOf": [ + { + "description": "A shebang. This is a special type of comment that is at the top of the file. It looks like this: ```python,no_run #!/usr/bin/env python ```", + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "shebang" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "description": "An inline comment. Here are examples: `1 + 1 // This is an inline comment`. `1 + 1 /* Here's another */`.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "inlineComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "description": "A block comment. An example of this is the following: ```python,no_run /* This is a block comment */ 1 + 1 ``` Now this is important. The block comment is attached to the next line. This is always the case. Also the block comment doesn't have a new line above it. If it did it would be a `NewLineBlockComment`.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "blockComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "description": "A block comment that has a new line above it. The user explicitly added a new line above the block comment.", + "type": "object", + "required": [ + "style", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "newLineBlockComment" + ] + }, + "value": { + "type": "string" + }, + "style": { + "$ref": "#/components/schemas/CommentStyle" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "newLine" + ] + } + } + } + ] + }, + "CommentStyle": { + "oneOf": [ + { + "description": "Like // foo", + "type": "string", + "enum": [ + "line" + ] + }, + { + "description": "Like /* foo */", + "type": "string", + "enum": [ + "block" + ] + } + ] + }, + "ObjectProperty": { + "type": "object", + "required": [ + "end", + "key", + "start", + "value" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "key": { + "$ref": "#/components/schemas/Identifier" + }, + "value": { + "$ref": "#/components/schemas/Expr" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "VariableDeclarator": { + "type": "object", + "required": [ + "end", + "id", + "init", + "start" + ], + "properties": { + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "id": { + "description": "The identifier of the variable.", + "allOf": [ + { + "$ref": "#/components/schemas/Identifier" + } + ] + }, + "init": { + "description": "The value of the variable.", + "allOf": [ + { + "$ref": "#/components/schemas/Expr" + } + ] + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + }, + "VariableKind": { + "oneOf": [ + { + "description": "Declare a variable.", + "type": "string", + "enum": [ + "let" + ] + }, + { + "description": "Declare a variable that is read-only.", + "type": "string", + "enum": [ + "const" + ] + }, + { + "description": "Declare a function.", + "type": "string", + "enum": [ + "fn" + ] + }, + { + "description": "Declare a variable.", + "type": "string", + "enum": [ + "var" + ] + } + ] + }, + "ProgramMemory": { + "type": "object", + "required": [ + "currentEnv", + "environments" + ], + "properties": { + "environments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Environment" + } + }, + "currentEnv": { + "$ref": "#/components/schemas/EnvironmentRef" + }, + "return": { + "allOf": [ + { + "$ref": "#/components/schemas/KclValue" + } + ], + "nullable": true + } + } + }, + "Environment": { + "type": "object", + "required": [ + "bindings" + ], + "properties": { + "bindings": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } + }, + "parent": { + "allOf": [ + { + "$ref": "#/components/schemas/EnvironmentRef" + } + ], + "nullable": true + } + } + }, + "EnvironmentRef": { + "description": "An index pointing to an environment.", + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "const r = 10 // radius\nfn drawCircle = (id) => {\n return startSketchOn(\"XY\")\n |> circle({ center: [id * 2 * r, 0], radius: r }, %)\n}\n\n// Call `drawCircle`, passing in each element of the array.\n// The outputs from each `drawCircle` form a new array,\n// which is the return value from `map`.\nconst circles = map([1, 2, 3], drawCircle)", + "const r = 10 // radius\n// Call `map`, using an anonymous function instead of a named one.\nconst circles = map([1, 2, 3], (id) => {\n return startSketchOn(\"XY\")\n |> circle({ center: [id * 2 * r, 0], radius: r }, %)\n})" + ] + }, { "name": "max", "summary": "Compute the maximum of the given arguments.", diff --git a/docs/kcl/types/BinaryOperator.md b/docs/kcl/types/BinaryOperator.md new file mode 100644 index 0000000000..4ef890ea8f --- /dev/null +++ b/docs/kcl/types/BinaryOperator.md @@ -0,0 +1,89 @@ +--- +title: "BinaryOperator" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + +Add two numbers. + +**enum:** `+` + + + + + + + + +---- +Subtract two numbers. + +**enum:** `-` + + + + + + + + +---- +Multiply two numbers. + +**enum:** `*` + + + + + + + + +---- +Divide two numbers. + +**enum:** `/` + + + + + + + + +---- +Modulo two numbers. + +**enum:** `%` + + + + + + + + +---- +Raise a number to a power. + +**enum:** `^` + + + + + + + + +---- + + + + diff --git a/docs/kcl/types/BinaryPart.md b/docs/kcl/types/BinaryPart.md new file mode 100644 index 0000000000..87b0b77227 --- /dev/null +++ b/docs/kcl/types/BinaryPart.md @@ -0,0 +1,161 @@ +--- +title: "BinaryPart" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Literal`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `value` |[`LiteralValue`](/docs/kcl/types/LiteralValue)| | No | +| `raw` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`Identifier`](/docs/kcl/types/Identifier)| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `name` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `BinaryExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `operator` |[`BinaryOperator`](/docs/kcl/types/BinaryOperator)| | No | +| `left` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| | No | +| `right` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `CallExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `callee` |[`Identifier`](/docs/kcl/types/Identifier)| | No | +| `arguments` |`[` [`Expr`](/docs/kcl/types/Expr) `]`| | No | +| `optional` |`boolean`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `UnaryExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `operator` |[`UnaryOperator`](/docs/kcl/types/UnaryOperator)| | No | +| `argument` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `MemberExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `object` |[`MemberObject`](/docs/kcl/types/MemberObject)| | No | +| `property` |[`LiteralIdentifier`](/docs/kcl/types/LiteralIdentifier)| | No | +| `computed` |`boolean`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `IfExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `cond` |[`Expr`](/docs/kcl/types/Expr)| | No | +| `then_val` |[`Program`](/docs/kcl/types/Program)| | No | +| `else_ifs` |`[` [`ElseIf`](/docs/kcl/types/ElseIf) `]`| | No | +| `final_else` |[`Program`](/docs/kcl/types/Program)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + + + + diff --git a/docs/kcl/types/BodyItem.md b/docs/kcl/types/BodyItem.md new file mode 100644 index 0000000000..5fab055093 --- /dev/null +++ b/docs/kcl/types/BodyItem.md @@ -0,0 +1,75 @@ +--- +title: "BodyItem" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `ExpressionStatement`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `expression` |[`Expr`](/docs/kcl/types/Expr)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `VariableDeclaration`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `declarations` |`[` [`VariableDeclarator`](/docs/kcl/types/VariableDeclarator) `]`| | No | +| `kind` |[`VariableKind`](/docs/kcl/types/VariableKind)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `ReturnStatement`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `argument` |[`Expr`](/docs/kcl/types/Expr)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + + + + diff --git a/docs/kcl/types/CommentStyle.md b/docs/kcl/types/CommentStyle.md new file mode 100644 index 0000000000..368811a888 --- /dev/null +++ b/docs/kcl/types/CommentStyle.md @@ -0,0 +1,41 @@ +--- +title: "CommentStyle" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + +Like // foo + +**enum:** `line` + + + + + + + + +---- +Like /* foo */ + +**enum:** `block` + + + + + + + + +---- + + + + diff --git a/docs/kcl/types/ElseIf.md b/docs/kcl/types/ElseIf.md new file mode 100644 index 0000000000..20f3f6bbe9 --- /dev/null +++ b/docs/kcl/types/ElseIf.md @@ -0,0 +1,24 @@ +--- +title: "ElseIf" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `cond` |[`Expr`](/docs/kcl/types/Expr)| | No | +| `then_val` |[`Program`](/docs/kcl/types/Program)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/Environment.md b/docs/kcl/types/Environment.md new file mode 100644 index 0000000000..d2ed592d90 --- /dev/null +++ b/docs/kcl/types/Environment.md @@ -0,0 +1,21 @@ +--- +title: "Environment" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `bindings` |`object`| | No | +| `parent` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | + + diff --git a/docs/kcl/types/EnvironmentRef.md b/docs/kcl/types/EnvironmentRef.md new file mode 100644 index 0000000000..229306509e --- /dev/null +++ b/docs/kcl/types/EnvironmentRef.md @@ -0,0 +1,16 @@ +--- +title: "EnvironmentRef" +excerpt: "An index pointing to an environment." +layout: manual +--- + +An index pointing to an environment. + +**Type:** `integer` (`uint`) + + + + + + + diff --git a/docs/kcl/types/Expr.md b/docs/kcl/types/Expr.md new file mode 100644 index 0000000000..b3e70b63b7 --- /dev/null +++ b/docs/kcl/types/Expr.md @@ -0,0 +1,297 @@ +--- +title: "Expr" +excerpt: "An expression can be evaluated to yield a single KCL value." +layout: manual +--- + +An expression can be evaluated to yield a single KCL value. + + + + + +**This schema accepts exactly one of the following:** + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Literal`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `value` |[`LiteralValue`](/docs/kcl/types/LiteralValue)| An expression can be evaluated to yield a single KCL value. | No | +| `raw` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`Identifier`](/docs/kcl/types/Identifier)| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `name` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `value` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `BinaryExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `operator` |[`BinaryOperator`](/docs/kcl/types/BinaryOperator)| An expression can be evaluated to yield a single KCL value. | No | +| `left` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| An expression can be evaluated to yield a single KCL value. | No | +| `right` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| An expression can be evaluated to yield a single KCL value. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`FunctionExpression`](/docs/kcl/types/FunctionExpression)| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `params` |`[` [`Parameter`](/docs/kcl/types/Parameter) `]`| | No | +| `body` |[`Program`](/docs/kcl/types/Program)| An expression can be evaluated to yield a single KCL value. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `CallExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `callee` |[`Identifier`](/docs/kcl/types/Identifier)| An expression can be evaluated to yield a single KCL value. | No | +| `arguments` |`[` [`Expr`](/docs/kcl/types/Expr) `]`| | No | +| `optional` |`boolean`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `PipeExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `body` |`[` [`Expr`](/docs/kcl/types/Expr) `]`| | No | +| `nonCodeMeta` |[`NonCodeMeta`](/docs/kcl/types/NonCodeMeta)| An expression can be evaluated to yield a single KCL value. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `PipeSubstitution`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `ArrayExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `elements` |`[` [`Expr`](/docs/kcl/types/Expr) `]`| | No | +| `nonCodeMeta` |[`NonCodeMeta`](/docs/kcl/types/NonCodeMeta)| An expression can be evaluated to yield a single KCL value. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `ObjectExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `properties` |`[` [`ObjectProperty`](/docs/kcl/types/ObjectProperty) `]`| | No | +| `nonCodeMeta` |[`NonCodeMeta`](/docs/kcl/types/NonCodeMeta)| An expression can be evaluated to yield a single KCL value. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `MemberExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `object` |[`MemberObject`](/docs/kcl/types/MemberObject)| An expression can be evaluated to yield a single KCL value. | No | +| `property` |[`LiteralIdentifier`](/docs/kcl/types/LiteralIdentifier)| An expression can be evaluated to yield a single KCL value. | No | +| `computed` |`boolean`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `UnaryExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `operator` |[`UnaryOperator`](/docs/kcl/types/UnaryOperator)| An expression can be evaluated to yield a single KCL value. | No | +| `argument` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| An expression can be evaluated to yield a single KCL value. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `IfExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `cond` |[`Expr`](/docs/kcl/types/Expr)| An expression can be evaluated to yield a single KCL value. | No | +| `then_val` |[`Program`](/docs/kcl/types/Program)| An expression can be evaluated to yield a single KCL value. | No | +| `else_ifs` |`[` [`ElseIf`](/docs/kcl/types/ElseIf) `]`| | No | +| `final_else` |[`Program`](/docs/kcl/types/Program)| An expression can be evaluated to yield a single KCL value. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- +KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application). + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `None`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | + + +---- + + + + diff --git a/docs/kcl/types/FunctionExpression.md b/docs/kcl/types/FunctionExpression.md new file mode 100644 index 0000000000..5ad84fc1d5 --- /dev/null +++ b/docs/kcl/types/FunctionExpression.md @@ -0,0 +1,24 @@ +--- +title: "FunctionExpression" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `params` |`[` [`Parameter`](/docs/kcl/types/Parameter) `]`| | No | +| `body` |[`Program`](/docs/kcl/types/Program)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/Identifier.md b/docs/kcl/types/Identifier.md new file mode 100644 index 0000000000..a07e5a9ae3 --- /dev/null +++ b/docs/kcl/types/Identifier.md @@ -0,0 +1,23 @@ +--- +title: "Identifier" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `name` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/KclValue.md b/docs/kcl/types/KclValue.md new file mode 100644 index 0000000000..6c0bf166a0 --- /dev/null +++ b/docs/kcl/types/KclValue.md @@ -0,0 +1,195 @@ +--- +title: "KclValue" +excerpt: "A memory item." +layout: manual +--- + +A memory item. + + + + + +**This schema accepts exactly one of the following:** + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `UserVal`| | No | +| `value` |``| | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`TagIdentifier`](/docs/kcl/types#tag-identifier)| | No | +| `value` |`string`| | No | +| `info` |[`TagEngineInfo`](/docs/kcl/types/TagEngineInfo)| | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `value` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- +A plane. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Plane`| | No | +| `id` |`string`| The id of the plane. | No | +| `value` |[`PlaneType`](/docs/kcl/types/PlaneType)| A memory item. | No | +| `origin` |[`Point3d`](/docs/kcl/types/Point3d)| Origin of the plane. | No | +| `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s X axis be? | No | +| `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s Y axis be? | No | +| `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | + + +---- +A face. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Face`| | No | +| `id` |`string`| The id of the face. | No | +| `value` |`string`| The tag of the face. | No | +| `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s X axis be? | No | +| `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s Y axis be? | No | +| `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | +| `solid` |[`Solid`](/docs/kcl/types/Solid)| The solid the face is on. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | + + +---- +An solid is a collection of extrude surfaces. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`Solid`](/docs/kcl/types/Solid)| | No | +| `id` |`string`| The id of the solid. | No | +| `value` |`[` [`ExtrudeSurface`](/docs/kcl/types/ExtrudeSurface) `]`| The extrude surfaces. | No | +| `sketch` |[`Sketch`](/docs/kcl/types/Sketch)| The sketch. | No | +| `height` |`number`| The height of the solid. | No | +| `startCapId` |`string`| The id of the extrusion start cap | No | +| `endCapId` |`string`| The id of the extrusion end cap | No | +| `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Solids`| | No | +| `value` |`[` [`Solid`](/docs/kcl/types/Solid) `]`| | No | + + +---- +Data for an imported geometry. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`ImportedGeometry`](/docs/kcl/types/ImportedGeometry)| | No | +| `id` |`string`| The ID of the imported geometry. | No | +| `value` |`[` `string` `]`| The original file paths. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Function`| | No | +| `expression` |[`FunctionExpression`](/docs/kcl/types/FunctionExpression)| A memory item. | No | +| `memory` |[`ProgramMemory`](/docs/kcl/types/ProgramMemory)| A memory item. | No | +| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No | + + +---- + + + + diff --git a/docs/kcl/types/LiteralIdentifier.md b/docs/kcl/types/LiteralIdentifier.md new file mode 100644 index 0000000000..654d7e5019 --- /dev/null +++ b/docs/kcl/types/LiteralIdentifier.md @@ -0,0 +1,56 @@ +--- +title: "LiteralIdentifier" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`Identifier`](/docs/kcl/types/Identifier)| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `name` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `Literal`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `value` |[`LiteralValue`](/docs/kcl/types/LiteralValue)| | No | +| `raw` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + + + + diff --git a/docs/kcl/types/LiteralValue.md b/docs/kcl/types/LiteralValue.md new file mode 100644 index 0000000000..1535d501ce --- /dev/null +++ b/docs/kcl/types/LiteralValue.md @@ -0,0 +1,57 @@ +--- +title: "LiteralValue" +excerpt: "" +layout: manual +--- + + + + + +**This schema accepts any of the following:** + + +**Type:** `integer` (`int64`) + + + + + + + +---- + +**Type:** `number` (`double`) + + + + + + + +---- + +**Type:** `string` + + + + + + + +---- + +**Type:** `boolean` + + + + + + + +---- + + + + + diff --git a/docs/kcl/types/MemberObject.md b/docs/kcl/types/MemberObject.md new file mode 100644 index 0000000000..568ab0bc21 --- /dev/null +++ b/docs/kcl/types/MemberObject.md @@ -0,0 +1,57 @@ +--- +title: "MemberObject" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `MemberExpression`| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `object` |[`MemberObject`](/docs/kcl/types/MemberObject)| | No | +| `property` |[`LiteralIdentifier`](/docs/kcl/types/LiteralIdentifier)| | No | +| `computed` |`boolean`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: [`Identifier`](/docs/kcl/types/Identifier)| | No | +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `name` |`string`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + +---- + + + + diff --git a/docs/kcl/types/NonCodeMeta.md b/docs/kcl/types/NonCodeMeta.md new file mode 100644 index 0000000000..14b14d4c89 --- /dev/null +++ b/docs/kcl/types/NonCodeMeta.md @@ -0,0 +1,22 @@ +--- +title: "NonCodeMeta" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `nonCodeNodes` |`object`| | No | +| `start` |`[` [`NonCodeNode`](/docs/kcl/types/NonCodeNode) `]`| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/NonCodeNode.md b/docs/kcl/types/NonCodeNode.md new file mode 100644 index 0000000000..2209de97a0 --- /dev/null +++ b/docs/kcl/types/NonCodeNode.md @@ -0,0 +1,23 @@ +--- +title: "NonCodeNode" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `value` |[`NonCodeValue`](/docs/kcl/types/NonCodeValue)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/NonCodeValue.md b/docs/kcl/types/NonCodeValue.md new file mode 100644 index 0000000000..87a7c56118 --- /dev/null +++ b/docs/kcl/types/NonCodeValue.md @@ -0,0 +1,103 @@ +--- +title: "NonCodeValue" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + +A shebang. This is a special type of comment that is at the top of the file. It looks like this: ```python,no_run #!/usr/bin/env python ``` + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `shebang`| | No | +| `value` |`string`| | No | + + +---- +An inline comment. Here are examples: `1 + 1 // This is an inline comment`. `1 + 1 /* Here's another */`. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `inlineComment`| | No | +| `value` |`string`| | No | +| `style` |[`CommentStyle`](/docs/kcl/types/CommentStyle)| | No | + + +---- +A block comment. An example of this is the following: ```python,no_run /* This is a block comment */ 1 + 1 ``` Now this is important. The block comment is attached to the next line. This is always the case. Also the block comment doesn't have a new line above it. If it did it would be a `NewLineBlockComment`. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `blockComment`| | No | +| `value` |`string`| | No | +| `style` |[`CommentStyle`](/docs/kcl/types/CommentStyle)| | No | + + +---- +A block comment that has a new line above it. The user explicitly added a new line above the block comment. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `newLineBlockComment`| | No | +| `value` |`string`| | No | +| `style` |[`CommentStyle`](/docs/kcl/types/CommentStyle)| | No | + + +---- + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `type` |enum: `newLine`| | No | + + +---- + + + + diff --git a/docs/kcl/types/ObjectProperty.md b/docs/kcl/types/ObjectProperty.md new file mode 100644 index 0000000000..57b1ea3318 --- /dev/null +++ b/docs/kcl/types/ObjectProperty.md @@ -0,0 +1,24 @@ +--- +title: "ObjectProperty" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `key` |[`Identifier`](/docs/kcl/types/Identifier)| | No | +| `value` |[`Expr`](/docs/kcl/types/Expr)| | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/Parameter.md b/docs/kcl/types/Parameter.md new file mode 100644 index 0000000000..7700601389 --- /dev/null +++ b/docs/kcl/types/Parameter.md @@ -0,0 +1,23 @@ +--- +title: "Parameter" +excerpt: "Parameter of a KCL function." +layout: manual +--- + +Parameter of a KCL function. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `identifier` |[`Identifier`](/docs/kcl/types/Identifier)| The parameter's label or name. | No | +| `optional` |`boolean`| Is the parameter optional? | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/Program.md b/docs/kcl/types/Program.md new file mode 100644 index 0000000000..b33b63e9be --- /dev/null +++ b/docs/kcl/types/Program.md @@ -0,0 +1,25 @@ +--- +title: "Program" +excerpt: "A KCL program top level, or function body." +layout: manual +--- + +A KCL program top level, or function body. + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `body` |`[` [`BodyItem`](/docs/kcl/types/BodyItem) `]`| | No | +| `nonCodeMeta` |[`NonCodeMeta`](/docs/kcl/types/NonCodeMeta)| A KCL program top level, or function body. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/ProgramMemory.md b/docs/kcl/types/ProgramMemory.md new file mode 100644 index 0000000000..b6bd5c0955 --- /dev/null +++ b/docs/kcl/types/ProgramMemory.md @@ -0,0 +1,22 @@ +--- +title: "ProgramMemory" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `environments` |`[` [`Environment`](/docs/kcl/types/Environment) `]`| | No | +| `currentEnv` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `return` |[`KclValue`](/docs/kcl/types/KclValue)| | No | + + diff --git a/docs/kcl/types/UnaryOperator.md b/docs/kcl/types/UnaryOperator.md new file mode 100644 index 0000000000..6a2e8fbd4a --- /dev/null +++ b/docs/kcl/types/UnaryOperator.md @@ -0,0 +1,41 @@ +--- +title: "UnaryOperator" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + +Negate a number. + +**enum:** `-` + + + + + + + + +---- +Negate a boolean. + +**enum:** `!` + + + + + + + + +---- + + + + diff --git a/docs/kcl/types/VariableDeclarator.md b/docs/kcl/types/VariableDeclarator.md new file mode 100644 index 0000000000..5af68d91ac --- /dev/null +++ b/docs/kcl/types/VariableDeclarator.md @@ -0,0 +1,24 @@ +--- +title: "VariableDeclarator" +excerpt: "" +layout: manual +--- + + +**Type:** `object` + + + + + +## Properties + +| Property | Type | Description | Required | +|----------|------|-------------|----------| +| `start` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `end` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No | +| `id` |[`Identifier`](/docs/kcl/types/Identifier)| The identifier of the variable. | No | +| `init` |[`Expr`](/docs/kcl/types/Expr)| The value of the variable. | No | +| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | + + diff --git a/docs/kcl/types/VariableKind.md b/docs/kcl/types/VariableKind.md new file mode 100644 index 0000000000..5ae17e3b22 --- /dev/null +++ b/docs/kcl/types/VariableKind.md @@ -0,0 +1,65 @@ +--- +title: "VariableKind" +excerpt: "" +layout: manual +--- + + + + + + +**This schema accepts exactly one of the following:** + +Declare a variable. + +**enum:** `let` + + + + + + + + +---- +Declare a variable that is read-only. + +**enum:** `const` + + + + + + + + +---- +Declare a function. + +**enum:** `fn` + + + + + + + + +---- +Declare a variable. + +**enum:** `var` + + + + + + + + +---- + + + + diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png index fa3cdd90ad..53ae015f67 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-linux.png index 96d71c8977..371d2e9ada 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png index 42b65ae7a5..7d43825996 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-2-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-2-Google-Chrome-linux.png index e81ddfe855..4023c1f2d9 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-2-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-2-Google-Chrome-linux.png differ diff --git a/src/wasm-lib/kcl/src/docs/mod.rs b/src/wasm-lib/kcl/src/docs/mod.rs index f661aca6d3..4bc87bd0f3 100644 --- a/src/wasm-lib/kcl/src/docs/mod.rs +++ b/src/wasm-lib/kcl/src/docs/mod.rs @@ -81,6 +81,8 @@ impl StdLibFnArg { } else if self.type_ == "TagIdentifier" && self.required { // TODO: actually use the ast to populate this. return Ok(Some((index, format!("${{{}:{}}}", index, "myTag")))); + } else if self.type_ == "[KclValue]" && self.required { + return Ok(Some((index, "[0..9]".to_owned()))); } get_autocomplete_snippet_from_schema(&self.schema.schema.clone().into(), index) } @@ -903,6 +905,12 @@ mod tests { ); } + #[test] + fn get_autocomplete_snippet_map() { + let map_fn: Box = Box::new(crate::std::array::Map); + let _snippet = map_fn.to_autocomplete_snippet().unwrap(); + } + #[test] fn get_autocomplete_snippet_pattern_linear_2d() { let pattern_fn: Box = Box::new(crate::std::patterns::PatternLinear2D); diff --git a/src/wasm-lib/kcl/src/std/args.rs b/src/wasm-lib/kcl/src/std/args.rs index a93010ba91..bed601892c 100644 --- a/src/wasm-lib/kcl/src/std/args.rs +++ b/src/wasm-lib/kcl/src/std/args.rs @@ -4,13 +4,14 @@ use anyhow::Result; use kcmc::{websocket::OkWebSocketResponseData, ModelingCmd}; use kittycad_modeling_cmds as kcmc; use serde::de::DeserializeOwned; +use serde_json::Value as JValue; use crate::{ ast::types::{parse_json_number_as_f64, TagDeclarator}, errors::{KclError, KclErrorDetails}, executor::{ ExecState, ExecutorContext, ExtrudeSurface, KclValue, Metadata, Sketch, SketchSet, SketchSurface, Solid, - SolidSet, SourceRange, TagIdentifier, + SolidSet, SourceRange, TagIdentifier, UserVal, }, std::{shapes::SketchOrSurface, sketch::FaceTag, FnAsArg}, }; @@ -497,18 +498,6 @@ where } } -impl<'a> FromArgs<'a> for KclValue { - fn from_args(args: &'a Args, i: usize) -> Result { - let Some(v) = args.args.get(i) else { - return Err(KclError::Semantic(KclErrorDetails { - message: format!("Argument at index {i} was missing",), - source_ranges: vec![args.source_range], - })); - }; - Ok(v.to_owned()) - } -} - impl<'a, T> FromArgs<'a> for Option where T: FromKclValue<'a> + Sized, @@ -587,6 +576,20 @@ impl<'a> FromKclValue<'a> for i64 { } } +impl<'a> FromKclValue<'a> for UserVal { + fn from_mem_item(arg: &'a KclValue) -> Option { + arg.as_user_val().map(|x| x.to_owned()) + } +} + +impl<'a> FromKclValue<'a> for Vec { + fn from_mem_item(arg: &'a KclValue) -> Option { + arg.as_user_val() + .and_then(|uv| uv.value.as_array()) + .map(ToOwned::to_owned) + } +} + impl<'a> FromKclValue<'a> for TagDeclarator { fn from_mem_item(arg: &'a KclValue) -> Option { arg.get_tag_declarator().ok() @@ -599,6 +602,12 @@ impl<'a> FromKclValue<'a> for TagIdentifier { } } +impl<'a> FromKclValue<'a> for KclValue { + fn from_mem_item(arg: &'a KclValue) -> Option { + Some(arg.clone()) + } +} + macro_rules! impl_from_arg_via_json { ($typ:path) => { impl<'a> FromKclValue<'a> for $typ { @@ -609,6 +618,15 @@ macro_rules! impl_from_arg_via_json { }; } +impl<'a, T> FromKclValue<'a> for Vec +where + T: serde::de::DeserializeOwned + FromKclValue<'a>, +{ + fn from_mem_item(arg: &'a KclValue) -> Option { + from_user_val(arg) + } +} + macro_rules! impl_from_arg_for_array { ($n:literal) => { impl<'a, T> FromKclValue<'a> for [T; $n] @@ -722,23 +740,3 @@ impl<'a> FromKclValue<'a> for SketchSurface { } } } - -impl<'a> FromKclValue<'a> for Vec { - fn from_mem_item(arg: &'a KclValue) -> Option { - let KclValue::UserVal(uv) = arg else { - return None; - }; - - uv.get::>().map(|x| x.0) - } -} - -impl<'a> FromKclValue<'a> for Vec { - fn from_mem_item(arg: &'a KclValue) -> Option { - let KclValue::UserVal(uv) = arg else { - return None; - }; - - uv.get::>().map(|x| x.0) - } -} diff --git a/src/wasm-lib/kcl/src/std/array.rs b/src/wasm-lib/kcl/src/std/array.rs index 81b3216dfa..22c287f504 100644 --- a/src/wasm-lib/kcl/src/std/array.rs +++ b/src/wasm-lib/kcl/src/std/array.rs @@ -1,4 +1,5 @@ use derive_docs::stdlib; +use serde_json::Value as JValue; use super::{args::FromArgs, Args, FnAsArg}; use crate::{ @@ -7,6 +8,94 @@ use crate::{ function_param::FunctionParam, }; +/// Apply a function to each element of an array. +pub async fn map(exec_state: &mut ExecState, args: Args) -> Result { + let (array, f): (Vec, FnAsArg<'_>) = FromArgs::from_args(&args, 0)?; + let array: Vec = array + .into_iter() + .map(|jval| { + KclValue::UserVal(UserVal { + value: jval, + meta: vec![args.source_range.into()], + }) + }) + .collect(); + let map_fn = FunctionParam { + inner: f.func, + fn_expr: f.expr, + meta: vec![args.source_range.into()], + ctx: args.ctx.clone(), + memory: *f.memory, + }; + let new_array = inner_map(array, map_fn, exec_state, &args).await?; + let uv = UserVal::new(vec![args.source_range.into()], new_array); + Ok(KclValue::UserVal(uv)) +} + +/// Apply a function to every element of a list. +/// +/// Given a list like `[a, b, c]`, and a function like `f`, returns +/// `[f(a), f(b), f(c)]` +/// ```no_run +/// const r = 10 // radius +/// fn drawCircle = (id) => { +/// return startSketchOn("XY") +/// |> circle({ center: [id * 2 * r, 0], radius: r}, %) +/// } +/// +/// // Call `drawCircle`, passing in each element of the array. +/// // The outputs from each `drawCircle` form a new array, +/// // which is the return value from `map`. +/// const circles = map( +/// [1..3], +/// drawCircle +/// ) +/// ``` +/// ```no_run +/// const r = 10 // radius +/// // Call `map`, using an anonymous function instead of a named one. +/// const circles = map( +/// [1..3], +/// (id) => { +/// return startSketchOn("XY") +/// |> circle({ center: [id * 2 * r, 0], radius: r}, %) +/// } +/// ) +/// ``` +#[stdlib { + name = "map", +}] +async fn inner_map<'a>( + array: Vec, + map_fn: FunctionParam<'a>, + exec_state: &mut ExecState, + args: &'a Args, +) -> Result, KclError> { + let mut new_array = Vec::with_capacity(array.len()); + for elem in array { + let new_elem = call_map_closure(elem, &map_fn, args.source_range, exec_state).await?; + new_array.push(new_elem); + } + Ok(new_array) +} + +async fn call_map_closure<'a>( + input: KclValue, + map_fn: &FunctionParam<'a>, + source_range: SourceRange, + exec_state: &mut ExecState, +) -> Result { + let output = map_fn.call(exec_state, vec![input]).await?; + let source_ranges = vec![source_range]; + let output = output.ok_or_else(|| { + KclError::Semantic(KclErrorDetails { + message: "Map function must return a value".to_string(), + source_ranges, + }) + })?; + Ok(output) +} + /// For each item in an array, update a value. pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result { let (array, start, f): (Vec, Sketch, FnAsArg<'_>) = FromArgs::from_args(&args, 0)?; diff --git a/src/wasm-lib/kcl/src/std/mod.rs b/src/wasm-lib/kcl/src/std/mod.rs index 13929d9870..a8681457f2 100644 --- a/src/wasm-lib/kcl/src/std/mod.rs +++ b/src/wasm-lib/kcl/src/std/mod.rs @@ -98,6 +98,7 @@ lazy_static! { Box::new(crate::std::patterns::PatternCircular3D), Box::new(crate::std::patterns::PatternTransform), Box::new(crate::std::array::Reduce), + Box::new(crate::std::array::Map), Box::new(crate::std::chamfer::Chamfer), Box::new(crate::std::fillet::Fillet), Box::new(crate::std::fillet::GetOppositeEdge), diff --git a/src/wasm-lib/kcl/tests/outputs/serial_test_example_map0.png b/src/wasm-lib/kcl/tests/outputs/serial_test_example_map0.png new file mode 100644 index 0000000000..dbe80dfce8 Binary files /dev/null and b/src/wasm-lib/kcl/tests/outputs/serial_test_example_map0.png differ diff --git a/src/wasm-lib/kcl/tests/outputs/serial_test_example_map1.png b/src/wasm-lib/kcl/tests/outputs/serial_test_example_map1.png new file mode 100644 index 0000000000..dbe80dfce8 Binary files /dev/null and b/src/wasm-lib/kcl/tests/outputs/serial_test_example_map1.png differ