diff --git a/.devcontainer.json b/.devcontainer.json new file mode 100644 index 0000000..138650b --- /dev/null +++ b/.devcontainer.json @@ -0,0 +1,33 @@ +{ + "name": "Python3", + "image": "mcr.microsoft.com/devcontainers/python:3.11", + "postCreateCommand": "sudo apt update && sudo apt install -y libgtk-3-dev && pip install poetry", + "features": { + "ghcr.io/devcontainers/features/node:1": {} + }, + "customizations": { + "vscode": { + "settings": { + "python.defaultInterpreterPath": "/usr/local/bin/python", + "python.linting.enabled": false, + "python.linting.pylintEnabled": false, + "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", + "python.formatting.blackPath": "/usr/local/py-utils/bin/black", + "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", + "python.linting.banditPath": "/usr/local/py-utils/bin/bandit", + "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8", + "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", + "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", + "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", + "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint" + }, + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance", + "MS-vsliveshare.vsliveshare", + "ms-python.autopep8", + "svelte.svelte-vscode" + ] + } + } +} \ No newline at end of file diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml deleted file mode 100644 index 3ebcbde..0000000 --- a/.github/workflows/build.yaml +++ /dev/null @@ -1,67 +0,0 @@ -name: Build - -on: - push: - branches: - - 'develop' - -jobs: - build: - name: Build packages - runs-on: ${{ matrix.os }} - strategy: - matrix: - include: - - os: macos-latest - TARGET: macos - CMD_BUILD: > - pyinstaller -F -w -n ledeffect-simulator -p .. app.py && - cd dist/ && - zip -r9 ledeffect-simulator ledeffect-simulator.app - OUT_FILE_NAME: ledeffect-simulator.zip - ASSET_MIME: application/zip - POETRY_FOLDER: ~/.local - - os: windows-latest - TARGET: windows - CMD_BUILD: pyinstaller -F -w -n ledeffect-simulator -p .. app.py - OUT_FILE_NAME: ledeffect-simulator.exe - ASSET_MIME: application/vnd.microsoft.portable-executable - POETRY_FOLDER: C:\Users\runneradmin\.local - steps: - - uses: actions/checkout@v1 - - name: Set up Python 3.9 - uses: actions/setup-python@v4 - with: - python-version: 3.9 - #- name: cache poetry install - # uses: actions/cache@v3 - # with: - # path: ${{matrix.POETRY_FOLDER}} - # key: poetry-1.3.3-0 - - uses: snok/install-poetry@v1.3.3 - with: - virtualenvs-create: true - virtualenvs-in-project: true - - name: cache deps - id: cache-deps - uses: actions/cache@v3 - with: - path: simulator/.venv - key: pydeps-${{ hashFiles('**/poetry.lock') }} - - - name: Install environment - working-directory: ./simulator - run: ${{matrix.POETRY_FOLDER}}/bin/poetry install --no-interaction --no-root - if: steps.cache-deps.outputs.cache-hit != 'true' - - name: Install root environment - working-directory: ./simulator - run: ${{matrix.POETRY_FOLDER}}/bin/poetry install --no-interaction - - name: Build with pyinstaller for ${{matrix.TARGET}} - working-directory: ./simulator - run: ${{matrix.POETRY_FOLDER}}/bin/poetry run ${{matrix.CMD_BUILD}} - - name: Upload artifact - uses: actions/upload-artifact@v1.0.0 - with: - name: ledeffect-simulator_${{matrix.TARGET}} - path: simulator/dist/${{matrix.OUT_FILE_NAME}} - diff --git a/.github/workflows/build_pages.yaml b/.github/workflows/build_pages.yaml new file mode 100644 index 0000000..b5b7747 --- /dev/null +++ b/.github/workflows/build_pages.yaml @@ -0,0 +1,63 @@ +name: Build Pages +on: + push: + branches: + - main + +env: + PYTHON_VERSION: 3.x + NODE_VERSION: latest + +permissions: + contents: write + id-token: write + pages: write + +jobs: + pages: + runs-on: ubuntu-latest + steps: + + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Node runtime + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + cache-dependency-path: packages/web_simulator/package-lock.json + + - name: Install poetry + run: pip install poetry + + - name: Set up Python runtime + uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: poetry + + - name: Install python dependencies + run: | + cd ${{ github.workspace }}/packages/led_effect + poetry install + cd ${{ github.workspace }}/packages/klippermock + poetry install + + - name: Install node dependencies + working-directory: packages/web_simulator + run: npm ci + + - name: Build web_simulator + working-directory: packages/web_simulator + run: npm run build + + - name: Upload to GitHub Pages + uses: actions/upload-pages-artifact@v3 + with: + path: packages/web_simulator/dist/ + + - name: Deploy to GitHub Pages + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index 8a136f6..0000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,104 +0,0 @@ -name: Release - -on: - push: - tags: - - 'v*' - -jobs: - createrelease: - name: Create Release - runs-on: [ubuntu-latest] - steps: - - name: Create Release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} - draft: true - prerelease: true - - name: Output Release URL File - run: echo "${{ steps.create_release.outputs.upload_url }}" > release_url.txt - - name: Save Release URL File for publish - uses: actions/upload-artifact@v1 - with: - name: release_url - path: release_url.txt - - build: - name: Build packages - runs-on: ${{ matrix.os }} - strategy: - matrix: - include: - - os: macos-latest - TARGET: macos - CMD_BUILD: > - pyinstaller -F -w -n ledeffect-simulator-macos -p .. app.py && - cd dist/ && - zip -r9 ledeffect-simulator-macos ledeffect-simulator-macos.app - OUT_FILE_NAME: ledeffect-simulator-macos.zip - ASSET_MIME: application/zip - POETRY_FOLDER: ~/.local - - os: windows-latest - TARGET: windows - CMD_BUILD: pyinstaller -F -w -n ledeffect-simulator-win -p .. app.py - OUT_FILE_NAME: ledeffect-simulator-win.exe - ASSET_MIME: application/vnd.microsoft.portable-executable - POETRY_FOLDER: C:\Users\runneradmin\.local - steps: - - uses: actions/checkout@v1 - - name: Set up Python 3.9 - uses: actions/setup-python@v4 - with: - python-version: 3.9 - #- name: cache poetry install - # uses: actions/cache@v3 - # with: - # path: ${{matrix.POETRY_FOLDER}} - # key: poetry-1.3.3-0 - - uses: snok/install-poetry@v1.3.3 - with: - virtualenvs-create: true - virtualenvs-in-project: true - - name: cache deps - id: cache-deps - uses: actions/cache@v3 - with: - path: simulator/.venv - key: pydeps-${{ hashFiles('**/poetry.lock') }} - - - name: Install environment - working-directory: ./simulator - run: ${{matrix.POETRY_FOLDER}}/bin/poetry install --no-interaction --no-root - if: steps.cache-deps.outputs.cache-hit != 'true' - - name: Install root environment - working-directory: ./simulator - run: ${{matrix.POETRY_FOLDER}}/bin/poetry install --no-interaction - - name: Build with pyinstaller for ${{matrix.TARGET}} - working-directory: ./simulator - run: ${{matrix.POETRY_FOLDER}}/bin/poetry run ${{matrix.CMD_BUILD}} - - name: Load Release URL File from release job - uses: actions/download-artifact@v1 - with: - name: release_url - - name: Get Release File Name & Upload URL - id: get_release_info - shell: bash - run: | - value=`cat release_url/release_url.txt` - echo ::set-output name=upload_url::$value - - name: Upload Release Asset - id: upload-release-asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.get_release_info.outputs.upload_url }} - asset_path: simulator/dist/${{matrix.OUT_FILE_NAME}} - asset_name: ${{ matrix.OUT_FILE_NAME}} - asset_content_type: ${{ matrix.ASSET_MIME}} - diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..a7cf05c --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,31 @@ +name: Test + +on: + push: + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Install Poetry + uses: snok/install-poetry@v1 + - name: Install dependencies + working-directory: ./packages/led_effect + run: poetry install + - name: Run tests + working-directory: ./packages/led_effect + run: poetry run pytest -s -v + + klipper-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Execute Klipper Test + working-directory: ./packages/klipper_tests + run: ./run.sh diff --git a/.github/workflows/update_previews.yaml b/.github/workflows/update_previews.yaml new file mode 100644 index 0000000..9294261 --- /dev/null +++ b/.github/workflows/update_previews.yaml @@ -0,0 +1,55 @@ +name: Update Previews +on: + workflow_dispatch: + push: + paths: + - '*.md' + - 'docs/*.md' + - 'docs/**/*.md' + branches: + - main + +jobs: + update_previews: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Install Poetry + uses: snok/install-poetry@v1 + - name: Install dependencies + working-directory: ./packages/preview_generator + run: poetry install + - name: Delete all previews + working-directory: . + run: | + set -x + git rm -f preview_*.gif || true + git rm -f docs/preview_*.gif || true + git rm -f docs/**/preview_*.gif || true + - name: Update all previews + working-directory: ./packages/preview_generator + run: | + set -x + for i in $(ls $GITHUB_WORKSPACE/*.md $GITHUB_WORKSPACE/docs/**/*.md $GITHUB_WORKSPACE/docs/*.md); do + poetry run python markdown_generator.py --directory img "$i" + done + - name: Commit changes + working-directory: . + run: | + set -euxo pipefail + git config --global user.name "GitHub Actions" + git config --global user.email "githubactions@github.com" + git add preview_*.gif || true + git add *.md || true + git add docs/**/*.md || true + git add docs/**/preview_*.gif || true + git add docs/*.md || true + git add docs/preview_*.gif || true + git diff --staged --quiet && exit 0 || true + + git commit -m "chore(docs): Update previews" + git push origin HEAD:${GITHUB_REF} diff --git a/docs/LED_Effect.md b/docs/LED_Effect.md index 87efcb1..02a3681 100644 --- a/docs/LED_Effect.md +++ b/docs/LED_Effect.md @@ -179,35 +179,35 @@ to pass any parameters. ### Additional effect level parameters -autostart: true +`autostart: true` Starts the effect on startup -frame_rate: +`frame_rate: 24` Sets the frame rate in frames per second for the effect -run_on_error: +`run_on_error: true` (Needs patched MCU firmware. Currently not supported.) -recalculate: +`recalculate: true` Enable layer template recalculation on effect activation. -heater: -Specifies the heater to use for a heater effect. Use `extruder` for the +`heater: heater_bed` +Specifies the default heater to use for a heater effect. Use `extruder` for the extruder and `heater_bed` for the bed. For temperature fans or sensors add the type and use quotes. Example: `heater: "temperature_fan myfan"` -analog_pin: +`analog_pin` Specifies the pin to use for effects using an analog signal. -stepper: +`stepper: x` Specifies the axis to use for the stepper effect. Possible values are: -`x`, `y` and `z`. Example: `stepper: x` +`x`, `y` and `z`. -endstops: +`endstops: x, y` Specifies the endstops the homing effect triggers on. Multiple endstops can be specified as a comma seprated list. Possible values are: `x`, `y`, `z` and `probe`. -Example: `endstops: x, y` + ## Defining LEDs @@ -241,6 +241,7 @@ leds: ``` ## Defining Effect Layers + Effects are generated as frames. Each frame contains the number of pixels equal to the number of LEDs defined for the effect. So an effect with 22 LEDs specified would have 22 pixels per frame. @@ -262,39 +263,75 @@ Each layer is defined with the following parameters * Color palette Each layer must be on a single line and each line must be indented. + Color palettes can be of unlimited length but may be compressed depending -on the size of the frame or number of LEDs on a strip. Colors are defined -as groups of Red, Green, Blue and (optional) White. The white channel only used -on RGBW LEDs and ignored on RGB LEDs. The range for each color is a decimal -number from 0.0 to 1.0. So for yellow, you would use ( 1.0, 1.0, 0.0 ). For -white you would use ( 1.0, 1.0, 1.0 ) on an RGB LED or ( 0.0, 0.0, 0.0, 1.0 ) -on an RGBW LED. +on the size of the frame or number of LEDs on a strip. -Individual colors must be wrapped in parentheses and separated by commas. +Colors are defined +as groups of Red, Green, Blue and (optional) White. The white channel only used on RGBW LEDs and ignored on RGB LEDs. -Some Sample Palettes: - Rainbow (1.0, 0.0, 0.0),(0.0, 1.0, 0.0),(0.0, 0.0, 1.0) - Fire (0.0, 0.0, 0.0),(1.0, 0.0, 0.0),(1.0, 1.0, 0.0),(1.0, 1.0, 1.0) - Blue Comet (0.8, 1.0, 1.0),(0.0, 0.8, 1.0),(0.0, 0.0, 1.0) +``` +# White +(1.0, 1.0, 1.0) +(1.0, 1.0, 1.0, 1.0) +``` +A palette is a comma-separated list of colors, e.g. ``` -layers: - breathing .5 0 screen (0,.1,1), (0,1,.5), (0, 1,1), (0,.1,.5) - static 1 0 bottom (1,.1,0), (1,.1,0), (1,.1,0), (1,1,0) +(1.0, 0.0, 0.0),(0.0, 1.0, 0.0),(0.0, 0.0, 1.0) ``` -There are several effects to choose from. + +Some example palettes: + +#### Rainbow + +![Preview](./img/preview_1930266136.gif) + +```layers +static 0 0 top (1.0, 0.0, 0.0),(0.0, 1.0, 0.0),(0.0, 0.0, 1.0) +``` + +#### Fire +![Preview](./img/preview_2265218385.gif) + +```layers +static 0 0 top (0.0, 0.0, 0.0),(1.0, 0.0, 0.0),(1.0, 1.0, 0.0),(1.0, 1.0, 1.0) +``` + +#### Blue Comet +![Preview](./img/preview_3153431017.gif) + +```layers +static 0 0 top (0.8, 1.0, 1.0),(0.0, 0.8, 1.0),(0.0, 0.0, 1.0) +``` + +### Effects #### Static Effect Rate: Not used but must be provided Cutoff: Not used but must be provided Palette: Colors are blended evenly across the strip + A single color is displayed and it does not change. If a palette of multiple colors is provided, colors will be evenly blended along the LEDs based on difference in hue. +![Preview](./img/preview_3363524485.gif) + +```layers +static 1 1 top (1, 0, 0) +``` + +![Preview](./img/preview_2816099813.gif) + +```layers +static 1 1 top (1, 0, 0), (0, 1, 0), (0, 0, 1) +``` + + #### LinearFade - Effect Rate: 3 Duration of a complete cycle + Effect Rate: 3 Duration of a complete cycle (`duration`) Cutoff: 0 Not used but must be provided Palette: Colors are cycled in order @@ -302,8 +339,14 @@ LEDs fade through the colors. If a palette of multiple colors is provided, it will cycle through those colors in the order they are specified in the palette. The effect rate parameter controls how long it takes to go through all colors. +![Preview](./img/preview_76156085.gif) + +```layers +linearfade(duration=1) top (1, 0, 0), (0, 1, 0), (0, 0, 1) +``` + #### Breathing - Effect Rate: 3 Duration of a complete cycle + Effect Rate: 3 Duration of a complete cycle (`duration`) Cutoff: 0 Not used but must be provided Palette: Colors are cycled in order @@ -311,14 +354,27 @@ Colors fade in and out. If a palette of multiple colors is provided, it will cycle through those colors in the order they are specified in the palette. The effect rate parameter controls how long it takes to "breathe" one time. +![Preview](./img/preview_601725266.gif) + +```layers +breathing(duration=2) top (1, 0, 0), (0, 1, 0) +``` + #### Blink - Effect Rate: 1 Duration of a complete cycle - Cutoff: 0.5 Ratio of the time the LEDs are on (between 0 and 1) + Effect Rate: 1 Duration of a complete cycle (`duration`) + Cutoff: 0.5 Ratio of the time the LEDs are on (between 0 and 1) (`onRatio`) Palette: Colors are cycled in order LEDs are turned fully on and fully off based on the effect speed. If a palette of multiple colors is provided, it will cycle through those colors in order. +![Preview](./img/preview_1217852982.gif) + +```layers +blink(duration=2,onRatio=0.2) add (0, 1, 0), (0, 0, 1) +blink(duration=2,onRatio=0.2) top (1, 0, 0), (0, 0, 1) +``` + #### Strobe Effect Rate: 1 Number of times per second to strobe Cutoff: 1.5 Determines decay rate. A higher number yields quicker decay @@ -329,6 +385,13 @@ of multiple colors is provided, it will cycle through those colors in order. The effect rate controls how many times per second the lights will strobe. The cutoff parameter controls the decay rate. A good decay rate is 1.5. +![Preview](./img/preview_3716800298.gif) + +```layers +strobe(frequency=0.5,decayRate=0.1) top (1, 0, 0), (0, 0, 1) +``` + + #### Twinkle Effect Rate: 1 Increases the probability that an LED will illuminate. (0 = never, 254 = always) Cutoff: .25 Determines decay rate. A higher number yields quicker decay @@ -336,6 +399,12 @@ parameter controls the decay rate. A good decay rate is 1.5. Random flashes of light with decay along a strip. If a palette is specified, a random color is chosen from the palette. +![Preview](./img/preview_2493789555.gif) + +```layers +twinkle(probability=0.1,decayRate=0.01) top (0, 1, 0) +``` + #### Gradient Effect Rate: 1 How fast to cycle through the gradient, negative values change direction. Cutoff: 1 Number of gradients on chain @@ -348,6 +417,24 @@ length of the gradient in relation to the chain length. The bigger the value, the shorter the gradient (e.g. the value 2 means 2 gradients on the length of the chain) +![Preview](./img/preview_1586185426.gif) + +```layers +gradient(speed=1,count=1) top (1, 0, 0), (0, 1, 1) +``` + +![Preview](./img/preview_1470351146.gif) + +```layers +gradient(speed=1,count=1,colorSpace=hsl) top (1, 0, 0), (0, 1, 1) +``` + +![Preview](./img/preview_2814848066.gif) + +```layers +gradient(speed=1,count=1,colorSpace=none) top (1, 0, 0), (0, 1, 1) +``` + #### Pattern Effect Rate: 1 Time between pattern shifts Cutoff: 1 How far the pattern gets shifted @@ -356,6 +443,13 @@ The palette is applied as a recurring pattern on the chain and shifted along the chain. The effect rate determines the time between the shifts in seconds, the cutoff determines the amount of LED positions the pattern gets shifted. +![Preview](./img/preview_932030757.gif) + +```layers +pattern(duration=2,shift=1) top (1, 0, 0), (0, 1, 1) +``` + + #### Comet Effect Rate: 1 How fast the comet moves, negative values change direction Cutoff: 1 Length of tail (somewhat arbitrary) @@ -365,12 +459,24 @@ by using a negative effect rate value. The palette colors determine the color of the comet and the tail. The first color of the palette defines the color of the "head" of the comet and the remaining colors are blended into the "tail" +![Preview](./img/preview_1604555676.gif) + +```layers +comet 0.5 5 top (1, 0.4235294117647059, 0.06666666666666667), (1, 0.2196078431372549, 0.39215686274509803), (0.17647058823529413, 0.8862745098039215, 0.9019607843137255), (0.14901960784313725, 0.0784313725490196, 0.2784313725490196), (0.050980392156862744, 0.00784313725490196, 0.12941176470588237), (0.00784313725490196, 0.21568627450980393, 0.5333333333333333) +``` + #### Chase Effect Rate: 1 How fast the comet moves, negative values change direction Cutoff: 1 Length of tail (somewhat arbitrary) Palette: Color of "head" and gradient of "tail" Identical settings as Comet, but with multiple lights chasing each other. +![Preview](./img/preview_2860062334.gif) + +```layers +chase 0.5 2 top (1, 0.4235294117647059, 0.06666666666666667), (1, 0.2196078431372549, 0.39215686274509803), (0.17647058823529413, 0.8862745098039215, 0.9019607843137255), (0.14901960784313725, 0.0784313725490196, 0.2784313725490196), (0.050980392156862744, 0.00784313725490196, 0.12941176470588237), (0.00784313725490196, 0.21568627450980393, 0.5333333333333333) +``` + #### Heater Effect Rate: 1 Minimum temperature to activate effect Cutoff: 0 Disable effect once temp is reached @@ -386,6 +492,12 @@ the colors will follow this pattern in reverse until the temperature falls below the minimum temperature specified in the config. This can be used to indicate the hotend or bed is in a safe state to touch. +![Preview](./img/preview_1119813810.gif) + +```layers +heater 10 1 top (0.227,0.427,0.705),(0.113,1,0.168),(1,0.85,0.168),(1.00,0.47,0.00),(1,0.392,0.196),(1,0.313,0.156),(1,0.078,0.078),(1,0,0),(1,0,0) +``` + #### Temperature Effect Rate: 20 Cold Temperature Cutoff: 80 Hot Temperature @@ -394,6 +506,12 @@ The temperature of the configured heater determines the color in a gradient over the palette. When only one color is defined in the palette, the brightness of that color is defined by the temperature. +![Preview](./img/preview_17809619.gif) + +```layers +temperature 10 60 top (0.227,0.427,0.705),(0.113,1,0.168),(1,0.85,0.168),(1.00,0.47,0.00),(1,0.392,0.196),(1,0.313,0.156),(1,0.078,0.078),(1,0,0),(1,0,0) +``` + #### Fire Effect Rate: 45 Probability of "sparking" Cutoff: 40 Rate of "cooling" @@ -405,6 +523,12 @@ where it gradually cools. A higher rate of sparking causes a greater amount of heat to accumulate at the base of the strip resulting a more intense flame. Changing the rate of cooling results in longer or shorter overall flames. +![Preview](./img/preview_4174716736.gif) + +```layers +fire 45 40 top (1, 0, 0), (0.6875, 0, 0) +``` + #### HeaterFire Effect Rate: 1 Minimum temperature to activate effect Cutoff: 0 Disable effect once temp is reached @@ -415,6 +539,13 @@ target temperature is reached. If the cutoff parameter is set to 1, the effect will be disabled once the target temperature is reached, otherwise it will stay active until the heater is disabled. +![Preview](./img/preview_1078595869.gif) + +```layers +heaterfire 10 0 top (1, 0, 0), (0.6875, 0, 0) +``` + + #### AnalogPin Effect Rate: 10 Multiplier for input signal Cutoff: 40 Minimum threshold to trigger effect @@ -457,6 +588,13 @@ palette, that is calculated as a gradient over the specified color values. Exact same configuration as Stepper but instead of reporting stepper position, this layer reports print progress. +![Preview](./img/preview_2193481710.gif) + +```layers +progress 2 2 top (0, 0, 1), (0.6, 0, 0) +``` + + #### Homing Effect Rate: 1 Determines decay rate. A higher number yields slower decay Cutoff: 0 Not used, but must be provided @@ -481,12 +619,46 @@ Layer blending is always evaluated from the bottom up. Since values cannot exceed 100% brightness and 0% darkness, they are clamped to this range as a floating-point number ( 0.0 - 1.0 ) +We'll blend the following colors to illustrate: + +![Preview](./img/preview_1173196264.gif) + +```layers +static 0 0 top (1, 0.5, 0) +``` + +![Preview](./img/preview_1808171867.gif) + +```layers +static 0 0 top (0, 0.5, 1) +``` + + #### bottom No blending is done, the value from the color channel of the bottom layer is used. +![Preview](./img/preview_3176149258.gif) + +```layers +static 0 0 bottom (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + +*The bottom layer needs to be `top` so that it is used at all* + + #### top No blending is done, the value from the color channel of the top layer is used. + +![Preview](./img/preview_3462693145.gif) + +```layers +static 0 0 top (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + #### add ``` ( t + b ) @@ -494,6 +666,14 @@ No blending is done, the value from the color channel of the top layer is used. Color channels (Red, Green, and Blue) are added to one another. This results in channels becoming brighter. +![Preview](./img/preview_3234791021.gif) + +```layers +static 0 0 add (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + #### subtract ``` ( b - t ) @@ -501,6 +681,14 @@ in channels becoming brighter. The the top layer is subtracted from the bottom layer. This results in darkening similar colors. +![Preview](./img/preview_3009762427.gif) + +```layers +static 0 0 subtract (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + #### subtract_b ``` ( t - b ) @@ -508,36 +696,93 @@ similar colors. The the bottom layer is subtracted from the top layer. This results in darkening similar colors. +![Preview](./img/preview_1082126048.gif) + +```layers +static 0 0 subtract_b (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + #### difference ``` ( t - b ) or ( b - t ) ``` The darker of the layers is subtracted from the brighter of the two +![Preview](./img/preview_2689310554.gif) + +```layers +static 0 0 difference (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + #### average ``` ( t + b ) / 2 ``` The average of the channels is taken +![Preview](./img/preview_2546082449.gif) + +```layers +static 0 0 average (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + #### multiply ``` ( t * b ) ``` The channels are multiplied together, this is useful to darken colors +![Preview](./img/preview_2991711774.gif) + +```layers +static 0 0 multiply (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + +This is useful, e.g. if you want to create a pulsing animation of e.g. a heater: + +![Preview](./img/preview_2969376940.gif) + +```layers +linearfade 1 0 multiply (0.2,0.2,0.2),(1,1,1) +heater 0 0 top (0, 0, 1), (0, 1, 0), (1, 0, 0), (1, 0, 0) +``` + + + #### divide ``` ( t / b ) ``` The channels are divided, this results in brightening colors, often to white +![Preview](./img/preview_2508875843.gif) + +```layers +static 0 0 divide (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + #### divide_inv ``` ( b / t ) ``` Like divide, but bottom divided by top +![Preview](./img/preview_2728533037.gif) + +```layers +static 0 0 divide_inv (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + #### screen ``` 1 - ( 1 - t ) * ( 1 - b ) @@ -545,18 +790,40 @@ Like divide, but bottom divided by top The values are inverted, multiplied, and then inverted again. Similar to divide, it results in brighter colors +![Preview](./img/preview_3006598880.gif) + +```layers +static 0 0 screen (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + #### lighten ``` ( t if t > b else b ) ``` The brighter of the color channels is used +![Preview](./img/preview_479940560.gif) + +```layers +static 0 0 lighten (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + #### darken ``` ( t if t < b else b ) ``` The opposite of lighten, the darker of color channels is used +![Preview](./img/preview_3323396353.gif) + +```layers +static 0 0 darken (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + #### overlay ``` ( 2ab if a > .5 else 1 - 2( 1 - a )( 1 - b ) ) @@ -564,6 +831,14 @@ The opposite of lighten, the darker of color channels is used Overlay is a combination of multiply and screen. This has a similar effect of increasing contrast. +![Preview](./img/preview_2872927478.gif) + +```layers +static 0 0 overlay (0, 0.5, 1) +static 0 0 top (1, 0.5, 0) +``` + + # Sample Configurations ## das Blinkenlights diff --git a/docs/img/preview_1007800080.gif b/docs/img/preview_1007800080.gif new file mode 100644 index 0000000..5871c6d Binary files /dev/null and b/docs/img/preview_1007800080.gif differ diff --git a/docs/img/preview_1045006624.gif b/docs/img/preview_1045006624.gif new file mode 100644 index 0000000..63abb1f Binary files /dev/null and b/docs/img/preview_1045006624.gif differ diff --git a/docs/img/preview_1166727270.gif b/docs/img/preview_1166727270.gif new file mode 100644 index 0000000..4935da3 Binary files /dev/null and b/docs/img/preview_1166727270.gif differ diff --git a/docs/img/preview_1225707557.gif b/docs/img/preview_1225707557.gif new file mode 100644 index 0000000..52019c6 Binary files /dev/null and b/docs/img/preview_1225707557.gif differ diff --git a/docs/img/preview_1232106862.gif b/docs/img/preview_1232106862.gif new file mode 100644 index 0000000..64f5fb1 Binary files /dev/null and b/docs/img/preview_1232106862.gif differ diff --git a/docs/img/preview_1281122483.gif b/docs/img/preview_1281122483.gif new file mode 100644 index 0000000..e912ab5 Binary files /dev/null and b/docs/img/preview_1281122483.gif differ diff --git a/docs/img/preview_128190423.gif b/docs/img/preview_128190423.gif new file mode 100644 index 0000000..30475dc Binary files /dev/null and b/docs/img/preview_128190423.gif differ diff --git a/docs/img/preview_1366607111.gif b/docs/img/preview_1366607111.gif new file mode 100644 index 0000000..64f8259 Binary files /dev/null and b/docs/img/preview_1366607111.gif differ diff --git a/docs/img/preview_2005084376.gif b/docs/img/preview_2005084376.gif new file mode 100644 index 0000000..a22a66d Binary files /dev/null and b/docs/img/preview_2005084376.gif differ diff --git a/docs/img/preview_2311299642.gif b/docs/img/preview_2311299642.gif new file mode 100644 index 0000000..8d8c68a Binary files /dev/null and b/docs/img/preview_2311299642.gif differ diff --git a/docs/img/preview_2615691537.gif b/docs/img/preview_2615691537.gif new file mode 100644 index 0000000..093e1b4 Binary files /dev/null and b/docs/img/preview_2615691537.gif differ diff --git a/docs/img/preview_2711984624.gif b/docs/img/preview_2711984624.gif new file mode 100644 index 0000000..61361f3 Binary files /dev/null and b/docs/img/preview_2711984624.gif differ diff --git a/docs/img/preview_2716329888.gif b/docs/img/preview_2716329888.gif new file mode 100644 index 0000000..64f5fb1 Binary files /dev/null and b/docs/img/preview_2716329888.gif differ diff --git a/docs/img/preview_2807038225.gif b/docs/img/preview_2807038225.gif new file mode 100644 index 0000000..0d1ee67 Binary files /dev/null and b/docs/img/preview_2807038225.gif differ diff --git a/docs/img/preview_2815916569.gif b/docs/img/preview_2815916569.gif new file mode 100644 index 0000000..ee4e2e3 Binary files /dev/null and b/docs/img/preview_2815916569.gif differ diff --git a/docs/img/preview_2913358780.gif b/docs/img/preview_2913358780.gif new file mode 100644 index 0000000..959ebc3 Binary files /dev/null and b/docs/img/preview_2913358780.gif differ diff --git a/docs/img/preview_2934160756.gif b/docs/img/preview_2934160756.gif new file mode 100644 index 0000000..4d2fa07 Binary files /dev/null and b/docs/img/preview_2934160756.gif differ diff --git a/docs/img/preview_2977715752.gif b/docs/img/preview_2977715752.gif new file mode 100644 index 0000000..5694569 Binary files /dev/null and b/docs/img/preview_2977715752.gif differ diff --git a/docs/img/preview_3144244063.gif b/docs/img/preview_3144244063.gif new file mode 100644 index 0000000..92b78f5 Binary files /dev/null and b/docs/img/preview_3144244063.gif differ diff --git a/docs/img/preview_3310876851.gif b/docs/img/preview_3310876851.gif new file mode 100644 index 0000000..a8cf0a7 Binary files /dev/null and b/docs/img/preview_3310876851.gif differ diff --git a/docs/img/preview_341658654.gif b/docs/img/preview_341658654.gif new file mode 100644 index 0000000..959ebc3 Binary files /dev/null and b/docs/img/preview_341658654.gif differ diff --git a/docs/img/preview_3423969173.gif b/docs/img/preview_3423969173.gif new file mode 100644 index 0000000..feacb5e Binary files /dev/null and b/docs/img/preview_3423969173.gif differ diff --git a/docs/img/preview_3438451249.gif b/docs/img/preview_3438451249.gif new file mode 100644 index 0000000..614e79f Binary files /dev/null and b/docs/img/preview_3438451249.gif differ diff --git a/docs/img/preview_3442324617.gif b/docs/img/preview_3442324617.gif new file mode 100644 index 0000000..9e7a863 Binary files /dev/null and b/docs/img/preview_3442324617.gif differ diff --git a/docs/img/preview_3479358606.gif b/docs/img/preview_3479358606.gif new file mode 100644 index 0000000..599458f Binary files /dev/null and b/docs/img/preview_3479358606.gif differ diff --git a/docs/img/preview_3485685765.gif b/docs/img/preview_3485685765.gif new file mode 100644 index 0000000..b377021 Binary files /dev/null and b/docs/img/preview_3485685765.gif differ diff --git a/docs/img/preview_361700619.gif b/docs/img/preview_361700619.gif new file mode 100644 index 0000000..4935da3 Binary files /dev/null and b/docs/img/preview_361700619.gif differ diff --git a/docs/img/preview_365303344.gif b/docs/img/preview_365303344.gif new file mode 100644 index 0000000..40b5eff Binary files /dev/null and b/docs/img/preview_365303344.gif differ diff --git a/docs/img/preview_366870783.gif b/docs/img/preview_366870783.gif new file mode 100644 index 0000000..d5f7181 Binary files /dev/null and b/docs/img/preview_366870783.gif differ diff --git a/docs/img/preview_382345023.gif b/docs/img/preview_382345023.gif new file mode 100644 index 0000000..e912ab5 Binary files /dev/null and b/docs/img/preview_382345023.gif differ diff --git a/docs/img/preview_4004471834.gif b/docs/img/preview_4004471834.gif new file mode 100644 index 0000000..5d10957 Binary files /dev/null and b/docs/img/preview_4004471834.gif differ diff --git a/docs/img/preview_4188900622.gif b/docs/img/preview_4188900622.gif new file mode 100644 index 0000000..30ad0d5 Binary files /dev/null and b/docs/img/preview_4188900622.gif differ diff --git a/docs/img/preview_4259539605.gif b/docs/img/preview_4259539605.gif new file mode 100644 index 0000000..8bc96bc Binary files /dev/null and b/docs/img/preview_4259539605.gif differ diff --git a/docs/img/preview_429651839.gif b/docs/img/preview_429651839.gif new file mode 100644 index 0000000..b377021 Binary files /dev/null and b/docs/img/preview_429651839.gif differ diff --git a/docs/img/preview_494879352.gif b/docs/img/preview_494879352.gif new file mode 100644 index 0000000..441e754 Binary files /dev/null and b/docs/img/preview_494879352.gif differ diff --git a/docs/img/preview_616515740.gif b/docs/img/preview_616515740.gif new file mode 100644 index 0000000..e912ab5 Binary files /dev/null and b/docs/img/preview_616515740.gif differ diff --git a/docs/img/preview_648273030.gif b/docs/img/preview_648273030.gif new file mode 100644 index 0000000..5871c6d Binary files /dev/null and b/docs/img/preview_648273030.gif differ diff --git a/docs/img/preview_687643745.gif b/docs/img/preview_687643745.gif new file mode 100644 index 0000000..3a4939e Binary files /dev/null and b/docs/img/preview_687643745.gif differ diff --git a/docs/img/preview_711411804.gif b/docs/img/preview_711411804.gif new file mode 100644 index 0000000..90cb664 Binary files /dev/null and b/docs/img/preview_711411804.gif differ diff --git a/docs/img/preview_749190433.gif b/docs/img/preview_749190433.gif new file mode 100644 index 0000000..ddeacdd Binary files /dev/null and b/docs/img/preview_749190433.gif differ diff --git a/docs/img/preview_762724040.gif b/docs/img/preview_762724040.gif new file mode 100644 index 0000000..089da75 Binary files /dev/null and b/docs/img/preview_762724040.gif differ diff --git a/docs/img/preview_842630724.gif b/docs/img/preview_842630724.gif new file mode 100644 index 0000000..340b727 Binary files /dev/null and b/docs/img/preview_842630724.gif differ diff --git a/install-led_effect.sh b/install-led_effect.sh index eb606c4..935d3e5 100755 --- a/install-led_effect.sh +++ b/install-led_effect.sh @@ -5,26 +5,77 @@ set -e KLIPPER_PATH="${HOME}/klipper" SYSTEMDDIR="/etc/systemd/system" MOONRAKER_CONFIG_DIR="${HOME}/printer_data/config" +RESTART_SERVICE=1 +UPDATE_MOONRAKER=1 +IGNORE_ROOT=0 +VENV_PATH="${HOME}/klippy-env" + + + + +usage(){ echo "Usage: $0 [-k ] [-c ]" 1>&2; exit 1; } + +args=$(getopt -a -o k:c:uh --long klipper:,moonraker:,uninstall,help,no-moonraker,no-service,ignore-root,venv: -- "$@") +# shellcheck disable=SC2181 +if [[ $? -gt 0 ]]; then + usage +fi +eval set -- "${args}" +while :; do + case $1 in + -k | --klipper) + shift + KLIPPER_PATH=$1 + shift + ;; + -c | --moonraker) + shift + MOONRAKER_CONFIG_DIR=$1 + shift + ;; + --venv) + shift + VENV_PATH=$1 + shift + ;; + --no-moonraker) + UPDATE_MOONRAKER=0 + shift + ;; + --no-service) + RESTART_SERVICE=0 + shift + ;; + --ignore-root) + IGNORE_ROOT=1 + shift + ;; + -u | --uninstall) + UNINSTALL=1 + shift + ;; + -h | --help) + usage + ;; + --) + shift + break + ;; + *) + echo >&2 Unsupported option: "$1" + usage + ;; + esac +done # Fall back to old directory for configuration as default -if [ ! -d "${MOONRAKER_CONFIG_DIR}" ]; then +if [ $UPDATE_MOONRAKER -ne 0 ] && [ ! -d "${MOONRAKER_CONFIG_DIR}" ]; then echo "\"$MOONRAKER_CONFIG_DIR\" does not exist. Falling back to "${HOME}/klipper_config" as default." MOONRAKER_CONFIG_DIR="${HOME}/klipper_config" fi -usage(){ echo "Usage: $0 [-k ] [-c ]" 1>&2; exit 1; } -# Parse command line arguments -while getopts "k:c:uh" arg; do - case $arg in - k) KLIPPER_PATH=$OPTARG;; - c) MOONRAKER_CONFIG_DIR=$OPTARG;; - u) UNINSTALL=1;; - h) usage;; - esac -done - # Find SRCDIR from the pathname of this script -SRCDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/src/ && pwd )" +SRCDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/ && pwd )" # Verify Klipper has been installed check_klipper() @@ -45,7 +96,7 @@ check_folders() fi echo "Klipper installation found at $KLIPPER_PATH" - if [ ! -f "${MOONRAKER_CONFIG_DIR}/moonraker.conf" ]; then + if [ $UPDATE_MOONRAKER -ne 0 ] && [ ! -f "${MOONRAKER_CONFIG_DIR}/moonraker.conf" ]; then echo "[ERROR] Moonraker configuration not found in directory \"$MOONRAKER_CONFIG_DIR\". Exiting" exit -1 fi @@ -56,10 +107,11 @@ check_folders() link_extension() { echo -n "Linking extension to Klipper... " - ln -sf "${SRCDIR}/led_effect.py" "${KLIPPER_PATH}/klippy/extras/led_effect.py" + ln -sf "${SRCDIR}/packages/led_effect/led_effect/led_effect_plugin.py" "${KLIPPER_PATH}/klippy/extras/led_effect.py" echo "[OK]" } + # Restart moonraker restart_moonraker() { @@ -126,20 +178,20 @@ verify_ready() { if [ "$EUID" -eq 0 ]; then echo "[ERROR] This script must not run as root. Exiting." - exit -1 + exit 1 fi } # Run steps -verify_ready -check_klipper +[ $IGNORE_ROOT -ne 0 ] && verify_ready +[ $RESTART_SERVICE -eq 1 ] && check_klipper check_folders -stop_klipper +[ $RESTART_SERVICE -eq 1 ] && stop_klipper if [ ! $UNINSTALL ]; then - link_extension - add_updater + link_extension + [ $UPDATE_MOONRAKER -eq 1 ] && add_updater else uninstall fi -start_klipper +[ $RESTART_SERVICE -eq 1 ] && start_klipper diff --git a/packages/klipper_tests/.gitignore b/packages/klipper_tests/.gitignore new file mode 100644 index 0000000..2714a5b --- /dev/null +++ b/packages/klipper_tests/.gitignore @@ -0,0 +1 @@ +config/.moonraker.conf.bkp diff --git a/packages/klipper_tests/001_fresh_install.sh b/packages/klipper_tests/001_fresh_install.sh new file mode 100755 index 0000000..42c66c5 --- /dev/null +++ b/packages/klipper_tests/001_fresh_install.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +set -euxo pipefail + +trap destroy EXIT + +destroy() { + docker-compose down -t0 || true +} + +run() { + docker-compose up -d + docker-compose exec -T klipper bash -c ' + cd /app + ./install-led_effect.sh --no-moonraker --no-service -k /opt/klipper/ --venv /opt/venv/ + exit 0 +'; + docker-compose exec -T klipper bash -c ' + cd /opt + /opt/venv/bin/python klipper/klippy/klippy.py \ + -v \ + -I printer_data/run/klipper.tty \ + -a printer_data/run/klipper.sock \ + printer_data/config/printer.cfg \ + -l printer_data/logs/klippy.log +' & + + set +e + # shellcheck disable=SC2034 + for i in {1..100}; do + INFO=$(docker-compose exec -T moonraker curl http://localhost:7125/printer/info) + # shellcheck disable=SC2181 + if [ $? -ne 0 ]; then + sleep 1s + continue; + fi + + if [[ "$INFO" =~ \"state\":\ *\"ready\" ]]; then + exit 0 + fi + if [[ "$INFO" =~ \"state\":\ *\"error\" ]]; then + exit 1 + fi + sleep 0.5s + + done + set -e + exit 1 +} + + + +run \ No newline at end of file diff --git a/packages/klipper_tests/002_git_pull_on_old_version_with_src_py.sh b/packages/klipper_tests/002_git_pull_on_old_version_with_src_py.sh new file mode 100755 index 0000000..1431bd8 --- /dev/null +++ b/packages/klipper_tests/002_git_pull_on_old_version_with_src_py.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +set -euxo pipefail + +trap destroy EXIT + +destroy() { + docker-compose down -t0 || true +} + +run() { + docker-compose up -d + docker-compose exec -T klipper bash -c ' + ls -la /app/src/led_effect.py + ln -s /app/src/led_effect.py /opt/klipper/klippy/extras/led_effect.py + exit 0 +'; + docker-compose exec -T klipper bash -c ' + cd /opt + /opt/venv/bin/python klipper/klippy/klippy.py \ + -v \ + -I printer_data/run/klipper.tty \ + -a printer_data/run/klipper.sock \ + printer_data/config/printer.cfg \ + -l printer_data/logs/klippy.log +' & + + set +e + # shellcheck disable=SC2034 + for i in {1..100}; do + INFO=$(docker-compose exec -T moonraker curl http://localhost:7125/printer/info) + # shellcheck disable=SC2181 + if [ $? -ne 0 ]; then + sleep 1s + continue; + fi + + if [[ "$INFO" =~ \"state\":\ *\"ready\" ]]; then + exit 0 + fi + if [[ "$INFO" =~ \"state\":\ *\"error\" ]]; then + exit 1 + fi + sleep 0.5s + + done + set -e + exit 1 +} + + + +run \ No newline at end of file diff --git a/packages/klipper_tests/config/moonraker.conf b/packages/klipper_tests/config/moonraker.conf new file mode 100644 index 0000000..8bbea3a --- /dev/null +++ b/packages/klipper_tests/config/moonraker.conf @@ -0,0 +1,14 @@ +[server] +host: 0.0.0.0 +port: 7125 +klippy_uds_address: /opt/printer_data/run/klipper.sock + +[machine] +provider: none +validate_service: False + +[authorization] +trusted_clients: + 0.0.0.0/0 +cors_domains: + * diff --git a/packages/klipper_tests/config/printer.cfg b/packages/klipper_tests/config/printer.cfg new file mode 100644 index 0000000..5e5574b --- /dev/null +++ b/packages/klipper_tests/config/printer.cfg @@ -0,0 +1,30 @@ +[mcu] +serial: /opt/printer_data/run/klipper_host_mcu.tty + +[printer] +kinematics: none +max_velocity: 300 +max_accel: 3000 + +[gcode_macro] + +[led_effect sb_logo_busy] +autostart: false +frame_rate: 24 +leds: +layers: + breathing 3 1 top (1,0,0) + +[led_effect sb_logo_cleaning] +autostart: false +frame_rate: 24 +leds: +layers: + breathing 3 1 top (0.0, 0.02, 0.5) + +[led_effect sb_logo_calibrating_z] +autostart: false +frame_rate: 24 +leds: +layers: + breathing 3 1 top (0.0, 0.0, 0.35) \ No newline at end of file diff --git a/packages/klipper_tests/docker-compose.yml b/packages/klipper_tests/docker-compose.yml new file mode 100644 index 0000000..9fe4cc7 --- /dev/null +++ b/packages/klipper_tests/docker-compose.yml @@ -0,0 +1,55 @@ +services: + klipper: + image: mkuf/klipper:latest + privileged: true + entrypoint: + - tail + - -f + - /dev/null + volumes: + - /dev:/dev + - ../../:/app + - ./config:/opt/printer_data/config + - log:/opt/printer_data/logs + - run:/opt/printer_data/run + hostmcu: + image: mkuf/klipper:latest-hostmcu + privileged: true + volumes: + - /dev:/dev + - run:/opt/printer_data/run + log: + image: busybox + volumes: + - log:/opt/printer_data/logs + - run:/opt/printer_data/run + entrypoint: + - /bin/sh + - -c + - | + while true; do + tail -f /opt/printer_data/logs/klippy.log || true; + sleep 1; + done + moonraker: + image: mkuf/moonraker:latest + restart: unless-stopped + pid: host + depends_on: + klipper: + condition: service_started + volumes: + - /dev/null:/opt/klipper/config/null + - /dev/null:/opt/klipper/docs/null + - run:/opt/printer_data/run + - ./config:/opt/printer_data/config + +volumes: + run: + driver_opts: + type: tmpfs + device: tmpfs + log: + driver_opts: + type: tmpfs + device: tmpfs \ No newline at end of file diff --git a/packages/klipper_tests/run.sh b/packages/klipper_tests/run.sh new file mode 100755 index 0000000..553edf3 --- /dev/null +++ b/packages/klipper_tests/run.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -euxo pipefail + +ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/ && pwd )" + +for i in $(ls "$ROOT_DIR" | grep -E "^[0-9]{3}_.*\.sh$"); do + echo "Running $i" + bash "$ROOT_DIR/$i" +done \ No newline at end of file diff --git a/packages/klippermock/poetry.lock b/packages/klippermock/poetry.lock new file mode 100644 index 0000000..0371d7e --- /dev/null +++ b/packages/klippermock/poetry.lock @@ -0,0 +1,19 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "led-effect" +version = "0.1.0" +description = "" +optional = false +python-versions = "<3.12,>=3.8" +files = [] +develop = true + +[package.source] +type = "directory" +url = "../led_effect" + +[metadata] +lock-version = "2.0" +python-versions = "<3.12,>=3.8" +content-hash = "a6d0b8e0a4d404ebaf726d03da83a034e4d1ea4430ec41e45050c419b5552060" diff --git a/packages/klippermock/pyproject.toml b/packages/klippermock/pyproject.toml new file mode 100644 index 0000000..6b6a75d --- /dev/null +++ b/packages/klippermock/pyproject.toml @@ -0,0 +1,14 @@ +[tool.poetry] +name = "klippermock" +version = "0.1.0" +authors = ["Julian Schill "] +description = "" + +[tool.poetry.dependencies] +python = "<3.12,>=3.8" +led_effect = {path = "../led_effect", develop = true} + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/simulator/simulator/__init__.py b/packages/klippermock/src/__init__.py similarity index 100% rename from simulator/simulator/__init__.py rename to packages/klippermock/src/__init__.py diff --git a/simulator/simulator/klippermock.py b/packages/klippermock/src/klippermock.py similarity index 77% rename from simulator/simulator/klippermock.py rename to packages/klippermock/src/klippermock.py index 3230b07..aad3392 100644 --- a/simulator/simulator/klippermock.py +++ b/packages/klippermock/src/klippermock.py @@ -1,16 +1,7 @@ -from distutils.command.config import config -import sys - -from pathlib import Path # if you haven't already done so -file = Path(__file__).resolve() -parent, root = file.parent, file.parents[2] -print(root) -sys.path.append(str(root)) -from pathlib import Path -from src.led_effect import ledEffect, ledFrameHandler +from led_effect.led_effect_plugin import ledEffect, ledFrameHandler class mockPrinter: - NOW = 0 + NEVER = 0 def __init__(self, config): self.config = config self.config.set_printer(self) @@ -22,6 +13,7 @@ def __init__(self, config): self.axes_max = [100,100,100] self.axes_min = [0,0,0] self.stepper_pos = 0 + self.NOW = 0 def _handle_ready(self): for o in self.objects.values(): @@ -66,10 +58,10 @@ def register_adc(self, name, mcu): pass def lookup_heater(self, name): return self - def set_heater(self, min, max, temp): - self.led_effect.handler.heaterLast["bed"] = self.led_effect.handler.heaterCurrent["bed"] - self.led_effect.handler.heaterCurrent["bed"] = temp - self.led_effect.handler.heaterTarget["bed"] = max + def set_heater(self, min, max, temp, heater = "heater_bed"): + self.led_effect.handler.heaterLast[heater] = self.led_effect.handler.heaterCurrent[heater] + self.led_effect.handler.heaterCurrent[heater] = temp + self.led_effect.handler.heaterTarget[heater] = max def set_progress (self, progress): self.led_effect.handler.printProgress=progress def set_analog(self, value): @@ -77,6 +69,8 @@ def set_analog(self, value): def load_template(self, config, name): self.template = config.get(name) return self + def config_error(self, msg): + raise Exception(msg) def render(self, context=None): return self.template def create_template_context(self): @@ -87,10 +81,10 @@ class mockConfig: def __init__(self): self.config={ "frame_rate" : "24.0", - "autostart" : "False", + "autostart" : "True", "run_on_error" : "False", "recalculate": "False", - "heater" : "bed", + "heater" : "heater_bed", "analog_pin" : "PA0", "stepper" : "x", "layers" : """gradient 1 1 top (1, 0.0, 0.0),(0, 1, 0.0),(0.0, 0.0, 1)""", @@ -106,7 +100,9 @@ def get_object(self,o): def getfloat(self,key,default,minval,maxval): return float(self.config[key]) def getboolean(self,key,default): - return bool(self.config[key]) + return self.config[key] in [True, "True", "true", "1"] if key in self.config else default + def setbool(self,key, value): + self.config[key] = bool (value) def getint(self,key,default,minval,maxval): return int(self.config[key]) def setint(self,key, value): @@ -121,6 +117,11 @@ def set(self, key, value ): class mockLedHelper: def __init__(self,config): self.led_count = config.getint("ledcount", 1, 1, 1024) + self.led_state = [(0, 0, 0, 0)] * self.led_count + def get_led_count(self): return self.led_count + def update_func(self, led_state, print_time): + self.led_state = led_state + diff --git a/packages/led_effect/led_effect/__init__.py b/packages/led_effect/led_effect/__init__.py new file mode 100644 index 0000000..7eb0871 --- /dev/null +++ b/packages/led_effect/led_effect/__init__.py @@ -0,0 +1,7 @@ +from . import led_effect_plugin + +def load_config(config): + return led_effect_plugin.load_config(config) + +def load_config_prefix(config): + return led_effect_plugin.load_config_prefix(config) diff --git a/packages/led_effect/led_effect/led_effect_plugin.py b/packages/led_effect/led_effect/led_effect_plugin.py new file mode 100644 index 0000000..0224888 --- /dev/null +++ b/packages/led_effect/led_effect/led_effect_plugin.py @@ -0,0 +1,1257 @@ +# Support for addressable LED visual effects +# using neopixel and dotstar LEDs +# +# Copyright (C) 2020 Paul McGowan +# co-authored by Julian Schill +# +# This file may be distributed under the terms of the GNU GPLv3 license. + +from math import cos, exp, pi +from random import randint +import logging + +ANALOG_SAMPLE_TIME = 0.001 +ANALOG_SAMPLE_COUNT = 5 +ANALOG_REPORT_TIME = 0.05 + +COLORS = 4 + +###################################################################### +# Custom color value list, returns lists of [r, g ,b] values +# from a one dimensional list +###################################################################### + +class colorArray(list): + def __init__(self, num_colors, kwargs): + self.n=num_colors + super(colorArray,self).__init__(kwargs) + + def __getitem__(self, a): + if isinstance(a, int): + return super(colorArray, self).__getitem__( + slice(a*self.n, a*self.n+self.n)) + if isinstance(a, slice): + start = a.start*self.n if a.start != None else None + stop = a.stop*self.n if a.stop != None else None + return colorArray(self.n, + super(colorArray, self).__getitem__( + slice(start, stop, a.step))) + def __getslice__(self, a, b): + return self.__getitem__(slice(a,b)) + def __setitem__(self, a, v): + if isinstance(a, int): + for i in range(self.n): + super(colorArray, self).__setitem__(a*self.n + i, v[i]) + def __len__(self): + return super(colorArray, self).__len__() // self.n + def reverse(self): + self.__init__(self.n, [c for cl in range(len(self)-1,-1, -1) + for c in self[cl]]) + def shift(self, shift=1, direction=True): + if direction: + shift *= -1 + self.__init__(self.n, self[shift:] + self[:shift]) + def padLeft(self, v, a): + self.__init__(self.n, v * a + self) + def padRight(self, v, a): + self += v * a + +###################################################################### +# LED Effect handler +###################################################################### + +class ledFrameHandler: + def __init__(self, config): + self.printer = config.get_printer() + self.gcode = self.printer.lookup_object('gcode') + self.printer.load_object(config, "display_status") + self.heaters = {} + self.printProgress = 0 + self.effects = [] + self.stepperPositions = [0.0,0.0,0.0] + self.stepperTimer = None + self.heaterCurrent = {} + self.heaterTarget = {} + self.heaterLast = {} + self.heaterTimer = None + self.homing = {} + self.homing_start_flag = {} + self.homing_end_flag = {} + self.printer.register_event_handler('klippy:ready', self._handle_ready) + self.printer.register_event_handler("homing:homing_move_begin", + self._handle_homing_move_begin) + self.printer.register_event_handler("homing:homing_move_end", + self._handle_homing_move_end) + self.ledChains=[] + self.gcode.register_command('STOP_LED_EFFECTS', + self.cmd_STOP_LED_EFFECTS, + desc=self.cmd_STOP_LED_EFFECTS_help) + self.shutdown = False + + cmd_STOP_LED_EFFECTS_help = 'Stops all led_effects' + + def _handle_ready(self): + self.shutdown = False + self.reactor = self.printer.get_reactor() + self.printer.register_event_handler('klippy:shutdown', + self._handle_shutdown) + self.printProgress = 0 + self.displayStatus = self.printer.lookup_object('display_status') + self.progressTimer = self.reactor.register_timer(self._pollProgress, + self.reactor.NOW) + self.frameTimer = self.reactor.register_timer(self._getFrames, + self.reactor.NOW) + + def _handle_shutdown(self): + self.shutdown = True + for effect in self.effects: + if not effect.runOnShutown: + for chain in self.ledChains: + chain.led_helper.set_color(None, (0.0, 0.0, 0.0, 0.0)) + chain.led_helper.update_func(chain.led_helper.led_state, None) + + pass + + def _handle_homing_move_begin(self, hmove): + endstops_being_homed = [name for es,name in hmove.endstops] + logging.info(endstops_being_homed) + + for endstop in endstops_being_homed: + if endstop in self.homing_start_flag: + self.homing_start_flag[endstop] += 1 + else: + self.homing_start_flag[endstop] = 0 + + self.homing[endstop]=True + + def _handle_homing_move_end(self, hmove): + endstops_being_homed = [name for es,name in hmove.endstops] + + for endstop in endstops_being_homed: + if endstop in self.homing_end_flag: + self.homing_end_flag[endstop] += 1 + else: + self.homing_end_flag[endstop] = 0 + self.homing[endstop]=False + + def addEffect(self, effect): + + if effect.heater: + effect.heater=effect.heater.strip('\"\'') + if effect.heater.startswith("temperature_fan ") or effect.heater.startswith("temperature_sensor "): + self.heaters[effect.heater] = self.printer.lookup_object(effect.heater) + else: + pheater = self.printer.lookup_object('heaters') + self.heaters[effect.heater] = pheater.lookup_heater(effect.heater) + self.heaterLast[effect.heater] = 100 + self.heaterCurrent[effect.heater] = 0 + self.heaterTarget[effect.heater] = 0 + + if not self.heaterTimer: + self.heaterTimer = self.reactor.register_timer(self._pollHeater, + self.reactor.NOW) + + if effect.stepper: + self.toolhead = self.printer.lookup_object('toolhead') + self.kin = self.toolhead.get_kinematics() + + if not self.stepperTimer: + self.stepperTimer = self.reactor.register_timer( + self._pollStepper, + self.reactor.NOW) + + self.effects.append(effect) + + def _pollHeater(self, eventtime): + for heater in self.heaters.keys(): + current, target = self.heaters[heater].get_temp(eventtime) + self.heaterCurrent[heater] = current + self.heaterTarget[heater] = target + if target > 0: + self.heaterLast[heater] = target + return eventtime + 0.3 #sensors get updated every 300ms + + def _pollStepper(self, eventtime): + + kin_spos = {s.get_name(): s.get_commanded_position() + for s in self.kin.get_steppers()} + + pos = self.kin.calc_position(kin_spos) + + for i in range(3): + if pos[i] >= self.kin.axes_min[i] and pos[i] <= self.kin.axes_max[i]: + self.stepperPositions[i] = int( + ((pos[i] - self.kin.axes_min[i]) / \ + (self.kin.axes_max[i] - self.kin.axes_min[i]) + * 100)- 1) + return eventtime + 0.5 + + def _pollProgress(self, eventtime): + status = self.displayStatus.get_status(eventtime) + p = status.get('progress') + if p is not None: + self.printProgress = int(p * 100) + return eventtime + 1 + + def _getColorData(self, colors, fade): + clamp = (lambda x : 0.0 if x < 0.0 else 1.0 if x > 1.0 else x) + colors = [x*clamp(fade) for x in colors] + colors=colors + [0.0] * (4 - len(colors)) + colors=colors[:4] + colors = [clamp(x) for x in colors] + return tuple(colors) + + def _getFrames(self, eventtime): + chainsToUpdate = set() + + frames = [(effect, effect.getFrame(eventtime)) for effect in self.effects] + + #first set all LEDs to 0, that should be updated + for effect, (frame, update) in frames: + if update: + for i in range(effect.ledCount): + chain,index=effect.leds[i] + chain.led_helper.led_state[index] = (0.0, 0.0, 0.0, 0.0) + chainsToUpdate.add(chain) + + #then sum up all effects for that LEDs + for effect, (frame, update) in frames: + if update: + for i in range(effect.ledCount): + chain,index=effect.leds[i] + + current_state=list(chain.led_helper.led_state[index]) + effect_state=self._getColorData(frame[i*COLORS:i*COLORS+COLORS], + effect.fadeValue) + + next_state=[min(1.0,a+b) for a,b in \ + zip(current_state, effect_state)] + + chain.led_helper.led_state[index] = tuple(next_state) + chainsToUpdate.add(chain) + + for chain in chainsToUpdate: + if hasattr(chain,"prev_data"): + chain.prev_data = None # workaround to force update of dotstars + if not self.shutdown: + chain.led_helper.update_func(chain.led_helper.led_state, None) + if self.effects: + next_eventtime=min(self.effects, key=lambda x: x.nextEventTime)\ + .nextEventTime + else: + next_eventtime = eventtime + # run at least with 10Hz + next_eventtime=min(next_eventtime, eventtime + 0.1) + return next_eventtime + + def parse_chain(self, chain): + chain = chain.strip() + leds=[] + parms = [parameter.strip() for parameter in chain.split() + if parameter.strip()] + if parms: + chainName=parms[0].replace(':',' ') + ledIndices = ''.join(parms[1:]).strip('()').split(',') + for led in ledIndices: + if led: + if '-' in led: + start, stop = map(int,led.split('-')) + if stop == start: + ledList = [start-1] + elif stop > start: + ledList = list(range(start-1, stop)) + else: + ledList = list(reversed(range(stop-1, start))) + for i in ledList: + leds.append(int(i)) + else: + for i in led.split(','): + leds.append(int(i)-1) + + return chainName, leds + else: + return None, None + + def cmd_STOP_LED_EFFECTS(self, gcmd): + ledParam = gcmd.get('LEDS', "") + stopAll = (ledParam == "") + + for effect in self.effects: + stopEffect = stopAll + if not stopAll: + try: + chainName, ledIndices = self.parse_chain(ledParam) + chain = self.printer.lookup_object(chainName) + except Exception as e: + raise gcmd.error("Unknown LED '%s'" % (ledParam,)) + + if ledIndices == [] and chain in effect.ledChains: + stopEffect = True + else: + for index in ledIndices: + if (chain,index) in effect.leds: + stopEffect=True + + if stopEffect: + if effect.enabled: + effect.set_fade_time(gcmd.get_float('FADETIME', 0.0)) + effect.set_enabled(False) + +def load_config(config): + return ledFrameHandler(config) + +###################################################################### +# LED Effect +###################################################################### + +class ledEffect: + def __init__(self, config): + self.config = config + self.printer = config.get_printer() + self.gcode = self.printer.lookup_object('gcode') + self.gcode_macro = self.printer.lookup_object('gcode_macro') + self.handler = self.printer.load_object(config, 'led_effect') + self.frameRate = 1.0 / config.getfloat('frame_rate', + default=24, minval=1, maxval=60) + self.enabled = False + self.isDisabling = False + self.iteration = 0 + self.layers = [] + self.analogValue = 0 + self.fadeValue = 1.0 + self.fadeTime = 0.0 + self.fadeEndTime = 0 + + #Basic functions for layering colors. t=top and b=bottom color + self.blendingModes = { + 'top' : (lambda t, b: t ), + 'bottom' : (lambda t, b: b ), + 'add' : (lambda t, b: t + b ), + 'subtract' : (lambda t, b: (b - t) * (b - t > 0)), + 'subtract_b': (lambda t, b: (t - b) * (t - b > 0)), + 'difference': (lambda t, b: (t - b) * (t > b) + (b - t) * (t <= b)), + 'average' : (lambda t, b: 0.5 * (t + b)), + 'multiply' : (lambda t, b: t * b), + 'divide' : (lambda t, b: t / b if b > 0 else 0 ), + 'divide_inv': (lambda t, b: b / t if t > 0 else 0 ), + 'screen' : (lambda t, b: 1.0 - (1.0-t)*(1.0-b) ), + 'lighten' : (lambda t, b: t * (t > b) + b * (t <= b)), + 'darken' : (lambda t, b: t * (t < b) + b * (t >= b)), + 'overlay' : (lambda t, b: \ + 2.0 * t * b if t > 0.5 else \ + 1.0 - (2.0 * (1.0-t) * (1.0-b))) + } + + self.name = config.get_name().split()[1] + + self.autoStart = config.getboolean('autostart', False) + self.runOnShutown = config.getboolean('run_on_error', False) + self.heater = config.get('heater', None) + self.analogPin = config.get('analog_pin', None) + self.stepper = config.get('stepper', None) + self.recalculate = config.get('recalculate', False) + self.endstops = [x.strip() for x in config.get('endstops','').split(',')] + self.layerTempl = self.gcode_macro.load_template(config, 'layers') + self.configLayers = [] + self.configLeds = config.get('leds') + + self.nextEventTime = 0 + self.printer.register_event_handler('klippy:ready', self._handle_ready) + self.gcode.register_mux_command('SET_LED_EFFECT', 'EFFECT', self.name, + self.cmd_SET_LED_EFFECT, + desc=self.cmd_SET_LED_help) + + if self.analogPin: + ppins = self.printer.lookup_object('pins') + self.mcu_adc = ppins.setup_pin('adc', self.analogPin) + self.mcu_adc.setup_minmax(ANALOG_SAMPLE_TIME, ANALOG_SAMPLE_COUNT) + self.mcu_adc.setup_adc_callback(ANALOG_REPORT_TIME, self.adcCallback) + query_adc = self.printer.load_object(self.config, 'query_adc') + query_adc.register_adc(self.name, self.mcu_adc) + + cmd_SET_LED_help = 'Starts or Stops the specified led_effect' + + def _handle_ready(self): + self.configChains = self.configLeds.split('\n') + self.ledChains = [] + self.leds = [] + self.enabled = self.autoStart + self.printer.register_event_handler('klippy:shutdown', + self._handle_shutdown) + #map each LED from the chains to the "pixels" in the effect frame + for chain in self.configChains: + chainName, ledIndices = self.handler.parse_chain(chain) + if chainName is not None: + ledChain = self.printer.lookup_object(chainName) + + #Add each discrete chain to the collection + if ledChain not in self.ledChains: + self.ledChains.append(ledChain) + + if ledIndices == [] : + for i in range(ledChain.led_helper.get_led_count()): + self.leds.append((ledChain, int(i))) + else: + for led in ledIndices: + self.leds.append((ledChain, led)) + + self.ledCount = len(self.leds) + self.frame = [0.0] * COLORS * self.ledCount + + #enumerate all effects from the subclasses of _layerBase... + self.availableLayers = {str(c).rpartition('.layer')[2]\ + .replace("'>", "")\ + .lower() : c + for c in self._layerBase.__subclasses__() + if str(c).startswith(" COLORS: + raise Exception( + "Color %s has too many elements." % (str(i),)) + palette=[pad(c) for c in palette] # pad to COLORS colors + palette=[k for c in palette for k in c] # flatten list + except Exception as e: + raise self.printer.config_error( + "Error parsing palette in '%s' for layer \"%s\": %s"\ + % (self.config.get_name(), parms[0], e,)) + self.layers.insert(0, layer(handler = self, + frameHandler = self.handler, + effectRate = float(parms[1]), + effectCutoff = float(parms[2]), + paletteColors = palette, + frameRate = self.frameRate, + ledCount = len(self.leds), + blendingMode = parms[3])) + + self.handler.addEffect(self) + + def getFrame(self, eventtime): + if not self.enabled and not self.isDisabling: + return self.frame, False + + if not self.enabled and self.fadeValue <= 0.0: + if self.nextEventTime < self.handler.reactor.NEVER: + # Effect has just been disabled. Set colors to 0 and update once. + self.nextEventTime = self.handler.reactor.NEVER + self.isDisabling = False + self.frame = [0.0] * COLORS * self.ledCount + update = True + else: + update = False + else: + update = True + if eventtime >= self.nextEventTime: + self.nextEventTime = eventtime + self.frameRate + + self.frame = [0.0] * COLORS * self.ledCount + for layer in self.layers: + layerFrame = layer.nextFrame(eventtime) + + if layerFrame: + blend = self.blendingModes[layer.blendingMode] + self.frame = [blend(t, b) for t, b in zip(layerFrame, self.frame)] + + if (self.fadeEndTime > eventtime) and (self.fadeTime > 0.0): + remainingFade = ((self.fadeEndTime - eventtime) / self.fadeTime) + else: + remainingFade = 0.0 + + self.fadeValue = 1.0-remainingFade if self.enabled else remainingFade + + return self.frame, update + + def set_enabled(self, state): + if self.enabled != state: + self.enabled = state + self.isDisabling = not state + self.nextEventTime = self.handler.reactor.NOW + self.handler._getFrames(self.handler.reactor.NOW) + + def reset_frame(self): + for layer in self.layers: + layer.frameNumber = 0 + + def set_fade_time(self, fadetime): + self.fadeTime = fadetime + self.fadeEndTime = self.handler.reactor.monotonic() + fadetime + if self.fadeTime == 0.0: + self.fadeValue = 0.0 + + def cmd_SET_LED_EFFECT(self, gcmd): + parmFadeTime = gcmd.get_float('FADETIME', 0.0) + + if gcmd.get_int('STOP', 0) >= 1: + if self.enabled: + self.set_fade_time(parmFadeTime) + self.set_enabled(False) + else: + if self.recalculate: + kwargs = self.layerTempl.create_template_context() + kwargs['params'] = gcmd.get_command_parameters() + kwargs['rawparams'] = gcmd.get_raw_command_parameters() + self._generateLayers(kwargs) + if gcmd.get_int('REPLACE',0) >= 1: + for led in self.leds: + for effect in self.handler.effects: + if effect is not self and led in effect.leds: + if effect.enabled: + effect.set_fade_time(parmFadeTime) + effect.set_enabled(False) + + if not self.enabled: + self.set_fade_time(parmFadeTime) + if gcmd.get_int('RESTART', 0) >= 1: + self.reset_frame() + self.set_enabled(True) + + def _handle_shutdown(self): + self.set_enabled(self.runOnShutown) + + def adcCallback(self, read_time, read_value): + self.analogValue = int(read_value * 1000.0) / 10.0 + + ###################################################################### + # LED Effect layers + ###################################################################### + + # super class for effect animations. new animations should + # inherit this and return 1 frame of [r, g, b] * + # per call of nextFrame() + class _layerBase(object): + def __init__(self, **kwargs): + self.handler = kwargs['handler'] + self.frameHandler = kwargs['frameHandler'] + self.ledCount = kwargs['ledCount'] + self.paletteColors = colorArray(COLORS, kwargs['paletteColors']) + self.effectRate = kwargs['effectRate'] + self.effectCutoff = kwargs['effectCutoff'] + self.frameRate = kwargs['frameRate'] + self.blendingMode = kwargs['blendingMode'] + self.frameNumber = 0 + self.thisFrame = [] + self.frameCount = 1 + self.lastAnalog = 0 + + def nextFrame(self, eventtime): + if not self.frameCount: + return [0] * COLORS * self.ledCount + self.frameNumber += 1 + self.frameNumber = self.frameNumber * \ + ( self.frameNumber < self.frameCount ) + self.lastFrameTime = eventtime + + return self.thisFrame[self.frameNumber] + + def _decayTable(self, factor=1, rate=1): + + frame = [] + + p = (1.0 / self.frameRate) + r = (p/15.0)*factor + + for s in range(0, int((rate<1)+rate)): + frame.append(1.0) + for x in range(2, int(p / rate)): + b = exp(1)**-(x/r) + if b>.004: + frame.append(b) + return frame + + def _gradient(self, palette, steps, reverse=False, toFirst=False): + palette = colorArray(COLORS, palette[:]) + if reverse: palette.reverse() + + if len(palette) == 1: + return colorArray(COLORS, palette * steps) + + if toFirst: + palette += palette[0] + + paletteIntervals = len(palette)-1 + stepIntervals = steps if toFirst else steps-1 + if stepIntervals != 0: + intervals_per_step = float(paletteIntervals) / stepIntervals + else: + intervals_per_step = 0 + + gradient=palette[0] + + for i in range(1,steps): + j = intervals_per_step * i + k = int(j) + r = j-k + k = min(k, len(palette)-1) + + if ( (k+1) >= len(palette) ) | (r == 0.0) : + z = palette[k] + else: + z = [((1-r)*palette[k][m] + r*palette[k+1][m]) for m in range(COLORS)] + gradient += z + return gradient + + #Individual effects inherit from the LED Effect Base class + #each effect must support the nextFrame() method either by + #using the method from the base class or overriding it. + + #Solid color + class layerStatic(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerStatic, self).__init__(**kwargs) + + self.paletteColors = colorArray(COLORS, self.paletteColors) + + gradientLength = int(self.ledCount) + gradient = colorArray(COLORS, self._gradient(self.paletteColors, + gradientLength)) + + self.thisFrame.append(gradient[0:self.ledCount]) + self.frameCount = len(self.thisFrame) + + #Slow pulsing of color + class layerBreathing(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerBreathing, self).__init__(**kwargs) + + brightness = [] + + p = (1 / self.frameRate) * (self.effectRate * 0.5) + o = int(p) + f = 2 * pi + + for x in range(0, int(p)): + if x < p: + v = (exp(-cos((f / p) * (x+o)))-0.367879) / 2.35040238 + else: + v = 0 + + #clamp values + if v > 1.0: + v = 1.0 + elif v < 0.0: + v = 0.0 + + brightness.append(v) + + for c in range(0, len(self.paletteColors)): + color = self.paletteColors[c] + + for b in brightness: + self.thisFrame += [[b * i for i in color] * self.ledCount] + + self.frameCount = len(self.thisFrame) + class layerLinearFade(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerLinearFade, self).__init__(**kwargs) + + gradientLength = int(self.effectRate / self.frameRate) + if gradientLength == 0: gradientLength = 1 + + gradient = colorArray(COLORS, self._gradient(self.paletteColors, + gradientLength, toFirst=True)) + + for i in range(gradientLength): + self.thisFrame.append(gradient[i]*self.ledCount) + + self.frameCount = len(self.thisFrame) + + #Turns the entire strip on and off + class layerBlink(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerBlink, self).__init__(**kwargs) + + dutyCycle= max(0,min(1.0, self.effectCutoff)) + frameCountOn = int(( 1.0 / self.frameRate ) * self.effectRate\ + * dutyCycle) + frameCountOff = int(( 1.0 / self.frameRate ) * self.effectRate\ + * (1-dutyCycle)) + + for c in range(0, len(self.paletteColors)): + color = self.paletteColors[c] + self.thisFrame += [color * self.ledCount] * frameCountOn + self.thisFrame += [[0]*COLORS * self.ledCount] * frameCountOff + + self.frameCount = len(self.thisFrame) + + #Random flashes with decay + class layerTwinkle(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerTwinkle, self).__init__(**kwargs) + + self.thisFrame = colorArray(COLORS, ([0.0]*COLORS) * self.ledCount) + self.lastBrightness = [-1] * self.ledCount + self.decayTable = self._decayTable(factor=1 / self.effectCutoff) + self.decayLen = len(self.decayTable) + self.colorCount = len(self.paletteColors) - 1 + + def nextFrame(self, eventtime): + + for i in range(0, self.ledCount): + + r = randint(0, self.colorCount) + color = self.paletteColors[r] + + if randint(0, 255) > 254 - self.effectRate: + self.lastBrightness[i] = 0 + self.thisFrame[i] = color + + if self.lastBrightness[i] != -1: + if self.lastBrightness[i] == self.decayLen: + self.lastBrightness[i] = -1 + self.thisFrame[i] = ([0.0]*COLORS) + else: + x = self.lastBrightness[i] + self.lastBrightness[i] += 1 + self.thisFrame[i] = [self.decayTable[x] * l + for l in self.thisFrame[i]] + + return self.thisFrame + + #Blinking with decay + class layerStrobe(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerStrobe, self).__init__(**kwargs) + + frameRate = int(1.0 / self.frameRate) + if self.effectRate==0: + frameCount = 1 + else: + frameCount = max(1,int(frameRate / self.effectRate)) + if self.effectCutoff==0: self.effectCutoff=0.001 + decayTable = self._decayTable(factor=1 / self.effectCutoff, + rate=1) + if len(decayTable) > frameCount: + decayTable = decayTable[:frameCount] + else: + decayTable += [0.0] * (frameCount - len(decayTable)) + + for c in range(0, len(self.paletteColors)): + color = self.paletteColors[c] + + for b in decayTable: + self.thisFrame += [[b * i for i in color] * self.ledCount] + + self.frameCount = len(self.thisFrame) + + #Lights move sequentially with decay + class layerComet(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerComet, self).__init__(**kwargs) + if self.effectRate > 0: + self.direction = True + else: + self.direction = False + self.effectRate *= -1 + + if self.effectCutoff <= 0: self.effectCutoff = .1 + + decayTable = self._decayTable(factor=len(self.paletteColors) * \ + self.effectCutoff, rate=1) + + gradient = self.paletteColors[0] + \ + self._gradient(self.paletteColors[1:], len(decayTable)+1) + + decayTable = [c for b in zip(decayTable, decayTable, decayTable, decayTable) \ + for c in b] + + comet = colorArray(COLORS, [a * b for a, b in zip(gradient,decayTable)]) + + comet.padRight([0.0]*COLORS, self.ledCount - len(comet)) + + if self.direction: comet.reverse() + else: comet.shift(self.ledCount - len(comet)) + + if self.effectRate == 0: + self.thisFrame.append(comet[0:self.ledCount]) + else: + for i in range(len(comet)): + comet.shift(int(self.effectRate+(self.effectRate < 1)), + self.direction) + self.thisFrame.append(comet[:self.ledCount]) + + for x in range(int((1/self.effectRate)-(self.effectRate <= 1))): + self.thisFrame.append(comet[:self.ledCount]) + + self.frameCount = len(self.thisFrame) + + #Lights move sequentially with decay + class layerChase(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerChase, self).__init__(**kwargs) + + if self.effectRate > 0: + self.direction = True + else: + self.direction = False + self.effectRate *= -1 + + if len(self.paletteColors) == 1: + self.paletteColors += colorArray(COLORS,COLORS*[0]) + + decayTable = self._decayTable(factor=len(self.paletteColors) * \ + self.effectCutoff, rate=1) + + gradient = self.paletteColors[0] + \ + self._gradient(self.paletteColors[1:], len(decayTable)+1) + + decayTable = [c for b in zip(decayTable, decayTable, decayTable, decayTable) \ + for c in b] + gradient = colorArray(COLORS, [a * b + for a, b in zip(gradient,decayTable)]) + + k=int(self.ledCount/len(gradient))+1 + chase = colorArray(COLORS,k*gradient) + + if self.direction: chase.reverse() + if self.effectRate == 0: + self.thisFrame.append(chase[0:self.ledCount]) + else: + for _ in range(len(chase)): + chase.shift(int(self.effectRate+(self.effectRate < 1)), + self.direction) + self.thisFrame.append(chase[0:self.ledCount]) + + for _ in range(int((1/self.effectRate)-(self.effectRate <= 1))): + self.thisFrame.append(chase[0:self.ledCount]) + + self.frameCount = len(self.thisFrame) + + #Color gradient over all LEDs + class layerGradient(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerGradient, self).__init__(**kwargs) + + direction = -1 if self.effectRate < 0 else 1 + + if self.effectRate == 0: + gradientLength = self.ledCount + else: + gradientLength=abs(int(1/(self.effectRate * self.frameRate))) + gradient = colorArray(COLORS, self._gradient(self.paletteColors, + gradientLength, + toFirst=True)) + + for i in range(gradientLength if self.effectRate != 0 else 1): + frame = colorArray(COLORS, ([0.0]*COLORS) * self.ledCount) + for led in range(self.ledCount): + frame[led] = gradient[ int(i*direction + \ + self.effectCutoff * gradientLength * led \ + / self.ledCount ) % gradientLength] + self.thisFrame.append(frame) + + self.frameCount = len(self.thisFrame) + + class layerPattern(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerPattern, self).__init__(**kwargs) + + self.paletteColors = colorArray(COLORS, self.paletteColors) + frame = colorArray(COLORS, []) + + for i in range(int(self.ledCount/len(self.paletteColors))+1): + frame+=(self.paletteColors) + + if int(self.effectRate/self.frameRate) == 0: + self.thisFrame.append(frame) + else: + for _ in range(len(self.paletteColors) * (self.ledCount-1)): + for _ in range(int(self.effectRate/self.frameRate)): + self.thisFrame.append(colorArray(COLORS, frame)[:COLORS*self.ledCount]) + frame.shift(int(self.effectCutoff)) + + self.frameCount = len(self.thisFrame) + + #Responds to heater temperature + class layerHeater(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerHeater, self).__init__(**kwargs) + + if len(self.paletteColors) == 1: + self.paletteColors += self.paletteColors + + gradient = colorArray(COLORS, self._gradient(self.paletteColors[:-1], 200) + + self.paletteColors[-1:]) + + for i in range(len(gradient)): + self.thisFrame.append(gradient[i] * self.ledCount) + + self.frameCount = len(self.thisFrame) + + def nextFrame(self, eventtime): + heaterTarget = self.frameHandler.heaterTarget[self.handler.heater] + heaterCurrent = self.frameHandler.heaterCurrent[self.handler.heater] + heaterLast = self.frameHandler.heaterLast[self.handler.heater] + + if heaterTarget > 0.0 and heaterCurrent > 0.0: + if (heaterCurrent >= self.effectRate): + if (heaterCurrent <= heaterTarget-2): + s = int(((heaterCurrent - self.effectRate) / heaterTarget) * 200) + s = min(len(self.thisFrame)-1,s) + return self.thisFrame[s] + elif self.effectCutoff > 0: + return None + else: + return self.thisFrame[-1] + else: + return None + + elif self.effectRate > 0 and heaterCurrent > 0.0: + if heaterCurrent >= self.effectRate and heaterLast > 0: + s = int(((heaterCurrent - self.effectRate) / heaterLast) * 200) + s = min(len(self.thisFrame)-1,s) + return self.thisFrame[s] + + return None + + #Responds to heater temperature + class layerTemperature(_layerBase): + def __init__(self, **kwargs): + + super(ledEffect.layerTemperature, self).__init__(**kwargs) + if len(self.paletteColors) == 1: + self.paletteColors = colorArray(COLORS, ([0.0]*COLORS)) + self.paletteColors + gradient = colorArray(COLORS, self._gradient(self.paletteColors, 200)) + for i in range(len(gradient)): + self.thisFrame.append(gradient[i] * self.ledCount) + self.frameCount = len(self.thisFrame) + def nextFrame(self, eventtime): + if self.effectCutoff == self.effectRate: + s = 200 if self.frameHandler.heaterCurrent[self.handler.heater] >= self.effectRate else 0 + else: + s = int(((self.frameHandler.heaterCurrent[self.handler.heater] - + self.effectRate) / + (self.effectCutoff - self.effectRate)) * 200) + + s = min(len(self.thisFrame)-1,s) + s = max(0,s) + return self.thisFrame[s] + + #Responds to analog pin voltage + class layerAnalogPin(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerAnalogPin, self).__init__(**kwargs) + + if len(self.paletteColors) == 1: + self.paletteColors = [0.0]*COLORS + self.paletteColors + + gradient = colorArray(COLORS, self._gradient(self.paletteColors, 101)) + + for i in range(len(gradient)): + self.thisFrame.append(gradient[i] * self.ledCount) + + def nextFrame(self, eventtime): + v = int(self.handler.analogValue * self.effectRate) + + if v > 100: v = 100 + + if v > self.effectCutoff: + return self.thisFrame[v] + else: + return self.thisFrame[0] + + #Lights illuminate relative to stepper position + class layerStepper(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerStepper, self).__init__(**kwargs) + + if self.effectRate < 0: + self.effectRate = self.ledCount + + if self.effectCutoff < 0: + self.effectCutoff = self.ledCount + + if self.effectRate == 0: + trailing = colorArray(COLORS, [0.0]*COLORS * self.ledCount) + else: + trailing = colorArray(COLORS, self._gradient(self.paletteColors[1:], + int(self.effectRate), True)) + trailing.padLeft([0.0]*COLORS, self.ledCount) + + if self.effectCutoff == 0: + leading = colorArray(COLORS, [0.0]*COLORS * self.ledCount) + else: + leading = colorArray(COLORS, self._gradient(self.paletteColors[1:], + int(self.effectCutoff), False)) + leading.padRight([0.0]*COLORS, self.ledCount) + + gradient = colorArray(COLORS, trailing + self.paletteColors[0] + leading) + gradient.shift(len(trailing)-1, 0) + frames = [gradient[:self.ledCount]] + + for i in range(0, self.ledCount): + gradient.shift(1,1) + frames.append(gradient[:self.ledCount]) + + for i in range(101): + x = int((i / 101.0) * self.ledCount) + self.thisFrame.append(frames[x]) + + self.frameCount = len(self.thisFrame) + + def nextFrame(self, eventtime): + if self.handler.stepper == 'x': axis = 0 + elif self.handler.stepper == 'y': axis = 1 + else: axis = 2 + + p = self.frameHandler.stepperPositions[int(axis)] + + if p < 0 : p=0 + if p > 100 : p=100 + return self.thisFrame[int((p - 1) * (p > 0))] + + class layerStepperColor(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerStepperColor, self).__init__(**kwargs) + + if len(self.paletteColors) == 1: + self.paletteColors = [0.0]*COLORS + self.paletteColors + + gradient = colorArray(COLORS, self._gradient(self.paletteColors, 101)) + + for i in range(len(gradient)): + self.thisFrame.append(gradient[i] * self.ledCount) + + def nextFrame(self, eventtime): + if self.handler.stepper == 'x': axis = 0 + elif self.handler.stepper == 'y': axis = 1 + else: axis = 2 + + p = self.frameHandler.stepperPositions[int(axis)]*self.effectRate+self.effectCutoff + + if p < 0 : p=0 + if p > 100 : p=100 + + return self.thisFrame[int(p)] + + #Shameless port of Fire2012 by Mark Kriegsman + + #Shamelessly appropriated from the Arduino FastLED example files + #Fire2012.ino by Daniel Garcia + class layerFire(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerFire, self).__init__(**kwargs) + + self.heatMap = [0.0] * self.ledCount + self.gradient = colorArray(COLORS, self._gradient(self.paletteColors, + 102)) + self.frameLen = len(self.gradient) + self.heatLen = len(self.heatMap) + self.heatSource = int(self.ledCount / 10.0) + self.effectRate = int(self.effectRate) + + if self.heatSource < 1: + self.heatSource = 1 + + def nextFrame(self, eventtime): + frame = [] + + for h in range(self.heatLen): + c = randint(0,self.effectCutoff) + self.heatMap[h] -= (self.heatMap[h] - c >= 0 ) * c + + for i in range(self.ledCount - 1, self.heatSource, -1): + d = (self.heatMap[i - 1] + + self.heatMap[i - 2] + + self.heatMap[i - 3] ) / 3 + + self.heatMap[i] = d * (d >= 0) + + if randint(0, 100) < self.effectRate: + h = randint(0, self.heatSource) + self.heatMap[h] += randint(90,100) + if self.heatMap[h] > 100: + self.heatMap[h] = 100 + + for h in self.heatMap: + frame += self.gradient[int(h)] + + return frame + + #Fire that responds relative to actual vs target temp + class layerHeaterFire(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerHeaterFire, self).__init__(**kwargs) + + self.heatMap = [0.0] * self.ledCount + self.gradient = colorArray(COLORS, self._gradient(self.paletteColors, + 102)) + self.frameLen = len(self.gradient) + self.heatLen = len(self.heatMap) + self.heatSource = int(self.ledCount / 10.0) + self.effectRate = 0 + + if self.heatSource < 1: + self.heatSource = 1 + + def nextFrame(self, eventtime): + frame = [] + spark = 0 + heaterTarget = self.frameHandler.heaterTarget[self.handler.heater] + heaterCurrent = self.frameHandler.heaterCurrent[self.handler.heater] + heaterLast = self.frameHandler.heaterLast[self.handler.heater] + + if heaterTarget > 0.0 and heaterCurrent > 0.0: + if heaterCurrent <= heaterTarget-2: + spark = int((heaterCurrent / heaterTarget) * 80) + brightness = int((heaterCurrent / heaterTarget) * 100) + elif self.effectCutoff > 0: + spark = 0 + else: + spark = 80 + brightness = 100 + elif self.effectRate > 0 and heaterCurrent > 0.0: + if heaterCurrent >= self.effectRate: + spark = int(((heaterCurrent - self.effectRate) + / heaterLast) * 80) + brightness = int(((heaterCurrent - self.effectRate) + / heaterLast) * 100) + + if spark > 0: + cooling = int((heaterCurrent / heaterTarget) * 20) + + for h in range(self.heatLen): + c = randint(0, cooling) + self.heatMap[h] -= (self.heatMap[h] - c >= 0 ) * c + + for i in range(self.ledCount - 1, self.heatSource, -1): + d = (self.heatMap[i - 1] + + self.heatMap[i - 2] + + self.heatMap[i - 3] ) / 3 + + self.heatMap[i] = d * (d >= 0) + + if randint(0, 100) < spark: + h = randint(0, self.heatSource) + self.heatMap[h] += brightness + if self.heatMap[h] > 100: + self.heatMap[h] = 100 + + for h in self.heatMap: + frame += self.gradient[int(h)] + + return frame + + else: + return None + + #Progress bar using M73 gcode command + class layerProgress(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerProgress, self).__init__(**kwargs) + + if self.effectRate < 0: + self.effectRate = self.ledCount + + if self.effectCutoff < 0: + self.effectCutoff = self.ledCount + + if self.effectRate == 0: + trailing = colorArray(COLORS, [0.0]*COLORS * self.ledCount) + else: + trailing = colorArray(COLORS, self._gradient(self.paletteColors[1:], + int(self.effectRate), True)) + trailing.padLeft([0.0]*COLORS, self.ledCount) + + if self.effectCutoff == 0: + leading = colorArray(COLORS, [0.0]*COLORS * self.ledCount) + else: + leading = colorArray(COLORS, self._gradient(self.paletteColors[1:], + int(self.effectCutoff), False)) + leading.padRight([0.0]*COLORS, self.ledCount) + + gradient = colorArray(COLORS, trailing + self.paletteColors[0] + leading) + gradient.shift(len(trailing), 0) + frames = [gradient[:self.ledCount]] + + for i in range(0, self.ledCount): + gradient.shift(1,1) + frames.append(gradient[:self.ledCount]) + + self.thisFrame.append(colorArray(COLORS, [0.0]*COLORS * self.ledCount)) + for i in range(1, 101): + x = int((i / 101.0) * self.ledCount) + self.thisFrame.append(frames[x]) + + self.frameCount = len(self.thisFrame) + + def nextFrame(self, eventtime): + p = self.frameHandler.printProgress + return self.thisFrame[p] #(p - 1) * (p > 0)] + + class layerHoming(_layerBase): + def __init__(self, **kwargs): + super(ledEffect.layerHoming, self).__init__(**kwargs) + + self.paletteColors = colorArray(COLORS, self.paletteColors) + + gradientLength = int(self.ledCount) + gradient = colorArray(COLORS, self._gradient(self.paletteColors, + gradientLength)) + + for c in range(0, len(self.paletteColors)): + color = self.paletteColors[c] + self.thisFrame.append(colorArray(COLORS,color*self.ledCount)) + + self.decayTable = self._decayTable(factor=self.effectRate) + self.decayTable.append(0.0) + self.decayLen = len(self.decayTable) + self.counter=self.decayLen-1 + self.coloridx=-1 + self.my_flag={} + for endstop in self.handler.endstops: + logging.info(endstop) + self.frameHandler.homing_end_flag[endstop] = 0 + self.my_flag[endstop] = self.frameHandler.homing_end_flag[endstop] + + def nextFrame(self, eventtime): + for endstop in self.handler.endstops: + + if self.my_flag[endstop] != self.frameHandler.homing_end_flag[endstop]: + self.counter = 0 + self.coloridx = (self.coloridx + 1) % len(self.paletteColors) + self.my_flag[endstop] = self.frameHandler.homing_end_flag[endstop] + + frame = [self.decayTable[self.counter] * i for i in self.thisFrame[self.coloridx ]] + if self.counter < self.decayLen-1: + self.counter += 1 + + return frame + + +def load_config_prefix(config): + return ledEffect(config) diff --git a/packages/led_effect/poetry.lock b/packages/led_effect/poetry.lock new file mode 100644 index 0000000..e2efb75 --- /dev/null +++ b/packages/led_effect/poetry.lock @@ -0,0 +1,237 @@ +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "atomicwrites" +version = "1.4.1" +description = "Atomic file writes." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "klippermock" +version = "0.1.0" +description = "" +optional = false +python-versions = "<3.12,>=3.8" +files = [] +develop = true + +[package.dependencies] +led_effect = {path = "../led_effect", develop = true} + +[package.source] +type = "directory" +url = "../klippermock" + +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "pluggy" +version = "1.4.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pytest" +version = "8.1.1" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, + {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.4,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-golden" +version = "0.2.2" +description = "Plugin for pytest that offloads expected outputs to data files" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "pytest-golden-0.2.2.tar.gz", hash = "sha256:54e6f317a533758e6dcc96e6ef9457c610ae1c9db53575686a303f3ef7ad1e35"}, + {file = "pytest_golden-0.2.2-py3-none-any.whl", hash = "sha256:2e43a45244d16ab5ac8bbd72e26f28d2c9a24440f2fbdb26940e46fed505e5c0"}, +] + +[package.dependencies] +atomicwrites = ">=1.4.0,<2.0.0" +pytest = ">=6.1.2" +"ruamel.yaml" = ">=0.16.12,<1.0" +testfixtures = ">=6.15.0,<7.0.0" + +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "testfixtures" +version = "6.18.5" +description = "A collection of helpers and mock objects for unit tests and doc tests." +optional = false +python-versions = "*" +files = [ + {file = "testfixtures-6.18.5-py2.py3-none-any.whl", hash = "sha256:7de200e24f50a4a5d6da7019fb1197aaf5abd475efb2ec2422fdcf2f2eb98c1d"}, + {file = "testfixtures-6.18.5.tar.gz", hash = "sha256:02dae883f567f5b70fd3ad3c9eefb95912e78ac90be6c7444b5e2f46bf572c84"}, +] + +[package.extras] +build = ["setuptools-git", "twine", "wheel"] +docs = ["django", "django (<2)", "mock", "sphinx", "sybil", "twisted", "zope.component"] +test = ["django", "django (<2)", "mock", "pytest (>=3.6)", "pytest-cov", "pytest-django", "sybil", "twisted", "zope.component"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "<3.12,>=3.8" +content-hash = "313522a67a16213ac7d839eb50fba153644234372eb1584f41616e4024f26dff" diff --git a/packages/led_effect/pyproject.toml b/packages/led_effect/pyproject.toml new file mode 100644 index 0000000..dbd1ea0 --- /dev/null +++ b/packages/led_effect/pyproject.toml @@ -0,0 +1,17 @@ +[tool.poetry] +name = "led_effect" +version = "0.1.0" +authors = ["Julian Schill "] +description = "" + +[tool.poetry.dependencies] +python = "<3.12,>=3.8" + +[tool.poetry.group.dev.dependencies] +pytest = "^8.0.1" +pytest-golden = "^0.2.2" +klippermock = {path = "../klippermock", develop = true} + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/simulator/tests/__init__.py b/packages/led_effect/tests/__init__.py similarity index 100% rename from simulator/tests/__init__.py rename to packages/led_effect/tests/__init__.py diff --git a/packages/led_effect/tests/golden/breathing.yml b/packages/led_effect/tests/golden/breathing.yml new file mode 100644 index 0000000..dd27717 --- /dev/null +++ b/packages/led_effect/tests/golden/breathing.yml @@ -0,0 +1,4102 @@ +input: breathing 3 1 top (0.6, 1.0, 0.0, 0.1) +output: +- - - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - true +- - - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - true +- - - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - true +- - - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - true +- - - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - true +- - - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - true +- - - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - true +- - - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - true +- - - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - true +- - - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - true +- - - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - true +- - - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - true +- - - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - true +- - - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - true +- - - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - true +- - - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - true +- - - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - true +- - - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - true +- - - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - true +- - - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - true +- - - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - true +- - - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - true +- - - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - true +- - - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - true +- - - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - true +- - - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - true +- - - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - true +- - - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - true +- - - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - true +- - - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - true +- - - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - true +- - - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - true +- - - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - true +- - - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - true +- - - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - true +- - - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - true +- - - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - true +- - - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - true +- - - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - true +- - - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - true +- - - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - true +- - - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - true +- - - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - true +- - - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - true +- - - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - true +- - - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - true +- - - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - true +- - - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - true +- - - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - true +- - - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - true +- - - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - true +- - - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - true +- - - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - true +- - - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - true +- - - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - true +- - - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - true +- - - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - true +- - - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - true +- - - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - true +- - - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - true +- - - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - true +- - - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - true +- - - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - true +- - - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - true +- - - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - 0.08742032402419476 + - 0.14570054004032462 + - 0.0 + - 0.014570054004032463 + - true +- - - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - 0.06092190726405765 + - 0.10153651210676275 + - 0.0 + - 0.010153651210676275 + - true +- - - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - 0.04031962869402889 + - 0.06719938115671482 + - 0.0 + - 0.006719938115671483 + - true +- - - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - 0.0247538474338576 + - 0.04125641238976267 + - 0.0 + - 0.004125641238976268 + - true +- - - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - 0.013463488593161162 + - 0.022439147655268603 + - 0.0 + - 0.0022439147655268603 + - true +- - - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - 0.005837874795997974 + - 0.00972979132666329 + - 0.0 + - 0.000972979132666329 + - true +- - - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - true +- - - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - 1.126202337292922e-07 + - 1.8770038954882034e-07 + - 0.0 + - 1.8770038954882034e-08 + - true +- - - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - 0.0014377180143658808 + - 0.0023961966906098013 + - 0.0 + - 0.00023961966906098015 + - true +- - - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - 0.0058378747959979315 + - 0.009729791326663219 + - 0.0 + - 0.000972979132666322 + - true +- - - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - 0.013463488593161176 + - 0.022439147655268627 + - 0.0 + - 0.002243914765526863 + - true +- - - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - 0.02475384743385749 + - 0.041256412389762485 + - 0.0 + - 0.004125641238976249 + - true +- - - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - 0.04031962869402872 + - 0.06719938115671453 + - 0.0 + - 0.006719938115671453 + - true +- - - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - 0.06092190726405742 + - 0.10153651210676237 + - 0.0 + - 0.010153651210676238 + - true +- - - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - 0.08742032402419452 + - 0.1457005400403242 + - 0.0 + - 0.014570054004032421 + - true +- - - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - 0.12067216802726477 + - 0.2011202800454413 + - 0.0 + - 0.020112028004544133 + - true +- - - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - 0.16136496594255484 + - 0.2689416099042581 + - 0.0 + - 0.02689416099042581 + - true +- - - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - 0.20977462199591354 + - 0.34962436999318924 + - 0.0 + - 0.034962436999318926 + - true +- - - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - 0.26546339391653656 + - 0.4424389898608943 + - 0.0 + - 0.044243898986089436 + - true +- - - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - 0.32696757327997433 + - 0.5449459554666239 + - 0.0 + - 0.054494595546662396 + - true +- - - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - 0.3915659504690441 + - 0.6526099174484068 + - 0.0 + - 0.06526099174484068 + - true +- - - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - 0.4552482752961474 + - 0.758747125493579 + - 0.0 + - 0.0758747125493579 + - true +- - - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - 0.5129922499234787 + - 0.8549870832057979 + - 0.0 + - 0.08549870832057979 + - true +- - - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - 0.5593890661844423 + - 0.9323151103074039 + - 0.0 + - 0.0932315110307404 + - true +- - - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - true +- - - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - 0.6 + - 1.0 + - 0.0 + - 0.1 + - true +- - - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - 0.5895377282506978 + - 0.9825628804178297 + - 0.0 + - 0.09825628804178298 + - true +- - - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - 0.5593890661844425 + - 0.9323151103074042 + - 0.0 + - 0.09323151103074043 + - true +- - - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - 0.5129922499234789 + - 0.8549870832057983 + - 0.0 + - 0.08549870832057983 + - true +- - - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - 0.4552482752961482 + - 0.7587471254935804 + - 0.0 + - 0.07587471254935804 + - true +- - - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - 0.391565950469045 + - 0.6526099174484083 + - 0.0 + - 0.06526099174484083 + - true +- - - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - 0.3269675732799746 + - 0.5449459554666244 + - 0.0 + - 0.054494595546662444 + - true +- - - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - 0.2654633939165368 + - 0.4424389898608947 + - 0.0 + - 0.04424389898608947 + - true +- - - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - 0.20977462199591373 + - 0.3496243699931896 + - 0.0 + - 0.03496243699931896 + - true +- - - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - 0.161364965942555 + - 0.26894160990425836 + - 0.0 + - 0.02689416099042584 + - true +- - - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - 0.12067216802726494 + - 0.20112028004544158 + - 0.0 + - 0.02011202800454416 + - true diff --git a/packages/led_effect/tests/golden/comet.yml b/packages/led_effect/tests/golden/comet.yml new file mode 100644 index 0000000..d95f535 --- /dev/null +++ b/packages/led_effect/tests/golden/comet.yml @@ -0,0 +1,4102 @@ +input: comet 0.3 0 add (0, 0, 1) +output: +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true diff --git a/packages/led_effect/tests/golden/gradient.yml b/packages/led_effect/tests/golden/gradient.yml new file mode 100644 index 0000000..f274254 --- /dev/null +++ b/packages/led_effect/tests/golden/gradient.yml @@ -0,0 +1,4102 @@ +input: gradient 0.3 1 add (0.3, 0.0, 0.0),(0.0, 0.3, 0.0),(0.0, 0.0, 0.3) +output: +- - - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - true +- - - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - true +- - - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - true +- - - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - true +- - - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - true +- - - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - true +- - - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - true +- - - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - true +- - - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - true +- - - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - true +- - - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - true +- - - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - true +- - - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - true +- - - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - true +- - - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - true +- - - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - true +- - - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - true +- - - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - true +- - - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - true +- - - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - true +- - - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - true +- - - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - true +- - - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - true +- - - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - true +- - - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - true +- - - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - true +- - - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - true +- - - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - true +- - - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - true +- - - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - true +- - - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - true +- - - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - true +- - - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - true +- - - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - true +- - - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - true +- - - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - true +- - - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - true +- - - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - true +- - - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - true +- - - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - true +- - - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - true +- - - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - true +- - - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - true +- - - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - true +- - - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - true +- - - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - true +- - - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - true +- - - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - true +- - - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - true +- - - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - true +- - - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - true +- - - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - true +- - - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - true +- - - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - true +- - - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - true +- - - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - true +- - - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - true +- - - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - true +- - - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - true +- - - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - true +- - - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - true +- - - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - true +- - - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - true +- - - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - true +- - - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - true +- - - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - true +- - - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - true +- - - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - true +- - - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - true +- - - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - true +- - - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - true +- - - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - true +- - - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - true +- - - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - true +- - - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - true +- - - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - true +- - - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - true +- - - 0.21 + - 0.09 + - 0.0 + - 0.0 + - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - true +- - - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - true +- - - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - true +- - - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - true +- - - 0.15374999999999997 + - 0.14625 + - 0.0 + - 0.0 + - 0.06375 + - 0.23625 + - 0.0 + - 0.0 + - 0.0 + - 0.27375 + - 0.02624999999999997 + - 0.0 + - 0.0 + - 0.18375 + - 0.11624999999999998 + - 0.0 + - 0.0 + - 0.09375 + - 0.20625 + - 0.0 + - 0.0 + - 0.003750000000000053 + - 0.29624999999999996 + - 0.0 + - 0.08625000000000002 + - 0.0 + - 0.21374999999999997 + - 0.0 + - 0.17624999999999996 + - 0.0 + - 0.12375000000000003 + - 0.0 + - 0.26624999999999993 + - 0.0 + - 0.03375000000000008 + - 0.0 + - 0.24375 + - 0.056249999999999994 + - 0.0 + - 0.0 + - true +- - - 0.1425 + - 0.1575 + - 0.0 + - 0.0 + - 0.05250000000000001 + - 0.24749999999999997 + - 0.0 + - 0.0 + - 0.0 + - 0.2625 + - 0.0375 + - 0.0 + - 0.0 + - 0.1725 + - 0.1275 + - 0.0 + - 0.0 + - 0.08250000000000003 + - 0.21749999999999994 + - 0.0 + - 0.007499999999999973 + - 0.0 + - 0.29250000000000004 + - 0.0 + - 0.09749999999999992 + - 0.0 + - 0.20250000000000007 + - 0.0 + - 0.1875 + - 0.0 + - 0.11249999999999999 + - 0.0 + - 0.2774999999999999 + - 0.0 + - 0.02250000000000005 + - 0.0 + - 0.23249999999999998 + - 0.06749999999999999 + - 0.0 + - 0.0 + - true +- - - 0.13125 + - 0.16874999999999998 + - 0.0 + - 0.0 + - 0.041250000000000016 + - 0.25875 + - 0.0 + - 0.0 + - 0.0 + - 0.25125000000000003 + - 0.04874999999999996 + - 0.0 + - 0.0 + - 0.16125000000000003 + - 0.13874999999999996 + - 0.0 + - 0.0 + - 0.07125000000000001 + - 0.22874999999999998 + - 0.0 + - 0.01875 + - 0.0 + - 0.28125 + - 0.0 + - 0.10874999999999994 + - 0.0 + - 0.19125000000000006 + - 0.0 + - 0.19875 + - 0.0 + - 0.10124999999999997 + - 0.0 + - 0.28874999999999995 + - 0.0 + - 0.011250000000000026 + - 0.0 + - 0.22125 + - 0.07875 + - 0.0 + - 0.0 + - true +- - - 0.12 + - 0.18 + - 0.0 + - 0.0 + - 0.030000000000000027 + - 0.26999999999999996 + - 0.0 + - 0.0 + - 0.0 + - 0.24 + - 0.059999999999999984 + - 0.0 + - 0.0 + - 0.15 + - 0.15 + - 0.0 + - 0.0 + - 0.06000000000000005 + - 0.23999999999999994 + - 0.0 + - 0.030000000000000027 + - 0.0 + - 0.26999999999999996 + - 0.0 + - 0.11999999999999997 + - 0.0 + - 0.18000000000000002 + - 0.0 + - 0.2099999999999999 + - 0.0 + - 0.09000000000000008 + - 0.0 + - 0.3 + - 0.0 + - 0.0 + - 0.0 + - 0.21 + - 0.09 + - 0.0 + - 0.0 + - true +- - - 0.10875000000000001 + - 0.19124999999999998 + - 0.0 + - 0.0 + - 0.01875 + - 0.28125 + - 0.0 + - 0.0 + - 0.0 + - 0.22874999999999998 + - 0.07125000000000001 + - 0.0 + - 0.0 + - 0.13875000000000004 + - 0.16124999999999995 + - 0.0 + - 0.0 + - 0.04875000000000002 + - 0.25125 + - 0.0 + - 0.04124999999999992 + - 0.0 + - 0.2587500000000001 + - 0.0 + - 0.13125 + - 0.0 + - 0.16874999999999998 + - 0.0 + - 0.22124999999999995 + - 0.0 + - 0.07875000000000006 + - 0.0 + - 0.28875 + - 0.01125 + - 0.0 + - 0.0 + - 0.19875 + - 0.10124999999999999 + - 0.0 + - 0.0 + - true +- - - 0.09750000000000002 + - 0.20249999999999999 + - 0.0 + - 0.0 + - 0.007500000000000007 + - 0.2925 + - 0.0 + - 0.0 + - 0.0 + - 0.21750000000000003 + - 0.08249999999999998 + - 0.0 + - 0.0 + - 0.1275 + - 0.1725 + - 0.0 + - 0.0 + - 0.0375 + - 0.2625 + - 0.0 + - 0.05249999999999994 + - 0.0 + - 0.24750000000000005 + - 0.0 + - 0.14250000000000002 + - 0.0 + - 0.15749999999999997 + - 0.0 + - 0.23249999999999996 + - 0.0 + - 0.06750000000000002 + - 0.0 + - 0.2775 + - 0.0225 + - 0.0 + - 0.0 + - 0.1875 + - 0.11249999999999999 + - 0.0 + - 0.0 + - true +- - - 0.08625 + - 0.21375 + - 0.0 + - 0.0 + - 0.0 + - 0.29625 + - 0.0037499999999999864 + - 0.0 + - 0.0 + - 0.20625 + - 0.09375 + - 0.0 + - 0.0 + - 0.11624999999999998 + - 0.18375 + - 0.0 + - 0.0 + - 0.02625000000000004 + - 0.27374999999999994 + - 0.0 + - 0.06374999999999997 + - 0.0 + - 0.23625000000000002 + - 0.0 + - 0.15374999999999991 + - 0.0 + - 0.14625000000000007 + - 0.0 + - 0.24375 + - 0.0 + - 0.056249999999999994 + - 0.0 + - 0.26625 + - 0.033749999999999995 + - 0.0 + - 0.0 + - 0.17625 + - 0.12374999999999999 + - 0.0 + - 0.0 + - true +- - - 0.075 + - 0.22499999999999998 + - 0.0 + - 0.0 + - 0.0 + - 0.285 + - 0.015000000000000013 + - 0.0 + - 0.0 + - 0.19500000000000003 + - 0.10499999999999995 + - 0.0 + - 0.0 + - 0.10500000000000002 + - 0.19499999999999998 + - 0.0 + - 0.0 + - 0.015000000000000013 + - 0.285 + - 0.0 + - 0.075 + - 0.0 + - 0.22499999999999998 + - 0.0 + - 0.16499999999999995 + - 0.0 + - 0.13500000000000004 + - 0.0 + - 0.255 + - 0.0 + - 0.04499999999999997 + - 0.0 + - 0.255 + - 0.045 + - 0.0 + - 0.0 + - 0.165 + - 0.13499999999999998 + - 0.0 + - 0.0 + - true diff --git a/packages/led_effect/tests/golden/sb_critical_error.yml b/packages/led_effect/tests/golden/sb_critical_error.yml new file mode 100644 index 0000000..c057c3c --- /dev/null +++ b/packages/led_effect/tests/golden/sb_critical_error.yml @@ -0,0 +1,4105 @@ +input: | + strobe 1 1.5 add (1.0, 1.0, 1.0) + breathing 2 0 difference (0.95, 0.0, 0.0) + static 1 0 top (1.0, 0.0, 0.0) +output: +- - - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true +- - - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - true +- - - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true +- - - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - true +- - - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true +- - - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - true +- - - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true +- - - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - 0.8366749799686775 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909552 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - 0.625109145771394 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - 0.4823013423067073 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - 0.3289556732983323 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - 0.18776227095449283 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813229 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - 0.050000000000000044 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - 0.08680619817813162 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - 0.1877622709544916 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - 0.32895567329833086 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - 0.48230134230670585 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - 0.6251091457713926 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - 0.7445054705909546 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - 0.836674979968677 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - 0.9035403134985754 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - 0.9494000653515854 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - 0.9786828097274947 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - 0.9948459647270004 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - 1.99999982168463 + - 1.0 + - 1.0 + - 0.0 + - true +- - - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 1.148200931571929 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 1.0387374776228029 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.9729178112075948 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.912749995102544 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true diff --git a/packages/led_effect/tests/golden/static.yml b/packages/led_effect/tests/golden/static.yml new file mode 100644 index 0000000..b0a27bf --- /dev/null +++ b/packages/led_effect/tests/golden/static.yml @@ -0,0 +1,4102 @@ +input: static 1 0 top (1.0, 0.0, 0.0) +output: +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - 1.0 + - 0.0 + - 0.0 + - 0.0 + - true diff --git a/packages/led_effect/tests/golden/strobe.yml b/packages/led_effect/tests/golden/strobe.yml new file mode 100644 index 0000000..16cf108 --- /dev/null +++ b/packages/led_effect/tests/golden/strobe.yml @@ -0,0 +1,4102 @@ +input: ' strobe 1 1.5 add (1.0, 1.0, 1.0)' +output: +- - - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - true +- - - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - true +- - - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - true +- - - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - true +- - - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - 1.0 + - 1.0 + - 1.0 + - 0.0 + - true +- - - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.15335496684492847 + - 0.0 + - true +- - - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.06005466789530795 + - 0.0 + - true +- - - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.023517745856009114 + - 0.0 + - true +- - - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.009209681603968142 + - 0.0 + - true diff --git a/packages/led_effect/tests/led_effect_golden_test.py b/packages/led_effect/tests/led_effect_golden_test.py new file mode 100644 index 0000000..cfbecb0 --- /dev/null +++ b/packages/led_effect/tests/led_effect_golden_test.py @@ -0,0 +1,16 @@ +import pytest +from klippermock import * + +NUM_FRAMES = 100 + +@pytest.mark.golden_test("golden/*.yml") +def test_led_effects_reference(golden): + config = mockConfig() + config.setint("ledcount", 10) + config.set("layers", + golden["input"]) + printer = mockPrinter(config) + printer._handle_ready() + + frames = [ list(printer.led_effect.getFrame(i)) for i in range(NUM_FRAMES) ] + assert frames == golden.out["output"] diff --git a/packages/led_effect/tests/led_effect_plugin_test.py b/packages/led_effect/tests/led_effect_plugin_test.py new file mode 100644 index 0000000..72d69c7 --- /dev/null +++ b/packages/led_effect/tests/led_effect_plugin_test.py @@ -0,0 +1,65 @@ +import pytest +from klippermock import * + +def test_parsing_basics_works(): + config = mockConfig() + config.setint("ledcount", 10) + config.set( + "layers", "gradient 2 3 top (1.0,0.0,0.0),(0.0,1.0,0.0),(0.0,0.0,1.0) ") + printer = mockPrinter(config) + printer._handle_ready() + layer = printer.led_effect.handler.effects[0].layers[0] + + assert layer.effectRate == 2 + assert layer.effectCutoff == 3 + assert layer.blendingMode == "top" + assert layer.paletteColors == [1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0] + +def test_color_blending_colorspace_rgb_default(): + config = mockConfig() + config.setint("ledcount", 3) + config.set( + "layers", """ + static 0 0 top (1, 0, 0), (0, 0, 1) + """) + printer = mockPrinter(config) + printer._handle_ready() + assert printer.led_effect.getFrame(0) == ([ + 1.0, 0.0, 0.0, 0.0, + 0.5, 0.0, 0.5, 0.0, + 0.0, 0.0, 1.0, 0.0 + ], True) + + + +def test_it_should_not_switch_off_leds_if_autostart_is_off(): + config = mockConfig() + config.setint("ledcount", 1) + config.setbool("autostart", False) + config.set( + "layers", """ + static 0 0 top (0.5, 0.5, 0.5, 0.5) + """) + printer = mockPrinter(config) + printer.led_helper.led_state = [(1, 1, 1, 1)] + printer._handle_ready() + printer.led_effect.handler._getFrames(1) + printer.led_effect.handler._getFrames(2) + assert printer.led_helper.led_state == [(1, 1, 1, 1)] + +def test_it_should_support_disabling_an_effect(): + config = mockConfig() + config.setint("ledcount", 1) + config.setbool("autostart", True) + config.set( + "layers", """ + static 0 0 top (0.5, 0.5, 0.5, 0.5) + """) + printer = mockPrinter(config) + printer.led_helper.led_state = [(1, 1, 1, 1)] + printer._handle_ready() + [printer.led_effect.handler._getFrames(x) for x in range(0, 10)] + assert printer.led_helper.led_state == [(0.5, 0.5, 0.5, 0.5)] + printer.led_effect.set_enabled(False) + assert printer.led_helper.led_state == [(0, 0, 0, 0)] diff --git a/packages/preview_generator/README.md b/packages/preview_generator/README.md new file mode 100644 index 0000000..db9d410 --- /dev/null +++ b/packages/preview_generator/README.md @@ -0,0 +1,14 @@ +WoopWOopWoop + +![Preview](./preview_1898533314.gif) + +``` +layers: + static() top #FF0000 +``` + +![Preview](./preview_1046037910.gif) + +```layers +static() top #FF0000 +``` \ No newline at end of file diff --git a/packages/preview_generator/app.py b/packages/preview_generator/app.py new file mode 100644 index 0000000..23baaae --- /dev/null +++ b/packages/preview_generator/app.py @@ -0,0 +1,22 @@ +import argparse +import sys +from preview_generator import generate_preview + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + prog='Preview-Generator', + description='Generates an animated image of a given layer') + parser.add_argument('layers', type=str, nargs='?', default=sys.stdin) + parser.add_argument('--fps', default=24, type=int) + parser.add_argument('--seconds', '-s', default=10, type=int) + parser.add_argument('--diameter', '-d', default=50, type=int) + parser.add_argument('--margin', '-m', default=5, type=int) + parser.add_argument('--leds', '-l', default=10, type=int) + parser.add_argument('--output', '-o', default='output.gif') + args = parser.parse_args() + + layers = args.layers if args.layers != sys.stdin else sys.stdin.read() + + generate_preview(layers, args.fps, args.seconds, args.leds, args.diameter, args.margin, args.output) + diff --git a/packages/preview_generator/example.txt b/packages/preview_generator/example.txt new file mode 100644 index 0000000..358b10b --- /dev/null +++ b/packages/preview_generator/example.txt @@ -0,0 +1,4 @@ +heater(heater=heater_bed,minTemp=20,disableOnceReached=1,colorSpace=hsl) top #00AA00, #AAAA00, #FF0000, #FF0000, #FF0000 +heater(heater=hotend,minTemp=20,disableOnceReached=1,colorSpace=hsl) top #00AA00, #AAAA00, #FF0000, #FF0000, #FF0000 +linearfade(duration=5) multiply #FFFFFF, #AAAAAA, #555555 +comet(speed=0.5,tailLength=5,colorSpace=hsl) add #FF6C11, #FF3864, #2DE2E6, #261447, #0D0221, #023788 diff --git a/packages/preview_generator/markdown_generator.py b/packages/preview_generator/markdown_generator.py new file mode 100644 index 0000000..bd5a7ec --- /dev/null +++ b/packages/preview_generator/markdown_generator.py @@ -0,0 +1,51 @@ +import re +import zlib +import os +import argparse +from preview_generator import generate_preview +from preview_generator import markdown_regex + +args = None + +def replace_with_preview(match): + content = match.group('block') + layers = match.group('layers') + output_dir = os.path.dirname(args.markdown.name) + filename = os.path.join(output_dir, args.directory, "preview_" + str(zlib.crc32(repr([layers, args]).encode('utf-8')))+".gif") + relative_filename = "./"+os.path.relpath(filename, os.path.dirname(args.markdown.name)) + # If file doesn't exist + if not os.path.exists(filename): + print("Generating "+filename) + generate_preview(layers, args.fps, args.seconds, args.leds, args.diameter, args.margin, filename) + else: + print("Using existing "+filename) + return """![Preview](%s) + +%s""" % (relative_filename, content) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + prog='Preview-Generator', + description='Generates an animated image of a given layer') + parser.add_argument('markdown', type=argparse.FileType('r')) + parser.add_argument('--fps', default=24, type=int) + parser.add_argument('--seconds', '-s', default=10, type=int) + parser.add_argument('--directory', default=".", type=str) + parser.add_argument('--diameter', '-d', default=50, type=int) + parser.add_argument('--margin', '-m', default=5, type=int) + parser.add_argument('--leds', '-l', default=10, type=int) + args = parser.parse_args() + + if not os.path.exists(os.path.join(os.path.dirname(args.markdown.name), args.directory)): + os.makedirs(os.path.join(os.path.dirname(args.markdown.name), args.directory)) + + markdown = args.markdown.read() + args.markdown.close() + markdown = markdown_regex.sub(replace_with_preview, markdown) + file = open(args.markdown.name, 'w') + file.write(markdown) + file.close() + + + \ No newline at end of file diff --git a/packages/preview_generator/poetry.lock b/packages/preview_generator/poetry.lock new file mode 100644 index 0000000..d003586 --- /dev/null +++ b/packages/preview_generator/poetry.lock @@ -0,0 +1,216 @@ +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "klippermock" +version = "0.1.0" +description = "" +optional = false +python-versions = "<3.12,>=3.8" +files = [] +develop = true + +[package.dependencies] +led_effect = {path = "../led_effect", develop = true} + +[package.source] +type = "directory" +url = "../klippermock" + +[[package]] +name = "led-effect" +version = "0.1.0" +description = "" +optional = false +python-versions = "<3.12,>=3.8" +files = [] +develop = true + +[package.source] +type = "directory" +url = "../led_effect" + +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "pillow" +version = "10.3.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "pluggy" +version = "1.4.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pytest" +version = "8.1.1" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, + {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.4,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "<3.12,>=3.8" +content-hash = "ad7be66b9ff514d517ea6903cd898a402205d1e14c92a9121b5b60dea64ece65" diff --git a/packages/preview_generator/preview_generator/__init__.py b/packages/preview_generator/preview_generator/__init__.py new file mode 100644 index 0000000..1b6b370 --- /dev/null +++ b/packages/preview_generator/preview_generator/__init__.py @@ -0,0 +1,2 @@ +from .preview_generator import generate_preview +from .markdown_regex import markdown_regex \ No newline at end of file diff --git a/packages/preview_generator/preview_generator/markdown_regex.py b/packages/preview_generator/preview_generator/markdown_regex.py new file mode 100644 index 0000000..89bd644 --- /dev/null +++ b/packages/preview_generator/preview_generator/markdown_regex.py @@ -0,0 +1,3 @@ +import re + +markdown_regex = re.compile(r'(\!\[Preview\]\(.+?\)\n\n)?(?P```(layers|\nlayers\:)\n(?P.*?)\n```)', re.DOTALL) \ No newline at end of file diff --git a/packages/preview_generator/preview_generator/markdown_regex_test.py b/packages/preview_generator/preview_generator/markdown_regex_test.py new file mode 100644 index 0000000..4c669cd --- /dev/null +++ b/packages/preview_generator/preview_generator/markdown_regex_test.py @@ -0,0 +1,73 @@ +import re +from . import markdown_regex + +def test_with_one_lines(): + text = """ +Long text + +```layers +static +``` +""" + match = markdown_regex.search(text) + assert match.groupdict() == { + 'block': '```layers\nstatic\n```', + 'layers': 'static' + } + +def test_with_two_lines(): + text = """ +Long text + +```layers +static +breathing +``` +""" + match = markdown_regex.search(text) + assert match.groupdict() == { + 'block': '```layers\nstatic\nbreathing\n```', + 'layers': 'static\nbreathing' + } + +def test_with_layers_on_extra_line_with_colon(): + text = """ +Long text + +``` +layers: + static + breathing +``` +""" + match = markdown_regex.search(text) + assert match.groupdict() == { + 'block': '```\nlayers:\n static\n breathing\n```', + 'layers': ' static\n breathing' + } + + +def test_with_preceeding_preview_image(): + text = """ +Long text + +![Preview](./woop.png) + +``` +layers: + static + breathing +``` +""" + match = markdown_regex.search(text) + assert match.group(0) == """![Preview](./woop.png) + +``` +layers: + static + breathing +```""" + assert match.groupdict() == { + 'block': '```\nlayers:\n static\n breathing\n```', + 'layers': ' static\n breathing' + } diff --git a/packages/preview_generator/preview_generator/preview_generator.py b/packages/preview_generator/preview_generator/preview_generator.py new file mode 100644 index 0000000..0b5d675 --- /dev/null +++ b/packages/preview_generator/preview_generator/preview_generator.py @@ -0,0 +1,54 @@ +from klippermock import * +from PIL import Image, ImageDraw + + +def generate_preview(layers, fps, seconds, leds, diameter, margin, output): + config = mockConfig() + config.setint("ledcount", leds) + config.setint("framerate", fps) + config.set("layers", layers) + printer = mockPrinter(config) + printer._handle_ready() + printer.led_effect.handler.heaterCurrent = {"heater_bed": 0, "hotend": 0} + printer.led_effect.handler.heaterTarget = {"heater_bed": 60, "hotend": 250} + printer.led_effect.handler.heaterLast = {"heater_bed": 0, "hotend": 0} + + width = leds*diameter + margin*(leds+1) + height = diameter+margin*2 + progressThickness = 3 + frames = [] + + + if all([type(e).__name__ == 'layerStatic' for e in printer.led_effect.layers]): + totalFrameCount = 1 + elif len(printer.led_effect.layers) == 1 and len(printer.led_effect.layers[0].thisFrame) > 0: + totalFrameCount = len(printer.led_effect.layers[0].thisFrame) + else: + totalFrameCount = (seconds*fps) + + + for i in range(totalFrameCount): + printer.led_effect.handler.heaterCurrent["hotend"] = 250*i/( + totalFrameCount) + printer.led_effect.handler.heaterCurrent["heater_bed"] = 60*i/( + totalFrameCount) + printer.set_progress(int(100*i/(totalFrameCount))) + frame = printer.led_effect.getFrame(i)[0] + img = Image.new('RGBA', (width, height), color=(0, 0, 0, 0)) + draw = ImageDraw.Draw(img) + draw.line([(0, height-progressThickness), (width*i/(totalFrameCount), + height-progressThickness)], fill="black", width=progressThickness) + for j in range(0, len(frame), 4): + led = j/4 + x0 = margin + led*(diameter+margin) + y0 = margin + x1 = x0 + diameter + y1 = y0 + diameter + + [r, g, b, a] = frame[j:j+4] + draw.ellipse([(x0, y0), (x1, y1)], width=2, outline="black", fill=( + int(r*255), int(g*255), int(b*255), 255)) + frames.append(img) + + frames[0].save(output, save_all=True, + append_images=frames[1:], duration=1000/fps, loop=0) diff --git a/packages/preview_generator/pyproject.toml b/packages/preview_generator/pyproject.toml new file mode 100644 index 0000000..029f411 --- /dev/null +++ b/packages/preview_generator/pyproject.toml @@ -0,0 +1,19 @@ +[tool.poetry] +name = "preview-generator" +version = "0.1.0" +authors = ["reemo3dp"] +description = "" +package-mode = false + +[tool.poetry.dependencies] +python = "<3.12,>=3.8" +klippermock = {path = "../klippermock", develop = true} +pillow = "^10.2.0" + + +[tool.poetry.group.dev.dependencies] +pytest = "^8.1.1" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/simulator/app.py b/packages/simulator/app.py similarity index 100% rename from simulator/app.py rename to packages/simulator/app.py diff --git a/packages/simulator/poetry.lock b/packages/simulator/poetry.lock new file mode 100644 index 0000000..7f838dc --- /dev/null +++ b/packages/simulator/poetry.lock @@ -0,0 +1,488 @@ +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "altgraph" +version = "0.17.4" +description = "Python graph (network) package" +optional = false +python-versions = "*" +files = [ + {file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"}, + {file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"}, +] + +[[package]] +name = "black" +version = "24.3.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"}, + {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"}, + {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"}, + {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"}, + {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"}, + {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"}, + {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"}, + {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"}, + {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"}, + {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"}, + {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"}, + {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"}, + {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"}, + {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"}, + {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"}, + {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"}, + {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"}, + {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"}, + {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"}, + {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"}, + {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"}, + {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "importlib-metadata" +version = "7.1.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "klippermock" +version = "0.1.0" +description = "" +optional = false +python-versions = "<3.12,>=3.8" +files = [] +develop = true + +[package.dependencies] +led_effect = {path = "../led_effect", develop = true} + +[package.source] +type = "directory" +url = "../klippermock" + +[[package]] +name = "led-effect" +version = "0.1.0" +description = "" +optional = false +python-versions = "<3.12,>=3.8" +files = [] +develop = true + +[package.source] +type = "directory" +url = "../led_effect" + +[[package]] +name = "macholib" +version = "1.16.3" +description = "Mach-O header analysis and editing" +optional = false +python-versions = "*" +files = [ + {file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"}, + {file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"}, +] + +[package.dependencies] +altgraph = ">=0.17" + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "numpy" +version = "1.24.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, + {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, + {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, + {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, + {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, + {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, + {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, + {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, + {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, + {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, + {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, +] + +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "pefile" +version = "2023.2.7" +description = "Python PE parsing module" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"}, + {file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"}, +] + +[[package]] +name = "pillow" +version = "10.3.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.2.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] + +[[package]] +name = "pyinstaller" +version = "6.5.0" +description = "PyInstaller bundles a Python application and all its dependencies into a single package." +optional = false +python-versions = "<3.13,>=3.8" +files = [ + {file = "pyinstaller-6.5.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:81ec15c0deb8c7a0f95bea85b49eecc2df1bdeaf5fe487a41d97de6b0ad29dff"}, + {file = "pyinstaller-6.5.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5f432f3fdef053989e0a44134e483131c533dab7637e6afd80c3f7c26e6dbcc9"}, + {file = "pyinstaller-6.5.0-py3-none-manylinux2014_i686.whl", hash = "sha256:6ffd76a0194dac4df5e66dcfccc7b597f3eaa40ef9a3f63548f260aa2c187512"}, + {file = "pyinstaller-6.5.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:a54968df2228f0128607b1dced41bbff94149d459987fb5cd1a41893e9bb85df"}, + {file = "pyinstaller-6.5.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:0dae0edbe6d667b6b0ccd8c97a148f86474a82da7ce582296f9025f4c7242ec6"}, + {file = "pyinstaller-6.5.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:7c76bfcb624803c311fa8fb137e4780d0ec86d11b7d90a8f43f185e2554afdcc"}, + {file = "pyinstaller-6.5.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:6cfee8a74ea2d3a1dc8e99e732a87b314739dc14363778143caac31f8aee9039"}, + {file = "pyinstaller-6.5.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:9d828213aea5401bb33a36ca396f8dc76a59a25bce1d76a13c9ad94ba29fbe42"}, + {file = "pyinstaller-6.5.0-py3-none-win32.whl", hash = "sha256:61865eee5e0d8f8252722f6d001baec497b7cee79ebe62c33a6ba86ba0c7010d"}, + {file = "pyinstaller-6.5.0-py3-none-win_amd64.whl", hash = "sha256:e1266498893ce1d6cc7337e8d2acbf7905a10ed2b7c8377270117d6b7b922fc4"}, + {file = "pyinstaller-6.5.0-py3-none-win_arm64.whl", hash = "sha256:1b3b7d6d3b18d76a833fd5a4d7f4544c5e2c2a4db4a728ea191e62f69d5cc33c"}, + {file = "pyinstaller-6.5.0.tar.gz", hash = "sha256:b1e55113c5a40cb7041c908a57f212f3ebd3e444dbb245ca2f91d86a76dabec5"}, +] + +[package.dependencies] +altgraph = "*" +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""} +packaging = ">=22.0" +pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""} +pyinstaller-hooks-contrib = ">=2024.3" +pywin32-ctypes = {version = ">=0.2.1", markers = "sys_platform == \"win32\""} +setuptools = ">=42.0.0" + +[package.extras] +completion = ["argcomplete"] +hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] + +[[package]] +name = "pyinstaller-hooks-contrib" +version = "2024.3" +description = "Community maintained hooks for PyInstaller" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyinstaller-hooks-contrib-2024.3.tar.gz", hash = "sha256:d18657c29267c63563a96b8fc78db6ba9ae40af6702acb2f8c871df12c75b60b"}, + {file = "pyinstaller_hooks_contrib-2024.3-py2.py3-none-any.whl", hash = "sha256:6701752d525e1f4eda1eaec2c2affc206171e15c7a4e188a152fcf3ed3308024"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +packaging = ">=22.0" +setuptools = ">=42.0.0" + +[[package]] +name = "pywin32-ctypes" +version = "0.2.2" +description = "A (partial) reimplementation of pywin32 using ctypes/cffi" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, + {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, +] + +[[package]] +name = "setuptools" +version = "69.2.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, + {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typing-extensions" +version = "4.11.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, +] + +[[package]] +name = "wxpython" +version = "4.2.1" +description = "Cross platform GUI toolkit for Python, \"Phoenix\" version" +optional = false +python-versions = "*" +files = [ + {file = "wxPython-4.2.1-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:3fd606d10db694c29f712f13dc3d3179d0204a71f6c1fbb5fcee859d03e9ff97"}, + {file = "wxPython-4.2.1-cp310-cp310-win32.whl", hash = "sha256:5b233c39d7bfb53b9c4928ee7c86d626f1f7a716a6dfc3acc152bb437e658751"}, + {file = "wxPython-4.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:bb7988814e706eb00792589d606d317da5661dcffbb09263cd20da956c46bcbb"}, + {file = "wxPython-4.2.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:e87960d1963e291d4009c8547c85716b7d5325eb828cd183fdb28d441d6c3787"}, + {file = "wxPython-4.2.1-cp311-cp311-win32.whl", hash = "sha256:a41f3e03c3bfbe80864d7456f5c1236991fa937eedb60b986bd67e1bb47b7c3d"}, + {file = "wxPython-4.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:3062b4d2f5d6dcf1d59983797fc067270a5ce829a918d52a516212e798f0c9ae"}, + {file = "wxPython-4.2.1-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:957a6e7cc68a8e4d7ca49c72a691b6efd5684040f4f03b112d0122e7ab470497"}, + {file = "wxPython-4.2.1-cp312-cp312-win32.whl", hash = "sha256:8d846a785cd33c31e7eb42038eb159c88977d38208496b8322d14aef107f3eec"}, + {file = "wxPython-4.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1ca327c877f276b33e2c4b6cb8417964305ee505e2509fb2000851d48b82328f"}, + {file = "wxPython-4.2.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a7eefbc7fe7ac86479d814302711f8f118ba214229aa2a6d789fb888ee79abaa"}, + {file = "wxPython-4.2.1-cp38-cp38-win32.whl", hash = "sha256:ff0423e84a5aaa203e7c1c3d36f8417c54cb4cd8849a43b3c917ac3bfafa4ad7"}, + {file = "wxPython-4.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:903f45131107802b38c0b5d0e964a2ce0295b67e8c3d7659821ac5b26a35658b"}, + {file = "wxPython-4.2.1-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:a15b76dad81f9bd6ceadf00fbede9aff9e09859a9aa698c53e8bd56b95d2effc"}, + {file = "wxPython-4.2.1-cp39-cp39-win32.whl", hash = "sha256:c4db6d7f054d76cb1532dbd5da81b87b7a90dc9fdf18a3540063b2f8f5f3e663"}, + {file = "wxPython-4.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:0595fdd133a552a232a99759b87891136a4500c806bbea68b888e7b6f2c9bbea"}, + {file = "wxPython-4.2.1.tar.gz", hash = "sha256:e48de211a6606bf072ec3fa778771d6b746c00b7f4b970eb58728ddf56d13d5c"}, +] + +[package.dependencies] +numpy = {version = "*", markers = "python_version >= \"3.0\" and python_version < \"3.12\""} +pillow = "*" +six = "*" + +[[package]] +name = "zipp" +version = "3.18.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "<3.12,>=3.8" +content-hash = "5d93f38673f554ae45b438571c0fa7e9ef620fd99286fb08187c51046ec2ec2b" diff --git a/simulator/pyproject.toml b/packages/simulator/pyproject.toml similarity index 61% rename from simulator/pyproject.toml rename to packages/simulator/pyproject.toml index fdd991b..d9a0748 100644 --- a/simulator/pyproject.toml +++ b/packages/simulator/pyproject.toml @@ -1,4 +1,5 @@ [tool.poetry] +package-mode = false name = "simulator" version = "0.1.0" description = "" @@ -6,13 +7,14 @@ authors = ["Julian Schill "] readme = "README.md" [tool.poetry.dependencies] -python = "<3.11,>=3.8" +python = "<3.12,>=3.8" wxPython = "^4.2.0" -pyinstaller = "^5.4.1" +pyinstaller = "^6.0.0" numpy = ">1.22" +klippermock = {path = "../klippermock", develop = true} [tool.poetry.group.dev.dependencies] -black = {version = "^22.8.0", allow-prereleases = true} +black = {version = "^24.0.0", allow-prereleases = true} [build-system] requires = ["poetry-core"] diff --git a/simulator/simgui.fbp b/packages/simulator/simgui.fbp similarity index 100% rename from simulator/simgui.fbp rename to packages/simulator/simgui.fbp diff --git a/simulator/README.md b/packages/simulator/simulator/__init__.py similarity index 100% rename from simulator/README.md rename to packages/simulator/simulator/__init__.py diff --git a/simulator/simulator/simgui.py b/packages/simulator/simulator/simgui.py similarity index 100% rename from simulator/simulator/simgui.py rename to packages/simulator/simulator/simgui.py diff --git a/simulator/simulator/simulator.py b/packages/simulator/simulator/simulator.py similarity index 97% rename from simulator/simulator/simulator.py rename to packages/simulator/simulator/simulator.py index 7398a88..c1238eb 100644 --- a/simulator/simulator/simulator.py +++ b/packages/simulator/simulator/simulator.py @@ -1,6 +1,6 @@ import wx import simulator.simgui as simgui -from simulator.klippermock import * +from klippermock import * import time import math diff --git a/packages/web_simulator/.gitignore b/packages/web_simulator/.gitignore new file mode 100644 index 0000000..0e428f3 --- /dev/null +++ b/packages/web_simulator/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +src/*.whl diff --git a/packages/web_simulator/index.html b/packages/web_simulator/index.html new file mode 100644 index 0000000..117ec58 --- /dev/null +++ b/packages/web_simulator/index.html @@ -0,0 +1,12 @@ + + + + + + Klipper-LED_Effects Simulator + + +
+ + + diff --git a/packages/web_simulator/package-lock.json b/packages/web_simulator/package-lock.json new file mode 100644 index 0000000..4a4fb04 --- /dev/null +++ b/packages/web_simulator/package-lock.json @@ -0,0 +1,1962 @@ +{ + "name": "web_simulator", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web_simulator", + "version": "0.0.0", + "dependencies": { + "@sveltestrap/sveltestrap": "^6.2.5" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.2", + "@tsconfig/svelte": "^5.0.2", + "npm-run-all2": "^6.0.0", + "svelte": "^4.2.12", + "svelte-check": "^3.6.4", + "tslib": "^2.6.2", + "typescript": "^5.2.2", + "vite": "^5.1.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", + "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.2.tgz", + "integrity": "sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==", + "dev": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "svelte-hmr": "^0.15.3", + "vitefu": "^0.2.5" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz", + "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltestrap/sveltestrap": { + "version": "6.2.7", + "resolved": "https://registry.npmjs.org/@sveltestrap/sveltestrap/-/sveltestrap-6.2.7.tgz", + "integrity": "sha512-WwLLfAFUb42BGuRrf3Vbct30bQMzlEMMipN/MfxhjuLTmLQeW9muVJfPyvjtWS+mY+RjkSCoHvAp/ZobP1NLlQ==", + "dependencies": { + "@popperjs/core": "^2.11.8" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0 || ^5.0.0-next.0" + } + }, + "node_modules/@tsconfig/svelte": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz", + "integrity": "sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/pug": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + }, + "node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-all2": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.1.2.tgz", + "integrity": "sha512-WwwnS8Ft+RpXve6T2EIEVpFLSqN+ORHRvgNk3H9N62SZXjmzKoRhMFg3I17TK3oMaAEr+XFbRirWS2Fn3BCPSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^3.0.2", + "shell-quote": "^1.7.3" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0", + "npm": ">= 8" + } + }, + "node_modules/npm-run-all2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm-run-all2/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-run-all2/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rollup": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dev": true, + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sorcery": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0" + }, + "bin": { + "sorcery": "bin/sorcery" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svelte": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.12.tgz", + "integrity": "sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte-check": { + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.9.tgz", + "integrity": "sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "chokidar": "^3.4.1", + "fast-glob": "^3.2.7", + "import-fresh": "^3.2.1", + "picocolors": "^1.0.0", + "sade": "^1.7.4", + "svelte-preprocess": "^5.1.3", + "typescript": "^5.0.3" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "peerDependencies": { + "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/svelte-preprocess": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", + "integrity": "sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.30.5", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 16.0.0", + "pnpm": "^8.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", + "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz", + "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + } + } +} diff --git a/packages/web_simulator/package.json b/packages/web_simulator/package.json new file mode 100644 index 0000000..902eab3 --- /dev/null +++ b/packages/web_simulator/package.json @@ -0,0 +1,29 @@ +{ + "name": "web_simulator", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-s build:whl build:vite", + "build:vite": "vite build", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.json", + "build:whl": "run-p build:whl:*", + "build:whl:klippermock": "rm src/klippermock*.whl || true; cd ../klippermock; poetry build -f wheel -o ../web_simulator/src", + "build:whl:led_effect": "rm src/led_effect*.whl || true; cd ../led_effect; poetry build -f wheel -o ../web_simulator/src" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.2", + "@tsconfig/svelte": "^5.0.2", + "npm-run-all2": "^6.0.0", + "svelte": "^4.2.12", + "svelte-check": "^3.6.4", + "tslib": "^2.6.2", + "typescript": "^5.2.2", + "vite": "^5.1.4" + }, + "dependencies": { + "@sveltestrap/sveltestrap": "^6.2.5" + } +} diff --git a/packages/web_simulator/src/App.css b/packages/web_simulator/src/App.css new file mode 100644 index 0000000..9fecac5 --- /dev/null +++ b/packages/web_simulator/src/App.css @@ -0,0 +1,3 @@ +body { + padding: 30px 0; +} \ No newline at end of file diff --git a/packages/web_simulator/src/App.svelte b/packages/web_simulator/src/App.svelte new file mode 100644 index 0000000..3669d58 --- /dev/null +++ b/packages/web_simulator/src/App.svelte @@ -0,0 +1,43 @@ + + + + + + + +{#if agreedToLoadingPython} + +{:else} + + Warning + +

+ This simulator will download about 20MB of software required to simulate + led effects like they will run on your printer. +

+ +
+
+{/if} diff --git a/packages/web_simulator/src/LedPreview.svelte b/packages/web_simulator/src/LedPreview.svelte new file mode 100644 index 0000000..a049135 --- /dev/null +++ b/packages/web_simulator/src/LedPreview.svelte @@ -0,0 +1,63 @@ + + +{#if useMatchsticks} +
+ {#each Array(numMatchsticks) as _, i} +
+ {@html Rainbow} +
+ {/each} +
+{:else} +
+ {#each leds as led, i} +
+ {/each} +
+{/if} + + diff --git a/packages/web_simulator/src/Simulator.svelte b/packages/web_simulator/src/Simulator.svelte new file mode 100644 index 0000000..fd4e72e --- /dev/null +++ b/packages/web_simulator/src/Simulator.svelte @@ -0,0 +1,368 @@ + + + + + + + + Loading + +

Loading Python environment...

+
{pythonOutput}
+
+
+ + + + LED Effect Simulator + +
+ +
+ + + + + + + + + + + Layers + + + {#if error} + +
{error}
+
+ {/if} + +
+ + LED Count + + + + Frame Rate + + + + fps + + + +
+ + Temperature heater_bed (default) + + + + + + + + °C + + + + + + + °C + + + + + + + Temperature hotend + + + + + + + + °C + + + + + + + °C + + + + + + + Print Progress + + + + % + + + + + + + +
+
+
+
diff --git a/packages/web_simulator/src/colormath-3.0.0-py3-none-any.whl b/packages/web_simulator/src/colormath-3.0.0-py3-none-any.whl new file mode 100644 index 0000000..c7d2ebb Binary files /dev/null and b/packages/web_simulator/src/colormath-3.0.0-py3-none-any.whl differ diff --git a/packages/web_simulator/src/main.ts b/packages/web_simulator/src/main.ts new file mode 100644 index 0000000..fb36356 --- /dev/null +++ b/packages/web_simulator/src/main.ts @@ -0,0 +1,7 @@ +import App from './App.svelte' + +const app = new App({ + target: document.getElementById('app'), +}) + +export default app diff --git a/packages/web_simulator/src/printSimulator.ts b/packages/web_simulator/src/printSimulator.ts new file mode 100644 index 0000000..e99f9f0 --- /dev/null +++ b/packages/web_simulator/src/printSimulator.ts @@ -0,0 +1,76 @@ +export class PrintSimulator { + interrupted: boolean = true; + + + targetTemps: { "heater_bed": number, "hotend": number }; + setHeater: (heater: string, temp: number) => void; + setProgress: (pct: number) => void; + setStatus: (status: string) => void; + + + constructor(targetTemps: { "heater_bed": number, "hotend": number }, setHeater: (heater: string, temp: number) => void, setProgress: (pct: number) => void, + setStatus: (status: string) => void) { + this.targetTemps = targetTemps; + this.setHeater = setHeater; + this.setProgress = setProgress; + this.setStatus = setStatus; + + } + + async run() { + let phases = this._generatePhases() + this.interrupted = false; + for (let phase of phases) { + for (let step of phase) { + if (this.interrupted) return; + await step() + } + } + } + + _generatePhases() { + const _this = this; + return [ + fixed([ + () => { + _this.setStatus("idle") + return Promise.resolve(); + }, + delay(2000) + ]), + (function* () { + _this.setStatus("Heating bed"); + for (let i = 0; i <= _this.targetTemps.heater_bed; i++) { + _this.setHeater("heater_bed", i); + yield delay(100); + } + })(), + (function* () { + _this.setStatus("Heating hotend"); + for (let i = 0; i <= _this.targetTemps.hotend; i++) { + _this.setHeater("hotend", i); + yield delay(50); + } + })(), + (function* () { + _this.setStatus("Printing"); + for (let i = 0; i <= 100; i++) { + _this.setProgress(i); + yield delay(100); + } + _this.setStatus("Finished"); + })() + ]; + } + + stop() { + this.interrupted = true; + } +} + +const delay = (ms: number) => async () => new Promise(resolve => window.setTimeout(resolve, ms)); + +function* fixed(col: (() => Promise)[]): Generator<() => Promise, void, unknown> { + for (let c of col) yield c; +} + diff --git a/packages/web_simulator/src/rainbow.svg b/packages/web_simulator/src/rainbow.svg new file mode 100644 index 0000000..64dd71e --- /dev/null +++ b/packages/web_simulator/src/rainbow.svg @@ -0,0 +1,20403 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/web_simulator/src/vite-env.d.ts b/packages/web_simulator/src/vite-env.d.ts new file mode 100644 index 0000000..4078e74 --- /dev/null +++ b/packages/web_simulator/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/packages/web_simulator/svelte.config.js b/packages/web_simulator/svelte.config.js new file mode 100644 index 0000000..b0683fd --- /dev/null +++ b/packages/web_simulator/svelte.config.js @@ -0,0 +1,7 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), +} diff --git a/packages/web_simulator/tsconfig.json b/packages/web_simulator/tsconfig.json new file mode 100644 index 0000000..5fb548f --- /dev/null +++ b/packages/web_simulator/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "resolveJsonModule": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable checkJs if you'd like to use dynamic types in JS. + * Note that setting allowJs false does not prevent the use + * of JS in `.svelte` files. + */ + "allowJs": true, + "checkJs": true, + "isolatedModules": true + }, + "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/web_simulator/tsconfig.node.json b/packages/web_simulator/tsconfig.node.json new file mode 100644 index 0000000..2c913ac --- /dev/null +++ b/packages/web_simulator/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "lib": ["ESNext"], + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/web_simulator/vite.config.ts b/packages/web_simulator/vite.config.ts new file mode 100644 index 0000000..bd3b850 --- /dev/null +++ b/packages/web_simulator/vite.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: './', + plugins: [svelte()], + build: { + rollupOptions: { + output: { + assetFileNames: (assetInfo) => { + if(assetInfo.name?.endsWith('.whl')) { + return "[name].[ext]"; + } + return "[name]-[hash].[ext]" + + } + } + }, + assetsInlineLimit: (file) => { + return !file.endsWith('.whl'); + + } + } +}) diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..c222e94 --- /dev/null +++ b/renovate.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:recommended"], + "automerge": true, + "dependencyDashboard": true, + "automergeType": "branch", + "branchConcurrentLimit": 3, + "pip_requirements": { + "enabled": false + }, + "packageRules": [ + { + "matchPackageNames": ["python"], + "enabled": false + } + ] +} diff --git a/simulator/poetry.lock b/simulator/poetry.lock deleted file mode 100644 index 0b31c6a..0000000 --- a/simulator/poetry.lock +++ /dev/null @@ -1,408 +0,0 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. - -[[package]] -name = "altgraph" -version = "0.17.3" -description = "Python graph (network) package" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "altgraph-0.17.3-py2.py3-none-any.whl", hash = "sha256:c8ac1ca6772207179ed8003ce7687757c04b0b71536f81e2ac5755c6226458fe"}, - {file = "altgraph-0.17.3.tar.gz", hash = "sha256:ad33358114df7c9416cdb8fa1eaa5852166c505118717021c6a8c7c7abbd03dd"}, -] - -[[package]] -name = "black" -version = "22.12.0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "future" -version = "0.18.2" -description = "Clean single-source support for Python 3 and 2" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, -] - -[[package]] -name = "macholib" -version = "1.16.2" -description = "Mach-O header analysis and editing" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "macholib-1.16.2-py2.py3-none-any.whl", hash = "sha256:44c40f2cd7d6726af8fa6fe22549178d3a4dfecc35a9cd15ea916d9c83a688e0"}, - {file = "macholib-1.16.2.tar.gz", hash = "sha256:557bbfa1bb255c20e9abafe7ed6cd8046b48d9525db2f9b77d3122a63a2a8bf8"}, -] - -[package.dependencies] -altgraph = ">=0.17" - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] - -[[package]] -name = "numpy" -version = "1.24.1" -description = "Fundamental package for array computing in Python" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "numpy-1.24.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:179a7ef0889ab769cc03573b6217f54c8bd8e16cef80aad369e1e8185f994cd7"}, - {file = "numpy-1.24.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b09804ff570b907da323b3d762e74432fb07955701b17b08ff1b5ebaa8cfe6a9"}, - {file = "numpy-1.24.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1b739841821968798947d3afcefd386fa56da0caf97722a5de53e07c4ccedc7"}, - {file = "numpy-1.24.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e3463e6ac25313462e04aea3fb8a0a30fb906d5d300f58b3bc2c23da6a15398"}, - {file = "numpy-1.24.1-cp310-cp310-win32.whl", hash = "sha256:b31da69ed0c18be8b77bfce48d234e55d040793cebb25398e2a7d84199fbc7e2"}, - {file = "numpy-1.24.1-cp310-cp310-win_amd64.whl", hash = "sha256:b07b40f5fb4fa034120a5796288f24c1fe0e0580bbfff99897ba6267af42def2"}, - {file = "numpy-1.24.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7094891dcf79ccc6bc2a1f30428fa5edb1e6fb955411ffff3401fb4ea93780a8"}, - {file = "numpy-1.24.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28e418681372520c992805bb723e29d69d6b7aa411065f48216d8329d02ba032"}, - {file = "numpy-1.24.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e274f0f6c7efd0d577744f52032fdd24344f11c5ae668fe8d01aac0422611df1"}, - {file = "numpy-1.24.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0044f7d944ee882400890f9ae955220d29b33d809a038923d88e4e01d652acd9"}, - {file = "numpy-1.24.1-cp311-cp311-win32.whl", hash = "sha256:442feb5e5bada8408e8fcd43f3360b78683ff12a4444670a7d9e9824c1817d36"}, - {file = "numpy-1.24.1-cp311-cp311-win_amd64.whl", hash = "sha256:de92efa737875329b052982e37bd4371d52cabf469f83e7b8be9bb7752d67e51"}, - {file = "numpy-1.24.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b162ac10ca38850510caf8ea33f89edcb7b0bb0dfa5592d59909419986b72407"}, - {file = "numpy-1.24.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26089487086f2648944f17adaa1a97ca6aee57f513ba5f1c0b7ebdabbe2b9954"}, - {file = "numpy-1.24.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caf65a396c0d1f9809596be2e444e3bd4190d86d5c1ce21f5fc4be60a3bc5b36"}, - {file = "numpy-1.24.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0677a52f5d896e84414761531947c7a330d1adc07c3a4372262f25d84af7bf7"}, - {file = "numpy-1.24.1-cp38-cp38-win32.whl", hash = "sha256:dae46bed2cb79a58d6496ff6d8da1e3b95ba09afeca2e277628171ca99b99db1"}, - {file = "numpy-1.24.1-cp38-cp38-win_amd64.whl", hash = "sha256:6ec0c021cd9fe732e5bab6401adea5a409214ca5592cd92a114f7067febcba0c"}, - {file = "numpy-1.24.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28bc9750ae1f75264ee0f10561709b1462d450a4808cd97c013046073ae64ab6"}, - {file = "numpy-1.24.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:84e789a085aabef2f36c0515f45e459f02f570c4b4c4c108ac1179c34d475ed7"}, - {file = "numpy-1.24.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e669fbdcdd1e945691079c2cae335f3e3a56554e06bbd45d7609a6cf568c700"}, - {file = "numpy-1.24.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef85cf1f693c88c1fd229ccd1055570cb41cdf4875873b7728b6301f12cd05bf"}, - {file = "numpy-1.24.1-cp39-cp39-win32.whl", hash = "sha256:87a118968fba001b248aac90e502c0b13606721b1343cdaddbc6e552e8dfb56f"}, - {file = "numpy-1.24.1-cp39-cp39-win_amd64.whl", hash = "sha256:ddc7ab52b322eb1e40521eb422c4e0a20716c271a306860979d450decbb51b8e"}, - {file = "numpy-1.24.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ed5fb71d79e771ec930566fae9c02626b939e37271ec285e9efaf1b5d4370e7d"}, - {file = "numpy-1.24.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad2925567f43643f51255220424c23d204024ed428afc5aad0f86f3ffc080086"}, - {file = "numpy-1.24.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cfa1161c6ac8f92dea03d625c2d0c05e084668f4a06568b77a25a89111621566"}, - {file = "numpy-1.24.1.tar.gz", hash = "sha256:2386da9a471cc00a1f47845e27d916d5ec5346ae9696e01a8a34760858fe9dd2"}, -] - -[[package]] -name = "pathspec" -version = "0.10.3" -description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.10.3-py3-none-any.whl", hash = "sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6"}, - {file = "pathspec-0.10.3.tar.gz", hash = "sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6"}, -] - -[[package]] -name = "pefile" -version = "2022.5.30" -description = "Python PE parsing module" -category = "main" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "pefile-2022.5.30.tar.gz", hash = "sha256:a5488a3dd1fd021ce33f969780b88fe0f7eebb76eb20996d7318f307612a045b"}, -] - -[package.dependencies] -future = "*" - -[[package]] -name = "pillow" -version = "9.3.0" -description = "Python Imaging Library (Fork)" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, - {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"}, - {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"}, - {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"}, - {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"}, - {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"}, - {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"}, - {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"}, - {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"}, - {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"}, - {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"}, - {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"}, - {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"}, - {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"}, - {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"}, - {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"}, - {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, - {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "platformdirs" -version = "2.6.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"}, - {file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"}, -] - -[package.extras] -docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] -test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] - -[[package]] -name = "pyinstaller" -version = "5.7.0" -description = "PyInstaller bundles a Python application and all its dependencies into a single package." -category = "main" -optional = false -python-versions = "<3.12,>=3.7" -files = [ - {file = "pyinstaller-5.7.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:b967ae71ab7b05e18608dbb4518da5afa54f0835927cb7a5ce52ab8fffed03b6"}, - {file = "pyinstaller-5.7.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:3180b9bf22263380adc5e2ee051b7c21463292877215bbe70c9155dc76f4b966"}, - {file = "pyinstaller-5.7.0-py3-none-manylinux2014_i686.whl", hash = "sha256:0f80e2403e76630ad3392c71f09c1a4284e8d8a8a99fb55ff3a0aba0e06300ed"}, - {file = "pyinstaller-5.7.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:2c1dd9d11cfc48bab61eeb06de69a3d1ad742bbb2ef14716965ca0333dd43a5b"}, - {file = "pyinstaller-5.7.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:dfc12e92fe10ae645dd0dd1fcfa4cd7677b2e96119e3cd4980d742e09bb78925"}, - {file = "pyinstaller-5.7.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f35f06d48faea0ad738429c009941059beebaa306e9d9ead95f1df4b441de2aa"}, - {file = "pyinstaller-5.7.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:28a8a0da656493aa32d9665e2f6f84775da0f23174859ed8facaa4226fe77a17"}, - {file = "pyinstaller-5.7.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:1ac3f09b838710c43e34b0a7ad003bd168a754b0b786c561b47baf1af9104354"}, - {file = "pyinstaller-5.7.0-py3-none-win32.whl", hash = "sha256:9cdb8ee8622ee8d2c6cd67f001b610019d4371a8bf3f7850562640ce786894d7"}, - {file = "pyinstaller-5.7.0-py3-none-win_amd64.whl", hash = "sha256:9b47c10fbefac6f6493266f8b1689109b2b14efa9142dbd2cd7549226a4568b7"}, - {file = "pyinstaller-5.7.0-py3-none-win_arm64.whl", hash = "sha256:3e51e18a16dec0414079762843cf892a5d70749ad56ca7b3c7b5f8367dc50b1e"}, - {file = "pyinstaller-5.7.0.tar.gz", hash = "sha256:0e5953937d35f0b37543cc6915dacaf3239bcbdf3fd3ecbb7866645468a16775"}, -] - -[package.dependencies] -altgraph = "*" -macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""} -pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""} -pyinstaller-hooks-contrib = ">=2021.4" -pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} -setuptools = ">=42.0.0" - -[package.extras] -encryption = ["tinyaes (>=1.0.0)"] -hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] - -[[package]] -name = "pyinstaller-hooks-contrib" -version = "2022.14" -description = "Community maintained hooks for PyInstaller" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyinstaller-hooks-contrib-2022.14.tar.gz", hash = "sha256:5ae8da3a92cf20e37b3e00604d0c3468896e7d746e5c1449473597a724331b0b"}, - {file = "pyinstaller_hooks_contrib-2022.14-py2.py3-none-any.whl", hash = "sha256:1a125838a22d7b35a18993c6e56d3c5cc3ad7da00954f95bc5606523939203f2"}, -] - -[[package]] -name = "pywin32-ctypes" -version = "0.2.0" -description = "" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, - {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, -] - -[[package]] -name = "setuptools" -version = "65.6.3" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"}, - {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "typing-extensions" -version = "4.4.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] - -[[package]] -name = "wxpython" -version = "4.2.0" -description = "Cross platform GUI toolkit for Python, \"Phoenix\" version" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "wxPython-4.2.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:f15b04aca27fe5b42af5eeb3952ab9a2cf7d6b375bf237b76f0c9d9ab3bf08c8"}, - {file = "wxPython-4.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bc788f046ee80f41c814ab2f75f87b0d0cd42fd3fb950815199c7be57b5ae12"}, - {file = "wxPython-4.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7894b4d3fbbf726d8315d08d030b881bd29ed7476bc5f6ae90262064de2a664e"}, - {file = "wxPython-4.2.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:0edf70129a9c5554d0f788c7cd37e60e7d326a14d4370df43870cc637c2534f3"}, - {file = "wxPython-4.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8a278028b0a92a7ff9bcf022faf92ebfe35f53b61ca486338c46f207c4faaa4a"}, - {file = "wxPython-4.2.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:f79b8103ec62bff14bb653c9aa17a55fb1398a465b3b9371bcd80272eb1e3152"}, - {file = "wxPython-4.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:8b53eb64549996a04f773bdec92b4612ecf7d622e9bbdeb85249062a469a5eb2"}, - {file = "wxPython-4.2.0.tar.gz", hash = "sha256:663cebc4509d7e5d113518865fe274f77f95434c5d57bc386ed58d65ceed86c7"}, -] - -[package.dependencies] -numpy = {version = "*", markers = "python_version >= \"3.0\""} -pillow = "*" -six = "*" - -[metadata] -lock-version = "2.0" -python-versions = "<3.11,>=3.8" -content-hash = "be72410470daf1ce8fc12125d94a70502aac0da7b1a9fdfebfbbaab0dcb82a7f" diff --git a/src/led_effect.py b/src/led_effect.py deleted file mode 100644 index 1d7d14a..0000000 --- a/src/led_effect.py +++ /dev/null @@ -1,1251 +0,0 @@ -# Support for addressable LED visual effects -# using neopixel and dotstar LEDs -# -# Copyright (C) 2020 Paul McGowan -# co-authored by Julian Schill -# -# This file may be distributed under the terms of the GNU GPLv3 license. - -from math import cos, exp, pi -from random import randint -import logging - -ANALOG_SAMPLE_TIME = 0.001 -ANALOG_SAMPLE_COUNT = 5 -ANALOG_REPORT_TIME = 0.05 - -COLORS = 4 - -###################################################################### -# Custom color value list, returns lists of [r, g ,b] values -# from a one dimensional list -###################################################################### - -class colorArray(list): - def __init__(self, num_colors, kwargs): - self.n=num_colors - super(colorArray,self).__init__(kwargs) - - def __getitem__(self, a): - if isinstance(a, int): - return super(colorArray, self).__getitem__( - slice(a*self.n, a*self.n+self.n)) - if isinstance(a, slice): - start = a.start*self.n if a.start != None else None - stop = a.stop*self.n if a.stop != None else None - return colorArray(self.n, - super(colorArray, self).__getitem__( - slice(start, stop, a.step))) - def __getslice__(self, a, b): - return self.__getitem__(slice(a,b)) - def __setitem__(self, a, v): - if isinstance(a, int): - for i in range(self.n): - super(colorArray, self).__setitem__(a*self.n + i, v[i]) - def __len__(self): - return super(colorArray, self).__len__() // self.n - def reverse(self): - self.__init__(self.n, [c for cl in range(len(self)-1,-1, -1) - for c in self[cl]]) - def shift(self, shift=1, direction=True): - if direction: - shift *= -1 - self.__init__(self.n, self[shift:] + self[:shift]) - def padLeft(self, v, a): - self.__init__(self.n, v * a + self) - def padRight(self, v, a): - self += v * a - -###################################################################### -# LED Effect handler -###################################################################### - -class ledFrameHandler: - def __init__(self, config): - self.printer = config.get_printer() - self.gcode = self.printer.lookup_object('gcode') - self.printer.load_object(config, "display_status") - self.heaters = {} - self.printProgress = 0 - self.effects = [] - self.stepperPositions = [0.0,0.0,0.0] - self.stepperTimer = None - self.heaterCurrent = {} - self.heaterTarget = {} - self.heaterLast = {} - self.heaterTimer = None - self.homing = {} - self.homing_start_flag = {} - self.homing_end_flag = {} - self.printer.register_event_handler('klippy:ready', self._handle_ready) - self.printer.register_event_handler("homing:homing_move_begin", - self._handle_homing_move_begin) - self.printer.register_event_handler("homing:homing_move_end", - self._handle_homing_move_end) - self.ledChains=[] - self.gcode.register_command('STOP_LED_EFFECTS', - self.cmd_STOP_LED_EFFECTS, - desc=self.cmd_STOP_LED_EFFECTS_help) - self.shutdown = False - - cmd_STOP_LED_EFFECTS_help = 'Stops all led_effects' - - def _handle_ready(self): - self.shutdown = False - self.reactor = self.printer.get_reactor() - self.printer.register_event_handler('klippy:shutdown', - self._handle_shutdown) - self.printProgress = 0 - self.displayStatus = self.printer.lookup_object('display_status') - self.progressTimer = self.reactor.register_timer(self._pollProgress, - self.reactor.NOW) - self.frameTimer = self.reactor.register_timer(self._getFrames, - self.reactor.NOW) - - def _handle_shutdown(self): - self.shutdown = True - for effect in self.effects: - if not effect.runOnShutown: - for chain in self.ledChains: - chain.led_helper.set_color(None, (0.0, 0.0, 0.0, 0.0)) - chain.led_helper.update_func(chain.led_helper.led_state, None) - - pass - - def _handle_homing_move_begin(self, hmove): - endstops_being_homed = [name for es,name in hmove.endstops] - logging.info(endstops_being_homed) - - for endstop in endstops_being_homed: - if endstop in self.homing_start_flag: - self.homing_start_flag[endstop] += 1 - else: - self.homing_start_flag[endstop] = 0 - - self.homing[endstop]=True - - def _handle_homing_move_end(self, hmove): - endstops_being_homed = [name for es,name in hmove.endstops] - - for endstop in endstops_being_homed: - if endstop in self.homing_end_flag: - self.homing_end_flag[endstop] += 1 - else: - self.homing_end_flag[endstop] = 0 - self.homing[endstop]=False - - def addEffect(self, effect): - - if effect.heater: - effect.heater=effect.heater.strip('\"\'') - if effect.heater.startswith("temperature_fan ") or effect.heater.startswith("temperature_sensor "): - self.heaters[effect.heater] = self.printer.lookup_object(effect.heater) - else: - pheater = self.printer.lookup_object('heaters') - self.heaters[effect.heater] = pheater.lookup_heater(effect.heater) - self.heaterLast[effect.heater] = 100 - self.heaterCurrent[effect.heater] = 0 - self.heaterTarget[effect.heater] = 0 - - if not self.heaterTimer: - self.heaterTimer = self.reactor.register_timer(self._pollHeater, - self.reactor.NOW) - - if effect.stepper: - self.toolhead = self.printer.lookup_object('toolhead') - self.kin = self.toolhead.get_kinematics() - - if not self.stepperTimer: - self.stepperTimer = self.reactor.register_timer( - self._pollStepper, - self.reactor.NOW) - - self.effects.append(effect) - - def _pollHeater(self, eventtime): - for heater in self.heaters.keys(): - current, target = self.heaters[heater].get_temp(eventtime) - self.heaterCurrent[heater] = current - self.heaterTarget[heater] = target - if target > 0: - self.heaterLast[heater] = target - return eventtime + 0.3 #sensors get updated every 300ms - - def _pollStepper(self, eventtime): - - kin_spos = {s.get_name(): s.get_commanded_position() - for s in self.kin.get_steppers()} - - pos = self.kin.calc_position(kin_spos) - - for i in range(3): - if pos[i] >= self.kin.axes_min[i] and pos[i] <= self.kin.axes_max[i]: - self.stepperPositions[i] = int( - ((pos[i] - self.kin.axes_min[i]) / \ - (self.kin.axes_max[i] - self.kin.axes_min[i]) - * 100)- 1) - return eventtime + 0.5 - - def _pollProgress(self, eventtime): - status = self.displayStatus.get_status(eventtime) - p = status.get('progress') - if p is not None: - self.printProgress = int(p * 100) - return eventtime + 1 - - def _getColorData(self, colors, fade): - clamp = (lambda x : 0.0 if x < 0.0 else 1.0 if x > 1.0 else x) - colors = [x*clamp(fade) for x in colors] - colors=colors + [0.0] * (4 - len(colors)) - colors=colors[:4] - colors = [clamp(x) for x in colors] - return tuple(colors) - - def _getFrames(self, eventtime): - chainsToUpdate = set() - - frames = [(effect, effect.getFrame(eventtime)) for effect in self.effects] - - #first set all LEDs to 0, that should be updated - for effect, (frame, update) in frames: - if update: - for i in range(effect.ledCount): - chain,index=effect.leds[i] - chain.led_helper.led_state[index] = (0.0, 0.0, 0.0, 0.0) - chainsToUpdate.add(chain) - - #then sum up all effects for that LEDs - for effect, (frame, update) in frames: - if update: - for i in range(effect.ledCount): - chain,index=effect.leds[i] - - current_state=list(chain.led_helper.led_state[index]) - effect_state=self._getColorData(frame[i*COLORS:i*COLORS+COLORS], - effect.fadeValue) - - next_state=[min(1.0,a+b) for a,b in \ - zip(current_state, effect_state)] - - chain.led_helper.led_state[index] = tuple(next_state) - chainsToUpdate.add(chain) - - for chain in chainsToUpdate: - if hasattr(chain,"prev_data"): - chain.prev_data = None # workaround to force update of dotstars - if not self.shutdown: - chain.led_helper.update_func(chain.led_helper.led_state, None) - if self.effects: - next_eventtime=min(self.effects, key=lambda x: x.nextEventTime)\ - .nextEventTime - else: - next_eventtime = eventtime - # run at least with 10Hz - next_eventtime=min(next_eventtime, eventtime + 0.1) - return next_eventtime - - def parse_chain(self, chain): - chain = chain.strip() - leds=[] - parms = [parameter.strip() for parameter in chain.split() - if parameter.strip()] - if parms: - chainName=parms[0].replace(':',' ') - ledIndices = ''.join(parms[1:]).strip('()').split(',') - for led in ledIndices: - if led: - if '-' in led: - start, stop = map(int,led.split('-')) - if stop == start: - ledList = [start-1] - elif stop > start: - ledList = list(range(start-1, stop)) - else: - ledList = list(reversed(range(stop-1, start))) - for i in ledList: - leds.append(int(i)) - else: - for i in led.split(','): - leds.append(int(i)-1) - - return chainName, leds - else: - return None, None - - def cmd_STOP_LED_EFFECTS(self, gcmd): - ledParam = gcmd.get('LEDS', "") - stopAll = (ledParam == "") - - for effect in self.effects: - stopEffect = stopAll - if not stopAll: - try: - chainName, ledIndices = self.parse_chain(ledParam) - chain = self.printer.lookup_object(chainName) - except Exception as e: - raise gcmd.error("Unknown LED '%s'" % (ledParam,)) - - if ledIndices == [] and chain in effect.ledChains: - stopEffect = True - else: - for index in ledIndices: - if (chain,index) in effect.leds: - stopEffect=True - - if stopEffect: - if effect.enabled: - effect.set_fade_time(gcmd.get_float('FADETIME', 0.0)) - effect.set_enabled(False) - -def load_config(config): - return ledFrameHandler(config) - -###################################################################### -# LED Effect -###################################################################### - -class ledEffect: - def __init__(self, config): - self.config = config - self.printer = config.get_printer() - self.gcode = self.printer.lookup_object('gcode') - self.gcode_macro = self.printer.lookup_object('gcode_macro') - self.handler = self.printer.load_object(config, 'led_effect') - self.frameRate = 1.0 / config.getfloat('frame_rate', - default=24, minval=1, maxval=60) - self.enabled = False - self.iteration = 0 - self.layers = [] - self.analogValue = 0 - self.fadeValue = 1.0 - self.fadeTime = 0.0 - self.fadeEndTime = 0 - - #Basic functions for layering colors. t=top and b=bottom color - self.blendingModes = { - 'top' : (lambda t, b: t ), - 'bottom' : (lambda t, b: b ), - 'add' : (lambda t, b: t + b ), - 'subtract' : (lambda t, b: (b - t) * (b - t > 0)), - 'subtract_b': (lambda t, b: (t - b) * (t - b > 0)), - 'difference': (lambda t, b: (t - b) * (t > b) + (b - t) * (t <= b)), - 'average' : (lambda t, b: 0.5 * (t + b)), - 'multiply' : (lambda t, b: t * b), - 'divide' : (lambda t, b: t / b if b > 0 else 0 ), - 'divide_inv': (lambda t, b: b / t if t > 0 else 0 ), - 'screen' : (lambda t, b: 1.0 - (1.0-t)*(1.0-b) ), - 'lighten' : (lambda t, b: t * (t > b) + b * (t <= b)), - 'darken' : (lambda t, b: t * (t < b) + b * (t >= b)), - 'overlay' : (lambda t, b: \ - 2.0 * t * b if t > 0.5 else \ - 1.0 - (2.0 * (1.0-t) * (1.0-b))) - } - - self.name = config.get_name().split()[1] - - self.autoStart = config.getboolean('autostart', False) - self.runOnShutown = config.getboolean('run_on_error', False) - self.heater = config.get('heater', None) - self.analogPin = config.get('analog_pin', None) - self.stepper = config.get('stepper', None) - self.recalculate = config.get('recalculate', False) - self.endstops = [x.strip() for x in config.get('endstops','').split(',')] - self.layerTempl = self.gcode_macro.load_template(config, 'layers') - self.configLayers = [] - self.configLeds = config.get('leds') - - self.nextEventTime = 0 - self.printer.register_event_handler('klippy:ready', self._handle_ready) - self.gcode.register_mux_command('SET_LED_EFFECT', 'EFFECT', self.name, - self.cmd_SET_LED_EFFECT, - desc=self.cmd_SET_LED_help) - - if self.analogPin: - ppins = self.printer.lookup_object('pins') - self.mcu_adc = ppins.setup_pin('adc', self.analogPin) - self.mcu_adc.setup_minmax(ANALOG_SAMPLE_TIME, ANALOG_SAMPLE_COUNT) - self.mcu_adc.setup_adc_callback(ANALOG_REPORT_TIME, self.adcCallback) - query_adc = self.printer.load_object(self.config, 'query_adc') - query_adc.register_adc(self.name, self.mcu_adc) - - cmd_SET_LED_help = 'Starts or Stops the specified led_effect' - - def _handle_ready(self): - self.configChains = self.configLeds.split('\n') - self.ledChains = [] - self.leds = [] - self.enabled = self.autoStart - self.printer.register_event_handler('klippy:shutdown', - self._handle_shutdown) - #map each LED from the chains to the "pixels" in the effect frame - for chain in self.configChains: - chainName, ledIndices = self.handler.parse_chain(chain) - if chainName is not None: - ledChain = self.printer.lookup_object(chainName) - - #Add each discrete chain to the collection - if ledChain not in self.ledChains: - self.ledChains.append(ledChain) - - if ledIndices == [] : - for i in range(ledChain.led_helper.get_led_count()): - self.leds.append((ledChain, int(i))) - else: - for led in ledIndices: - self.leds.append((ledChain, led)) - - self.ledCount = len(self.leds) - self.frame = [0.0] * COLORS * self.ledCount - - #enumerate all effects from the subclasses of _layerBase... - self.availableLayers = {str(c).rpartition('.layer')[2]\ - .replace("'>", "")\ - .lower() : c - for c in self._layerBase.__subclasses__() - if str(c).startswith(" COLORS: - raise Exception( - "Color %s has too many elements." % (str(i),)) - palette=[pad(c) for c in palette] # pad to COLORS colors - palette=[k for c in palette for k in c] # flatten list - except Exception as e: - raise self.printer.config_error( - "Error parsing palette in '%s' for layer \"%s\": %s"\ - % (self.config.get_name(), parms[0], e,)) - self.layers.insert(0, layer(handler = self, - frameHandler = self.handler, - effectRate = float(parms[1]), - effectCutoff = float(parms[2]), - paletteColors = palette, - frameRate = self.frameRate, - ledCount = len(self.leds), - blendingMode = parms[3])) - - self.handler.addEffect(self) - - def getFrame(self, eventtime): - if not self.enabled and self.fadeValue <= 0.0: - if self.nextEventTime < self.handler.reactor.NEVER: - # Effect has just been disabled. Set colors to 0 and update once. - self.nextEventTime = self.handler.reactor.NEVER - self.frame = [0.0] * COLORS * self.ledCount - update = True - else: - update = False - else: - update = True - if eventtime >= self.nextEventTime: - self.nextEventTime = eventtime + self.frameRate - - self.frame = [0.0] * COLORS * self.ledCount - for layer in self.layers: - layerFrame = layer.nextFrame(eventtime) - - if layerFrame: - blend = self.blendingModes[layer.blendingMode] - self.frame = [blend(t, b) for t, b in zip(layerFrame, self.frame)] - - if (self.fadeEndTime > eventtime) and (self.fadeTime > 0.0): - remainingFade = ((self.fadeEndTime - eventtime) / self.fadeTime) - else: - remainingFade = 0.0 - - self.fadeValue = 1.0-remainingFade if self.enabled else remainingFade - - return self.frame, update - - def set_enabled(self, state): - if self.enabled != state: - self.enabled = state - self.nextEventTime = self.handler.reactor.NOW - self.handler._getFrames(self.handler.reactor.NOW) - - def reset_frame(self): - for layer in self.layers: - layer.frameNumber = 0 - - def set_fade_time(self, fadetime): - self.fadeTime = fadetime - self.fadeEndTime = self.handler.reactor.monotonic() + fadetime - if self.fadeTime == 0.0: - self.fadeValue = 0.0 - - def cmd_SET_LED_EFFECT(self, gcmd): - parmFadeTime = gcmd.get_float('FADETIME', 0.0) - - if gcmd.get_int('STOP', 0) >= 1: - if self.enabled: - self.set_fade_time(parmFadeTime) - self.set_enabled(False) - else: - if self.recalculate: - kwargs = self.layerTempl.create_template_context() - kwargs['params'] = gcmd.get_command_parameters() - kwargs['rawparams'] = gcmd.get_raw_command_parameters() - self._generateLayers(kwargs) - if gcmd.get_int('REPLACE',0) >= 1: - for led in self.leds: - for effect in self.handler.effects: - if effect is not self and led in effect.leds: - if effect.enabled: - effect.set_fade_time(parmFadeTime) - effect.set_enabled(False) - - if not self.enabled: - self.set_fade_time(parmFadeTime) - if gcmd.get_int('RESTART', 0) >= 1: - self.reset_frame() - self.set_enabled(True) - - def _handle_shutdown(self): - self.set_enabled(self.runOnShutown) - - def adcCallback(self, read_time, read_value): - self.analogValue = int(read_value * 1000.0) / 10.0 - - ###################################################################### - # LED Effect layers - ###################################################################### - - # super class for effect animations. new animations should - # inherit this and return 1 frame of [r, g, b] * - # per call of nextFrame() - class _layerBase(object): - def __init__(self, **kwargs): - self.handler = kwargs['handler'] - self.frameHandler = kwargs['frameHandler'] - self.ledCount = kwargs['ledCount'] - self.paletteColors = colorArray(COLORS, kwargs['paletteColors']) - self.effectRate = kwargs['effectRate'] - self.effectCutoff = kwargs['effectCutoff'] - self.frameRate = kwargs['frameRate'] - self.blendingMode = kwargs['blendingMode'] - self.frameNumber = 0 - self.thisFrame = [] - self.frameCount = 1 - self.lastAnalog = 0 - - def nextFrame(self, eventtime): - if not self.frameCount: - return [0] * COLORS * self.ledCount - self.frameNumber += 1 - self.frameNumber = self.frameNumber * \ - ( self.frameNumber < self.frameCount ) - self.lastFrameTime = eventtime - - return self.thisFrame[self.frameNumber] - - def _decayTable(self, factor=1, rate=1): - - frame = [] - - p = (1.0 / self.frameRate) - r = (p/15.0)*factor - - for s in range(0, int((rate<1)+rate)): - frame.append(1.0) - for x in range(2, int(p / rate)): - b = exp(1)**-(x/r) - if b>.004: - frame.append(b) - return frame - - def _gradient(self, palette, steps, reverse=False, toFirst=False): - palette = colorArray(COLORS, palette[:]) - if reverse: palette.reverse() - - if len(palette) == 1: - return colorArray(COLORS, palette * steps) - - if toFirst: - palette += palette[0] - - paletteIntervals = len(palette)-1 - stepIntervals = steps if toFirst else steps-1 - if stepIntervals != 0: - intervals_per_step = float(paletteIntervals) / stepIntervals - else: - intervals_per_step = 0 - - gradient=palette[0] - - for i in range(1,steps): - j = intervals_per_step * i - k = int(j) - r = j-k - k = min(k, len(palette)-1) - - if ( (k+1) >= len(palette) ) | (r == 0.0) : - z = palette[k] - else: - z = [((1-r)*palette[k][m] + r*palette[k+1][m]) for m in range(COLORS)] - gradient += z - return gradient - - #Individual effects inherit from the LED Effect Base class - #each effect must support the nextFrame() method either by - #using the method from the base class or overriding it. - - #Solid color - class layerStatic(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerStatic, self).__init__(**kwargs) - - self.paletteColors = colorArray(COLORS, self.paletteColors) - - gradientLength = int(self.ledCount) - gradient = colorArray(COLORS, self._gradient(self.paletteColors, - gradientLength)) - - self.thisFrame.append(gradient[0:self.ledCount]) - self.frameCount = len(self.thisFrame) - - #Slow pulsing of color - class layerBreathing(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerBreathing, self).__init__(**kwargs) - - brightness = [] - - p = (1 / self.frameRate) * (self.effectRate * 0.5) - o = int(p) - f = 2 * pi - - for x in range(0, int(p)): - if x < p: - v = (exp(-cos((f / p) * (x+o)))-0.367879) / 2.35040238 - else: - v = 0 - - #clamp values - if v > 1.0: - v = 1.0 - elif v < 0.0: - v = 0.0 - - brightness.append(v) - - for c in range(0, len(self.paletteColors)): - color = self.paletteColors[c] - - for b in brightness: - self.thisFrame += [[b * i for i in color] * self.ledCount] - - self.frameCount = len(self.thisFrame) - class layerLinearFade(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerLinearFade, self).__init__(**kwargs) - - gradientLength = int(self.effectRate / self.frameRate) - if gradientLength == 0: gradientLength = 1 - - gradient = colorArray(COLORS, self._gradient(self.paletteColors, - gradientLength, toFirst=True)) - - for i in range(gradientLength): - self.thisFrame.append(gradient[i]*self.ledCount) - - self.frameCount = len(self.thisFrame) - - #Turns the entire strip on and off - class layerBlink(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerBlink, self).__init__(**kwargs) - - dutyCycle= max(0,min(1.0, self.effectCutoff)) - frameCountOn = int(( 1.0 / self.frameRate ) * self.effectRate\ - * dutyCycle) - frameCountOff = int(( 1.0 / self.frameRate ) * self.effectRate\ - * (1-dutyCycle)) - - for c in range(0, len(self.paletteColors)): - color = self.paletteColors[c] - self.thisFrame += [color * self.ledCount] * frameCountOn - self.thisFrame += [[0]*COLORS * self.ledCount] * frameCountOff - - self.frameCount = len(self.thisFrame) - - #Random flashes with decay - class layerTwinkle(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerTwinkle, self).__init__(**kwargs) - - self.thisFrame = colorArray(COLORS, ([0.0]*COLORS) * self.ledCount) - self.lastBrightness = [-1] * self.ledCount - self.decayTable = self._decayTable(factor=1 / self.effectCutoff) - self.decayLen = len(self.decayTable) - self.colorCount = len(self.paletteColors) - 1 - - def nextFrame(self, eventtime): - - for i in range(0, self.ledCount): - - r = randint(0, self.colorCount) - color = self.paletteColors[r] - - if randint(0, 255) > 254 - self.effectRate: - self.lastBrightness[i] = 0 - self.thisFrame[i] = color - - if self.lastBrightness[i] != -1: - if self.lastBrightness[i] == self.decayLen: - self.lastBrightness[i] = -1 - self.thisFrame[i] = ([0.0]*COLORS) - else: - x = self.lastBrightness[i] - self.lastBrightness[i] += 1 - self.thisFrame[i] = [self.decayTable[x] * l - for l in self.thisFrame[i]] - - return self.thisFrame - - #Blinking with decay - class layerStrobe(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerStrobe, self).__init__(**kwargs) - - frameRate = int(1.0 / self.frameRate) - if self.effectRate==0: - frameCount = 1 - else: - frameCount = max(1,int(frameRate / self.effectRate)) - if self.effectCutoff==0: self.effectCutoff=0.001 - decayTable = self._decayTable(factor=1 / self.effectCutoff, - rate=1) - if len(decayTable) > frameCount: - decayTable = decayTable[:frameCount] - else: - decayTable += [0.0] * (frameCount - len(decayTable)) - - for c in range(0, len(self.paletteColors)): - color = self.paletteColors[c] - - for b in decayTable: - self.thisFrame += [[b * i for i in color] * self.ledCount] - - self.frameCount = len(self.thisFrame) - - #Lights move sequentially with decay - class layerComet(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerComet, self).__init__(**kwargs) - if self.effectRate > 0: - self.direction = True - else: - self.direction = False - self.effectRate *= -1 - - if self.effectCutoff <= 0: self.effectCutoff = .1 - - decayTable = self._decayTable(factor=len(self.paletteColors) * \ - self.effectCutoff, rate=1) - - gradient = self.paletteColors[0] + \ - self._gradient(self.paletteColors[1:], len(decayTable)+1) - - decayTable = [c for b in zip(decayTable, decayTable, decayTable, decayTable) \ - for c in b] - - comet = colorArray(COLORS, [a * b for a, b in zip(gradient,decayTable)]) - - comet.padRight([0.0]*COLORS, self.ledCount - len(comet)) - - if self.direction: comet.reverse() - else: comet.shift(self.ledCount - len(comet)) - - if self.effectRate == 0: - self.thisFrame.append(comet[0:self.ledCount]) - else: - for i in range(len(comet)): - comet.shift(int(self.effectRate+(self.effectRate < 1)), - self.direction) - self.thisFrame.append(comet[:self.ledCount]) - - for x in range(int((1/self.effectRate)-(self.effectRate <= 1))): - self.thisFrame.append(comet[:self.ledCount]) - - self.frameCount = len(self.thisFrame) - - #Lights move sequentially with decay - class layerChase(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerChase, self).__init__(**kwargs) - - if self.effectRate > 0: - self.direction = True - else: - self.direction = False - self.effectRate *= -1 - - if len(self.paletteColors) == 1: - self.paletteColors += colorArray(COLORS,COLORS*[0]) - - decayTable = self._decayTable(factor=len(self.paletteColors) * \ - self.effectCutoff, rate=1) - - gradient = self.paletteColors[0] + \ - self._gradient(self.paletteColors[1:], len(decayTable)+1) - - decayTable = [c for b in zip(decayTable, decayTable, decayTable, decayTable) \ - for c in b] - gradient = colorArray(COLORS, [a * b - for a, b in zip(gradient,decayTable)]) - - k=int(self.ledCount/len(gradient))+1 - chase = colorArray(COLORS,k*gradient) - - if self.direction: chase.reverse() - if self.effectRate == 0: - self.thisFrame.append(chase[0:self.ledCount]) - else: - for _ in range(len(chase)): - chase.shift(int(self.effectRate+(self.effectRate < 1)), - self.direction) - self.thisFrame.append(chase[0:self.ledCount]) - - for _ in range(int((1/self.effectRate)-(self.effectRate <= 1))): - self.thisFrame.append(chase[0:self.ledCount]) - - self.frameCount = len(self.thisFrame) - - #Color gradient over all LEDs - class layerGradient(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerGradient, self).__init__(**kwargs) - - direction = -1 if self.effectRate < 0 else 1 - - if self.effectRate == 0: - gradientLength = self.ledCount - else: - gradientLength=abs(int(1/(self.effectRate * self.frameRate))) - gradient = colorArray(COLORS, self._gradient(self.paletteColors, - gradientLength, - toFirst=True)) - - for i in range(gradientLength if self.effectRate != 0 else 1): - frame = colorArray(COLORS, ([0.0]*COLORS) * self.ledCount) - for led in range(self.ledCount): - frame[led] = gradient[ int(i*direction + \ - self.effectCutoff * gradientLength * led \ - / self.ledCount ) % gradientLength] - self.thisFrame.append(frame) - - self.frameCount = len(self.thisFrame) - - class layerPattern(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerPattern, self).__init__(**kwargs) - - self.paletteColors = colorArray(COLORS, self.paletteColors) - frame = colorArray(COLORS, []) - - for i in range(int(self.ledCount/len(self.paletteColors))+1): - frame+=(self.paletteColors) - - if int(self.effectRate/self.frameRate) == 0: - self.thisFrame.append(frame) - else: - for _ in range(len(self.paletteColors) * (self.ledCount-1)): - for _ in range(int(self.effectRate/self.frameRate)): - self.thisFrame.append(colorArray(COLORS, frame)[:COLORS*self.ledCount]) - frame.shift(int(self.effectCutoff)) - - self.frameCount = len(self.thisFrame) - - #Responds to heater temperature - class layerHeater(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerHeater, self).__init__(**kwargs) - - if len(self.paletteColors) == 1: - self.paletteColors += self.paletteColors - - gradient = colorArray(COLORS, self._gradient(self.paletteColors[:-1], 200) + - self.paletteColors[-1:]) - - for i in range(len(gradient)): - self.thisFrame.append(gradient[i] * self.ledCount) - - self.frameCount = len(self.thisFrame) - - def nextFrame(self, eventtime): - heaterTarget = self.frameHandler.heaterTarget[self.handler.heater] - heaterCurrent = self.frameHandler.heaterCurrent[self.handler.heater] - heaterLast = self.frameHandler.heaterLast[self.handler.heater] - - if heaterTarget > 0.0 and heaterCurrent > 0.0: - if (heaterCurrent >= self.effectRate): - if (heaterCurrent <= heaterTarget-2): - s = int(((heaterCurrent - self.effectRate) / heaterTarget) * 200) - s = min(len(self.thisFrame)-1,s) - return self.thisFrame[s] - elif self.effectCutoff > 0: - return None - else: - return self.thisFrame[-1] - else: - return None - - elif self.effectRate > 0 and heaterCurrent > 0.0: - if heaterCurrent >= self.effectRate and heaterLast > 0: - s = int(((heaterCurrent - self.effectRate) / heaterLast) * 200) - s = min(len(self.thisFrame)-1,s) - return self.thisFrame[s] - - return None - - #Responds to heater temperature - class layerTemperature(_layerBase): - def __init__(self, **kwargs): - - super(ledEffect.layerTemperature, self).__init__(**kwargs) - if len(self.paletteColors) == 1: - self.paletteColors = colorArray(COLORS, ([0.0]*COLORS)) + self.paletteColors - gradient = colorArray(COLORS, self._gradient(self.paletteColors, 200)) - for i in range(len(gradient)): - self.thisFrame.append(gradient[i] * self.ledCount) - self.frameCount = len(self.thisFrame) - def nextFrame(self, eventtime): - if self.effectCutoff == self.effectRate: - s = 200 if self.frameHandler.heaterCurrent[self.handler.heater] >= self.effectRate else 0 - else: - s = int(((self.frameHandler.heaterCurrent[self.handler.heater] - - self.effectRate) / - (self.effectCutoff - self.effectRate)) * 200) - - s = min(len(self.thisFrame)-1,s) - s = max(0,s) - return self.thisFrame[s] - - #Responds to analog pin voltage - class layerAnalogPin(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerAnalogPin, self).__init__(**kwargs) - - if len(self.paletteColors) == 1: - self.paletteColors = [0.0]*COLORS + self.paletteColors - - gradient = colorArray(COLORS, self._gradient(self.paletteColors, 101)) - - for i in range(len(gradient)): - self.thisFrame.append(gradient[i] * self.ledCount) - - def nextFrame(self, eventtime): - v = int(self.handler.analogValue * self.effectRate) - - if v > 100: v = 100 - - if v > self.effectCutoff: - return self.thisFrame[v] - else: - return self.thisFrame[0] - - #Lights illuminate relative to stepper position - class layerStepper(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerStepper, self).__init__(**kwargs) - - if self.effectRate < 0: - self.effectRate = self.ledCount - - if self.effectCutoff < 0: - self.effectCutoff = self.ledCount - - if self.effectRate == 0: - trailing = colorArray(COLORS, [0.0]*COLORS * self.ledCount) - else: - trailing = colorArray(COLORS, self._gradient(self.paletteColors[1:], - int(self.effectRate), True)) - trailing.padLeft([0.0]*COLORS, self.ledCount) - - if self.effectCutoff == 0: - leading = colorArray(COLORS, [0.0]*COLORS * self.ledCount) - else: - leading = colorArray(COLORS, self._gradient(self.paletteColors[1:], - int(self.effectCutoff), False)) - leading.padRight([0.0]*COLORS, self.ledCount) - - gradient = colorArray(COLORS, trailing + self.paletteColors[0] + leading) - gradient.shift(len(trailing)-1, 0) - frames = [gradient[:self.ledCount]] - - for i in range(0, self.ledCount): - gradient.shift(1,1) - frames.append(gradient[:self.ledCount]) - - for i in range(101): - x = int((i / 101.0) * self.ledCount) - self.thisFrame.append(frames[x]) - - self.frameCount = len(self.thisFrame) - - def nextFrame(self, eventtime): - if self.handler.stepper == 'x': axis = 0 - elif self.handler.stepper == 'y': axis = 1 - else: axis = 2 - - p = self.frameHandler.stepperPositions[int(axis)] - - if p < 0 : p=0 - if p > 100 : p=100 - return self.thisFrame[int((p - 1) * (p > 0))] - - class layerStepperColor(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerStepperColor, self).__init__(**kwargs) - - if len(self.paletteColors) == 1: - self.paletteColors = [0.0]*COLORS + self.paletteColors - - gradient = colorArray(COLORS, self._gradient(self.paletteColors, 101)) - - for i in range(len(gradient)): - self.thisFrame.append(gradient[i] * self.ledCount) - - def nextFrame(self, eventtime): - if self.handler.stepper == 'x': axis = 0 - elif self.handler.stepper == 'y': axis = 1 - else: axis = 2 - - p = self.frameHandler.stepperPositions[int(axis)]*self.effectRate+self.effectCutoff - - if p < 0 : p=0 - if p > 100 : p=100 - - return self.thisFrame[int(p)] - - #Shameless port of Fire2012 by Mark Kriegsman - - #Shamelessly appropriated from the Arduino FastLED example files - #Fire2012.ino by Daniel Garcia - class layerFire(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerFire, self).__init__(**kwargs) - - self.heatMap = [0.0] * self.ledCount - self.gradient = colorArray(COLORS, self._gradient(self.paletteColors, - 102)) - self.frameLen = len(self.gradient) - self.heatLen = len(self.heatMap) - self.heatSource = int(self.ledCount / 10.0) - self.effectRate = int(self.effectRate) - - if self.heatSource < 1: - self.heatSource = 1 - - def nextFrame(self, eventtime): - frame = [] - - for h in range(self.heatLen): - c = randint(0,self.effectCutoff) - self.heatMap[h] -= (self.heatMap[h] - c >= 0 ) * c - - for i in range(self.ledCount - 1, self.heatSource, -1): - d = (self.heatMap[i - 1] + - self.heatMap[i - 2] + - self.heatMap[i - 3] ) / 3 - - self.heatMap[i] = d * (d >= 0) - - if randint(0, 100) < self.effectRate: - h = randint(0, self.heatSource) - self.heatMap[h] += randint(90,100) - if self.heatMap[h] > 100: - self.heatMap[h] = 100 - - for h in self.heatMap: - frame += self.gradient[int(h)] - - return frame - - #Fire that responds relative to actual vs target temp - class layerHeaterFire(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerHeaterFire, self).__init__(**kwargs) - - self.heatMap = [0.0] * self.ledCount - self.gradient = colorArray(COLORS, self._gradient(self.paletteColors, - 102)) - self.frameLen = len(self.gradient) - self.heatLen = len(self.heatMap) - self.heatSource = int(self.ledCount / 10.0) - self.effectRate = 0 - - if self.heatSource < 1: - self.heatSource = 1 - - def nextFrame(self, eventtime): - frame = [] - spark = 0 - heaterTarget = self.frameHandler.heaterTarget[self.handler.heater] - heaterCurrent = self.frameHandler.heaterCurrent[self.handler.heater] - heaterLast = self.frameHandler.heaterLast[self.handler.heater] - - if heaterTarget > 0.0 and heaterCurrent > 0.0: - if heaterCurrent <= heaterTarget-2: - spark = int((heaterCurrent / heaterTarget) * 80) - brightness = int((heaterCurrent / heaterTarget) * 100) - elif self.effectCutoff > 0: - spark = 0 - else: - spark = 80 - brightness = 100 - elif self.effectRate > 0 and heaterCurrent > 0.0: - if heaterCurrent >= self.effectRate: - spark = int(((heaterCurrent - self.effectRate) - / heaterLast) * 80) - brightness = int(((heaterCurrent - self.effectRate) - / heaterLast) * 100) - - if spark > 0: - cooling = int((heaterCurrent / heaterTarget) * 20) - - for h in range(self.heatLen): - c = randint(0, cooling) - self.heatMap[h] -= (self.heatMap[h] - c >= 0 ) * c - - for i in range(self.ledCount - 1, self.heatSource, -1): - d = (self.heatMap[i - 1] + - self.heatMap[i - 2] + - self.heatMap[i - 3] ) / 3 - - self.heatMap[i] = d * (d >= 0) - - if randint(0, 100) < spark: - h = randint(0, self.heatSource) - self.heatMap[h] += brightness - if self.heatMap[h] > 100: - self.heatMap[h] = 100 - - for h in self.heatMap: - frame += self.gradient[int(h)] - - return frame - - else: - return None - - #Progress bar using M73 gcode command - class layerProgress(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerProgress, self).__init__(**kwargs) - - if self.effectRate < 0: - self.effectRate = self.ledCount - - if self.effectCutoff < 0: - self.effectCutoff = self.ledCount - - if self.effectRate == 0: - trailing = colorArray(COLORS, [0.0]*COLORS * self.ledCount) - else: - trailing = colorArray(COLORS, self._gradient(self.paletteColors[1:], - int(self.effectRate), True)) - trailing.padLeft([0.0]*COLORS, self.ledCount) - - if self.effectCutoff == 0: - leading = colorArray(COLORS, [0.0]*COLORS * self.ledCount) - else: - leading = colorArray(COLORS, self._gradient(self.paletteColors[1:], - int(self.effectCutoff), False)) - leading.padRight([0.0]*COLORS, self.ledCount) - - gradient = colorArray(COLORS, trailing + self.paletteColors[0] + leading) - gradient.shift(len(trailing), 0) - frames = [gradient[:self.ledCount]] - - for i in range(0, self.ledCount): - gradient.shift(1,1) - frames.append(gradient[:self.ledCount]) - - self.thisFrame.append(colorArray(COLORS, [0.0]*COLORS * self.ledCount)) - for i in range(1, 101): - x = int((i / 101.0) * self.ledCount) - self.thisFrame.append(frames[x]) - - self.frameCount = len(self.thisFrame) - - def nextFrame(self, eventtime): - p = self.frameHandler.printProgress - return self.thisFrame[p] #(p - 1) * (p > 0)] - - class layerHoming(_layerBase): - def __init__(self, **kwargs): - super(ledEffect.layerHoming, self).__init__(**kwargs) - - self.paletteColors = colorArray(COLORS, self.paletteColors) - - gradientLength = int(self.ledCount) - gradient = colorArray(COLORS, self._gradient(self.paletteColors, - gradientLength)) - - for c in range(0, len(self.paletteColors)): - color = self.paletteColors[c] - self.thisFrame.append(colorArray(COLORS,color*self.ledCount)) - - self.decayTable = self._decayTable(factor=self.effectRate) - self.decayTable.append(0.0) - self.decayLen = len(self.decayTable) - self.counter=self.decayLen-1 - self.coloridx=-1 - self.my_flag={} - for endstop in self.handler.endstops: - logging.info(endstop) - self.frameHandler.homing_end_flag[endstop] = 0 - self.my_flag[endstop] = self.frameHandler.homing_end_flag[endstop] - - def nextFrame(self, eventtime): - for endstop in self.handler.endstops: - - if self.my_flag[endstop] != self.frameHandler.homing_end_flag[endstop]: - self.counter = 0 - self.coloridx = (self.coloridx + 1) % len(self.paletteColors) - self.my_flag[endstop] = self.frameHandler.homing_end_flag[endstop] - - frame = [self.decayTable[self.counter] * i for i in self.thisFrame[self.coloridx ]] - if self.counter < self.decayLen-1: - self.counter += 1 - - return frame - - -def load_config_prefix(config): - return ledEffect(config) diff --git a/src/led_effect.py b/src/led_effect.py new file mode 120000 index 0000000..4d75c4b --- /dev/null +++ b/src/led_effect.py @@ -0,0 +1 @@ +../packages/led_effect/led_effect/led_effect_plugin.py \ No newline at end of file