diff --git a/docs/kcl/appearance.md b/docs/kcl/appearance.md index 89bfb3e75..1a2fbaba6 100644 --- a/docs/kcl/appearance.md +++ b/docs/kcl/appearance.md @@ -71,8 +71,18 @@ example0 = cube([0, 0]) example1 = cube([20, 0]) example2 = cube([40, 0]) -appearance([example0, example1], color = '#ff0000', metalness = 50, roughness = 50) -appearance(example2, color = '#00ff00', metalness = 50, roughness = 50) +appearance( + [example0, example1], + color = '#ff0000', + metalness = 50, + roughness = 50, +) +appearance( + example2, + color = '#00ff00', + metalness = 50, + roughness = 50, +) ``` ![Rendered example of appearance 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD0IUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq676b3fNNdc8+MyZMw9+ndd5nffiqquuuuqqq/53E2CekwDznASY5yTAPCcB5jkJMM9JgHlOAsxzEmCekwDznASY5yTAPCcB5jkJMM9JgHlOAsxzEmCekwDznASY5yTAPCcB5jkJMM9JgHlOAsxzEmCekwDznPQP//APv/0P//APv33ffffdylVXXXXVVf+d0IMe9CCuuuqqq6767/W5n/u5v/ViL/Zir33p7ru56qr/D45dfz0Al+6+mxfGXHXV/w3Hr7+e+929ezf/I5irrvpPdf2J67nvvvtu/ZAP+ZCHcNVVV1111X8n9KAHPYirrrrqqqv++3zu537ub73Yi73Ya//ud34nv/ed38m/lbjqqv845j/Xh//Yj3Hs+uv5/o/4CJ7xV3/FfyTzP495Edj8RzP/dcx/PvOfy/znMPDgl3kZ3vfrv567d+/m7b/y7fkPY/7jmf8c5j+e+Tcz5nmY/3jmP575j2X+4xne7w3ej/d7w/fjvvvuu/VDPuRDHsJVV1111VX/XQiuuuqqq676b/O5n/u5v/ViL/Zir/23v/iL/P53ficCBAgQIECAAAECBAgQIECAuOqq/1gCBAgQIECAAAECBAgQIECAAAECxAt27PrrAXjGX/0V/9EECBAgQIAAAQIECBAg/msIECBAgAABAgQIkAQSSCCB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BAgQIP59BPfs3sOHf8uHc8011zz4wz/8w7/rmmuueTBXXXXVVVf9VyC46qqrrrrqP90111zz4A//8A//LoAf/IiP4Pa/+isECBAgQIAAAQIECBAgQPzfJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAHi/z4BAgQIECBAgAABAgQIECBAgADxgt3yMi8DwG1/9Vf8RxIgQIAAAQIECBAgQPznEiBAgAABAgQIEP/xBAgQIECAAAECxH8sAQIECBAgQBKSQAIJJJBA4l9LgAABAgQIEP9+AgQIECBAgPj3EyBAgAAB4jn99S/9EgDXHb+OF5kAAQIECBD/PgIECBAgQPz7CBAgQID49xEgQIAAAeLfR4AAAQLEv48AAQIEiH+REEIIIYQQzyJAgAAB4t9HgAABAsS/jwABAgSIf7W7L97N5//o53PNNdc8+HM+53N+65prrnkwV1111VVX/WcjuOqqq6666j/dh3/4h3/Xi73Yi732L3zBF3DbX/0V/90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD/OwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIP7nEiBAgAABL/kmb8Kx668HYO+eexAgQIAA8V9DgAABAgQIECBAgADxn0OAAAECBAgQIED8xxMgQIAAAQLEfzwBAgQIECAJSSCBBBJI/FsIECBAgAAB4t9PgAABAgSIfz8BAgRcuvtubv2rv+L649fzMg9+Gf5dBAgQIED8+wkQIECA+PcRIECAAAHi30eAAAECxL+PAAECBIh/HwECBAgQ/yIhhBBCCCGeRYAAAQLEv48AAQIEiH8fAQIECBD/ol/8i1/k83/087nmmmse/Lmf+7m/zVVXXXXVVf/ZCK666qqrrvpP9bmf+7m/9WIv9mKv/fvf+Z383S/9Ev9aAgQIECBAgAABAgQIECBAgAABAgQIECCu+r9EgAABAgQIECBAgAABAgQIECBAgAAB4j/XseuvB+DvfvEXeUEECBAgQIAAAQIECBAg/vMJECBAgAABAgQIEP/xBAgQIECAAAECxH8cAQIECBAgQID4jyVAgAABkpCEJJBAAgkk/i0ECBAgQID49xMgQIAAAQLEv82tf/mXALzMg18GBAgQIED8+wgQIECAAPHvI0CAAAECxL+PAAECBIh/HwECBAgQIP7tBAgQIECA+LcTIECAAAHihRJCCCGEEOJZBAgQIED8+wgQIECA+PcRIECAAPE8fvEvfpHv+LXv4MyZMw/68A//8O/iqquuuuqq/0xUrrrqqquu+k/zuZ/7ub/1Yi/2Yq9921/9FX/wnd+J+P9L/N9j/u8R/z7mBXuJN3kTAG77q7/iP4p40Zn/POJfZv5jiRfO/McQL5j5jyOei8T9zAPY/GuJF8z8+4jnz7xgz/irvwLgTV/6TfnO3/lOnod4/sy/nXj+zL+deF7m3048f+bfTjwv828nnpf5txPPy7xAQjw3Yy4Tz8v824nnZf7txPP4jl//DgDe7w3e770Bvv7rv/59uOqqq6666j8DwVVXXXXVVf8p3vEd3/GzXuzFXuy1b/urv+KHPuIj+O8mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD/NwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECxP9MAgQIECBAgIBj118PwN//0i8hQIAA8V9DgAABAgQIECBAgADxn0OAAAECBAgQIED8xxIgQIAAAQIEiP8YAgQIECBAgADxH0eAAAGSkIQkJIEEEv9WAgQIECBA/PsJECBAgABxxe499wBw/fHruf749bzIBAgQIECA+PcRIECAAAHi306AAAECBIh/HwECBAgQ/z4CBAgQIP59BAgQIED8+wgQIECAeKGEEEIIIZ6DAAECBIh/HwECBAgQ/z6CX/jLX+Avn/aXvM7rvM57v+M7vuNncdVVV1111X8GyvHjx7nqqquuuuo/1ou92Iu99kd8xEd896W77+a73+d9+LcQIECAAAECBAgQIECAAAECBAgQIECAuOr/IgECBAgQIECAAAECBAgQIECAAAECBIj/XC/xJm/CI17zNfm7X/xFnvx7v8dzEyBAgAABAgQIECBAgPjPJ0CAAAECBAgQIP5zCBAgQIAAAQLEfywBAgQIECBA/McRIECAAAECxH8cAQIkIQlJSAIJJP6tBAgQIECA+PcTsD444EEv+7Icv/56nnzvk3nyvU/m30WAAAECxL+fAAECBIh/HwECBAgQ/z4CBAgQIP59BAgQIED8+wgQIECA+PcRIECAAPECCSGEEEII8RwECBAgQPz7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AQIECBAgXrDHvsmbAPC4X/ol9u65h38PAQIECBAgQIAAAeI/hwABAgQIECBA/McSIECAAAECxL+SBBJIIIEEEgIECBAgQID49xMgQIAAAQLEv48AAQIECBD/PgIECBAgQPz7CBAgQID499m75x5u+6u/4vpj1/MyD3oZEP8+AgQIECD+7QQIECBA/KsIIYQQQiBAgAAB4t9OgAABAsS/nQABAsS/nQABAgSIfzsBAgQIEP92AgQIEP92AgQIECD+7QQIECD+ze7evZuP+I6P4MyZMw/68A//8O+65pprHsxVV1111VX3I7jqqquuuuqya6655sEf/uEf/l0AP/6RH8kdf/VX/FcRIECAAAECBAgQIECAAAECBAgQIECAuOp/IgECBAgQIECAAAECBAgQIECAAAECxP8MAgQIECBAwM0v8zLcT4D4zydAgAABAgQIECD+4wkQIECAAAECxH8cAQIECBAgQPwrSCCBBBJIIAEgQIAAAQLEfwwBAgQIECD+fQQIECBAgPj3ESBAgADx7yNAgAABAsSL7hl/9VcAvMlLvgkACBAgQID49xEgQIAA8W8nQIAAAeJFJoQQQgghBAIECBAg/u0ECBAg/u0ECBAgQPzbCRAgQID4txMgQID4txMgQIAA8W8nQIAA8W8nQIAAAeJFdvfu3XzBT3wB11xzzYM/53M+57euueaaB3PVVVdddRUAwVVXXXXVVZd9+Id/+He92Iu92Gv/6hd+IXf81V/xryFAgAABAgQIECBAgAABAgQIEFdd9a8jQIAAAQIECBAgQIAAAQIECBD/uW56mZcB4I+/8zu5nwABAgQIECBAgADxn0uAAAECBAgQIP7jCRAgQIAAAeI/jgABAgQIECBeRBJIIIEEEkgACBAgQIAAAeLfT4AAAQLEv58AAQIEiH8fAQIECBAg/n0ECBAgQDx/t/3VXwHwMre8DC+QAAECBIh/HwECBIh/HwECBIh/FSGEEEIIAAQIECD+7QQIECBA/NsJECBAgPi3EyBAgPi3EyBAgADxbydAgADxbydAgAAB4t9OgAAB4oX6xb/6Rb7jN7+Da6655sGf8zmf81tcddVVV10FQHDVVVdddRWf+7mf+1sv9mIv9tp//J3fyeN/6ZcQIECAAAECBAgQIECA+J9LgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsT/DgIECBAgQIAAAQIECBD/OjvXXQfA3j338K8lQIAAAQIECBAgQPznECBAgAABAgSI/1gCBAgQIECA+I8jQIAAAQLEi0gCCSSQQAKJ+wkQIECAAPHvI0CAAAECxL+PAAECBAgQ/z4CBAgQIP59BAgQIEDAbX/1VwBcf+x6XuaWl+FFJkCAAAHi306AAAECxL+dAAECBIgXmRBCCCGEEAgQIECA+LcTIECAAPFvJ0CAAPFvJ0CAAAHi306AAAHi306AAAECxL+dAAECxL+dAAECxPP4zt/8Tr7jN7+Da6655sEf/uEf/l1cddVVV11F5aqrrrrq/7kP//AP/64Xe7EXe+07/uqv+JPv+i7+u4ir/i8Q/7HMfz/xonnsm7wJAI/7pV/iP5P4l5n/WOKFM/8xxAtm/v3E82deBBLPw+Z+4vkz/3bi+TP/duJ5mX878bzMv52A2/7qr7jlZV6Gl3nQy/BXt/8VmH8b8bzMv414XubfRjwv8yIR4oGMQTwv828jnpP5txHPy/zbiOdk/m3E8zL/NuI5mX8b8ZzMv414Ht/5m98JwPu97vu9N8DXf/3Xvw9XXXXVVf9/EVx11VVX/T/2ju/4jp/1Oq/zOu99x1/9FT/xkR/Jv4cAAQIECBAgQIAAAQIECBAgQFx11fMnQIAAAQIECBAgQIAAAQIECBD/tR7zJm8CwJ1/9VcIECBAgAABAgSI/1wCBAgQIECAAPEfT4AAAQIECBD/cQQIECBAgADx7ydAgAABAgSIf4EEEkgggQQSDyRAgAAB4t9PgAABAsS/jwABAgQIEP92AgQIECD+dX7/O78TgJe55WW4TIAAAQLEv50AAQIEiH87AQIECBD/dgIECBAgXiRCCCGEEM8iQIAA8W8nQIAAAeLfToAAAeLfToAAAQLEv50AAQLEv50AAQLEv50AAQIEiH87wS/91S/xV0//K17ndV7nvd/xHd/xs7jqqquu+v+L4Kqrrrrq/6kXe7EXe+13eqd3+uy9e+7hJz7yI3kgAQIECBAgQIAAAQIECBD/8wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIP53ESBAgAABAgQIECBAgADxb3fTy7wMAI/7pV/iRSFAgAABAgQIECBA/OcQIECAAAECBIj/WAIECBAgQID4jyNAgAABAsR/DAECBAgQIP4FEkgggQQSDyRAgAABAsS/jwABAgQIEP8+AgQIECD+7QQIECBAvGCX7r4bgOuOXccLJECAAAHi306AAAECxL+dAAECBIh/OwECBIgXiRBCCCGEEAAIECBAgPi3EyBAgPi3EyBAgADxbydAgADxbydAgADxbydAgAAB4t9OgAAB4l/l7t27+YKf/ALu3r2bd3qnd/rsd3zHd/wsrrrqqqv+fyK46qqrrvp/6MVe7MVe+3M/93N/a++ee/jJj/gIBAgQIP57CRAgQIAAAQIECBAgQIAAAQIkIQlJSEISkpAEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSCCBBBJIICEJAQIECBAgQIAAAQIECBAgQIAAAQIECBD/cwgQIECAAAECBAgQIJ7tsW/yJgA87pd+if9oAgQIECBAgADxn0OAAAECBAgQIP7jCBAgQIAAAeI/hgABAgQIEP8xBAgQIED8CySQQAIJJJ6bAAECBAgQ/z4CBAgQIP59BAgQIED82wkQIECAuOLSPfdw21/9Fdcfu56XueVleJEJECBAgPi3EyBAgADxbydAgADxbydAgAAB4kUihBBCCPEsAgQIEP92AgQIECD+7QQIECD+7QQIECD+7QQIECBA/NsJECBA/NsJECBA/Ivu3r2bD/+OD+fu3bt5ndd5nfd+sRd7sdfmqquuuur/H4Krrrrqqv9nrrnmmgd/7ud+7m8B/NoXfiF799zDfyQBAgQIECBAgAABAgRIQhKSkIQkkEACCSSQQAIJJJBAAgkkkEACiav+C0kggQQSSCCBBBJIIIEEEkgggQQSSCCBBBIAAgQIECBAgAABAgQIECBAgADx30OAgJte5mUAuPOv/goBAgQIECD+8wgQIECAAAECBIj/eAIECBAgQID4jyNAgAABAsR/DAECBAgQIP79BAgQIECAeCEkkEACCSSeHwECBAgQ/z4CBAgQIP59BAgQIED82wkQcNtf/RUA7/vq78u/iwABAsS/jwABAsS/nQABAgSIfzsBAgSIF4kQQgghxLMIECBAgPi3EyBAgPi3EyBAgPi3EyBAgADxbydAgADxbydAgADxbydAgADxfN2zew8f8R0fwTXXXPPgD//wD/+uF3uxF3ttrrrqqqv+fyG46qqrrvp/5JprrnnwN33TNz0d4Cc+8iO586/+ihdEgAABAgQIECBAgCQkIQlJSAIJJJBAAgkkkEACCSSQ+O8mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLEfxMJJJBAAgkkkEACCSSQQAIJJJC4nwABAgQIECBAgAABAgSI/zg3vszLAHDnX/0VL4gAAQIECBAgQID4zyNAgAABAgQIEP+xBAgQIECAAPEfQ4AAAQIECBD/fgIECBAgQPz7CRAgQIAA8QJIIIEEEkg8PwIECBAg/n0ECBAgQID4txMgQIAA8a/z97/4iwBcf+x6ECBAgADxbydAgAAB4t9OgAABAsS/nQABAsS/nQABAgSIf5EQQgghxHMQIECA+LcTIECAAPFvI0CAAAHi306AAAHi306AAAHi306AAAHi306AAAECxGV3797N23/F23PNNdc8+MM//MO/65prrnkwV1111VX/fxBcddVVV/0/8uEf/uHfBfCTH/mR3PVXf4UAAQIkIQlJSAIJJJBAAgkkkEACif9sAgQIECBAgAABAgQIECBAgAABAgQIECBAgABx1QsiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEiP8kEkgggQQSSCCBBBJIIIHEAwkQIECAAAECBAgQIEA8f495kzdh57rrANi75x7+PQQIECBAgAABAsR/DgECBAgQIED8xxIgQIAAAQLEfwwBAgQIECD+/QQIECBAgPj3EyBAgADxAkgggQQSSDw/AgQIECBA/PsIECBAgPi3EyBAgADxgl265x5u+6u/4rpj1/Eyt7wMz0OAAAECxL+dAAECBIh/OwECBAgQ/zYCBAgQIP7tBAgQIP5FQgghhBDPQYAAAQLEv50AAQLEv50AAQLEv50AAQLEv50AAQLEv50AAQIEiH87AYK7L93N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zS/Di0SAAAECxL+dAAECxL+dAAECxL+dAAECxL+dAAECxL+NAAECBIh/GwECBIh/OwECBIjnIYQQQvyLBAgQIP5tBAgQIP7tBAgQIP7tBAgQIF6ou3fv5gt++gu4e/duXud1Xue9X+zFXuy1ueqqq67634ngqquuuup/oRd7sRd77c/93M/9LYDf/MIv5L+CAAECBAgQIECAAAECBAgQV131nAQIECBAgAABAgQIECBAgPjvIUCAAAECBNz40i8NwF1//deI/zwCBAgQIECAAPEfT4AAAQIEiP94AgQIECBAABJIIIEEEki8qAQIECBAgPj3EyBAgADx7ydAgAAB4t9OgAABAsS/jwABAgSIfzsBAgSIfx8B//BLvwTA+73q+yGEEP9qAgQIEP92AgQIEP92AgQIEP92AgQIEP92AgQIEP92AgQIEP82AgQIEP92AgQIEM9BCCGEEOJfJECAAPFvI0CAAPFvJ0CAAPFvJ0CAAPE87tm9h4/47o/gmmuuefCHf/iHf9eLvdiLvTZXXXXVVf/7EFx11VVX/S9zzTXXPPhzP/dzfwvgZz7yI7nrr/+afwsBAgQIECBAgAABAgSI/x0ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEiP+dBAgQIECAAAECBAgQIP5z3fAyLwPAXX/1VwAIECBAgAABAsR/HgECBAgQIED8xxIgQIAAAQLEfywBAgQIECAACSSQQAKJfw0BAgQIECD+fQQIECBA/PsJECBAgPi3EyBAgADx7yNAgADxbydAgAAB4l/n9r/6KwCuO3YdCBBIQhJCCPGvJkCAAAHi30aAAAECxL+NAAECBIh/GwECBIh/OwECBIh/OwECBIh/GwECBIh/OwECBIjnIIQQQgjxLxIgQID4txEgQID4txMgQID4txMgQIC47O7du3n7r357rrnmmgd/+Id/+Hddc801D+aqq6666n8Xgquuuuqq/2U+/MM//LsAfuYjP5K7/vqveSABAgQIECBAgAABAsR/PwECBAgQIECAAAECBAgQIECAAAECBAgQ/4kkkEACCSSQQAIJJJBAAgkkkEACCSSQQAIJJJBAAon/agIECBAgQIAAAQIECBAgQIAAAQIE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mgd/0zd909MBfu6jPoq7//qvESBAgAABAsR/PQECBAgQIECAAAECBAgQIEBc9X+JAAECBAgQIECAAAECBAgQIP57CRAgQIAAAQIEiOcigcT1L/MyANz9138NEkj8WwkQIECAAAHiP54AAQIECBAg/uMIECBAgADxH0OAAAECxL+fAAECBAgQ/36SkIQkJCGJfw8BAgQIEP92AgQIECD+7QQIECBA/NsJECBA/Ovc/ld/BcCbvNibgAABAsS/nQABAsS/mhBCSEISCBD/dgIECBD/NgIECBD/dgIECBD/NgIECBD/dgIECBD/NgIECBD/NgIECBD/dgIECBAIIYQQQrzIBAgQIP7tBAgQIF4kd+/ezYd/z4dzzTXXPPhzPudzfuuaa655MFddddVV/7MQXHXVVVf9D/PhH/7h3wXwcx/1Udz913/NfzYBAgQIECBAgAABAgSI//sECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA8f+HAAECBAgQIECAAAECxH89AQIECBBww0u/NAB3//VfI55JAgkkkEACCSSQ+LcQIECAAAECxH88AQIECBAg/uMIECBAgADx7ydAgAABAsS/nwABAgSIfz9JSEISkhD/PgIECBD/PgIECBD/PgIECBD/dgIECBAv3ON+6ZcAeJmbXobnIUCAAPFvJ0CAAPGvJoQQkkCAAPFvJ0CAAPFvI0CAAPFvJ0CAAPFvI0CAAPFvJ0CA+LcTIECA+LcRIECA+LcTIEBcJoQQQvyrCBAgQPzbCRAgXqi/esZf8QU/8wVcc801D/6cz/mc3+Kqq6666n8Wgquuuuqq/0E+93M/97de7MVe7LX/4ru+i7v/+q/5txIgQIAAAQIECBAgQPzPJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIj/XgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQPzPJ0CAAAECBAgQIECA+M+xfd11bF93HQD799wDgAABAgQIECBAPJMEEkgggQQS/1YCBAgQIECA+I8lQIAAAQLEfxwBAgQIEP8xBAgQIED8+wkQIECA+HeSkIQkJCFA/NsJECBAgPi3EyBAgADxbydAgADxbydAgAAB4tn27rmHO/7qr7hu5zpe5qaX4YUSIECAAPFvI0CAAAHiRSaEEEJIAgEC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ddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9X8Y97+34M3zcLUQAAAABJRU5ErkJggg==) @@ -123,11 +133,7 @@ exampleSketch = startSketchOn('XZ') example = extrude(exampleSketch, length = 1) |> appearance(color = '#ff0000', metalness = 90, roughness = 90) - |> patternLinear3d({ - axis = [1, 0, 1], - instances = 7, - distance = 6 - }, %) + |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6) ``` ![Rendered example of appearance 5](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAACjJ0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVf9r3TNNdc8+LVf+7Xf68Vf/MVf++///u9/G+BHf/RHP4errrrqqquuejb0oAc9iKuuuuqqq6666qqrrrrqqqv+d7jmmmse/Nqv/drv9eIv/uKv/WIv9mKvvX/PPTzxF3+RG17mZbjhZV6G++6779bP+qzPep377rvvVq666qqrrroK0IMe9CCuuuqqq6666qqrrrrqqquu+p/rmmuuefBrv/Zrv9frvM7rvPc111zz4P177uGJv/iL7N9zD0/6pV/ifi/3Pu/Dy7/v+3Lffffd+lu/9Vvf/aM/+qOfw1VXXXXVVf/foQc96EFcddVVV1111VVXXXXVVVdd9T/LNddc8+DXfu3Xfq/XeZ3Xee9rrrnmwfv33MMTf/EXObjnHp74S7/EC3LDy7wMb/G1XwvA13/917/Pb/3Wb303V1111VVX/X+GHvSgB3HVVVddddVVV1111VVXXXXVf79rrrnmwa/92q/9Xq/zOq/z3tdcc82D9++5hyf+4i9y91//NXf91V/xgmxfdx2PfJM34VFv+qZsX3cd97vvvvtu/ZAP+ZCHcNVVV1111f9nVK666qqrrrrqqquuuuqqq676b3PNNdc8+LVf+7Xf63Ve53Xe+5prrnnw/j338MSf/3n+5K//mrv+6q94Qbavu45Hvcmb8Mg3fVO2r7uO+x3dcw/P+OVf5jHv/d5cddVVV111FUDlqquuuuqqq6666qqrrrrqqv9S11xzzYNf+7Vf+71e53Ve572vueaaB+/fcw9P/Pmf50/++q+566/+iudHwPZ11/HIN3kTHvmmb8r2dddxv6N77uEZv/zLnPvrv+bcX/81p1/6pQE4e/bsrVx11VVXXfX/HZWrrrrqqquuuuqqq6666qqr/tNdc801D37t137t93qnd3qnzwbYv+cenvjzP8+f/PVfc9df/RUPJJ5t+7rreOSbvAkv977vywMd3XMPz/jlX+bcX/815/76r3mgjeuuA+C+++67lauuuuqqq/6/o3LVVVddddVVV1111VVXXXXVf4prrrnmwa/92q/9Xu/0Tu/02QD799zDn3/nd3L3X/81d/3VXwEgQDyn7euu45Fv8ia83Pu+Lw90dM89POOXf5lzf/3XnPvrv+YF2bjuOgDuu+++W7nqqquuuur/OypXXXXVVVddddVVV1111VVX/Ye55pprHvzar/3a7/VO7/ROnw2wf889/Pl3fidP+qVf4uCee7ifeE7b113HI9/kTXi5931fHujonnu47Zd/mXN//dec/eu/5kWxed11AJw9e/YZXHXVVVdd9f8dlauuuuqqq6666qqrrrrqqqv+Xa655poHv/Zrv/Z7vdM7vdNnA+zfcw9//p3fyZN/6ZfYv+ceXpDrX+ZluOGlX5qXe9/35YGO7rmH2375l7ntl3+Zo3vu4V9r47rruOqqq6666qpnonLVVVddddVVV1111VVXXXXVv9qLvdiLvfaLvdiLvdY7vdM7fTbA/j338Bff+Z086Zd+if177uEFuf5lXoYbXvqlebn3fV8e6Oiee7jtl3+Z2375lzm65x6em3nRbVx3HQD/8A//8NtcddVVV131/x2Vq6666qqrrrrqqquuuuqqq14kL/ZiL/baL/ZiL/Za7/RO7/TZAPv33MNffOd38qRf+iX277mH52f7uut45Ju8CQAv977vywMd3XMPt/3yL3PbL/8yR/fcw3+UjeuuA+C+++67lauuuuqqq/6/o3LVVVddddVVV1111VVXXXXV83XNNdc8+LVf+7XfC+Cd3umdPhtg/557+Ivv/E7+4ru+ixdk+7rreOSbvAnb11/PI9/kTXigo3vu4bZf/mVu++Vf5uiee3hRmKuuuuqqq676N6Ny1VVXXXXVVVddddVVV1111bNcc801D37t137t97rmmmse/Dqv8zrvDbB/zz38xXd+J3/xXd/F8yNg+7rreMSbvAnb11/PI9/kTXigo3vu4bZf/mWe8N3fzX+20y/90gD8wz/8w29z1VVXXXXVVUDlqquuuuqqq6666qqrrrrq/7lrrrnmwa/92q/9Xtdcc82DX+d1Xue9AfbvuYe/+M7v5C++67t4IPFs29ddxyPe5E244WVehutf5mV4oKN77uG2X/5lnvDd382/h/nX2bjuOgDuu+++W7nqqquuuuoqoHLVVVddddVVV1111VVXXfX/0DXXXPPg137t136vF3/xF3/tF3uxF3ttgP177uEvvvM7+Yvv+i4ABIjntH3ddTziTd6EG17mZbj+ZV6GBzq65x5u++Vf5onf/d1cddVVV1111f8QVK666qqrrrrqqquuuuqqq/4feZ3XeZ33fp3XeZ33erEXe7HXBrjrr/6Kv/jO7+Qvvuu7EFeI57R93XU84k3ehBte5mW4/mVehgc699d/zbm//mue+N3fzXMz/z7mX+/MS780AP/wD//wO1x11VVXXXUVULnqqquuuuqqq6666qqrrvp/4sVe7MVe+3Ve53Xe68Ve7MVe+0m/9Ev8zhd+IfcTz2n7uut4xJu8CTe8zMtw/cu8DA907q//mnN//dc88bu/m6uuuuqqq676H47KVVddddVVV1111VVXXXXV/xPXXHPNg1/sxV7stQGuf5mXYfu669i/5x7ut33ddTziTd6ER77pm7J93XXc7+ieezi65x7O/fVf88Tv/m5eFObfx/zbnH7plwbgH/7hH36bq6666qqrrgIqV1111VVXXXXVVVddddVV/0+cOXPmQQf33MPB3Xdz3cu8DG/2dV/H73zhF3L9S780j3zTN2X7uuu439E993DbL/8yy3vu4bZf/mWuuuqqq6666n8pKlddddVVV1111VVXXXXVVf9PXHPNNQ++96/+ir/5ru/iYW/yJrzU+7wPb/61X8v9ju65h9t/+Zc5uucebvvlX+bfyvz7mH+7jeuuA+C+++67lauuuuqqq64CKlddddVVV1111VVXXXXVVf/PHNxzD0/9pV/iYW/yJmxddx1P/O7v5txf/zXn//qvMf97bVx3HQD33XffrVx11VVXXXXVFQRXXXXVVVddddVVV1111VX/T7zYi73Yax/ccw8AB/fcw9Z11wFw+y//Muf/+q/5j2D+fcy/3emXfmkA/uEf/uG3ueqqq6666qorqFx11VVXXXXVVVddddVVV/0/cnDPPQAgcb+je+4BwFx11VVXXXXV/zkEV1111VVXXXXVVVddddVV/09cc801D+aZtq67DoCje+4BwPz7mX8f8++zcd11ANx33323ctVVV1111VVXULnqqquuuuqqq6666qqrrvp/5N6/+isANq+7DoCje+7h/4qN664D4OzZs8/gqquuuuqqq66gctVVV1111VVXXXXVVVdd9f/ANddc82AeYOu66wBY3nMP5t/P/PuYfx8DG9ddB8B99913K1ddddVVV111BZWrrrrqqquuuuqqq6666qr/B86cOfNggIN77uH/qs3rrgPg7Nmzt3LVVVddddVVV1C56qqrrrrqqquuuuqqq676f+Caa655MA+wdd11ABzecw//Xubfx/z7mCs2rrsOgPvuu+9WrrrqqquuuuoKKlddddVVV1111VVXXXXVVf9PHNxzD5dJbF1/PQDLe+7h38P8z7Bx3XUA3Hfffbdy1VVXXXXVVc9G5aqrrrrqqquuuuqqq6666v+BF3uxF3utg7vv5n8a8+9jrti47joAzp49eytXXXXVVVdd9WxUrrrqqquuuuqqq6666qqr/p84vOce7nftS780AOf++q/5tzL/c2xedx0A9913361cddVVV1111bMRXHXVVVddddVVV1111VVX/T9wzTXXPJj/Ycy/j3m2jeuuA+C+++67lauuuuqqq656NoKrrrrqqquuuuqqq6666qr/B86cOfPgg3vu4X5b110HwNE99/BvYf5n2bjuOgDOnj37DK666qqrrrrq2ahcddVVV1111VVXXXXVVVf9P3Fwzz38T2H+fcxz2rjuOq666qqrrrrq+SC46qqrrrrqqquuuuqqq676f+Caa655MAASW9ddB8DRPffwb2H+59m87joA/uEf/uG3ueqqq6666qpno3LVVVddddVVV1111VVXXfX/xL1/9VcAbF53HQBH99zDfwfz72Oe18Z11wFw33333cpVV1111VVXPRuVq6666qqrrrrqqquuuuqq/+Ne7MVe7LV5gK3rrgPg6J57+Ncy/73MVVddddVVV/2rEFx11VVXXXXVVVddddVVV/0fd8011zwY4OCee/jvZv7jnX7plwbgH/7hH36bq6666qqrrnpOVK666qqrrrrqqquuuuqqq/6fue5lXgaAo3vu4V/D/PuYfx/z/G1edx0A9913361cddVVV1111XOictVVV1111VVXXXXVVVdd9X/cmTNnHnRwzz08t+U99/CiMlddddVVV131vxKVq6666qqrrrrqqquuuuqq/+OuueaaBx/cfTdIAGxedx0AR/fcw38V8+9jXrDTL/3SAPzDP/zD73DVVVddddVVz4nKVVddddVVV1111VVXXXXV/wOH99zD/bauuw6Ao3vu4UVhrrrqqquuuup/LYKrrrrqqquuuuqqq6666qr/46655poHH9xzD/9dzL+PeeHOvPRLA/AP//APv81VV1111VVXPSeCq6666qqrrrrqqquuuuqq/+POnDnz4IN77uF+W9ddB8DRPffwLzFXXXXVVVdd9b8alauuuuqqq6666qqrrrrqqv9Htq67DoCje+7hv4L59zH/so3rrgPgvvvuu5Wrrrrqqquuek4EV1111VVXXXXVVVddddVV/8ddc801Dz645x4ANq+7DoCje+7hX2L+59u47joA7rvvvlu56qqrrrrqqudF5aqrrrrqqquuuuqqq6666v+wa6655sEAh/fcA8DWddcBcHTPPfxnM/8+5l925qVfGoB/+Id/+G2uuuqqq6666nlRueqqq6666qqrrrrqqquu+j/szJkzD+bfwFx11VVXXXXV/wlUrrrqqquuuuqqq6666qqr/g+75pprHgxwcM89AGxddx0AR/fcw38m8+9jXjQb110HwH333XcrV1111VVXXfW8qFx11VVXXXXVVVddddVVV/0fd3DPPdxv6/rrAVjecw8viPnfY+O66wA4e/bsM7jqqquuuuqq50Xlqquuuuqqq6666qqrrrrq/7iDu+/mRWX+/cy/j3nRbVx3HQD33XffrVx11VVXXXXV8yK46qqrrrrqqquuuuqqq676P+wf/uEffvu6l3kZXuq93xuAzeuuA+Donnv4v2DzuusAOHv27K1cddVVV1111fOictVVV1111VVXXXXVVVdd9X/Yfffdd+uP/MiPfPabvcmbfDbA1nXXAXB0zz08N/PvZ/59zL/OxnXXAXDffffdylVXXXXVVVc9LypXXXXVVVddddVVV1111VX/x/3oj/7o5wC82Zu8yWdvXXcdAEf33MP/dhvXXcdVV1111VVX/QsIrrrqqquuuuqqq6666qqr/h/47d/+7e95xvnzv80zvcwnfzKnX/qluZ/59zP/PuZfZ+O66wD4h3/4h9/mqquuuuqqq54/yvHjx7nqqquuuuqqq6666qqrrvq/7vDwcPcf/uEffufw8HD3xV/8xV/72MMfzi1v/Mbc8sZvzLGHP5zx4ICje+7h38r81zvz0i/NDa/+6vzDP/zDb//pn/7pz3DVVVddddVVz4ty/Phxrrrqqquuuuqqq6666qqr/j84PDzc/Yd/+Iff+e3f/u3vOTw83JXEjQ996IOPPfzh3PLGb8wtb/zGHHv4wxkPDji65x7+K5l/vRte/dU589IvzZ/+6Z/+9D/8wz/8DlddddVVV131vCjHjx/nqquuuuqqq6666qqrrrrq/5PDw8Pdf/iHf/id3/qt3/qe3/7t3/6ew8PD3WuuuebBx6+99vixhz+cW974jbnljd+YbmsLgKN77uGFMf89HvTGb8zxhz+c3/7t3/6eW2+99a+56qqrrrrqqudFOX78OFddddVVV1111VVXXXXVVf9fHR4e7v7DP/zD7/zCL/zC1/z2b//29xweHu5ec801Dz5+7bXHT7/0S3PLG78xt7zxG9NtbQFwdM89/Ecz/zY3vPqrc/zhD+dP//RPf+bWW2/9a6666qqrrrrqeaEHPehBXHXVVVddddVVV1111VVXXfWcrrnmmge/4zu+42e9zuu8znvzAEf33MNtv/zLnPvrv+bcX/815t/P/Nu88Q//MBvXXceHfMiHPOS+++67lauuuuqqq656XuhBD3oQV1111VVXXXXVVVddddVVVz1/11xzzYPPnDnz4Nd5ndd5r9d5ndd5bx7g6J57eMYv/zK3/fIvc3TPPfxbmH+7t/3t3wbg7d7u7cRVV1111VVXPX/oQQ96EFddddVVV1111VVXXXXVVVf9y6655poHv9iLvdhrv9iLvdhrvc7rvM578wBH99zDM375l3nCd383/xrm3+5tf/u3AXi7t3s7cdVVV1111VXPH3rQgx7EVVddddVVV1111VVXXXXVVf8611xzzYNf7MVe7LVf7MVe7LVe53Ve5715pqN77uHonnt4xi//Mrf98i/zwph/u9Mv/dK85ld/Nf/wD//w25/5mZ/5Olx11VVXXXXV80c5fvw4V1111VVXXXXVVVddddVVV/3rHB4e7t56661//ad/+qc/89u//dvfc+utt/7N4eHh7iNf4iVeeuO667jh1V+dB73xG3P84Q+n29ri0lOewn+kMy/90tzw6q/OP/zDP/z2n/7pn/4MV1111VVXXfX8UY4fP85VV1111VVXXXXVVVddddVV/3aHh4e7t95661//6Z/+6c/89m//9vfceuutf7O5uXn8xoc+9MHHHv5wbnj1V+dBb/zGHH/4w+m2trj0lKdg/n2OPfzh3PDqr86tt97613/6p3/6M1x11VVXXXXV84ce9KAHcdVVV1111VVXXXXVVVddddV/vGuuuebBL/ZiL/bar/M6r/NeL/ZiL/baPNPRPfdw9q//mnN//dc845d/mX+Ll/vkT+ZBb/zGfP3Xf/37/NZv/dZ3c9VVV1111VXPH5Wrrrrqqquuuuqqq6666qqr/lPcd999t953333f/Vu/9Vvffc011zz4xV7sxV77dV7ndd7rxV7sxV77QW/8xjzojd+Yx7z3e3P2r/+aZ/zyL3Pur/+aF4W56qqrrrrqqhcZetCDHsRVV1111VVXXXXVVVddddVV/3WuueaaB7/2a7/2e734i7/4a7/Yi73Ya/NMR/fcw9m//mue8cu/zLm//mteEANv8sM/zMZ11/EhH/IhD7nvvvtu5aqrrrrqqqueP/SgBz2Iq6666qqrrrrqqquuuuqqq/57XHPNNQ9+7dd+7fd68Rd/8dd+sRd7sdfmmY7uuYezf/3XPOOXf5lzf/3X3M9c8SY//MNsXHcdH/IhH/KQ++6771auuuqqq6666vlDD3rQg7jqqquuuuqqq6666qqrrrrqv98111zz4Nd+7dd+rxd/8Rd/7Rd7sRd7bZ7p6J57OPvXf80zfvmXOfvXfw3A2/32bwPwdm/3duKqq6666qqrXjD0oAc9iKuuuuqqq6666qqrrrrqqqv+Z7nmmmse/Nqv/drv9Tqv8zrvfc011zyYZzq65x7O/vVf86A3fmPuu+++Wz/kQz7kIVx11VVXXXXVC0Y5fvw4V1111VVXXXXVVVddddVV/x2uueaaB7/Zm73ZR33u537ub19zzTUPfvCDH/zS//AP//A7XMXh4eHuP/zDP/zOL/zCL3zNb//2b3/P4eHh7jXXXPPg49dee/z4wx8OwJ/+6Z/+9J/+6Z/+DFddddVVV131gqEHPehBXHXVVVddddVVV1111VVX/Ve45pprHnzmzJkHv9iLvdhrvdM7vdNnA+zfcw9P+sVf5JFv+qZsX3cdP/IjP/LZP/qjP/o5XPV8XXPNNQ9+x3d8x8/6h3/4h9/5rd/6re/mqquuuuqqq1449KAHPYirrrrqqquuuuqqq6666qr/LNdcc82DX/u1X/u9rrnmmge/zuu8znsD7N9zD0/6xV/k7r/+a+75q78C4BFv8ia81qd+Kvfdd9+tX//1X/8+//AP//DbXHXVVVddddVV/17oQQ96EFddddVVV1111VVXXXXVVf+Rrrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GsD7N9zD0/+xV/kSb/0Sxzccw/Pz8u+z/vwsu/7vtx33323fsiHfMhDuOqqq6666qqr/r2oXHXVVVddddVVV1111VVX/Qe45pprHvzar/3a7/XiL/7ir/1iL/Zirw2wf889/OV3fidP+qVf4uCee3hhtq67jv177gHgmmuuefA111zz4Pvuu+9Wrrrqqquuuuqqfw/0oAc9iKuuuuqqq6666qqrrrrqqn+La6655sGv/dqv/V6v8zqv897XXHPNgwH277mHJ//iL/KX3/Vd/Eu2rruOR77Jm7B9/fU84k3ehAf6rd/6re/++q//+vfhqquuuuqqq67696By1VVXXXXVVVddddVVV131r3DNNdc8+LVf+7Xf63Ve53Xe+5prrnkwwN1/9Vf85c//PH/5Xd/Fv2T7uut4xJu8Cde/zMtw/cu8DA90dM89HN1zD6df+qW56qqrrrrqqqv+Q1C56qqrrrrqqquuuuqqq676F1xzzTUPfu3Xfu33eqd3eqfPBti/5x6e/PM/zx3AX37Xd/GCiCu2rruOR7zJm3D9y7wM17/My/BAR/fcw+2//Ms88bu/GwOPeu/35vRLvzT33XffrVx11VVXXXXVVf9eVK666qqrrrrqqquuuuqqq56Pa6655sGv/dqv/V7v9E7v9NkA+/fcw19+53dy91//NXf/1V/x/Ihn27ruOh7xJm/CI9/0Tdm67joe6Nxf/zXn//qveeJ3fzfPbeO66wA4e/bsM7jqqquuuuqqq/69qFx11VVXXXXVVVddddVVVwHXXHPNg8+cOfPgF3uxF3utd3qnd/psgP177uEvv/M7ufuv/5q7/+qveCDxvLauu45HvMmb8Mg3fVO2rruO+x3dcw+3//Ivc3TPPdz+y7/M82Ouuuqqq6666qr/BFSuuuqqq6666qqrrrrqqv+3rrnmmge/9mu/9ntdc801D36d13md9wbYv+ce/vI7v5O7//qvufuv/goAAeL527ruOh7xJm/Cy77v+/JAR/fcw+2//Muc++u/5vxf/zUvjHm20y/90gDcd999t3LVVVddddVVV/17Ubnqqquuuuqqq6666qqr/l+55pprHvzar/3a7/XiL/7ir/1iL/Zirw2wf889/OV3fidP+qVf4uCeexBXiOfv+pd5Ga576ZfmZd/3fXmgo3vu4fZf/mXO/fVfc/6v/5p/j7Nnz97KVVddddVVV13170Xlqquuuuqqq6666qqrrvo/75prrnnwa7/2a7/Xi7/4i7/2i73Yi702wP499/CX3/mdPPmXfomDe+7hfuJ5bV13HY94kzcB4GXf9315oKN77uH2X/5lbv/lX+bonnv41zLPaeO66wC47777buWqq6666qqrrvr3onLVVVddddVVV1111VVX/Z90zTXXPPi1X/u13+t1Xud13vuaa655MMD+Pffwl9/5nfzVd30X/5Kt667jEW/yJlz/Mi/D9S/zMjzQ0T33cPsv/zK3//Ivc3TPPVx11VVXXXXVVf9jUbnqqquuuuqqq6666qqr/s+45pprHvzar/3a7/U6r/M6733NNdc8GODuv/or/vLnf56/+q7v4l+ydd11POJN3oTrX+ZluP5lXoYHOrrnHm7/5V/mid/93fxHMc9p47rrALjvvvtu5aqrrrrqqquu+o9A5aqrrrrqqquuuuqqq676X+2aa6558Gu/9mu/1zu90zt9NsDBPffwpJ//ee4A/uq7vot/ydZ11/HIN3kTrnuZl+H6l3kZHuj8X/815/76r3nSd383/xU2rrsOgLNnz97KVVddddVVV131H4HKVVddddVVV1111VVXXfW/1ud+7uf+1ou92Iu99sE99/CX3/md3PPXf83df/VX/Eu2r7+eR7zJm/CIN3kTtq67jvsd3XMP5//6rzm65x6e9N3fzXMz/3HM89q47joA7rvvvlu56qqrrrrqqqv+I1C56qqrrrrqqquuuuqqq/5Xesd3fMfPerEXe7HXvvuv/opf/MiP5AURgMTWddfxiDd5E17mfd6HBzq65x5u/+VfZnnPPdz+y7/MC2Kuuuqqq6666qr/hahcddVVV1111VVXXXXVVf8rvfiLv/hrA2xffz1b113HwT33ACCJ+21ddx2PeJM34WXe5314oKN77uH2X/5lzv/N33D+r/6K/2rm+Vtcdx0A9913361cddVVV1111VX/EahcddVVV1111VVXXXXVVf+rbV13HS/7vu/L733RF7F13XVsXXcd17/My/Ay7/M+PNDRPfdw+y//Muf/5m84/9d/zbNIYPPCmP845gXbuO46rrrqqquuuuqq/1BUrrrqqquuuuqqq6666qr/lc6cOfPgJ/3SL/HIN3kTrn+Zl+E1PuVTeMSbvAkPdHTPPdz+y7/MHb/yKxzdcw//W5w9e/YZXHXVVVddddVV/xGoXHXVVVddddVVV1111VX/az35l36J7euu4/qXeRke8SZvAsDRPfdw+y//Mnf8yq9wdM89/HuZ/zjmhdu47jquuuqqq6666qr/UFSuuuqqq6666qqrrrrqqv+VrrnmmgcDHNxzDwC3//Iv89df8iX8m0hg89zMf62N664D4B/+4R9+m6uuuuqqq6666j8Clauuuuqqq6666qqrrrrqf639e+7hfuf/5m/4n8xcddVVV1111VX/DahcddVVV1111VVXXXXVVf+rbV13HQBH99zDfyTzX2/juusAuO+++27lqquuuuqqq676j0Dlqquuuuqqq6666qqrrvpf55prrnkwwME997B9/fUALO+5h/+pzFVXXXXVVVdd9d+E4Kqrrrrqqquuuuqqq666CkDifua/3sZ11wFw33333cpVV1111VVXXfUfhcpVV1111VVXXXXVVVdd9b/OmTNnHsz/EuZFs3HddQCcPXv2Vq666qqrrrrqqv8oVK666qqrrrrqqquuuuqq/3WuueaaB+/fcw8AW9ddB8DRPffwH8H899i47joA7rvvvlu56qqrrrrqqqv+oxBcddVVV1111VVXXXXVVVc9kyX+I5mrrrrqqquuuuq/GZWrrrrqqquuuuqqq6666n+lg7vvZvu66wA4uuce/rdbXHcdAPfdd9+tXHXVVVddddVV/1GoXHXVVVddddVVV1111VX/65w5c+ZB+/fcw38k8x/L/OtsXHcdAGfPnn0GV1111VVXXXXVfxSCq6666qqrrrrqqquuuup/re3rrgNgec89/IeRuOqqq6666qqr/s8guOqqq6666qqrrrrqqqv+17nmmmsezH8g8x/L/OttXHcdAPfdd9+tXHXVVVddddVV/1EIrrrqqquuuuqqq6666qr/lQ7uuYet668H4Oiee/gPJfFvZf5tNq67DoCzZ8/eylVXXXXVVVdd9R+FylVXXXXVVVddddVVV131/5q56qqrrrrqqqv+DyO46qqrrrrqqquuuuqqq/7Xueaaax68f889bF13HQBH99zD/wTm327juusAuO+++27lqquuuuqqq676j0Jw1VVXXXXVVVddddVVV/2vc+bMmQfzH8C8EBJXXXXVVVddddX/elSuuuqqq6666qqrrrrqqv+1tq+7DoDlvffy3838221cdx0A9913361cddVVV1111VX/kQiuuuqqq6666qqrrrrqqv+VDu6+m38P8z/HxnXXAXD27Nlbueqqq6666qqr/iMRXHXVVVddddVVV1111VX/61xzzTUP3r/nHv6tzItI4kVh/n02rrsOgPvuu+9Wrrrqqquuuuqq/0hUrrrqqquuuuqqq6666qr/tbauuw6Ao3vu4aqrrrrqqquuuur5ILjqqquuuuqqq6666qqr/le55pprHswzbV9/PQDLe+7hRWX+lSReGPPvt7juOgDuu+++W7nqqquuuuqqq/4jUbnqqquuuuqqq6666qqr/lc6uOce/q/YuO46AM6ePfsMrrrqqquuuuqq/0gEV1111VVXXXXVVVddddX/KmfOnHkw/0bm30jiqquuuuqqq676X4nKVVddddVVV1111VVXXfW/zv499wCwdd11ABzdcw//Hcx/jI3rrgPgvvvuu5Wrrrrqqquuuuo/EpWrrrrqqquuuuqqq6666n+Va6655sEA4l/H/M+1cd11AJw9e/ZWrrrqqquuuuqq/0gEV1111VVXXXXVVVddddX/Ogd3383WddcBcHTPPfyXkHggc9VVV1111VVX/S9A5aqrrrrqqquuuuqqq676X+XMmTMP4l/J/M+2cd11ANx33323ctVVV1111VVX/UciuOqqq6666qqrrrrqqqv+V/mHf/iH39m6/nq2r7sOgOU99/BfRgLA/McxV1111VVXXXXVfyIqV1111VVXXXXVVVddddX/KmfPnr11+7rruO5lXoYXhfmfbeO66wC47777buWqq6666qqrrvqPRnDVVVddddVVV1111VVX/a9y33333foP//APv/3IN3kTAI7uuYf/Spb4j2Jg47rrADh79uytXHXVVVddddVV/9EIrrrqqquuuuqqq6666qr/dX7kR37kc7auu45/ifmfb+O66wC47777buWqq6666qqrrvqPRnDVVVddddVVV1111VVX/a/zD//wD7/9D//wD7/NM5166Zfmv4J5Jol/L3PVVVddddVVV/0XoBw/fpyrrrrqqquuuuqqq6666n+f++677xkv9mIv9to3vNRLHb/5jd+Ym9/4jem2tkBiec89mP8drn/1V+f0S780f/qnf/rT//AP//A7XHXVVVddddVV/5Eox48f56qrrrrqqquuuuqqq6763+fs2bO3Hh0dXTo8PNx9yEMe8tLd1hanX/qlufmN35ib3/iN6ba2QGJ5zz38RzDPReLfyjzbLW/8xhx7+MP57d/+7e+59dZb/5qrrrrqqquuuuo/EuX48eNcddVVV1111VVXXXXVVf873XrrrX/9p3/6pz/z27/9299z6623/s3h4eHuQx7ykJfutrY4/dIvzS1v/Mbc/MZvTLe1BRLLe+7hf5rrX/3VOfbwh/Onf/qnP3Prrbf+NVddddVVV1111X8k9KAHPYirrrrqqquuuuqqq6666v+Oa6655sFnzpx58Ou8zuu81+u8zuu8Nw9wdM89nP/rv+a2X/kVzv/1X/OvYV4Am38t82yv/tVfzemXfmk+8zM/83X+4R/+4be56qqrrrrqqqv+I6EHPehBXHXVVVddddVVV1111VX/N11zzTUPPnPmzINf7MVe7LVe53Ve572vueaaB/NMR/fcw/m//mtu+5Vf4fxf/zUvjHkhbP41zHN6wx/+YTauu44P+ZAPech99913K1ddddVVV1111X8k9KAHPYirrrrqqquuuuqqq6666v+Ha6655sGv/dqv/V6v8zqv897XXHPNg3mmo3vu4fxf/zW3/cqvcP6v/5rnZv4FNi8q85ze8Id/mI3rruNDPuRDHnLffffdylVXXXXVVVdd9R8JPehBD+Kqq6666qqrrrrqqquu+v/nmmuuefBrv/Zrv9eLv/iLv/aLvdiLvTbPdHTPPZz/67/mtl/5Fc7/9V9jXgQ2LwrzvN76t38bgLd7u7cTV1111VVXXXXVfzT0oAc9iKuuuuqqq6666qqrrrrq/7drrrnmwa/92q/9Xi/+4i/+2i/2Yi/22jzT0T33cO6v/5rzf/M33PbLv8wLZfMvMc/rrX/7twF4u7d7O3HVVVddddVVV/1HQw960IO46qqrrrrqqquuuuqqq6663zXXXPPg137t136vF3/xF3/tF3uxF3ttnunonns499d/zfm/+Rtu++Vf5nnY/EvMc9q47jre8Id/mPvuu+/WD/mQD3kIV1111VVXXXXVfzTK8ePHueqqq6666qqrrrrqqquuut/h4eHuP/zDP/zOb/3Wb33Pb//2b3/P4eHhriRufOhDH3zs4Q/n+ld/dW554zfm2MMfTr+9zaWnPAUAJF4Y87yOPfzh3PLGb8ytt97617/1W7/1PVx11VVXXXXVVf/RKMePH+eqq6666qqrrrrqqquuuur5OTw83P2Hf/iH3/mt3/qt7/nt3/7t77n11lv/ZnNz8/iND33og489/OFc/+qvzi1v/MYce/jD6be3ufSUp/CvcfqlX5rrX/3V+Yd/+Iff/tM//dOf4aqrrrrqqquu+o9G5aqrrrrqqquuuuqqq6666kVw33333Xrfffd992/91m999zXXXPPgF3uxF3vt13md13mvF3uxF3vtW974jbnljd+YR73Xe3F0zz3c/su/zG2//MtcddVVV1111VX/7ahcddVVV1111VVXXXXVVVf9K91333233nfffd/9W7/1W999zTXXPPjFXuzFXvt1Xud13uvFXuzFXnvjuus4/dIvzaPe+705uucebv/lX+YZv/zLPD8b110HwH33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0wEO7rmHv/rO7+TJv/zLHNxzDy+Kreuu4xFv8iZsXXcdj3iTN+GBju65hzt++Zc5/zd/w/m//muuuuqqq6666qqr/o+ictVVV1111VVXXXXVVf9Dfc7nfM5vAfziR34k9/z1X/Oi2LruOh7xJm/C9S/90lz3Mi/DAx3dcw93/PIvc/uv/ArLe+7hP5q56qqrrrrqqquu+h+HylVXXXXVVVddddVVV/0Pt3399dzz13/NC7J13XU84k3ehEe8yZuwdd11PNDRPfdwxy//Mk/6nu/hv8vGddcBcN99993KVVddddVVV1111X8tKlddddVVV1111VVXXfU/3NZ11/Hctq+7joe/yZvwiDd5E7auu477Le+5h/N//dcc3XMPT/qe7+Gqq6666qqrrrrq/zkqV1111VVXXXXVVVdd9T/cdS/90gi47qVfmute5mV4mfd5Hx5oec893P7Lv8yFv/kbzv/1X/M/zeK66wA4e/bsrVx11VVXXXXVVVf916Jy1VVXXXXVVVddddVV/8NtX3897/O7v8sDLe+5h9t/5Ve48Nd/zfm/+Rv+u5mrrrrqqquuuuqq/5GoXHXVVVddddVVV1111f9Q11xzzYMBtq67DoDlPfdw+6/8Cnf8yq+wvOceni8JANtcddVVV1111VVXXQWVq6666qqrrrrqqquu+l/gF173dflXkbjM5r/bxnXXAXDffffdylVXXXXVVVddddV/LSpXXXXVVVddddVVV131P9zynnv4N5O4zOaqq6666qqrrrrq/yEqV1111VVXXXXVVVdd9f+BxGU2V1111VVXXXXVVf+PULnqqquuuuqqq6666qr/Y8wLIXGZzX8U84JtXHcdAPfdd9+tXHXVVVddddVVV/3XI7jqqquuuuqqq6666qr/jySuuuqqq6666qqr/h+gctVVV1111VVXXXXVVf8DXXPNNQ/mmY7uuYf/FBIA2PxnWVx3HQBnz569lauuuuqqq6666qr/elSuuuqqq6666qqrrrrq/zsJAGyuuuqqq6666qqr/o+hctVVV1111VVXXXXVVVddIQGAzX+UjeuuA+C+++67lauuuuqqq6666qr/elSuuuqqq6666qqrrrrqquckAYDNVVddddVVV1111f9yBFddddVVV1111VVXXXXV8ydx1VVXXXXVVVdd9b8clauuuuqqq6666qqrrvof6MyZMw/mmZb33st/G4nLbP4tFtdeC8B99913K1ddddVVV1111VX/9ahcddVVV1111VVXXXXV/yHmP4nEZTZXXXXVVVddddVV/4tQueqqq6666qqrrrrqqqtedBKX2bwoNq67jquuuuqqq6666qr/RgRXXXXVVVddddVVV1111b+eBIB50Zw9e/YZXHXVVVddddVVV/3Xo3LVVVddddVVV1111VVX/dtIAGBz1VVXXXXVVVdd9T8UwVVXXXXVVVddddVVV/0PdM011zyY/y0krrrqqquuuuqqq/6HonLVVVddddVVV1111VX/wx3dcw//40lcZvNAG9ddB8B99913K1ddddVVV1111VX/9ahcddVVV1111VVXXXXVVf9xJC6zueqqq6666qqrrvofgOCqq6666qqrrrrqqqv+DxH/tcQLIAGwuO46AM6ePXsrV1111VVXXXXVVf/1qFx11VVXXXXVVVddddVV/zkkrrrqqquuuuqqq/6bUbnqqquuuuqqq6666qqr/tNsXHcdV1111VVXXXXVVf+NqFx11VVXXXXVVVddddX/QGfOnHkQz7S85x7+t7vvvvtu5aqrrrrqqquuuuq/HpWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111X+Kjeuu46qrrrrqqquuuuq/GZWrrrrqqquuuuqqq676H+js2bPP4P+I++6771auuuqqq6666qqr/nsQXHXVVVddddVVV1111f9A99133638G4mrrrrqqquuuuqqq56JylVXXXXVVVddddVVV131n2Jx7bUAnD179lauuuqqq6666qqr/nsQXHXVVVddddVVV1111f9AZ8+evZVnWt5zD/+Tiauuuuqqq6666qr/sahcddVVV1111VVXXXXV/0D33Xffrfwvt3HddQDcd999t3LVVVddddVVV13134Pgqquuuuqqq6666qqr/of6h3/4h98GuOmN35ib3uiN+NcQV1111VVXXXXVVVcBVK666qqrrrrqqquuuup/qM/8zM98nW/6pm96+k1v9EYPvumN3ohHvtd7AXD7r/wKF/76rzn/N3/DVVddddVVV1111VUvFOX48eNcddVVV1111VVXXXXV/1R/9md/9jO33nrr32xubh6/4aEPfXC3tcWpl35pbnrjN+bmN3oj6tYWApb33sv/NNe9+qtz+qVfmj/90z/96X/4h3/4Ha666qqrrrrqqqv+61G56qqrrrrqqquuuuqq/8Huu+++W++7777v/q3f+q3vvuaaax78Yi/2Yq/9Yi/2Yq/1Oq/zOu+9uO46Hvle7wXv9V4s77mH83/zN9zxy7/M+b/5GwAEmP8aAsxVV1111VVXXXXV/ziU48ePc9VVV1111VVXXXXVVf8bHB4e7t56661//ad/+qc/89u//dvf86d/+qc/A7C5uXn8+LXXHt95+MO56Y3fmJvf6I3YefjD6ba22HvqU/nvcvMbvzHHHv5wfvu3f/t7br311r/mqquuuuqqq6666r8elauuuuqqq6666qqrrvpf6L777rv1vvvuu/Uf/uEffhvgmmuuefBrv/Zrv9eLv/iLv/aLvdiLvfZN113HTW/0Rjzivd6L83/zN5z/67/mjl/5Fa666qqrrrrqqqv+n0EPetCDuOqqq6666qqrrrrqqv9Lrrnmmge/2Iu92Gu/zuu8znu92Iu92GvzAEf33MMdv/IrnP/rv+b83/wN/9HMs730J30SN7/RG/H1X//17/Nbv/Vb381VV1111VVXXXXVfz30oAc9iKuuuuqqq6666qqrrvq/6pprrnnwi73Yi732i73Yi73W67zO67w3D7C8915u/+Vf5vxf/zXn/+Zv+I9gnu1Vv/IrOfXSL81nfuZnvs4//MM//DZXXXXVVVddddVV//XQgx70IK666qqrrrrqqquuuur/g2uuuebBL/ZiL/baL/ZiL/Zar/M6r/PePMDRPfdw/m/+hjt++Zc5/zd/w7+VebZX/cqv5NRLvzSf+Zmf+Tr/8A//8NtcddVVV1111VVX/ddDD3rQg7jqqquuuuqqq6666qr/b6655poHnzlz5kGv8zqv894v9mIv9trXXHPNg3mmo3vu4fzf/A3n//qvueNXfoV/LXPF6/3gD7Jx3XV8yId8yEPuu+++W7nqqquuuuqqq676r0flqquuuuqqq6666qqr/h+67777br3vvvtu/Yd/+IffAbjmmmse/Nqv/drv9eIv/uKv/WIv9mKvvXHdddz8Rm/EI9/rvVjeey+3//Ivc/5v/oblPfdw1VVXXXXVVVdd9b8IetCDHsRVV1111VVXXXXVVVdd9WzXXHPNg1/sxV7stV/ndV7nvV7sxV7stXmAo3vu4Y5f+RXO//Vfc/5v/obnx1zxej/4g2xcdx0f8iEf8pD77rvvVq666qqrrrrqqqv+66EHPehBXHXVVVddddVVV1111b/HNddc8+DXfu3Xfq9/+Id/+J1/+Id/+G3+D7nmmmse/GIv9mKv9WIv9mKv/Tqv8zrvzQMc3XMPd/zKr3D+r/+a83/zNzyQgbf4zd8E4O3e7u3EVVddddVVV1111X8P9KAHPYirrrrqqquuuuqqq67613qxF3ux136xF3ux13qnd3qnz+aZ7rvvvlv/4R/+4be//uu//n34P+iaa6558Iu92Iu99ou92Iu91uu8zuu8Nw9wdM89XPibv+H2X/5lzv/N32DgLX7zNwF4u7d7O3HVVVddddVVV1313wM96EEP4qqrrrrqqquuuuqqq/4l11xzzYNf+7Vf+72uueaaB7/O67zOe/NMB/fcw5N+8Rc5uOceXvNTP5Xf+q3f+u6v//qvfx/+jztz5syDrrnmmoe82Iu92Gu9+Iu/+Gu/2Iu92GvzTEf33MP5v/kbbn6jNwLg7d7u7cRVV1111VVXXXXVfw8qV1111VVXXXXVVVdd9QJcc801D37t137t93rxF3/x136xF3ux1wY4uOcenvxLv8T+3XfzV9/1Xdzv+pd5GQCuueaaB/P/wNmzZ59x9uzZZ/zDP/zDb//oj/7o51xzzTUPfu3Xfu33evEXf/HXfrEXe7HX3rjuOgD+4R/+4Xe46qqrrrrqqquu+u9D5aqrrrrqqquuuuqqqx7gmmuuefBrv/Zrv9frvM7rvPc111zzYICDe+7hL7/zO7nnr/+au//qr7jqed133323/uiP/ujn/OiP/ujnXHPNNQ9+sRd7sdc+c+bMg370R3/0c7jqqquuuuqqq67670Plqquuuuqqq6666qr/16655poHnzlz5sEv9mIv9lrv9E7v9Nk808E99/CX3/mdPPmXfomDe+7hX7J/990AnDlz5sH8P3fffffdet999303V1111VVXXXXVVf/9qFx11VVXXXXVVVdd9f/ONddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22e6eCee3jSL/4if/Vd38W/hoDt66/nqquuuuqqq6666qr/cahcddVVV1111VVXXfX/wjXXXPPg137t136vF3/xF3/tF3uxF3ttgIN77uEvv/M7Afir7/ou/jUEXPcyL8P1L/MyvMz7vA/3u+aaax7MVVddddVVV1111VX/U1C56qqrrrrqqquuuur/rGuuuebBr/3ar/1er/M6r/Pe11xzzYMBDu65h7/8zu/knr/+a+7+q7/iRSVg67rreMSbvilb113HI97kTXig5T33sLjuOq666qqrrrrqqquu+h+FylVXXXXVVVddddVV/2dcc801D36xF3ux1z5z5syD3umd3umzeaaDe+7hL7/zO3nyL/0SB/fcw4tCXLF1/fU84k3ehOte+qW5/mVehgda3nMPd/zKr3DHr/4qAK/zAz/AfffddytXXXXVVVddddVVV/1PQeWqq6666qqrrrrqqv/Vrrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GvzTHf/1V9x91/9FX/1Xd/Fi0oAElvXXccj3uRNeMSbvAlb113HA53/m7/hwl//NU/+3u/lgRbXXcdVV1111VVXXXXVVf/jULnqqquuuuqqq6666n+da6655sGv/dqv/V4v/uIv/tov9mIv9toAB/fcw19+53dycM89PPmXfokXhbhi6/rr2bruOq5/mZfhZd7nfXig5T33cMev/ArLe+/ljl/5Fa666qqrrrrqqquu+l+FylVXXXXVVVddddVV/ytcc801D37t137t93qnd3qnz+aZDu65h7/8zu/knr/+a+7+q7/iRSEAia3rruMRb/ImXPfSL831L/MyPNDynnu441d+hfN/8zdc+Ju/4aqrrrrqqquuuuqq/7WoXHXVVVddddVVV131P9I111zz4Nd+7dd+L4B3eqd3+mye6eCee3jSL/4iT/6lX+Lgnnv4l4hnkti67joe8SZvwnUv/dJc/zIvwwMt77mHO37lV7jjV3+V5T33cNVVV1111VVXXXXV/wlUrrrqqquuuuqqq676H+V1Xud13vt1Xud13uvFXuzFXhvg4J57uPuv/oq7/+qv+Kvv+i5eFAKQANi67joe8SZvwsu8z/vwQMt77uHo3nu58Nd/zZO/93u56qqrrrrqqquuuur/JCpXXXXVVVddddVVV/2P8WIv9mKv/Tqv8zrv9aBTp177L7/zO7nnr/+au//qr3hRCEBi67rreMSbvAkAL/M+78MDLe+5hzt+5Vc4/zd/w4W/+Ruuuuqqq6666qqrrvo/j8pVV1111VVXXXXVVf9jXHPNNQ9+sRd7sdd+8i/9En/1Xd/FCyOeSWLruut4xJu8Cde99Etz/cu8DA+0vOce7viVX+H83/wNF/7mb7jqqquuuuqqq6666v8VKlddddVVV1111VVX/Y9x5syZBwHs3303z48AJAC2rruOR7zJm/CIN3kTtq67jgda3nMPd/zKr/Dk7/1errrqqquuuuqqq676f43KVVddddVVV1111VX/Y1xzzTUPBji45x7uJwAJgOte+qW5/mVehpd5n/fhgZb33MMdv/IrADzle7+X+wkwV1111VVXXXXVVVf9P0blqquuuuqqq6666qr/cQRIYuu663jEm7wJW9ddxyPe5E14oOU993DHr/wKF/7mb7jwN3/DCyKezfznWVx7LQBnz569lauuuuqqq6666qqr/qegctVVV1111VVXXXXV/zgPf5M34eFv8iZc/zIvwwMt77mHO37lV7jzV3+V5T338K8lnpO56qqrrrrqqquuuur/OCpXXXXVVVddddVVV/2Pc/3LvAz3u/A3f8P5v/5rnvK938t/NPFs5qqrrrrqqquuuuqq/4OoXHXVVVddddVVV131P8Y111zzYIA7f+VXOP83f8Odv/Ir/FcRz2auuuqqq6666qqrrvo/gspVV1111VVXXXXVVf/j3PErv8KFv/kb/ruIZzNXXXXVVVddddVVV/0vRuWqq6666qqrrrrqqqteCHGFueqqq6666qqrrrrqfyEqV1111VVXXXXVVVdd9SIQz2auuuqqq6666qqrrvpfgspVV1111VVXXXXVVVf9K4krzFVXXXXVVVddddVV/8NRueqqq6666qqrrrrqqn8jcdVVV1111VVXXXXV/3BUrrrqqquuuuqqq6666j/AxrXXAnDffffdylVXXXXVVVddddVV/1MQXHXVVVddddVVV131P8Z99913K8Diuuu46qqrrrrqqquuuuqq/wBUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquu+h/jvvvuuxVgce21XHXVVVddddVVV1111X8AKlddddVVV1111VVX/d8j8R/C5kW1uO46AO67775bueqqq6666qqrrrrqfwoqV1111VVXXXXVVVf9jyNAPIDEv5f5N5B4kUlcddVVV1111VVXXfU/DpWrrrrqqquuuuqqq/7nkUDiP5J4wcxVV1111VVXXXXVVf9HUbnqqquuuuqqq6666v898bzMVVddddVVV1111VX/B1C56qqrrrrqqquuuuqq50M8L3PVVVddddVVV1111f8yVK666qqrrrrqqquuuupFJJ6Tueqqq6666qqrrrrqfzgqV1111VVXXXXVVVdd9W8knk1cddVVV1111VVXXfU/EJWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqP8Di2msBOHv27DO46qqrrrrqqquuuup/CipXXXXVVVddddVVV/2Pcfbs2WcAnHypl+Kqq6666qqrrrrqqqv+A1C56qqrrrrqqquuuup/jH/4h3/47X/4h3/47Rd7qZd67df6/u9nee+9XPibv+HC3/wNF/7mb7jqqquuuuqqq6666qp/JSpXXXXVVVddddVVV/2Pcd999936Iz/yI5/zTu/0TrzYi73Yay+uu46TL/VSACzvvZcLf/3X3Pmrv8qFv/kbrrrqqquuuuqqq6666kVA5aqrrrrqqquuuuqq/1H+4R/+4bc/8zM/87evueaaB7/Yi73Ya7/Yi73Ya73O67zOey+uvZYb3+iNuPGN3ojlPfdw4W/+hgt/8zfc+au/ylVXXXXVVVddddVVV70AVK666qqrrrrqqquu+h/pvvvuu/W+++777t/6rd/67h/90R/9nDNnzjzoxV7sxV77xV/8xV/7xV7sxV77xuuu48Y3eiMe/p7vyfLee7nwN3/Dhb/5Gy78zd9w1VVXXXXVVVddddVVz0Tlqquuuuqqq6666qr/8e67775b77vvvlv/4R/+4Xd+9Ed/9HOuueaaB7/Yi73Ya7/O67zOe73Yi73Yay+uu46TL/VSACzvvZcLf/3X3Pmrv8qFv/kbrrrqqquuuuqqq676f43KVVddddVVV1111VX/69x333233nfffd/9W7/1W999zTXXPPjFXuzFXvvFXuzFXut1Xud13ntx7bXc+EZvxI1v9EYs77mHC3/zN1z8m7/hzl/9VZ4fc9VVV1111VVXXXXV/2FUrrrqqquuuuqqq676X+2+++679b777vvu3/qt3/ruH/3RH/0c236d13md937xF3/x136xF3ux177xuuu48Y3eiIe953sCcOev/ioX/+ZvuPA3fwOAeOHMVVddddVVV1111VX/i1G56qqrrrrqqquuuur/jPvuu+9WgB/90R/9nB/90R/9nGuuuebBL/ZiL/bar/M6r/NeL/ZiL/baAA9/z/cEYHnvvVz467/mrl/9VS78zd/wgojnz1x11VVXXXXVVVdd9b8Alauuuuqqq6666qqr/s+67777br3vvvu++7d+67e++5prrnnwi73Yi732i73Yi73W67zO67z34tprufGN3ogb3+iNWN5zDxf+5m+4+Dd/w52/+qu8KMRVV1111VVXXXXVVf8LoAc96EFcddVVV1111VVXXfXvc8011zz4vvvuu5X/Rc6cOfOg13md13nvF3/xF3/tF3uxF3ttHmB5zz3c+au/ysW/+Rsu/M3f8KJ4ha/4Ck6+1EvxmZ/5ma/zD//wD7/NVVddddVVV1111VX/E1COHz/OVVddddVVV1111VX/etdcc82D3+zN3uyj3umd3umz3+d93uerz549+4yjo6Pdw8PDXf4XODo6uvQP//APv/Nbv/Vb3/Pbv/3b33Prrbf+zebm5vFrrrnmwd3WFidf6qW48Y3eiBvf6I3YftjDmA4PWd57Ly/IjW/0Riyuu47f+q3f+p6zZ8/eylVXXXXVVVddddVV/xOgBz3oQVx11VVXXXXVVVdd9aK55pprHvzar/3a7/U6r/M6733NNdc8GGD/nnvYvu46AD7zMz/zdf7hH/7ht/lf7Jprrnnwi73Yi732i73Yi73Wi73Yi732Nddc82CeaXnPPVz4m7/h4t/8DRf+5m9Y3nsv93uFr/gKTr7US/GZn/mZr/MP//APv81VV1111VVXXXXVVf8TULnqqquuuuqqq6666gW65pprHvzar/3a7wXwTu/0Tp/NM+3fcw9/8Z3fyd1//dfc/Vd/xTv/6I+yff31/F9w33333Xrfffd992/91m99N8CZM2ce9Dqv8zrv/eIv/uKv/WIv9mKvfeN113HjG70RAMt77uHOX/1VLv7N33DVVVddddVVV1111f9IVK666qqrrrrqqquueg7XXHPNg1/7tV/7vV78xV/8tV/sxV7stXmm/Xvu4Um/+Is86Zd+iYN77uGBtq+/HoBrrrnmwf/wD//A/yVnz559xo/+6I9+zo/+6I9+zjXXXPPgF3uxF3vtF3uxF3ut13md13nvxXXX8fD3fE+uuuqqq6666qqrrvofi8pVV1111VVXXXXVVVxzzTUPfu3Xfu33ep3XeZ33vuaaax4MsH/PPTzpl36J/bvv5i+/67t4fsT/L/fdd9+t991333f/1m/91nf/6I/+6OecOXPmwa/zOq/zXi/2Yi/22tdcc82Df+RHfuSz/+Ef/uG3ueqqq6666qqrrrrqfwoqV1111VVXXXXVVf8PXXPNNQ9+7dd+7fcCeKd3eqfP5pn277mHv/jO7+Tuv/5r7v6rv+L5Ec/p+pd5Gf4/uu+++2697777bv2Hf/iH3wY4c+bMg86ePfsMrrrqqquuuuqqq676n4TKVVddddVVV1111f8T11xzzYNf+7Vf+71e/MVf/LVf7MVe7LV5pv177uFJv/iLPOmXfomDe+7h+REv2NZ113EVnD179hlcddVVV1111VVXXfU/DZWrrrrqqquuuuqq/8OuueaaB7/2a7/2e73O67zOe19zzTUPBti/5x6e9Eu/xP7dd/OX3/VdvCDiBdu67joe+SZvwvUv8zJc/zIvw1VXXXXVVVddddVVV/0PReWqq6666qqrrrrq/5Brrrnmwa/92q/9XgDv9E7v9Nk80/499/AX3/md3P3Xf83df/VXvCDiBdu67joe+SZvwiPf9E3Zuu46np8zZ848iKuuuuqqq6666qqrrvqfg8pVV1111VVXXXXV/3LXXHPNg1/7tV/7vV78xV/8tV/sxV7stXmm/Xvu4Um/+Is8+Zd+if177uEFEc/f1nXXsX399Vz/0i/Ny77v+/JAy3vuYXnvvVz4m79hdc89vPgnfiJXXXXVVVddddVVV131PxCVq6666qqrrrrqqv+Frrnmmge/9mu/9nu9zuu8zntfc801DwbYv+cenvRLv8T+3Xfzl9/1Xbww4vnbuu46Hvkmb8L1L/MyXP8yL8MDLe+5hzt/9Ve58Nd/zcW//VvEFTe84Rty1VVXXXXVVVddddVV/0NRueqqq6666qqrrvpf4Jprrnnwa7/2a78XwDu90zt9Ns+0f889/MV3fid3//Vfc/df/RX/EvG8tq67jke+yZvwyDd9U7auu44HWt5zD3f+6q9y16/8Cst770VcIa666qqrrrrqqquuuup/BSpXXXXVVVddddVV/0Ndc801D37t137t93rxF3/x136xF3ux1+aZ9u+5hyf94i/y5F/6JfbvuYd/iXhOW9ddx/b113P9S780L/u+78sDLe+5hwt/8zcs772Xp37v9yKeTTx/y3vv5aqrrrrqqquuuuqqq/6HonLVVVddddVVV131P9A3fdM3Pf2aa655MMD+PffwpF/6Jfbvvpu//K7v4kUhntPWddfxyDd5E65/mZfh+pd5GR5oec893Pmrv8qFv/5rLv7t3yKuEFddddVVV1111VVXXfW/HpWrrrrqqquuuuqq/2E+93M/97euueaaB//Fd34nd//1X3P3X/0VLwrxnLauu45Hvsmb8Mg3fVO2rruOB1recw93/uqvctev/Aqre+/lfuJfQeIyiftdc801D+aqq6666qqrrrrqqqv+56By1VVXXXXVVVdd9T/Mi73Yi702wF9+13fxLxHPtnXddVz/Mi/D9nXX8bLv+7480PKee7jzV38VgKd+7/cCIP4NJK666qqrrrrqqquuuup/ESpXXXXVVVddddVV/4O82Iu92GsD7N9zDy+IeLat667jkW/yJlz/Mi/D9S/zMjzQ8p57uPNXf5ULf/3XXPzbvwVAgPhXkrjqqquuuuqqq6666qr/pahcddVVV1111VVX/Q9yzTXXPBjg7r/6K56buGLruut45Ju8CY980zdl67rreKDlPfdw56/+Knf9yq+wvPdeAASIfyWJF9Xqnnu46qqrrrrqqquuuuqq/6GoXHXVVVddddVVV/0P8mIv9mKvBXD3X/0VAAK2rruOR77JmwDwsu/7vjzQ8p57uPNXfxWAp37v9/JA4t9A4qqrrrrqqquuuuqqq/4PoXLVVVddddVVV131P8iLvdiLvTbAwT338HLv8z5c/zIvw/Uv8zI80PKee7jzV3+VC3/911z827/lgcS/gcR/lGuuuebBXHXVVVddddVVV1111f8cVK666qqrrrrqqqv+B7nmmmseDPBmX/u1PNDynnu481d/lbt+5VdY3nsvz038G0j8e4grxFVXXXXVVVddddVVV/2PReWqq6666qqrrrrqf4hrrrnmwTzT8p57uPNXf5XVPfdw56/+Ki+I+DeQ+LcQV1111VVXXXXVVVdd9b8Olauuuuqqq6666qr/gX733d+dF0b8G0j8a4irrrrqqquuuuqqq676X4/KVVddddVVV1111f8Q99133628EOLfQOJfQ/zrLe+9l6uuuuqqq6666qqrrvofispVV1111VVXXXXV/3Di30DiRSWuuuqqq6666qqrrrrq/ywqV1111VVXXXXVVf9DiX8DiReF+M9x5syZB3PVVVddddVVV1111VX/cxBcddVVV1111VVX/Q9y33333Qqwce21/KtJvDACBIirrrrqqquuuuqqq676f4PKVVddddVVV1111f92Ei+MuOqqq6666qqrrrrqqv+3CK666qqrrrrqqqv+Bzl79uytAPPrruNfJIHE8yNAgPjPJ2B5zz1cddVVV1111VVXXXXV/0BUrrrqqquuuuqqq/63kXhBxH8+cdVVV1111VVXXXXVVf9rULnqqquuuuqqq67630Li+RH/ucRVV1111VVXXXXVVVf9r0Vw1VVXXXXVVVdd9T/IfffddyvA4tpreQ4Sz02A+M8hQID417nmmmsezFVXXXXVVVddddVVV/3PQeWqq6666qqrrrrqfzKJ5yb+c4irrrrqqquuuuqqq676P4fgqquuuuqqq6666n+Q++6771aAxXXXgcQDCRD/cQQIECD+fVb33stVV1111VVXXXXVVVf9D0Tlqquuuuqqq6666n8w8R9PXHXVVVddddVVV1111f8bVK666qqrrrrqqqv+hxL/ccR/Iomrrrrqqquuuuqqq676H4rgqquuuuqqq6666n+Qs2fPPgNgcd11/HsJECD+E0hIQhLiOV1zzTUP5qqrrrrqqquuuuqqq/5noHLVVVddddVVV131f4z4zyGJq6666qqrrrrqqquu+l+GylVXXXXVVVddddX/IPfdd9+tAItrr+VfQ/znEIDEVVddddVVV1111VVX/S9F5aqrrrrqqquuuup/MfEfSzyTxL/G6t57ueqqq6666qqrrrrqqv+BqFx11VVXXXXVVVf9LyT+44gHkLjqqquuuuqqq6666qr/Qwiuuuqqq6666qqr/gc5e/bsrQDz667juQkQIP79BAgQgAQSSPxHOHPmzIO56qqrrrrqqquuuuqq/xmoXHXVVVddddVVV/0PJ/5jiOcicdVVV1111VVXXXXVVf/HUbnqqquuuuqqq676H0r8xxDPReI/grjqqquuuuqqq6666qr/8ahcddVVV1111VVX/Q9y33333QqwuPZa/j3E8yHx7yFesNW993LVVVddddVVV1111VX/A1G56qqrrrrqqquu+j9CvAAS/xbiqquuuuqqq6666qqr/tcjuOqqq6666qqrrvof5r777rsVYH7ttbwoBIjnQwKJfw0BAsRVV1111VVXXXXVVVf9n0Bw1VVXXXXVVVdd9T/UQ9/zPTnxUi/FCyJAPB8SSLyoBAgQ/zGuueaaB3PVVVddddVVV1111VX/M1C56qqrrrrqqquu+h/mMz/zM1/7m7/5m2+94Q3fkBve8A1Z3nsvu3/zN1z4m79hfe+9XPybv+EFknhRiKuuuuqqq6666qqrrvp/gcpVV1111VVXXXXV/0Cf+Zmf+Tov9mIv9lov/uIv/tov9mIv9tqLN3xDrn/DNwRgde+9XPybv+HuX/1VLv7N3wCAxL9E/McTV1111VVXXXXVVVdd9T8alauuuuqqq6666qr/Yc6ePfuMs2fPPuMf/uEffvtHf/RHP+eaa6558Iu92Iu91ou92Iu99uu8zuu89/zaa7n+Dd+Q69/wDVndey8X/+ZvuPi3f8vFv/kbVvfeywOJ/1ji+Vvdcw9XXXXVVVddddVVV131PxCVq6666qqrrrrqqv/h7rvvvlvvu+++W3/rt37re370R3/0c86cOfPgF3uxF3utF3/xF3/tF3uxF3vt69/wDbn+Dd8QgNW993Lxb/6Gu3/1V9n927/l30tcddVVV1111VVXXXXV/2pUrrrqqquuuuqqq/4Xue+++2697777bv2Hf/iH3/7RH/3Rz7nmmmse/GIv9mKv/WIv9mKv9Tqv8zrvPb/2Wq5/wzfk+jd8Q1b33svFv/kbdv/2b7n4N3/D6t57eVGIq6666qqrrrrqqquu+j+DylVXXXXVVVddddX/Yvfdd9+t991333f/1m/91nf/6I/+6OecOXPmQS/2Yi/22i/+4i/+2i/2Yi/22te/4Rty/Ru+IQCre+/l4t/8DXf/6q+y+7d/y/3EfwCJ+505c+ZBXHXVVVddddVVV1111f8M6EEPehBXXXXVVVddddVV/xddc801D36xF3ux136xF3ux13qd13md9+YBVvfey+7f/A0X//Zv2f2bv2F17738q0nc77o3eAMe8/EfD8DXf/3Xv89v/dZvfTdXXXXVVVddddVVV1313w896EEP4qqrrrrqqquuuuo/0jXXXPPg++6771b+B7nmmmsefObMmQe/2Iu92Gu9+Iu/+Gu/2Iu92GvzAKt772X3b/+Wu3/lV9j927/lBZK4n3i24y/5krz0l30ZAF//9V//Pr/1W7/13Vx11VVXXXXVVVddddV/P/SgBz2Iq6666qqrrrrqqn+Pa6655sEv9mIv9tpnzpx50Du90zt99n333Xfrj/7oj37Ob/3Wb303/0OdOXPmQS/+4i/+Oi/2Yi/2Wq/zOq/z3jzA6t572f2bv+Hi3/4tu3/zN6zuvRckxAt2/CVfkpf+si8D4DM/8zNf5x/+4R9+m6uuuuqqq6666qqrrvrvhx70oAdx1VVXXXXVVVdd9a91zTXXPPi1X/u13+vFX/zFX/vFXuzFXpvn4+3e7u3E/wLXXHPNg8+cOfPgF3uxF3utF3/xF3/tF3uxF3ttHmB1773s/u3fcs+v/iq7f/u3PD/HX/Ileekv+zIAPuRDPuQh9913361cddVVV1111VVXXXXVfz/0oAc9iKuuuuqqq6666qoXxTXXXPPg137t136v13md13nva6655sE80/499/DEX/xFnvRLv8QNL/MyvPanfioAb/d2byf+F7rmmmse/GIv9mKv/WIv9mKv9Tqv8zrvzQOs7r2X3b/9W3b/5m/Y/du/ZXXvvQAcf8mX5KW/7MsAeLu3eztx1VVXXXXVVVddddVV/zOgBz3oQVx11VVXXXXVVVc9P9dcc82DX/u1X/u9rrnmmge/zuu8znvzTPv33MMTf/EXAfiL7/ouHui1P/VTedSbvAkAH/IhH/KQ++6771b+Fztz5syDrrnmmoe82Iu92Gu9+Iu/+Gu/2Iu92GvzAKt772X3b/+W1T338OD3eA8A3u7t3k5cddVVV1111VVXXXXV/wxUrrrqqquuuuqqqx7gmmuuefBrv/Zrv9eLv/iLv/aLvdiLvTbPtH/PPTzxF3+Ru/7qr7jrr/8a8fzd8DIvw/8lZ8+efcbZs2ef8Q//8A+//aM/+qOfc8011zz4xV7sxV7rxV7sxV77dV7ndd57fu21XPcGb8D97rvvvlu56qqrrrrqqquuuuqq/zmoXHXVVVddddVV/69dc801D36xF3ux1z5z5syD3umd3umzeYC7/uqvuOuv/oo//67vAkBcIV6w7euu435nzpx58H333Xcr/4fcd999t9533323/tZv/db3/OiP/ujnnDlz5sEv9mIv9lov/uIv/toAX//1X/8+XHXVVVddddVVV1111f8cVK666qqrrrrqqv93rrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GvzTPv33MMTf/EXueuv/5q7/uqvuJ940TzqTd4EgFt/5Vc481Ivxf91991336333Xffrf/wD//w2z/6oz/6OVx11VVXXXXVVVddddX/PFSuuuqqq6666qr/F17sxV7stV/sxV7std7pnd7ps3mA/Xvu4Ym/+Is88Zd+if177uF+4l9n+7rreOSbvAkAh/feyxmuuuqqq6666qqrrrrqqv8BqFx11VVXXXXVVf8nXXPNNQ9+7dd+7fd68Rd/8dd5sRd7sdfimfbvuYcn/uIvAvDn3/VdPDfxotm+7jq2r7+e61/6pXn5931fHujonns4uucerrnmmgf/wz/8A1ddddVVV1111VVXXXXVfxsqV1111VVXXXXV/xnXXHPNg1/7tV/7vV7ndV7nva+55poH80z799zDE3/xF7nrr/+au/7qr3h+xL9s+7rreOSbvAk3vMzLcMPLvAwPtLr3XgDm117L/c6cOfMgrrrqqquuuuqqq6666qr/TlSuuuqqq6666qr/ta655poHv/Zrv/Z7AbzTO73TZ/NM+/fcw11/9Vfc9Vd/xZ9/13fxgoh/2fZ11/HIN3kTHvWmb8r2ddfxQKt77+WuX/kV7v7VX2V177085D3eg4e+53uyed11XHXVVVddddVVV1111VX/I1C56qqrrrrqqqv+V7nmmmse/Nqv/drv9eIv/uKv82Iv9mKvxTPt33MPT/zFX+Suv/5r7vqrv+KFES/Y9nXX8cg3eRO2r7+eR73Jm/BAq3vv5a5f+RUAnv5938cLc3jvvVx11VVXXXXVVVddddVV/+2oXHXVVVddddVV/yu82Iu92Gt/7ud+7m/xAPv33MMTf/EXeeIv/RL799zDCyNesO3rruORb/Im3PAyL8MNL/MyPNDy3nu5+1d+hd2//Vsu/s3f8MKI53TNNdc8mKuuuuqqq6666qqrrrrqvxOVq6666qqrrrrqf7wXe7EXe+13eqd3+qz9e+7hib/4iwD8+Xd9Fy8K8by2r7uOG17mZdi67jpe/n3flwda3nsvq3vu4eLf/A1P/77v40Uhrljdey8AG9dey9G993LNy73cg7nqqquuuuqqq6666qqr/jtRueqqq6666qqr/sd7ndd5nfd6sRd7sdf+rS/8Qp74S7/Ei0I8p+3rruORb/Im3PAyL8MNL/MyPNDy3nu5+1d+hYt/+7dc/Ju/AUC8aMSzLe+9F4DN667j6N57ueqqq6666qqrrrrqqqv+21G56qqrrrrqqqv+x3uxF3ux1wa466/+ihdGPKcbXuZluP6lX5qXf9/35bkt772Xu3/lV7jrV3+V1b33cj/xohEv3NE997Dgqquuuuqqq6666qqrrvpvRuWqq6666qqrrvof7XVe53Xe+5prrnkwwP499/D8iCu2r7uOR77Jm3DDy7wMN7zMy/BAy3vu4e5f/VWW997L3b/6qzw/4kUj/mUCzpw582Cuuuqqq6666qqrrrrqqv9OVK666qqrrrrqqv/RXuzFXuy1AJ74S7/EcxOwfd11PPJN3oRHvembsn3ddTzQ8p57uPtXf5WLf/M3XPzbv+UFES8a8UJIrO69F4DNa6/l8N57ueqqq6666qqrrrrqqqv+21G56qqrrrrqqqv+R3uxF3ux1wZ44i/9EgDb113Ho97kTQB4+fd9Xx5oec89rO69lwt/8zc87Xu/F/FMEi+I+JeJf4EEgLjqqquuuuqqq6666qqr/oehctVVV1111VVX/Y92zTXXPBjghpd+aV7+fd6HG17mZXig5T33cNev/ioX/+ZvuPg3f8P9xDNJvCDiXyb+BRIAAlb33gvAxnXXsbznHq655poHc9VVV1111VVXXXXVVVf9d6Jy1VVXXXXVVVf9j/U6r/M6780zvfz7vi/3u/g3f8OFv/kb7v6VX2F57708kPiXiReN+BdIiBfummuuefB99913K1ddddVVV1111VVXXXXVfwcqV1111VVXXXXV/3jLe+7hrl/9VS7+zd9w8W/+hhdEPBeJ5yb+ZeJfJonnZ3XvvcyvvZaN667jqquuuuqqq6666qqrrvpvR+Wqq6666qqrrvof68yZMw8CuOtXf5Wnfe/38sKI5yLx3MS/TPzLJPEvWd57LwBnzpx58H333XcrV1111VVXXXXVVVddddV/B4Krrrrqqquuuup/rLNnzz4DYHHddbww4rlIPJAA8cIJEC+cAEm8MKt77gFg49prueqqq6666qqrrrrqqqv+21G56qqrrrrqqqv+x7rvvvtuBVhcey0viHguEg8k/mXiXyYAiRdGPKeje+7hqquuuuqqq6666qqrrvpvRXDVVVddddVVV/2vJV448cIJEC+cAAFIvCACxHOSxNG993LNNdc8mKuuuuqqq6666qqrrrrqvwuVq6666qqrrrrqf6yzZ8/eCjC/7joeSLwAEvcTL5z4l4lnknhBxHNa3XsvABvXXstVV1111VVXXXXVVVdd9d+OylVXXXXVVVdd9b+KeAEk7ideOPHCiQeQeH7E87e6914AFtdeC8CZM2cexFVXXXXVVVddddVVV13134XKVVddddVVV131P9Z99913K8Di2msBEC+ceOHEv0y8cOJFI2B5zz1cddVVV1111VVXXXXVVf+tCK666qqrrrrqqv/R7rvvvlsBFtdeywskIV448cIJEM9F4oHECyee1zXXXPNgrrrqqquuuuqqq6666qr/LgRXXXXVVVddddX/aGfPnr0VYHHddTxfEuKFEy+ceD4k7idAvHDiivW99wKwcd11HN17L1ddddVVV1111VVXXXXVfyuCq6666qqrrrrqfzXxwokXTjwfEvcTL5wA8Wyre+4BYOO66wC45pprHsxVV1111VVXXXXVVVdd9d+F4Kqrrrrqqquu+h/tvvvuuxVgfu21PDdJvCACxAsmQDwfEgACxAsnXrjlvfdy1VVXXXXVVVddddVVV/23onLVVVddddVVV/2Pdt99990KsLjuOu4nAIkXRLxw4gWQABAvnHjRnTlz5sFcddVVV1111VVXXXXVVf9dqFx11VVXXXXVVf+riBdOvHDiBZAQL5z4l63vvReAxbXXsrz3Xq666qqrrrrqqquuuuqq/1ZUrrrqqquuuuqq/9HOnj37DID5tdcinkni+REvmHjhxAsnXjjxnMRVV1111VVXXXXVVVdd9T8Alauuuuqqq6666n+0++6771aAxXXXAYDE8yNeMPHCSeIFES+ceE6re+8FYHHttQi45pprHsxVV1111VVXXXXVVVdd9d+FylVXXXXVVVdd9b+aeOHECyYAiRdEvHDi+ZC439E993DVVVddddVVV1111VVX/bciuOqqq6666qqr/kc7e/bsrQCLa68FiQcSL5x4wQQg8fwIEC+YAPF8SACs7r0XgI3rrgPgmmuueTBXXXXVVVddddVVV1111X8HKlddddVVV1111f8OEg8kXjDxwokXTLxw4gWQEM9pec89XHXVVVddddVVV1111VX/rQiuuuqqq6666qr/0e67775bAebXXsv9xAsmXjAB4pkknpt4wQSIF0BCPNv63nsBWFx3HQBnzpx5MFddddVVV1111VVXXXXVfweCq6666qqrrrrqf7z77rvvVoD5tdciXjDxgokHkHggAeIFEy+YAPGCLe+9l6uuuuqqq6666qqrrrrqvw3BVVddddVVV131P9599913K8Diuut4QcQLJh5A4oHECyZAvGACkHhBxBXXXHPNg7nqqquuuuqqq6666qqr/jsQXHXVVVddddVV/6sJEM+fAPGCiRdMvGACBCDx/KzuvReAxXXXsbznHq666qqrrrrqqquuuuqq/zYEV1111VVXXXXV/3hnz569FWBx7bU8kHjBxPMhASBAPH8CxPMnQDyTxHMTIGB9770ALK69FoAzZ848iKuuuuqqq6666qqrrrrqvwPBVVddddVVV131P9599913K8Dxl3opjr/USwEgXjDxfEgAiBdMvGDiASSem3he4qqrrrrqqquuuuqqq676b0blqquuuuqqq676H+8f/uEffucf/uEffvvF3vANX/v6N3xDVvfey+7f/A0X/+Zv2P2bv2F1773cT7xg4vkTL5h4LhIPJF645b33ctVVV1111VVXXXXVVVf9t6EcP36cq6666qqrrrrqf7azZ8/eCujw8HD36Oho94aHPOTBWw97GGde7dW4+W3fluvf6I3YftjDaIeHrO69l+cmCfH8iRdMPBeJ+wkQz9/s2ms59aqvyvLee1necw/thhtu/dM//dOf4aqrrrrqqquuuuqqq676r0blqquuuuqqq676X+G3fuu3vvu3fuu3vhvgmmuuefCLvdiLvdaLvdiLvfbrvM7rvPf82mu57g3fkOve8A1Z3Xsvq3vuYfdv/obdv/1bLv3t3/KCiBdMvGDiBRMw3HsvAItrr2V5zz1cc801D+aqq6666qqrrrrqqquu+u9A5aqrrrrqqquu+l/nvvvuu/W+++679bd+67e+50d/9Ec/58yZMw9+sRd7sdd68Rd/8dd+sRd7sdeeX3stx1/qpQBY3Xsvu3/zN1z627/lnl/9VQDECyZeAAnxgonnTxJXXXXVVVddddVVV1111X8b9KAHPYirrrrqqquuuur/jmuuuebBL/ZiL/baL/ZiL/ZaL/ZiL/ba11xzzYN5gNW993Lpb/+We37lV7j0t3/LA4kXQEK8YOI5HXvJl+TFv+zLuPA3f8Ndv/ZrnH25l/vur//6r38frrrqqquuuuqqq6666qr/auhBD3oQV1111VVXXXXV/11nzpx50Iu/+Iu/zuu8zuu814u92Iu9Ng+wuvdeVvfcw32/9mus7rmHS3/7tzw3Sbwg4vmbXXstL/+938vy3nu5+Dd/wxO77ru//uu//n246qqrrrrqqquuuuqqq/6roQc96EFcddVVV1111VX/+a655poHv/Zrv/Z7/eiP/ujn8N/kmmuuefCZM2ce/GIv9mKv9eIv/uKv/WIv9mKvzQOs7r2XS3/zN1z627/l3l/9VSTxgojnT8Ds2mt5ue/9Xpb33gvAd/zYj73Pb/3Wb303V1111VVXXXXVVVddddV/NfSgBz2Iq6666qqrrrrqP94111zz4DNnzjz4xV7sxV7rnd7pnT6bZ/qt3/qt7/6t3/qt7/mHf/iH3+a/2TXXXPPgF3uxF3vtF3uxF3ut13md13lvnsv63nu599d+jUt/8zdc+tu/BUC8YOLZXvVXfoX7fciHfMhD7rvvvlu56qqrrrrqqquuuuqqq/6roQc96EFcddVVV1111VX/Ma655poHv/Zrv/Z7vfiLv/jrvNiLvdhr8Uz799wDwPZ11wHwmZ/5ma/zD//wD7/N/zDXXHPNg1/sxV7stV/ndV7nvV7sxV7stXmA1b33sve3f8ulv/kb1vfey6W//VvuJ57Xq/7Kr3C/t3u7txNXXXXVVVddddVVV1111X8HKlddddVVV1111b/ZNddc8+AzZ848+MVe7MVe653e6Z0+mwfYv+ceHv+Lv8hdf/3X3PlXf8Wj3+RNeL1P/VQArrnmmgf/wz/8A//T3Hfffbfed9993/1bv/Vb333NNdc8+MyZMw96ndd5nfe+5pprHvxiL/Zirz1/gzfgmjd4AwDW997Lpb/9W/b+5m+479d+jee2vvdeZtdey1VXXXXVVVddddVVV13134rKVVddddVVV131r3LNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVem2fav+ce9u6+mzv/6q/4s+/6Lp7bK7zP+3C/M2fOPIj/4e67775b77vvvlv/4R/+4XcArrnmmge/2Iu92Gu/2Iu92Gu9zuu8znvPrr2Wa97gDbjmDd6Am9/jPVjdey97f/u37P3N37D3d3/H/X7rt37ru7nqqquuuuqqq6666qqr/rtQueqqq6666qqrXqhrrrnmwWfOnHnwi73Yi73WO73TO302D7B/zz08/hd/kbv++q+586/+ihdEwM711wOw+zd/wzXXXPNg/pe57777br3vvvu++7d+67e+++u//uvf55prrnnwa7/2a7/Xi7/4i7/2i73Yi7327NprOfaSLwnv/u6s772X2bXXAnDffffdylVXXXXVVVddddVVV13134XKVVddddVVV131PK655poHv/Zrv/Z7vfiLv/hrv9iLvdhr8wB3/tVfcedf/RVP+KVfYv+ee3hhxBWPfpM3AeDeX/1VAK658cYH87/cfffdd+uP/uiPfs6P/uiPfs6ZM2ce9OIv/uKv82Iv9mKvdc011zz4xV7sxV4b4B/+4R9++x/+4R9+h6uuuuqqq6666qqrrrrqvwuVq6666qqrrrrqshd7sRd77Rd7sRd7rdd5ndd572uuuebBPNP+Pffw+F/8Re7667/mzr/6K14U4jnd8DIvA8Du3/4t82uugRtv5P+Ss2fPPuO3fuu3vvu3fuu3vhvgmmuuefCLvdiLvdZv/dZvfQ9XXXXVVVddddVVV1111X8nKlddddVVV131/9Q111zz4Nd+7dd+rxd/8Rd/7Rd7sRd7bR5g7557eMIv/iJP+KVfYv+ee3hRiee1fd11PPpN3gSAS3/zN8zf4A04c+bMg/k/7L777rv1vvvuu5Wrrrrqqquuuuqqq6666r8blauuuuqqq676f+Saa6558Gu/9mu/1+u8zuu89zXXXPNgnmnvnnt4wi/+Inf+9V9z11/9Ff9a4jltX3cdj36TN+HRb/qmbF93HQCre+9lfe+9XPrbv2Xxxm/MVVddddVVV1111VVXXXXVfwEqV1111VVXXfV/2DXXXPPg137t136vF3/xF3/tF3uxF3ttHmDvnnt4wi/+Io//pV9i/557EP964ort667j0W/yJtzwMi/DjS/zMjzQ6p57mF93HQ90zTXXPJirrrrqqquuuuqqq6666qr/fFSuuuqqq6666v+Ya6655sGv/dqv/V6v8zqv897XXHPNg3mmvXvu4Qm/+Ivs3XMPT/ilX+J+AsS/joDt667j0W/yJjz6Td+U7euu44FW99zD3b/6q1z8m79hdc89vOoP/AD3W997LwDXXHPNg++7775bueqqq6666qqrrrrqqquu+s9D5aqrrrrqqqv+j3id13md9/7wD//w7+IB9u65hyf84i/y+F/6JfbvuYcHEv8629ddx2Pe5E244WVehhtf5mV4oNU993Dxb/6G5b338vTv/V7E85pfey3i2c6cOfPg++6771auuuqqq6666qqrrrrqqqv+81C56qqrrrrqqv8DXud1Xue93+md3umz9+6+myf80i8B8Kff9V08P+JFt33ddTz6Td6Ex7zpm7J93XU80Oqee7jrV3+Vi3/91+z+7d9yP/G8Vvfcw/y665hdey3re+/lqquuuuqqq6666qqrrrrqvwiVq6666qqrrvo/4B3f8R0/68yZMw/6qY/8SO78q7/i+RH/su3rruPRb/Im3PgyL8ONL/MyPNDynntY3XsvF//mb3j6934vz494/lb33sv8uuuYX3stw733sr73Xq655poH/8M//ANXXXXVVVddddVVV1111VX/iahcddVVV1111f9yr/M6r/Pe11xzzYMB7vyrv+K5iRdu+7rrePSbvAmPedM3Zfu663ig5T33cPev/ioX/+ZvuPg3f8P9xPMSz594NnHF6p57OHPmzIO46qqrrrrqqquuuuqqq676z0Xlqquuuuqqq/6Xe7EXe7HXAnjCL/0SDySev+3rruPRb/Im7Fx/PY9+kzfhgZb33MPq3nu58Nd/zdO/93sBQOKBxPMSz5+4YnXPPfBSL8Xsuuvgb/8WgGuuuebBXHXVVVddddVVV1111VVX/eeictVVV1111VX/y73O67zOewP86Xd9FwDieW1fdx2PfpM34TFv+qZsX3cdD7S85x7u+pVf4eLf/A0X/+ZvABDPn3he4vkTz7a8914AZtdei4D1vfdyzY03Ppirrrrqqquuuuqqq6666qr/XFSuuuqqq6666n+x13md13lvgDv/6q/Yv/tuxBXb113Ho9/kTdi5/noe/SZvwgMt77mH5b33cvGv/5qnfe/38kJJ3E+86MRzWt1zDwDza68FYH3vvXDjjVx11VVXXXXVVVddddVVV/0no3LVVVddddVV/4u9zuu8znsBPOGXfont667j0W/yJjzmTd+U7euu44GW99zDXb/yK1z4m7/h4t/8DQDi+RPPSzx/4nmJ57W+914AZtddB8D63ns5c+bMg7nqqquuuuqqq6666qqrrvrPReWqq6666qqr/hd7sRd7sdcGeL1P/VQeaHnPPSzvvZcLf/3XPO17v5cXlXjRieclnpd4TgLW99zDVVddddVVV1111VVXXXXVfwEqV1111VVXXfW/1Iu92Iu9Ng+wvOce7vyVX+Hi3/wNF/7mb7ifeF7ieYnnIgEgnpd4XuIFW91zDwDza6/lftdcc82Dueqqq6666qqrrrrqqquu+s9F5aqrrrrqqqv+l1vecw+/+27vxvMjnpd40YnnJZ6XeP7EM0kAzK69FoD1vfcCcM011zz4vvvuu5Wrrrrqqquuuuqqq6666qr/HARXXXXVVVdd9X+UeNGJ5yWel3jRiWdb3Xsv95tfdx3iimuuuebBXHXVVVddddVVV1111VVX/echuOqqq6666qr/pc6ePXsr/0rieYnnJYkXlXhe4nnt/s3fADC79lrW994LwJkzZx7MVVddddVVV1111VVXXXXVfx4qV1111VVXXfW/1H333XcrwOK663hu4nmJ5yVedOJ5ieclnouEeE4C1vfey5kzZx7EVVddddVVV1111VVXXXXVfx6Cq6666qqrrvpf7B/+4R9+G+DkS70U9xP/PuJ5ieclnpd4XuKK1b33AjC/9loA1vfcw1VXXXXVVVddddVVV1111X8yKlddddVVV131/4B4XuJ5ieclnpd4XuJ5iWdb3XMPAP1114EEwDXXXPMQrrrqqquuuuqqq6666qqr/vMQXHXVVVddddX/Yvfdd9+tAIvrrgNAPC/xvMTzEs8k8cKI5yWelwAknh8Bw733cs011zyYq6666qqrrrrqqquuuuqq/zwEV1111VVXXfW/2H333XcrwPzaaxH/8cS/jXhe63vvBWB+7bUArO+9l6uuuuqqq6666qqrrrrqqv9kBFddddVVV131v9g//MM//A7AyZd+aZ4f8bzE8xLPSzwv8bzEv0zA6p57AOivvRaA9b33cs011zyYq6666qqrrrrqqquuuuqq/zxUrrrqqquuuur/KPG8xPMSDyABIJ6XeF7ieYlnknig9b33AjC79loEDPfey5kzZx7EVVddddVVV1111VVXXXXVfx6Cq6666qqrrvpf7OzZs7cCLK69lv8o4nmJ5yWel3he4oW75pprHsxVV1111VVXXXXVVVddddV/DoKrrrrqqquu+l/svvvuuxVgcd11PJB4XuJ5iX8b8bzE8xLPtrr3XgBm114LwHDvvQCcOXPmwVx11VVXXXXVVVddddVVV/3nILjqqquuuuqq/+Xuu+++WwEW110HgHhe4nmJ5yWel/iXieciIZ7X6t57AZhdey1XXXXVVVddddVVV1111VX/BQiuuuqqq6666n+5s2fP3gqwuO46XlTieUniuYnnJZ6TeF7ieQlY33MPALNrr2W4914Arrnmmgdz1VVXXXXVVVddddVVV131n4Pgqquuuuqqq/6Xu++++24FmF97LeJ5iX8b8bzEv0w8L/G8BOz/zd9w5syZB3HVVVddddVVV1111VVXXfWfg+Cqq6666qqr/pe77777bgVYXHstz008L/G8xL9MPC/xnAQg8UDi2Vb33gvA7Nprueqqq6666qqrrrrqqquu+i9A5aqrrrrqqqv+lzt79uwzABbXXce/RDwv8bzEcxLPS/zLxHNa3XMPAP111wEw3Hcf11xzzYO56qqrrrrqqquuuuqqq676z0Fw1VVXXXXVVf/L3XfffbcCLK67jgcS/zLxTBL3E/8y8bzEcxLPS1wxu/ZaBAz33ss111zzYK666qqrrrrqqquuuuqqq/5zULnqqquuuuqq/+XOnj17K8D8uuu4n3he4l8mnpd4TuJ5iWeSABDPS8Clv/1bAPprr+V+Z86ceTBXXXXVVVddddVVV1111VX/OQiuuuqqq6666v8B8bzEv0z8y8S/TDx/wz33cNVVV1111VVXXXXVVVdd9Z+I4Kqrrrrqqqv+l7vvvvtuve+++25dXHsti+uuQ/zLxPMSz0k8L/GcxPMSz0k82+qeewCYXXstAoZ77+Waa655MFddddVVV1111VVXXXXVVf85CK666qqrrrrq/4CzZ8/eCjC/9lqem/gXSIh/mfiXieckXrjh3nsBuOaaax7MVVddddVVV1111VVXXXXVfzyCq6666qqrrvo/5ORLvRQnXuqleGHEv0w8J/G8xHOSxL9kuPdeAPprrwUJccWZM2cezFVXXXXVVVddddVVV1111X88KlddddVVV131f8CP/MiPfM47vuM78uLv9V6vDbC85x4u/s3fsPs3f8Pqnnu4+Dd/A4B4XuI5iX+ZeE7ieYnnJK5Y33svs2uvZXbttQz33MNVV1111VVXXXXVVVddddV/Isrx48e56qqrrrrqqv/tzp49e6skDg8Pdzc3N48fv/ba49sPfzhnXu3VuP6N3ogb3uiN2H74w+m2tjh46lO5nwAkHkg8J/GcxHMSzyRxP/GcxLOdfNVXZX7ddVz6oz9iuPdeTr7hG/KEZzzjd2699da/5qqrrrrqqquuuuqqq6666j8Wlauuuuqqq676P+K3fuu3vue3fuu3vgfgmmuuefCLvdiLvfaLvdiLvdbrvM7rvPf8uuu4/rrruP6N3ojHfOInsrrnHi7+zd9wz6/8Crt/+7fcTzwn8ZzECyBxP/GcxPM3u/ZaDoHh3ns5c+bMg7jqqquuuuqqq6666qqrrvqPR+Wqq6666qqr/g+67777br3vvvu++7d+67e++0d/9Ec/B+DFXuzFXvt1Xud13uvFXuzFXnt+3XVcf911XP9Gb8TqnntY3Xcfu3/91+z+zd+w+zd/A4D4l4nnJJ6TeF57f/M3HHupl6K79loA+muv5ezv/u4zuOqqq6666qqrrrrqqquu+o9H5aqrrrrqqqv+j7vvvvtuBbjvvvu++7d+67e++8yZMw+65pprHvJiL/Zir/XiL/7ir/1iL/Zirz2/7jqOv+RLArC65x52/+ZvuPQ3f8Pq3nvZ/Zu/AUA8J/GvJ56LRH/ttdx33323ctVVV1111VVXXXXVVVdd9R8PPehBD+Kqq6666qqr/j+75pprHvxiL/Zir/ViL/Zir33NNdc8+MVe7MVemwdY3XMPl/7mb9j9m7/h3l/9VQDEc5EQz0k8J3HFNW/4hjz8Ez6Bi7/2axz87d9y88d9HG/3dm8nrrrqqquuuuqqq6666qqr/uOhBz3oQVx11VVXXXXVVc92zTXXPPjFXuzFXvvFXuzFXut1Xud13pvnsrrnHi79zd9w6W/+hnt/9VdBQjwn8ZzEs+281Evx4l/+5Rz87d8y3nsvf13rd3/913/9+3DVVVddddVVV1111VVXXfUfDz3oQQ/iqquuuuqqq656wa655poHv9iLvdhrv87rvM57vdiLvdhr8wCre+5BEvf+yq9w6W//lkt/8zeI5ySe0/zaa3nZ7/9+hnvvBeBbf+zH3ue3fuu3vpurrrrqqquuuuqqq6666qr/eOhBD3oQV1111VVXXXXVi+bMmTMPuuaaax7yYi/2Yq/14i/+4q/9Yi/2Yq/NA6zvvZfVPfdw36/+Kut772Xvb/6GBxIwu/ZaXvb7v5/h3nvpr72WD/mQD3nIfffddytXXXXVVVddddVVV1111VX/8dCDHvQgrrrqqquuuuqqf5trrrnmwS/2Yi/2Wi/2Yi/22tdcc82DX+zFXuy1eYD1vfdy6W/+hr2/+RvW997L3t/8DQCv8mu/xv3e7u3eTlx11VVXXXXVVVddddVVV/3nQA960IO46qqrrrrqqqv+Y1xzzTUPfrEXe7HXfrEXe7HXerEXe7HXvuaaax7MA6zvvZe9v/kbdl7qpZhdey2/9Vu/9T1f//Vf/95cddVVV1111VVXXXXVVVf950APetCDuOqqq6666qqr/nNcc801D36xF3ux136xF3ux13qd13md9+a5fP3Xf/37/NZv/dZ3c9VVV1111VVXXXXVVVdd9Z8DPehBD+Kqq6666qqrrvqvcc011zz4xV7sxV77dV7ndd7rR37kRz7nH/7hH36bq6666qqrrrrqqquuuuqq/zzoQQ96EFddddVVV1111VVXXXXVVVddddVVV1111f9JVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8V/wi9Xa3Gye3YywAAAABJRU5ErkJggg==) @@ -143,11 +149,7 @@ exampleSketch = startSketchOn('XZ') |> close() example = extrude(exampleSketch, length = 1) - |> patternLinear3d({ - axis = [1, 0, 1], - instances = 7, - distance = 6 - }, %) + |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6) |> appearance(color = '#ff0000', metalness = 90, roughness = 90) ``` @@ -161,12 +163,12 @@ exampleSketch = startSketchOn('XZ') |> line(end = [-1, 0]) |> line(end = [0, -5]) |> close() - |> patternCircular2d({ + |> patternCircular2d( center = [0, 0], instances = 13, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) example = extrude(exampleSketch, length = 1) |> appearance(color = '#ff0000', metalness = 90, roughness = 90) diff --git a/docs/kcl/helix.md b/docs/kcl/helix.md index a863b961b..bb26ef3f3 100644 --- a/docs/kcl/helix.md +++ b/docs/kcl/helix.md @@ -33,7 +33,14 @@ helix(revolutions: number, angle_start: number, ccw?: bool, radius: number, axis ```js // Create a helix around the Z axis. -helixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = 'Z') +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 5, + length = 10, + radius = 5, + axis = 'Z', +) // Create a spring by sweeping around the helix path. springSketch = startSketchOn('YZ') @@ -49,7 +56,14 @@ helper001 = startSketchOn('XZ') |> startProfileAt([0, 0], %) |> line(end = [0, 10], tag = $edge001) -helixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = edge001) +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 5, + length = 10, + radius = 5, + axis = edge001, +) // Create a spring by sweeping around the helix path. springSketch = startSketchOn('XY') @@ -61,12 +75,19 @@ springSketch = startSketchOn('XY') ```js // Create a helix around a custom axis. -helixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = { +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 5, + length = 10, + radius = 5, + axis = { custom = { axis = [0, 0, 1.0], origin = [0, 0.25, 0] } -}) +}, +) // Create a spring by sweeping around the helix path. springSketch = startSketchOn('XY') diff --git a/docs/kcl/loft.md b/docs/kcl/loft.md index ba48f202d..e71948b0f 100644 --- a/docs/kcl/loft.md +++ b/docs/kcl/loft.md @@ -93,11 +93,17 @@ circleSketch0 = startSketchOn(offsetPlane('XY', 75)) circleSketch1 = startSketchOn(offsetPlane('XY', 150)) |> circle({ center = [0, 100], radius = 20 }, %) -loft([ +loft( + [ squareSketch, circleSketch0, circleSketch1 -], baseCurveIndex = 0, bezApproximateRational = false, tolerance = 0.000001, vDegree = 2) +], + baseCurveIndex = 0, + bezApproximateRational = false, + tolerance = 0.000001, + vDegree = 2, +) ``` ![Rendered example of loft 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAIYp0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVdd9b/eNddc82Ce6cyZMw/mma655poH8yK47777buUBzp49e+t99913K1ddddVVV1111VVX/W9H5aqrrrrqqquuuuqq/7GuueaaBwO82Iu92GufOXPmQQDXXHPNg6+55poHnzlz5sHXXHPNg3ku9913363XXHPNg/kPct99990KcPbs2Vvvu+++WwH+4R/+4XcA7rvvvlv/4R/+4be56qqrrrrqqquuuup/KvSgBz2Iq6666qqrrrrqqqv+e11zzTUPPnPmzINf7MVe7LUAXvzFX/y1X+zFXuy1+RdcvHgRgIsXLwJw8eJF7nfx4kX+NU6cOMH9Tpw4AcCJEyc4ceIE/5L77rvv1rNnz95633333foP//APv3Pffffd+g//8A+/zVVXXXXVVVddddVV/93Qgx70IK666qqrrrrqqquu+q91zTXXPPi1X/u13wvgnd7pnT6b5+PixYsAPO1pT+PixYsAPP3pTwfg4sWLXLx4kf9KJ06cAOChD30oAA95yEMAOHHiBA996EN5fu67775b/+Ef/uG3/+Ef/uF37rvvvlv/4R/+4be56qqrrrrqqquuuuq/EnrQgx7EVVddddVVV1111VX/ua655poHv/Zrv/Z7XXPNNQ9+ndd5nffmuVy8eJGnP/3pXLx4kac97Wk8/elP5z+bbf4jnThxghMnTnDixAke8pCHcOLECR760IfyQPfdd9+t//AP//Db//AP//A7v/Vbv/XdXHXVVVddddVVV131nw096EEP4qqrrrrqqquuuuqq/xzv+I7v+Fkv/uIv/tov9mIv9to8wMWLF/nLv/xLnva0p/H0pz+d/6tOnDjB8ePHOXHiBC/7si/LQx/6UO5333333Xr27Nlbf+u3fut7fuu3fuu7ueqqq6666qqrrrrqPwN60IMexFVXXXXVVVddddVV/3GuueaaB7/Yi73Ya3/4h3/4d/FMFy9e5C//8i952tOextOf/nT+vzpx4gTHjx/n5V7u5XjZl31Z7nfffffd+lu/9Vvf/du//dvfc999993KVVddddVVV1111VX/UdCDHvQgrrrqqquuuuqqq67697vmmmse/GIv9mKv/eEf/uHfxTM97WlP4y//8i/5y7/8S656TidO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SEISEYEkJCEJSUhCEpKQhCQAJCEJSUgCQBKSAJCEJAAkASAJSQBIAkASL/uyL8s111zDH/3RH3HHHXcAIAkASQBIAkASAJIAkASAJAAkASAJSQBIQhKSAJCEJCQhCUlIQhKSkEREIImIQBIRgSQigoggIogIIgJJRASSiAgigoggIiilEBGUUogISimUUiilUEqhlEJEUEqhlEIphYggIogIIoKIQBKSkIQkJPH82AbANraxjW1sk5lkJplJZpKZ2MY2trFNZpKZ2MY2mYltbANgm+fHNrYBsM0D2ea5SeK5SeJ+knhuknhuknhukgCQxAOt12tmsxk33XQTOzs7PO5xj+PfShLPTRIPZJsHss1zsw2AbWxzP9u01ogIAG6//Xb+6q/+iqOjIx70oAcdf+3Xfu23ft3Xfd332djYOPYP//APv8NVV1111VVXXfX/BeX48eNcddVVV1111VX/t11zzTUPfrM3e7OP+tzP/dzffvEXf/HXXq1Wx3/913+db/iGb+CJT3witrGNbVpr1FoppVBKISKICCICSUQEkogIJCEJSUhCEpKQhCQkIQlJSEISAJKQBIAkJAEgCUkASEISAJIAkIQkAN7qrd4KgF/91V9lvV4jiftJAkASAJIAkASAJAAkIQkASQBIQhKSAJCEJCQhCQBJSEISEYEkJCGJiEASEYEkIoKIQBKSiAgigoggIogIIoKIICKICCKCUgoRQSmFUgqlFCKCiCAiiAgigoggIogISilEBJKICCQhCUlIQhLPj23uZxvb2MY2mYltbGMb29jGNraxjW1sY5vMxDa2sY1tAGxjG9vYxja2AbANgG3+NSRxP0ncTxLPTRLPTRIAknhukrjf/v4+L/3SLw3A2bNn2dvb44WRxItCEi+Ibe5nG9vczzb3sw2Abe43TRMRAcByueSJT3wif/VXf8VyuWRzc/P4a73Wa73267zO67z35ubm8bNnzz7j8PBwl6uuuuqqq6666v8yKlddddVVV1111f9Z11xzzYPf8R3f8bNe53Ve570Bzp8/zx/8wR/wcz/3c9gGwDa2sc00TdRaiQgkIQlJSEISkpCEJAAkIQlJSEISkpCEJCTx3CRxP0ncTxL3k8Rzk8T93viN3xiAxz3ucezt7fFAkgCQBIAkACQBIAkASdxPEgCSeCBJPDdJSEISknggSQBIAkAS95OE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Vf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q/iHwFQHN4Y8XkqbAAAAABJRU5ErkJggg==) diff --git a/docs/kcl/patternCircular2d.md b/docs/kcl/patternCircular2d.md index c6066700c..410f80c4e 100644 --- a/docs/kcl/patternCircular2d.md +++ b/docs/kcl/patternCircular2d.md @@ -9,7 +9,7 @@ Repeat a 2-dimensional sketch some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained. ```js -patternCircular2d(data: CircularPattern2dData, sketch_set: SketchSet) -> [Sketch] +patternCircular2d(sketch_set: SketchSet, instances: integer, center: [number], arc_degrees: number, rotate_duplicates: bool, use_original?: bool) -> [Sketch] ``` @@ -17,8 +17,12 @@ patternCircular2d(data: CircularPattern2dData, sketch_set: SketchSet) -> [Sketch | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`CircularPattern2dData`](/docs/kcl/types/CircularPattern2dData) | Data for a circular pattern on a 2D sketch. | Yes | -| `sketch_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | A sketch or a group of sketches. | Yes | +| `sketch_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | Which sketch(es) to pattern | Yes | +| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `center` | `[number]` | The center about which to make the pattern. This is a 2D vector. | Yes | +| `arc_degrees` | `number` | The arc angle (in degrees) to place the repetitions. Must be greater than 0. | Yes | +| `rotate_duplicates` | `bool` | Whether or not to rotate the duplicates as they are copied. | Yes | +| `use_original` | `bool` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns @@ -34,12 +38,12 @@ exampleSketch = startSketchOn('XZ') |> line(end = [-1, 0]) |> line(end = [0, -5]) |> close() - |> patternCircular2d({ + |> patternCircular2d( center = [0, 0], instances = 13, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) example = extrude(exampleSketch, length = 1) ``` diff --git a/docs/kcl/patternCircular3d.md b/docs/kcl/patternCircular3d.md index d31009197..cc205ccf7 100644 --- a/docs/kcl/patternCircular3d.md +++ b/docs/kcl/patternCircular3d.md @@ -9,7 +9,7 @@ Repeat a 3-dimensional solid some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained. ```js -patternCircular3d(data: CircularPattern3dData, solid_set: SolidSet) -> [Solid] +patternCircular3d(solid_set: SolidSet, instances: integer, axis: [number], center: [number], arc_degrees: number, rotate_duplicates: bool, use_original?: bool) -> [Solid] ``` @@ -17,8 +17,13 @@ patternCircular3d(data: CircularPattern3dData, solid_set: SolidSet) -> [Solid] | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`CircularPattern3dData`](/docs/kcl/types/CircularPattern3dData) | Data for a circular pattern on a 3D model. | Yes | -| `solid_set` | [`SolidSet`](/docs/kcl/types/SolidSet) | A solid or a group of solids. | Yes | +| `solid_set` | [`SolidSet`](/docs/kcl/types/SolidSet) | Which solid(s) to pattern | Yes | +| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `axis` | `[number]` | The axis around which to make the pattern. This is a 3D vector | Yes | +| `center` | `[number]` | The center about which to make the pattern. This is a 3D vector. | Yes | +| `arc_degrees` | `number` | The arc angle (in degrees) to place the repetitions. Must be greater than 0. | Yes | +| `rotate_duplicates` | `bool` | Whether or not to rotate the duplicates as they are copied. | Yes | +| `use_original` | `bool` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns @@ -32,13 +37,13 @@ exampleSketch = startSketchOn('XZ') |> circle({ center = [0, 0], radius = 1 }, %) example = extrude(exampleSketch, length = -5) - |> patternCircular3d({ + |> patternCircular3d( axis = [1, -1, 0], center = [10, -20, 0], instances = 11, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) ``` ![Rendered example of patternCircular3d 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAGU+ElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrvpvdc011zz4tV/7td/rxV/8xV/7zJkzD77mmmsefN999936D//wD79933333fqjP/qjn8NVV1111VVXXXXVVVf921C56qqrrrrqqquuuuq/3DXXXPPg137t136vd3qnd/psno9rrrnmwX3fv/cwDLcC/OiP/ujncNWL7JprrnkwD3DffffdylVXXXXVVVddddX/T1Suuuqqq6666qqrrvov82Iv9mKv/eEf/uHfdc011zyYZ9rf3+fxj388t99+O894xjNordFaYxxHNjY2Hvze7/3en/0P//APv/MP//APv81Vz+Gaa6558JkzZx78Yi/2Yq/14i/+4q/9Yi/2Yq/NA9x33323XnPNNQ8GuO+++249e/bsrX//93//2//wD//wO//wD//w21x11VVXXXXVVVf934ce9KAHcdVVV1111VVXXXXVf64Xe7EXe+0P//AP/65rrrnmwQCHh4fcfffdPPzhD2d/f5/v+77vo7VGa43WGq01pmliHEc2NjZ42tOe9pD77rvvVq7immuuefBrv/Zrv9eLv/iLv/aLvdiLvTbPx/7+PgC2AdjZ2eG5/cM//MNv/8iP/Mjn/MM//MNvc9VVV1111VVXXfV/F3rQgx7EVVddddVVV1111VX/Oa655poHf/iHf/h3vdiLvdhrA6xWK57xjGfwN3/zN3Rdxxu8wRuwtbXFE5/4RH7913+d1hqZSWuNaZqYpolxHBmG4buf+MQnvg//j73O67zOe7/O67zOe73Yi73Ya9933323XnPNNQ8GWC6X3H777dxzzz1cvHiRixcvMk0T4zjSWqO1RmuNra0tbrrpJm666SZe8iVfkvv9yI/8yGf/6I/+6Odw1VVXXXXVVVdd9X8TetCDHsRVV1111VVXXXXVVf+xrrnmmge/9mu/9nu90zu902cDtNY4f/48T3nKUzg4OODo6IjVasVsNuNt3uZtAPiZn/kZbr/9djKT1hqtNaZpYpom5vM5f/mXf/k66/X6t/l/5nVe53Xe+x3f8R0/65prrnkwz3TrrbeyXq+55557mKaJYRhYr9es12uGYWAYBqZpYpomWmu01shMWmu01tje3ubDP/zDud/Xf/3Xv89v/dZvfTdXXXXVVVddddVV//dQjh8/zlVXXXXVVVddddVV/3Fe7MVe7LW/4iu+4q9e/MVf/LUBbLO3t8f+/j6tNVprZCa2Wa/XtNa47rrruPHGG7n11lsZhoHntl6vmc/nr723t/cztnf5f+DFXuzFXvtzP/dzf+t1Xud13ntzc/P40dERT3/60/mLv/gL9vb2ODo6QhIAtslMMpPMxDa2sc39bGMbgNVqxc0338zx48e5ePEir/Var/XWZ8+efcatt97611x11VVXXXXVVVf930I5fvw4V1111VVXXXXVVVf9+11zzTUPfp/3eZ+vet/3fd+vBogIFosFEQGAbVprZCatNTKTzGR/f5/jx49z6tQpzpw5wxOe8ASen1LKcdvHDw8Pf4b/w6655poHf9InfdJPvdM7vdNnb25uHj84OOAv/uIv+Iu/+AsuXrxIKYVSChGBJABsY5vMJDPJTGyTmdjGNraxDYBtdnd3eamXeilWqxW/8Au/wJu+6Zu+9C/8wi98DVddddVVV1111VX/t1COHz/OVVddddVVV1111VX/Pi/2Yi/22p/0SZ/0Uy/+4i/+2gCSWCwWlFKICO6XmWQmmUlrjcxkvV5z9913c/PNN3Pq1CkigrvuuovnZz6fv/QwDKxWq9/h/6DXeZ3Xee/P/dzP/a1rrrnmwfv7+/z93/89v/Vbv8Xu7i4RQUQQEZRSiAgkIQkA22QmmUlmYhvb2MY2trENgG1s88hHPpITJ07wh3/4h1x//fXH77777t85e/bsrVx11VVXXXXVVVf930E5fvw4V1111VVXXXXVVVf9273jO77jZ33ER3zEd29ubh6fpond3V0iglIKpRQiAkkA2CYzaa2RmWQmtlmv1yyXS2655Ra2t7c5f/48+/v7PD+11gcfHBz8TWvtVv4P+fAP//Dveqd3eqfPBrjzzjv5sR/7Me655x4kIQlJRASlFEopRAQRgSQAbJOZZCaZSWZiG9vYxjYAtrHNarWi73se/OAHc+LECX7jN36Dm2+++dZ/+Id/+B2uuuqqq6666qqr/u+gHD9+nKuuuuqqq6666qqr/m0+93M/97de53Ve570B7r77bu666y4kERGUUogISilEBJIAsE1rjcyktUZmkplcuHCB1hoPetCDuPHGG/m7v/s77icJ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V1111VVXXfW/D+X48eNcddVVV1111VVXXQUf/uEf/t2bm5vHv/M7v5PVaoUkJCEJSUhCEveTBIAkACQBIAkASUgCQBKSkIQkJAEgiYggIogISilEBBHB/TKTzKS1RmaSmazXa+6++24e85jHcPr0aQ4ODjh37hzPz2w2e+nlcvmMYRj+mv9mZ8+efcabvumbvvXv//7vH6+1UkohIogIJCEJSUgiIpCEJCQhCUlIQhKSkEREEBFEBKUUSilEBBGBJABsk5m01shMbJOZ2OZ+trGNbVarFTs7O1x33XUAPOUpT3nw3t7e93DVVVddddVVV131vw/BVVddddVVV1111VWXXXPNNQ9+0pOexNmzZ5mmidYarTUyk8wkM8lMMhPbZCaZSWaSmWQmmUlrjcwkM2mt0VqjtUZrjdYa0zQxjiPjOLJer1kulyyXS9brNeM4kplEBLPZjMViwebmJhsbG2xsbDCfz5nNZnRdx3K55A/+4A8AeIVXeAWOHTtGRBARRASlFEopdF3Hdddd91mllAfz3+y+++679bM/+7MfcuzYsVunaaK1RmaSmdjGNraxjW1sYxvb2AbANraxTWaSmbTWaK3RWiMzsY1tJBERlFIopVBrpZRCRBARRASSkIQkJBERRAS/93u/B8BDH/pQ+r5/MFddddVVV1111VX/O1GOHz/OVVddddVVV1111f9311xzzYNf8RVf8a1//dd//fidd96JJCQREUhCEpKQhCTuJwkASQBIQhIAkpCEJCQBIAlJRAQAkpCEJCKCUgqlFCICSUgCwDaZSWuN1hqZiW3Onz/PxsYG119/PQ996EP5u7/7O56fUsrxjY2Nt7548eLX8D/A7u7upb7v37rWSimFiCAikIQkJCEJSUhCEhGBJCQhCYCIQBIRQSmFiKCUQkRQSiEikIRtbNNaIzPJTGxjG9vYxja2AbDNarXilltu4brrrmNvb+/4nXfeyXK5/B2uuuqqq6666qqr/nehHD9+nKuuuuqqq6666qr/7w4PD3cf8pCHvPTZs2df+s4770QSkgCQhCQkIQlJAEjifpIAkIQkJAEgCUlIQhKSkIQkJCEJSUgiIogISilEBBFBRABgm8yktUZmkpnYJjM5f/48N998M9vb20jirrvu4vmJiOPjOLJarX6H/367Xdd9dK2VUgqlFCQREUgiIpCEJCICSUhCEpKQhCQigohAEhFBRFBKoZRCKYWIQBIAmUlmkplkJpmJbTIT29gGwDa2sc3Fixd5qZd6KW644Qb+7M/+7MEXL178Gq666qqrrrrqqqv+d6EcP36cq6666qqrrrrqqqvg8PDw0s0338xTn/rUl5aEJCQhCUlIQhKSAJAEgCQAJAEgCUlIQhIAkpCEJCQhCUlIQhIAkpBERFBKISKICCQBYJvMJDNprZGZZCbr9Zpz587x8Ic/nO3tbc6fP8/+/j4AkrANgCRqrQ8+PDz8m9barfw3krQ7TdODu6576VorpRQkIYmIQBKSkIQkJCEJSUhCEpKQhCQkERFEBKUUSilEBKUUIoL7ZSatNTKTzCQzsY1tAGxjG9vYxjaPfOQjOX78OLfddtvxO+6443emabqVq6666qqrrrrqqv89KMePH+eqq6666qqrrrrqKjh79uyt586d+5v77rvvb+bz+VtLQhIAkpCEJCQhCQBJAEjifpKQhCQAJCEJSUgCQBKSiAgAJCEJSUiilEIphYggIpCEbWyTmWQmmUlmYpuDgwNaazzoQQ/ixhtv5O/+7u94fkopx+fz+WtfvHjxa/hv1lq71Pf9e9daiQhKKUQEEYEkJBERSEISkpCEJCQhCUlEBBFBRBARRASlFEopRAQRgSQAMpPMpLVGZpKZ2CYzsY1tbGMbgNVqRd/3PPjBDwbgKU95yoP39va+h6uuuuqqq6666qr/PSjHjx/nqquuuuqqq6666qorDg8PdyPir6dpenDf9y8dEUhCEpKQhCQkASAJAEkASAJAEpKQBIAkJCEJSUhCEpKQhCQkIQlJRASlFEopRAQRgSRsY5vWGplJaw3bZCZ7e3ucOHGCU6dOsbOzw9Of/nRs89wi4rikBx8eHv4M/40i4lbbr9113YNrrUQEEYEkJCEJSUhCEpKICCQhCUlIQhKSiAgkERGUUiilUGslIogIAGyTmWQmmUlmkpnYxja2sY1tAGyzu7vLK77iK7JYLPjDP/xDlsvl30zTdCtXXXXVVVddddVV/ztQjh8/zlVXXXXVVVddddVVz2mapr/puu6tI+K4JAAkEREASAJAEpIAkMT9JCEJSUgCQBIAkpCEJCQhCUlIAkASkogIIoJSChGBJCRhm8wkM8lMWmtkJuv1mrvvvpvHPOYxnD59GkncddddPD+z2eylx3FktVr9Dv+NWmvquu6ta62UUogIIgJJSEISkpBERCAJSUhCEpKQREQgiYiglEJEUEqhlEIphYhAErbJTDKT1hqtNTIT29jGNrYBsI1tVqsVt9xyC9dddx2llONPetKTbl0ul7/DVVddddVVV1111f8OlOPHj3PVVVddddVVV1111XOStLter3+m67qPLqUQEQBIIiIAiAgAJAEgCQBJAEhCEpKQhCQkIQlJAEgiIpCEJCQhCUlIopRCRFBKQRKSALBNa43WGplJZmKb1WrF3t4et9xyCzs7O9x6660Mw8Bzk0St9cEHBwd/01q7lf8mtne7rvvoUgq1ViKCiEASkpCEJCICSUhCEpKICCQhCUlIIiKICCKCUgq1VkopRASSALBNa43MpLWGbTKTzOR+trGNbWxz8eJFXuqlXooTJ07wZ3/2Zw++ePHi13DVVVddddVVV131vwPl+PHjXHXVVVddddVVV131vCTtLpdL5vP5a0siIpCEJCQBIAlJSAJAEveThCQAJAEgCUkASEISkpCEJCQBIAlJRASlFCKCiEASkrCNbTKT1hqZSWZim/Pnz7OxscH111/PQx/6UP7u7/6O56eUcnyxWLz2xYsXv4b/JpJ2M/O1u657cK2ViCAiiAgkIQlJSEISkpCEJCQhCUlIIiKQREQQEZRSKKUQEZRSiAgAbJOZtNbITFprZCa2sY1tbGMb2wDY5pprruG6667jtttuO3777bf/zjRNt3LVVVddddVVV131Px/l+PHjXHXVVVddddVVV131/Nl+hu2X7rruwRGBJAAkIQlJSEISAJIAkASAJO4nCQBJSEISkpCEJCQhCUlIQhKSiAgigoggIogIAGxjm9YarTUyk8zENufPn+fmm29me3ubnZ0dnv70p/P8RMRx4MGHh4c/w3+T1tozuq57767rKKUQEUgiIpBERCAJSUgiIpCEJCQhCUlIQhKSKKUQEZRSKKVQSiEikARAZpKZtNbITGyTmdjGNraxDYBtVqsVtnnUox7FiRMn+Lu/+7sH7+3tfQ9XXXXVVVddddVV//NRjh8/zlVXXXXVVVddddVVz5+k3XEcf6fruo+OCCQhCUlIQhKSkIQkACRxP0lI4n6SAJCEJAAkIYmIQBKSkIQkJBERRAQRQSmFiEASALbJTDKTzCQzyUzW6zXPeMYzeMxjHsPp06e5++672d/fB0AS95PE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kIQkACQhCQBJSEISEYEkJCEJSQBIIiKICCKCiEASALaxTWuNzCQzsU1mcuHCBa655hpOnTrFmTNneOITn8jzU0o5vrGx8dYXL178Gv6TSdrNzNfuuu7BtVYigoggIpCEJCQREUhCEpKQREQgCUlIIiKICCKCiKCUQimFUgqlFEopSMI2mUlrjcyktUZmkpnYxja2sQ2AbVarFbZ50IMehCSe8pSnPPjSpUvfw1VXXXXVVVddddX/DJTjx49z1VVXXXXVVVddddV/nGma/iYi3rrWelwSkpCEJCQhCUlIAkASAJIAkIQkJCEJSUhCEpKICCQREUhCEpIAkIQkJBERRAQRgSQAbJOZZCatNTKTzMQ2d911FzfffDOnTp1CEnfeeSfPzTa11uPjOLJarX6H/2TjOKrv+7fuuo5SChGBJCICSUhCEpKQhCQkIQlJSEISkogIJBERRAS1VkoplFKICCIC22QmmUlrjdYamYltbGOb+9nGNra5ePEir/iKr8hiseCP/uiPWC6XfzNN061cddVVV1111VVX/fejHD9+nKuuuuqqq6666qqr/uNI2l2v13/T9/17RwSSAJCEJCQhCUlIAkASAJIAkIQkACQhCYCIQBIRgSQiAklIQhIAkpBERBARSCIikASAbTKTzCQzyUwyk/V6zblz53j4wx/Ozs4O58+fZ39/nweShG26rnvw4eHh37TWbuU/127XdR9da6XWSkQQEUgiIpCEJCQhCUlEBJKQhCQkIQlJRAQRQSmFUgq1VmqtlFKICABs01qjtUZrjcwkM7FNZmIb29jGNgDL5ZJbbrmF6667jv39/ePPeMYzbl0ul7/DVVddddVVV1111X8/yvHjx7nqqquuuuqqq6666j+WpFvX6zWz2ey1IwJJSCIikIQkJCEJAEkASAJAEpKQBIAkJCEJSUhCEpKICCQBIAkASUgiIogIIoKI4H62yUxaa2QmtslM9vf3yUwe9KAHceONN/J3f/d3PD+llOPz+fy1L168+DX8J5K0O03Tg7uue+laKxFBRBARSEISkpBERCAJSUhCEpIAiAgkERFEBBFBKYVSCrVWaq1EBJIAyExaa7TWaK2RmWQmtrGNbWxjm/tdvHiRl3qpl+L666/nz//8zx984cKFr+Gqq6666qqrrrrqvx/l+PHjXHXVVVddddVVV131Hy8zn2H7pbuue3BEIAkASUhCEpKQBIAkACQBIAlJSAJAEpKQhCQiAklIQhKSkIQkJAEgiYggIpBERCAJ29gmM8lMMpPMxDb7+/ucOHGCU6dOsbOzw9Of/nTuJ4n7lVKOS3rw4eHhz/CfaJqmS7PZ7L1LKZRSiAgiAklIQhKSkIQkJCEJSUhCEpKICCQhiYggIqi1UmullEIpBUkAZCaZSWuNzKS1RmZiG9vYxjYAtrGNbR75yEdy/PhxbrvttuN33HHH70zTdCtXXXXVVVddddVV/70ox48f56qrrrrqqquuuuqq/3iSdqdp+p2u6z46IpCEJCQhCUlIQhIAkgCQBIAkJCEJSUhCEgCSkEREIImIQBKSkASAJCQREUQEEUFEIAkA22QmmUlrjczENuv1mrvvvpvHPOYxnD59moODA86dO8fzM5vNXnoYBtbr9e/wnyQibrX92l3XPbjWSikFSUQEkpBERCAJSUhCEhGBJCQhCUlIIiKICEoplFIopVBrpZRCRABgm9Yamck0TWQmmUlmkpkA2AbANrZZrVbMZjMe9KAHceLECf7+7//+wZcuXfoerrrqqquuuuqqq/57UY4fP85VV1111VVXXXXVVf85JO0ul8tnzGazt44IJAEgCUlIQhIAkpAEgCQAJAEgCQBJSEISkpCEJCQREUhCEgCSkIQkIoKIICKICCQBYJvMJDPJTGyTmazXa/b29rjllls4ffo0t956K+v1muen67oHX7p06Wds7/KfZJom9X3/1l3XUUohIogIJCEJSUhCEpKICCQhCUlIQhIRgSQigoiglEIphVIKtVZKKUjCNrZprZGZtNZorZGZ2MY2ALaxjW1sc/HiRV7xFV8RSTz96U9/8H333fc70zTdylVXXXXVVVddddV/H8rx48e56qqrrrrqqquuuuo/j6S/tv3aXdc9OCKQhCQkIQlJSAJAEgCSAJDE/SQBIAkASUgiIpCEJCICSUhCEpKQREQQEZRSkIQkJGEb22QmmUlmkpnY5sKFC2xsbHD99dfz0Ic+lL/927/l+SmlHN/Y2Hjrixcvfg3/SWzvdl330bVWSilEBJKICCQhCUlIIiKQhCQkIQlJSEISEUFEEBFEBLVWaq2UUiilEBEA2CYzaa3RWqO1RmZiG9vYxja2sQ3AarXilltu4brrrmO5XHLrrbdycHDwM1x11VVXXXXVVVf996EcP36cq6666qqrrrrqqqv+c43j+DsR8da11uOSAJBERHA/SUhCEgCSAJDE/SQBIAlJSEISkpCEJCQhCUlIQhIAEUFEEBFEBJIAsI1tMpPMJDOxTWZy/vx5br75Zra3t5HEnXfeyfMTEcclPfjw8PBn+E8gaTczX7vrugfXWimlEBFEBJKQhCQiAklIQhKSiAgkIQlJSCIiiAgiglIKpRRqrZRSiAgkAdBaIzNprZGZZCaZSWZiG9vYBsA2ttnd3eUlX/IlOXHiBH/yJ39y/MKFC1/Dv9I111zz4Ac/+MEvfc011zz4mmuuefA111zzYEkcHh7uctVVV1111VVXXfWvQ+Wqq6666qqrrrrqqv90EXHr/v7++/R9/1sRQUQwTRMRgSQkIQlJSAJAEgCSAJBEaw1JtNaICCKCaZqICKZpIiKICCKCiEASEUFEUEohIpBE13VEBF3XMZ/PmaaJcRyZpolpmshMMpPVasUf/MEf8EZv9EY8+tGP5s477+SOO+7ANraxTSmFWiunT59+793d3e9Zr9e/zX+CcRw/Z5qm126tkZlkJplJRGAb29jGNraxDYBtbGMb22QmmUlrjdYarTWmaaK1RmZim4iglELXddRaqbVSSqGUQkQQEUQEmYkkJCEJSdx222084xnP4EEPehCPetSjHnzfffe9997e3nfzAlxzzTUPfrEXe7HXPnPmzINe/MVf/LVf7MVe7LV5Ae67775bz549e+t9991362/91m99zz/8wz/8NlddddVVV1111VUvHOX48eNcddVVV1111VVXXfWfT9Kt6/Wa2Wz22pKICAAkIQlJSEISkgCQBIAkACQBIAlJAEhCEpKQhCQiAklIQhIAkpBERBARRAQRgSQAbJOZZCaZSWZim/39fTKTBz3oQdx444383d/9Hc9NEgDz+fy19/b2fsb2Lv/BbCPppbuue3AphYggIpBERCAJSUhCEhGBJCQhCUlIQhKSiAgigoig1kophVorpRQiAgDbZCatNVprtNbITDIT29gGwDa2sY1tMpNHPepRHD9+nL/5m785funSpe/hubzYi73Ya7/TO73TZ334h3/4d7/iK77iW7/4i7/4a19zzTUPBrh06RLr9Zr77ruPS5cucenSJQBOnTp1/JprrnnwQx7ykJd+ndd5nfd+ndd5nffe3Nw8/g//8A+/w1VXXXXVVVdd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JCQBIIn7SeK52QbANs/NNrbJTNbrNQ972MMYhuHWf/iHf/gdrrrqqquuuuqq/0uoXHXVVVddddVV/6O92Iu92GudO3eOZzzjGbTWsE1EAGAb29jGNraxjW1sYxvb2MY2trFNZpKZ2MY2mUlm0lqjtcY0TUzTxDRNtNaYponWGplJ3/d0XUcphYiglEJEEBGUUogIIoJpmlgul6xWK06cOEEpha2tLZbLJev1mogAYDabERFEBBFBKYVSCqUUSilEBBFBRDBNE5KQRGsNSbTWkIQkJCEJSUgiItje3n7wYrH47NOnT7/30572tNdprd3KVUTEd+/v779WKeW9IwJJRASSkMT9JPEu7/Iu3HTTTRwdHfHnf/7nnD17ln/JxsYGL//yL8+ZM2f4+q//+vf5rd/6re/mf4j77rvv1s/8zM98nQ//8A//rtd5ndd57wc96EE86EEPYrVacenSJQBWqxUPNJ/Pmc/nHDt2jOd233333fpbv/Vb3/3bv/3b33PffffdyguwWq1+e7FYvLZtbGMb29jGNraxjSTuZxtJANhGEv8akrCNJGwDIAkASUgiIrDN05/+dF78xV/8tX/0R3/0c7jqqquuuuqqq/4voXLVVVddddVVV/2P9mIv9mKvffr0ab7lW76F1hr3s41tbGMb29jGNraxjW1sYxvb2MY2EYFtbJOZZCaZSWaSmbTWaK3RWqO1xjRNtNZordFaIzPp+55aKxFBRBARRASlFEopjONIRDBNE7u7u8xmM7a2tlgsFsxmMw4PD7FNRND3PRFBKYVSCqUUSimUUiilsF6viQgigohgmiYk0VpDEq01JCEJSUhCEpmJJCSxvb394Ec84hG/de+99373xYsXP4erWK/Xn7NcLl87Ih4sCUlIQhKSkMS7v/u7c/PNN3N0dMQv/dIv8aJ4zGMew2Mf+1juu+++Wz/kQz7kde67775b+R/o67/+69/nH/7hH37ndV7ndd7rzJkzD77mmmsePJ/P+Zfcd999t/7DP/zDb9933323/vZv//b33HfffbfyIhjH8bdba6+dmdjGNgC2eW62kcRzs839JPH8SOJ+tpGEbSQhCdtIQhKSkERm8vSnP50Xe7EXezBXXXXVVVddddX/NVSuuuqqq6666qr/8c6fP899991HKQXbRASlFGxjG9vYxja2sY1tbGMb29jGNraxjW1s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1vraPJMkbPNAtvnXsA2AbWxjG9vYJjOxTWaSmWQmrTUyk8wkM7GNbe4nCUlEBBFBRFBKoZRCKYWIAGC9XjOOI7PZjI2NDXZ2dhiGgdYakpBERCAJSUQEkpCEJCTx2Mc+loc85CEAfNZnfdbrHB4e7nLV/zuHh4e7//AP//A7AC/+4i/+2tvb25w+fZpSCgcHB0gCQBKSAJCEJAAkIQlJAEhCEpLouo4TJ05www03sFgsuO+++2699dZb//qzPuuzXudP//RPf4arrrrqqquuuur/Ksrx48e56qqrrrrqqquu+i+2m5m/s1qtfgd47Yg4bpv72eZ+tvnXsI1t7mcb29gmM8lMMpPWGplJa43WGpmJbWxjm/tJQhIRQUQQEUQEpRRKKUQEAOM4cnBwwGw2o+s6NjY2KKWwXC6RhCQkIQlJSCIikMSpU6d4mZd5GQC+/uu//n3+4R/+4be56v+1f/iHf/id3/7t3/6ehzzkIS99/fXXP3h7e5tTp05x7NgxAGqtjOMIgCQkASAJSQD0fc/JkyfZ3Nzklltu4cSJE2xsbABw33333fr1X//17/OjP/qjn3N4eLjLVVddddVVV131fxl60IMexFVXXXXVVVddddV/owd3Xfdex44d++yu66i1UmslIiilEBFEBJKICCKCiCAiiAgigoggIogIIoKIICIopRARlFIopVBrpdZK13V0XUff98xmM+bzOYvFgo2NDTY2NtjY2GBjY4PFYsF8Pqfve2qtlFIAsE1mMo4jwzCwXq9ZrVasViumaaLWys7ODgDjOHL77bezXq/JTDKT1hrTNDGOI9M08Qqv8ArM53P+4R/+4bc/8zM/83W46qoHuOaaax78ju/4jp/1Oq/zOu/NcxmGAYBhGJBE13X0fc/zc9999936D//wD7/9oz/6o59z33333cpVV1111VVXXfX/BeX48eNcddVVV1111VVX/TfazczfWS6XvyPptSPiOC+EbV5UtgGwDYBtbGObzCQzyUwyk9YamUlrjczENraxDYAkJCEJSUQEEUEphYggIiilADAMA/v7+8xmM7quY2tri1IKq9UKSUhCEpJ42MMexrFjxwD4rM/6rNc5PDzc5aqrHuDw8HD38PDw0ou92Iu99ubm5nEeoJRCKYW+7+n7nlIK97t48SKPe9zjuOuuu1gul9x8883HH/KQh7z05ubm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uuqqq6666v8Kgquuuuqqq6666qr/2249ODh4nQsXLnz2arVivV4zjiPTNNFao7VGZtJao7VGa43WGq01Wmu01mit0VqjtUZrjdYarTWmaWKaJqZpYhxHxnFkvV5zww03cOrUKQC+/uu//n246qp/wb333ktmYhvb2MY2ALYBsM0D2eZfIglJPJAk7icJSUhCEpIA2NnZ+Wyuuuqqq6666qr/Kwiuuuqqq6666qqr/o+zfWtr7XPOnz//kMPDw1vX6zXjODJNE601pmkiM8lMWmu01mit0VqjtUZrjdYarTVaa7TWaK3RWqO1xjRNTNPEOI7MZjNe8RVfEYDf+q3f+u5/+Id/+G2uuupfkJlkJraxjW0AbPNAtrGNbV4QSTw3SQBIAkASkpAEgCQkIYmIoLX2oK2trdfmqquuuuqqq676v4By/Phxrrrqqquuuuqqq/6f2B2G4WfW6/VurfW1eS62kQSAbf41bAPwBm/wBmxvb3Pffffd+lmf9Vmvw1VX/QvOnDnz4DNnzrz2X/7lX1JKISKQhCQiAkkASEISkpCEJCQhCQBJAEji+ZEEgCT+JeM4slgs2N/f/xmuuuqqq6666qr/7Qiuuuqqq6666qqr/n+5dZqmz7lw4cJDDg8Pb12v14zjyDRNtNaYponWGplJa43WGq01Wmu01mit0VqjtUZrjdYarTVaazz84Q/n+uuvB+Drv/7r34errnoR/MM//MPvnDlzhtYatrHN/Wxjm/8MkpCEJAAkIQlJRASllNfmqquuuuqqq676v4Dgqquuuuqqq6666v8h27fu7e29zoULFz57tVoxDAPjONJaY5omWmtkJplJa43WGq01Wmu01mit0VqjtUZrjc3NTV7v9V4PgN/6rd/67n/4h3/4ba666kVw9uzZW6+99lqmaSIzsY1tbGOb+9nm30sSAJJ4IEkASEISEcE0TQ8+ceLEe3PVVVddddVVV/1vR3DVVVddddVVV131/9et0zR9zoULFx5ycHBw63q9ZhgGpmlimiamaaK1RmaSmbTWaK3RWqO1RmuN1hqtNd7gDd6Ag4MD7rvvvlu//uu//n246qoX0X333XfruXPnfvvEiRO01shMbGMbANvYBsA2/xqSkMQDSQJAEpKQhCQkIQlJRAQAx44d+yyuuuqqq6666qr/7SjHjx/nqquuuuqqq6666v+53WEYfma9Xu/WWl+bZ5KEbR7INs/tJV7iJXj5l395+r7nS77kS97m7Nmzt3LVVf8K99133zNe7uVe7r2f+MQnUmslIpCEJCICSQBIAkASkpAEgCQkASCJ+0kCQBKSuJ8knh/bPJfjmfk7wzDcylVXXXXVVVdd9b8VwVVXXXXVVVddddVVALdO0/Q5Fy5ceMjBwcGtwzAwDAPTNDFNE601WmtkJplJa43WGtvb27zZm70ZAD/yIz/y2f/wD//w21x11b/S2bNnb73++ut/u7VGZpKZ2MY2trHNA9nGNrZ5QSTx3CTxQJKQhCQkIQlJSEIS4zhy7Nix9+Kqq6666qqrrvrfjHL8+HGuuuqqq6666qqrrnqW3WEYfmYYht1SymvzALZ5INu88zu/M7VWdnd3b/3SL/3St+Gqq/4NDg8Pd4+Ojm49derUe+/u7lJKISKICCQREUgCQBKSkIQkJCEJSQBIAkASz48kACTxL7FNrfX4pUuXvoarrrrqqquuuup/K8rx48e56qqrrrrqqquuuuo57Gbm76xWq98BXjsijvN8vMzLvAyv+qqvSt/3fMmXfMnbnD179lauuurf6OzZs8+45557HlxrfelaKxFBRBARSEISkgCQhCQkIQlJSAJAEgCSeEEkcT9JvDCtteNd1z1juVz+NVddddVVV1111f9GBFddddVVV1111VVXPV+2f3t/f/91Lly48Nmr1YphGJimiWma2NnZ4e3e7u0A+JEf+ZHP/od/+Iff5qqr/p0kfc80TWQmtrGNbf6zSOK5SUISkpCEbY4dO/ZZXHXVVVddddVV/1sRXHXVVVddddVVV131wtw6juPnnD9//nUODw9vXa/XjOPI27/92wPwD//wD7/9oz/6o5/DVVf9B5B0a2uNzMQ2trGNbWxjGwDb/GtJ4oEkASAJSUhCEgCSkIQkIoLW2oO3t7dfm6uuuuqqq6666n8jgquuuuqqq6666qqr/kW2f3tvb+91Lly48Nmbm5ucPHkSgB/5kR/5HK666j9IRNw6TdNvt9bITGwDYJvnZpsHss0LIgkASUjifpJ4bpKQhCQigohgGAaOHTv2Xlx11VVXXXXVVf8bUbnqqquuuuqqq6666kV16ziOn1NrZZqm9/6RH/mR7/6Hf/iH3+aqq/5jfU9r7bVtYxvbANjGNraRBIBt7ieJ50cSz00StrmfJB7INpKQhCQiglLK63DVVVddddVVV/1vRDl+/DhXXXXVVVddddVVV73ozp49+zu33nrr3/z2b//293DVVf/xdoGP7rqOUgoRgSQiAklIAkASkpCEJCQhCUkASAJAEg90/Phx5vM5119/PSdOnADg+uuv5+LFi0jCNg9kG4DMPN73/TOWy+Vfc9VVV1111VVX/W+CHvSgB3HVVVddddVVV1111VVX/c+Rmb+1tbX12n3f03UdpRRKKUQEEUFEEBFIQhKSkIQkJAEgCYATJ07wMi/zMjz4wQ/mIQ95CC/MxYsXefrTn87TnvY0/uzP/gzbtNbITMZxZLFY3Pq0pz3tIVx11VVXXXXVVf+boAc96EFcddVVV1111VVXXXXVVf9zTNP0WZubm589n8/puo5SCqUUSilEBBGBJCICSUhCEpKQBMDLvuzL8rqv+7ocP36cB1oulwAcHR3xQKdOneKBLl68yFOf+lT+7M/+jCc/+clM00StlYsXL77O3t7eb3PVVVddddVVV/1vgR70oAdx1VVXXXXVVVddddVVV/3P0Vp77dls9luLxYK+76m1UkohIogIIoKIQBIRgSQkIYnXfd3X5fVe7/W433K55Pbbb+fChQucP38eAEk8N0ksFgtOnjzJqVOnuPHGG7nfn/3Zn/FLv/RL3HfffdRav/v2229/H6666qqrrrrqqv8t0IMe9CCuuuqqq6666qqrrrrqqv85MvPBpZSnb2xs0Pc9XddRSqGUQkQQEUQEkpBERHDy5Ene/u3fnoc85CEAHB0d8aQnPYk777yT5yaJ5yaJB1osFtx00008/OEPB+DixYv88R//Mb/+679+66233voQrrrqqquuuuqq/y0ox48f56qrrrrqqquuuuqqq676n0PSbmvttWutD661IomIQBKSkIQkJCGJhz70oXzkR34kJ06c4OjoiH/4h3/gb/7mb9jf3+e5SeK5SeK5tda4cOECd955J9M0cfLkSR7zmMeQmcef8YxnPGO5XP41V1111VVXXXXV/waU48ePc9VVV1111VVXXXXVVVf9z5KZKqW8da2ViCAikEREIAlJALzBG7wB7/iO7wjA7bffzh//8R+zt7cHgCSemySemySemyQApmniwoULdF3HYrHgMY95DLXWl/7Lv/zLr+Gqq6666qqrrvrfgHL8+HGuuuqqq6666qqrrrrqqv9xdiV9dK2VUgoRQUQgCUlI4g3f8A15wzd8QwD++q//mic/+ck8kCSemyQeSBLPTRLP7eLFi0zTxDXXXMMjHvGI43t7ezzlKU/5Ha666qqrrrrqqv/pKMePH+eqq6666qqrrrrqqquu+p9F0m5r7bW7rntwKYWIICKICCTx8Ic/nHd+53cG4I/+6I+49957eSBJPDdJPDdJPDdJPJAkAPb391mtVlxzzTXcfPPND37GM57xN/fdd9+tXHXVVVddddVV/5NRjh8/zlVXXXXVVVddddVVV131P09r7cG11tcupRARRASSeMQjHsGHfdiHAfCHf/iHXLhwgecmiecmiecmiQeSxHOTxP329/eRxM0333z8mmuuechv/dZvfTdXXXXVVVddddX/ZARXXXXVVVddddVVV1111f9Ikn57miYyE9vYxjZv/MZvDMDtt9/O+fPneVFI4rlJ4l8iiQeSxF133cWFCxd4sRd7sdd6ndd5nffmqquuuuqqq676n4zgqquuuuqqq6666qqrrvofqZTyO7bJTGxjm1d8xVfk4Q9/OEdHR/z1X/81knhukvi3kMSLYrlcctdddwHwju/4jp/FVVddddVVV131PxnBVVddddVVV1111VVXXfU/1jRNv91aIzOxzZu+6ZsC8Nd//df8e0jiXyKJB5LE/S5evMjFixe55pprHvxiL/Zir81VV1111VVXXfU/FcFVV1111VVXXXXVVVdd9T+W7c9prZGZPOIRj+DUqVOcP3+e8+fP86KSxL9EEv8ay+WSCxcuAPBiL/Zir8VVV1111VVXXfU/FcFVV1111VVXXXXVVVdd9T+WpFunaSIzeZVXeRUAbr/9dgAk8dwk8S+RxL9EEg8kiQeSxMWLFwF4ndd5nffmqquuuuqqq676n4rgqquuuuqqq6666qqrrvofKyJuba39dmbyqq/6qgDcfvvt/EeSxL/FcrkE4OzZs7dy1VVXXXXVVVf9T0Vw1VVXXXXVVVddddVVV/2P1lr77Vd7tVcD4Pbbb+dfQxL/WpJ4IEk8kCQAVqsVy+WSF3uxF3vta6655sFcddVVV1111VX/ExFcddVVV1111VVXXXXVVf+jlVK+59GPfjQAR0dHvCCS+JdI4qqrrrrqqquu+n+F4Kqrrrrqqquuuuqqq676Hy0ibrX92wDL5RIASfxHkMQDSeKBJPFAkrjq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2AbANraxDYBtbGMbANvYxjYAtrGNbWxjG9vYxja2sY1tMpOI4ODg4Nb9/f3fPjw8/J31en3rMAy/zVVXXfW/2uu8zuu894d/+Id/F8ByueSP//iPWS6X3E8SDySJ+0nigSTxQJJ46EMfysMe9jAA7rvvvlu//uu//n3+4R/+4be56qqrrrrqqqv+N0EPetCDuOqqq6666qr/b17ndV7nvT/8wz/8uw4PD7n33ntprdFao7VGa43WGq01Wmu01mit0VqjtUZm0lojM8lMMpPMJDPJTGyTmWQmtrFNZmIb29jGNraxjW1sYxvbANjGNrYBsI1tbANgG9vYBsA2trGNbQBsYxvb2CYzsY1tMhPbrFarW/f39397uVzeenR09Dvr9fpWSbdy1VVX/a9xzTXXPPhzPudzfuuaa6558HK55I477uCOO+5guVwiiftJ4oEk8UCSuN/DHvYwbrjhBhaLBQA/8iM/8tk/+qM/+jlcddVVV1111VX/G6EHPehBXHXVVVddddX/Nx/+4R/+XY997GPfe2dnh+VySWbSWqO1RmuN1hqtNVprTNNEa43WGq01Wmu01mit0VqjtUZm0lojM8lMMpPMJDPJTDKTzMQ2mYltbGObzMQ2trGNbWxjGwDb2MY2trENgG1sA2Ab29gGwDa2sY1tAGxjG9vYxja2yUxsk5kALJfLW4dhuPXo6OjWg4OD31mtVrdm5m9z1VVX/Y915syZB73O67zOe7/O67zOe19zzTUPXi6XXLhwgfPnz3PnnXcCIIkHksT9NjY2mM/nnDx5koc97GHc77777rv167/+69/nH/7hH36bq6666qqrrrrqfyv0oAc9iKuuuuqqq676/+abvumbnn7NNdc8eJomMpPMxDaZSWbSWiMzaa3RWqO1RmuN1hrTNNFao7XGNE201mit0VqjtUZrjdYamUlrjcyktUZmkplkJpmJbTKTzMQ2mYltbGMb29gmM7ENgG1sYxvb2MY2ALaxjW0AbGMbANvYxja2AbCNbWxjG9vYxja2yUxsk5msVqtb1+v1ravV6taDg4PfGYbh1nEcf5urrrrqf5Rrrrnmwe/4ju/4Wa/zOq/z3jzAcrnkwoULACyXS+63WCzY2NjgxIkTPNB9991369d//de/zz/8wz/8NlddddVVV1111f926EEPehBXXXXVVVdd9f/NT/zETxggM3kg2wBkJrbJTDKTzCQzaa2RmbTWaK0xTROtNVprTNNEa43WGtM00VqjtUZrjdYarTVaa2QmrTUyk8wkM8lMMpPMJDOxTWZim8zENraxjW1sYxvb2MY2trGNbQBsYxvbANjGNrYBsI1tbANgG9vYxja2sY1tbGMb22QmtlmtVrcCXLp06bcPDg5+ZxiGW4dh+G2uuuqq/3bXXHPNg1/sxV7stV7ndV7nvV/sxV7stXkh7rvvvluvueaaB//DP/zDb//93//9b//2b//299x33323ctVVV1111VVX/V+BHvSgB3HVVVddddVV/5+8zuu8znt/+Id/+He11mitERFIQhKSAJAEgG0AbGMb22QmmUlmkpm01mit0VqjtUZrjdYa0zTRWmOaJlprtNaYponWGq01Wmu01mitkZm01shMWmtkJplJZmKbzCQzsU1mYhvbZCa2sY1tbGMb29jGNrYBsI1tbANgG9vYBsA2trENgG1sYxvbAGQmtrGNbWxjG9tkJhHB4eHhrXt7e799eHj4O+v1+tZhGH6bq6666r/NNddc82CAF3uxF3ttwGfOnHkwz3T27Nln3HfffU//h3/4h9/hqquuuuqqq676vwo96EEP4qqrrrrqqqv+P/nwD//w73rsYx/73ltbW0zTRERQSiEikEREEBFIQhKSkMQD2QbANpmJbTKTzKS1RmbSWqO1RmuNaZpordFaY5omWmtM00RrjWmaaK3RWqO1RmuN1hqtNTKT1hqZSWaSmWQmmUlmYpvMxDaZiW1sk5nYxja2sY1tbGMbANvYxja2AbCNbQBsYxvbANjGNraxDYBtbGMb29gmM7GNbTIT26xWq1v39/d/e7lc3np0dPQ7q9Xq1oi4lauuuuqqq6666qqrrrrqPxuVq6666qqrrvp/5pprrnnwtddey3333UdmEhFEBBFBRBARRAQRQUQQEUQEEYEkJCEJSQCUUrifbWxjm8wkM8lMMpPWGq01Wmu01mitMU0TrTWmaaK1xjRNtNZorTFNE601Wmu01mit0VojM2mtkZm01shMMhPbZCaZSWZiG9tkJraxjW1sk5nYxjYAtrGNbWxjGwDb2MY2ALaxjW0AbGMb2wDYxja2sY1tbNP3/YO3trbe2zaZCcByubx1GIZbj46Obj04OPid1Wp1a2b+NlddddVVV1111VVXXXXVfyT0oAc9iKuuuuqqq676/+QnfuInDHD77bcDIAlJSEISEUFEEBFEBBFBRBARRAQRQUQQEUQEkpCEJCTx3GxjG9vYJjPJTFprZCatNVprtNaYponWGtM00VpjmiZaa0zTRGuNaZpordFao7VGa43WGq01MpPWGplJZpKZZCaZSWZim8zENpmJbWxjG9vYxja2sY1tbGMb2wDYxja2AbCNbWwDYBvb2AbANraxjW1sYxvb2MY2mYltMpP1en3rarW6dbVa3XpwcPA7wzDcOo7jb3PVVVddddVVV1111VVX/VtRueqqq6666qr/R17ndV7nvQGOjo6QBIBtbAMgidYakpCEJCQREUgiIogIIoKIoJRCRBARRAQRgSQiAklIIiIAkIRtAGwDkJnYJjPJTDKT1hqtNVprtNZorTFNE601pmlimiZaa0zTRGuNaZpordFao7VGa43WGq01WmtkJplJa43MJDOxTWaSmdgmM7GNbTIT29jGNraxjW1sYxvbANjGNraxDYBtbANgG9vYBsA2trGNbWxjG9vYpu/7B29tbT3YNpn53rZZrVa3Zib7+/u/fXBw8DvDMNw6DMNvc9VVV1111VVXXXXVVVe9KKhcddVVV1111f8jL/ZiL/ZaALbp+x7b2MY2ALaxDYBtbAPQWkMSAJKICCQREUQEEUFEEBFEBBFBRBARRAQRQUQgCUlEBAClFGxzP9vYJjPJTDKTzKS1RmuN1hqtNVprTNNEa41pmmitMU0T0zTRWmOaJlprtNaYponWGq01MpPWGplJa43MJDPJTDKTzMQ2mUlmYhvb2CYzsY1tbGMb29jGNgC2sY1tbANgG9vYBsA2trENgG1sYxvbANgmM7FN13UPts329vZ7237vzCQiODg4uHV/f/+3Dw8Pf2e9Xt86DMNvc9VVV1111VVXXXXVVVc9NypXXXXVVVdd9f/Ii73Yi702QEQwm82wjW1sYxvb2MY2trENgG1sA2Cb1hoAkgCQhCQigohAEhFBRBARlFKICCKCiCAiiAgkIYmIACAiACilcD/bZCa2yUwyk8yktUZm0lpjmiZaa0zTRGuNaZporTFNE9M00VpjmiZaa0zTRGuN1hqtNVprZCatNTKT1hqZSWaSmdgmM8lMbJOZ2MY2tslMbGMb29jGNgC2sY1tbANgG9vYBsA2trENgG1sYxvbANjGNraxjW12dnYevL29/d623zszsc1yubz14ODgt5fL5a2r1eoZy+XytyXdylVXXXXVVVddddVVV/3/ReWqq6666qqr/h+55pprHgxgm1or97MNgG1sYxvb2MY2trGNbWxjG9sA2MY2tslMACQhCUlIIiKICCKCiCAiiAgigoggIogIIoKIQBKSkEREEBHczzYAmYltMpPMJDNprZGZtNZorTFNE601pmlimiZaa0zTxDRNtNaYponWGtM00VqjtUZrjdYarTUyk9YamUlmkplkJplJZmKbzMQ2mYltbGMb29jGNraxjW1sYxvb2AbANraxDYBtbGMbANvYxjYAtrGNbWxjG9v0ff/g7e3t97ZNZgKwXC5vXa/Xt9588810Xfc99913363/8A//8NtcddVVV1111VVXXXXV/w9Urrrqqquuuur/iWuuuebBPIAkJAEgiQeyDYBtbANgG9vYJjOxjW1sYxvb2MY2ALaxDUBrDUlIQhKSkEREEBFEBBFBRFBKISKICCICSUQEkogIJAFQa+V+trGNbWyTmWQmmUlrjcyktUZrjWmaaK0xTRPTNNFaY5ompmlimiZaa0zTRGuN1hrTNNFaIzNprdFaIzNprZGZZCaZSWZim8wkM7GNbTIT29jGNraxjW1sYxvb2MY2ALaxjW0AbGMb2wDYxja2AbCNbWxjG9vYxjZd1z3Y9oNf93Vfl5d6qZd67a//+q9/n3/4h3/gqquuuuqqq6666qqr/p+gctVVV1111VX/T7zYi73YawMMw8A4jkQEkogIACQhCYCI4PmxDYBtbGMb29jGNpmJbWxjG9vYxja2sY1t7icJAElIIiKICCQREUQEpRQigoggIogIIgJJRASSkERE8NxsYxvbZCaZSWbSWiMzaa0xTROtNVprTNPENE201pimiWmamKaJ1hrTNNFaY5omWmu01mit0VojM2mtkZlkJplJZpKZZCaZiW0yE9vYJjOxjW1sYxvb2MY2trENgG1sYxvbANjGNgC2sY1tbANgG9vYxjYv9VIvBcA//MM//DZXXXXVVVddddVVV131/weVq6666qqrrvp/4sVe7MVeC2C9XrNarYgISilEBBGBJCICSUQEkpCEJCRxP0kA2OZ+trGNbWxjG9vYJjOxjW0yE9vYxja2AbCNbTITAElIQhKSiAgiAkmUUogIIoKIICKICCKCiEASkpCEJCKC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3323ctVVV1111VVX/V9H5aqrrrrqqquuuup/sGmabgU4PDy89fDw8Ht4plrrg2ez2Wv1ff/gruteG3jt++6771auuuo/0T/8wz/89j/8wz989zu90zu992d+5mfywtjGNhHBfffdB0Df9wDY5t/CNg9kmweyzb/GNddc82Cuuuqqq6666qr/6wiuuuqqq6666qqr/heapunWw8PD77l48eLnfM/3fM/rvN3bvZ1++7d/+3u46qr/ZD/6oz/6OS/+4i/Oa7/2a5OZ2MY2tgGwjW0AbJOZ2Obs2bM8P7Z5QWzz72GbF2Q+nwNw33333cpVV1111VVXXfV/GcFVV1111VVXXXXV/xH33XffrVx11X+y++6779av//qvf593fud35rGPfSyZiW1sYxvb2MY2trHNfffdB8BsNsM2L4htXhDbPJBtHsg2/xrz+Zz77rvv1vvuu+9Wrrrqqquuuuqq/8sIrrrqqquuuuqqq6666qp/ld/6rd/67t/6rd/67I/8yI/k9OnTZCaZSWZiG9vYxja2ue+++wCYzWbMZjPuZ5sXxDb/0WwDcN111wHwD//wD7/NVVddddVVV131fx3BVVddddVVV1111VVXXfWv9qM/+qOf89u//duf/QVf8AWcOnWKzCQzyUxsYxvb2MY2Z8+eBWA2m/H82OZFZZt/iW1ekGPHjgFw33333cpVV1111VVXXfV/HeX48eNcddVVV1111VVXXXXVVf96//AP//A7m5ubfPAHf/Brz+dz/vZv/5YXRBIv+ZIvycbGBufOncM2L4htHsg2L4xt/jUe/vCHU2vlG77hG97n8PBwl6uuuuqqq6666v8ygquuuuqqq6666qqrrrrq3+xHf/RHP+fTPu3THvJSL/VSv/093/M9POYxj6G1RmaSmdjGNn//93/PbDZjNpsxm814INv8R7LNc7MNwHXXXcd8Pucf/uEffvu+++67lauuuuqqq6666v86yvHjx7nqqquuuuqqq6666qqr/u0ODw93f+u3fut7Dg4Obn2rt3qr46/4iq/44Cc84QkcHh5iG4DDw0Ne/MVfnOuvv55SChcvXuT5sc0D2eaBbPNAtvnXeNjDHsZ8PudHf/RHP+fWW2/9a6666qqrrrrqqv/rKMePH+eqq6666qqrrrrqqquu+ve79dZb/+a3fuu3vucpT3nK97zCK7zC7okTJ7jtttsezDP9wz/8A6/4iq/IsWPHODo6Yr1eY5v/bLYBuPbaa7npppv4h3/4h9/+ru/6ro/hqquuuuqqq676/4By/Phxrrrqqquuuuqqq6666qr/OIeHh7tPecpTfufuu+/+nvl8/t2Zudtae+3Dw0O2trZ4qZd6KWazGWfPnuWBbPNAtnkg2zyQbZ6bbZ6f+XzOS7/0SwPw9V//9e9z9uzZW7nqqquuuuqqq/4/ILjqqquuuuqqq6666qqr/tOM4/iMiPic+Xz+kNbab//6r/869913Hzs7O9x44438V3nUox4FwD/8wz/89j/8wz/8NlddddVVV1111f8XlOPHj3PVVVddddVVV1111VVX/eeyvVtK+Z6u657xD//wDy/9eq/3esePHTsGwN7eHrZ5INs8kG3+JbZ5brZ5qZd6KY4fP859991368d//Me/DFddddVVV1111f8nlOPHj3PVVVddddVVV1111VVX/ddYr9d/fXBw8NPTNO2++Iu/+GsfO3YMgL29Pf41bPMvmc/nvNiLvRjHjx/nvvvuu/VDPuRDHsJVV1111VVXXfX/DeX48eNcddVVV1111VVXXXXVVf91WmuX/uEf/uF3AK655poH33DDDccB9vb2ALDNA9nmX2s+n/OSL/mSbG1tcd9999369V//9e9z9uzZW7nqqquuuuqqq/6/oRw/fpyrrrrqqquuuuqqq6666r/eP/zDP/zO5ubmcUk8/OEPf/A111zDNE0cHh7ywtjmudkGYD6fc+ONN/JiL/Zi1Fr5h3/4h9/++I//+Jc5e/bsrVx11VVXXXXVVf8foQc96EFcddVVV1111VVXXXXVVf99rrnmmgd/zud8zm8BXHPNNQ9er9fcdttt3Hfffdjmudnmuc1mM6699loe9KAHcb8f+ZEf+ewf/dEf/Ryuuuqqq6666qr/z9CDHvQgrrrqqquuuuqqq6666qr/XmfOnHnQ67zO67z3i7/4i7/2i73Yi702wHq9ZrVasVqtuHTpEuv1Gtvc79ixYwA86EEP4oH+4R/+4be/7uu+7r3Pnj37DK666qqrrrrqqv/v0IMe9CCuuuqqq6666qqrrrrqqv8Zrrnmmge/2Iu92Gu/zuu8znu92Iu92GvzIrrvvvtu/a3f+q3v/u3f/u3vue+++27lqquuuuqqq6666gr0oAc9iKuuuuqqq6666qqrrrrqf6bXeZ3Xee8Xe7EXey2Aa6655sE803333XfrfffddyvAP/zDP/z2P/zDP/wOV1111VVXXXXVVc8LPehBD+Kqq6666qqrrrrqqquuuuqqq6666qqrrvo/icpVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuur/mBd7sRd7bYCzZ8/eet99993KVVddddVVV1111VVX/f9F5aqrrrrqqquuuur/iIh48Iu/+Iu/9md91md9F8/0Iz/yI5/9oz/6o5/DVVddddVVV1111VVX/f9E5aqrrrrqqquuuup/mYh4cCnlwYvF4rXm8/mDu6578Pb29mtL4i3f8i05ODjgqU99KgDv9E7v9Nlnz559xm/91m99N1ddddVVV1111VVXXfX/D5Wrrrrqqquuuuqq/6Ei4sGllAcvFovXms/nD+m67kHb29uvLQlJRASSkIQkJPEyL/MyAPzt3/4t93und3qnz/6t3/qt7+aqq6666qqrrrrqqqv+/6Fy1VVXXXXVVVdd9d8sIh5cSnnwYrF4rfl8/uC+7x+ytbX1WpKQREQgCUlIQhKSkASAJCTxki/5kgA89alP5X5Pe9rTeKmXeqkHveM7vuNn/eiP/ujncNVVV1111VVXXXXVVf+/ULnqqquuuuqqq676LxIRDy6lPHixWLzWbDZ7cN/3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ACQBIAkASQBIAkASAJIAkASAJAAkASAJAEkASAJAEgCSAJAEgCQAJCEJAEkASEISkgCQhCQAJCEJSQBIQhKSAJCEJAAkIQkASQBI4rnZBsA2z80297MNgG1sA2Ab29jGNgC2sY1tbGObzMQ2trGNbWxjG9vYxja2sY1tbGMb29jGNrbZ3d0FYHNzk3/JmTNnHsRV/2ne8R3f8bOuueaaB3/f930fAJL4j2Sb53b+/Hme9KQn8chHPpIHPehBPOMZz+B+krDNfxZJPNDm5ib33Xffrffdd9+tXHXVVVddddVVV/33oHLVVVddddVVVz3LNddc82CAUgoAkgCQxP0kASAJAEkASAJAEgCSAJAEgCQAJAEgCQBJAEgCQBKSAJAEgCQkASAJSQBIQhKSAJCEJAAkIQkASQBIQhL3k8Rzs839bANgm/vZBsA2ALYBsI1tbGMbANvYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYBsA2trHNer3m4OCAra0trrnmGu677z4eSBIAh4eHXPWf653e6Z0++4/+6I940pOehCQeSBLPj20k8a9hmwf6hV/4BR75yEfy2Mc+lmc84xk8kCQAbPOf6cEPfjAA//AP//A7XHXVVVddddVVV/33oXLVVVddddVVV112zTXXPBjg4OCAiABAEveTBIAkACQBIAkASdxPEgCSAJAEgCQkASAJAEkASEISAJKQBIAkJAEgCUkASAJAEpIAkASAJAAkcT9JANjmfrZ5fmxzP9sA2MY2ALaxjW0AbGMb29jGNraxjW1sYxvb2MY2trENgG1sYxvb2MY2trGNbQBsYxvb2AbANrYBsI1tAPb29tja2uKaa67hvvvu436SuN/h4SFX/ed5ndd5nfcGeOITn8i/lm3+PZ74xCdy/vx5Tp06xZkzZzh79izPTRK2+c/y4Ac/GIB/+Id/+G2uuuqqq6666qqr/vtQueqqq6666qqrnoMkJCEJAEkASAJAEveTBIAkACQBIAkASQBIAkASkgCQBIAkJAEgCUkASAJAEpIAkASAJAAkASCJ58c297PNA9nmfrYBsA2AbQBsYxsA29jGNraxDYBtbGMb29jGNraxjW1sYxsA29jGNraxjW0AbGMb29gGwDa2sQ2AbWwDYBvbANgGwDa2edzjHscNN9zAtddey9///d8DIInnds01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PNAznvEMdnd3OX36NK/4iq/In/7pn/KQhzyE3/qt3/ru++6771au+g9333333QowjiOPetSjeOITn8j9bPPcbPNAtpHEC2Obf4ltHmg2m9H3PX3fMwwDj3vc4/iar/kaXvZlX5YHPehB3HLLLWxubgLw4Ac/mBfkH/7hH377t37rt77nt37rt76bq6666qqrrrrqqv/ZqFx11VVXXXXVVc9y33333QqwubnJfD7n4OCA+9kGwDYAtgGwDYBtAGwDYBsA29gGwDYAtgGwDYBtAGwDYBvbANgGwDb3sw2AbQBsA2AbANvczzYAtgGwDYBt7mcbANsA2OZ+tgHY2dnh2LFj3HLLLQA86EEP4kEPehAvyO7uLgB/8zd/A8Ctt97KM57xDP4lknhBJPGCSOL5kQTAz//8z/Pmb/7mPOQhD+EhD3kIAF//9V//Pfwnu+aaax4McN99993K/wEv9mIv9tov9mIv9lrXXHPNQ6655poH3XfffbcC/MM//MPv3Hfffbf+wz/8w2/zTH//93//2+/0Tu/02q/yKq/CE57wBB7INg9km+dmm38N2zw325RSmM1m9H1P13V0XUetla7rqLUyDAN//ud/zl/91V9x4sQJbr75Zm688UYksb29zblz52697777fvu+++67FeC3f/u3v+e+++67lauuuuqqq6666qr/HahcddVVV1111VXP4R/+4R9++8Ve7MVeez6fc+nSJWwDYBsA2wDYBsA2ALYBsA2AbQBsYxsA2wDYBsA2ALYBsM39bANgGwDbANgGwDb3sw2AbQBscz/bANgGwDb3sw2AbQBsc+zYMW655RaOHTvG8ePHOXbsGA960IN4QXZ3d9nd3eUZz3gGALfeeivPeMYzeFFJ4oWRxPMjiRdEEgDDMNwKsL+//9t33XXXrX/6p3/6O+/93u/9Xr/1W7/1Pddcc82D/uEf/uG3+U9wzTXXPPgd3/EdP+t1Xud13vsf/uEffvvMmTMPBviHf/iH3/6t3/qt7/mHf/iH3+Z/kWuuuebBr/3ar/1e7/RO7/TZPJcXe7EXA+B1Xud13vu+++67FeC3fuu3vvsf/uEffue3f/u3v+d1Xud13vtRj3rUg23z3Gzzb2Wb58c29+u6jtlsRtd19H1PrZWu66i1Umul1kqtlVorpRRqrUzTxO23387dd9/NE5/4xM9+2tOe9j2H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if39fQA2NzeRxItKEs/P4eEhf/qnf8orvuIr8k7v9E6f9Zmf+Zm/zYtgsVh81rFjxz67lEJEEBFIQhKSkIQkJCEJAEkASOJFJYkXlSRemMPDQ+677z6uueaaB73Yi73Ya/3DP/zDb3PVVVddddVVV1111X8kKlddddVVV1111b/oH/7hH377R3/0Rz/nwz/8w7/rZV7mZXj605/O05/+dJ6fcRxvtc3R0dFvD8Nw6+Hh4e9M03TrOI63ctV/qoh48LFjxz772LFj71VKISKICCICSUQEkpCEJCQhCUkASEISkgCQhCQAJAEgCQBJAEhib28PgM3NTTY3Nzk8POSFkcS/5OzZswC82Iu92Gu/2Iu92Gv/wz/8w2/zApRSXvv06dO/VUohIogIIgJJSEISkpAEgCQAJCGJ+128eJETJ06wubnJ4eEhz48kXlSS+JdI4u///u953dd9XV7ndV7nvX/0R3/0c7jqqquuuuqqq6666j8Slauuuuqqq6666kXyW7/1W9995syZB734i7/4a7/qq77qaz/4wQ/m6U9/Og9+8IP50R/90c8+PDz8neVy+dtc9V9uPp9/1okTJ957Pp8/OCIopRARSCIikIQkJCEJSUhCEpIAkIQkACQhCQBJAEgCQBIAkgCQBMAdd9zBTTfdxObmJoeHh7wgkviXSOLw8JBbb72VBz/4wbzO67zOe/3DP/zDb/NcJD14Z2fnuzY2Nl47IogIIgJJSEISkpCEJCQBIAkASQBIAmB3d5cTJ06wtbXF4eEhz00SLwpJvCgkAXB4eAjANddc8+Brrrnmwffdd9+tXHXVVVddddVVV131H4Vy/PhxrrrqqquuuuqqF80//MM//M4//MM//M6DHvSg49dee+1u3/e//du//dsf84xnPON7pmm6lav+y0h68Obm5kfdcMMNv72zs/Pas9nseK2VWisRQSmFiCAiiAgigoggIogIIgJJSCIikIQkIgJJSEISkpCEJCQhCUlIQhKSkMTOzg433XQTh4eH3HfffTw3SUjiXyKJ++3u7vLIRz6Szc3N47/wC7/wNTzAfD7/rFOnTv30bDZ7cK2ViKCUQkQQEUQEEYEkJCEJAEkASAJAEvd76EMfyvXXX8/BwQH33Xcf95OEJF4UkviXSEIS9xvHkWuuuYbNzU1uvfXWv7n11lv/mquuuuqqq6666qqr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lauuuuqqq6666v+lF3uxF3uta6655sF/9Vd/RUQgCQBJSEISAJIAkASAJAAkASAJAEncTxL3k8T9JPFAknhBbCMJANu8ILZ5INsA2OZ+tgGwDYBtbANgGwDb2AbANraxDYBtbGMb29jGNraRhCQkIYmIQBIRgSQiguPHj/NSL/VSvPqrvzr329vb43GPexx//Md/zHK55OjoiGmaeCDbvCC2eSDbANjmfrYBsI1tAGxjGwDb2AbANpLo+55aK7VWSinUWimlUGullEKtlVIKtVZqrRw/fpxHPepRvORLviQ/8iM/8tlf9mVf9j333XffrVx11VVXXXXVVVdd9T8Flauuuuqqq6666v+lF3/xF39tgGc84xlEBACSkASAJAAkASAJAEkASAJAEveTxP0k8UCSeCBJ/Ets8/zY5oFsA2Cb+9kGwDYAtgGwjW0AbANgG9vYBsA2trENgG1sYxvb2EYSEUFEIAlJRASSiAiOHz/OS73US/GSL/mSHDt2jPv9wz/8A3feeSePe9zjWC6XXLp0iReVbR7INvezDYBt7mcb2wDYxjYAtrGNbe7XdR21VmqtlFKotVJrpZRCKYVaK6UUaq3UWqm18vIv//K85Eu+JP/wD//w2x/yIR/yPvfdd9+tXHXVVVddddVVV131Pw2Vq6666qqrrrrq/6UzZ848GOAZz3gGkpAEgCQAJAEgCQBJAEjifpIAkMT9JPFAknhukvjXsM0D2eZ+trmfbQBsA2AbANsA2MY2ALaxDYBtbANgG9vYxja2sY1tJCGJiEASkogIJCGJiOD48eO81Eu9FK/xGq/B/fb29viHf/gH/vRP/5TlcslqtWK1WvGisM1zs839bANgGwDbANgGwDa2AbCNbWwDYJuu66i1Umul1kophVorpRRqrZRSKKVQa6XWSq2Vl3/5l+elXuqluO+++279zM/8zPf5h3/4h9/mqquuuuqqq6666qr/qahcddVVV1111VX/L11zzTUPBtjb20MSkgCQBIAkACQBIIn7SeJ+krifJB5IEv8Wtnlutrmfbe5nGwDbANgGwDYAtrENgG0AbGMbANvYxja2AbCNbWxjG0lEBJKQhCQiAklEBJJ4rdd6LV7yJV+SY8eOcb+9vT3++I//mH/4h39gtVpx6dIlXhS2eW62uZ9t7mcbANsA2AbANrYBsI1tbANgm1IKXddR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8YlP/OyzZ89+z3q9vpWrrrrqqquuuuqqq6666j8TetCDHsRVV1111VVXXXXVc7vmmmse/Dmf8zm/dc011zz44sWLfNM3fRO7u7tIQhIAEYEkJCGJkydP8jqv8zq89Eu/NPe7dOkSf/u3f8tv/dZv3Xr+/PnvvuOOOz6Hq6666qqrrrrqqquuuuq/CnrQgx7EVVddddVVV1111fNz5syZB33ER3zEd585c+bBXdc9+C/+4i/4jd/4DSQhCUmcPHmSl3mZl+FlXuZlOH78OPf7vd/7Pf7u7/6Oc+fO3XrnnXd+zrlz576bq6666qqrrrrqqquuuuq/GnrQgx7EVVddddVVV1111QtyzTXXPPi1X/u13+ud3umdPhtgd3eX3/zN3+TWW2/lZV7mZXid13kd7re7u8vf/d3f8fd///eUUn77t3/7t99nvV7fylVXXXXVVVddddVVV1313wU96EEP4qqrrrrqqquuuupf8mIv9mKv/U7v9E6f9WIv9mKvzfPxe7/3e9x+++086EEP4vjx47/9mZ/5ma/DVVddddVVV1111VVXXfXfjXL8+HGuuuqqq6666qqr/iVnz5699R/+4R9+59Zbb/3rzc3N49dcc82DeYAHPehBRMRvP+UpT/nur//6r38frrrqqquuuuqqq6666qr/CdCDHvQgrrrqqquuuuqqq/4tXuzFXuy1ucJnz559xn333XcrV1111VVXXXXVVVddddX/JOhBD3oQV1111VVXXXXVVVddddVVV1111VVXXXXV/0lUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9V/CNabwGasoJS0AAAAABJRU5ErkJggg==) diff --git a/docs/kcl/patternLinear2d.md b/docs/kcl/patternLinear2d.md index 9910804d5..db0bb2bfe 100644 --- a/docs/kcl/patternLinear2d.md +++ b/docs/kcl/patternLinear2d.md @@ -9,7 +9,7 @@ Repeat a 2-dimensional sketch along some dimension, with a dynamic amount of distance between each repetition, some specified number of times. ```js -patternLinear2d(data: LinearPattern2dData, sketch_set: SketchSet, use_original?: bool) -> [Sketch] +patternLinear2d(sketch_set: SketchSet, instances: integer, distance: number, axis: [number], use_original?: bool) -> [Sketch] ``` @@ -17,9 +17,11 @@ patternLinear2d(data: LinearPattern2dData, sketch_set: SketchSet, use_original?: | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`LinearPattern2dData`](/docs/kcl/types/LinearPattern2dData) | Data for a linear pattern on a 2D sketch. | Yes | -| `sketch_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | A sketch or a group of sketches. | Yes | -| `use_original` | `bool` | | No | +| `sketch_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | The sketch(es) to duplicate | Yes | +| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `distance` | `number` | Distance between each repetition. Also known as 'spacing'. | Yes | +| `axis` | `[number]` | The axis of the pattern. A 2D vector. | Yes | +| `use_original` | `bool` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns @@ -31,11 +33,7 @@ patternLinear2d(data: LinearPattern2dData, sketch_set: SketchSet, use_original?: ```js exampleSketch = startSketchOn('XZ') |> circle({ center = [0, 0], radius = 1 }, %) - |> patternLinear2d({ - axis = [1, 0], - instances = 7, - distance = 4 - }, %) + |> patternLinear2d(axis = [1, 0], instances = 7, distance = 4) example = extrude(exampleSketch, length = 1) ``` diff --git a/docs/kcl/patternLinear3d.md b/docs/kcl/patternLinear3d.md index f6b04f543..49d7ff4a8 100644 --- a/docs/kcl/patternLinear3d.md +++ b/docs/kcl/patternLinear3d.md @@ -9,7 +9,7 @@ Repeat a 3-dimensional solid along a linear path, with a dynamic amount of distance between each repetition, some specified number of times. ```js -patternLinear3d(data: LinearPattern3dData, solid_set: SolidSet, use_original?: bool) -> [Solid] +patternLinear3d(solid_set: SolidSet, instances: integer, distance: number, axis: [number], use_original?: bool) -> [Solid] ``` @@ -17,9 +17,11 @@ patternLinear3d(data: LinearPattern3dData, solid_set: SolidSet, use_original?: b | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`LinearPattern3dData`](/docs/kcl/types/LinearPattern3dData) | Data for a linear pattern on a 3D model. | Yes | -| `solid_set` | [`SolidSet`](/docs/kcl/types/SolidSet) | A solid or a group of solids. | Yes | -| `use_original` | `bool` | | No | +| `solid_set` | [`SolidSet`](/docs/kcl/types/SolidSet) | The solid(s) to duplicate | Yes | +| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `distance` | `number` | Distance between each repetition. Also known as 'spacing'. | Yes | +| `axis` | `[number]` | The axis of the pattern. A 2D vector. | Yes | +| `use_original` | `bool` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns @@ -37,11 +39,7 @@ exampleSketch = startSketchOn('XZ') |> close() example = extrude(exampleSketch, length = 1) - |> patternLinear3d({ - axis = [1, 0, 1], - instances = 7, - distance = 6 - }, %) + |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6) ``` ![Rendered example of patternLinear3d 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAACqVklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVf9r3TNNdc8+LVf+7Xf68Vf/MVf++///u9/G+BHf/RHP4errrrqqquuejb0oAc9iKuuuuqqq6666qqrrrrqqqv+d7jmmmse/Nqv/drv9eIv/uKv/WIv9mKvvbu7y1/+5V/ykIc8hIc85CHcd999t37WZ33W69x33323ctVVV1111VWAHvSgB3HVVVddddVVV1111VVXXXXV/1zXXHPNg1/7tV/7vV7ndV7nva+55poH7+7u8pd/+Zfs7u7yV3/1VwBI4nVe53V4ndd5He67775bf+u3fuu7f/RHf/RzuOqqq6666v879KAHPYirrrrqqquuuuqqq6666qqr/me55pprHvzar/3a7/U6r/M6733NNdc8eHd3l7/8y79kd3eXv/7rv+YFefCDH8z7vu/7AvD1X//17/Nbv/Vb381VV1111VX/n6EHPehBXHXVVVddddVVV1111VVXXfXf75prrnnwa7/2a7/X67zO67z3Nddc8+Dd3V3+6q/+iqc//enceuutvCDHjx/nZV7mZXiZl3kZjh8/zv3uu+++Wz/kQz7kIVx11VVXXfX/GZWrrrrqqquuuuqqq6666qqr/ttcc801D37t137t93qd13md977mmmsevLu7y1/91V/x8z//89x66628IMePH+dlXuZleJmXeRmOHz/O/Y6OjnjGM57BYx7zGK666qqrrroKoHLVVVddddVVV1111VVXXXXVf6lrrrnmwa/92q/9Xq/zOq/z3tdcc82Dd3d3+au/+it+/ud/nltvvZUX5Pjx47zMy7wML/MyL8Px48e539HREc94xjM4e/Ys586d4/Tp0zzmMY/h7Nmzt3LVVVddddX/d1Suuuqqq6666qqrrrrqqquu+k93zTXXPPi1X/u13+ud3umdPhtgd3eXv/qrv+Lnf/7nufXWW3lBjh8/zsu8zMvwOq/zOjzQ0dERz3jGMzh37hxnz57lgTY3NwG47777buWqq6666qr/76hcddVVV1111VVXXXXVVVdd9Z/immuuefBrv/Zrv9c7vdM7fTbA7u4uv/Vbv8XTn/50br31Vl6QEydO8NIv/dK8zuu8Dg90dHTEM57xDM6dO8e5c+d4QRaLBQD33XffrVx11VVXXfX/HZWrrrrqqquuuuqqq6666qqr/sNcc801D37t137t93qnd3qnzwbY3d3lt37rt/irv/ordnd3eW6SADh+/Dgv/dIvzeu8zuvwQEdHR9x2222cO3eOs2fP8txs80C22dzcBODs2bPP4Kqrrrrqqv/vqFx11VVXXXXVVVddddVVV13173LNNdc8+LVf+7Xf653e6Z0+G2B3d5ff+q3f4q/+6q/Y3d3lfpJ4oAc/+ME8+MEP5nVe53V4oKOjI2677TZuu+02jo6OeEFs8/xsbGxw1VVXXXXVVc9E5aqrrrrqqquuuuqqq6666qp/tRd7sRd77Rd7sRd7rXd6p3f6bIDd3V1+67d+i7/6q79id3cXSQBI4oEe/OAH8+AHP5jXeZ3X4YGOjo647bbbuP322zk8POS52eaBbPPcbAOwubkJwD/8wz/8NlddddVVV/1/R+Wqq6666qqrrrrqqquuuuqqF8mLvdiLvfaLvdiLvdY7vdM7fTbA7u4uv/Vbv8Vf//Vfs7u7y/0kcb/jx4/z0i/90gC8zuu8Dg90dHTEbbfdxu23387R0REviG3+Jba538bGBgD33XffrVx11VVXXfX/HZWrrrrqqquuuuqqq6666qqrnq9rrrnmwa/92q/9XgDv9E7v9NkAu7u7/NZv/Ra//du/zQty/PhxXvqlX5oTJ07w0i/90jzQ0dERt99+O7fffjuHh4c8N9s8kG2em22uuuqqq6666kVE5aqrrrrqqquuuuqqq6666qpnueaaax782q/92u91zTXXPPh1Xud13htgd3eX3/qt3+K3f/u3eUGOHz/OS7/0S3PixAle+qVfmgc6Ojri9ttv54lPfCIvjG3+JbZ5bra535kzZwD4h3/4h9/mqquuuuqqq4DKVVddddVVV1111VVXXXXV/3PXXHPNg1/7tV/7va655poHv87rvM57A+zu7vJbv/Vb/PZv/zYvyPHjx3npl35pHvKQh/DgBz+YBzo6OuL222/nSU96ErZ5brZ5INs8N9s8kG2em20eaGNjA4D77rvvVq666qqrrroKqFx11VVXXXXVVVddddVVV/0/dM011zz4tV/7td/rxV/8xV/7xV7sxV4bYHd3l9/6rd/it3/7t3lBjh8/zku/9EvzkIc8hAc/+ME80NHREbfffjtPetKTeGFs8y+xzb/ENs/NNlddddVVV131AFSuuuqqq6666qqrrrrqqqv+H3md13md936d13md93qxF3ux1wa49dZb+a3f+i1++7d/mxfkxIkTvPRLvzQPfvCDefCDH8wDnT9/nvPnz/OkJz0J2zw32zyQbZ6bbR7INs/NNv8S25w5cwaAf/iHf/gdrrrqqquuugqoXHXVVVddddVVV1111VVX/T/xYi/2Yq/9Oq/zOu/1Yi/2Yq/913/91/zUT/0Uz00SAMePH+elX/qlefCDH8yDH/xgHuj8+fOcP3+eJz3pSdzPNs/NNg9km+dmm3+JbZ6bba666qqrrrrqRUDlqquuuuqqq6666qqrrrrq/4lrrrnmwS/2Yi/22gAPfvCDOX78OJcuXeJ+x48f56Vf+qV56Zd+aY4fP879lsslR0dHnD9/nic/+cnY5l9im3+JbZ6bbR7INs/NNs/NNgBnzpwB4B/+4R9+m6uuuuqqq64CKlddddVVV1111VVXXXXVVf9PnDlz5kG7u7vs7u7y4Ac/mPd5n/fhp3/6p3nwgx/MS7/0S3P8+HHut1wuueOOOzg6OuKOO+7gfrZ5brZ5INs8N9s8kG2em23+JbZ5bra56qqrrrrqqheAylVXXXXVVVddddVVV1111f8T11xzzYOf8Yxn8Du/8zu81Eu9FK/1Wq/Fe7/3e3O/5XLJHXfcwXK55I477sA2/xLb/Ets8y+xzXOzzb/ENg+0ubkJwH333XcrV1111VVXXQVUrrrqqquuuuqqq6666qqr/p/Z3d3lb//2b3mpl3opjh8/zpOf/GTOnz/PhQsXuJ9tnpttHsg2z802D2Sb52abB7LNc7PNc7PNC7OxsQHAfffddytXXXXVVVdddQXBVVddddVVV1111VVXXXXV/xMv9mIv9tq7u7sA7O7ucvz4cQDuuOMOLly4wAtjmweyzXOzzQPZ5rnZ5l9im+dmm+dmmwc6c+YMAP/wD//w21x11VVXXXXVFVSuuuqqq6666qqrrrrqqqv+H9nd3eW5LZdLHsg2D2SbB7LNc7PNv8Q2z802D2Sb52ab52abq6666qqrrnoRULnqqquuuuqqq6666qqrrvp/4pprrnkwz3T8+HEAlsslD2SbB7LNA9nmudnmudnmgWzz3Gzzb2Gb52abjY0NAO67775bueqqq6666qorqFx11VVXXXXVVVddddVVV/0/8oxnPAOAY8eOAXB0dMT9bPNAtvmX2Oa52eaBbPPcbPPcbPPcbPOi2tzcBODs2bPP4KqrrrrqqquuoHLVVVddddVVV1111VVXXfX/wDXXXPNgHuD48eMALJdLAGzzQLZ5brZ5INs8N9v8S2zz3Gzz3Gzz3Gzz3GwDsLm5CcB99913K1ddddVVV111BZWrrrrqqquuuuqqq6666qr/B86cOfNggN3dXZ6bbR7INs/NNv8S2zw32zyQbZ6bbZ6bbZ6bbZ6bbe63sbEBwNmzZ2/lqquuuuqqq66gctVVV1111VVXXXXVVVdd9f/ANddc82CeSRLHjh0D4OjoiAeyzXOzzXOzzQPZ5rnZ5l9im+dmm+dmm+dmmwfa3NwE4L777ruVq6666qqrrrqCylVXXXXVVVddddVVV1111f8Tu7u73O/48eMALJdLXhjbPDfbPJBtnpttnptt/iW2eW62+Zdsbm4CcN99993KVVddddVVVz0blauuuuqqq6666qqrrrrqqv8HXuzFXuy1dnd3eWFs80C2eW62+ZfY5rnZ5rnZ5t/KNg+0sbEBwNmzZ2/lqquuuuqqq56NylVXXXXVVVddddVVV1111f8Tly5d4n4PetCDADh//jwAtnkg2zw32zw32zyQbZ6bbZ6bbZ6bbZ6bbZ6bbZ7bxsYGAPfdd9+tXHXVVVddddWzEVx11VVXXXXVVVddddVVV/0/cM011zyYF8A2D2Sb52ab52abB7LNc7PNc7PNc7PNc7PNc7PNc7PN5uYmAPfdd9+tXHXVVVddddWzEVx11VVXXXXVVVddddVVV/0/cObMmQfv7u5yv+PHjwNwdHTEA9nmudnmudnmX2Kb52ab52ab52ab52abF2RzcxOAs2fPPoOrrrrqqquuejYqV1111VVXXXXVVVddddVV/0/s7u7ywtjmudnmudnmudnmX2Kb52ab52ab52ab58c2ABsbG1x11VVXXXXV80Hlqquuuuqqq6666qqrrrrq/4FrrrnmwTzT8ePHATg6OuJ+tnlutnlutnlutnlutvnPZpv7bW5uAvAP//APv81VV1111VVXPRuVq6666qqrrrrqqquuuuqq/yee8YxnAHDs2DEAlsslL4htnpttnpttnpttnpttnpttnpttnpttnpttHmhzcxOA++6771auuuqqq6666tmoXHXVVVddddVVV1111VVX/R/3Yi/2Yq/NAxw/fhyAo6MjAGzzL7HNc7PNc7PNc7PNc7PNc7PNc7PNc7PNVVddddVVV72IqFx11VVXXXXVVVddddVVV/0fd8011zwYYHd3l+dmm+dmmweyzXOzzXOzzXOzzXOzzXOzzXOzzXOzzXM7c+YMAP/wD//w21x11VVXXXXVc6Jy1VVXXXXVVVddddVVV131/8yDHvQgAI6Ojnhutnkg2zw32zw32zw32zw32zw32zw327yoNjc3Abjvvvtu5aqrrrrqqqueE5Wrrrrqqquuuuqqq6666qr/486cOfOg3d1dnttyueSBbPNAtnlutnlutnlutnlutnlutnlR2ea52eaqq6666qqrXggqV1111VVXXXXVVVddddVV/8ddc801D97d3eV+x48fB+Do6Ij72eaBbPPcbPPcbPPcbPPcbPPcbPP82Oa52ea52QbgzJkzAPzDP/zD73DVVVddddVVz4nKVVddddVVV1111VVXXXXV/wOXLl3ifseOHQNguVwCYJt/iW2em22em22em21eVLZ5bra56qqrrrrqqn8jgquuuuqqq6666qqrrrrqqv/jrrnmmgfv7u7y/NjmudnmgWzz3Gzz3GzzorLNc7PNc7PN82Ob+11zzTUA/MM//MNvc9VVV1111VXPieCqq6666qqrrrrqqquuuur/uDNnzjx4d3eX+x0/fhyAw8NDnpttHsg2z802LyrbPDfbPDfbPDfbPD+2ueqqq6666qoXEZWrrrrqqquuuuqqq6666qr/R06cOAHA0dERz802/1a2eW62eW62eW62eVHZ5rltbm4CcN99993KVVddddVVVz0nKlddddVVV1111VVXXXXVVf/HXXPNNQ/e3d0F4NixYwAcHR3xQLZ5brZ5brZ5brZ5brZ5brZ5brZ5fmzz3Gzz3DY3NwG47777buWqq6666qqrnheVq6666qqrrrrqqquuuuqq/8OuueaaBwNcunQJgOPHjwOwXC65n22em22em22em22em22em22em22eH9s8N9s8P2fOnAHgH/7hH36bq6666qqrrnpeVK666qqrrrrqqquuuuqqq/4PO3PmzIN5IWzz3Gzz3Gzz3Gzz3Gzz3GzzorLNi8o2V1111VVXXfUvoHLVVVddddVVV1111VVXXfV/2DXXXPNggN3dXQCOHTsGwNHREbZ5brZ5brZ5brZ5brZ5brZ5fmzz3Gzz/NjmudkGYHNzE4D77rvvVq666qqrrrrqeVG56qqrrrrqqquuuuqqq676P253d5f7HT9+HICjoyOem22em22em22em22em22eH9s8N9s8P7Z5bra53+bmJgBnz559BlddddVVV131vKhcddVVV1111VVXXXXVVVf9H7e7u8u/xDbPzTbPzTbPzTbPzTbPj22em22eH9v8SzY3NwG47777buWqq6666qqrnhfBVVddddVVV1111VVXXXXV/2H/8A//8NsPfvCDea3Xei0Ajh8/DsDR0RH3s81zs81zs81zs82LyjbPzTbPj22eH9s80ObmJgBnz569lauuuuqqq656XgRXXXXVVVddddVVV1111VX/h9133323/siP/Mhnv9RLvRSv9VqvxbFjxwA4OjoCwDbPzTbPzTbPzTbPj22em21eVLZ5fmzz3DY3NwG47777buWqq6666qqrnheVq6666qqrrrrqqquuuuqq/+N+9Ed/9HMA3uiN3uizjx8/DsDR0RG2eW62eW62eW62eX5s89xs8/zY5rnZ5vmxzXPb3Nzkqquuuuqqq/4FBFddddVVV1111VVXXXXVVf8P/PZv//b33Hnnnb/NM73My7wMp0+f5oFs89xs89xs8/zY5rnZ5vmxzXOzzfNjm+dnY2MDgH/4h3/4ba666qqrrrrq+aMcP36cq6666qqrrrrqqquuuuqq/+sODw93/+Ef/uF3Dg8Pd1/8xV/8tY8dO8Ytt9zCLbfcwrFjxxiGgaOjIx7INs/NNs+PbZ6bbZ4f27yobPP82Oaaa67hpptu4h/+4R9++0//9E9/hquuuuqqq656XpTjx49z1VVXXXXVVVddddVVV131/8Hh4eHuP/zDP/zOb//2b3/P4eHhriRuvPHGBx87dowHPehBPOhBD+L48eOM48jh4SHPzTbPj22em22eH9s8P7Z5brZ5fmwDcNNNN3Httdfyp3/6pz/9D//wD7/DVVddddVVVz0vyvHjx7nqqquuuuqqq6666qqrrvr/5PDwcPcf/uEffue3fuu3vue3f/u3v+fw8HD3mmuuefDx48ePHzt2jAc96EE86EEPous6AI6OjrDN82Ob52ab58c2z49tXlS2ud9DH/pQTpw4wW//9m9/z6233vrXXHXVVVddddXzohw/fpyrrrrqqquuuuqqq6666qr/rw4PD3f/4R/+4Xd+4Rd+4Wt++7d/+3sODw93r7nmmgcfP378+JkzZ3jQgx7Egx70ILquQxJHR0fczzbPzTbPj22eH9s8P7b5l9x0002cOHGCP/3TP/2ZW2+99a+56qqrrrrqqueFHvSgB3HVVVddddVVV1111VVXXXXVc7rmmmse/I7v+I6f9Tqv8zrvzQMcHR1x6623cvbsWc6ePcsD2eb5sc3zY5vnxzbPj20e6C3f8i3Z3NzkQz7kQx5y33333cpVV1111VVXPS/0oAc9iKuuuuqqq6666qqrrrrqqquev2uuuebBZ86cefDrvM7rvNfrvM7rvDcPcHh4yDOe8QxuvfVWjo6OsM1zs83zY5vnxzbPj22e27u8y7sA8HZv93biqquuuuqqq54/9KAHPYirrrrqqquuuuqqq6666qqr/mXXXHPNg1/sxV7stV/sxV7stV7ndV7nvXmAw8NDbr31Vh73uMdxP9s8P7Z5fmzz/Njm+XmXd3kXAN7u7d5OXHXVVVddddXzhx70oAdx1VVXXXXVVVddddVVV1111b/ONddc8+AXe7EXe+0Xe7EXe63XeZ3XeW+e6fDwkKOjI57+9Kdz66238txs8/zY5vmxzfNz5swZXv/1X59/+Id/+O3P/MzPfB2uuuqqq6666vmjHD9+nKuuuuqqq6666qqrrrrqqqv+dQ4PD3dvvfXWv/7TP/3Tn/nt3/7t77n11lv/5vDwcPeRj3zkS29ubnLjjTfy4Ac/mBMnTtB1Hbu7u9jm+bHN82Ob58c21157LTfddBP/8A//8Nt/+qd/+jNcddVVV1111fNHOX78OFddddVVV1111VVXXXXVVVf92x0eHu7eeuutf/2nf/qnP/Pbv/3b33Prrbf+zebm5vEbb7zxwcePH+fGG2/kwQ9+MMePH6fve3Z3d7mfbZ4f2zw/tgE4ceIEN910E7feeutf/+mf/unPcNVVV1111VXPH+X48eNcddVVV1111VVXXXXVVVdd9R/j8PBw99Zbb/3r3/qt3/qe3/7t3/6eW2+99W82NzeP33jjjQ8+ceIEN954Iw95yEM4fvw4Xdexu7vLc7PN82Ob+z3qUY/ixIkT/MIv/MLX3HrrrX/NVVddddVVVz1/VK666qqrrrrqqquuuuqqq676T3Hffffdet999333b/3Wb333Nddc8+AXe7EXe+3XeZ3Xea8Xe7EXe+2HPOQhPOQhD+HFX/zFue+++3j605/Offfdh22uuuqqq6666j8QetCDHsRVV1111VVXXXXVVVddddVV/3WuueaaB7/2a7/2e734i7/4a7/Yi73Ya/NMh4eH3HfffTztaU/jvvvu44Fs80Bv9VZvxebmJh/yIR/ykPvuu+9Wrrrqqquuuur5Qw960IO46qqrrrrqqquuuuqqq6666r/HNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22e6fDwkPvuu4+nPe1p3HvvvTy3t3qrt2Jzc5MP+ZAPech99913K1ddddVVV131/KEHPehBXHXVVVddddVVV1111VVXXfXf75prrnnwa7/2a7/Xi7/4i7/2i73Yi702z3R4eMi9997L0572NO677z4A3vVd3xWAt3u7txNXXXXVVVdd9YKhBz3oQVx11VVXXXXVVVddddVVV131P8s111zz4Nd+7dd+r9d5ndd572uuuebBPNPh4SH33nsvD33oQ7nvvvtu/ZAP+ZCHcNVVV1111VUvGOX48eNcddVVV1111VVXXXXVVVf9d7jmmmse/GZv9mYf9bmf+7m/fc011zz4wQ9+8Ev/wz/8w+9wFYeHh7v/8A//8Du/8Au/8DW//du//T2Hh4e711xzzYNPnDhx/MSJEwD86Z/+6U//6Z/+6c9w1VVXXXXVVS8YetCDHsRVV1111VVXXXXVVVddddV/hWuuuebBZ86cefCLvdiLvdY7vdM7fTbA7u4uf/3Xf81Lv/RLc/z4cX7kR37ks3/0R3/0c7jq+brmmmse/I7v+I6f9Q//8A+/81u/9VvfzVVXXXXVVVe9cOhBD3oQV1111VVXXXXVVVddddVV/1muueaaB7/2a7/2e11zzTUPfp3XeZ33Btjd3eWv//qvecYznsGtt94KwEu/9EvzVm/1Vtx33323fv3Xf/37/MM//MNvc9VVV1111VVX/XuhBz3oQVx11VVXXXXVVVddddVVV/1Huuaaax782q/92u/14i/+4q/9Yi/2Yq8NsLu7y1//9V/zN3/zN+zu7vL8vNZrvRav/dqvzX333Xfrh3zIhzyEq6666qqrrrrq34vKVVddddVVV1111VVXXXXVf4Brrrnmwa/92q/9Xi/+4i/+2i/2Yi/22gC7u7v89m//Nn/zN3/D7u4uz48kAI4fP86lS5cAuOaaax58zTXXPPi+++67lauuuuqqq6666t8DPehBD+Kqq6666qqrrrrqqquuuurf4pprrnnwa7/2a7/X67zO67z3Nddc82CA3d1d/vqv/5rf+Z3f4blJ4oGOHz/OS73US3H8+HFe6qVeigf6rd/6re/++q//+vfhqquuuuqqq67696By1VVXXXXVVVddddVVV131r3DNNdc8+LVf+7Xf63Ve53Xe+5prrnkwwK233spv//Zv8zu/8zvcTxLPz/Hjx3mpl3opHvSgB/HgBz+YBzo6OuLo6IjTp09z1VVXXXXVVVf9h6By1VVXXXXVVVddddVVV131L7jmmmse/Nqv/drv9U7v9E6fDbC7u8tf//Vf87jHPY7f+Z3fAUASknh+jh8/zku91EvxoAc9iAc/+ME80NHREbfddhtPeMITAHj0ox/N6dOnue+++27lqquuuuqqq67696Jy1VVXXXXVVVddddVVV131fFxzzTUPfu3Xfu33eqd3eqfPBtjd3eW3f/u3ecYznsEznvEM7ieJ5+f48eO81Eu9FC/1Ui/F8ePHeaBz585x7tw5nvjEJwJgm/ttbGwAcPbs2Wdw1VVXXXXVVVf9e1G56qqrrrrqqquuuuqqq64CrrnmmgefOXPmwS/2Yi/2Wu/0Tu/02QC7u7v8zu/8DrfeeivPeMYz+JccP36cl3qpl+KlXuqlOH78OPc7OjritttuY7lcctttt3E/21x11VVXXXXVVf+pqFx11VVXXXXVVVddddVV/29dc801D37t137t97rmmmse/Dqv8zrvDbC7u8vv/M7vcOutt/KMZzyDf8nx48d5qZd6KV7rtV6LBzo6OuL222/n3LlznDt3judmm+fn9OnTANx33323ctVVV1111VVX/XtRueqqq6666qqrrrrqqqv+X7nmmmse/Nqv/drv9eIv/uKv/WIv9mKvDbC7u8vv/M7v8Dd/8zfs7u7yL3nQgx7Egx/8YF7rtV6LBzo6OuL222/n3LlznD9/Hts8P7Z5fmxzv7Nnz97KVVddddVVV13170Xlqquuuuqqq6666qqrrvo/75prrnnwa7/2a7/Xi7/4i7/2i73Yi702wO7uLr/zO7/D3/zN37C7u8sLc/z4cV7qpV4KgNd6rdfigY6Ojrj99tu5/fbbOTo6AsA2z49tXhDbAGxsbABw33333cpVV1111VVXXfXvReWqq6666qqrrrrqqquu+j/pmmuuefBrv/Zrv9frvM7rvPc111zzYIDd3V1+53d+h9/5nd/hX3L8+HFe6qVeigc/+ME86EEP4oGOjo64/fbbuf322zk6OuKBbPP82Ob5sc1VV1111VVXXfWfhspVV1111VVXXXXVVVdd9X/GNddc8+DXfu3Xfq/XeZ3Xee9rrrnmwQC33norv/M7v8Pv/M7v8C85ceIEL/mSL8mDH/xgHvSgB/FAR0dH3H777TzxiU/k+bHNC2Kb58c2D7SxsQHAfffddytXXXXVVVddddV/BCpXXXXVVVddddVVV1111f9q11xzzYNf+7Vf+73e6Z3e6bMBdnd3+Zu/+Rse//jH8zu/8zu8IJIAOH78OC/5ki/Jgx/8YB70oAfxQOfPn+fcuXM86UlPAsA2z49tnh/bvCC2eW4bGxsAnD179lauuuqqq6666qr/CFSuuuqqq6666qqrrrrqqv+1PvdzP/e3XuzFXuy1d3d3+Z3f+R1uvfVWnvGMZ/DcJPFAx48f5yVf8iV5qZd6KY4fP879jo6OOH/+PEdHRzzpSU/ifrZ5QWzz/Njm+bHNC7KxsQHAfffddytXXXXVVVddddV/BCpXXXXVVVddddVVV1111f9K7/iO7/hZL/ZiL/bat956K9/7vd/LA0niuR0/fpyXfMmX5LVe67V4oKOjI26//XaWyyW33347z802z49tXhDbPD+2eX5sc9VVV1111VVX/aegctVVV1111VVXXXXVVVf9r/TiL/7irw1w/PhxTpw4we7uLs/t+PHjvORLviSv9VqvxQMdHR1xxx13cO7cOc6fP8/zY5sXxDbPj21eENs8P7a538bGBgD33XffrVx11VVXXXXVVf8RqFx11VVXXXXVVVddddVV/6sdP36c13zN1+Rnf/ZnOX78OMeOHeNBD3oQr/Var8UDHR0dcccdd3D+/HnOnTvHC2Ob58c2L4htnh/bvCC2eaCNjQ2uuuqqq6666qr/UFSuuuqqq6666qqrrrrqqv+Vzpw58+C//Mu/5GVf9mV50IMexFu+5VvyUi/1UjzQ0dERd9xxB7fffjvL5RIA27wgtnlBbPP82OYFsc3zY5sX5uzZs8/gqquuuuqqq676j0Dlqquuuuqqq6666qqrrvpf66/+6q84ceIED3nIQzh+/DgAR0dH3HHHHdx+++0sl0vuZ5sXxDYviG1eENs8P7Z5QWzzgmxsbHDVVVddddVVV/2HonLVVVddddVVV1111VVX/a90zTXXPBjg4sWLPOQhD+H222/nb/7mb3hutnlhbPOC2Ob5sc0LYpsXxDbPj20ANjc3AfiHf/iH3+aqq6666qqrrvqPQOWqq6666qqrrrrqqquu+l/r4sWL3O/8+fM8N9u8ILZ5QWzzgtjmBbHN82ObF8Q2V1111VVXXXXVfxoqV1111VVXXXXVVVddddX/aidOnABguVxyP9u8MLZ5QWzz/NjmBbHNC2KbF8Q2D7SxsQHAfffddytXXXXVVVddddV/BCpXXXXVVVddddVVV1111f8611xzzYMBdnd3OX78OABHR0fY5oWxzQtimxfENi+IbV4Q2zw/trnqqquuuuqqq/5LULnqqquuuuqqq6666qqr/s+zzQtimxfENi+IbV4Q27wgtnl+NjY2ALjvvvtu5aqrrrrqqquu+o9C5aqrrrrqqquuuuqqq676X+fMmTMP5kVgmxfGNi+IbV4Q27wgtnlBbPOCbGxsAHD27Nlbueqqq6666qqr/qNQueqqq6666qqrrrrqqqv+17nmmmsefPHiRQBOnDgBwNHREQ9kmxfENi+IbV4Q27wgtnlBbPOC2AZgY2MDgPvuu+9Wrrrqqquuuuqq/yhUrrrqqquuuuqqq6666qr/U2zzgtjmhbHNC2KbF8Q2L4htXhDbXHXVVVddddVV/6moXHXVVVddddVVV1111VX/K+3u7nL8+HEAjo6OsM0LY5sXxDYviG1eENu8MLZ5QWzzQJubmwDcd999t3LVVVddddVVV/1HoXLVVVddddVVV1111VVX/a9z5syZB128eJEXhW1eENu8MLZ5QWzzgtjmBbHN87OxsQHA2bNnn8FVV1111VVXXfUfhcpVV1111VVXXXXVVVdd9b/WiRMnADg6OuK52eaFsc0LYpsXxjYviG1eENtcddVVV1111VX/pahcddVVV1111VVXXXXVVf/rXHPNNQ/mhbDNC2KbF8Y2L4htXhDbvCC2eWFss7m5CcB99913K1ddddVVV1111X8UKlddddVVV1111VVXXXXV/0q7u7scP34cgOVyCYBtXhDbvDC2eUFs88LY5gWxzQtim/ttbGwAcPbs2Vu56qqrrrrqqqv+o1C56qqrrrrqqquuuuqqq/7Xs41tXhDbvCC2eWFs84LY5oWxzQtim6uuuuqqq6666j8dwVVXXXXVVVddddVVV131v84111zz4IsXL3LixAkAjo6OeH5sY5sXxDYviG1s84LY5gWxjW1eENs8t83NTQDuu+++W7nqqquuuuqqq/6jEFx11VVXXXXVVVddddVV/+ucOXPmwbwQtrHNC2Ib27wgtnlBbGObF8Q2L4htbHPVVVddddVVV/2XoXLVVVddddVVV1111VVX/a91/PhxAJbLJfezzQtimxfGNi+MbV4Q27wwtnlBNjY2ALjvvvtu5aqrrrrqqquu+o9E5aqrrrrqqquuuuqqq676X2l3d5cHss0LY5sXxjYviG1eGNu8MLZ5QWyzsbEBwNmzZ2/lqquuuuqqq676j0Tlqquuuuqqq6666qqrrvpf55prrnnwxYsXuZ9tXhDbvDC2eWFs88LY5gWxzQtjG4DNzU0A7rvvvlu56qqrrrrqqqv+I1G56qqrrrrqqquuuuqqq/7XOnHiBABHR0c8N9u8MLZ5YWzzwtjmhbHNC2Kbq6666qqrrrrqvwSVq6666qqrrrrqqquuuup/lWuuuebBPNPx48cBODo64oFs88LY5oWxzQtjmxfENi+MbZ7b5uYmAPfdd9+tXHXVVVddddVV/5GoXHXVVVddddVVV1111VX/K+3u7vLcbPPC2OaFsc0LY5sXxjYvjG2en83NTQDOnj37DK666qqrrrrqqv9IVK666qqrrrrqqquuuuqq/1XOnDnzYJ6LbWzzgtjmX2KbF8Y2L4htXhjbvDC2ueqqq6666qqr/lNQueqqq6666qqrrrrqqqv+17l48SIAJ06cAODo6IgXxDYvjG1eGNu8MLZ5YWzzwthmc3MTgPvuu+9Wrrrqqquuuuqq/0hUrrrqqquuuuqqq6666qr/Va655poH8yKwzQtjmxfGNi+MbV4Y27wwtrnf5uYmAGfPnr2Vq6666qqrrrrqPxKVq6666qqrrrrqqquuuup/nd3dXY4fPw7A0dERD2Sbf4ltXhjbvDC2eWFs88LY5qqrrrrqqquu+i9B5aqrrrrqqquuuuqqq676X+XMmTMP4vmwzb/ENi+MbV4Y2/xLbPPC2Oa5bW5uAnDffffdylVXXXXVVVdd9R+J4Kqrrrrqqquuuuqqq676X+Uf/uEffuf48eOcOHECgKOjI2zzwtjGNi+MbV4Y27wwtrHNC2Ib21x11VVXXXXVVf+lqFx11VVXXXXVVVddddVV/6ucPXv21hMnTvCQhzwEANu8MLZ5YWzzwtjmX2KbF8Y2L8jm5iYA9913361cddVVV1111VX/0Qiuuuqqq6666qqrrrrqqv9V7rvvvlv/4R/+4bdf5mVeBoCjoyOeH9vY5oWxzQtjmxfGNrZ5QWxjmxfENhsbGwCcPXv2Vq666qqrrrrqqv9oBFddddVVV1111VVXXXXV/zo/8iM/8jknTpzg+bGNbV4Y29jmBbGNbV4Y27wwtnlhbAOwubkJwH333XcrV1111VVXXXXVfzSCq6666qqrrrrqqquuuup/nX/4h3/47X/4h3/4bZ7p9OnT2MY2L4xtbPPC2OaFsY1tXhjbvDC2ueqqq6666qqr/ktQjh8/zlVXXXXVVVddddVVV131v8999933jBd7sRd77RtvvPH4gx70IB784AfTdR2SODo64rnZ5oWxzb/ENi+MbV4Y2zy3m266iWuuuYY//dM//el/+Id/+B2uuuqqq6666qr/SJTjx49z1VVXXXXVVVddddVVV/3vc/bs2VuPjo4uHR4e7j7kIQ956a7rOHPmDA960IN48IMfTNd1SOLw8JB/iW1eGNv8S2zzwtjm+XnIQx7CiRMn+O3f/u3vufXWW/+aq6666qqrrrrqPxLl+PHjXHXVVVddddVVV1111VX/O916661//ad/+qc/89u//dvfc+utt/7N4eHh7kMe8pCX7rqOM2fO8KAHPYgHPehB9H0PwNHREQ9km3+JbV4Y2/xLbPOC3HTTTZw4cYI//dM//Zlbb731r7nqqquuuuqqq/4joQc96EFcddVVV1111VVXXXXVVf93XHPNNQ8+c+bMg1/ndV7nvV7ndV7nvXmAw8NDzp49y6233srZs2d5YWzzL7HNC2Obf8nrvu7rcs011/CZn/mZr/MP//APv81VV1111VVXXfUfCT3oQQ/iqquuuuqqq6666qqrrvq/6ZprrnnwmTNnHvxiL/Zir/U6r/M6733NNdc8mGc6PDzk7Nmz3HrrrZw9e5YHss0LY5t/iW1eGNsAvOVbviWbm5t8yId8yEPuu+++W7nqqquuuuqqq/4joQc96EFcddVVV1111VVXXXXVVf8/XHPNNQ9+7dd+7fd6ndd5nfe+5pprHswzHR4ecvbsWZ7+9Kdz9uxZXhjb/Ets88LY5n5v+ZZvyebmJh/yIR/ykPvuu+9Wrrrqqquuuuqq/0joQQ96EFddddVVV1111VVXXXXV/z/XXHPNg1/7tV/7vV78xV/8tV/sxV7stXmmw8NDzp49y9Of/nTOnj3L/WzzL7HNv8Q2D/Qu7/IuALzd272duOqqq6666qqr/qOhBz3oQVx11VVXXXXVVVddddVV/79dc801D37t137t93rxF3/x136xF3ux1+aZDg8POXv2LPfddx9Pf/rTeWFs88LY5vl5l3d5FwDe7u3eTlx11VVXXXXVVf/R0IMe9CCuuuqqq6666qqrrrrqqqvud8011zz4tV/7td/rxV/8xV/7xV7sxV6bZzo8POS+++7j7NmzPP3pT+d+tvmX2Ob52dzc5C3f8i257777bv2QD/mQh3DVVVddddVVV/1Hoxw/fpyrrrrqqquuuuqqq6666qr7HR4e7v7DP/zD7/zWb/3W9/z2b//29xweHu5K4sYbb3zwiRMnuPHGG3nIQx7C8ePH6bqO3d1dXhjbvCAnTpzgoQ99KLfeeutf/9Zv/db3cNVVV1111VVX/UejHD9+nKuuuuqqq6666qqrrrrqqufn8PBw9x/+4R9+57d+67e+57d/+7e/59Zbb/2bzc3N4zfeeOODT5w4wU033cRDHvIQTpw4Qd/37O7ucj/b/EuuueYabrrpJv7hH/7ht//0T//0Z7jqqquuuuqqq/6jUbnqqquuuuqqq6666qqrrnoR3Hfffbfed9993/1bv/Vb333NNdc8+MVe7MVe+3Ve53Xe68Ve7MVe+yEPeQgPechDePEXf3EODw952tOextOf/nReGNtcddVVV1111VX/6ahcddVVV1111VVXXXXVVVf9K91333233nfffd/9W7/1W999zTXXPPjFXuzFXvt1Xud13uvFXuzFXntzc5NrrrmGl3iJl+Dw8JCnPe1pPP3pT+d+trnf5uYmAPfdd9+tXHXVVVddddVV/xmoXHXVVVddddVVV1111VX/aa655poH33fffbfyf9h9991363333ffdv/Vbv/Xd11xzzYNf7MVe7LVf53Ve571e7MVe7LU3Nze55ppreOVXfmUODw952tOextOe9jQODw8B2NzcBODs2bPP4Kqrrrrqqquu+s9A5aqrrrrqqquuuuqqq676D3XNNdc8+LVf+7Xf63Ve53Xe+5prrnnwb/3Wb333b/3Wb33PP/zDP/w2/8fdd999t953333f/Vu/9Vvffc011zz4xV7sxV77xV7sxV7rdV7ndd57c3OTl3iJl+AlXuIlODw85GlPexqbm5tcddVVV1111VX/qdCDHvQgrrrqqquuuuqqq6666qp/n2uuuebBr/3ar/1e7/RO7/TZPNPu7i6XLl3iQQ96ED/yIz/y2T/6oz/6Ofw/dc011zz4xV7sxV77xV7sxV7rdV7ndd6b5/KZn/mZ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VVddddVVV1111VX/wx0/fpxP+7RP44GOjo649dZbOXfuHGfPngXANv8etvm3sM1VV1111VVXXXXV/1BUrrrqqquuuuqqq6666n+oa6655sEAx44dA+Do6Ihbb72VZzzjGRwdHQFgm38P2/xb2eaqq6666qqrrrrqfzgqV1111VVXXXXVVVdd9b/AT/zET3A/2/x72ebfyjb/GpubmwDcd999t3LVVVddddVVV131X4vKVVddddVVV1111VVX/Q93dHSEbf4j2Obfyjb/Wra56qqrrrrqqquu+m9E5aqrrrrqqquuuuqqq/6Hs82/h23+PWzzr2Wbq6666qqrrrrqqv8BqFx11VVXXXXVVVddddX/Ubb5t7LNv4VtHmhzcxOA++6771auuuqqq6666qqr/utRueqqq6666qqrrrrqqv9DbPPvYZt/C9tcddVVV1111VVX/Q9E5aqrrrrqqquuuuqqq/4Huuaaax7MMx0dHfHC2Obfyzb/FrZ5YTY3NwE4e/bsrVx11VVXXXXVVVf916Ny1VVXXXXVVVddddVV/wvZ5j+Cbf6tbHPVVVddddVVV131PxyVq6666qqrrrrqqquu+l/ENv8RbPNvZZsX1ebmJgD33XffrVx11VVXXXXVVVf916Ny1VVXXXXVVVddddVV/wvY5t/LNv8etvnXss1VV1111VVXXXXVfyMqV1111VVXXXXVVVdd9X+cbf49bPNvYZurrrrqqquuuuqq/2ZUrrrqqquuuuqqq6666n+gM2fOPJhnOjw85N/CNv8etvm3sM39Njc3Abjvvvtu5aqrrrrqqquuuuq/HpWrrrrqqquuuuqqq676P8Q2/162+bewzVVXXXXVVVddddX/MFSuuuqqq6666qqrrrrq/wDb/HvZ5t/CNi/I5uYmV1111VVXXXXVVf+NqFx11VVXXXXVVVddddX/Urb5j2CbfyvbvCjOnj37DK666qqrrrrqqqv+61G56qqrrrrqqquuuuqq/2Vs8x/BNv9Wtrnqqquuuuqqq676X4DKVVddddVVV1111VVX/Q90zTXXPJgHsM1/FNv8W9nmqquuuuqqq6666n8RKlddddVVV1111VVXXfU/3OHhIf8RbPNvZZt/i83NTQDuu+++W7nqqquuuuqqq676r0flqquuuuqqq6666qqr/o+zzb+Hbf4tbHPVVVddddVVV13134zKVVddddVVV1111VVX/R9lm38P2/xb2OZ+m5ubAJw9e/ZWrrrqqquuuuqqq/7rUbnqqquuuuqqq6666qr/Q2zz72WbfyvbXHXVVVddddVVV/0PQuWqq6666qqrrrrqqqv+D7DNv5dt/q1s8/xsbm5y1VVXXXXVVVdd9d+IylVXXXXVVVddddVVV/0PdObMmQfxTIeHh7wgtvmPYJt/K9v8S+67775bueqqq6666qqrrvqvR+Wqq6666qqrrrrqqqv+F7LNfwTb/FvZ5qqrrrrqqquuuup/OCpXXXXVVVddddVVV131v4ht/iPY5t/DNv+Szc1Nrrrqqquuuuqqq/6bUbnqqquuuuqqq6666qr/gc6ePfsMHsA2/xFs8+9hm3+t++6771auuuqqq6666qqr/ntQueqqq6666qqrrrrqqv+B7rvvvlv5D2abfw/bXHXVVVddddVVV/0vQ+Wqq6666qqrrrrqqqv+j7PNv4dt/i02NjYAOHv27K1cddVVV1111VVX/fegctVVV1111VVXXXXVVf8DnT179lae6fDwkH8L2/x72ebfwjZXXXXVVVddddVV/wNQueqqq6666qqrrrrqqv+B7rvvvlv5N7LNv5dt/q1sA7C1tQXAfffddytXXXXVVVddddVV/z0Irrrqqquuuuqqq6666n+of/iHf/htgAc/+ME85CEP4UVhm38v2/xb2MY2V1111VVXXXXVVf+DULnqqquuuuqqq6666qr/oT7zMz/zdb7pm77p6Q95yEMe/JCHPIQXe7EXA+DpT386Z8+e5b777uN+tvn3ss2/lW2uuuqqq6666qqr/geiHD9+nKuuuuqqq6666qqrrvqf6s/+7M9+5tZbb/2bzc3N4zfeeOOD+77nmmuu4SEPeQgPechD6LoOgMPDQ/49bPNvZZvn56abbuLaa6/lT//0T3/6H/7hH36Hq6666qqrrrrqqv96VK666qqrrrrqqquuuup/sPvuu+/W++6777t/67d+67uvueaaB7/Yi73Ya7/Yi73Ya73O67zOe29ubvLiL/7iABweHnLffffx9Kc/nfvuu48XlW3+PWxz1VVXXXXVVVdd9T8Y5fjx41x11VVXXXXVVVddddX/BoeHh7u33nrrX//pn/7pz/z2b//29/zpn/7pzwBsbm4eP3HixPETJ07wkIc8hIc85CGcOHGCvu/Z3d3lBbHNv5Vt/iUPfehDOXHiBL/927/9Pbfeeutfc9VVV1111VVXXfVfj8pVV1111VVXXXXVVVf9L3Tffffdet999936D//wD78NcM011zz4tV/7td/rxV/8xV/7xV7sxV77IQ95CA95yEN48Rd/ce677z7uu+8+nv70p3M/2/xb2eaqq6666qqrrrrqfwnK8ePHueqqq6666qqrrrrqqv/tDg8Pd//hH/7hd37rt37re377t3/7e2699da/2dzcPH7jjTc++MSJE9x00028+Iu/OA95yEPoug6Aw8ND/rVs86K66aabOHHiBH/6p3/6M7feeutfc9VVV1111VVXXfVfj8pVV1111VVXXXXVVVf9H3Pffffdet999333b/3Wb333Nddc8+AXe7EXe+0Xe7EXe63XeZ3Xee/NzU1e4iVeAoDDw0Oe9rSncd9993HffffxL7HNv8bm5iYA9913361cddVVV1111VVX/fegHD9+nKuuuuqqq6666qqrrvq/6vDwcPfWW2/96z/90z/9md/+7d/+nltvvfVvDg8Pdx/ykIe8dN/3XHvttTz0oQ/loQ99KCdOnGAYBg4PD3lutvnXeuhDH8rW1ha/9Vu/9T1nz569lauuuuqqq6666qr/euhBD3oQV1111VVXXXXVVVdd9f/NNddc8+AzZ8486HVe53Xe+8Ve7MVe+5prrnkwz3R4eMh9993Hvffey9Of/nRs82/xVm/1VmxubvIhH/IhD7nvvvtu5aqrrrrqqquuuuq/HpWrrrrqqquuuuqqq676f+i+++679b777rv1H/7hH34H4Jprrnnwa7/2a7/Xi7/4i7/2i73Yi732Qx7yEB7ykIfwEi/xEhweHvK0pz2Ne++9l8PDQ14Utrnqqquuuuqqq676HwA96EEP4qqrrrrqqquuuuqqq656tmuuuebBL/ZiL/bar/M6r/NeL/ZiL/baPMDh4SFPe9rTuPfee7nvvvt4fmwD8NZv/dZsbm7yIR/yIQ+57777buWqq6666qqrrrrqvx560IMexFVXXXXVVVddddVVV/17XHPNNQ9+7dd+7ff6h3/4h9/5h3/4h9/m/5BrrrnmwS/2Yi/2Wi/2Yi/22q/zOq/z3jzA4eEhT3va07j33nu57777ALDN/d7t3d4NgLd7u7cTV1111VVXXXXVVf890IMe9CCuuuqqq6666qqrrrrqX+vFXuzFXvvFXuzFXuud3umdPptnuu+++279h3/4h9/++q//+vfh/6BrrrnmwS/2Yi/22i/2Yi/2Wq/zOq/z3jzA4eEh9957L0972tO49957AXi3d3s3AN7u7d5OXHXVVVddddVVV/33QA960IO46qqrrrrqqquuuuqqf8k111zz4Nd+7dd+r2uuuebBr/M6r/PePNPu7i5/+7d/y+7uLm/5lm/Jb/3Wb33313/9178P/8edOXPmQddcc81DXuzFXuy1XvzFX/y1X+zFXuy1eabDw0PuvfdeHvrQhwLwdm/3duKqq6666qqrrrrqvweVq6666qqrrrrqqquuegGuueaaB7/2a7/2e734i7/4a7/Yi73YawPs7u7yN3/zN1y6dInf/d3f5X4PetCDALjmmmsezP8DZ8+efcbZs2ef8Q//8A+//aM/+qOfc8011zz4tV/7td/rxV/8xV/7xV7sxV77oQ99KAD/8A//8DtcddVVV1111VVX/fehctVVV1111VVXXXXVVQ9wzTXXPPi1X/u13+t1Xud13vuaa655MMDu7i6/+7u/yzOe8Qye8YxncNXzuu+++2790R/90c/50R/90c+55pprHvxiL/Zir33mzJkH/eiP/ujncNVVV1111VVXXfXfh8pVV1111VVXXXXVVf+vXXPNNQ8+c+bMg1/sxV7std7pnd7ps3mm3d1dfvd3f5e//du/ZXd3l3/JpUuXADhz5syD+X/uvvvuu/W+++77bq666qqrrrrqqqv++1G56qqrrrrqqquuuur/nWuuuebBr/3ar/1eL/7iL/7aL/ZiL/baPNPu7i5/+7d/y+/+7u/yopIEwPHjx7nqqquuuuqqq6666n8cKlddddVVV1111VVX/b9wzTXXPPi1X/u13+vFX/zFX/vFXuzFXhtgd3eX3/3d3wXgd3/3d3lRSOJ+D3rQg7jlllt4zdd8Te53zTXXPJirrrrqqquuuuqqq/6noHLVVVddddVVV1111f9Z11xzzYNf+7Vf+71e53Ve572vueaaBwPs7u7yu7/7uzzjGc/gGc94Bv8SSdzv2LFjvORLviTHjx/nJV/yJXmgw8NDNjc3ueqqq6666qqrrrrqfxQqV1111VVXXXXVVVf9n3HNNdc8+MVe7MVe+8yZMw96p3d6p8/mmXZ3d/nd3/1d/vZv/5bd3V3+JZK437Fjx3jJl3xJHvSgB/GgBz2IBzo8POTpT386T3/60wF4i7d4C+67775bueqqq6666qqrrrrqfwoqV1111VVXXXXVVVf9r3bNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVem2d6xjOewTOe8Qx+93d/l3+JJB7o2LFjvORLviQv9VIvxbFjx3ig++67j/vuu4+///u/54E2Nze56qqrrrrqqquuuup/HCpXXXXVVVddddVVV/2vc8011zz4tV/7td/rxV/8xV/7xV7sxV4bYHd3l9/93d9ld3eXv/3bv+VfIon7HTt2jOPHj3PLLbfwmq/5mjzQ4eEhT3/60zk6OuLpT386ALa56qqrrrrqqquuuup/BSpXXXXVVVddddVVV/2vcM011zz4tV/7td/rnd7pnT6bZ9rd3eV3f/d3ecYznsEznvEMXhhJPNCxY8d4yZd8SR70oAfxoAc9iAc6PDzk6U9/OmfPnuW+++7jfra56qqrrrrqqquuuup/FSpXXXXVVVddddVVV/2PdM011zz4tV/7td8L4J3e6Z0+m2fa3d3lb//2b/nbv/1bdnd3eWEk8UDHjh3jJV/yJXnQgx7Egx70IB7o8PCQpz/96dx6660cHh7yQLa56qqrrrrqqquuuup/JSpXXXXVVVddddVVV/2P8jqv8zrv/Tqv8zrv9WIv9mKvDbC7u8sznvEMnvGMZ/C7v/u7vDCSeG7Hjh3jJV/yJXnN13xNHujw8JDDw0Puu+8+/uEf/oEXxDZXXXXVVVddddVVV/2vReWqq6666qqrrrrqqv8xXuzFXuy1X+d1Xue9brzxxtf+3d/9XZ7xjGfwjGc8gxdGEg907NgxXvIlXxKA13zN1+SBDg8PefrTn87Zs2e57777eGFsc9VVV1111VVXXXXV/3pUrrrqqquuuuqqq676H+Oaa6558Iu92Iu99t/8zd/wu7/7u7wgknigY8eO8ZIv+ZI86EEP4kEPehAPdHh4yNOf/nTOnj3Lfffdx4vCNlddddVVV1111VVX/Z9A5aqrrrrqqquuuuqq/zHOnDnzIIBLly7xQJJ4bseOHeMlX/IleamXeimOHTvGAx0eHvL0pz+df/iHf+BfwzZXXXXVVVddddVVV/2fQuWqq6666qqrrrrqqv8xrrnmmgcD7O7uIonn9qAHPYhbbrmF13zN1+SBDg8PefrTnw7AP/zDP/CvZZurrrrqqquuuuqqq/5PonLVVVddddVVV1111f84kgA4duwYL/mSL8nx48d5yZd8SR7o8PCQpz/96Zw9e5b77ruPfyvb/EfY3NwE4OzZs7dy1VVXXXXVVVddddX/FFSuuuqqq6666qqrrvof5yVf8iV5yZd8SR70oAfxQIeHhzz96U/n6U9/OoeHh0ji38o2V1111VVXXXXVVVf9n0flqquuuuqqq6666qr/cR70oAdxv/vuu4/77ruPv//7v+e52QZAEv8atrnqqquuuuqqq6666v8FKlddddVVV1111VVX/Y9xzTXXPBjg6U9/Ovfddx9Pf/rTeVHYBkASL4xtrrrqqquuuuqqq676f4XKVVddddVVV1111VX/4zz96U/nvvvu41/LNveTxP1sc9VVV1111VVXXXXV/0tUrrrqqquuuuqqq676P8k2V1111VVXXXXVVVf9v0flqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqqv+z5HE82Obq6666qqrrrrqqqv+X6Fy1VVXXXXVVVddddX/KZJ4QSQBYJv/aJubmwDcd999t3LVVVddddVVV1111f8UBFddddVVV1111VVX/Y9x33333QqwubnJv5YkJPGikIQkrrrqqquuuuqqq676P4/KVVddddVVV1111VX/60ni30ISALa56qqrrrrqqquuuur/JCpXXXXVVVddddVVV/2vJYn/CJIAsM1VV1111VVXXXXVVf+nULnqqquuuuqqq6666n8lSfxHkwSAba666qqrrrrqqquu+j+BylVXXXXVVVddddVV/6tI4j+bJGxz1VVXXXXVVVddddX/elSuuuqqq6666qqrrvpfQxL/VSQBYJurrrrqqquuuuqqq/7XonLVVVddddVVV1111f94kvjvIgkA21x11VVXXXXVVVdd9b8Olauuuuqqq6666qqr/keTxP8EkgCwzVVXXXXVVVddddVV/2sQXHXVVVddddVVV131P5Yk/qeRxFVXXXXVVVddddVV/2tQueqqq6666qqrrrrqf4z77rvvVoDNzU0k8T+VJABsc9VVV1111VVXXXXV/2hUrrrqqquuuuqqq6666t9IEgC22dzcBOC+++67lauuuuqqq6666qqr/qegctVVV1111VVXXXXVVf9Okrjqqquuuuqqq6666n8kKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq676D7C5uQnA2bNnn8FVV1111VVXXXXVVf9TEFx11VVXXXXVVVdd9T/G2bNnnwFwzTXXcNVVV1111VVXXXXVVf8BqFx11VVXXXXVVVdd9T/GP/zDP/z2P/zDP/z2i73Yi732m7/5m3N4eMh9993H2bNnue+++7jqqquuuuqqq6666qp/JSpXXXXVVVddddVVV/2Pcd999936Iz/yI5/zTu/0TrzYi73Ya29ubnLNNdcAcHh4yH333cett97Kfffdx/Mjif8otrnqqquuuuqqq6666n89KlddddVVV1111VVX/Y/yD//wD7/9mZ/5mb99zTXXPPjFXuzFXvvFXuzFXut1Xud13ntzc5OHPOQhPOQhD+Hw8JCzZ89y3333ceutt/KfQRLPzTZXXXXVVVddddVVV/2vQuWqq6666qqrrrrqqv+R7rvvvlvvu+++7/6t3/qt7/7RH/3Rzzlz5syDXuzFXuy1X/zFX/y1X+zFXuy1Nzc3efCDH8yLvdiLcXh4yNmzZ7nvvvs4e/Ys/1kk8UC2ueqqq6666qqrrrrqfzQqV1111VVXXXXVVVf9j3fffffdet999936D//wD7/zoz/6o59zzTXXPPjFXuzFXvt1Xud13uvFXuzFXntzc5NrrrmGF3uxF+Pw8JCzZ8/y9Kc/nbNnz/KfSRJXXXXVVVddddVVV/2PRuWqq6666qqrrrrqqv917rvvvlvvu+++7/6t3/qt777mmmse/GIv9mKv/WIv9mKv9Tqv8zrvvbm5yebmJg9+8IM5PDzk7Nmz3Hfffdx66638Z5LEVVddddVVV1111VX/41C56qqrrrrqqquuuup/tfvuu+/W++6777t/67d+67t/9Ed/9HNs+3Ve53Xe+8Vf/MVf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6qqrrrrqqqv+D5HECyOJf4kk/iWSuOqqq6666qqrrrrqqv8FqFx11VVXXXXVVVf9LyGJF0YSL4wk/iWS+JdI4gU5c+bMg7nqqquuuuqqq6666qr/OQiuuuqqq6666qqr/ge57777bgXY3NzkgSTxwkjihZHEv0QSL4wkJHHVVVddddVVV1111VX/i1C56qqrrrrqqquu+h9OEi+MJF4YSbwwkviXSOKqq6666qqrrrrqqqv+FyK46qqrrrrqqquu+h/k7NmztwJsbm4CIIkXRhIvjCReGEn8SyTxLzk8POSqq6666qqrrrrqqqv+B6Jy1VVXXXXVVVdd9b+UJF4YSbwwknhhJPEvkcRVV1111VVXXXXVVVf9D0blqquuuuqqq6666n8oSbwgknhhJPHCSOKFkcQLI4mrrrrqqquuuuqqq676X4Dgqquuuuqqq6666n+Q++6771aAra0t/q0k8cJI4gWRhCReGEm8INdcc82Dueqqq6666qqrrrrqqv85qFx11VVXXXXVVVf9LyOJF0QSL4wkXhBJvDCSuOqqq6666qqrrrrqqv9lCK666qqrrrrqqqv+B7nvvvtuBdjc3OT5kcQLIokXRBKSeEEk8cJI4oU5Ojriqquuuuqqq6666qqr/geictVVV1111VVXXfW/hCReEEm8IJJ4YSTxgkjihZHEVVddddVVV1111VVX/Q9G5aqrrrrqqquuuup/AUm8IJJ4QSTxgkjihZHECyOJq6666qqrrrrqqquu+h+O4Kqrrrrqqquuuup/kLNnzz4DYHNzk/tJ4gWRxAsiiRdEEi+IJCTxgkhCEi/INddc82Cuuuqqq6666qqrrrrqfwYqV1111VVXXXXVVf+DSeIFkcQLIokXRBIviCReGElcddVVV1111VVXXXXV/yJUrrrqqquuuuqqq/4Hue+++24F2Nzc5IWRxAsiiRdEEi+IJF4QSbwwkrjqqquuuuqqq6666qr/gahcddVVV1111VVX/Q8liedHEi+IJF4QSbwgknhBJPGCSALg6OiIq6666qqrrrrqqquu+h+IylVXXXXVVVddddX/EZJ4QSTx/EjiBZHECyKJq6666qqrrrrqqquu+l+A4Kqrrrrqqquuuup/kLNnz94KsLm5yfMjiedHEi+IJJ4fSbwgknhBJPHCnDlz5sFcddVVV1111VVXXXXV/wxUrrrqqquuuuqqq/6XkMTzI4nnRxIviCSeH0m8IJK46qqrrrrqqquuuuqq/2WoXHXVVVddddVVV/0vIInnRxLPjyReEEk8P5J4QSTxgkjiqquuuuqqq6666qqr/oeictVVV1111VVXXfU/yH333XcrwObmJveTxPMjiedHEi+IJJ4fSTw/knhBJHG/o6Mjrrrqqquuuuqqq6666n8gKlddddVVV1111VX/g0ni+ZHE8yOJ50cSz48kXhBJPD+SuOqqq6666qqrrrrqqv8lCK666qqrrrrqqqv+h7nvvvtuBdja2uL5kcTzI4nnRxLPjySeH0lI4vmRxFVXXXXVVVddddVVV/0vQnDVVVddddVVV131P9SLvdiLcebMGR5IEs+PJJ4fSTw/knh+JPH8SEISz48kHuiaa655MFddddVVV1111VVXXfU/A5Wrrrrqqquuuuqq/2E+8zM/87W/+Zu/+dYHP/jBPPjBD+bw8JCzZ89y9uxZDg8POXv2LA8kiedHEs+PJJ4fSTw/knh+JHHVVVddddVVV1111VX/w1G56qqrrrrqqquu+h/oMz/zM1/nxV7sxV7rxV/8xV/7xV7sxV57c3OTBz/4wQAcHh5y9uxZbr31Vs6dO8fzI4nnRxLPTRLPjySeH0lcddVVV1111VVXXXXV/xJUrrrqqquuuuqqq/6HOXv27DPOnj37jH/4h3/47R/90R/9nGuuuebBL/ZiL/ZaL/ZiL/bar/M6r/Pem5ubbG5u8uAHP5jDw0POnj3L2bNnOXv2LEdHR0jiuUni+ZHE8yOJ50cSz89yueSqq6666qqrrrrqqqv+B6Jy1VVXXXXVVVdd9T/cfffdd+t9991362/91m99z4/+6I9+zpkzZx78Yi/2Yq/14i/+4q/9Yi/2Yq+9ubnJgx/8YACOjo44e/Ysz3jGMzh79iwAknh+JPH8SOK5SeL5kcRVV1111VVXXXXVVVf9D0blqquuuuqqq6666n+R++6779b77rvv1n/4h3/47R/90R/9nGuuuebBL/ZiL/baL/ZiL/Zar/M6r/PeGxsbPOhBD+JBD3oQR0dHnD17lnPnznH27FmOjo64nySemySeH0k8P5K46qqrrrrqqquuuuqq/+Eox48f56qrrrrqqquuuup/q8PDw91bb731r//0T//0Z377t3/7e/70T//0p++7775bJXHjjTc++Pjx49xwww08/OEP50EPehDHjh1jmiaOjo54IEk8N0lI4rlJQhIPdOzYMa6//noAnv70p//1P/zDP/wOV1111VVXXXXVVVdd9d8PPehBD+Kqq6666qqrrrrq/6JrrrnmwS/2Yi/22i/2Yi/2Wq/zOq/z3jzA0dER586d4+zZs5w/f56joyMeSBLPjySemyRuvvlmXvqlXxqAr//6r3+f3/qt3/purrrqqquuuuqqq6666r8fetCDHsRVV1111VVXXXXVf6Rrrrnmwffdd9+t/A9yzTXXPPjMmTMPfrEXe7HXevEXf/HXfrEXe7HX5gGOjo44d+4ct912G+fPn+e5SeL5kQTAqVOneNVXfVUAvv7rv/59fuu3fuu7ueqqq6666qqrrrrqqv9+6EEPehBXXXXVVVddddVV/x7XXHPNg1/sxV7stc+cOfOgd3qnd/rs++6779Yf/dEf/Zzf+q3f+m7+hzpz5syDXvzFX/x1XuzFXuy1Xud1Xue9eYCjoyPOnTvH+fPnOXfuHMvlkucmiQc6deoUr/qqrwrAZ37mZ77OP/zDP/w2V1111VVXXXXVVVdd9d8PPehBD+Kqq6666qqrrrrqX+uaa6558Gu/9mu/14u/+Iu/9ou92Iu9Ns/H273d24n/Ba655poHnzlz5sEv9mIv9lov/uIv/tov9mIv9to8wNHREefPn+e2227j/PnzSOK5nT59mld5lVcB4EM+5EMect99993KVVddddVVV1111VVX/fdDD3rQg7jqqquuuuqqq656UVxzzTUPfu3Xfu33ep3XeZ33vuaaax7MM+3u7vI3f/M3/M3f/A0PetCDeKu3eisA3u7t3k78L3TNNdc8+MVe7MVe+8Ve7MVe63Ve53Xemwc4Ojri/PnznD9/nvPnz3N0dIQkTp06xau8yqsA8HZv93biqquuuuqqq6666qqr/mdAD3rQg7jqqquuuuqqq656fq655poHv/Zrv/Z7XXPNNQ9+ndd5nffmmXZ3d/mbv/kbAH7nd36HB3qrt3orXuqlXgqAD/mQD3nIfffddyv/i505c+ZB11xzzUNe7MVe7LVe/MVf/LVf7MVe7LV5gKOjI86fP89yueSRj3wkAG/3dm8nrrrqqquuuuqqq6666n8GKlddddVVV1111VUPcM011zz4tV/7td/rxV/8xV/7xV7sxV6bZ9rd3eVv/uZvuPXWW3nGM57BC/KgBz2I/0vOnj37jLNnzz7jH/7hH377R3/0Rz/nmmuuefCLvdiLvdaLvdiLvfbrvM7rvPfGxgYbGxvc77777ruVq6666qqrrrrqqquu+p+DylVXXXXVVVdd9f/aNddc8+AXe7EXe+0zZ8486J3e6Z0+mwe49dZbecYznsHv/M7v8KI6fvw49ztz5syD77vvvlv5P+S+++679b777rv1t37rt77nR3/0Rz/nzJkzD36xF3ux13rxF3/x1wb4+q//+vfhqquuuuqqq6666qqr/uegctVVV1111VVX/b9zzTXXPPi1X/u13+vFX/zFX/vFXuzFXptn2t3d5W/+5m+49dZbecYznsG/hiRe6qVeCoC/+Zu/4UEPehD/191333233nfffbf+wz/8w2//6I/+6Odw1VVXXXXVVVddddVV//NQueqqq6666qqr/l94sRd7sdd+sRd7sdd6p3d6p8/mAXZ3d/mbv/kb/vqv/5pLly7xryUJgOPHj/NSL/VSAFy6dImrrrrqqquuuuqqq6666n8EKlddddVVV1111f9J11xzzYNf+7Vf+71e/MVf/HVe7MVe7LV4pt3dXf76r/8aSfzO7/wO/xaSOH78OMeOHeNBD3oQr/Var8UDXbp0iUuXLnHNNdc8+B/+4R+46qqrrrrqqquuuuqqq/7bULnqqquuuuqqq/7PuOaaax782q/92u/1Oq/zOu99zTXXPJhn2t3d5a//+q95xjOewTOe8Qz+rU6cOMFLvuRL8uAHP5gHPehBPNDh4SEAm5ub3O/MmTMP4qqrrrrqqquuuuqqq67670Tlqquuuuqqq676X+uaa6558Gu/9mu/F8A7vdM7fTbPtLu7y6233sqtt97K7/zO7wAgiX+L48eP81Iv9VK81Eu9FMePH+eBDg8PefrTn87Tn/50jo6OeLEXezFe/MVfnGPHjnHVVVddddVVV1111VVX/Y9A5aqrrrrqqquu+l/lmmuuefBrv/Zrv9eLv/iLv86LvdiLvRbPtLu7y1//9V/zjGc8g1tvvRUASUjiX+P48eO81Eu9FMePH+elXuqleKDDw0Oe/vSnA/D3f//33E8SDySJS5cucdVVV1111VVXXXXVVVf9t6Ny1VVXXXXVVVf9r/BiL/Zir/25n/u5v8UD7O7u8td//df8zd/8Dbu7u9xPEv8ax48f56Ve6qV40IMexIMf/GAe6PDwkKc97Wncd999nD17ln+Na6655sFcddVVV1111VVXXXXVVf+dqFx11VVXXXXVVf/jvdiLvdhrv9M7vdNn7e7u8td//dcA/M7v/A7PTRIviuPHj/OgBz2I48eP81qv9Vo80OHhIYeHh9x77738/d//PQ8kiecmifsdHR0BcOzYMS5dusQ111zzYK666qqrrrrqqquuuuqq/05Urrrqqquuuuqq//Fe53Ve571e7MVe7LV/5md+hr/+67/mgSTxojh+/Dgv9VIvxYMe9CAe/OAH80CHh4c87WlP49577+W+++5DEs9NEs9NEg90eHgIwLFjx7h06RJXXXXVVVddddVVV1111X87KlddddVVV1111f94L/ZiL/baALfeeiv3k8S/5EEPehAPfvCDea3Xei2e2+HhIU972tN42tOexuHhIfeTxHOTxHOTxAsiiUuXLnHy5Emuuuqqq6666qqrrrrqqv9WVK666qqrrrrqqv/RXud1Xue9r7nmmgcD7O7uIokX5Pjx47zUS70UD3rQg3jwgx/MAx0eHvLUpz6Vw8NDnva0pyGJ/2xnzpx5MFddddVVV1111VVXXXXVfycqV1111VVXXXXV/2gv9mIv9loAf/M3f4Mkntvx48d5qZd6KV7qpV6K48eP80AHBwc87WlP47777uPee+/lXyKJ5yaJ5yaJ5yaJo6MjAI4dO8alS5e46qqrrrrqqquuuuqqq/7bUbnqqquuuuqqq/5He7EXe7HXBvjrv/5rAI4fP85LvdRLAfBar/VaPNDBwQGHh4fce++9/O3f/i2SeH4k8dwk8dwk8dwk8dwk8dwkcdVVV1111VVXXXXVVVf9t6Ny1VVXXXXVVVf9j3bNNdc8GODBD34wr/Var8WDH/xgHujg4ICnPe1p3Hvvvdx77738SyTxH0kS9zs8PATg2LFjXLp0iWuuuebBXHXVVVddddVVV1111VX/nahcddVVV1111VX/Y73O67zOe/NMr/Var8X97r33Xu655x6e9rSncXh4yPMjiReVJJ6bJJ6bJP61rrnmmgffd999t3LVVVddddVVV1111VVX/XegctVVV1111VVX/Y93cHDAU5/6VO69917uvfdeHkgSLypJPDdJPDdJPDdJPDdJPLfDw0M2Nzc5duwYV1111VVXXXXVVVddddV/O4Krrrrqqquuuup/rDNnzjwI4KlPfSp/+7d/y7333ssDSeL5kcR/Nkk8N0ncb29vD4AzZ848mKuuuuqqq6666qqrrrrqvwvBVVddddVVV131P9bZs2efAbC1tcVzk8TzI4nnRxLPTRLPTRLPTRL/EkkAHB0dAXDs2DGuuuqqq6666qqrrrrqqv92VK666qqrrrrqqv+x7rvvvlsBtra2+PeQxHOTxHOTxHOTxHOTxANJ4vm5dOkSV1111VVXXXXVVVddddV/K4Krrrrqqquuuup/HUk8P5L4zyaJF9WlS5e45pprHsxVV1111VVXXXXVVVdd9d+F4Kqrrrrqqquu+h/r7NmztwJsbm7ybyWJ5yaJ5yaJ5yaJB5LEc5PEAx0eHgJw7Ngxrrrqqquuuuqqq6666qr/dlSuuuqqq6666qr/VSTx/Eji30oSz00S/xJJPJAkjo6OADh27BgAZ86ceRBXXXXVVVddddVVV1111X8XKlddddVVV1111f9Y9913360AW1tb/FtI4rlJ4t9CEg8kiX/J3t4eV1111VVXXXXVVVddddV/K4Krrrrqqquuuup/tPvuu+9WgK2tLSTx/EjiuUniuUniuUniuUnigSTxL5HE83PNNdc8mKuuuuqqq6666qqrrrrqvwvBVVddddVVV131P9rZs2dvBdjc3OT5kcR/JEn8SyTxQJK43+HhIQDHjh3j0qVLXHXVVVddddVVV1111VX/rQiuuuqqq6666qr/FSTxopLEc5PEc5PEv0QSDySJB5LEAy2XSwCOHTsGwDXXXPNgrrrqqquuuuqqq6666qr/LgRXXXXVVVddddX/aPfdd9+tAJubmzw3SfxbSeK5SeKBJPHvsbe3x1VXXXXVVVddddVVV13134rKVVddddVVV131P9p99913K8DW1hYvCkk8N0n8SyTxL5HEA0nigSTx3M6cOfNgrrrqqquuuuqqq6666qr/LlSuuuqqq6666qr/lSTx3CTx3CTx3CTxL5HEA0nigSTxQJIAODw8BODYsWPs7e1x1VVXXXXVVVddddVVV/23onLVVVddddVVV/2Pdvbs2WcAbG5u8h9BEs9NEg8kiQeSxAsjiauuuuqqq6666qqrrrrqfyQqV1111VVXXXXV/2j33XffrQBbW1vcTxLPTRLPTRL/Ekn8a0niBTk6OgJgZ2cHSVxzzTUP5qqrrrrqqquuuuqqq67670Llqquuuuqqq676P0kSz00S/xJJPJAkHkgSDySJB5LE/S5dusRVV1111VVXXXXVVVdd9d+K4Kqrrrrqqquu+h/t7NmztwJsbm4CIInnJol/iSSemyQeSBIPJIkHksQDSeKBJAFwdHQEwLFjxwC45pprHsxVV1111VVXXXXVVVdd9d+BylVXXXXVVVdd9b+GJJ6bJJ6bJP4lkviPJInntre3x1VXXXXVVVddddVVV13134rgqquuuuqqq676H+2+++67FWBra4t/K0n8SyTxQJJ4IEk8kCRekKOjIwB2dnYAOHPmzIO56qqrrrrqqquuuuqqq/47EFx11VVXXXXVVf/j3XfffbcCbG5u8kCSeG6S+JdI4oEk8UCSeCBJPJAkHkgS95PEA+3t7XHVVVddddVVV1111VVX/bchuOqqq6666qqr/se77777bgXY2trihZHEc5PEA0ni30MSDySJf8k111zzYK666qqrrrrqqquuuuqq/w5Urrrqqquuuuqq/5Uk8S+RxL9EEg8kiQeSxAsiiQeSBMDR0REAx44dY29vj6uuuuqqq6666qqrrrrqvw2Vq6666qqrrrrqf7yzZ8/eCrC5uQmAJJ6bJP4lknggSTyQJB5IEg8kiRdEEvc7PDwEYGdnB4AzZ848iKuuuuqqq6666qqrrrrqvwPBVVddddVVV131P9599913K8C1117Ltddey4tCEg8kiX8PSTyQJO4niQeSxFVXXXXVVVddddVVV131PwKVq6666qqrrrrqf7x/+Id/+J1/+Id/+O0Xe7EXe+2HPvShHB4ecu+993Lfffdx7733cnR0xANJ4l8iiQeSxANJ4gWRxAsiiftJYm9vj6uuuuqqq6666qqrrrrqvw3l+PHjXHXVVVddddVV/7OdPXv2VkCHh4e7R0dHuzfeeOODT5w4wU033cSjH/1oHvrQh3LixAmGYeDw8BBJPJAkHkgSDySJB5LEA0nigSRxP0ncTxIAGxsbXH/99ezt7bG3t8dsNrv1T//0T3+Gq6666qqrrrrqqquuuuq/GpWrrrrqqquuuup/hd/6rd/67t/6rd/6boBrrrnmwS/2Yi/2Wi/2Yi/22q/zOq/z3pubmzzkIQ/hIQ95CIeHhxweHnLfffdx3333cd999/GvIYkHksQDSeJ+knh+jo6OANjZ2WFvb49rrrnmwVx11VVXXXXVVVddddVV/x2oXHXVVVddddVV/+vcd999t9533323/tZv/db3/OiP/ujnnDlz5sEv9mIv9lov/uIv/tov9mIv9tqbm5tcc801ABweHnLfffdx9uxZnv70pyOJB5LEi0oSL4gk7ieJq6666qqrrrrqqquuuup/BPSgBz2Iq6666qqrrrrq/45rrrnmwS/2Yi/22i/2Yi/2Wi/2Yi/22tdcc82DeYDDw0POnj3L05/+dM6dO8cDSeKBJHE/STyQJO4niftJ4vTp07zaq70ad9xxB49//OOptX7313/9178PV1111VVXXXXVVVddddV/NSpXXXXVVVddddX/Kffdd9+t991333f/1m/91ncDnDlz5kEv/uIv/jqv8zqv814v9mIv9tqbm5tsbm7y4Ac/mMPDQ46Ojrj11ls5Ojri7Nmz3E8SL4gk7ieJ53Z0dATAzs4ON910E/fccw9XXXXVVVddddVVV1111X8L9KAHPYirrrrqqquuuuo/3zXXXPPg137t136vH/3RH/0c/ptcc801Dz5z5syDX+zFXuy1XvzFX/y1X+zFXuy1eYDDw0POnj3LuXPneMYznsH9JHE/STyQJO4nCYCNjQ3e4A3egL29PQC+93u/931+67d+67u56qqrrrrqqquuuuqqq/6roQc96EFcddVVV1111VX/8a655poHnzlz5sEv9mIv9lrv9E7v9Nk802/91m9992/91m99zz/8wz/8Nv/Nrrnmmge/2Iu92Gu/2Iu92Gu9zuu8znvzXI6OjnjGM57B2bNnOXfuHACSuJ8k7ieJ+0niLd/yLbnfh3zIhzzkvvvuu5Wrrrrqqquuuuqqq6666r8aetCDHsRVV1111VVXXfUf45prrnnwa7/2a7/Xi7/4i7/Oi73Yi70Wz7S7uwvA8ePHAfjMz/zM1/mHf/iH3+Z/mGuuuebBL/ZiL/bar/M6r/NeL/ZiL/baPMDR0RHnzp3j7NmzHB0dcf78eR5IEveTxFu+5Vtyv7d7u7cTV1111VVXXXXVVVddddV/BypXXXXVVVddddW/2TXXXPPgM2fOPPjFXuzFXuud3umdPpsH2N3d5a//+q+59dZbufXWW3npl35p3vqt3xqAa6655sH/8A//wP80991336333Xffd//Wb/3Wd19zzTUPPnPmzINe53Ve572vueaaB7/Yi73Ya99yyy3ccsstABwdHXHu3DnOnTvH7bffzv0kAXB0dMTGxgZXXXXVVVddddVVV1111X8rKlddddVVV1111b/KNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22eaXd3l93dXZ7+9KfzO7/zOzy3137t1+Z+Z86ceRD/w91333233nfffbf+wz/8w+8AXHPNNQ9+sRd7sdd+sRd7sdd6ndd5nffe2Njglltu4ZZbbuHRj340R0dHnD9/nnPnznH+/Hnu91u/9VvfzVVXXXXVVVddddVVV13134XKVVddddVVV131Ql1zzTUPPnPmzINf7MVe7LXe6Z3e6bN5gN3dXf7qr/6KW2+9lVtvvRVJvCDHjx8H4O677+aaa655MP/L3Hfffbfed9993/1bv/Vb3/31X//173PNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVee2Njg9OnT/OoRz2Ko6MjNjY2ALjvvvtu5aqrrrrqqquuuuqqq67670Llqquuuuqqq656Htdcc82DX/u1X/u9XvzFX/y1X+zFXuy1eYBbb72Vpz/96fz1X/81u7u7AEhCEi/IS7/0SwPwpCc9CYBrrrnmwfwvd9999936oz/6o5/zoz/6o59z5syZB734i7/467zYi73Ya11zzTUPfrEXe7HXBviHf/iH3/6Hf/iH3+Gqq6666qqrrrrqqquu+u9C5aqrrrrqqquuuuzFXuzFXvvFXuzFXut1Xud13vuaa655MM+0u7vLX/3VX3Hrrbdy66238kCSeFE8+MEPBuDuu+9me3ub2WzG/yVnz559xm/91m9992/91m99N8A111zz4Bd7sRd7rd/6rd/6Hq666qqrrrrqqquuuuqq/05Urrrqqquuuur/qWuuuebBr/3ar/1eL/7iL/7aL/ZiL/baPMDu7i5/9Vd/xV//9V+zu7vLc5PEi+r48eO89Eu/NAB3330329vbnDlz5sH8H3bffffdet99993KVVddddVVV1111VVXXfXfjcpVV1111VVX/T9yzTXXPPi1X/u13+t1Xud13vuaa655MM+0u7vLX/3VX3Hrrbdy66238oJI4kVx/PhxXvqlX5qXfumX5vjx4wDs7+9zcHDA3XffzU033cRVV1111VVXXXXVVVddddV/ASpXXXXVVVdd9X/YNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe20eYHd3l7/6q7/ir//6r9nd3eWFkcQLc/z4cV76pV+aBz/4wTz4wQ/mgQ4ODtja2kIS97vmmmsezFVXXXXVVVddddVVV1111X8+KlddddVVV131f8w111zz4Nd+7dd+r9d5ndd572uuuebBPNPu7i5/9Vd/xe7uLn/913/Ni0ISL8jx48d56Zd+aV76pV+a48eP80AHBwc89alP5d577+Xw8JC3eZu3AUASBwcHAFxzzTUPvu+++27lqquuuuqqq6666qqrrrrqPw+Vq6666qqrrvo/4nVe53Xe+8M//MO/iwfY3d3lr/7qr/jrv/5rdnd3eVFI4vk5fvw4L/3SL82DH/xgHvzgB/NABwcH3HvvvRwcHPC3f/u3PJAkALa2tnigM2fOPPi+++67lauuuuqqq6666qqrrrrqqv88VK666qqrrrrq/4DXeZ3Xee93eqd3+uzd3V3+6q/+CoDf/u3f5l9DEs/t+PHjvPRLvzQv/dIvzfHjx3mgg4MDnvrUp3LPPfdw7733AiCJ5+fg4ICtrS22trY4ODjgqquuuuqqq6666qqrrrrqvwiVq6666qqrrvo/4B3f8R0/68yZMw/6ru/6Lm699Vb+tSQBcPz4cV76pV+aBz/4wTz4wQ/mgQ4ODjg4OOCee+7hb//2b3luknhukgA4PDxka2uL7e1tDg8POTg44JprrnnwP/zDP3DVVVddddVVV1111VVXXfWfiMpVV1111VVX/S/3Oq/zOu99zTXXPBjg1ltv5V9DEsePH+elX/qleemXfmmOHz/OAx0cHPCUpzyFe++9l3vuuYf7SeJfIokXZH9/nzNnzjyIq6666qqrrrrqqquuuuqq/1xUrrrqqquuuup/uRd7sRd7LYC//uu/5kVx/PhxXuZlXobjx4/z0i/90jzQwcEBBwcH3HPPPfz1X/81knhuknhuknhhDg4OuPbaa9ne3uaee+4B4JprrnkwV1111VVXXXXVVVddddVV/7moXHXVVVddddX/cq/zOq/z3gC/9Vu/xQty/PhxXvqlX5qXeZmX4fjx4zzQwcEBT3nKU7jnnnu45557uJ8k/q0k8UCHh4cAbG1tIYnDw0OuueaaB3PVVVddddVVV1111VVXXfWfi8pVV1111VVX/S/2Oq/zOu8NcOutt7K7u8v9jh8/zku/9Etz4sQJXvqlX5oHOjg44ODggLvvvpu//uu/RhIvKkk8N0n8Sw4ODgDY3t4GYH9/n77vueqqq6666qqrrrrqqquu+k9G5aqrrrrqqqv+F3ud13md9wL4q7/6K44fP85Lv/RL8zIv8zIcP36cBzo4OODJT34y99xzD/fccw//Ekm8KCTx3CTx3I6OjgDY2toC4ODggEc96lEP5qqrrrrqqquuuuqqq6666j8Xlauuuuqqq676X+zFXuzFXhvgbd7mbXigg4MD9vf3ueeee/irv/orACTx7yGJ/wiSODw85Kqrrrrqqquuuuqqq6666r8Alauuuuqqq676X+rFXuzFXpsHODg44ElPehL33HMP99xzDy8KSTw3STw3STw3STw3STw3SRwcHACwtbXF/a655poHc9VVV1111VVXXXXVVVdd9Z+LylVXXXXVVVf9L3dwcMCP/MiPACCJ50cS/xNsbW0BcHBwAMA111zz4Pvuu+9Wrrrqqquuuuqqq6666qqr/nMQXHXVVVddddX/U5J4bpJ4bpJ4bpJ4bpJ4bpIAODw85H7b29tIAuCaa655MFddddVVV1111VVXXXXVVf95CK666qqrrrrqf6mzZ8/eyotAEv8dJPFA9957LwBbW1scHBwAcObMmQdz1VVXXXXVVVddddVVV131n4fKVVddddVVV/0vdd99990KsLW1BYAkXlSSeG6SeG6SeG6SeG6S+Nc6ODjgzJkzD+Kqq6666qqrrrrqqquuuuo/D8FVV1111VVX/S/2D//wD78NcP311/P8SOK/gySe2+HhIQBbW1tI4uDggKuuuuqqq6666qqrrrrqqv9kVK666qqrrrrq/xlJPDdJPDdJPDdJPDdJ/EskcXh4CMDW1hb3u+aaax7CVVddddVVV1111VVXXXXVfx6Cq6666qqrrvpf7L777rsVYHt7m/8OknhuknhRHB4ecs011zyYq6666qqrrrrqqquuuuqq/zwEV1111VVXXfW/2H333XcrwNbWFs9NEs9NEs9NEs9NEs9NEv8WkgA4PDwEYGtrC0kcHBxw1VVXXXXVVVddddVVV131n4zgqquuuuqqq/4X+4d/+IffAbjuuuv4ryaJ5yaJB5LE/Q4ODgDY2toC4PDwkGuuuebBXHXVVVddddVVV1111VVX/eehctVVV1111VX/B0niuUniRSGJ5yaJf6/Dw0MANjc3ATg8POTMmTMP4qqrrrrqqquuuuqqq6666j8PwVVXXXXVVVf9L3b27NlbAba3t/m3kMS/hSSemyQeSBIPJIn7SeJ+11xzzYO56qqrrrrqqquuuuqqq676z0Fw1VVXXXXVVf+L3XfffbcCbG1tcT9J/FtJ4rlJ4l8iiX/J4eEhAFtbWwAcHBwAcObMmQdz1VVXXXXVVVddddVVV131n4Pgqquuuuqqq/6Xu++++24F2Nra4gWRxHOTxL+FJP4lknggSQAcHh4CsLm5yVVXXXXVVVddddVVV1111X8Bgquuuuqqq676X+7s2bO3AmxvbyOJfytJPDdJ/Esk8aI6PDwEYHt7m6OjIwCuueaaB3PVVVddddVVV1111VVXXfWfg+Cqq6666qqr/pe77777bgXY2tri+ZHEc5PEv4Uk/iWSeCBJvCD33nsvZ86ceRBXXXXVVVddddVVV1111VX/OahcddVVV1111f9y9913360AW1tb/FtJ4rlJ4l8iiQeSxAtzeHgIwObmJpK46qqrrrrqqquuuuqqq676T0blqquuuuqqq/6XO3v27DMAtre3eW6SeG6S+LeQxL+WJB7o8PAQgK2tLQAODw+55pprHsxVV1111VVXXXXVVVddddV/DipXXXXVVVdd9b/cfffddyvA1tYW/xaSeG6S+JdI4oEk8UCSeCBJ3G9zcxOAw8NDrrnmmgdz1VVXXXXVVVddddVVV131n4PKVVddddVVV/0vd/bs2VsBtra2eCBJPDdJ/FtI4j/CfffdB8Dm5iaSADhz5syDueqqq6666qqrrrrqqquu+s9B5aqrrrrqqquueg6S+JdI4oEk8UCSeCBJPJAkAA4PD7nqqquuuuqqq6666qqrrvpPRHDVVVddddVV/8vdd999t9533323bm1tsbW1BYAknpsknpsk/iWS+I9yeHgIwObmJgCHh4dcc801D+aqq6666qqrrrrqqquuuuo/B8FVV1111VVX/R9w9uzZWwG2trb495DEA0niuUnigSTxQJJ4IEk8P5I4OjoC4JprrnkwV1111VVXXXXVVVddddVV//EIrrrqqquuuur/kOuuu47rrruO5yaJ5yaJfy1J/GtI4oGOjo4A2Nzc5IHOnDnzYK666qqrrrrqqquuuuqqq/7jUbnqqquuuuqq/wN+5Ed+5HPe8R3fkZd5mZd5bYCDgwPuuece7rnnHg4ODrj33nv5l0jigSTxL5HEA0niX3J4eMjm5iabm5scHR1x1VVXXXXVVVddddVVV131n4hy/Phxrrrqqquuuup/u7Nnz94qicPDw93Nzc3jJ06cOH7y5EluueUWHv7wh/Pwhz+ckydPMpvNuHDhApJ4bpJ4IEk8kCSemyTuJ4kHksQDSQLgxhtvZHNzk7vuuovDw0Me8pCH8OQnP/l3br311r/mqquuuuqqq6666qqrrrrqPxaVq6666qqrrvo/4rd+67e+57d+67e+B+Caa6558Iu92Iu99ou92Iu91uu8zuu899bWFg9/+MN5+MMfzqu92qtxcHDAvffey1Oe8hTuvfdeJPFAkviXSOLfY3NzE4DDw0POnDnzIK666qqrrrrqqquuuuqqq/7jUbnqqquuuuqq/4Puu+++W++7777v/q3f+q3v/tEf/dHPAXixF3ux136d13md93qxF3ux197a2mJra4uHPexhHBwccHh4yD333MO9997Lvffey3OTxANJ4oEk8UCSeCBJ3O++++7jmmuuYWNjA0lsbm5y9uzZZ3DVVVddddVVV1111VVXXfUfj8pVV1111VVX/R9333333Qpw3333ffdv/dZvffeZM2cedM011zzkxV7sxV7rxV/8xV/7xV7sxV57a2uLa6+9FoCDgwPuvfde7r33Xg4PD7n33nv595DEA0kCQBIAm5ub3Hfffbdy1VVXXXXVVVddddVVV131Hw896EEP4qqrrrrqqqv+P7vmmmse/GIv9mKv9WIv9mKvfc011zz4xV7sxV6bBzg8POTee+/l3nvv5WlPexqSeCBJPJAkHkgS95PEgx/8YF7xFV+RW2+9lfvuu49XfMVX5O3e7u3EVVddddVVV1111VVXXXXVfzz0oAc9iKuuuuqqq6666tmuueaaB7/Yi73Ya7/Yi73Ya73O67zOe/NcDg8Puffee7nvvvt42tOehiQeSBL3k8QDSeLMmTO8zuu8Dvfddx9HR0c8/elP/+6v//qvfx+uuuqqq6666qqrrrrqqqv+46EHPehBXHXVVVddddVVL9g111zz4Bd7sRd77dd5ndd5rxd7sRd7bR7g8PAQgKc97Wncd999nD17lgeSxP0kAbC5ucmbvdmbcXh4CMB3fdd3vc9v/dZvfTdXXXXVVVddddVVV1111VX/8dCDHvQgrrrqqquuuuqqF82ZM2cedM011zzkxV7sxV7rxV/8xV/7xV7sxV6bBzg8POTw8JCnP/3pHB0dcd9993E/SQBsbm7yZm/2ZhweHrK5ucmHfMiHPOS+++67lauuuuqqq6666qqrrrrqqv946EEPehBXXXXVVVddddW/zTXXXPPgF3uxF3utF3uxF3vta6655sEv9mIv9to8wOHhIffddx9nz57l8PCQs2fPAvCO7/iO3O/t3u7txFVXXXXVVVddddVVV1111X8O9KAHPYirrrrqqquuuuo/xjXXXPPgF3uxF3vtF3uxF3utF3uxF3vta6655sE8wOHhIWfPnuXMmTNsbm7yW7/1W9/z9V//9e/NVVddddVVV1111VVXXXXVfw70oAc9iKuuuuqqq6666j/HNddc8+AXe7EXe+0Xe7EXe63XeZ3XeW+ey9d//de/z2/91m99N1ddddVVV1111VVXXXXVVf850IMe9CCuuuqqq6666qr/Gtdcc82DX+zFXuy1X+d1Xue9fuRHfuRz/uEf/uG3ueqqq6666qqrrrrqqquu+s+DHvSgB3HVVVddddVVV1111VVXXXXVVVddddVVV/2fROWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9X8Y80lIzVmDNlXAAAAABJRU5ErkJggg==) diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 31216ea61..262b014ba 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -42791,12 +42791,12 @@ "examples": [ "// Add color to an extruded solid.\nexampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n // There are other options besides 'color', but they're optional.\n |> appearance(color = '#ff0000')", "// Add color to a revolved solid.\nsketch001 = startSketchOn('XY')\n |> circle({ center = [15, 0], radius = 5 }, %)\n |> revolve({ angle = 360, axis = 'y' }, %)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// Add color to different solids.\nfn cube(center) {\n return startSketchOn('XY')\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\nexample0 = cube([0, 0])\nexample1 = cube([20, 0])\nexample2 = cube([40, 0])\n\nappearance([example0, example1], color = '#ff0000', metalness = 50, roughness = 50)\nappearance(example2, color = '#00ff00', metalness = 50, roughness = 50)", + "// Add color to different solids.\nfn cube(center) {\n return startSketchOn('XY')\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\nexample0 = cube([0, 0])\nexample1 = cube([20, 0])\nexample2 = cube([40, 0])\n\nappearance(\n [example0, example1],\n color = '#ff0000',\n metalness = 50,\n roughness = 50,\n)\nappearance(\n example2,\n color = '#00ff00',\n metalness = 50,\n roughness = 50,\n)", "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _after_ the shell.\nfirstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\nshell(firstSketch, faces = ['end'], thickness = 0.25)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _before_ the shell.\nfirstSketch = startSketchOn('XY')\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n\nshell(firstSketch, faces = ['end'], thickness = 0.25)", - "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _before_ the pattern.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n |> patternLinear3d({\n axis = [1, 0, 1],\n instances = 7,\n distance = 6\n }, %)", - "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _after_ the pattern.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d({\n axis = [1, 0, 1],\n instances = 7,\n distance = 6\n }, %)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// Color the result of a 2D pattern that was extruded.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d({\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true\n }, %)\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", + "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _before_ the pattern.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", + "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _after_ the pattern.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", + "// Color the result of a 2D pattern that was extruded.\nexampleSketch = startSketchOn('XZ')\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", "// Color the result of a sweep.\n\n\n// Create a path for the sweep.\nsweepPath = startSketchOn('XZ')\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\npipeHole = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 1.5 }, %)\n\nsweepSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 2 }, %)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> appearance(color = \"#ff0000\", metalness = 50, roughness = 50)" ] }, @@ -91768,9 +91768,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Create a helix around the Z axis.\nhelixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = 'Z')\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 0.5 }, %)\n |> sweep(path = helixPath)", - "// Create a helix around an edge.\nhelper001 = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 10], tag = $edge001)\n\nhelixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = edge001)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 0.5 }, %)\n |> sweep(path = helixPath)", - "// Create a helix around a custom axis.\nhelixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = {\n custom = {\n axis = [0, 0, 1.0],\n origin = [0, 0.25, 0]\n }\n})\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)" + "// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 5,\n length = 10,\n radius = 5,\n axis = 'Z',\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 0.5 }, %)\n |> sweep(path = helixPath)", + "// Create a helix around an edge.\nhelper001 = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 10], tag = $edge001)\n\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 5,\n length = 10,\n radius = 5,\n axis = edge001,\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 0.5 }, %)\n |> sweep(path = helixPath)", + "// Create a helix around a custom axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 5,\n length = 10,\n radius = 5,\n axis = {\n custom = {\n axis = [0, 0, 1.0],\n origin = [0, 0.25, 0]\n }\n},\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)" ] }, { @@ -122973,7 +122973,7 @@ "examples": [ "// Loft a square and a triangle.\nsquareSketch = startSketchOn('XY')\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ntriangleSketch = startSketchOn(offsetPlane('XY', 75))\n |> startProfileAt([0, 125], %)\n |> line(end = [-15, -30])\n |> line(end = [30, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\nloft([squareSketch, triangleSketch])", "// Loft a square, a circle, and another circle.\nsquareSketch = startSketchOn('XY')\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane('XY', 75))\n |> circle({ center = [0, 100], radius = 50 }, %)\n\ncircleSketch1 = startSketchOn(offsetPlane('XY', 150))\n |> circle({ center = [0, 100], radius = 20 }, %)\n\nloft([\n squareSketch,\n circleSketch0,\n circleSketch1\n])", - "// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn('XY')\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane('XY', 75))\n |> circle({ center = [0, 100], radius = 50 }, %)\n\ncircleSketch1 = startSketchOn(offsetPlane('XY', 150))\n |> circle({ center = [0, 100], radius = 20 }, %)\n\nloft([\n squareSketch,\n circleSketch0,\n circleSketch1\n], baseCurveIndex = 0, bezApproximateRational = false, tolerance = 0.000001, vDegree = 2)" + "// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn('XY')\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane('XY', 75))\n |> circle({ center = [0, 100], radius = 50 }, %)\n\ncircleSketch1 = startSketchOn(offsetPlane('XY', 150))\n |> circle({ center = [0, 100], radius = 20 }, %)\n\nloft(\n [\n squareSketch,\n circleSketch0,\n circleSketch1\n],\n baseCurveIndex = 0,\n bezApproximateRational = false,\n tolerance = 0.000001,\n vDegree = 2,\n)" ] }, { @@ -134534,60 +134534,8 @@ "summary": "Repeat a 2-dimensional sketch some number of times along a partial or", "description": "complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "CircularPattern2dData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "CircularPattern2dData", - "description": "Data for a circular pattern on a 2D sketch.", - "type": "object", - "required": [ - "arcDegrees", - "center", - "instances", - "rotateDuplicates" - ], - "properties": { - "instances": { - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "center": { - "description": "The center about which to make the pattern. This is a 2D vector.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "arcDegrees": { - "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", - "type": "number", - "format": "double" - }, - "rotateDuplicates": { - "description": "Whether or not to rotate the duplicates as they are copied.", - "type": "boolean" - }, - "useOriginal": { - "description": "If the target being patterned is itself a pattern, then, should you use the original solid, or the pattern?", - "default": null, - "type": "boolean", - "nullable": true - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "sketch_set", "type": "SketchSet", @@ -136158,6 +136106,7371 @@ }, "required": true, "includeInSnippet": true, + "description": "Which sketch(es) to pattern", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "center", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The center about which to make the pattern. This is a 2D vector.", + "labelRequired": true + }, + { + "name": "arc_degrees", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", + "labelRequired": true + }, + { + "name": "rotate_duplicates", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Boolean", + "type": "boolean", + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Whether or not to rotate the duplicates as they are copied.", + "labelRequired": true + }, + { + "name": "use_original", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], @@ -137637,7 +144950,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d({\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true\n }, %)\n\nexample = extrude(exampleSketch, length = 1)" + "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)" ] }, { @@ -137645,71 +144958,8 @@ "summary": "Repeat a 3-dimensional solid some number of times along a partial or", "description": "complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "CircularPattern3dData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "CircularPattern3dData", - "description": "Data for a circular pattern on a 3D model.", - "type": "object", - "required": [ - "arcDegrees", - "axis", - "center", - "instances", - "rotateDuplicates" - ], - "properties": { - "instances": { - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "axis": { - "description": "The axis around which to make the pattern. This is a 3D vector.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3 - }, - "center": { - "description": "The center about which to make the pattern. This is a 3D vector.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3 - }, - "arcDegrees": { - "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", - "type": "number", - "format": "double" - }, - "rotateDuplicates": { - "description": "Whether or not to rotate the duplicates as they are copied.", - "type": "boolean" - }, - "useOriginal": { - "description": "If the target being patterned is itself a pattern, then, should you use the original solid, or the pattern?", - "default": null, - "type": "boolean", - "nullable": true - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "solid_set", "type": "SolidSet", @@ -139284,6 +146534,8848 @@ }, "required": true, "includeInSnippet": true, + "description": "Which solid(s) to pattern", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "axis", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The axis around which to make the pattern. This is a 3D vector", + "labelRequired": true + }, + { + "name": "center", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The center about which to make the pattern. This is a 3D vector.", + "labelRequired": true + }, + { + "name": "arc_degrees", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", + "labelRequired": true + }, + { + "name": "rotate_duplicates", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Boolean", + "type": "boolean", + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Whether or not to rotate the duplicates as they are copied.", + "labelRequired": true + }, + { + "name": "use_original", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], @@ -140763,7 +156855,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn('XZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n\nexample = extrude(exampleSketch, length = -5)\n |> patternCircular3d({\n axis = [1, -1, 0],\n center = [10, -20, 0],\n instances = 11,\n arcDegrees = 360,\n rotateDuplicates = true\n }, %)" + "exampleSketch = startSketchOn('XZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n\nexample = extrude(exampleSketch, length = -5)\n |> patternCircular3d(\n axis = [1, -1, 0],\n center = [10, -20, 0],\n instances = 11,\n arcDegrees = 360,\n rotateDuplicates = true,\n )" ] }, { @@ -140771,49 +156863,8 @@ "summary": "Repeat a 2-dimensional sketch along some dimension, with a dynamic amount", "description": "of distance between each repetition, some specified number of times.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "LinearPattern2dData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "LinearPattern2dData", - "description": "Data for a linear pattern on a 2D sketch.", - "type": "object", - "required": [ - "axis", - "distance", - "instances" - ], - "properties": { - "instances": { - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "distance": { - "description": "The distance between each repetition. This can also be referred to as spacing.", - "type": "number", - "format": "double" - }, - "axis": { - "description": "The axis of the pattern. This is a 2D vector.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "sketch_set", "type": "SketchSet", @@ -142384,6 +158435,4429 @@ }, "required": true, "includeInSnippet": true, + "description": "The sketch(es) to duplicate", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "distance", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Distance between each repetition. Also known as 'spacing'.", + "labelRequired": true + }, + { + "name": "axis", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The axis of the pattern. A 2D vector.", "labelRequired": true }, { @@ -143854,6 +164328,7 @@ } }, "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], @@ -145333,7 +165808,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn('XZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> patternLinear2d({\n axis = [1, 0],\n instances = 7,\n distance = 4\n }, %)\n\nexample = extrude(exampleSketch, length = 1)" + "exampleSketch = startSketchOn('XZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> patternLinear2d(axis = [1, 0], instances = 7, distance = 4)\n\nexample = extrude(exampleSketch, length = 1)" ] }, { @@ -145341,49 +165816,8 @@ "summary": "Repeat a 3-dimensional solid along a linear path, with a dynamic amount", "description": "of distance between each repetition, some specified number of times.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "LinearPattern3dData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "LinearPattern3dData", - "description": "Data for a linear pattern on a 3D model.", - "type": "object", - "required": [ - "axis", - "distance", - "instances" - ], - "properties": { - "instances": { - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "distance": { - "description": "The distance between each repetition. This can also be referred to as spacing.", - "type": "number", - "format": "double" - }, - "axis": { - "description": "The axis of the pattern.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3 - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "solid_set", "type": "SolidSet", @@ -146958,6 +167392,4429 @@ }, "required": true, "includeInSnippet": true, + "description": "The solid(s) to duplicate", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "distance", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Distance between each repetition. Also known as 'spacing'.", + "labelRequired": true + }, + { + "name": "axis", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "description": "A sketch is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "Solid": { + "description": "An solid is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + } + }, + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The axis of the pattern. A 2D vector.", "labelRequired": true }, { @@ -148428,6 +173285,7 @@ } }, "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], @@ -149907,7 +174765,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d({\n axis = [1, 0, 1],\n instances = 7,\n distance = 6\n }, %)" + "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)" ] }, { @@ -228088,7 +252946,7 @@ "deprecated": false, "examples": [ "// Create a pipe using a sweep.\n\n\n// Create a path for the sweep.\nsweepPath = startSketchOn('XZ')\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 1.5 }, %)\n\nsweepSketch = startSketchOn('XY')\n |> circle({ center = [0, 0], radius = 2 }, %)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)", - "// Create a spring by sweeping around a helix path.\n\n\n// Create a helix around the Z axis.\nhelixPath = helix(angleStart = 0, ccw = true, revolutions = 4, length = 10, radius = 5, axis = 'Z')\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)" + "// Create a spring by sweeping around a helix path.\n\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = 'Z',\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)" ] }, { diff --git a/docs/kcl/sweep.md b/docs/kcl/sweep.md index fb3a38491..0401fc22e 100644 --- a/docs/kcl/sweep.md +++ b/docs/kcl/sweep.md @@ -59,7 +59,14 @@ sweepSketch = startSketchOn('XY') // Create a helix around the Z axis. -helixPath = helix(angleStart = 0, ccw = true, revolutions = 4, length = 10, radius = 5, axis = 'Z') +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 4, + length = 10, + radius = 5, + axis = 'Z', +) // Create a spring by sweeping around the helix path. springSketch = startSketchOn('YZ') diff --git a/e2e/playwright/point-click.spec.ts b/e2e/playwright/point-click.spec.ts index c8b53f4b2..850504889 100644 --- a/e2e/playwright/point-click.spec.ts +++ b/e2e/playwright/point-click.spec.ts @@ -1117,13 +1117,14 @@ openSketch = startSketchOn('XY') }) => { // One dumb hardcoded screen pixel value const testPoint = { x: 620, y: 257 } - const expectedOutput = `helix001 = helix(revolutions = 1, angleStart = 360, counterClockWise = false, radius = 5, axis = 'X', length = 5)` + const expectedOutput = `helix001 = helix( revolutions = 1, angleStart = 360, counterClockWise = false, radius = 5, axis = 'X', length = 5,)` + const expectedLine = `revolutions=1,` await homePage.goToModelingScene() - await test.step(`Look for the red of the default plane`, async () => { - await scene.expectPixelColor([96, 52, 52], testPoint, 15) - }) + // await test.step(`Look for the red of the default plane`, async () => { + // await scene.expectPixelColor([96, 52, 52], testPoint, 15) + // }) await test.step(`Go through the command bar flow`, async () => { await toolbar.helixButton.click() await cmdBar.expectState({ @@ -1154,7 +1155,7 @@ openSketch = startSketchOn('XY') await editor.expectEditor.toContain(expectedOutput) await editor.expectState({ diagnostics: [], - activeLines: [expectedOutput], + activeLines: [expectedLine], highlightedCode: '', }) // Red plane is now gone, white helix is there diff --git a/e2e/playwright/regression-tests.spec.ts b/e2e/playwright/regression-tests.spec.ts index 6d7821c95..78a3099eb 100644 --- a/e2e/playwright/regression-tests.spec.ts +++ b/e2e/playwright/regression-tests.spec.ts @@ -192,11 +192,11 @@ extrude001 = extrude(sketch001, length = 50) |> line(end = [0, -1]) |> close() |> extrude(length = 1) - |> patternLinear3d({ - axis: [1, 0, 1], - repetitions: 3, - distance: 6 - }, %)` + |> patternLinear3d( + axis = [1, 0, 1], + repetitions = 3, + distance = 6, + )` ) }) await page.setBodyDimensions({ width: 1000, height: 500 }) diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png index 2f01830a1..f8ff9052f 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png differ diff --git a/package.json b/package.json index 959d36b32..6039d0cdf 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "fmt": "prettier --write ./src *.ts *.json *.js ./e2e ./packages", "fmt-check": "prettier --check ./src *.ts *.json *.js ./e2e ./packages", "fetch:wasm": "./get-latest-wasm-bundle.sh", - "fetch:samples": "echo \"Fetching latest KCL samples...\" && curl -o public/kcl-samples-manifest-fallback.json https://raw.githubusercontent.com/KittyCAD/kcl-samples/achalmers/kw-appearance/manifest.json", + "fetch:samples": "echo \"Fetching latest KCL samples...\" && curl -o public/kcl-samples-manifest-fallback.json https://raw.githubusercontent.com/KittyCAD/kcl-samples/achalmers/kw-pattern/manifest.json", "isomorphic-copy-wasm": "(copy src/wasm-lib/pkg/wasm_lib_bg.wasm public || cp src/wasm-lib/pkg/wasm_lib_bg.wasm public)", "build:wasm-dev": "yarn wasm-prep && (cd src/wasm-lib && wasm-pack build --dev --target web --out-dir pkg && cargo test -p kcl-lib export_bindings) && yarn isomorphic-copy-wasm && yarn fmt", "build:wasm": "yarn wasm-prep && cd src/wasm-lib && wasm-pack build --release --target web --out-dir pkg && cargo test -p kcl-lib export_bindings && cd ../.. && yarn isomorphic-copy-wasm && yarn fmt", diff --git a/src/lang/kclSamples.test.ts b/src/lang/kclSamples.test.ts index 1cf7c9116..8092f1574 100644 --- a/src/lang/kclSamples.test.ts +++ b/src/lang/kclSamples.test.ts @@ -32,7 +32,7 @@ child_process.spawnSync('git', [ 'clone', '--single-branch', '--branch', - 'achalmers/kw-appearance', + 'achalmers/kw-pattern', URL_GIT_KCL_SAMPLES, DIR_KCL_SAMPLES, ]) diff --git a/src/lib/exampleKcl.ts b/src/lib/exampleKcl.ts index 4c6c37618..2f98eb105 100644 --- a/src/lib/exampleKcl.ts +++ b/src/lib/exampleKcl.ts @@ -51,16 +51,16 @@ sketch002 = startSketchOn(sketch001, seg03) center = [-1.25, 1], radius = mountingHoleDiameter / 2, }, %) - |> patternLinear2d({ + |> patternLinear2d( instances = 2, distance = 2.5, axis = [-1, 0], - }, %) - |> patternLinear2d({ + ) + |> patternLinear2d( instances = 2, distance = 4, axis = [0, 1], - }, %) + ) |> extrude(%, length = -thickness-.01) sketch003 = startSketchOn(sketch001, seg04) @@ -68,11 +68,11 @@ sketch003 = startSketchOn(sketch001, seg04) center = [1, -1], radius = mountingHoleDiameter / 2, }, %) - |> patternLinear2d({ + |> patternLinear2d( instances = 2, distance = 4, axis = [1, 0], - }, %) + ) |> extrude(%, length = -thickness-0.1) ` diff --git a/src/wasm-lib/justfile b/src/wasm-lib/justfile index b94e63f04..23f99d6db 100644 --- a/src/wasm-lib/justfile +++ b/src/wasm-lib/justfile @@ -36,5 +36,11 @@ run-sim-test test_name: {{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::unparse TWENTY_TWENTY=overwrite {{cita}} -p kcl-lib -- tests::{{test_name}}::kcl_test_execute +overwrite-sim-test test_name: + EXPECTORATE=overwrite {{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::parse + EXPECTORATE=overwrite {{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::unparse + {{cita}} -p kcl-lib -- tests::{{test_name}}::kcl_test_execute + + test: export RUST_BRACKTRACE="full" && cargo nextest run --workspace --test-threads=1 diff --git a/src/wasm-lib/kcl/src/docs/mod.rs b/src/wasm-lib/kcl/src/docs/mod.rs index 4a896c2d3..d82a5de20 100644 --- a/src/wasm-lib/kcl/src/docs/mod.rs +++ b/src/wasm-lib/kcl/src/docs/mod.rs @@ -944,13 +944,7 @@ mod tests { let snippet = pattern_fn.to_autocomplete_snippet().unwrap(); assert_eq!( snippet, - r#"patternCircular3d({ - instances = ${0:10}, - axis = [${1:3.14}, ${2:3.14}, ${3:3.14}], - center = [${4:3.14}, ${5:3.14}, ${6:3.14}], - arcDegrees = ${7:3.14}, - rotateDuplicates = ${8:false}, -}, ${9:%})${}"# + r#"patternCircular3d(${0:%}, instances = ${1:10}, axis = [${2:3.14}, ${3:3.14}, ${4:3.14}], center = [${5:3.14}, ${6:3.14}, ${7:3.14}], arc_degrees = ${8:3.14}, rotate_duplicates = ${9:false})${}"# ); } @@ -1006,11 +1000,7 @@ mod tests { let snippet = pattern_fn.to_autocomplete_snippet().unwrap(); assert_eq!( snippet, - r#"patternLinear2d({ - instances = ${0:10}, - distance = ${1:3.14}, - axis = [${2:3.14}, ${3:3.14}], -}, ${4:%})${}"# + r#"patternLinear2d(${0:%}, instances = ${1:10}, distance = ${2:3.14}, axis = [${3:3.14}, ${4:3.14}])${}"# ); } diff --git a/src/wasm-lib/kcl/src/lsp/tests.rs b/src/wasm-lib/kcl/src/lsp/tests.rs index 84483a185..bf872789e 100644 --- a/src/wasm-lib/kcl/src/lsp/tests.rs +++ b/src/wasm-lib/kcl/src/lsp/tests.rs @@ -1542,13 +1542,13 @@ sphere = startSketchOn('XZ') }, %) |> close() |> revolve({ axis: 'x' }, %) - |> patternCircular3d({ - axis: [0, 0, 1], - center: [0, 0, 0], - repetitions: 10, - arcDegrees: 360, - rotateDuplicates: true - }, %) + |> patternCircular3d( + axis = [0, 0, 1], + center = [0, 0, 0], + repetitions = 10, + arcDegrees = 360, + rotateDuplicates = true, + ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn('XZ') @@ -1643,13 +1643,13 @@ sphere = startSketchOn('XZ') }, %) |> close() |> revolve({ axis = 'x' }, %) - |> patternCircular3d({ + |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], repetitions = 10, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn('XZ') diff --git a/src/wasm-lib/kcl/src/std/appearance.rs b/src/wasm-lib/kcl/src/std/appearance.rs index f31ea420b..971305aa3 100644 --- a/src/wasm-lib/kcl/src/std/appearance.rs +++ b/src/wasm-lib/kcl/src/std/appearance.rs @@ -180,12 +180,12 @@ pub async fn appearance(_exec_state: &mut ExecState, args: Args) -> Result patternLinear3d({ -/// axis = [1, 0, 1], -/// instances = 7, -/// distance = 6 -/// }, %) +/// ) +/// |> patternLinear3d( +/// axis = [1, 0, 1], +/// instances = 7, +/// distance = 6 +/// ) /// ``` /// /// ```no_run @@ -199,16 +199,16 @@ pub async fn appearance(_exec_state: &mut ExecState, args: Args) -> Result close() /// /// example = extrude(exampleSketch, length = 1) -/// |> patternLinear3d({ +/// |> patternLinear3d( /// axis = [1, 0, 1], /// instances = 7, /// distance = 6 -/// }, %) -/// |> appearance( -/// color = '#ff0000', -/// metalness = 90, -/// roughness = 90 -/// ) +/// ) +/// |> appearance( +/// color = '#ff0000', +/// metalness = 90, +/// roughness = 90 +/// ) /// ``` /// /// ```no_run @@ -219,12 +219,12 @@ pub async fn appearance(_exec_state: &mut ExecState, args: Args) -> Result line(end = [-1, 0]) /// |> line(end = [0, -5]) /// |> close() -/// |> patternCircular2d({ +/// |> patternCircular2d( /// center = [0, 0], /// instances = 13, /// arcDegrees = 360, /// rotateDuplicates = true -/// }, %) +/// ) /// /// example = extrude(exampleSketch, length = 1) /// |> appearance( diff --git a/src/wasm-lib/kcl/src/std/args.rs b/src/wasm-lib/kcl/src/std/args.rs index 6c0cd1597..c5137f1c3 100644 --- a/src/wasm-lib/kcl/src/std/args.rs +++ b/src/wasm-lib/kcl/src/std/args.rs @@ -442,13 +442,6 @@ impl Args { FromArgs::from_args(self, 0) } - pub(crate) fn get_data_and_solid_set<'a, T>(&'a self) -> Result<(T, SolidSet), KclError> - where - T: serde::de::DeserializeOwned + FromKclValue<'a> + Sized, - { - FromArgs::from_args(self, 0) - } - pub(crate) fn get_data_and_solid<'a, T>(&'a self) -> Result<(T, Box), KclError> where T: serde::de::DeserializeOwned + FromKclValue<'a> + Sized, @@ -945,72 +938,6 @@ impl<'a> FromKclValue<'a> for kittycad_modeling_cmds::coord::Direction { } } -impl<'a> FromKclValue<'a> for super::patterns::CircularPattern3dData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, instances); - let_field_of!(obj, arc_degrees "arcDegrees"); - let_field_of!(obj, rotate_duplicates "rotateDuplicates"); - let_field_of!(obj, axis); - let_field_of!(obj, center); - let_field_of!(obj, use_original? "useOriginal"); - Some(Self { - instances, - axis, - center, - arc_degrees, - rotate_duplicates, - use_original, - }) - } -} - -impl<'a> FromKclValue<'a> for super::patterns::CircularPattern2dData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, instances); - let_field_of!(obj, arc_degrees "arcDegrees"); - let_field_of!(obj, rotate_duplicates "rotateDuplicates"); - let_field_of!(obj, center); - let_field_of!(obj, use_original? "useOriginal"); - Some(Self { - instances, - center, - arc_degrees, - rotate_duplicates, - use_original, - }) - } -} - -impl<'a> FromKclValue<'a> for super::patterns::LinearPattern3dData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, distance); - let_field_of!(obj, instances); - let_field_of!(obj, axis); - Some(Self { - instances, - distance, - axis, - }) - } -} - -impl<'a> FromKclValue<'a> for super::patterns::LinearPattern2dData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, distance); - let_field_of!(obj, instances); - let_field_of!(obj, axis); - Some(Self { - instances, - distance, - axis, - }) - } -} - impl<'a> FromKclValue<'a> for super::sketch::BezierData { fn from_kcl_val(arg: &'a KclValue) -> Option { let obj = arg.as_object()?; diff --git a/src/wasm-lib/kcl/src/std/patterns.rs b/src/wasm-lib/kcl/src/std/patterns.rs index eefb47177..6a055e611 100644 --- a/src/wasm-lib/kcl/src/std/patterns.rs +++ b/src/wasm-lib/kcl/src/std/patterns.rs @@ -29,22 +29,6 @@ use crate::{ const MUST_HAVE_ONE_INSTANCE: &str = "There must be at least 1 instance of your geometry"; -/// Data for a linear pattern on a 2D sketch. -#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] -#[ts(export)] -#[serde(rename_all = "camelCase")] -pub struct LinearPattern2dData { - /// The number of total instances. Must be greater than or equal to 1. - /// This includes the original entity. For example, if instances is 2, - /// there will be two copies -- the original, and one new copy. - /// If instances is 1, this has no effect. - pub instances: u32, - /// The distance between each repetition. This can also be referred to as spacing. - pub distance: f64, - /// The axis of the pattern. This is a 2D vector. - pub axis: [f64; 2], -} - /// Data for a linear pattern on a 3D model. #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] #[ts(export)] @@ -689,10 +673,13 @@ mod tests { /// A linear pattern on a 2D sketch. pub async fn pattern_linear_2d(exec_state: &mut ExecState, args: Args) -> Result { - let (data, sketch_set, use_original): (LinearPattern2dData, SketchSet, Option) = - super::args::FromArgs::from_args(&args, 0)?; + let sketch_set: SketchSet = args.get_unlabeled_kw_arg("sketchSet")?; + let instances: u32 = args.get_kw_arg("instances")?; + let distance: f64 = args.get_kw_arg("distance")?; + let axis: [f64; 2] = args.get_kw_arg("axis")?; + let use_original: Option = args.get_kw_arg_opt("useOriginal")?; - if data.axis == [0.0, 0.0] { + if axis == [0.0, 0.0] { return Err(KclError::Semantic(KclErrorDetails { message: "The axis of the linear pattern cannot be the zero vector. Otherwise they will just duplicate in place." @@ -701,7 +688,8 @@ pub async fn pattern_linear_2d(exec_state: &mut ExecState, args: Args) -> Result })); } - let sketches = inner_pattern_linear_2d(data, sketch_set, use_original, exec_state, args).await?; + let sketches = + inner_pattern_linear_2d(sketch_set, instances, distance, axis, use_original, exec_state, args).await?; Ok(sketches.into()) } @@ -711,31 +699,41 @@ pub async fn pattern_linear_2d(exec_state: &mut ExecState, args: Args) -> Result /// ```no_run /// exampleSketch = startSketchOn('XZ') /// |> circle({ center = [0, 0], radius = 1 }, %) -/// |> patternLinear2d({ +/// |> patternLinear2d( /// axis = [1, 0], /// instances = 7, /// distance = 4 -/// }, %) +/// ) /// /// example = extrude(exampleSketch, length = 1) /// ``` #[stdlib { name = "patternLinear2d", + keywords = true, + unlabeled_first = true, + args = { + sketch_set = { docs = "The sketch(es) to duplicate" }, + instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect." }, + distance = { docs = "Distance between each repetition. Also known as 'spacing'."}, + axis = { docs = "The axis of the pattern. A 2D vector." }, + use_original = { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false." }, + } }] async fn inner_pattern_linear_2d( - data: LinearPattern2dData, sketch_set: SketchSet, + instances: u32, + distance: f64, + axis: [f64; 2], use_original: Option, exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { - let axis = data.axis; let [x, y] = axis; let axis_len = f64::sqrt(x * x + y * y); let normalized_axis = kcmc::shared::Point2d::from([x / axis_len, y / axis_len]); - let transforms: Vec<_> = (1..data.instances) + let transforms: Vec<_> = (1..instances) .map(|i| { - let d = data.distance * (i as f64); + let d = distance * (i as f64); let translate = (normalized_axis * d).with_z(0.0).map(LengthUnit); vec![Transform { translate, @@ -755,10 +753,13 @@ async fn inner_pattern_linear_2d( /// A linear pattern on a 3D model. pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result { - let (data, solid_set, use_original): (LinearPattern3dData, SolidSet, Option) = - super::args::FromArgs::from_args(&args, 0)?; + let solid_set: SolidSet = args.get_unlabeled_kw_arg("solidSet")?; + let instances: u32 = args.get_kw_arg("instances")?; + let distance: f64 = args.get_kw_arg("distance")?; + let axis: [f64; 3] = args.get_kw_arg("axis")?; + let use_original: Option = args.get_kw_arg_opt("useOriginal")?; - if data.axis == [0.0, 0.0, 0.0] { + if axis == [0.0, 0.0, 0.0] { return Err(KclError::Semantic(KclErrorDetails { message: "The axis of the linear pattern cannot be the zero vector. Otherwise they will just duplicate in place." @@ -767,7 +768,7 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result })); } - let solids = inner_pattern_linear_3d(data, solid_set, use_original, exec_state, args).await?; + let solids = inner_pattern_linear_3d(solid_set, instances, distance, axis, use_original, exec_state, args).await?; Ok(solids.into()) } @@ -783,30 +784,40 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result /// |> close() /// /// example = extrude(exampleSketch, length = 1) -/// |> patternLinear3d({ +/// |> patternLinear3d( /// axis = [1, 0, 1], /// instances = 7, /// distance = 6 -/// }, %) +/// ) /// ``` #[stdlib { name = "patternLinear3d", feature_tree_operation = true, + keywords = true, + unlabeled_first = true, + args = { + solid_set = { docs = "The solid(s) to duplicate" }, + instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect." }, + distance = { docs = "Distance between each repetition. Also known as 'spacing'."}, + axis = { docs = "The axis of the pattern. A 2D vector." }, + use_original = { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false." }, + } }] async fn inner_pattern_linear_3d( - data: LinearPattern3dData, solid_set: SolidSet, + instances: u32, + distance: f64, + axis: [f64; 3], use_original: Option, exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { - let axis = data.axis; let [x, y, z] = axis; let axis_len = f64::sqrt(x * x + y * y + z * z); let normalized_axis = kcmc::shared::Point3d::from([x / axis_len, y / axis_len, z / axis_len]); - let transforms: Vec<_> = (1..data.instances) + let transforms: Vec<_> = (1..instances) .map(|i| { - let d = data.distance * (i as f64); + let d = distance * (i as f64); let translate = (normalized_axis * d).map(LengthUnit); vec![Transform { translate, @@ -828,7 +839,7 @@ async fn inner_pattern_linear_3d( #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] #[ts(export)] #[serde(rename_all = "camelCase")] -pub struct CircularPattern2dData { +struct CircularPattern2dData { /// The number of total instances. Must be greater than or equal to 1. /// This includes the original entity. For example, if instances is 2, /// there will be two copies -- the original, and one new copy. @@ -870,7 +881,7 @@ pub struct CircularPattern3dData { pub use_original: Option, } -pub enum CircularPattern { +enum CircularPattern { ThreeD(CircularPattern3dData), TwoD(CircularPattern2dData), } @@ -941,9 +952,24 @@ impl CircularPattern { /// A circular pattern on a 2D sketch. pub async fn pattern_circular_2d(exec_state: &mut ExecState, args: Args) -> Result { - let (data, sketch_set): (CircularPattern2dData, SketchSet) = args.get_data_and_sketch_set()?; + let sketch_set: SketchSet = args.get_unlabeled_kw_arg("sketchSet")?; + let instances: u32 = args.get_kw_arg("instances")?; + let center: [f64; 2] = args.get_kw_arg("center")?; + let arc_degrees: f64 = args.get_kw_arg("arcDegrees")?; + let rotate_duplicates: bool = args.get_kw_arg("rotateDuplicates")?; + let use_original: Option = args.get_kw_arg_opt("useOriginal")?; - let sketches = inner_pattern_circular_2d(data, sketch_set, exec_state, args).await?; + let sketches = inner_pattern_circular_2d( + sketch_set, + instances, + center, + arc_degrees, + rotate_duplicates, + use_original, + exec_state, + args, + ) + .await?; Ok(sketches.into()) } @@ -959,21 +985,36 @@ pub async fn pattern_circular_2d(exec_state: &mut ExecState, args: Args) -> Resu /// |> line(end = [-1, 0]) /// |> line(end = [0, -5]) /// |> close() -/// |> patternCircular2d({ +/// |> patternCircular2d( /// center = [0, 0], /// instances = 13, /// arcDegrees = 360, /// rotateDuplicates = true -/// }, %) +/// ) /// /// example = extrude(exampleSketch, length = 1) /// ``` #[stdlib { name = "patternCircular2d", + keywords = true, + unlabeled_first = true, + args = { + sketch_set = { docs = "Which sketch(es) to pattern" }, + instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect."}, + center = { docs = "The center about which to make the pattern. This is a 2D vector."}, + arc_degrees = { docs = "The arc angle (in degrees) to place the repetitions. Must be greater than 0."}, + rotate_duplicates= { docs = "Whether or not to rotate the duplicates as they are copied."}, + use_original= { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false."}, + } }] +#[allow(clippy::too_many_arguments)] async fn inner_pattern_circular_2d( - data: CircularPattern2dData, sketch_set: SketchSet, + instances: u32, + center: [f64; 2], + arc_degrees: f64, + rotate_duplicates: bool, + use_original: Option, exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { @@ -982,6 +1023,13 @@ async fn inner_pattern_circular_2d( if args.ctx.context_type == crate::execution::ContextType::Mock { return Ok(starting_sketches); } + let data = CircularPattern2dData { + instances, + center, + arc_degrees, + rotate_duplicates, + use_original, + }; let mut sketches = Vec::new(); for sketch in starting_sketches.iter() { @@ -1008,9 +1056,36 @@ async fn inner_pattern_circular_2d( /// A circular pattern on a 3D model. pub async fn pattern_circular_3d(exec_state: &mut ExecState, args: Args) -> Result { - let (data, solid_set): (CircularPattern3dData, SolidSet) = args.get_data_and_solid_set()?; + let solid_set: SolidSet = args.get_unlabeled_kw_arg("solidSet")?; + // The number of total instances. Must be greater than or equal to 1. + // This includes the original entity. For example, if instances is 2, + // there will be two copies -- the original, and one new copy. + // If instances is 1, this has no effect. + let instances: u32 = args.get_kw_arg("instances")?; + // The axis around which to make the pattern. This is a 3D vector. + let axis: [f64; 3] = args.get_kw_arg("axis")?; + // The center about which to make the pattern. This is a 3D vector. + let center: [f64; 3] = args.get_kw_arg("center")?; + // The arc angle (in degrees) to place the repetitions. Must be greater than 0. + let arc_degrees: f64 = args.get_kw_arg("arcDegrees")?; + // Whether or not to rotate the duplicates as they are copied. + let rotate_duplicates: bool = args.get_kw_arg("rotateDuplicates")?; + // If the target being patterned is itself a pattern, then, should you use the original solid, + // or the pattern? + let use_original: Option = args.get_kw_arg_opt("useOriginal")?; - let solids = inner_pattern_circular_3d(data, solid_set, exec_state, args).await?; + let solids = inner_pattern_circular_3d( + solid_set, + instances, + axis, + center, + arc_degrees, + rotate_duplicates, + use_original, + exec_state, + args, + ) + .await?; Ok(solids.into()) } @@ -1024,21 +1099,38 @@ pub async fn pattern_circular_3d(exec_state: &mut ExecState, args: Args) -> Resu /// |> circle({ center = [0, 0], radius = 1 }, %) /// /// example = extrude(exampleSketch, length = -5) -/// |> patternCircular3d({ +/// |> patternCircular3d( /// axis = [1, -1, 0], /// center = [10, -20, 0], /// instances = 11, /// arcDegrees = 360, /// rotateDuplicates = true -/// }, %) +/// ) /// ``` #[stdlib { name = "patternCircular3d", feature_tree_operation = true, + keywords = true, + unlabeled_first = true, + args = { + solid_set = { docs = "Which solid(s) to pattern" }, + instances = { docs = "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect."}, + axis = { docs = "The axis around which to make the pattern. This is a 3D vector"}, + center = { docs = "The center about which to make the pattern. This is a 3D vector."}, + arc_degrees = { docs = "The arc angle (in degrees) to place the repetitions. Must be greater than 0."}, + rotate_duplicates = { docs = "Whether or not to rotate the duplicates as they are copied."}, + use_original = { docs = "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false."}, + } }] +#[allow(clippy::too_many_arguments)] async fn inner_pattern_circular_3d( - data: CircularPattern3dData, solid_set: SolidSet, + instances: u32, + axis: [f64; 3], + center: [f64; 3], + arc_degrees: f64, + rotate_duplicates: bool, + use_original: Option, exec_state: &mut ExecState, args: Args, ) -> Result>, KclError> { @@ -1055,6 +1147,14 @@ async fn inner_pattern_circular_3d( } let mut solids = Vec::new(); + let data = CircularPattern3dData { + instances, + axis, + center, + arc_degrees, + rotate_duplicates, + use_original, + }; for solid in starting_solids.iter() { let geometries = pattern_circular( CircularPattern::ThreeD(data.clone()), diff --git a/src/wasm-lib/kcl/src/unparser.rs b/src/wasm-lib/kcl/src/unparser.rs index 69d8a929c..0bb19e79d 100644 --- a/src/wasm-lib/kcl/src/unparser.rs +++ b/src/wasm-lib/kcl/src/unparser.rs @@ -331,8 +331,25 @@ impl CallExpressionKw { .iter() .map(|arg| arg.recast(options, indentation_level, ctxt)), ); - let args = arg_list.join(", "); - format!("{indent}{name}({args})") + let args = arg_list.clone().join(", "); + if arg_list.len() >= 4 { + let inner_indentation = if ctxt == ExprContext::Pipe { + options.get_indentation_offset_pipe(indentation_level + 1) + } else { + options.get_indentation(indentation_level + 1) + }; + let mut args = arg_list.join(&format!(",\n{inner_indentation}")); + args.push(','); + let args = args; + let end_indent = if ctxt == ExprContext::Pipe { + options.get_indentation_offset_pipe(indentation_level) + } else { + options.get_indentation(indentation_level) + }; + format!("{indent}{name}(\n{inner_indentation}{args}\n{end_indent})") + } else { + format!("{indent}{name}({args})") + } } } @@ -1060,13 +1077,13 @@ sphere = startSketchOn('XZ') }, %) |> close() |> revolve({ axis: 'x' }, %) - |> patternCircular3d({ + |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], repetitions = 10, arcDegrees = 360, rotateDuplicates = true - }, %) + ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn('XZ') @@ -1127,13 +1144,13 @@ sphere = startSketchOn('XZ') }, %) |> close() |> revolve({ axis = 'x' }, %) - |> patternCircular3d({ + |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], repetitions = 10, arcDegrees = 360, - rotateDuplicates = true - }, %) + rotateDuplicates = true, + ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn('XZ') @@ -1458,11 +1475,11 @@ tabs_r = startSketchOn({ radius = hole_diam / 2 }, %), %) |> extrude(-thk, %) - |> patternLinear3d({ + |> patternLinear3d( axis = [0, -1, 0], repetitions = 1, distance = length - 10 - }, %) + ) // build the tabs of the mounting bracket (left side) tabs_l = startSketchOn({ plane: { @@ -1485,11 +1502,7 @@ tabs_l = startSketchOn({ radius = hole_diam / 2 }, %), %) |> extrude(-thk, %) - |> patternLinear3d({ - axis = [0, -1, 0], - repetitions = 1, - distance = length - 10 - }, %) + |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10) "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -1583,11 +1596,7 @@ tabs_r = startSketchOn({ radius = hole_diam / 2 }, %), %) |> extrude(-thk, %) - |> patternLinear3d({ - axis = [0, -1, 0], - repetitions = 1, - distance = length - 10 - }, %) + |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10) // build the tabs of the mounting bracket (left side) tabs_l = startSketchOn({ plane = { @@ -1610,11 +1619,7 @@ tabs_l = startSketchOn({ radius = hole_diam / 2 }, %), %) |> extrude(-thk, %) - |> patternLinear3d({ - axis = [0, -1, 0], - repetitions = 1, - distance = length - 10 - }, %) + |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10) "# ); } diff --git a/src/wasm-lib/kcl/tests/big_number_angle_to_match_length_x/ast.snap b/src/wasm-lib/kcl/tests/big_number_angle_to_match_length_x/ast.snap index b40edc815..0bac91786 100644 --- a/src/wasm-lib/kcl/tests/big_number_angle_to_match_length_x/ast.snap +++ b/src/wasm-lib/kcl/tests/big_number_angle_to_match_length_x/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing big_number_angle_to_match_length_x.kcl +snapshot_kind: text --- { "Ok": { diff --git a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/artifact_commands.snap b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/artifact_commands.snap index 9dc6dc6e8..7cd5c76a0 100644 --- a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/artifact_commands.snap +++ b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/artifact_commands.snap @@ -631,7 +631,7 @@ snapshot_kind: text "cmdId": "[uuid]", "range": [ 189, - 276, + 277, 0 ], "command": { @@ -819,8 +819,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -844,8 +844,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -869,8 +869,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -894,8 +894,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -919,8 +919,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -944,8 +944,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { @@ -969,8 +969,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 430, + 288, + 432, 0 ], "command": { diff --git a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ast.snap b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ast.snap index 9b22f7b2c..26a366ec6 100644 --- a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ast.snap +++ b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing circular_pattern3d_a_pattern.kcl +snapshot_kind: text --- { "Ok": { @@ -321,7 +322,7 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl }, { "declaration": { - "end": 276, + "end": 277, "id": { "end": 186, "name": "pattn1", @@ -331,115 +332,88 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl "init": { "arguments": [ { - "end": 260, - "properties": [ - { - "end": 225, - "key": { - "end": 213, - "name": "axis", - "start": 209, - "type": "Identifier" - }, - "start": 209, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "end": 218, - "raw": "1", - "start": 217, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "end": 221, - "raw": "0", - "start": 220, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 224, - "raw": "0", - "start": 223, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 225, - "start": 216, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 242, - "key": { - "end": 238, - "name": "instances", - "start": 229, - "type": "Identifier" - }, - "start": 229, - "type": "ObjectProperty", - "value": { - "end": 242, - "raw": "7", - "start": 241, + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "axis" + }, + "arg": { + "elements": [ + { + "end": 234, + "raw": "1", + "start": 233, "type": "Literal", "type": "Literal", "value": { - "value": 7.0, + "value": 1.0, "suffix": "None" } - } - }, - { - "end": 258, - "key": { - "end": 254, - "name": "distance", - "start": 246, - "type": "Identifier" }, - "start": 246, - "type": "ObjectProperty", - "value": { - "end": 258, - "raw": "6", - "start": 257, + { + "end": 237, + "raw": "0", + "start": 236, "type": "Literal", "type": "Literal", "value": { - "value": 6.0, + "value": 0.0, + "suffix": "None" + } + }, + { + "end": 240, + "raw": "0", + "start": 239, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, "suffix": "None" } } - } - ], - "start": 205, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 241, + "start": 232, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "end": 275, - "name": "exampleSketch", - "start": 262, - "type": "Identifier", - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "instances" + }, + "arg": { + "end": 258, + "raw": "7", + "start": 257, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "distance" + }, + "arg": { + "end": 274, + "raw": "6", + "start": 273, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + } } ], "callee": { @@ -448,15 +422,22 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl "start": 189, "type": "Identifier" }, - "end": 276, + "end": 277, "start": 189, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "end": 221, + "name": "exampleSketch", + "start": 208, + "type": "Identifier", + "type": "Identifier" + } }, "start": 180, "type": "VariableDeclarator" }, - "end": 276, + "end": 277, "kind": "const", "start": 180, "type": "VariableDeclaration", @@ -464,241 +445,213 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl }, { "declaration": { - "end": 430, + "end": 432, "id": { - "end": 284, + "end": 285, "name": "pattn2", - "start": 278, + "start": 279, "type": "Identifier" }, "init": { "arguments": [ { - "end": 421, - "properties": [ - { - "end": 325, - "key": { - "end": 313, - "name": "axis", - "start": 309, - "type": "Identifier" - }, - "start": 309, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "end": 318, - "raw": "0", - "start": 317, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 321, - "raw": "0", - "start": 320, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 324, - "raw": "1", - "start": 323, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - } - ], - "end": 325, - "start": 316, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 353, - "key": { - "end": 335, - "name": "center", - "start": 329, - "type": "Identifier" - }, - "start": 329, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "argument": { - "end": 342, - "raw": "20", - "start": 340, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" - } - }, - "end": 342, - "operator": "-", - "start": 339, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { - "end": 347, - "raw": "20", - "start": 345, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" - } - }, - "end": 347, - "operator": "-", - "start": 344, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { - "end": 352, - "raw": "20", - "start": 350, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" - } - }, - "end": 352, - "operator": "-", - "start": 349, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 353, - "start": 338, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 371, - "key": { - "end": 366, - "name": "instances", - "start": 357, - "type": "Identifier" - }, - "start": 357, - "type": "ObjectProperty", - "value": { - "end": 371, - "raw": "41", - "start": 369, + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "axis" + }, + "arg": { + "elements": [ + { + "end": 328, + "raw": "0", + "start": 327, "type": "Literal", "type": "Literal", "value": { - "value": 41.0, + "value": 0.0, "suffix": "None" } - } - }, - { - "end": 391, - "key": { - "end": 385, - "name": "arcDegrees", - "start": 375, - "type": "Identifier" }, - "start": 375, - "type": "ObjectProperty", - "value": { - "end": 391, - "raw": "360", - "start": 388, + { + "end": 331, + "raw": "0", + "start": 330, "type": "Literal", "type": "Literal", "value": { - "value": 360.0, + "value": 0.0, + "suffix": "None" + } + }, + { + "end": 334, + "raw": "1", + "start": 333, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, "suffix": "None" } } - }, - { - "end": 419, - "key": { - "end": 411, - "name": "rotateDuplicates", - "start": 395, - "type": "Identifier" - }, - "start": 395, - "type": "ObjectProperty", - "value": { - "end": 419, - "raw": "false", - "start": 414, - "type": "Literal", - "type": "Literal", - "value": false - } - } - ], - "start": 305, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 335, + "start": 326, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "end": 429, - "name": "pattn1", - "start": 423, - "type": "Identifier", - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "center" + }, + "arg": { + "elements": [ + { + "argument": { + "end": 352, + "raw": "20", + "start": 350, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } + }, + "end": 352, + "operator": "-", + "start": 349, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "end": 357, + "raw": "20", + "start": 355, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } + }, + "end": 357, + "operator": "-", + "start": 354, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "end": 362, + "raw": "20", + "start": 360, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } + }, + "end": 362, + "operator": "-", + "start": 359, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 363, + "start": 348, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "instances" + }, + "arg": { + "end": 381, + "raw": "41", + "start": 379, + "type": "Literal", + "type": "Literal", + "value": { + "value": 41.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "arcDegrees" + }, + "arg": { + "end": 401, + "raw": "360", + "start": 398, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "rotateDuplicates" + }, + "arg": { + "end": 429, + "raw": "false", + "start": 424, + "type": "Literal", + "type": "Literal", + "value": false + } } ], "callee": { - "end": 304, + "end": 305, "name": "patternCircular3d", - "start": 287, + "start": 288, "type": "Identifier" }, - "end": 430, - "start": 287, - "type": "CallExpression", - "type": "CallExpression" + "end": 432, + "start": 288, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "end": 315, + "name": "pattn1", + "start": 309, + "type": "Identifier", + "type": "Identifier" + } }, - "start": 278, + "start": 279, "type": "VariableDeclarator" }, - "end": 430, + "end": 432, "kind": "const", - "start": 278, + "start": 279, "type": "VariableDeclaration", "type": "VariableDeclaration" } ], - "end": 431, + "end": 433, "nonCodeMeta": { "nonCodeNodes": { "0": [ @@ -713,8 +666,8 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl ], "1": [ { - "end": 278, - "start": 276, + "end": 279, + "start": 277, "type": "NonCodeNode", "value": { "type": "newLine" diff --git a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/input.kcl b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/input.kcl index 17e165013..cece9fa3f 100644 --- a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/input.kcl +++ b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/input.kcl @@ -6,16 +6,18 @@ exampleSketch = startSketchOn('XZ') |> close(%) |> extrude(length = 1) -pattn1 = patternLinear3d({ +pattn1 = patternLinear3d( + exampleSketch, axis = [1, 0, 0], instances = 7, - distance = 6 -}, exampleSketch) + distance = 6, +) -pattn2 = patternCircular3d({ +pattn2 = patternCircular3d( + pattn1, axis = [0, 0, 1], center = [-20, -20, -20], instances = 41, arcDegrees = 360, - rotateDuplicates = false -}, pattn1) + rotateDuplicates = false, +) diff --git a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ops.snap b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ops.snap index 6e7fdda94..bd4cf3be4 100644 --- a/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ops.snap +++ b/src/wasm-lib/kcl/tests/circular_pattern3d_a_pattern/ops.snap @@ -44,17 +44,24 @@ snapshot_kind: text }, { "labeledArgs": { - "data": { + "axis": { "sourceRange": [ - 205, - 260, + 232, + 241, 0 ] }, - "solid_set": { + "distance": { "sourceRange": [ - 262, - 275, + 273, + 274, + 0 + ] + }, + "instances": { + "sourceRange": [ + 257, + 258, 0 ] } @@ -62,24 +69,51 @@ snapshot_kind: text "name": "patternLinear3d", "sourceRange": [ 189, - 276, + 277, 0 ], "type": "StdLibCall", - "unlabeledArg": null + "unlabeledArg": { + "sourceRange": [ + 208, + 221, + 0 + ] + } }, { "labeledArgs": { - "data": { + "arcDegrees": { "sourceRange": [ - 305, - 421, + 398, + 401, 0 ] }, - "solid_set": { + "axis": { "sourceRange": [ - 423, + 326, + 335, + 0 + ] + }, + "center": { + "sourceRange": [ + 348, + 363, + 0 + ] + }, + "instances": { + "sourceRange": [ + 379, + 381, + 0 + ] + }, + "rotateDuplicates": { + "sourceRange": [ + 424, 429, 0 ] @@ -87,11 +121,17 @@ snapshot_kind: text }, "name": "patternCircular3d", "sourceRange": [ - 287, - 430, + 288, + 432, 0 ], "type": "StdLibCall", - "unlabeledArg": null + "unlabeledArg": { + "sourceRange": [ + 309, + 315, + 0 + ] + } } ] diff --git a/src/wasm-lib/kcl/tests/helix_simple/artifact_commands.snap b/src/wasm-lib/kcl/tests/helix_simple/artifact_commands.snap index adab25f88..e584f81f9 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/artifact_commands.snap +++ b/src/wasm-lib/kcl/tests/helix_simple/artifact_commands.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Artifact commands helix_simple.kcl +snapshot_kind: text --- [ { @@ -383,7 +384,7 @@ description: Artifact commands helix_simple.kcl "cmdId": "[uuid]", "range": [ 151, - 242, + 257, 0 ], "command": { diff --git a/src/wasm-lib/kcl/tests/helix_simple/artifact_graph_flowchart.snap.md b/src/wasm-lib/kcl/tests/helix_simple/artifact_graph_flowchart.snap.md index 5ca288d88..f528cdc65 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/artifact_graph_flowchart.snap.md +++ b/src/wasm-lib/kcl/tests/helix_simple/artifact_graph_flowchart.snap.md @@ -5,7 +5,7 @@ flowchart LR 3["Segment
[102, 137, 0]"] end 1["Plane
[46, 65, 0]"] - 4["Helix
[151, 242, 0]"] + 4["Helix
[151, 257, 0]"] 1 --- 2 2 --- 3 3 <--x 4 diff --git a/src/wasm-lib/kcl/tests/helix_simple/ast.snap b/src/wasm-lib/kcl/tests/helix_simple/ast.snap index 8009aab8a..2ea9b916f 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/ast.snap +++ b/src/wasm-lib/kcl/tests/helix_simple/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing helix_simple.kcl +snapshot_kind: text --- { "Ok": { @@ -171,7 +172,7 @@ description: Result of parsing helix_simple.kcl }, { "declaration": { - "end": 242, + "end": 257, "id": { "end": 148, "name": "helixPath", @@ -187,9 +188,9 @@ description: Result of parsing helix_simple.kcl "name": "angleStart" }, "arg": { - "end": 171, + "end": 174, "raw": "0", - "start": 170, + "start": 173, "type": "Literal", "type": "Literal", "value": { @@ -205,9 +206,9 @@ description: Result of parsing helix_simple.kcl "name": "ccw" }, "arg": { - "end": 183, + "end": 188, "raw": "true", - "start": 179, + "start": 184, "type": "Literal", "type": "Literal", "value": true @@ -220,9 +221,9 @@ description: Result of parsing helix_simple.kcl "name": "revolutions" }, "arg": { - "end": 200, + "end": 207, "raw": "5", - "start": 199, + "start": 206, "type": "Literal", "type": "Literal", "value": { @@ -238,9 +239,9 @@ description: Result of parsing helix_simple.kcl "name": "length" }, "arg": { - "end": 213, + "end": 222, "raw": "10", - "start": 211, + "start": 220, "type": "Literal", "type": "Literal", "value": { @@ -256,9 +257,9 @@ description: Result of parsing helix_simple.kcl "name": "radius" }, "arg": { - "end": 225, + "end": 236, "raw": "5", - "start": 224, + "start": 235, "type": "Literal", "type": "Literal", "value": { @@ -274,9 +275,9 @@ description: Result of parsing helix_simple.kcl "name": "axis" }, "arg": { - "end": 241, + "end": 254, "name": "edge001", - "start": 234, + "start": 247, "type": "Identifier", "type": "Identifier" } @@ -288,7 +289,7 @@ description: Result of parsing helix_simple.kcl "start": 151, "type": "Identifier" }, - "end": 242, + "end": 257, "start": 151, "type": "CallExpressionKw", "type": "CallExpressionKw", @@ -297,14 +298,14 @@ description: Result of parsing helix_simple.kcl "start": 139, "type": "VariableDeclarator" }, - "end": 242, + "end": 257, "kind": "const", "start": 139, "type": "VariableDeclaration", "type": "VariableDeclaration" } ], - "end": 243, + "end": 258, "nonCodeMeta": { "nonCodeNodes": { "0": [ diff --git a/src/wasm-lib/kcl/tests/helix_simple/input.kcl b/src/wasm-lib/kcl/tests/helix_simple/input.kcl index f732df7a0..b0c9b9c67 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/input.kcl +++ b/src/wasm-lib/kcl/tests/helix_simple/input.kcl @@ -3,4 +3,11 @@ helper001 = startSketchOn('XZ') |> startProfileAt([0, 0], %) |> line(end = [0, 10], tag = $edge001) -helixPath = helix(angleStart = 0, ccw = true, revolutions = 5, length = 10, radius = 5, axis = edge001) +helixPath = helix( + angleStart = 0, + ccw = true, + revolutions = 5, + length = 10, + radius = 5, + axis = edge001, +) diff --git a/src/wasm-lib/kcl/tests/helix_simple/ops.snap b/src/wasm-lib/kcl/tests/helix_simple/ops.snap index 9ac61969f..f39cb68a4 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/ops.snap +++ b/src/wasm-lib/kcl/tests/helix_simple/ops.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Operations executed helix_simple.kcl +snapshot_kind: text --- [ { @@ -26,43 +27,43 @@ description: Operations executed helix_simple.kcl "labeledArgs": { "angleStart": { "sourceRange": [ - 170, - 171, + 173, + 174, 0 ] }, "axis": { "sourceRange": [ - 234, - 241, + 247, + 254, 0 ] }, "ccw": { "sourceRange": [ - 179, - 183, + 184, + 188, 0 ] }, "length": { "sourceRange": [ - 211, - 213, + 220, + 222, 0 ] }, "radius": { "sourceRange": [ - 224, - 225, + 235, + 236, 0 ] }, "revolutions": { "sourceRange": [ - 199, - 200, + 206, + 207, 0 ] } @@ -70,7 +71,7 @@ description: Operations executed helix_simple.kcl "name": "helix", "sourceRange": [ 151, - 242, + 257, 0 ], "type": "StdLibCall", diff --git a/src/wasm-lib/kcl/tests/helix_simple/program_memory.snap b/src/wasm-lib/kcl/tests/helix_simple/program_memory.snap index da1672d2b..60dbc4f70 100644 --- a/src/wasm-lib/kcl/tests/helix_simple/program_memory.snap +++ b/src/wasm-lib/kcl/tests/helix_simple/program_memory.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Program memory after executing helix_simple.kcl +snapshot_kind: text --- { "environments": [ @@ -86,7 +87,7 @@ description: Program memory after executing helix_simple.kcl { "sourceRange": [ 151, - 242, + 257, 0 ] } diff --git a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/artifact_commands.snap b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/artifact_commands.snap index c0383fa05..a7e0460ed 100644 --- a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/artifact_commands.snap +++ b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/artifact_commands.snap @@ -631,7 +631,7 @@ snapshot_kind: text "cmdId": "[uuid]", "range": [ 189, - 276, + 277, 0 ], "command": { @@ -819,8 +819,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1008,8 +1008,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1197,8 +1197,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1386,8 +1386,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1575,8 +1575,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1764,8 +1764,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { @@ -1953,8 +1953,8 @@ snapshot_kind: text { "cmdId": "[uuid]", "range": [ - 287, - 367, + 288, + 369, 0 ], "command": { diff --git a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ast.snap b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ast.snap index 809bafb06..74abbcb12 100644 --- a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ast.snap +++ b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing linear_pattern3d_a_pattern.kcl +snapshot_kind: text --- { "Ok": { @@ -321,7 +322,7 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl }, { "declaration": { - "end": 276, + "end": 277, "id": { "end": 186, "name": "pattn1", @@ -331,115 +332,88 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl "init": { "arguments": [ { - "end": 260, - "properties": [ - { - "end": 225, - "key": { - "end": 213, - "name": "axis", - "start": 209, - "type": "Identifier" - }, - "start": 209, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "end": 218, - "raw": "1", - "start": 217, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "end": 221, - "raw": "0", - "start": 220, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 224, - "raw": "0", - "start": 223, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 225, - "start": 216, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 242, - "key": { - "end": 238, - "name": "instances", - "start": 229, - "type": "Identifier" - }, - "start": 229, - "type": "ObjectProperty", - "value": { - "end": 242, - "raw": "7", - "start": 241, + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "axis" + }, + "arg": { + "elements": [ + { + "end": 234, + "raw": "1", + "start": 233, "type": "Literal", "type": "Literal", "value": { - "value": 7.0, + "value": 1.0, "suffix": "None" } - } - }, - { - "end": 258, - "key": { - "end": 254, - "name": "distance", - "start": 246, - "type": "Identifier" }, - "start": 246, - "type": "ObjectProperty", - "value": { - "end": 258, - "raw": "6", - "start": 257, + { + "end": 237, + "raw": "0", + "start": 236, "type": "Literal", "type": "Literal", "value": { - "value": 6.0, + "value": 0.0, + "suffix": "None" + } + }, + { + "end": 240, + "raw": "0", + "start": 239, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, "suffix": "None" } } - } - ], - "start": 205, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 241, + "start": 232, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "end": 275, - "name": "exampleSketch", - "start": 262, - "type": "Identifier", - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "instances" + }, + "arg": { + "end": 258, + "raw": "7", + "start": 257, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "distance" + }, + "arg": { + "end": 274, + "raw": "6", + "start": 273, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + } } ], "callee": { @@ -448,15 +422,22 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl "start": 189, "type": "Identifier" }, - "end": 276, + "end": 277, "start": 189, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "end": 221, + "name": "exampleSketch", + "start": 208, + "type": "Identifier", + "type": "Identifier" + } }, "start": 180, "type": "VariableDeclarator" }, - "end": 276, + "end": 277, "kind": "const", "start": 180, "type": "VariableDeclaration", @@ -464,84 +445,49 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl }, { "declaration": { - "end": 367, + "end": 369, "id": { - "end": 284, + "end": 285, "name": "pattn2", - "start": 278, + "start": 279, "type": "Identifier" }, "init": { "arguments": [ { - "end": 358, - "properties": [ - { - "end": 323, - "key": { - "end": 311, - "name": "axis", - "start": 307, - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "axis" + }, + "arg": { + "elements": [ + { + "end": 326, + "raw": "0", + "start": 325, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } }, - "start": 307, - "type": "ObjectProperty", - "value": { - "elements": [ - { - "end": 316, - "raw": "0", - "start": 315, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 319, - "raw": "0", - "start": 318, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "end": 322, - "raw": "1", - "start": 321, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - } - ], - "end": 323, - "start": 314, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "end": 339, - "key": { - "end": 335, - "name": "distance", - "start": 327, - "type": "Identifier" + { + "end": 329, + "raw": "0", + "start": 328, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } }, - "start": 327, - "type": "ObjectProperty", - "value": { - "end": 339, + { + "end": 332, "raw": "1", - "start": 338, + "start": 331, "type": "Literal", "type": "Literal", "value": { @@ -549,64 +495,79 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl "suffix": "None" } } - }, - { - "end": 356, - "key": { - "end": 352, - "name": "instances", - "start": 343, - "type": "Identifier" - }, - "start": 343, - "type": "ObjectProperty", - "value": { - "end": 356, - "raw": "7", - "start": 355, - "type": "Literal", - "type": "Literal", - "value": { - "value": 7.0, - "suffix": "None" - } - } - } - ], - "start": 303, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 333, + "start": 324, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "end": 366, - "name": "pattn1", - "start": 360, - "type": "Identifier", - "type": "Identifier" + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "distance" + }, + "arg": { + "end": 349, + "raw": "1", + "start": 348, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "type": "Identifier", + "name": "instances" + }, + "arg": { + "end": 366, + "raw": "7", + "start": 365, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + } } ], "callee": { - "end": 302, + "end": 303, "name": "patternLinear3d", - "start": 287, + "start": 288, "type": "Identifier" }, - "end": 367, - "start": 287, - "type": "CallExpression", - "type": "CallExpression" + "end": 369, + "start": 288, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "end": 313, + "name": "pattn1", + "start": 307, + "type": "Identifier", + "type": "Identifier" + } }, - "start": 278, + "start": 279, "type": "VariableDeclarator" }, - "end": 367, + "end": 369, "kind": "const", - "start": 278, + "start": 279, "type": "VariableDeclaration", "type": "VariableDeclaration" } ], - "end": 368, + "end": 370, "nonCodeMeta": { "nonCodeNodes": { "0": [ @@ -621,8 +582,8 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl ], "1": [ { - "end": 278, - "start": 276, + "end": 279, + "start": 277, "type": "NonCodeNode", "value": { "type": "newLine" diff --git a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/input.kcl b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/input.kcl index 42acbe8d9..827fa105c 100644 --- a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/input.kcl +++ b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/input.kcl @@ -6,14 +6,16 @@ exampleSketch = startSketchOn('XZ') |> close(%) |> extrude(length = 1) -pattn1 = patternLinear3d({ +pattn1 = patternLinear3d( + exampleSketch, axis = [1, 0, 0], instances = 7, - distance = 6 -}, exampleSketch) + distance = 6, +) -pattn2 = patternLinear3d({ +pattn2 = patternLinear3d( + pattn1, axis = [0, 0, 1], distance = 1, - instances = 7 -}, pattn1) + instances = 7, +) diff --git a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ops.snap b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ops.snap index 126c98587..5f7598f9b 100644 --- a/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ops.snap +++ b/src/wasm-lib/kcl/tests/linear_pattern3d_a_pattern/ops.snap @@ -44,17 +44,24 @@ snapshot_kind: text }, { "labeledArgs": { - "data": { + "axis": { "sourceRange": [ - 205, - 260, + 232, + 241, 0 ] }, - "solid_set": { + "distance": { "sourceRange": [ - 262, - 275, + 273, + 274, + 0 + ] + }, + "instances": { + "sourceRange": [ + 257, + 258, 0 ] } @@ -62,24 +69,37 @@ snapshot_kind: text "name": "patternLinear3d", "sourceRange": [ 189, - 276, + 277, 0 ], "type": "StdLibCall", - "unlabeledArg": null + "unlabeledArg": { + "sourceRange": [ + 208, + 221, + 0 + ] + } }, { "labeledArgs": { - "data": { + "axis": { "sourceRange": [ - 303, - 358, + 324, + 333, 0 ] }, - "solid_set": { + "distance": { "sourceRange": [ - 360, + 348, + 349, + 0 + ] + }, + "instances": { + "sourceRange": [ + 365, 366, 0 ] @@ -87,11 +107,17 @@ snapshot_kind: text }, "name": "patternLinear3d", "sourceRange": [ - 287, - 367, + 288, + 369, 0 ], "type": "StdLibCall", - "unlabeledArg": null + "unlabeledArg": { + "sourceRange": [ + 307, + 313, + 0 + ] + } } ] diff --git a/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times-different-order/ast.snap b/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times-different-order/ast.snap index cd5ca055a..e5781ae0b 100644 --- a/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times-different-order/ast.snap +++ b/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times-different-order/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl +snapshot_kind: text --- { "Ok": { diff --git a/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times/ast.snap b/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times/ast.snap index bfb23a01e..8b5acc3b6 100644 --- a/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times/ast.snap +++ b/src/wasm-lib/kcl/tests/sketch-on-chamfer-two-times/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing sketch-on-chamfer-two-times.kcl +snapshot_kind: text --- { "Ok": { diff --git a/src/wasm-lib/kcl/tests/sketch_on_face_after_fillets_referencing_face/ast.snap b/src/wasm-lib/kcl/tests/sketch_on_face_after_fillets_referencing_face/ast.snap index dfe3de20e..894dce68b 100644 --- a/src/wasm-lib/kcl/tests/sketch_on_face_after_fillets_referencing_face/ast.snap +++ b/src/wasm-lib/kcl/tests/sketch_on_face_after_fillets_referencing_face/ast.snap @@ -1,6 +1,7 @@ --- source: kcl/src/simulation_tests.rs description: Result of parsing sketch_on_face_after_fillets_referencing_face.kcl +snapshot_kind: text --- { "Ok": { diff --git a/src/wasm-lib/tests/executor/inputs/circular_pattern3d_a_pattern.kcl b/src/wasm-lib/tests/executor/inputs/circular_pattern3d_a_pattern.kcl index 51af9414e..cdf86f94c 100644 --- a/src/wasm-lib/tests/executor/inputs/circular_pattern3d_a_pattern.kcl +++ b/src/wasm-lib/tests/executor/inputs/circular_pattern3d_a_pattern.kcl @@ -6,10 +6,18 @@ exampleSketch = startSketchOn('XZ') |> close() |> extrude(length = 1) -pattn1 = patternLinear3d({ - axis: [1, 0, 0], - instances: 7, - distance: 6 - }, exampleSketch) +pattn1 = patternLinear3d( + exampleSketch, + axis = [1, 0, 0], + instances = 7, + distance = 6, +) -pattn2 = patternCircular3d({axis: [0,0, 1], center: [-20, -20, -20], instances: 41, arcDegrees: 360, rotateDuplicates: false}, pattn1) +pattn2 = patternCircular3d( + pattn1, + axis = [0,0, 1], + center = [-20, -20, -20], + instances = 41, + arcDegrees = 360, + rotateDuplicates = false, +) diff --git a/src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl b/src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl index f5d70f614..419951393 100644 --- a/src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl +++ b/src/wasm-lib/tests/executor/inputs/focusrite_scarlett_mounting_braket.kcl @@ -95,11 +95,11 @@ const tabsR = startSketchOn(tabPlane) getNextAdjacentEdge(edge13) ] }, %) - |> patternLinear3d({ - axis: [0, -1, 0], - instances: 2, - distance: length + 2 * thk - (tabLength * 4 / 3) - }, %) + |> patternLinear3d( + axis = [0, -1, 0], + instances = 2, + distance = length + 2 * thk - (tabLength * 4 / 3) + ) // build the tabs of the mounting bracket (left side) const tabsL = startSketchOn(tabPlane) @@ -123,11 +123,11 @@ const tabsL = startSketchOn(tabPlane) getNextAdjacentEdge(edge22) ] }, %) - |> patternLinear3d({ - axis: [0, -1, 0], - instances: 2, - distance: length + 2 * thk - (tabLength * 4 / 3) - }, %) + |> patternLinear3d( + axis = [0, -1, 0], + instances = 2, + distance = length + 2 * thk - (tabLength * 4 / 3) + ) // define a plane for retention bumps const retPlane = { diff --git a/src/wasm-lib/tests/executor/inputs/global-tags.kcl b/src/wasm-lib/tests/executor/inputs/global-tags.kcl index a902cdcdd..c8c8d4167 100644 --- a/src/wasm-lib/tests/executor/inputs/global-tags.kcl +++ b/src/wasm-lib/tests/executor/inputs/global-tags.kcl @@ -95,11 +95,11 @@ const tabsR = startSketchOn(tabPlane) getNextAdjacentEdge(edge11) ] }, %) - |> patternLinear3d({ - axis: [0, -1, 0], - instances: 2, - distance: length + 2 * thk - (tabLength * 4 / 3) - }, %) + |> patternLinear3d( + axis = [0, -1, 0], + instances = 2, + distance = length + 2 * thk - (tabLength * 4 / 3) + ) // build the tabs of the mounting bracket (left side) const tabsL = startSketchOn(tabPlane) @@ -123,11 +123,11 @@ const tabsL = startSketchOn(tabPlane) getNextAdjacentEdge(edge22) ] }, %) - |> patternLinear3d({ - axis: [0, -1, 0], - instances: 2, - distance: length + 2 * thk - (tabLength * 4 / 3) - }, %) + |> patternLinear3d( + axis = [0, -1, 0], + instances = 2, + distance = length + 2 * thk - (tabLength * 4 / 3) + ) // define a plane for retention bumps const retPlane = { diff --git a/src/wasm-lib/tests/executor/inputs/lego.kcl b/src/wasm-lib/tests/executor/inputs/lego.kcl index 5d2c3d6c8..684e6bcbb 100644 --- a/src/wasm-lib/tests/executor/inputs/lego.kcl +++ b/src/wasm-lib/tests/executor/inputs/lego.kcl @@ -43,14 +43,14 @@ const peg = startSketchOn(s, "end") -(total_width / 2 - wSegments), -(total_length / 2 - lSegments) ], radius: bumpDiam / 2 }, %) - |> patternLinear2d({ - axis: [1, 0], - instances: 6, - distance: 7 - }, %) - |> patternLinear2d({ - axis: [0, 1], - instances: 10, - distance: 7 - }, %) + |> patternLinear2d( + axis = [1, 0], + instances = 6, + distance = 7 + ) + |> patternLinear2d( + axis = [0, 1], + instances = 10, + distance = 7 + ) |> extrude(length = bumpHeight) diff --git a/src/wasm-lib/tests/executor/inputs/linear_pattern3d_a_pattern.kcl b/src/wasm-lib/tests/executor/inputs/linear_pattern3d_a_pattern.kcl index 2e913a021..6c8b37146 100644 --- a/src/wasm-lib/tests/executor/inputs/linear_pattern3d_a_pattern.kcl +++ b/src/wasm-lib/tests/executor/inputs/linear_pattern3d_a_pattern.kcl @@ -6,14 +6,16 @@ exampleSketch = startSketchOn('XZ') |> close() |> extrude(length = 1) -pattn1 = patternLinear3d({ - axis: [1, 0, 0], - instances: 7, - distance: 6 - }, exampleSketch) +pattn1 = patternLinear3d( + exampleSketch, + axis = [1, 0, 0], + instances = 7, + distance = 6 +) -pattn2 = patternLinear3d({ - axis: [0, 0, 1], - distance: 1, - instances: 7 - }, pattn1) +pattn2 = patternLinear3d( + pattn1, + axis = [0, 0, 1], + distance = 1, + instances = 7 +) diff --git a/src/wasm-lib/tests/executor/inputs/server-rack-heavy.kcl b/src/wasm-lib/tests/executor/inputs/server-rack-heavy.kcl index 909b6f600..163398631 100644 --- a/src/wasm-lib/tests/executor/inputs/server-rack-heavy.kcl +++ b/src/wasm-lib/tests/executor/inputs/server-rack-heavy.kcl @@ -710,11 +710,11 @@ const sketch004fl = startSketchOn(extrude002fl, 'START') ], %, $rectangleSegmentC003fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude004fl = extrude(sketch004fl, length = -thickness) // EIA-310-D standard hole pattern @@ -731,11 +731,11 @@ const sketch005fl = startSketchOn(extrude002fl, 'START') ], %, $rectangleSegmentC004fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude005fl = extrude(sketch005fl, length = -thickness) // EIA-310-D standard hole pattern @@ -755,11 +755,11 @@ const sketch006fl = startSketchOn(extrude002fl, 'START') ], %, $rectangleSegmentC005fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude006fl = extrude(sketch006fl, length = -thickness) // EIA-310-D standard hole pattern @@ -776,11 +776,11 @@ const sketch007fl = startSketchOn(extrude001fl, 'START') ], %, $rectangleSegmentC006fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude007fl = extrude(sketch007fl, length = -thickness) // EIA-310-D standard hole pattern @@ -797,11 +797,11 @@ const sketch008fl = startSketchOn(extrude001fl, 'START') ], %, $rectangleSegmentC007fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude008fl = extrude(sketch008fl, length = -thickness) // EIA-310-D standard hole pattern @@ -821,11 +821,11 @@ const sketch009fl = startSketchOn(extrude001fl, 'START') ], %, $rectangleSegmentC008fl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude009fl = extrude(sketch009fl, length = -thickness) // define slots @@ -839,11 +839,11 @@ const sketch010fl = startSketchOn(extrude001fl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010fl = extrude(sketch010fl, length = -thickness) // define slots @@ -877,11 +877,11 @@ const sketch012fl = startSketchOn(extrude001fl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012fl = extrude(sketch012fl, length = -thickness) // FRONT RIGHT VERTICAL RAIL @@ -992,11 +992,11 @@ const sketch004fr = startSketchOn(extrude002fr, 'START') ], %, $rectangleSegmentC003fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude004fr = extrude(sketch004fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1016,11 +1016,11 @@ const sketch005fr = startSketchOn(extrude002fr, 'START') ], %, $rectangleSegmentC004fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude005fr = extrude(sketch005fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1040,11 +1040,11 @@ const sketch006fr = startSketchOn(extrude002fr, 'START') ], %, $rectangleSegmentC005fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude006fr = extrude(sketch006fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1064,11 +1064,11 @@ const sketch007fr = startSketchOn(extrude001fr, 'START') ], %, $rectangleSegmentC006fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude007fr = extrude(sketch007fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1088,11 +1088,11 @@ const sketch008fr = startSketchOn(extrude001fr, 'START') ], %, $rectangleSegmentC007fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude008fr = extrude(sketch008fr, length = -thickness) // EIA-310-D standard hole pattern @@ -1112,11 +1112,11 @@ const sketch009fr = startSketchOn(extrude001fr, 'START') ], %, $rectangleSegmentC008fr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude009fr = extrude(sketch009fr, length = -thickness) // define slots @@ -1133,11 +1133,11 @@ const sketch010fr = startSketchOn(extrude001fr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010fr = extrude(sketch010fr, length = -thickness) // define slots @@ -1171,11 +1171,11 @@ const sketch012fr = startSketchOn(extrude001fr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012fr = extrude(sketch012fr, length = -thickness) // RIGHT REAR VERTICAL RAIL @@ -1286,11 +1286,11 @@ const sketch004rr = startSketchOn(extrude002rr, 'START') ], %, $rectangleSegmentC003rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude004rr = extrude(sketch004rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1310,11 +1310,11 @@ const sketch005rr = startSketchOn(extrude002rr, 'START') ], %, $rectangleSegmentC004rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude005rr = extrude(sketch005rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1334,11 +1334,11 @@ const sketch006rr = startSketchOn(extrude002rr, 'START') ], %, $rectangleSegmentC005rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude006rr = extrude(sketch006rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1358,11 +1358,11 @@ const sketch007rr = startSketchOn(extrude001rr, 'START') ], %, $rectangleSegmentC006rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude007rr = extrude(sketch007rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1382,11 +1382,11 @@ const sketch008rr = startSketchOn(extrude001rr, 'START') ], %, $rectangleSegmentC007rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude008rr = extrude(sketch008rr, length = -thickness) // EIA-310-D standard hole pattern @@ -1406,11 +1406,11 @@ const sketch009rr = startSketchOn(extrude001rr, 'START') ], %, $rectangleSegmentC008rr) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude009rr = extrude(sketch009rr, length = -thickness) // define slots @@ -1427,11 +1427,11 @@ const sketch010rr = startSketchOn(extrude001rr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010rr = extrude(sketch010rr, length = -thickness) // define slots @@ -1465,11 +1465,11 @@ const sketch012rr = startSketchOn(extrude001rr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012rr = extrude(sketch012rr, length = -thickness) // REAR LEFT VETCIAL RAIL @@ -1579,11 +1579,11 @@ const sketch004rl = startSketchOn(extrude002rl, 'START') ], %, $rectangleSegmentC003rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude004rl = extrude(sketch004rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1603,11 +1603,11 @@ const sketch005rl = startSketchOn(extrude002rl, 'START') ], %, $rectangleSegmentC004rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude005rl = extrude(sketch005rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1627,11 +1627,11 @@ const sketch006rl = startSketchOn(extrude002rl, 'START') ], %, $rectangleSegmentC005rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude006rl = extrude(sketch006rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1651,11 +1651,11 @@ const sketch007rl = startSketchOn(extrude001rl, 'START') ], %, $rectangleSegmentC006rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude007rl = extrude(sketch007rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1675,11 +1675,11 @@ const sketch008rl = startSketchOn(extrude001rl, 'START') ], %, $rectangleSegmentC007rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude008rl = extrude(sketch008rl, length = -thickness) // EIA-310-D standard hole pattern @@ -1699,11 +1699,11 @@ const sketch009rl = startSketchOn(extrude001rl, 'START') ], %, $rectangleSegmentC008rl) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: railHeight, - distance: 0.62 + 0.62 + 0.5 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = railHeight, + distance = 0.62 + 0.62 + 0.5 + ) const extrude009rl = extrude(sketch009rl, length = -thickness) // define slots @@ -1720,11 +1720,11 @@ const sketch010rl = startSketchOn(extrude001rl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010rl = extrude(sketch010rl, length = -thickness) // define slots @@ -1758,11 +1758,11 @@ const sketch012rl = startSketchOn(extrude001rl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012rl = extrude(sketch012rl, length = -thickness) // GENERATE SERVER MODELS diff --git a/src/wasm-lib/tests/executor/inputs/server-rack-lite.kcl b/src/wasm-lib/tests/executor/inputs/server-rack-lite.kcl index be802801e..10fb91363 100644 --- a/src/wasm-lib/tests/executor/inputs/server-rack-lite.kcl +++ b/src/wasm-lib/tests/executor/inputs/server-rack-lite.kcl @@ -719,11 +719,11 @@ const sketch010fl = startSketchOn(extrude001fl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010fl = extrude(sketch010fl, length = -thickness) // define slots @@ -757,11 +757,11 @@ const sketch012fl = startSketchOn(extrude001fl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012fl = extrude(sketch012fl, length = -thickness) // FRONT RIGHT VERTICAL RAIL @@ -869,11 +869,11 @@ const sketch010fr = startSketchOn(extrude001fr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010fr = extrude(sketch010fr, length = -thickness) // define slots @@ -907,11 +907,11 @@ const sketch012fr = startSketchOn(extrude001fr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012fr = extrude(sketch012fr, length = -thickness) // RIGHT REAR VERTICAL RAIL @@ -1019,11 +1019,11 @@ const sketch010rr = startSketchOn(extrude001rr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010rr = extrude(sketch010rr, length = -thickness) // define slots @@ -1057,11 +1057,11 @@ const sketch012rr = startSketchOn(extrude001rr, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012rr = extrude(sketch012rr, length = -thickness) // REAR LEFT VETCIAL RAIL @@ -1168,11 +1168,11 @@ const sketch010rl = startSketchOn(extrude001rl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, 1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, 1], + instances = 2, + distance = 1.22 + ) const extrude010rl = extrude(sketch010rl, length = -thickness) // define slots @@ -1206,11 +1206,11 @@ const sketch012rl = startSketchOn(extrude001rl, 'START') |> xLine(-0.75 + .438, %) |> tangentialArcTo([profileStartX(%), profileStartY(%)], %) |> close() - |> patternLinear2d({ - axis: [0, -1], - instances: 2, - distance: 1.22 - }, %) + |> patternLinear2d( + axis = [0, -1], + instances = 2, + distance = 1.22 + ) const extrude012rl = extrude(sketch012rl, length = -thickness) // Define planes so the server can be moved diff --git a/src/wasm-lib/tests/executor/inputs/slow_lego.kcl.tmpl b/src/wasm-lib/tests/executor/inputs/slow_lego.kcl.tmpl index 5a66d0d88..b71125392 100644 --- a/src/wasm-lib/tests/executor/inputs/slow_lego.kcl.tmpl +++ b/src/wasm-lib/tests/executor/inputs/slow_lego.kcl.tmpl @@ -66,16 +66,16 @@ const peg = startSketchOn(s, 'end') -(pitch*(wbumps-1)/2), -(pitch*(lbumps-1)/2) ], radius: bumpDiam / 2 }, %) - |> patternLinear2d({ - axis: [1, 0], - instances: wbumps, - distance: pitch - }, %) - |> patternLinear2d({ - axis: [0, 1], - instances: lbumps, - distance: pitch - }, %) + |> patternLinear2d( + axis = [1, 0], + instances = wbumps, + distance = pitch + ) + |> patternLinear2d( + axis = [0, 1], + instances = lbumps, + distance = pitch + ) |> extrude(bumpHeight, %) // |> patternTransform(int(totalBumps-1), tr, %) diff --git a/src/wasm-lib/tests/executor/main.rs b/src/wasm-lib/tests/executor/main.rs index b9b653e70..9e6f9c26a 100644 --- a/src/wasm-lib/tests/executor/main.rs +++ b/src/wasm-lib/tests/executor/main.rs @@ -348,7 +348,7 @@ async fn kcl_test_patterns_linear_basic_with_math() { distance = 5 part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternLinear2d({axis: [0,1], instances: num, distance: distance - 1}, %) + |> patternLinear2d(axis = [0,1], instances = num, distance = distance - 1) |> extrude(length = 1) "#; @@ -360,7 +360,7 @@ part = startSketchOn('XY') async fn kcl_test_patterns_linear_basic() { let code = r#"part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternLinear2d({axis: [0,1], instances: 13, distance: 4}, %) + |> patternLinear2d(axis = [0,1], instances = 13, distance = 4) |> extrude(length = 1) "#; @@ -377,7 +377,7 @@ async fn kcl_test_patterns_linear_basic_3d() { |> line(end = [0, -1]) |> close() |> extrude(length = 1) - |> patternLinear3d({axis: [1, 0, 1], instances: 4, distance: 6}, %) + |> patternLinear3d(axis = [1, 0, 1], instances = 4, distance = 6) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -388,7 +388,7 @@ async fn kcl_test_patterns_linear_basic_3d() { async fn kcl_test_patterns_linear_basic_negative_distance() { let code = r#"part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternLinear2d({axis: [0,1], instances: 13, distance: -2}, %) + |> patternLinear2d(axis = [0,1], instances = 13, distance = -2) |> extrude(length = 1) "#; @@ -400,7 +400,7 @@ async fn kcl_test_patterns_linear_basic_negative_distance() { async fn kcl_test_patterns_linear_basic_negative_axis() { let code = r#"part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternLinear2d({axis: [0,-1], instances: 13, distance: 2}, %) + |> patternLinear2d(axis = [0,-1], instances = 13, distance = 2) |> extrude(length = 1) "#; @@ -412,7 +412,7 @@ async fn kcl_test_patterns_linear_basic_negative_axis() { async fn kcl_test_patterns_linear_basic_holes() { let code = r#"circles = startSketchOn('XY') |> circle({ center: [5, 5], radius: 1 }, %) - |> patternLinear2d({axis: [1,1], instances: 13, distance: 3}, %) + |> patternLinear2d(axis = [1,1], instances = 13, distance = 3) rectangle = startSketchOn('XY') |> startProfileAt([0, 0], %) @@ -433,7 +433,7 @@ rectangle = startSketchOn('XY') async fn kcl_test_patterns_circular_basic_2d() { let code = r#"part = startSketchOn('XY') |> circle({ center: [0,0], radius: 2 }, %) - |> patternCircular2d({center: [20, 20], instances: 13, arcDegrees: 210, rotateDuplicates: true}, %) + |> patternCircular2d(center = [20, 20], instances = 13, arcDegrees = 210, rotateDuplicates = true) |> extrude(length = 1) "#; @@ -450,7 +450,7 @@ async fn kcl_test_patterns_circular_basic_3d() { |> line(end = [0, -1]) |> close() |> extrude(length = 1) - |> patternCircular3d({axis: [0,0, 1], center: [-20, -20, -20], instances: 41, arcDegrees: 360, rotateDuplicates: false}, %) + |> patternCircular3d(axis = [0,0, 1], center = [-20, -20, -20], instances = 41, arcDegrees = 360, rotateDuplicates = false) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -466,7 +466,7 @@ async fn kcl_test_patterns_circular_3d_tilted_axis() { |> line(end = [0, -1]) |> close() |> extrude(length = 1) - |> patternCircular3d({axis: [1,1,0], center: [10, 0, 10], instances: 11, arcDegrees: 360, rotateDuplicates: true}, %) + |> patternCircular3d(axis = [1,1,0], center = [10, 0, 10], instances = 11, arcDegrees = 360, rotateDuplicates = true) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -1417,11 +1417,12 @@ sketch002 = plane001 let extrudes = [sketch001, sketch002] -pattn1 = patternLinear3d({ - axis: [0, 1, 0], - instances: 3, - distance: 20 - }, extrudes) +pattn1 = patternLinear3d( + extrudes, + axis = [0, 1, 0], + instances = 3, + distance = 20 + ) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -1558,17 +1559,17 @@ async fn kcl_test_linear_pattern3d_filleted_sketch() { part001 = cube([0,0], 20) |> close(tag = $line1) |> extrude(length = 20) - |> fillet({ - radius: 10, - tags: [getOppositeEdge(line1)] - }, %) - -pattn1 = patternLinear3d({ - axis: [1, 0, 0], - instances: 4, - distance: 40 - }, part001) + |> fillet({ + radius: 10, + tags: [getOppositeEdge(line1)] + }, %) +pattn1 = patternLinear3d( + part001, + axis = [1, 0, 0], + instances = 4, + distance = 40 +) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -1594,7 +1595,7 @@ part001 = cube([0,0], 20) tags: [getOppositeEdge(line1)] }, %) -pattn2 = patternCircular3d({axis: [0,0, 1], center: [-20, -20, -20], instances: 5, arcDegrees: 360, rotateDuplicates: false}, part001) +pattn2 = patternCircular3d(part001, axis = [0,0, 1], center = [-20, -20, -20], instances = 5, arcDegrees = 360, rotateDuplicates = false) "#; @@ -1621,8 +1622,7 @@ part001 = cube([0,0], 20) tags: [getOppositeEdge(line1)] }, %) -pattn2 = patternCircular3d({axis: [0,0, 1], center: [-20, -20, -20], instances: 5, arcDegrees: 360, rotateDuplicates: false}, part001) - +pattn2 = patternCircular3d(part001, axis = [0,0, 1], center = [-20, -20, -20], instances = 5, arcDegrees = 360, rotateDuplicates = false) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await.unwrap(); @@ -1748,12 +1748,12 @@ async fn kcl_test_arc_error_same_start_end() { radius: 1.5 }, %) |> close() - |> patternCircular2d({ - arcDegrees: 360, - center: [0, 0], - instances: 6, - rotateDuplicates: true - }, %) + |> patternCircular2d( + arcDegrees = 360, + center = [0, 0], + instances = 6, + rotateDuplicates = true + ) "#; let result = execute_and_snapshot(code, UnitLength::Mm, None).await;